@drincs/pixi-vn-ink 1.1.6 → 1.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-43G7C5XM.mjs → chunk-3R2P6EQ6.mjs} +1 -1
- package/dist/chunk-YWN2COY2.mjs +102 -0
- package/dist/converter.cjs +63 -63
- package/dist/converter.d.cts +2 -2
- package/dist/converter.d.ts +2 -2
- package/dist/converter.mjs +63 -63
- package/dist/dev-api.d.cts +1 -1
- package/dist/dev-api.d.ts +1 -1
- package/dist/index.cjs +68 -68
- package/dist/index.d.cts +55 -5
- package/dist/index.d.ts +55 -5
- package/dist/index.mjs +1 -1
- package/dist/parser.cjs +63 -63
- package/dist/parser.d.cts +55 -10
- package/dist/parser.d.ts +55 -10
- package/dist/parser.mjs +63 -63
- package/dist/{type-BGTAgF_z.d.cts → type-BT9cgN0v.d.cts} +1 -1
- package/dist/{type-YZ100Ygy.d.ts → type-CXgR5btz.d.ts} +1 -1
- package/dist/{types-CbD_iwdO.d.cts → types-BDZq79IH.d.cts} +56 -4
- package/dist/{types-CbD_iwdO.d.ts → types-BDZq79IH.d.ts} +56 -4
- package/dist/vite-listener.cjs +73 -73
- package/dist/vite-listener.d.cts +2 -2
- package/dist/vite-listener.d.ts +2 -2
- package/dist/vite-listener.mjs +1 -1
- package/dist/vite.cjs +60 -60
- package/dist/vite.d.cts +1 -1
- package/dist/vite.d.ts +1 -1
- package/dist/vite.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-OUJBCOTD.mjs +0 -102
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import {RegisteredCharacters}from'@drincs/pixi-vn/characters';import E,{ZodType}from'zod';import {PixiError,createExportableElement}from'@drincs/pixi-vn';import {canvas,VideoSprite,showVideo,Assets,Text,showText,ImageSprite,showImage,ImageContainer,showImageContainer,shakeEffect,pushOut,zoomOut,moveOut,removeWithDissolve,removeWithFade,pushIn,zoomIn,moveIn,showWithDissolve,showWithFade}from'@drincs/pixi-vn/canvas';import {NarrationManagerStatic,narration,RegisteredLabels,LabelAbstract}from'@drincs/pixi-vn/narration';import {sound}from'@drincs/pixi-vn/sound';import {storage}from'@drincs/pixi-vn/storage';import Nh from'ajv';import HC from'ajv/dist/2020';var Bh=Object.create;var Gl=Object.defineProperty;var Wh=Object.getOwnPropertyDescriptor;var qh=Object.getOwnPropertyNames;var Mh=Object.getPrototypeOf,Gh=Object.prototype.hasOwnProperty;var Ot=(i=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(i,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):i)(function(i){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+i+'" is not supported')});var O=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports);var $h=(i,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of qh(e))!Gh.call(i,r)&&r!==t&&Gl(i,r,{get:()=>e[r],enumerable:!(n=Wh(e,r))||n.enumerable});return i};var Zs=(i,e,t)=>(t=i!=null?Bh(Mh(i)):{},$h(e||!i||!i.__esModule?Gl(t,"default",{value:i,enumerable:true}):t,i));var Ca=O(Ai=>{Object.defineProperty(Ai,"__esModule",{value:true});Ai.CompilerOptions=void 0;var ga=class{constructor(e=null,t=[],n=false,r=null,a=null){this.sourceFilename=e,this.pluginNames=t,this.countAllVisits=n,this.errorHandler=r,this.fileHandler=a;}};Ai.CompilerOptions=ga;});var ku=O(wi=>{Object.defineProperty(wi,"__esModule",{value:true});wi.DebugSourceRange=void 0;var ya=class{constructor(e,t,n){this.length=e,this.debugMetadata=t,this.text=n;}};wi.DebugSourceRange=ya;});var Kt=O(xi=>{Object.defineProperty(xi,"__esModule",{value:true});xi.ErrorType=void 0;var Ru;(function(i){i[i.Author=0]="Author",i[i.Warning=1]="Warning",i[i.Error=2]="Error";})(Ru||(xi.ErrorType=Ru={}));});var Lu=O(_i=>{Object.defineProperty(_i,"__esModule",{value:true});_i.Argument=void 0;var va=class{constructor(e=null,t=null,n=null){this.identifier=e,this.isByReference=t,this.isDivertTarget=n;}get typeName(){return "Argument"}};_i.Argument=va;});var U=O(he=>{Object.defineProperty(he,"__esModule",{value:true});he.filterUndef=he.isEquatable=he.nullIfUndefined=he.asINamedContentOrNull=he.asBooleanOrThrows=he.asNumberOrThrows=he.asOrThrows=he.asOrNull=void 0;function nd(i,e){return i instanceof e?ju(i):null}he.asOrNull=nd;function id(i,e){if(i instanceof e)return ju(i);throw new Error(`${i} is not of type ${e}`)}he.asOrThrows=id;function rd(i){if(typeof i=="number")return i;throw new Error(`${i} is not a number`)}he.asNumberOrThrows=rd;function sd(i){if(typeof i=="boolean")return i;throw new Error(`${i} is not a boolean`)}he.asBooleanOrThrows=sd;function ad(i){return i.hasValidName&&i.name?i:null}he.asINamedContentOrNull=ad;function od(i){return typeof i>"u"?null:i}he.nullIfUndefined=od;function ld(i){return typeof i=="object"&&typeof i.Equals=="function"}he.isEquatable=ld;function ju(i,e){return i}function ud(i){return i!=null}he.filterUndef=ud;});var te=O(Oi=>{Object.defineProperty(Oi,"__esModule",{value:true});Oi.ParsedObject=void 0;var Bu=U(),ba=class{constructor(){this._alreadyHadError=false,this._alreadyHadWarning=false,this._debugMetadata=null,this._runtimeObject=null,this.content=[],this.parent=null,this.GetType=()=>this.typeName,this.AddContent=e=>{this.content===null&&(this.content=[]);let t=Array.isArray(e)?e:[e];for(let n of t)n.hasOwnProperty("parent")&&(n.parent=this),this.content.push(n);if(!Array.isArray(e))return e},this.InsertContent=(e,t)=>(this.content===null&&(this.content=[]),t.parent=this,this.content.splice(e,0,t),t),this.Find=e=>(t=null)=>{let n=(0, Bu.asOrNull)(this,e);if(n!==null&&(t===null||t(n)===true))return n;if(this.content===null)return null;for(let r of this.content){let a=r.Find&&r.Find(e)(t);if(a)return a}return null},this.FindAll=e=>(t,n)=>{let r=Array.isArray(n)?n:[],a=(0, Bu.asOrNull)(this,e);if(a!==null&&(!t||t(a)===true)&&r.push(a),this.content===null)return [];for(let s of this.content)s.FindAll&&s.FindAll(e)(t,r);return r},this.Warning=(e,t=null)=>{this.Error(e,t,true);};}get debugMetadata(){return this._debugMetadata===null&&this.parent?this.parent.debugMetadata:this._debugMetadata}set debugMetadata(e){this._debugMetadata=e;}get hasOwnDebugMetadata(){return !!this.debugMetadata}get typeName(){return "ParsedObject"}get story(){let e=this;for(;e.parent;)e=e.parent;return e}get runtimeObject(){return this._runtimeObject||(this._runtimeObject=this.GenerateRuntimeObject(),this._runtimeObject&&(this._runtimeObject.debugMetadata=this.debugMetadata)),this._runtimeObject}set runtimeObject(e){this._runtimeObject=e;}get runtimePath(){if(!this.runtimeObject.path)throw new Error;return this.runtimeObject.path}get containerForCounting(){return this.runtimeObject}get ancestry(){let e=[],t=this.parent;for(;t;)e.push(t),t=t.parent;return e=e.reverse(),e}ResolveReferences(e){if(this.content!==null)for(let t of this.content)t.ResolveReferences(e);}Error(e,t=null,n=false){if(t===null&&(t=this),!(t._alreadyHadError&&!n||t._alreadyHadWarning&&n)){if(this.parent)this.parent.Error(e,t,n);else throw new Error(`No parent object to send error to: ${e}`);n?t._alreadyHadWarning=true:t._alreadyHadError=true;}}};Oi.ParsedObject=ba;});var Ti=O(Pi=>{Object.defineProperty(Pi,"__esModule",{value:true});Pi.AuthorWarning=void 0;var cd=te(),Sa=class extends cd.ParsedObject{constructor(e){super(),this.warningMessage=e,this.GenerateRuntimeObject=()=>(this.Warning(this.warningMessage),null);}get typeName(){return "AuthorWarning"}};Pi.AuthorWarning=Sa;});var Pe=O(On=>{Object.defineProperty(On,"__esModule",{value:true});On.Path=void 0;var Xt=class i{constructor(){if(this._components=[],this._componentsString=null,this._isRelative=false,typeof arguments[0]=="string"){let e=arguments[0];this.componentsString=e;}else if(arguments[0]instanceof i.Component&&arguments[1]instanceof i){let e=arguments[0],t=arguments[1];this._components.push(e),this._components=this._components.concat(t._components);}else if(arguments[0]instanceof Array){let e=arguments[0],t=!!arguments[1];this._components=this._components.concat(e),this._isRelative=t;}}get isRelative(){return this._isRelative}get componentCount(){return this._components.length}get head(){return this._components.length>0?this._components[0]:null}get tail(){if(this._components.length>=2){let e=this._components.slice(1,this._components.length);return new i(e)}else return i.self}get length(){return this._components.length}get lastComponent(){let e=this._components.length-1;return e>=0?this._components[e]:null}get containsNamedComponent(){for(let e=0,t=this._components.length;e<t;e++)if(!this._components[e].isIndex)return true;return false}static get self(){let e=new i;return e._isRelative=true,e}GetComponent(e){return this._components[e]}PathByAppendingPath(e){let t=new i,n=0;for(let r=0;r<e._components.length&&e._components[r].isParent;++r)n++;for(let r=0;r<this._components.length-n;++r)t._components.push(this._components[r]);for(let r=n;r<e._components.length;++r)t._components.push(e._components[r]);return t}get componentsString(){return this._componentsString==null&&(this._componentsString=this._components.join("."),this.isRelative&&(this._componentsString="."+this._componentsString)),this._componentsString}set componentsString(e){if(this._components.length=0,this._componentsString=e,this._componentsString==null||this._componentsString=="")return;this._componentsString[0]=="."&&(this._isRelative=true,this._componentsString=this._componentsString.substring(1));let t=this._componentsString.split(".");for(let n of t)/^(\-|\+)?([0-9]+|Infinity)$/.test(n)?this._components.push(new i.Component(parseInt(n))):this._components.push(new i.Component(n));}toString(){return this.componentsString}Equals(e){if(e==null||e._components.length!=this._components.length||e.isRelative!=this.isRelative)return false;for(let t=0,n=e._components.length;t<n;t++)if(!e._components[t].Equals(this._components[t]))return false;return true}PathByAppendingComponent(e){let t=new i;return t._components.push(...this._components),t._components.push(e),t}};On.Path=Xt;Xt.parentId="^";(function(i){class e{constructor(n){this.index=-1,this.name=null,typeof n=="string"?this.name=n:this.index=n;}get isIndex(){return this.index>=0}get isParent(){return this.name==i.parentId}static ToParent(){return new e(i.parentId)}toString(){return this.isIndex?this.index.toString():this.name}Equals(n){return n!=null&&n.isIndex==this.isIndex?this.isIndex?this.index==n.index:this.name==n.name:false}}i.Component=e;})(Xt||(On.Path=Xt={}));});var Pn=O(Fi=>{Object.defineProperty(Fi,"__esModule",{value:true});Fi.Debug=void 0;var Wu;(function(i){function e(n,r,a){t(n instanceof r,a);}i.AssertType=e;function t(n,r){if(!n)throw typeof r<"u"&&console.warn(r),console.trace&&console.trace(),new Error("")}i.Assert=t;})(Wu||(Fi.Debug=Wu={}));});var ge=O(Yt=>{Object.defineProperty(Yt,"__esModule",{value:true});Yt.throwNullException=Yt.NullException=void 0;var Ni=class extends Error{};Yt.NullException=Ni;function hd(i){throw new Ni(`${i} is null or undefined`)}Yt.throwNullException=hd;});var Te=O(Vi=>{Object.defineProperty(Vi,"__esModule",{value:true});Vi.InkObject=void 0;var Zt=Pe(),Tn=oe(),Ea=Pn(),Qt=U(),Ii=ge(),Da=class{constructor(){this.parent=null,this._debugMetadata=null,this._path=null;}get debugMetadata(){return this._debugMetadata===null&&this.parent?this.parent.debugMetadata:this._debugMetadata}set debugMetadata(e){this._debugMetadata=e;}get ownDebugMetadata(){return this._debugMetadata}DebugLineNumberOfPath(e){if(e===null)return null;let t=this.rootContentContainer;if(t){let n=t.ContentAtPath(e).obj;if(n){let r=n.debugMetadata;if(r!==null)return r.startLineNumber}}return null}get path(){if(this._path==null)if(this.parent==null)this._path=new Zt.Path;else {let e=[],t=this,n=(0, Qt.asOrNull)(t.parent,Tn.Container);for(;n!==null;){let r=(0, Qt.asINamedContentOrNull)(t);if(r!=null&&r.hasValidName){if(r.name===null)return (0, Ii.throwNullException)("namedChild.name");e.unshift(new Zt.Path.Component(r.name));}else e.unshift(new Zt.Path.Component(n.content.indexOf(t)));t=n,n=(0, Qt.asOrNull)(n.parent,Tn.Container);}this._path=new Zt.Path(e);}return this._path}ResolvePath(e){if(e===null)return (0, Ii.throwNullException)("path");if(e.isRelative){let t=(0, Qt.asOrNull)(this,Tn.Container);return t===null&&(Ea.Debug.Assert(this.parent!==null,"Can't resolve relative path because we don't have a parent"),t=(0, Qt.asOrNull)(this.parent,Tn.Container),Ea.Debug.Assert(t!==null,"Expected parent to be a container"),Ea.Debug.Assert(e.GetComponent(0).isParent),e=e.tail),t===null?(0, Ii.throwNullException)("nearestContainer"):t.ContentAtPath(e)}else {let t=this.rootContentContainer;return t===null?(0, Ii.throwNullException)("contentContainer"):t.ContentAtPath(e)}}ConvertPathToRelative(e){let t=this.path,n=Math.min(e.length,t.length),r=-1;for(let l=0;l<n;++l){let u=t.GetComponent(l),c=e.GetComponent(l);if(u.Equals(c))r=l;else break}if(r==-1)return e;let a=t.componentCount-1-r,s=[];for(let l=0;l<a;++l)s.push(Zt.Path.Component.ToParent());for(let l=r+1;l<e.componentCount;++l)s.push(e.GetComponent(l));return new Zt.Path(s,true)}CompactPathString(e){let t=null,n=null;return e.isRelative?(n=e.componentsString,t=this.path.PathByAppendingPath(e).componentsString):(n=this.ConvertPathToRelative(e).componentsString,t=e.componentsString),n.length<t.length?n:t}get rootContentContainer(){let e=this;for(;e.parent;)e=e.parent;return (0, Qt.asOrNull)(e,Tn.Container)}Copy(){throw Error("Not Implemented: Doesn't support copying")}SetChild(e,t,n){e[t]&&(e[t]=null),e[t]=n,e[t]&&(e[t].parent=this);}Equals(e){return e===this}};Vi.InkObject=Da;});var It=O(ki=>{Object.defineProperty(ki,"__esModule",{value:true});ki.StringBuilder=void 0;var Aa=class{constructor(e){e=typeof e<"u"?e.toString():"",this.string=e;}get Length(){return this.string.length}Append(e){e!==null&&(this.string+=e);}AppendLine(e){typeof e<"u"&&this.Append(e),this.string+=`
|
|
2
|
+
`;}AppendFormat(e,...t){this.string+=e.replace(/{(\d+)}/g,(n,r)=>typeof t[r]<"u"?t[r]:n);}toString(){return this.string}Clear(){this.string="";}};ki.StringBuilder=Aa;});var Ne=O(en=>{Object.defineProperty(en,"__esModule",{value:true});en.InkList=en.InkListItem=void 0;var Ye=ge(),pd=It(),Fe=class i{constructor(){if(this.originName=null,this.itemName=null,typeof arguments[1]<"u"){let e=arguments[0],t=arguments[1];this.originName=e,this.itemName=t;}else if(arguments[0]){let t=arguments[0].toString().split(".");this.originName=t[0],this.itemName=t[1];}}static get Null(){return new i(null,null)}get isNull(){return this.originName==null&&this.itemName==null}get fullName(){return (this.originName!==null?this.originName:"?")+"."+this.itemName}toString(){return this.fullName}Equals(e){if(e instanceof i){let t=e;return t.itemName==this.itemName&&t.originName==this.originName}return false}copy(){return new i(this.originName,this.itemName)}serialized(){return JSON.stringify({originName:this.originName,itemName:this.itemName})}static fromSerializedKey(e){let t=JSON.parse(e);if(!i.isLikeInkListItem(t))return i.Null;let n=t;return new i(n.originName,n.itemName)}static isLikeInkListItem(e){return !(typeof e!="object"||!e.hasOwnProperty("originName")||!e.hasOwnProperty("itemName")||typeof e.originName!="string"&&typeof e.originName!==null||typeof e.itemName!="string"&&typeof e.itemName!==null)}};en.InkListItem=Fe;var wa=class i extends Map{constructor(){if(super(arguments[0]instanceof i?arguments[0]:[]),this.origins=null,this._originNames=[],arguments[0]instanceof i){let e=arguments[0],t=e.originNames;t!==null&&(this._originNames=t.slice()),e.origins!==null&&(this.origins=e.origins.slice());}else if(typeof arguments[0]=="string"){let e=arguments[0],t=arguments[1];if(this.SetInitialOriginName(e),t.listDefinitions===null)return (0, Ye.throwNullException)("originStory.listDefinitions");let n=t.listDefinitions.TryListGetDefinition(e,null);if(n.exists){if(n.result===null)return (0, Ye.throwNullException)("def.result");this.origins=[n.result];}else throw new Error("InkList origin could not be found in story when constructing new list: "+e)}else if(typeof arguments[0]=="object"&&arguments[0].hasOwnProperty("Key")&&arguments[0].hasOwnProperty("Value")){let e=arguments[0];this.Add(e.Key,e.Value);}}static FromString(e,t){var n;if(e==null||e=="")return new i;let r=(n=t.listDefinitions)===null||n===void 0?void 0:n.FindSingleItemListWithName(e);if(r)return r.value===null?(0, Ye.throwNullException)("listValue.value"):new i(r.value);throw new Error("Could not find the InkListItem from the string '"+e+"' to create an InkList because it doesn't exist in the original list definition in ink.")}AddItem(e,t=null){if(e instanceof Fe){let n=e;if(n.originName==null){this.AddItem(n.itemName);return}if(this.origins===null)return (0, Ye.throwNullException)("this.origins");for(let r of this.origins)if(r.name==n.originName){let a=r.TryGetValueForItem(n,0);if(a.exists){this.Add(n,a.result);return}else throw new Error("Could not add the item "+n+" to this list because it doesn't exist in the original list definition in ink.")}throw new Error("Failed to add item to list because the item was from a new list definition that wasn't previously known to this list. Only items from previously known lists can be used, so that the int value can be found.")}else if(e!==null){let n=e,r=null;if(this.origins===null)return (0, Ye.throwNullException)("this.origins");for(let a of this.origins){if(n===null)return (0, Ye.throwNullException)("itemName");if(a.ContainsItemWithName(n)){if(r!=null)throw new Error("Could not add the item "+n+" to this list because it could come from either "+a.name+" or "+r.name);r=a;}}if(r==null){if(t==null)throw new Error("Could not add the item "+n+" to this list because it isn't known to any list definitions previously associated with this list.");{let a=i.FromString(n,t).orderedItems[0];this.Add(a.Key,a.Value);}}else {let a=new Fe(r.name,n),s=r.ValueForItem(a);this.Add(a,s);}}}ContainsItemNamed(e){for(let[t]of this)if(Fe.fromSerializedKey(t).itemName==e)return true;return false}ContainsKey(e){return this.has(e.serialized())}Add(e,t){let n=e.serialized();if(this.has(n))throw new Error(`The Map already contains an entry for ${e}`);this.set(n,t);}Remove(e){return this.delete(e.serialized())}get Count(){return this.size}get originOfMaxItem(){if(this.origins==null)return null;let e=this.maxItem.Key.originName,t=null;return this.origins.every(n=>n.name==e?(t=n,false):true),t}get originNames(){if(this.Count>0){this._originNames==null&&this.Count>0?this._originNames=[]:(this._originNames||(this._originNames=[]),this._originNames.length=0);for(let[e]of this){let t=Fe.fromSerializedKey(e);if(t.originName===null)return (0, Ye.throwNullException)("item.originName");this._originNames.push(t.originName);}}return this._originNames}SetInitialOriginName(e){this._originNames=[e];}SetInitialOriginNames(e){e==null?this._originNames=null:this._originNames=e.slice();}get maxItem(){let e={Key:Fe.Null,Value:0};for(let[t,n]of this){let r=Fe.fromSerializedKey(t);(e.Key.isNull||n>e.Value)&&(e={Key:r,Value:n});}return e}get minItem(){let e={Key:Fe.Null,Value:0};for(let[t,n]of this){let r=Fe.fromSerializedKey(t);(e.Key.isNull||n<e.Value)&&(e={Key:r,Value:n});}return e}get inverse(){let e=new i;if(this.origins!=null)for(let t of this.origins)for(let[n,r]of t.items){let a=Fe.fromSerializedKey(n);this.ContainsKey(a)||e.Add(a,r);}return e}get all(){let e=new i;if(this.origins!=null)for(let t of this.origins)for(let[n,r]of t.items){let a=Fe.fromSerializedKey(n);e.set(a.serialized(),r);}return e}Union(e){let t=new i(this);for(let[n,r]of e)t.set(n,r);return t}Intersect(e){let t=new i;for(let[n,r]of this)e.has(n)&&t.set(n,r);return t}HasIntersection(e){for(let[t]of this)if(e.has(t))return true;return false}Without(e){let t=new i(this);for(let[n]of e)t.delete(n);return t}Contains(e){if(typeof e=="string")return this.ContainsItemNamed(e);let t=e;if(t.size==0||this.size==0)return false;for(let[n]of t)if(!this.has(n))return false;return true}GreaterThan(e){return this.Count==0?false:e.Count==0?true:this.minItem.Value>e.maxItem.Value}GreaterThanOrEquals(e){return this.Count==0?false:e.Count==0?true:this.minItem.Value>=e.minItem.Value&&this.maxItem.Value>=e.maxItem.Value}LessThan(e){return e.Count==0?false:this.Count==0?true:this.maxItem.Value<e.minItem.Value}LessThanOrEquals(e){return e.Count==0?false:this.Count==0?true:this.maxItem.Value<=e.maxItem.Value&&this.minItem.Value<=e.minItem.Value}MaxAsList(){return this.Count>0?new i(this.maxItem):new i}MinAsList(){return this.Count>0?new i(this.minItem):new i}ListWithSubRange(e,t){if(this.Count==0)return new i;let n=this.orderedItems,r=0,a=Number.MAX_SAFE_INTEGER;Number.isInteger(e)?r=e:e instanceof i&&e.Count>0&&(r=e.minItem.Value),Number.isInteger(t)?a=t:t instanceof i&&t.Count>0&&(a=t.maxItem.Value);let s=new i;s.SetInitialOriginNames(this.originNames);for(let o of n)o.Value>=r&&o.Value<=a&&s.Add(o.Key,o.Value);return s}Equals(e){if(!(e instanceof i)||e.Count!=this.Count)return false;for(let[t]of this)if(!e.has(t))return false;return true}get orderedItems(){let e=new Array;for(let[t,n]of this){let r=Fe.fromSerializedKey(t);e.push({Key:r,Value:n});}return e.sort((t,n)=>t.Key.originName===null?(0, Ye.throwNullException)("x.Key.originName"):n.Key.originName===null?(0, Ye.throwNullException)("y.Key.originName"):t.Value==n.Value?t.Key.originName.localeCompare(n.Key.originName):t.Value<n.Value?-1:t.Value>n.Value?1:0),e}get singleItem(){for(let e of this.orderedItems)return e.Key;return null}toString(){let e=this.orderedItems,t=new pd.StringBuilder;for(let n=0;n<e.length;n++){n>0&&t.Append(", ");let r=e[n].Key;if(r.itemName===null)return (0, Ye.throwNullException)("item.itemName");t.Append(r.itemName);}return t.toString()}valueOf(){return NaN}};en.InkList=wa;});var Fn=O(Ri=>{Object.defineProperty(Ri,"__esModule",{value:true});Ri.StoryException=void 0;var xa=class extends Error{constructor(e){super(e),this.useEndLineNumber=false,this.message=e,this.name="StoryException";}};Ri.StoryException=xa;});var tn=O(yt=>{Object.defineProperty(yt,"__esModule",{value:true});yt.tryParseFloat=yt.tryParseInt=yt.tryGetValueFromMap=void 0;function dd(i,e,t){if(i===null)return {result:t,exists:false};let n=i.get(e);return typeof n>"u"?{result:t,exists:false}:{result:n,exists:true}}yt.tryGetValueFromMap=dd;function fd(i,e=0){let t=parseInt(i);return Number.isNaN(t)?{result:e,exists:false}:{result:t,exists:true}}yt.tryParseInt=fd;function md(i,e=0){let t=parseFloat(i);return Number.isNaN(t)?{result:e,exists:false}:{result:t,exists:true}}yt.tryParseFloat=md;});var ie=O(re=>{Object.defineProperty(re,"__esModule",{value:true});re.ValueType=re.ListValue=re.VariablePointerValue=re.DivertTargetValue=re.StringValue=re.FloatValue=re.IntValue=re.BoolValue=re.Value=re.AbstractValue=void 0;var qu=Te(),Mu=Pe(),Vt=Ne(),gd=Fn(),Nn=U(),Gu=tn(),je=ge(),Li=class i extends qu.InkObject{static Create(e,t){if(t){if(t===ee.Int&&Number.isInteger(Number(e)))return new Qe(Number(e));if(t===ee.Float&&!isNaN(e))return new et(Number(e))}if(typeof e=="boolean")return new nn(!!e);if(typeof e=="string")return new ht(String(e));if(Number.isInteger(Number(e)))return new Qe(Number(e));if(isNaN(e)){if(e instanceof Mu.Path)return new ji((0, Nn.asOrThrows)(e,Mu.Path));if(e instanceof Vt.InkList)return new Bi((0, Nn.asOrThrows)(e,Vt.InkList))}else return new et(Number(e));return null}Copy(){return (0, Nn.asOrThrows)(i.Create(this.valueObject),qu.InkObject)}BadCastException(e){return new gd.StoryException("Can't cast "+this.valueObject+" from "+this.valueType+" to "+e)}};re.AbstractValue=Li;var Ze=class extends Li{constructor(e){super(),this.value=e;}get valueObject(){return this.value}toString(){return this.value===null?(0, je.throwNullException)("Value.value"):this.value.toString()}};re.Value=Ze;var nn=class extends Ze{constructor(e){super(e||false);}get isTruthy(){return !!this.value}get valueType(){return ee.Bool}Cast(e){if(this.value===null)return (0, je.throwNullException)("Value.value");if(e==this.valueType)return this;if(e==ee.Int)return new Qe(this.value?1:0);if(e==ee.Float)return new et(this.value?1:0);if(e==ee.String)return new ht(this.value?"true":"false");throw this.BadCastException(e)}toString(){return this.value?"true":"false"}};re.BoolValue=nn;var Qe=class extends Ze{constructor(e){super(e||0);}get isTruthy(){return this.value!=0}get valueType(){return ee.Int}Cast(e){if(this.value===null)return (0, je.throwNullException)("Value.value");if(e==this.valueType)return this;if(e==ee.Bool)return new nn(this.value!==0);if(e==ee.Float)return new et(this.value);if(e==ee.String)return new ht(""+this.value);throw this.BadCastException(e)}};re.IntValue=Qe;var et=class extends Ze{constructor(e){super(e||0);}get isTruthy(){return this.value!=0}get valueType(){return ee.Float}Cast(e){if(this.value===null)return (0, je.throwNullException)("Value.value");if(e==this.valueType)return this;if(e==ee.Bool)return new nn(this.value!==0);if(e==ee.Int)return new Qe(this.value);if(e==ee.String)return new ht(""+this.value);throw this.BadCastException(e)}};re.FloatValue=et;var ht=class extends Ze{constructor(e){if(super(e||""),this._isNewline=this.value==`
|
|
3
|
+
`,this._isInlineWhitespace=true,this.value===null)return (0, je.throwNullException)("Value.value");this.value.length>0&&this.value.split("").every(t=>t!=" "&&t!=" "?(this._isInlineWhitespace=false,false):true);}get valueType(){return ee.String}get isTruthy(){return this.value===null?(0, je.throwNullException)("Value.value"):this.value.length>0}get isNewline(){return this._isNewline}get isInlineWhitespace(){return this._isInlineWhitespace}get isNonWhitespace(){return !this.isNewline&&!this.isInlineWhitespace}Cast(e){if(e==this.valueType)return this;if(e==ee.Int){let t=(0, Gu.tryParseInt)(this.value);if(t.exists)return new Qe(t.result);throw this.BadCastException(e)}if(e==ee.Float){let t=(0, Gu.tryParseFloat)(this.value);if(t.exists)return new et(t.result);throw this.BadCastException(e)}throw this.BadCastException(e)}};re.StringValue=ht;var ji=class extends Ze{constructor(e=null){super(e);}get valueType(){return ee.DivertTarget}get targetPath(){return this.value===null?(0, je.throwNullException)("Value.value"):this.value}set targetPath(e){this.value=e;}get isTruthy(){throw new Error("Shouldn't be checking the truthiness of a divert target")}Cast(e){if(e==this.valueType)return this;throw this.BadCastException(e)}toString(){return "DivertTargetValue("+this.targetPath+")"}};re.DivertTargetValue=ji;var _a=class i extends Ze{constructor(e,t=-1){super(e),this._contextIndex=t;}get contextIndex(){return this._contextIndex}set contextIndex(e){this._contextIndex=e;}get variableName(){return this.value===null?(0, je.throwNullException)("Value.value"):this.value}set variableName(e){this.value=e;}get valueType(){return ee.VariablePointer}get isTruthy(){throw new Error("Shouldn't be checking the truthiness of a variable pointer")}Cast(e){if(e==this.valueType)return this;throw this.BadCastException(e)}toString(){return "VariablePointerValue("+this.variableName+")"}Copy(){return new i(this.variableName,this.contextIndex)}};re.VariablePointerValue=_a;var Bi=class i extends Ze{get isTruthy(){return this.value===null?(0, je.throwNullException)("this.value"):this.value.Count>0}get valueType(){return ee.List}Cast(e){if(this.value===null)return (0, je.throwNullException)("Value.value");if(e==ee.Int){let t=this.value.maxItem;return t.Key.isNull?new Qe(0):new Qe(t.Value)}else if(e==ee.Float){let t=this.value.maxItem;return t.Key.isNull?new et(0):new et(t.Value)}else if(e==ee.String){let t=this.value.maxItem;return t.Key.isNull?new ht(""):new ht(t.Key.toString())}if(e==this.valueType)return this;throw this.BadCastException(e)}constructor(e,t){super(null),!e&&!t?this.value=new Vt.InkList:e instanceof Vt.InkList?this.value=new Vt.InkList(e):e instanceof Vt.InkListItem&&typeof t=="number"&&(this.value=new Vt.InkList({Key:e,Value:t}));}static RetainListOriginsForAssignment(e,t){let n=(0, Nn.asOrNull)(e,i),r=(0, Nn.asOrNull)(t,i);if(r&&r.value===null)return (0, je.throwNullException)("newList.value");if(n&&n.value===null)return (0, je.throwNullException)("oldList.value");n&&r&&r.value.Count==0&&r.value.SetInitialOriginNames(n.value.originNames);}};re.ListValue=Bi;var ee;(function(i){i[i.Bool=-1]="Bool",i[i.Int=0]="Int",i[i.Float=1]="Float",i[i.List=2]="List",i[i.String=3]="String",i[i.DivertTarget=4]="DivertTarget",i[i.VariablePointer=5]="VariablePointer";})(ee||(re.ValueType=ee={}));});var $u=O(Wi=>{Object.defineProperty(Wi,"__esModule",{value:true});Wi.SearchResult=void 0;var Cd=oe(),Oa=class i{constructor(){this.obj=null,this.approximate=false;}get correctObj(){return this.approximate?null:this.obj}get container(){return this.obj instanceof Cd.Container?this.obj:null}copy(){let e=new i;return e.obj=this.obj,e.approximate=this.approximate,e}};Wi.SearchResult=Oa;});var oe=O(Vn=>{Object.defineProperty(Vn,"__esModule",{value:true});Vn.Container=void 0;var yd=ie(),Ju=ge(),vd=It(),rn=Te(),bd=$u(),Hu=Pe(),zu=Pn(),Sd=tn(),vt=U(),In=class i extends rn.InkObject{constructor(){super(...arguments),this.name=null,this._content=[],this.namedContent=new Map,this.visitsShouldBeCounted=false,this.turnIndexShouldBeCounted=false,this.countingAtStartOnly=false,this._pathToFirstLeafContent=null;}get hasValidName(){return this.name!=null&&this.name.length>0}get content(){return this._content}set content(e){this.AddContent(e);}get namedOnlyContent(){let e=new Map;for(let[t,n]of this.namedContent){let r=(0, vt.asOrThrows)(n,rn.InkObject);e.set(t,r);}for(let t of this.content){let n=(0, vt.asINamedContentOrNull)(t);n!=null&&n.hasValidName&&e.delete(n.name);}return e.size==0&&(e=null),e}set namedOnlyContent(e){let t=this.namedOnlyContent;if(t!=null)for(let[n]of t)this.namedContent.delete(n);if(e!=null)for(let[,n]of e){let r=(0, vt.asINamedContentOrNull)(n);r!=null&&this.AddToNamedContentOnly(r);}}get countFlags(){let e=0;return this.visitsShouldBeCounted&&(e|=i.CountFlags.Visits),this.turnIndexShouldBeCounted&&(e|=i.CountFlags.Turns),this.countingAtStartOnly&&(e|=i.CountFlags.CountStartOnly),e==i.CountFlags.CountStartOnly&&(e=0),e}set countFlags(e){let t=e;(t&i.CountFlags.Visits)>0&&(this.visitsShouldBeCounted=true),(t&i.CountFlags.Turns)>0&&(this.turnIndexShouldBeCounted=true),(t&i.CountFlags.CountStartOnly)>0&&(this.countingAtStartOnly=true);}get pathToFirstLeafContent(){return this._pathToFirstLeafContent==null&&(this._pathToFirstLeafContent=this.path.PathByAppendingPath(this.internalPathToFirstLeafContent)),this._pathToFirstLeafContent}get internalPathToFirstLeafContent(){let e=[],t=this;for(;t instanceof i;)t.content.length>0&&(e.push(new Hu.Path.Component(0)),t=t.content[0]);return new Hu.Path(e)}AddContent(e){if(e instanceof Array){let t=e;for(let n of t)this.AddContent(n);}else {let t=e;if(this._content.push(t),t.parent)throw new Error("content is already in "+t.parent);t.parent=this,this.TryAddNamedContent(t);}}TryAddNamedContent(e){let t=(0, vt.asINamedContentOrNull)(e);t!=null&&t.hasValidName&&this.AddToNamedContentOnly(t);}AddToNamedContentOnly(e){zu.Debug.AssertType(e,rn.InkObject,"Can only add Runtime.Objects to a Runtime.Container");let t=(0, vt.asOrThrows)(e,rn.InkObject);if(t.parent=this,e.name===null)return (0, Ju.throwNullException)("namedContentObj.name");this.namedContent.set(e.name,e);}ContentAtPath(e,t=0,n=-1){n==-1&&(n=e.length);let r=new bd.SearchResult;r.approximate=false;let a=this,s=this;for(let o=t;o<n;++o){let l=e.GetComponent(o);if(a==null){r.approximate=true;break}let u=a.ContentWithPathComponent(l);if(u==null){r.approximate=true;break}let c=(0, vt.asOrNull)(u,i);if(o<n-1&&c==null){r.approximate=true;break}s=u,a=c;}return r.obj=s,r}InsertContent(e,t){if(this.content.splice(t,0,e),e.parent)throw new Error("content is already in "+e.parent);e.parent=this,this.TryAddNamedContent(e);}AddContentsOfContainer(e){this.content.push(...e.content);for(let t of e.content)t.parent=this,this.TryAddNamedContent(t);}ContentWithPathComponent(e){if(e.isIndex)return e.index>=0&&e.index<this.content.length?this.content[e.index]:null;if(e.isParent)return this.parent;{if(e.name===null)return (0, Ju.throwNullException)("component.name");let t=(0, Sd.tryGetValueFromMap)(this.namedContent,e.name,null);return t.exists?(0, vt.asOrThrows)(t.result,rn.InkObject):null}}BuildStringOfHierarchy(){let e;if(arguments.length==0)return e=new vd.StringBuilder,this.BuildStringOfHierarchy(e,0,null),e.toString();e=arguments[0];let t=arguments[1],n=arguments[2];function r(){for(let o=0;o<4*t;++o)e.Append(" ");}r(),e.Append("["),this.hasValidName&&e.AppendFormat(" ({0})",this.name),this==n&&e.Append(" <---"),e.AppendLine(),t++;for(let s=0;s<this.content.length;++s){let o=this.content[s];o instanceof i?o.BuildStringOfHierarchy(e,t,n):(r(),o instanceof yd.StringValue?(e.Append('"'),e.Append(o.toString().replace(`
|
|
4
|
+
`,"\\n")),e.Append('"')):e.Append(o.toString())),s!=this.content.length-1&&e.Append(","),!(o instanceof i)&&o==n&&e.Append(" <---"),e.AppendLine();}let a=new Map;for(let[s,o]of this.namedContent)this.content.indexOf((0, vt.asOrThrows)(o,rn.InkObject))>=0||a.set(s,o);if(a.size>0){r(),e.AppendLine("-- named: --");for(let[,s]of a)zu.Debug.AssertType(s,i,"Can only print out named Containers"),s.BuildStringOfHierarchy(e,t,n),e.AppendLine();}t--,r(),e.Append("]");}};Vn.Container=In;(function(i){(function(t){t[t.Start=0]="Start",t[t.Visits=1]="Visits",t[t.Turns=2]="Turns",t[t.CountStartOnly=4]="CountStartOnly";})(i.CountFlags||(i.CountFlags={}));})(In||(Vn.Container=In={}));});var Ce=O(Rn=>{Object.defineProperty(Rn,"__esModule",{value:true});Rn.ControlCommand=void 0;var Ed=Te(),kn=class i extends Ed.InkObject{get commandType(){return this._commandType}constructor(e=i.CommandType.NotSet){super(),this._commandType=e;}Copy(){return new i(this.commandType)}static EvalStart(){return new i(i.CommandType.EvalStart)}static EvalOutput(){return new i(i.CommandType.EvalOutput)}static EvalEnd(){return new i(i.CommandType.EvalEnd)}static Duplicate(){return new i(i.CommandType.Duplicate)}static PopEvaluatedValue(){return new i(i.CommandType.PopEvaluatedValue)}static PopFunction(){return new i(i.CommandType.PopFunction)}static PopTunnel(){return new i(i.CommandType.PopTunnel)}static BeginString(){return new i(i.CommandType.BeginString)}static EndString(){return new i(i.CommandType.EndString)}static NoOp(){return new i(i.CommandType.NoOp)}static ChoiceCount(){return new i(i.CommandType.ChoiceCount)}static Turns(){return new i(i.CommandType.Turns)}static TurnsSince(){return new i(i.CommandType.TurnsSince)}static ReadCount(){return new i(i.CommandType.ReadCount)}static Random(){return new i(i.CommandType.Random)}static SeedRandom(){return new i(i.CommandType.SeedRandom)}static VisitIndex(){return new i(i.CommandType.VisitIndex)}static SequenceShuffleIndex(){return new i(i.CommandType.SequenceShuffleIndex)}static StartThread(){return new i(i.CommandType.StartThread)}static Done(){return new i(i.CommandType.Done)}static End(){return new i(i.CommandType.End)}static ListFromInt(){return new i(i.CommandType.ListFromInt)}static ListRange(){return new i(i.CommandType.ListRange)}static ListRandom(){return new i(i.CommandType.ListRandom)}static BeginTag(){return new i(i.CommandType.BeginTag)}static EndTag(){return new i(i.CommandType.EndTag)}toString(){return "ControlCommand "+this.commandType.toString()}};Rn.ControlCommand=kn;(function(i){(function(t){t[t.NotSet=-1]="NotSet",t[t.EvalStart=0]="EvalStart",t[t.EvalOutput=1]="EvalOutput",t[t.EvalEnd=2]="EvalEnd",t[t.Duplicate=3]="Duplicate",t[t.PopEvaluatedValue=4]="PopEvaluatedValue",t[t.PopFunction=5]="PopFunction",t[t.PopTunnel=6]="PopTunnel",t[t.BeginString=7]="BeginString",t[t.EndString=8]="EndString",t[t.NoOp=9]="NoOp",t[t.ChoiceCount=10]="ChoiceCount",t[t.Turns=11]="Turns",t[t.TurnsSince=12]="TurnsSince",t[t.ReadCount=13]="ReadCount",t[t.Random=14]="Random",t[t.SeedRandom=15]="SeedRandom",t[t.VisitIndex=16]="VisitIndex",t[t.SequenceShuffleIndex=17]="SequenceShuffleIndex",t[t.StartThread=18]="StartThread",t[t.Done=19]="Done",t[t.End=20]="End",t[t.ListFromInt=21]="ListFromInt",t[t.ListRange=22]="ListRange",t[t.ListRandom=23]="ListRandom",t[t.BeginTag=24]="BeginTag",t[t.EndTag=25]="EndTag",t[t.TOTAL_VALUES=26]="TOTAL_VALUES";})(i.CommandType||(i.CommandType={}));})(kn||(Rn.ControlCommand=kn={}));});var Be=O(qi=>{Object.defineProperty(qi,"__esModule",{value:true});qi.Expression=void 0;var Uu=oe(),Pa=Ce(),Dd=te(),Ta=class extends Dd.ParsedObject{constructor(){super(...arguments),this._prototypeRuntimeConstantExpression=null,this.outputWhenComplete=false,this.GenerateRuntimeObject=()=>{let e=new Uu.Container;return e.AddContent(Pa.ControlCommand.EvalStart()),this.GenerateIntoContainer(e),this.outputWhenComplete&&e.AddContent(Pa.ControlCommand.EvalOutput()),e.AddContent(Pa.ControlCommand.EvalEnd()),e},this.GenerateConstantIntoContainer=e=>{this._prototypeRuntimeConstantExpression===null&&(this._prototypeRuntimeConstantExpression=new Uu.Container,this.GenerateIntoContainer(this._prototypeRuntimeConstantExpression));for(let t of this._prototypeRuntimeConstantExpression.content){let n=t.Copy();n&&e.AddContent(n);}},this.toString=()=>"No string value in JavaScript.";}get typeName(){return "Expression"}Equals(e){return false}};qi.Expression=Ta;});var kt=O(Mi=>{Object.defineProperty(Mi,"__esModule",{value:true});Mi.Void=void 0;var Ad=Te(),Fa=class extends Ad.InkObject{toString(){return "Void"}};Mi.Void=Fa;});var tt=O($i=>{Object.defineProperty($i,"__esModule",{value:true});$i.NativeFunctionCall=void 0;var F=ie(),Ln=Fn(),wd=kt(),Gi=Ne(),xd=Te(),We=U(),Ie=ge(),B=class i extends xd.InkObject{static CallWithName(e){return new i(e)}static CallExistsWithName(e){return this.GenerateNativeFunctionsIfNecessary(),this._nativeFunctions.get(e)}get name(){return this._name===null?(0, Ie.throwNullException)("NativeFunctionCall._name"):this._name}set name(e){this._name=e,this._isPrototype||(i._nativeFunctions===null?(0, Ie.throwNullException)("NativeFunctionCall._nativeFunctions"):this._prototype=i._nativeFunctions.get(this._name)||null);}get numberOfParameters(){return this._prototype?this._prototype.numberOfParameters:this._numberOfParameters}set numberOfParameters(e){this._numberOfParameters=e;}Call(e){if(this._prototype)return this._prototype.Call(e);if(this.numberOfParameters!=e.length)throw new Error("Unexpected number of parameters");let t=false;for(let a of e){if(a instanceof wd.Void)throw new Ln.StoryException("Attempting to perform "+this.name+' on a void value. Did you forget to "return" a value from a function you called here?');a instanceof F.ListValue&&(t=true);}if(e.length==2&&t)return this.CallBinaryListOperation(e);let n=this.CoerceValuesToSingleType(e),r=n[0].valueType;return r==F.ValueType.Int?this.CallType(n):r==F.ValueType.Float?this.CallType(n):r==F.ValueType.String?this.CallType(n):r==F.ValueType.DivertTarget?this.CallType(n):r==F.ValueType.List?this.CallType(n):null}CallType(e){let t=(0, We.asOrThrows)(e[0],F.Value),n=t.valueType,r=t,a=e.length;if(a==2||a==1){if(this._operationFuncs===null)return (0, Ie.throwNullException)("NativeFunctionCall._operationFuncs");let s=this._operationFuncs.get(n);if(!s){let o=F.ValueType[n];throw new Ln.StoryException("Cannot perform operation "+this.name+" on "+o)}if(a==2){let l=(0, We.asOrThrows)(e[1],F.Value),u=s;if(r.value===null||l.value===null)return (0, Ie.throwNullException)("NativeFunctionCall.Call BinaryOp values");let c=u(r.value,l.value);return F.Value.Create(c)}else {let o=s;if(r.value===null)return (0, Ie.throwNullException)("NativeFunctionCall.Call UnaryOp value");let l=o(r.value);return this.name===i.Int?F.Value.Create(l,F.ValueType.Int):this.name===i.Float?F.Value.Create(l,F.ValueType.Float):F.Value.Create(l,t.valueType)}}else throw new Error("Unexpected number of parameters to NativeFunctionCall: "+e.length)}CallBinaryListOperation(e){if((this.name=="+"||this.name=="-")&&e[0]instanceof F.ListValue&&e[1]instanceof F.IntValue)return this.CallListIncrementOperation(e);let t=(0, We.asOrThrows)(e[0],F.Value),n=(0, We.asOrThrows)(e[1],F.Value);if((this.name=="&&"||this.name=="||")&&(t.valueType!=F.ValueType.List||n.valueType!=F.ValueType.List)){if(this._operationFuncs===null)return (0, Ie.throwNullException)("NativeFunctionCall._operationFuncs");let r=this._operationFuncs.get(F.ValueType.Int);if(r===null)return (0, Ie.throwNullException)("NativeFunctionCall.CallBinaryListOperation op");let a=(0, We.asBooleanOrThrows)(r(t.isTruthy?1:0,n.isTruthy?1:0));return new F.BoolValue(a)}if(t.valueType==F.ValueType.List&&n.valueType==F.ValueType.List)return this.CallType([t,n]);throw new Ln.StoryException("Can not call use "+this.name+" operation on "+F.ValueType[t.valueType]+" and "+F.ValueType[n.valueType])}CallListIncrementOperation(e){let t=(0, We.asOrThrows)(e[0],F.ListValue),n=(0, We.asOrThrows)(e[1],F.IntValue),r=new Gi.InkList;if(t.value===null)return (0, Ie.throwNullException)("NativeFunctionCall.CallListIncrementOperation listVal.value");for(let[a,s]of t.value){let o=Gi.InkListItem.fromSerializedKey(a);if(this._operationFuncs===null)return (0, Ie.throwNullException)("NativeFunctionCall._operationFuncs");let l=this._operationFuncs.get(F.ValueType.Int);if(n.value===null)return (0, Ie.throwNullException)("NativeFunctionCall.CallListIncrementOperation intVal.value");let u=l(s,n.value),c=null;if(t.value.origins===null)return (0, Ie.throwNullException)("NativeFunctionCall.CallListIncrementOperation listVal.value.origins");for(let h of t.value.origins)if(h.name==o.originName){c=h;break}if(c!=null){let h=c.TryGetItemWithValue(u,Gi.InkListItem.Null);h.exists&&r.Add(h.result,u);}}return new F.ListValue(r)}CoerceValuesToSingleType(e){let t=F.ValueType.Int,n=null;for(let a of e){let s=(0, We.asOrThrows)(a,F.Value);s.valueType>t&&(t=s.valueType),s.valueType==F.ValueType.List&&(n=(0, We.asOrNull)(s,F.ListValue));}let r=[];if(F.ValueType[t]==F.ValueType[F.ValueType.List])for(let a of e){let s=(0, We.asOrThrows)(a,F.Value);if(s.valueType==F.ValueType.List)r.push(s);else if(s.valueType==F.ValueType.Int){let o=parseInt(s.valueObject);if(n=(0, We.asOrThrows)(n,F.ListValue),n.value===null)return (0, Ie.throwNullException)("NativeFunctionCall.CoerceValuesToSingleType specialCaseList.value");let l=n.value.originOfMaxItem;if(l===null)return (0, Ie.throwNullException)("NativeFunctionCall.CoerceValuesToSingleType list");let u=l.TryGetItemWithValue(o,Gi.InkListItem.Null);if(u.exists){let c=new F.ListValue(u.result,o);r.push(c);}else throw new Ln.StoryException("Could not find List item with the value "+o+" in "+l.name)}else {let o=F.ValueType[s.valueType];throw new Ln.StoryException("Cannot mix Lists and "+o+" values in this operation")}}else for(let a of e){let o=(0, We.asOrThrows)(a,F.Value).Cast(t);r.push(o);}return r}constructor(){if(super(),this._name=null,this._numberOfParameters=0,this._prototype=null,this._isPrototype=false,this._operationFuncs=null,arguments.length===0)i.GenerateNativeFunctionsIfNecessary();else if(arguments.length===1){let e=arguments[0];i.GenerateNativeFunctionsIfNecessary(),this.name=e;}else if(arguments.length===2){let e=arguments[0],t=arguments[1];this._isPrototype=true,this.name=e,this.numberOfParameters=t;}}static Identity(e){return e}static GenerateNativeFunctionsIfNecessary(){if(this._nativeFunctions==null){this._nativeFunctions=new Map,this.AddIntBinaryOp(this.Add,(n,r)=>n+r),this.AddIntBinaryOp(this.Subtract,(n,r)=>n-r),this.AddIntBinaryOp(this.Multiply,(n,r)=>n*r),this.AddIntBinaryOp(this.Divide,(n,r)=>Math.floor(n/r)),this.AddIntBinaryOp(this.Mod,(n,r)=>n%r),this.AddIntUnaryOp(this.Negate,n=>-n),this.AddIntBinaryOp(this.Equal,(n,r)=>n==r),this.AddIntBinaryOp(this.Greater,(n,r)=>n>r),this.AddIntBinaryOp(this.Less,(n,r)=>n<r),this.AddIntBinaryOp(this.GreaterThanOrEquals,(n,r)=>n>=r),this.AddIntBinaryOp(this.LessThanOrEquals,(n,r)=>n<=r),this.AddIntBinaryOp(this.NotEquals,(n,r)=>n!=r),this.AddIntUnaryOp(this.Not,n=>n==0),this.AddIntBinaryOp(this.And,(n,r)=>n!=0&&r!=0),this.AddIntBinaryOp(this.Or,(n,r)=>n!=0||r!=0),this.AddIntBinaryOp(this.Max,(n,r)=>Math.max(n,r)),this.AddIntBinaryOp(this.Min,(n,r)=>Math.min(n,r)),this.AddIntBinaryOp(this.Pow,(n,r)=>Math.pow(n,r)),this.AddIntUnaryOp(this.Floor,i.Identity),this.AddIntUnaryOp(this.Ceiling,i.Identity),this.AddIntUnaryOp(this.Int,i.Identity),this.AddIntUnaryOp(this.Float,n=>n),this.AddFloatBinaryOp(this.Add,(n,r)=>n+r),this.AddFloatBinaryOp(this.Subtract,(n,r)=>n-r),this.AddFloatBinaryOp(this.Multiply,(n,r)=>n*r),this.AddFloatBinaryOp(this.Divide,(n,r)=>n/r),this.AddFloatBinaryOp(this.Mod,(n,r)=>n%r),this.AddFloatUnaryOp(this.Negate,n=>-n),this.AddFloatBinaryOp(this.Equal,(n,r)=>n==r),this.AddFloatBinaryOp(this.Greater,(n,r)=>n>r),this.AddFloatBinaryOp(this.Less,(n,r)=>n<r),this.AddFloatBinaryOp(this.GreaterThanOrEquals,(n,r)=>n>=r),this.AddFloatBinaryOp(this.LessThanOrEquals,(n,r)=>n<=r),this.AddFloatBinaryOp(this.NotEquals,(n,r)=>n!=r),this.AddFloatUnaryOp(this.Not,n=>n==0),this.AddFloatBinaryOp(this.And,(n,r)=>n!=0&&r!=0),this.AddFloatBinaryOp(this.Or,(n,r)=>n!=0||r!=0),this.AddFloatBinaryOp(this.Max,(n,r)=>Math.max(n,r)),this.AddFloatBinaryOp(this.Min,(n,r)=>Math.min(n,r)),this.AddFloatBinaryOp(this.Pow,(n,r)=>Math.pow(n,r)),this.AddFloatUnaryOp(this.Floor,n=>Math.floor(n)),this.AddFloatUnaryOp(this.Ceiling,n=>Math.ceil(n)),this.AddFloatUnaryOp(this.Int,n=>Math.floor(n)),this.AddFloatUnaryOp(this.Float,i.Identity),this.AddStringBinaryOp(this.Add,(n,r)=>n+r),this.AddStringBinaryOp(this.Equal,(n,r)=>n===r),this.AddStringBinaryOp(this.NotEquals,(n,r)=>n!==r),this.AddStringBinaryOp(this.Has,(n,r)=>n.includes(r)),this.AddStringBinaryOp(this.Hasnt,(n,r)=>!n.includes(r)),this.AddListBinaryOp(this.Add,(n,r)=>n.Union(r)),this.AddListBinaryOp(this.Subtract,(n,r)=>n.Without(r)),this.AddListBinaryOp(this.Has,(n,r)=>n.Contains(r)),this.AddListBinaryOp(this.Hasnt,(n,r)=>!n.Contains(r)),this.AddListBinaryOp(this.Intersect,(n,r)=>n.Intersect(r)),this.AddListBinaryOp(this.Equal,(n,r)=>n.Equals(r)),this.AddListBinaryOp(this.Greater,(n,r)=>n.GreaterThan(r)),this.AddListBinaryOp(this.Less,(n,r)=>n.LessThan(r)),this.AddListBinaryOp(this.GreaterThanOrEquals,(n,r)=>n.GreaterThanOrEquals(r)),this.AddListBinaryOp(this.LessThanOrEquals,(n,r)=>n.LessThanOrEquals(r)),this.AddListBinaryOp(this.NotEquals,(n,r)=>!n.Equals(r)),this.AddListBinaryOp(this.And,(n,r)=>n.Count>0&&r.Count>0),this.AddListBinaryOp(this.Or,(n,r)=>n.Count>0||r.Count>0),this.AddListUnaryOp(this.Not,n=>n.Count==0?1:0),this.AddListUnaryOp(this.Invert,n=>n.inverse),this.AddListUnaryOp(this.All,n=>n.all),this.AddListUnaryOp(this.ListMin,n=>n.MinAsList()),this.AddListUnaryOp(this.ListMax,n=>n.MaxAsList()),this.AddListUnaryOp(this.Count,n=>n.Count),this.AddListUnaryOp(this.ValueOfList,n=>n.maxItem.Value);let e=(n,r)=>n.Equals(r),t=(n,r)=>!n.Equals(r);this.AddOpToNativeFunc(this.Equal,2,F.ValueType.DivertTarget,e),this.AddOpToNativeFunc(this.NotEquals,2,F.ValueType.DivertTarget,t);}}AddOpFuncForType(e,t){this._operationFuncs==null&&(this._operationFuncs=new Map),this._operationFuncs.set(e,t);}static AddOpToNativeFunc(e,t,n,r){if(this._nativeFunctions===null)return (0, Ie.throwNullException)("NativeFunctionCall._nativeFunctions");let a=this._nativeFunctions.get(e);a||(a=new i(e,t),this._nativeFunctions.set(e,a)),a.AddOpFuncForType(n,r);}static AddIntBinaryOp(e,t){this.AddOpToNativeFunc(e,2,F.ValueType.Int,t);}static AddIntUnaryOp(e,t){this.AddOpToNativeFunc(e,1,F.ValueType.Int,t);}static AddFloatBinaryOp(e,t){this.AddOpToNativeFunc(e,2,F.ValueType.Float,t);}static AddFloatUnaryOp(e,t){this.AddOpToNativeFunc(e,1,F.ValueType.Float,t);}static AddStringBinaryOp(e,t){this.AddOpToNativeFunc(e,2,F.ValueType.String,t);}static AddListBinaryOp(e,t){this.AddOpToNativeFunc(e,2,F.ValueType.List,t);}static AddListUnaryOp(e,t){this.AddOpToNativeFunc(e,1,F.ValueType.List,t);}toString(){return 'Native "'+this.name+'"'}};$i.NativeFunctionCall=B;B.Add="+";B.Subtract="-";B.Divide="/";B.Multiply="*";B.Mod="%";B.Negate="_";B.Equal="==";B.Greater=">";B.Less="<";B.GreaterThanOrEquals=">=";B.LessThanOrEquals="<=";B.NotEquals="!=";B.Not="!";B.And="&&";B.Or="||";B.Min="MIN";B.Max="MAX";B.Pow="POW";B.Floor="FLOOR";B.Ceiling="CEILING";B.Int="INT";B.Float="FLOAT";B.Has="?";B.Hasnt="!?";B.Intersect="^";B.ListMin="LIST_MIN";B.ListMax="LIST_MAX";B.All="LIST_ALL";B.Count="LIST_COUNT";B.ValueOfList="LIST_VALUE";B.Invert="LIST_INVERT";B._nativeFunctions=null;});var Hi=O(Ji=>{Object.defineProperty(Ji,"__esModule",{value:true});Ji.NumberExpression=void 0;var _d=Be(),Na=ie(),Od=U(),Ia=class i extends _d.Expression{constructor(e,t){if(super(),this.isInt=()=>this.subtype=="int",this.isFloat=()=>this.subtype=="float",this.isBool=()=>this.subtype=="bool",this.GenerateIntoContainer=n=>{this.isInt()?n.AddContent(new Na.IntValue(this.value)):this.isFloat()?n.AddContent(new Na.FloatValue(this.value)):this.isBool()&&n.AddContent(new Na.BoolValue(this.value));},this.toString=()=>String(this.value),typeof e=="number"&&!Number.isNaN(e)||typeof e=="boolean")this.value=e,this.subtype=t;else throw new Error("Unexpected object type in NumberExpression.")}get typeName(){return "Number"}Equals(e){let t=(0, Od.asOrNull)(e,i);return t?t.subtype==this.subtype&&t.value==this.value:false}};Ji.NumberExpression=Ia;});var Va=O(zi=>{Object.defineProperty(zi,"__esModule",{value:true});zi.UnaryExpression=void 0;var Pd=Be(),Td=tt(),sn=Hi(),Fd=U(),jn=class extends Pd.Expression{get nativeNameForOp(){return this.op==="-"?"_":this.op==="not"?"!":this.op}constructor(e,t){super(),this.op=t,this.GenerateIntoContainer=n=>{this.innerExpression.GenerateIntoContainer(n),n.AddContent(Td.NativeFunctionCall.CallWithName(this.nativeNameForOp));},this.toString=()=>this.nativeNameForOp+this.innerExpression,this.innerExpression=this.AddContent(e);}get typeName(){return "UnaryExpression"}};zi.UnaryExpression=jn;jn.WithInner=(i,e)=>{let t=(0, Fd.asOrNull)(i,sn.NumberExpression);if(t){if(e==="-"){if(t.isInt())return new sn.NumberExpression(-t.value,"int");if(t.isFloat())return new sn.NumberExpression(-t.value,"float")}else if(e=="!"||e=="not"){if(t.isInt())return new sn.NumberExpression(t.value==0,"bool");if(t.isFloat())return new sn.NumberExpression(t.value==0,"bool");if(t.isBool())return new sn.NumberExpression(!t.value,"bool")}throw new Error("Unexpected operation or number type")}return new jn(i,e)};});var Ra=O(Ui=>{Object.defineProperty(Ui,"__esModule",{value:true});Ui.BinaryExpression=void 0;var Nd=Be(),Id=tt(),Vd=Va(),kd=U(),ka=class extends Nd.Expression{constructor(e,t,n){super(),this.opName=n,this.GenerateIntoContainer=r=>{this.leftExpression.GenerateIntoContainer(r),this.rightExpression.GenerateIntoContainer(r),this.opName=this.NativeNameForOp(this.opName),r.AddContent(Id.NativeFunctionCall.CallWithName(this.opName));},this.NativeNameForOp=r=>r==="and"?"&&":r==="or"?"||":r==="mod"?"%":r==="has"?"?":r==="hasnt"?"!?":r,this.toString=()=>`(${this.leftExpression} ${this.opName} ${this.rightExpression})`,this.leftExpression=this.AddContent(e),this.rightExpression=this.AddContent(t),this.opName=n;}get typeName(){return "BinaryExpression"}ResolveReferences(e){if(super.ResolveReferences(e),this.NativeNameForOp(this.opName)==="?"){let t=(0, kd.asOrNull)(this.leftExpression,Vd.UnaryExpression);t!==null&&(t.op==="not"||t.op==="!")&&this.Error(`Using 'not' or '!' here negates '${t.innerExpression}' rather than the result of the '?' or 'has' operator. You need to add parentheses around the (A ? B) expression.`);}}};Ui.BinaryExpression=ka;});var Wn=O(Ki=>{Object.defineProperty(Ki,"__esModule",{value:true});Ki.CharacterSet=void 0;var Bn=class{constructor(e){this.set=new Set,this.Add=t=>this.set.add(t),this.AddRange=(t,n)=>{for(let r=t.charCodeAt(0);r<=n.charCodeAt(0);++r)this.Add(String.fromCharCode(r));return this},this.AddCharacters=t=>{if(typeof t=="string"||Array.isArray(t))for(let n of t)this.Add(n);else for(let n of t.set)this.Add(n);return this},e&&this.AddCharacters(e);}};Ki.CharacterSet=Bn;Bn.FromRange=(i,e)=>new Bn().AddRange(i,e);});var Xu=O(Xi=>{Object.defineProperty(Xi,"__esModule",{value:true});Xi.CharacterRange=void 0;var Ku=Wn(),qn=class{constructor(e,t,n=[]){if(this._start=e,this._end=t,this._correspondingCharSet=new Ku.CharacterSet,this._excludes=new Set,this.ToCharacterSet=()=>{if(this._correspondingCharSet.set.size===0)for(let r=this.start.charCodeAt(0),a;r<=this.end.charCodeAt(0);r+=1)a=String.fromCharCode(r),this._excludes.has(a)||this._correspondingCharSet.AddCharacters(a);return this._correspondingCharSet},n instanceof Ku.CharacterSet)this._excludes=n.set;else for(let r of n)this._excludes.add(r);}get start(){return this._start}get end(){return this._end}};Xi.CharacterRange=qn;qn.Define=(i,e,t=[])=>new qn(i,e,t);});var Zi=O(Yi=>{Object.defineProperty(Yi,"__esModule",{value:true});Yi.ChoicePoint=void 0;var Rd=Te(),Ld=Pe(),La=ge(),ja=class extends Rd.InkObject{constructor(e=true){super(),this._pathOnChoice=null,this.hasCondition=false,this.hasStartContent=false,this.hasChoiceOnlyContent=false,this.isInvisibleDefault=false,this.onceOnly=true,this.onceOnly=e;}get pathOnChoice(){if(this._pathOnChoice!=null&&this._pathOnChoice.isRelative){let e=this.choiceTarget;e&&(this._pathOnChoice=e.path);}return this._pathOnChoice}set pathOnChoice(e){this._pathOnChoice=e;}get choiceTarget(){return this._pathOnChoice===null?(0, La.throwNullException)("ChoicePoint._pathOnChoice"):this.ResolvePath(this._pathOnChoice).container}get pathStringOnChoice(){return this.pathOnChoice===null?(0, La.throwNullException)("ChoicePoint.pathOnChoice"):this.CompactPathString(this.pathOnChoice)}set pathStringOnChoice(e){this.pathOnChoice=new Ld.Path(e);}get flags(){let e=0;return this.hasCondition&&(e|=1),this.hasStartContent&&(e|=2),this.hasChoiceOnlyContent&&(e|=4),this.isInvisibleDefault&&(e|=8),this.onceOnly&&(e|=16),e}set flags(e){this.hasCondition=(e&1)>0,this.hasStartContent=(e&2)>0,this.hasChoiceOnlyContent=(e&4)>0,this.isInvisibleDefault=(e&8)>0,this.onceOnly=(e&16)>0;}toString(){if(this.pathOnChoice===null)return (0, La.throwNullException)("ChoicePoint.pathOnChoice");let t=this.pathOnChoice.toString();return "Choice: -> "+t}};Yi.ChoicePoint=ja;});var Rt=O(Qi=>{Object.defineProperty(Qi,"__esModule",{value:true});Qi.PushPopType=void 0;var Yu;(function(i){i[i.Tunnel=0]="Tunnel",i[i.Function=1]="Function",i[i.FunctionEvaluationFromGame=2]="FunctionEvaluationFromGame";})(Yu||(Qi.PushPopType=Yu={}));});var Mn=O(er=>{Object.defineProperty(er,"__esModule",{value:true});er.Pointer=void 0;var jd=Pe(),Ba=class i{constructor(){this.container=null,this.index=-1,arguments.length===2&&(this.container=arguments[0],this.index=arguments[1]);}Resolve(){return this.index<0?this.container:this.container==null?null:this.container.content.length==0?this.container:this.index>=this.container.content.length?null:this.container.content[this.index]}get isNull(){return this.container==null}get path(){return this.isNull?null:this.index>=0?this.container.path.PathByAppendingComponent(new jd.Path.Component(this.index)):this.container.path}toString(){return this.container?"Ink Pointer -> "+this.container.path.toString()+" -- index "+this.index:"Ink Pointer (null)"}copy(){return new i(this.container,this.index)}static StartOf(e){return new i(e,0)}static get Null(){return new i(null,-1)}};er.Pointer=Ba;});var nt=O(nr=>{Object.defineProperty(nr,"__esModule",{value:true});nr.Divert=void 0;var Bd=Pe(),Wd=Rt(),qd=It(),Md=Te(),Wa=Mn(),Zu=oe(),tr=ge(),qa=class i extends Md.InkObject{get targetPath(){if(this._targetPath!=null&&this._targetPath.isRelative){let e=this.targetPointer.Resolve();e&&(this._targetPath=e.path);}return this._targetPath}set targetPath(e){this._targetPath=e,this._targetPointer=Wa.Pointer.Null;}get targetPointer(){if(this._targetPointer.isNull){let e=this.ResolvePath(this._targetPath).obj;if(this._targetPath===null)return (0, tr.throwNullException)("this._targetPath");if(this._targetPath.lastComponent===null)return (0, tr.throwNullException)("this._targetPath.lastComponent");if(this._targetPath.lastComponent.isIndex){if(e===null)return (0, tr.throwNullException)("targetObj");this._targetPointer.container=e.parent instanceof Zu.Container?e.parent:null,this._targetPointer.index=this._targetPath.lastComponent.index;}else this._targetPointer=Wa.Pointer.StartOf(e instanceof Zu.Container?e:null);}return this._targetPointer.copy()}get targetPathString(){return this.targetPath==null?null:this.CompactPathString(this.targetPath)}set targetPathString(e){e==null?this.targetPath=null:this.targetPath=new Bd.Path(e);}get hasVariableTarget(){return this.variableDivertName!=null}constructor(e){super(),this._targetPath=null,this._targetPointer=Wa.Pointer.Null,this.variableDivertName=null,this.pushesToStack=false,this.stackPushType=0,this.isExternal=false,this.externalArgs=0,this.isConditional=false,this.pushesToStack=false,typeof e<"u"&&(this.pushesToStack=true,this.stackPushType=e);}Equals(e){let t=e;return t instanceof i&&this.hasVariableTarget==t.hasVariableTarget?this.hasVariableTarget?this.variableDivertName==t.variableDivertName:this.targetPath===null?(0, tr.throwNullException)("this.targetPath"):this.targetPath.Equals(t.targetPath):false}toString(){if(this.hasVariableTarget)return "Divert(variable: "+this.variableDivertName+")";if(this.targetPath==null)return "Divert(null)";{let e=new qd.StringBuilder,t=this.targetPath.toString();return e.Append("Divert"),this.isConditional&&e.Append("?"),this.pushesToStack&&(this.stackPushType==Wd.PushPopType.Function?e.Append(" function"):e.Append(" tunnel")),e.Append(" -> "),e.Append(this.targetPathString),e.Append(" ("),e.Append(t),e.Append(")"),e.toString()}}};nr.Divert=qa;});var pt=O(ir=>{Object.defineProperty(ir,"__esModule",{value:true});ir.SymbolType=void 0;var Qu;(function(i){i[i.Knot=0]="Knot",i[i.List=1]="List",i[i.ListItem=2]="ListItem",i[i.Var=3]="Var",i[i.SubFlowAndWeave=4]="SubFlowAndWeave",i[i.Arg=5]="Arg",i[i.Temp=6]="Temp";})(Qu||(ir.SymbolType=Qu={}));});var bt=O(rr=>{Object.defineProperty(rr,"__esModule",{value:true});rr.VariableAssignment=void 0;var Gd=Te(),Ma=class extends Gd.InkObject{constructor(e,t){super(),this.variableName=e||null,this.isNewDeclaration=!!t,this.isGlobal=false;}toString(){return "VarAssign to "+this.variableName}};rr.VariableAssignment=Ma;});var an=O(ar=>{Object.defineProperty(ar,"__esModule",{value:true});ar.Choice=void 0;var $d=Zi(),sr=oe(),St=Ce(),Ga=nt(),ec=ie(),Jd=te(),Hd=pt(),tc=bt(),$a=class extends Jd.ParsedObject{get runtimeChoice(){if(!this._runtimeChoice)throw new Error;return this._runtimeChoice}get name(){var e;return ((e=this.identifier)===null||e===void 0?void 0:e.name)||null}get condition(){return this._condition}set condition(e){this._condition=e,e&&this.AddContent(e);}get runtimeContainer(){return this._innerContentContainer}get innerContentContainer(){return this._innerContentContainer}get containerForCounting(){return this._innerContentContainer}get runtimePath(){if(!this.innerContentContainer||!this.innerContentContainer.path)throw new Error;return this.innerContentContainer.path}constructor(e,t,n){super(),this._condition=null,this._innerContentContainer=null,this._outerContainer=null,this._runtimeChoice=null,this._returnToR1=null,this._returnToR2=null,this._r1Label=null,this._r2Label=null,this._divertToStartContentOuter=null,this._divertToStartContentInner=null,this._startContentRuntimeContainer=null,this.isInvisibleDefault=false,this.hasWeaveStyleInlineBrackets=false,this.GenerateRuntimeObject=()=>{if(this._outerContainer=new sr.Container,this._runtimeChoice=new $d.ChoicePoint(this.onceOnly),this._runtimeChoice.isInvisibleDefault=this.isInvisibleDefault,(this.startContent||this.choiceOnlyContent||this.condition)&&this._outerContainer.AddContent(St.ControlCommand.EvalStart()),this.startContent){this._returnToR1=new ec.DivertTargetValue,this._outerContainer.AddContent(this._returnToR1);let r=new tc.VariableAssignment("$r",true);this._outerContainer.AddContent(r),this._outerContainer.AddContent(St.ControlCommand.BeginString()),this._divertToStartContentOuter=new Ga.Divert,this._outerContainer.AddContent(this._divertToStartContentOuter),this._startContentRuntimeContainer=this.startContent.GenerateRuntimeObject(),this._startContentRuntimeContainer.name="s";let a=new Ga.Divert;a.variableDivertName="$r",this._startContentRuntimeContainer.AddContent(a),this._outerContainer.AddToNamedContentOnly(this._startContentRuntimeContainer),this._r1Label=new sr.Container,this._r1Label.name="$r1",this._outerContainer.AddContent(this._r1Label),this._outerContainer.AddContent(St.ControlCommand.EndString()),this._runtimeChoice.hasStartContent=true;}if(this.choiceOnlyContent){this._outerContainer.AddContent(St.ControlCommand.BeginString());let r=this.choiceOnlyContent.GenerateRuntimeObject();this._outerContainer.AddContentsOfContainer(r),this._outerContainer.AddContent(St.ControlCommand.EndString()),this._runtimeChoice.hasChoiceOnlyContent=true;}if(this.condition&&(this.condition.GenerateIntoContainer(this._outerContainer),this._runtimeChoice.hasCondition=true),(this.startContent||this.choiceOnlyContent||this.condition)&&this._outerContainer.AddContent(St.ControlCommand.EvalEnd()),this._outerContainer.AddContent(this._runtimeChoice),this._innerContentContainer=new sr.Container,this.startContent){this._returnToR2=new ec.DivertTargetValue,this._innerContentContainer.AddContent(St.ControlCommand.EvalStart()),this._innerContentContainer.AddContent(this._returnToR2),this._innerContentContainer.AddContent(St.ControlCommand.EvalEnd());let r=new tc.VariableAssignment("$r",true);this._innerContentContainer.AddContent(r),this._divertToStartContentInner=new Ga.Divert,this._innerContentContainer.AddContent(this._divertToStartContentInner),this._r2Label=new sr.Container,this._r2Label.name="$r2",this._innerContentContainer.AddContent(this._r2Label);}if(this.innerContent){let r=this.innerContent.GenerateRuntimeObject();this._innerContentContainer.AddContentsOfContainer(r);}return this.story.countAllVisits&&(this._innerContentContainer.visitsShouldBeCounted=true),this._innerContentContainer.countingAtStartOnly=true,this._outerContainer},this.toString=()=>this.choiceOnlyContent!==null?`* ${this.startContent}[${this.choiceOnlyContent}]...`:`* ${this.startContent}...`,this.startContent=e,this.choiceOnlyContent=t,this.innerContent=n,this.indentationDepth=1,e&&this.AddContent(this.startContent),t&&this.AddContent(this.choiceOnlyContent),n&&this.AddContent(this.innerContent),this.onceOnly=true;}get typeName(){return "Choice"}ResolveReferences(e){var t;if(this._innerContentContainer&&(this.runtimeChoice.pathOnChoice=this._innerContentContainer.path,this.onceOnly&&(this._innerContentContainer.visitsShouldBeCounted=true)),this._returnToR1){if(!this._r1Label)throw new Error;this._returnToR1.targetPath=this._r1Label.path;}if(this._returnToR2){if(!this._r2Label)throw new Error;this._returnToR2.targetPath=this._r2Label.path;}if(this._divertToStartContentOuter){if(!this._startContentRuntimeContainer)throw new Error;this._divertToStartContentOuter.targetPath=this._startContentRuntimeContainer.path;}if(this._divertToStartContentInner){if(!this._startContentRuntimeContainer)throw new Error;this._divertToStartContentInner.targetPath=this._startContentRuntimeContainer.path;}super.ResolveReferences(e),this.identifier&&(((t=this.identifier)===null||t===void 0?void 0:t.name)||"").length>0&&e.CheckForNamingCollisions(this,this.identifier,Hd.SymbolType.SubFlowAndWeave);}};ar.Choice=$a;});var nc=O(lr=>{Object.defineProperty(lr,"__esModule",{value:true});lr.StringParserElement=void 0;var or=class i{constructor(){this.characterIndex=0,this.characterInLineIndex=0,this.lineIndex=0,this.reportedErrorInScope=false,this.uniqueId=0,this.customFlags=0,this.CopyFrom=e=>{i._uniqueIdCounter++,this.uniqueId=i._uniqueIdCounter,this.characterIndex=e.characterIndex,this.characterInLineIndex=e.characterInLineIndex,this.lineIndex=e.lineIndex,this.customFlags=e.customFlags,this.reportedErrorInScope=false;},this.SquashFrom=e=>{this.characterIndex=e.characterIndex,this.characterInLineIndex=e.characterInLineIndex,this.lineIndex=e.lineIndex,this.reportedErrorInScope=e.reportedErrorInScope,this.customFlags=e.customFlags;};}};lr.StringParserElement=or;or._uniqueIdCounter=1e3;});var rc=O(ur=>{Object.defineProperty(ur,"__esModule",{value:true});ur.StringParserState=void 0;var ic=nc(),Ja=class{get currentElement(){return this._stack[this._numElements-1]}get lineIndex(){return this.currentElement.lineIndex}set lineIndex(e){this.currentElement.lineIndex=e;}get characterIndex(){return this.currentElement.characterIndex}set characterIndex(e){this.currentElement.characterIndex=e;}get characterInLineIndex(){return this.currentElement.characterInLineIndex}set characterInLineIndex(e){this.currentElement.characterInLineIndex=e;}get customFlags(){return this.currentElement.customFlags}set customFlags(e){this.currentElement.customFlags=e;}get errorReportedAlreadyInScope(){return this.currentElement.reportedErrorInScope}get stackHeight(){return this._numElements}constructor(){this._stack=[],this._numElements=0,this.StringParserState=()=>{this._stack=new Array(200);for(let n=0;n<200;++n)this._stack[n]=new ic.StringParserElement;this._numElements=1;},this.Push=()=>{if(this._numElements>=this._stack.length&&this._numElements>0)throw new Error("Stack overflow in parser state.");let t=this._stack[this._numElements-1],n=this._stack[this._numElements];return this._numElements++,n.CopyFrom(t),n.uniqueId},this.Pop=t=>{if(this._numElements==1)throw new Error("Attempting to remove final stack element is illegal! Mismatched Begin/Succceed/Fail?");if(this.currentElement.uniqueId!=t)throw new Error("Mismatched rule IDs while Poping - do you have mismatched Begin/Succeed/Fail?");this._numElements-=1;},this.Peek=t=>{if(this.currentElement.uniqueId!=t)throw new Error("Mismatched rule IDs while Peeking - do you have mismatched Begin/Succeed/Fail?");return this._stack[this._numElements-1]},this.PeekPenultimate=()=>this._numElements>=2?this._stack[this._numElements-2]:null,this.Squash=()=>{if(this._numElements<2)throw new Error("Attempting to remove final stack element is illegal! Mismatched Begin/Succceed/Fail?");let t=this._stack[this._numElements-2],n=this._stack[this._numElements-1];t.SquashFrom(n),this._numElements-=1;},this.NoteErrorReported=()=>{for(let t of this._stack)t.reportedErrorInScope=true;};let e=200;for(let t=0;t<e;t++)this._stack[t]=new ic.StringParserElement;this._numElements=1;}};ur.StringParserState=Ja;});var za=O(Lt=>{Object.defineProperty(Lt,"__esModule",{value:true});Lt.StringParser=Lt.ParseSuccess=void 0;var Ha=Wn(),zd=rc();Lt.ParseSuccess=Symbol("ParseSuccessStruct");var Gn=class i{constructor(e){this.ParseRule=null,this.errorHandler=null,this.hadError=false,this.BeginRule=()=>this.state.Push(),this.FailRule=n=>(this.state.Pop(n),null),this.CancelRule=n=>{this.state.Pop(n);},this.SucceedRule=(n,r=null)=>{let a=this.state.Peek(n),s=this.state.PeekPenultimate();this.RuleDidSucceed&&this.RuleDidSucceed(r,s,a),this.state.Squash();let o=r;return o===null&&(o=i.ParseSuccess),o},this.Expect=(n,r=null,a=null)=>{let s=this.ParseObject(n);if(s===null){r===null&&(r=n.name);let o,l=this.LineRemainder();l===null||l.length===0?o="end of line":o=`'${l}'`,this.Error(`Expected ${r} but saw ${o}`),a!==null&&(s=a());}return s},this.Error=(n,r=false)=>{this.ErrorOnLine(n,this.lineIndex+1,r);},this.ErrorWithParsedObject=(n,r,a=false)=>{this.ErrorOnLine(n,r.debugMetadata?r.debugMetadata.startLineNumber:-1,a);},this.ErrorOnLine=(n,r,a)=>{if(!this.state.errorReportedAlreadyInScope){let s=a?"Warning":"Error";if(this.errorHandler)this.errorHandler(n,this.index,r-1,a);else throw new Error(`${s} on line ${r}: ${n}`);this.state.NoteErrorReported();}a||(this.hadError=true);},this.Warning=n=>this.Error(n,true),this.LineRemainder=()=>this.Peek(()=>this.ParseUntilCharactersFromString(`
|
|
5
|
+
\r`)),this.SetFlag=(n,r)=>{r?this.state.customFlags|=n:this.state.customFlags&=~n;},this.GetFlag=n=>!!(this.state.customFlags&n),this.ParseObject=n=>{let r=this.BeginRule(),a=this.state.stackHeight,s=n();if(a!==this.state.stackHeight)throw new Error("Mismatched Begin/Fail/Succeed rules");return s===null?this.FailRule(r):(this.SucceedRule(r,s),s)},this.Parse=n=>{let r=this.BeginRule(),a=n();return a===null?(this.FailRule(r),null):(this.SucceedRule(r,a),a)},this.OneOf=n=>{for(let r of n){let a=this.ParseObject(r);if(a!==null)return a}return null},this.OneOrMore=n=>{let r=[],a=null;do a=this.ParseObject(n),a!==null&&r.push(a);while(a!==null);return r.length>0?r:null},this.Optional=n=>()=>{let r=this.ParseObject(n);return r===null?i.ParseSuccess:r},this.Exclude=n=>()=>this.ParseObject(n)&&i.ParseSuccess,this.OptionalExclude=n=>()=>(this.ParseObject(n),i.ParseSuccess),this.String=n=>()=>this.ParseString(n),this.TryAddResultToList=(n,r,a=true)=>{if(n!==i.ParseSuccess){if(a&&Array.isArray(n)){let s=n;if(s!==null){for(let o of s)r.push(o);return}}r.push(n);}},this.Interleave=(n,r,a=null,s=true)=>{let o=this.BeginRule(),l=[],u=this.ParseObject(n);if(u===null)return this.FailRule(o);this.TryAddResultToList(u,l,s);let c=null,h=null;do{if(a!==null&&this.Peek(a)!==null||(c=this.ParseObject(r),c===null))break;if(this.TryAddResultToList(c,l,s),h=null,c!==null){if(h=this.ParseObject(n),h===null)break;this.TryAddResultToList(h,l,s);}}while((c!==null||h!==null)&&!(c===i.ParseSuccess&&h==i.ParseSuccess)&&this.remainingLength>0);return l.length===0?this.FailRule(o):this.SucceedRule(o,l)},this.ParseString=n=>{if(n.length>this.remainingLength)return null;let r=this.BeginRule(),a=this.index,s=this.characterInLineIndex,o=this.lineIndex,l=true;for(let u=0;u<n.length;u+=1){let c=n[u];if(this._chars[a]!==c){l=false;break}c===`
|
|
6
|
+
`&&(o++,s=-1),a++,s++;}return this.index=a,this.characterInLineIndex=s,this.lineIndex=o,l?this.SucceedRule(r,n):this.FailRule(r)},this.ParseSingleCharacter=()=>{if(this.remainingLength>0){let n=this._chars[this.index];return n===`
|
|
7
|
+
`&&(this.lineIndex+=1,this.characterInLineIndex=-1),this.index+=1,this.characterInLineIndex+=1,n}return "0"},this.ParseUntilCharactersFromString=(n,r=-1)=>this.ParseCharactersFromString(n,false,r),this.ParseUntilCharactersFromCharSet=(n,r=-1)=>this.ParseCharactersFromCharSet(n,false,r),this.ParseCharactersFromString=(n,r=-1,a=-1)=>{let s=new Ha.CharacterSet(n);return typeof r=="number"?this.ParseCharactersFromCharSet(s,true,r):this.ParseCharactersFromCharSet(s,r,a)},this.ParseCharactersFromCharSet=(n,r=true,a=-1)=>{a===-1&&(a=Number.MAX_SAFE_INTEGER);let s=this.index,o=this.index,l=this.characterInLineIndex,u=this.lineIndex,c=0;for(;o<this._chars.length&&n.set.has(this._chars[o])===r&&c<a;)this._chars[o]===`
|
|
8
|
+
`&&(u+=1,l=-1),o+=1,l+=1,c+=1;return this.index=o,this.characterInLineIndex=l,this.lineIndex=u,this.index>s?this._chars.slice(s,this.index).join(""):null},this.Peek=n=>{let r=this.BeginRule(),a=n();return this.CancelRule(r),a},this.ParseInt=()=>{let n=this.index,r=this.characterInLineIndex,a=this.ParseString("-")!==null;this.ParseCharactersFromString(" ");let s=this.ParseCharactersFromCharSet(i.numbersCharacterSet);if(s===null)return this.index=n,this.characterInLineIndex=r,null;let o;return Number.isNaN(Number(s))?(this.Error("Failed to read integer value: "+s+". Perhaps it's out of the range of acceptable numbers ink supports? ("+Number.MIN_SAFE_INTEGER+" to "+Number.MAX_SAFE_INTEGER+")"),null):(o=Number(s),a?-o:o)},this.ParseFloat=()=>{let n=this.index,r=this.characterInLineIndex,a=this.ParseInt();if(a!==null&&this.ParseString(".")!==null){let s=this.ParseCharactersFromCharSet(i.numbersCharacterSet);return +`${a}.${s}`}return this.index=n,this.characterInLineIndex=r,null},this.ParseNewline=()=>{let n=this.BeginRule();return this.ParseString("\r"),this.ParseString(`
|
|
9
|
+
`)===null?this.FailRule(n):this.SucceedRule(n,`
|
|
10
|
+
`)};let t=this.PreProcessInputString(e);this.state=new zd.StringParserState,e?this._chars=t.split(""):this._chars=[],this.inputString=t;}get currentCharacter(){return this.index>=0&&this.remainingLength>0?this._chars[this.index]:"0"}PreProcessInputString(e){return e}get endOfInput(){return this.index>=this._chars.length}get remainingString(){return this._chars.slice(this.index,this.index+this.remainingLength).join("")}get remainingLength(){return this._chars.length-this.index}get lineIndex(){return this.state.lineIndex}set lineIndex(e){this.state.lineIndex=e;}set characterInLineIndex(e){this.state.characterInLineIndex=e;}get characterInLineIndex(){return this.state.characterInLineIndex}get index(){return this.state.characterIndex}set index(e){this.state.characterIndex=e;}ParseUntil(e,t=null,n=null){let r=this.BeginRule(),a=new Ha.CharacterSet;t!==null&&(a.set=new Set([...a.set.values(),...t.set.values()])),n!==null&&(a.set=new Set([...a.set.values(),...n.set.values()]));let s="",o=null;do{let l=this.ParseUntilCharactersFromCharSet(a);if(l&&(s+=l),o=this.Peek(e),o!==null)break;{if(this.endOfInput)break;let u=this.currentCharacter;if(t!==null&&t.set.has(u)){s+=u,u===`
|
|
11
|
+
`&&(this.lineIndex+=1,this.characterInLineIndex=-1),this.index+=1,this.characterInLineIndex+=1;continue}else break}}while(true);return s.length>0?this.SucceedRule(r,String(s)):this.FailRule(r)}};Lt.StringParser=Gn;Gn.ParseSuccess=Lt.ParseSuccess;Gn.numbersCharacterSet=new Ha.CharacterSet("0123456789");});var sc=O(cr=>{Object.defineProperty(cr,"__esModule",{value:true});cr.CommentEliminator=void 0;var Ua=Wn(),Ud=za(),Ka=class extends Ud.StringParser{constructor(){super(...arguments),this._commentOrNewlineStartCharacter=new Ua.CharacterSet(`/\r
|
|
12
|
+
`),this._commentBlockEndCharacter=new Ua.CharacterSet("*"),this._newlineCharacters=new Ua.CharacterSet(`
|
|
13
|
+
\r`),this.Process=()=>{let e=this.Interleave(this.Optional(this.CommentsAndNewlines),this.Optional(this.MainInk));return e!==null?e.join(""):""},this.MainInk=()=>this.ParseUntil(this.CommentsAndNewlines,this._commentOrNewlineStartCharacter,null),this.CommentsAndNewlines=()=>{let e=this.Interleave(this.Optional(this.ParseNewline),this.Optional(this.ParseSingleComment));return e!==null?e.join(""):null},this.ParseSingleComment=()=>this.OneOf([this.EndOfLineComment,this.BlockComment]),this.EndOfLineComment=()=>this.ParseString("//")===null?null:(this.ParseUntilCharactersFromCharSet(this._newlineCharacters),""),this.BlockComment=()=>{if(this.ParseString("/*")===null)return null;let e=this.lineIndex,t=this.ParseUntil(this.String("*/"),this._commentBlockEndCharacter,null);return this.endOfInput||this.ParseString("*/"),t!=null?`
|
|
14
|
+
`.repeat(this.lineIndex-e):null};}PreProcessInputString(e){return e}};cr.CommentEliminator=Ka;});var pr=O(hr=>{Object.defineProperty(hr,"__esModule",{value:true});hr.Conditional=void 0;var Kd=oe(),ac=Ce(),Xd=te(),Xa=class extends Xd.ParsedObject{constructor(e,t){super(),this.initialCondition=e,this.branches=t,this._reJoinTarget=null,this.GenerateRuntimeObject=()=>{let n=new Kd.Container;this.initialCondition&&n.AddContent(this.initialCondition.runtimeObject);for(let r of this.branches){let a=r.runtimeObject;n.AddContent(a);}return this.initialCondition!==null&&this.branches[0].ownExpression!==null&&!this.branches[this.branches.length-1].isElse&&n.AddContent(ac.ControlCommand.PopEvaluatedValue()),this._reJoinTarget=ac.ControlCommand.NoOp(),n.AddContent(this._reJoinTarget),n},this.initialCondition&&this.AddContent(this.initialCondition),this.branches!==null&&this.AddContent(this.branches);}get typeName(){return "Conditional"}ResolveReferences(e){let t=this._reJoinTarget.path;for(let n of this.branches){if(!n.returnDivert)throw new Error;n.returnDivert.targetPath=t;}super.ResolveReferences(e);}};hr.Conditional=Xa;});var Et=O(dr=>{Object.defineProperty(dr,"__esModule",{value:true});dr.Text=void 0;var Yd=te(),Zd=ie(),Ya=class extends Yd.ParsedObject{constructor(e){super(),this.text=e,this.GenerateRuntimeObject=()=>new Zd.StringValue(this.text),this.toString=()=>this.text;}get typeName(){return "Text"}};dr.Text=Ya;});var mr=O(fr=>{Object.defineProperty(fr,"__esModule",{value:true});fr.ConstantDeclaration=void 0;var Qd=te(),ef=pt(),Za=class extends Qd.ParsedObject{get constantName(){var e;return (e=this.constantIdentifier)===null||e===void 0?void 0:e.name}get expression(){if(!this._expression)throw new Error;return this._expression}constructor(e,t){super(),this._expression=null,this.GenerateRuntimeObject=()=>null,this.constantIdentifier=e,t&&(this._expression=this.AddContent(t));}get typeName(){return "CONST"}ResolveReferences(e){super.ResolveReferences(e),e.CheckForNamingCollisions(this,this.constantIdentifier,ef.SymbolType.Var);}};fr.ConstantDeclaration=Za;});var on=O(gr=>{Object.defineProperty(gr,"__esModule",{value:true});gr.FlowLevel=void 0;var oc;(function(i){i[i.Story=0]="Story",i[i.Knot=1]="Knot",i[i.Stitch=2]="Stitch",i[i.WeavePoint=3]="WeavePoint";})(oc||(gr.FlowLevel=oc={}));});var $n=O(Cr=>{Object.defineProperty(Cr,"__esModule",{value:true});Cr.Gather=void 0;var tf=oe(),nf=te(),rf=pt(),Qa=class extends nf.ParsedObject{get name(){var e;return ((e=this.identifier)===null||e===void 0?void 0:e.name)||null}get runtimeContainer(){return this.runtimeObject}constructor(e,t){super(),this.indentationDepth=t,this.GenerateRuntimeObject=()=>{let n=new tf.Container;if(n.name=this.name,this.story.countAllVisits&&(n.visitsShouldBeCounted=true),n.countingAtStartOnly=true,this.content)for(let r of this.content)n.AddContent(r.runtimeObject);return n},this.toString=()=>{var n,r;return `- ${!((n=this.identifier)===null||n===void 0)&&n.name?"("+((r=this.identifier)===null||r===void 0?void 0:r.name)+")":"gather"}`},e&&(this.identifier=e);}get typeName(){return "Gather"}ResolveReferences(e){super.ResolveReferences(e),this.identifier&&(this.identifier.name||"").length>0&&e.CheckForNamingCollisions(this,this.identifier,rf.SymbolType.SubFlowAndWeave);}};Cr.Gather=Qa;});var jt=O(vr=>{Object.defineProperty(vr,"__esModule",{value:true});vr.Path=void 0;var yr=U(),lc=it(),ln=on(),sf=Bt(),eo=class{get baseTargetLevel(){return this.baseLevelIsAmbiguous?ln.FlowLevel.Story:this._baseTargetLevel}get baseLevelIsAmbiguous(){return !this._baseTargetLevel}get firstComponent(){return this.components==null||!this.components.length?null:this.components[0].name}get numberOfComponents(){return this.components?this.components.length:0}get dotSeparatedComponents(){return this._dotSeparatedComponents==null&&(this._dotSeparatedComponents=(this.components?this.components:[]).map(e=>e.name).filter(yr.filterUndef).join(".")),this._dotSeparatedComponents}constructor(e,t){this._dotSeparatedComponents=null,this.toString=()=>this.components===null||this.components.length===0?this.baseTargetLevel===ln.FlowLevel.WeavePoint?"-> <next gather point>":"<invalid Path>":`-> ${this.dotSeparatedComponents}`,this.ResolveFromContext=n=>{if(this.components==null||this.components.length==0)return null;let r=this.ResolveBaseTarget(n);return r===null?null:this.components.length>1?this.ResolveTailComponents(r):r},this.ResolveBaseTarget=n=>{let r=this.firstComponent,a=n;for(;a;){let s=a===n,o=this.GetChildFromContext(a,r,null,s);if(o)return o;a=a.parent;}return null},this.ResolveTailComponents=n=>{let r=n;if(!this.components)return null;for(let a=1;a<this.components.length;++a){let s=this.components[a].name,o,l=(0, yr.asOrNull)(r,lc.FlowBase);if(l!==null?o=l.flowLevel+1:o=ln.FlowLevel.WeavePoint,r=this.GetChildFromContext(r,s,o),r===null)break}return r},this.GetChildFromContext=(n,r,a,s=false)=>{let o=a===null,l=(0, yr.asOrNull)(n,sf.Weave);if(r&&l!==null&&(o||a===ln.FlowLevel.WeavePoint))return l.WeavePointNamed(r);let u=(0, yr.asOrNull)(n,lc.FlowBase);if(r&&u!==null){let c=s||u.flowLevel===ln.FlowLevel.Knot;return u.ContentWithNameAtLevel(r,a,c)}return null},Object.values(ln.FlowLevel).includes(e)?(this._baseTargetLevel=e,this.components=t||[]):Array.isArray(e)?(this._baseTargetLevel=null,this.components=e||[]):(this._baseTargetLevel=null,this.components=[e]);}get typeName(){return "Path"}};vr.Path=eo;});var io=O(br=>{Object.defineProperty(br,"__esModule",{value:true});br.ReturnType=void 0;var af=te(),of=oe(),to=Ce(),lf=kt(),no=class extends af.ParsedObject{constructor(e=null){super(),this.returnedExpression=null,this.GenerateRuntimeObject=()=>{let t=new of.Container;return this.returnedExpression?t.AddContent(this.returnedExpression.runtimeObject):(t.AddContent(to.ControlCommand.EvalStart()),t.AddContent(new lf.Void),t.AddContent(to.ControlCommand.EvalEnd())),t.AddContent(to.ControlCommand.PopFunction()),t},e&&(this.returnedExpression=this.AddContent(e));}get typeName(){return "ReturnType"}};br.ReturnType=no;});var Jn=O(Sr=>{Object.defineProperty(Sr,"__esModule",{value:true});Sr.ClosestFlowBase=void 0;function uf(i){let e=i.parent;for(;e;){if(e.hasOwnProperty("iamFlowbase")&&e.iamFlowbase())return e;e=e.parent;}return null}Sr.ClosestFlowBase=uf;});var Dr=O(Er=>{Object.defineProperty(Er,"__esModule",{value:true});Er.Identifier=void 0;var ro=class i{constructor(e){this.debugMetadata=null,this.toString=()=>this.name||"undefined identifer",this.name=e;}get typeName(){return "Identifier"}static Done(){return new i("DONE")}};Er.Identifier=ro;});var it=O(Ar=>{Object.defineProperty(Ar,"__esModule",{value:true});Ar.FlowBase=void 0;var cf=an(),so=cn(),hf=un(),rt=on(),pf=$n(),df=te(),ff=jt(),mf=io(),gf=oe(),Cf=nt(),yf=bt(),ao=pt(),vf=Bt(),bf=Jn(),Sf=Dr(),uc=U(),oo=class i extends df.ParsedObject{get hasParameters(){return this.args!==null&&this.args.length>0}get subFlowsByName(){return this._subFlowsByName}get typeName(){return this.isFunction?"Function":String(this.flowLevel)}get name(){var e;return ((e=this.identifier)===null||e===void 0?void 0:e.name)||null}constructor(e,t=null,n=null,r=false,a=false){super(),this.isFunction=r,this._rootWeave=null,this._subFlowsByName=new Map,this._startingSubFlowDivert=null,this._startingSubFlowRuntime=null,this._firstChildFlow=null,this.variableDeclarations=new Map,this.identifier=null,this.args=null,this.iamFlowbase=()=>true,this.SplitWeaveAndSubFlowContent=(s,o)=>{var l,u;let c=[],h=[];this._subFlowsByName=new Map;for(let d of s){let y=(0, uc.asOrNull)(d,i);y?(this._firstChildFlow===null&&(this._firstChildFlow=y),h.push(d),!((l=y.identifier)===null||l===void 0)&&l.name&&this._subFlowsByName.set((u=y.identifier)===null||u===void 0?void 0:u.name,y)):c.push(d);}o&&c.push(new pf.Gather(null,1),new so.Divert(new ff.Path(Sf.Identifier.Done())));let m=[];return c.length>0&&(this._rootWeave=new vf.Weave(c,0),m.push(this._rootWeave)),h.length>0&&m.push(...h),m},this.ResolveVariableWithName=(s,o)=>{var l;let u={},c=o===null?this:(0, bf.ClosestFlowBase)(o);if(c){if(c.args!==null){for(let h of c.args)if(((l=h.identifier)===null||l===void 0?void 0:l.name)===s)return u.found=true,u.isArgument=true,u.ownerFlow=c,u}if(c!==this.story&&c.variableDeclarations.has(s))return u.found=true,u.ownerFlow=c,u.isTemporary=true,u}return this.story.variableDeclarations.has(s)?(u.found=true,u.ownerFlow=this.story,u.isGlobal=true,u):(u.found=false,u)},this.AddNewVariableDeclaration=s=>{let o=s.variableName;if(this.variableDeclarations.has(o)){let l=this.variableDeclarations.get(o),u="";l.debugMetadata&&(u=` (${l.debugMetadata})`),this.Error(`found declaration variable '${o}' that was already declared${u}`,s,false);return}this.variableDeclarations.set(s.variableName,s);},this.ResolveWeavePointNaming=()=>{this._rootWeave&&this._rootWeave.ResolveWeavePointNaming();for(let[,s]of this._subFlowsByName)s.hasOwnProperty("ResolveWeavePointNaming")&&s.ResolveWeavePointNaming();},this.GenerateRuntimeObject=()=>{var s;let o=null;this.isFunction?this.CheckForDisallowedFunctionFlowControl():(this.flowLevel===rt.FlowLevel.Knot||this.flowLevel===rt.FlowLevel.Stitch)&&(o=this.Find(mf.ReturnType)(),o!==null&&this.Error(`Return statements can only be used in knots that are declared as functions: == function ${this.identifier} ==`,o));let l=new gf.Container;l.name=(s=this.identifier)===null||s===void 0?void 0:s.name,this.story.countAllVisits&&(l.visitsShouldBeCounted=true),this.GenerateArgumentVariableAssignments(l);let u=0;for(;this.content!==null&&u<this.content.length;){let c=this.content[u];if(c instanceof i){let h=c,m=h.runtimeObject;u===0&&!h.hasParameters&&this.flowLevel===rt.FlowLevel.Knot&&(this._startingSubFlowDivert=new Cf.Divert,l.AddContent(this._startingSubFlowDivert),this._startingSubFlowRuntime=m);let d=m,y=l.namedContent.get(d.name)||null;if(y){let v=`${this.GetType()} already contains flow named '${d.name}' (at ${y.debugMetadata})`;this.Error(v,h);}l.AddToNamedContentOnly(d);}else c&&l.AddContent(c.runtimeObject);u+=1;}return this.flowLevel!==rt.FlowLevel.Story&&!this.isFunction&&this._rootWeave!==null&&o===null&&this._rootWeave.ValidateTermination(this.WarningInTermination),l},this.GenerateArgumentVariableAssignments=s=>{var o;if(!(this.args===null||this.args.length===0))for(let l=this.args.length-1;l>=0;--l){let u=((o=this.args[l].identifier)===null||o===void 0?void 0:o.name)||null,c=new yf.VariableAssignment(u,true);s.AddContent(c);}},this.ContentWithNameAtLevel=(s,o=null,l=false)=>{var u;if((o===this.flowLevel||o===null)&&s===((u=this.identifier)===null||u===void 0?void 0:u.name))return this;if(o===rt.FlowLevel.WeavePoint||o===null){let h=null;if(this._rootWeave&&(h=this._rootWeave.WeavePointNamed(s),h))return h;if(o===rt.FlowLevel.WeavePoint)return l?this.DeepSearchForAnyLevelContent(s):null}if(o!==null&&o<this.flowLevel)return null;let c=this._subFlowsByName.get(s)||null;return c&&(o===null||o===c.flowLevel)?c:l?this.DeepSearchForAnyLevelContent(s):null},this.DeepSearchForAnyLevelContent=s=>{let o=this.ContentWithNameAtLevel(s,rt.FlowLevel.WeavePoint,false);if(o)return o;for(let[,l]of this._subFlowsByName){let u=l.ContentWithNameAtLevel(s,null,true);if(u)return u}return null},this.CheckForDisallowedFunctionFlowControl=()=>{this.flowLevel!==rt.FlowLevel.Knot&&this.Error("Functions cannot be stitches - i.e. they should be defined as '== function myFunc ==' rather than internal to another knot.");for(let[l,u]of this._subFlowsByName)this.Error(`Functions may not contain stitches, but saw '${l}' within the function '${this.identifier}'`,u);if(!this._rootWeave)throw new Error;let s=this._rootWeave.FindAll(so.Divert)();for(let l of s)!l.isFunctionCall&&!(l.parent instanceof hf.DivertTarget)&&this.Error(`Functions may not contain diverts, but saw '${l}'`,l);let o=this._rootWeave.FindAll(cf.Choice)();for(let l of o)this.Error(`Functions may not contain choices, but saw '${l}'`,l);},this.WarningInTermination=s=>{let o="Apparent loose end exists where the flow runs out. Do you need a '-> DONE' statement, choice or divert?";s.parent===this._rootWeave&&this._firstChildFlow&&(o=`${o} Note that if you intend to enter '${this._firstChildFlow.identifier}' next, you need to divert to it explicitly.`);let l=(0, uc.asOrNull)(s,so.Divert);l&&l.isTunnel&&(o+=` When final tunnel to '${l.target} ->' returns it won't have anywhere to go.`),this.Warning(o,s);},this.toString=()=>`${this.typeName} '${this.identifier}'`,this.identifier=e,this.args=n,t===null&&(t=[]),this.PreProcessTopLevelObjects(t),t=this.SplitWeaveAndSubFlowContent(t,this.GetType()=="Story"&&!a),this.AddContent(t);}PreProcessTopLevelObjects(e){}ResolveReferences(e){var t,n;if(this._startingSubFlowDivert){if(!this._startingSubFlowRuntime)throw new Error;this._startingSubFlowDivert.targetPath=this._startingSubFlowRuntime.path;}if(super.ResolveReferences(e),this.args!==null){for(let r of this.args)e.CheckForNamingCollisions(this,r.identifier,ao.SymbolType.Arg,"argument");for(let r=0;r<this.args.length;r+=1)for(let a=r+1;a<this.args.length;a+=1)((t=this.args[r].identifier)===null||t===void 0?void 0:t.name)==((n=this.args[a].identifier)===null||n===void 0?void 0:n.name)&&this.Error(`Multiple arguments with the same name: '${this.args[r].identifier}'`);}if(this.flowLevel!==rt.FlowLevel.Story){let r=this.flowLevel===rt.FlowLevel.Knot?ao.SymbolType.Knot:ao.SymbolType.SubFlowAndWeave;e.CheckForNamingCollisions(this,this.identifier,r);}}};Ar.FlowBase=oo;});var xr=O(wr=>{Object.defineProperty(wr,"__esModule",{value:true});wr.ContentList=void 0;var Ef=oe(),Df=te(),Af=Et(),wf=U(),lo=class extends Df.ParsedObject{get runtimeContainer(){return this.runtimeObject}constructor(e,...t){super(),this.dontFlatten=false,this.TrimTrailingWhitespace=()=>{for(let n=this.content.length-1;n>=0;--n){let r=(0, wf.asOrNull)(this.content[n],Af.Text);if(r===null)break;if(r.text=r.text.replace(new RegExp(/[ \t]/g),""),r.text.length===0)this.content.splice(n,1);else break}},this.GenerateRuntimeObject=()=>{let n=new Ef.Container;if(this.content!==null)for(let r of this.content){let a=r.runtimeObject;a&&n.AddContent(a);}return this.dontFlatten&&this.story.DontFlattenContainer(n),n},this.toString=()=>`ContentList(${this.content.join(", ")})`,e&&this.AddContent(e),t&&this.AddContent(t);}get typeName(){return "ContentList"}};wr.ContentList=lo;});var hn=O(_r=>{Object.defineProperty(_r,"__esModule",{value:true});_r.VariableReference=void 0;var xf=Te(),_f=Pe(),uo=class extends xf.InkObject{get containerForCount(){return this.pathForCount===null?null:this.ResolvePath(this.pathForCount).container}get pathStringForCount(){return this.pathForCount===null?null:this.CompactPathString(this.pathForCount)}set pathStringForCount(e){e===null?this.pathForCount=null:this.pathForCount=new _f.Path(e);}constructor(e=null){super(),this.pathForCount=null,this.name=e;}toString(){return this.name!=null?"var("+this.name+")":"read_count("+this.pathStringForCount+")"}};_r.VariableReference=uo;});var pn=O(Or=>{Object.defineProperty(Or,"__esModule",{value:true});Or.VariableReference=void 0;var Of=xr(),Pf=Be(),cc=it(),Tf=jt(),Ff=hn(),Nf=Bt(),If=Dr(),hc=U(),co=class extends Pf.Expression{get name(){return this.path.join(".")}get path(){return this.pathIdentifiers.map(e=>e.name).filter(hc.filterUndef)}get identifier(){if(!this.pathIdentifiers||this.pathIdentifiers.length==0)return null;let e=this.path.join(".");return new If.Identifier(e)}get runtimeVarRef(){return this._runtimeVarRef}constructor(e){super(),this.pathIdentifiers=e,this._runtimeVarRef=null,this.isConstantReference=false,this.isListItemReference=false,this.GenerateIntoContainer=t=>{let n=this.story.constants.get(this.name);if(n){n.GenerateConstantIntoContainer(t),this.isConstantReference=true;return}if(this._runtimeVarRef=new Ff.VariableReference(this.name),this.path.length===1||this.path.length===2){let r="",a="";this.path.length===1?r=this.path[0]:(a=this.path[0],r=this.path[1]),this.story.ResolveListItem(a,r,this)&&(this.isListItemReference=true);}t.AddContent(this._runtimeVarRef);},this.toString=()=>`{${this.path.join(".")}}`;}get typeName(){return "ref"}ResolveReferences(e){if(super.ResolveReferences(e),this.isConstantReference||this.isListItemReference)return;let t=new Tf.Path(this.pathIdentifiers),n=t.ResolveFromContext(this);if(n){if(!n.containerForCounting)throw new Error;if(n.containerForCounting.visitsShouldBeCounted=true,this._runtimeVarRef===null)return;this._runtimeVarRef.pathForCount=n.runtimePath,this._runtimeVarRef.name=null;let r=(0, hc.asOrNull)(n,cc.FlowBase);r&&r.isFunction&&(this.parent instanceof Nf.Weave||this.parent instanceof Of.ContentList||this.parent instanceof cc.FlowBase)&&this.Warning(`'${r.identifier}' being used as read count rather than being called as function. Perhaps you intended to write ${r.identifier}()`);return}if(this.path.length>1){let r=`Could not find target for read count: ${t}`;this.path.length<=2&&(r+=`, or couldn't find list item with the name ${this.path.join(",")}`),this.Error(r);return}e.ResolveVariableWithName(this.name,this).found||this.Error(`Unresolved variable: ${this.name}`,this);}};Or.VariableReference=co;});var Hn=O(Nr=>{Object.defineProperty(Nr,"__esModule",{value:true});Nr.FunctionCall=void 0;var st=Ce(),Vf=cn(),kf=un(),Rf=Be(),Lf=Ne(),jf=ie(),Tr=tt(),pc=Hi(),Bf=jt(),Wf=ie(),qf=pn(),Pr=U(),Fr=class i extends Rf.Expression{get proxyDivert(){return this._proxyDivert}get name(){return this._proxyDivert.target.firstComponent||""}get args(){return this._proxyDivert.args}get runtimeDivert(){return this._proxyDivert.runtimeDivert}get isChoiceCount(){return this.name==="CHOICE_COUNT"}get isTurns(){return this.name==="TURNS"}get isTurnsSince(){return this.name==="TURNS_SINCE"}get isRandom(){return this.name==="RANDOM"}get isSeedRandom(){return this.name==="SEED_RANDOM"}get isListRange(){return this.name==="LIST_RANGE"}get isListRandom(){return this.name==="LIST_RANDOM"}get isReadCount(){return this.name==="READ_COUNT"}constructor(e,t){super(),this._divertTargetToCount=null,this._variableReferenceToCount=null,this.shouldPopReturnedValue=false,this.GenerateIntoContainer=n=>{let r=this.story.ResolveList(this.name),a=false;if(this.isChoiceCount)this.args.length>0&&this.Error("The CHOICE_COUNT() function shouldn't take any arguments"),n.AddContent(st.ControlCommand.ChoiceCount());else if(this.isTurns)this.args.length>0&&this.Error("The TURNS() function shouldn't take any arguments"),n.AddContent(st.ControlCommand.Turns());else if(this.isTurnsSince||this.isReadCount){let s=(0, Pr.asOrNull)(this.args[0],kf.DivertTarget),o=(0, Pr.asOrNull)(this.args[0],qf.VariableReference);if(this.args.length!==1||s===null&&o===null){this.Error(`The ${this.name}() function should take one argument: a divert target to the target knot, stitch, gather or choice you want to check. e.g. TURNS_SINCE(-> myKnot)`);return}s?(this._divertTargetToCount=s,this.AddContent(this._divertTargetToCount),this._divertTargetToCount.GenerateIntoContainer(n)):o&&(this._variableReferenceToCount=o,this.AddContent(this._variableReferenceToCount),this._variableReferenceToCount.GenerateIntoContainer(n)),this.isTurnsSince?n.AddContent(st.ControlCommand.TurnsSince()):n.AddContent(st.ControlCommand.ReadCount());}else if(this.isRandom){this.args.length!==2&&this.Error("RANDOM should take 2 parameters: a minimum and a maximum integer");for(let s=0;s<this.args.length;s+=1){let o=(0, Pr.asOrNull)(this.args[s],pc.NumberExpression);if(o&&!o.isInt()){let l=s===0?"minimum":"maximum";this.Error(`RANDOM's ${l} parameter should be an integer`);}this.args[s].GenerateIntoContainer(n);}n.AddContent(st.ControlCommand.Random());}else if(this.isSeedRandom){this.args.length!==1&&this.Error("SEED_RANDOM should take 1 parameter - an integer seed");let s=(0, Pr.asOrNull)(this.args[0],pc.NumberExpression);s&&!s.isInt()&&this.Error("SEED_RANDOM's parameter should be an integer seed"),this.args[0].GenerateIntoContainer(n),n.AddContent(st.ControlCommand.SeedRandom());}else if(this.isListRange){this.args.length!==3&&this.Error("LIST_RANGE should take 3 parameters - a list, a min and a max");for(let s=0;s<this.args.length;s+=1)this.args[s].GenerateIntoContainer(n);n.AddContent(st.ControlCommand.ListRange());}else if(this.isListRandom)this.args.length!==1&&this.Error("LIST_RANDOM should take 1 parameter - a list"),this.args[0].GenerateIntoContainer(n),n.AddContent(st.ControlCommand.ListRandom());else if(Tr.NativeFunctionCall.CallExistsWithName(this.name)){let s=Tr.NativeFunctionCall.CallWithName(this.name);if(s.numberOfParameters!==this.args.length){let o=`${i.name} should take ${s.numberOfParameters} parameter`;s.numberOfParameters>1&&(o+="s"),this.Error(o);}for(let o=0;o<this.args.length;o+=1)this.args[o].GenerateIntoContainer(n);n.AddContent(Tr.NativeFunctionCall.CallWithName(this.name));}else if(r!==null)if(this.args.length>1&&this.Error("Can currently only construct a list from one integer (or an empty list from a given list definition)"),this.args.length===1)n.AddContent(new Wf.StringValue(this.name)),this.args[0].GenerateIntoContainer(n),n.AddContent(st.ControlCommand.ListFromInt());else {let s=new Lf.InkList;s.SetInitialOriginName(this.name),n.AddContent(new jf.ListValue(s));}else n.AddContent(this._proxyDivert.runtimeObject),a=true;a||this.content.splice(this.content.indexOf(this._proxyDivert),1),this.shouldPopReturnedValue&&n.AddContent(st.ControlCommand.PopEvaluatedValue());},this.toString=()=>{let n=this.args.join(", ");return `${this.name}(${n})`},this._proxyDivert=new Vf.Divert(new Bf.Path(e),t),this._proxyDivert.isFunctionCall=true,this.AddContent(this._proxyDivert);}get typeName(){return "FunctionCall"}ResolveReferences(e){if(super.ResolveReferences(e),!this.content.includes(this._proxyDivert)&&this.args!==null)for(let t of this.args)t.ResolveReferences(e);if(this._divertTargetToCount){let t=this._divertTargetToCount.divert,n=t.runtimeDivert.variableDivertName!=null;if(n){this.Error(`When getting the TURNS_SINCE() of a variable target, remove the '->' - i.e. it should just be TURNS_SINCE(${t.runtimeDivert.variableDivertName})`);return}let r=t.targetContent;if(r===null)n||this.Error(`Failed to find target for TURNS_SINCE: '${t.target}'`);else {if(!r.containerForCounting)throw new Error;r.containerForCounting.turnIndexShouldBeCounted=true;}}else if(this._variableReferenceToCount){let t=this._variableReferenceToCount.runtimeVarRef;if(!t)throw new Error;t.pathForCount!==null&&this.Error(`Should be '${i.name}'(-> '${this._variableReferenceToCount.name}). Usage without the '->' only makes sense for variable targets.`);}}};Nr.FunctionCall=Fr;Fr.IsBuiltIn=i=>Tr.NativeFunctionCall.CallExistsWithName(i)?true:i==="CHOICE_COUNT"||i==="TURNS_SINCE"||i==="TURNS"||i==="RANDOM"||i==="SEED_RANDOM"||i==="LIST_VALUE"||i==="LIST_RANDOM"||i==="READ_COUNT";});var po=O(Ir=>{Object.defineProperty(Ir,"__esModule",{value:true});Ir.MultipleConditionExpression=void 0;var Mf=Be(),Gf=tt(),ho=class extends Mf.Expression{get subExpressions(){return this.content}constructor(e){super(),this.GenerateIntoContainer=t=>{let n=true;for(let r of this.subExpressions)r.GenerateIntoContainer(t),n||t.AddContent(Gf.NativeFunctionCall.CallWithName("&&")),n=false;},this.AddContent(e);}get typeName(){return "MultipleConditionExpression"}};Ir.MultipleConditionExpression=ho;});var un=O(Vr=>{Object.defineProperty(Vr,"__esModule",{value:true});Vr.DivertTarget=void 0;var $f=Ra(),Jf=an(),Hf=pr(),zf=Co(),Uf=ie(),fo=Be(),Kf=it(),dc=Hn(),Xf=po(),fc=pn(),mo=U(),go=class i extends fo.Expression{get runtimeDivert(){if(!this._runtimeDivert)throw new Error;return this._runtimeDivert}get runtimeDivertTargetValue(){if(!this._runtimeDivertTargetValue)throw new Error;return this._runtimeDivertTargetValue}constructor(e){super(),this._runtimeDivert=null,this._runtimeDivertTargetValue=null,this.GenerateIntoContainer=t=>{this.divert.GenerateRuntimeObject(),this._runtimeDivert=this.divert.runtimeDivert,this._runtimeDivertTargetValue=new Uf.DivertTargetValue,t.AddContent(this.runtimeDivertTargetValue);},this.Equals=t=>{let n=(0, mo.asOrNull)(t,i);if(!n||!this.divert.target||!n.divert.target)return false;let r=this.divert.target.dotSeparatedComponents,a=n.divert.target.dotSeparatedComponents;return r===a},this.divert=this.AddContent(e);}get typeName(){return "DivertTarget"}ResolveReferences(e){if(super.ResolveReferences(e),this.divert.isDone||this.divert.isEnd){this.Error("Can't use -> DONE or -> END as variable divert targets",this);return}let t=this;for(;t&&t instanceof fo.Expression;){let r=false,a=false,s=t.parent;if(s instanceof $f.BinaryExpression){let o=s;o.opName!=="=="&&o.opName!=="!="?r=true:(o.leftExpression instanceof i||o.leftExpression instanceof fc.VariableReference)&&(o.rightExpression instanceof i||o.rightExpression instanceof fc.VariableReference)||(r=true),a=true;}else if(s instanceof dc.FunctionCall){let o=s;!o.isTurnsSince&&!o.isReadCount&&(r=true),a=true;}else (s instanceof fo.Expression||s instanceof Xf.MultipleConditionExpression||s instanceof Jf.Choice&&s.condition===t||s instanceof Hf.Conditional||s instanceof zf.ConditionalSingleBranch)&&(r=true,a=true);if(r&&this.Error(`Can't use a divert target like that. Did you intend to call '${this.divert.target}' as a function: likeThis(), or check the read count: likeThis, with no arrows?`,this),a)break;t=s;}if(this.runtimeDivert.hasVariableTarget){if(!this.divert.target)throw new Error;this.Error(`Since '${this.divert.target.dotSeparatedComponents}' is a variable, it shouldn't be preceded by '->' here.`);}this.runtimeDivert.targetPath&&(this.runtimeDivertTargetValue.targetPath=this.runtimeDivert.targetPath);let n=this.divert.targetContent;if(n!==null){let r=n.containerForCounting;if(r!==null){let s=(0, mo.asOrNull)(this.parent,dc.FunctionCall);s&&s.isTurnsSince||(r.visitsShouldBeCounted=true),r.turnIndexShouldBeCounted=true;}let a=(0, mo.asOrNull)(n,Kf.FlowBase);if(a!=null&&a.args!==null)for(let s of a.args)s.isByReference&&this.Error(`Can't store a divert target to a knot or function that has by-reference arguments ('${a.identifier}' has 'ref ${s.identifier}').`);}}};Vr.DivertTarget=go;});var cn=O(kr=>{Object.defineProperty(kr,"__esModule",{value:true});kr.Divert=void 0;var Yf=oe(),zn=Ce(),Zf=nt(),yo=un(),vo=it(),Qf=Hn(),em=te(),mc=jt(),tm=Pe(),gc=Rt(),nm=ie(),Cc=pn(),im=Jn(),Un=U(),bo=class extends em.ParsedObject{get runtimeDivert(){if(!this._runtimeDivert)throw new Error;return this._runtimeDivert}set runtimeDivert(e){this._runtimeDivert=e;}get isEnd(){return !!(this.target&&this.target.dotSeparatedComponents==="END")}get isDone(){return !!(this.target&&this.target.dotSeparatedComponents==="DONE")}constructor(e,t){super(),this.args=[],this.target=null,this.targetContent=null,this._runtimeDivert=null,this.isFunctionCall=false,this.isEmpty=false,this.isTunnel=false,this.isThread=false,this.GenerateRuntimeObject=()=>{if(this.isEnd)return zn.ControlCommand.End();if(this.isDone)return zn.ControlCommand.Done();this.runtimeDivert=new Zf.Divert,this.ResolveTargetContent(),this.CheckArgumentValidity();let n=this.args!==null&&this.args.length>0;if(n||this.isFunctionCall||this.isTunnel||this.isThread){let r=new Yf.Container;if(n){this.isFunctionCall||r.AddContent(zn.ControlCommand.EvalStart());let a=null;this.targetContent&&(a=this.targetContent.args);for(let s=0;s<this.args.length;++s){let o=this.args[s],l=null;if(a&&s<a.length&&(l=a[s]),l&&l.isByReference){let u=(0, Un.asOrNull)(o,Cc.VariableReference);if(!u){this.Error(`Expected variable name to pass by reference to 'ref ${l.identifier}' but saw ${o}`);break}let c=new mc.Path(u.pathIdentifiers);if(c.ResolveFromContext(this)){this.Error(`can't pass a read count by reference. '${c.dotSeparatedComponents}' is a knot/stitch/label, but '${this.target.dotSeparatedComponents}' requires the name of a VAR to be passed.`);break}let m=new nm.VariablePointerValue(u.name);r.AddContent(m);}else o.GenerateIntoContainer(r);}this.isFunctionCall||r.AddContent(zn.ControlCommand.EvalEnd());}return this.isThread?r.AddContent(zn.ControlCommand.StartThread()):(this.isFunctionCall||this.isTunnel)&&(this.runtimeDivert.pushesToStack=true,this.runtimeDivert.stackPushType=this.isFunctionCall?gc.PushPopType.Function:gc.PushPopType.Tunnel),r.AddContent(this.runtimeDivert),r}return this.runtimeDivert},this.PathAsVariableName=()=>this.target?this.target.firstComponent:null,this.ResolveTargetContent=()=>{if(!(this.isEmpty||this.isEnd)&&this.targetContent===null){let n=this.PathAsVariableName();if(n!==null){let r=(0, Un.asOrNull)((0, im.ClosestFlowBase)(this),vo.FlowBase);if(r){let a=r.ResolveVariableWithName(n,this);if(a.found){if(a.isArgument&&a.ownerFlow&&a.ownerFlow.args){let s=a.ownerFlow.args.find(o=>{var l;return ((l=o.identifier)===null||l===void 0?void 0:l.name)==n});s&&!s.isDivertTarget&&this.Error(`Since '${s.identifier}' is used as a variable divert target (on ${this.debugMetadata}), it should be marked as: -> ${s.identifier}`,a.ownerFlow);}this.runtimeDivert.variableDivertName=n;return}}}if(!this.target)throw new Error;this.targetContent=this.target.ResolveFromContext(this);}},this.CheckArgumentValidity=()=>{if(this.isEmpty)return;let n=0;if(this.args!==null&&this.args.length>0&&(n=this.args.length),this.targetContent===null)return;let r=(0, Un.asOrNull)(this.targetContent,vo.FlowBase);if(n===0&&(r===null||!r.hasParameters))return;if(r===null&&n>0){this.Error("target needs to be a knot or stitch in order to pass arguments");return}else if(r!==null&&(r.args===null||!r.args&&n>0)){this.Error(`target (${r.name}) doesn't take parameters`);return}else if(this.parent instanceof yo.DivertTarget){n>0&&this.Error("can't store arguments in a divert target variable");return}let a=r.args.length;if(a!==n){let s;n===0?s="but there weren't any passed to it":n<a?s=`but only got ${n}`:s=`but got ${n}`,this.Error(`to '${r.identifier}' requires ${a} arguments, ${s}`);return}for(let s=0;s<a;++s){let o=r.args[s],l=this.args[s];if(o.isDivertTarget){let u=(0, Un.asOrNull)(l,Cc.VariableReference);if(!(l instanceof yo.DivertTarget)&&u===null)this.Error(`Target '${r.identifier}' expects a divert target for the parameter named -> ${o.identifier} but saw ${l}`,l);else if(u){let c=new mc.Path(u.pathIdentifiers);c.ResolveFromContext(u)&&this.Error(`Passing read count of '${c.dotSeparatedComponents}' instead of a divert target. You probably meant '${c}'`);}}}if(r===null){this.Error("Can't call as a function or with arguments unless it's a knot or stitch");return}},this.CheckExternalArgumentValidity=n=>{let r=this.target?this.target.firstComponent:null,a=n.externals.get(r);if(!a)throw new Error("external not found");let s=a.argumentNames.length,o=0;this.args&&(o=this.args.length),o!==s&&this.Error(`incorrect number of arguments sent to external function '${r}'. Expected ${s} but got ${o}`);},this.toString=()=>{let n="";if(this.target!==null)n+=this.target.toString();else return "-> <empty divert>";return this.isTunnel&&(n+=" ->"),this.isFunctionCall&&(n+=" ()"),n},e&&(this.target=e),t&&(this.args=t,this.AddContent(t));}get typeName(){return "Divert"}ResolveReferences(e){if(this.isEmpty||this.isEnd||this.isDone)return;if(!this.runtimeDivert)throw new Error;this.targetContent&&(this.runtimeDivert.targetPath=this.targetContent.runtimePath),super.ResolveReferences(e);let t=(0, Un.asOrNull)(this.targetContent,vo.FlowBase);t&&(!t.isFunction&&this.isFunctionCall?super.Error(`${t.identifier} hasn't been marked as a function, but it's being called as one. Do you need to declare the knot as '== function ${t.identifier} =='?`):t.isFunction&&!this.isFunctionCall&&!(this.parent instanceof yo.DivertTarget)&&super.Error(t.identifier+" can't be diverted to. It can only be called as a function since it's been marked as such: '"+t.identifier+"(...)'"));let n=this.targetContent!==null,r=false,a=false;if(this.target){if(this.target.numberOfComponents===1){if(!this.target.firstComponent)throw new Error;if(r=Qf.FunctionCall.IsBuiltIn(this.target.firstComponent),a=e.IsExternal(this.target.firstComponent),r||a){this.isFunctionCall||super.Error(`${this.target.firstComponent} must be called as a function: ~ ${this.target.firstComponent}()`),a&&(this.runtimeDivert.isExternal=true,this.args!==null&&(this.runtimeDivert.externalArgs=this.args.length),this.runtimeDivert.pushesToStack=false,this.runtimeDivert.targetPath=new tm.Path(this.target.firstComponent),this.CheckExternalArgumentValidity(e));return}}}else throw new Error;this.runtimeDivert.variableDivertName==null&&!n&&!r&&!a&&this.Error(`target not found: '${this.target}'`);}Error(e,t=null,n=false){if(t!==this&&t){super.Error(e,t);return}this.isFunctionCall?super.Error(`Function call ${e}`,t,n):super.Error(`Divert ${e}`,t,n);}};kr.Divert=bo;});var yc=O(Rr=>{Object.defineProperty(Rr,"__esModule",{value:true});Rr.GatherPointToResolve=void 0;var So=class{constructor(e,t){this.divert=e,this.targetRuntimeObj=t;}};Rr.GatherPointToResolve=So;});var vc=O(Lr=>{Object.defineProperty(Lr,"__esModule",{value:true});Lr.SequenceDivertToResolve=void 0;var Eo=class{constructor(e,t){this.divert=e,this.targetContent=t;}};Lr.SequenceDivertToResolve=Eo;});var Do=O(jr=>{Object.defineProperty(jr,"__esModule",{value:true});jr.SequenceType=void 0;var bc;(function(i){i[i.Stopping=1]="Stopping",i[i.Cycle=2]="Cycle",i[i.Shuffle=4]="Shuffle",i[i.Once=8]="Once";})(bc||(jr.SequenceType=bc={}));});var xo=O(qr=>{Object.defineProperty(qr,"__esModule",{value:true});qr.Sequence=void 0;var Sc=oe(),ze=Ce(),Ao=nt(),Kn=ie(),Br=tt(),rm=te(),sm=vc(),Wr=Do(),am=Bt(),wo=class extends rm.ParsedObject{constructor(e,t){super(),this.sequenceType=t,this._sequenceDivertsToResolve=[],this.GenerateRuntimeObject=()=>{let n=new Sc.Container;n.visitsShouldBeCounted=true,n.countingAtStartOnly=true,this._sequenceDivertsToResolve=[],n.AddContent(ze.ControlCommand.EvalStart()),n.AddContent(ze.ControlCommand.VisitIndex());let r=(this.sequenceType&Wr.SequenceType.Once)>0,a=(this.sequenceType&Wr.SequenceType.Cycle)>0,s=(this.sequenceType&Wr.SequenceType.Stopping)>0,o=(this.sequenceType&Wr.SequenceType.Shuffle)>0,l=this.sequenceElements.length;if(r&&(l+=1),s||r?(n.AddContent(new Kn.IntValue(l-1)),n.AddContent(Br.NativeFunctionCall.CallWithName("MIN"))):a&&(n.AddContent(new Kn.IntValue(this.sequenceElements.length)),n.AddContent(Br.NativeFunctionCall.CallWithName("%"))),o){let c=ze.ControlCommand.NoOp();if(r||s){let m=s?this.sequenceElements.length-1:this.sequenceElements.length;n.AddContent(ze.ControlCommand.Duplicate()),n.AddContent(new Kn.IntValue(m)),n.AddContent(Br.NativeFunctionCall.CallWithName("=="));let d=new Ao.Divert;d.isConditional=true,n.AddContent(d),this.AddDivertToResolve(d,c);}let h=this.sequenceElements.length;s&&(h-=1),n.AddContent(new Kn.IntValue(h)),n.AddContent(ze.ControlCommand.SequenceShuffleIndex()),(r||s)&&n.AddContent(c);}n.AddContent(ze.ControlCommand.EvalEnd());let u=ze.ControlCommand.NoOp();for(let c=0;c<l;c+=1){n.AddContent(ze.ControlCommand.EvalStart()),n.AddContent(ze.ControlCommand.Duplicate()),n.AddContent(new Kn.IntValue(c)),n.AddContent(Br.NativeFunctionCall.CallWithName("==")),n.AddContent(ze.ControlCommand.EvalEnd());let h=new Ao.Divert;h.isConditional=true,n.AddContent(h);let m;c<this.sequenceElements.length?m=this.sequenceElements[c].runtimeObject:m=new Sc.Container,m.name=`s${c}`,m.InsertContent(ze.ControlCommand.PopEvaluatedValue(),0);let d=new Ao.Divert;m.AddContent(d),n.AddToNamedContentOnly(m),this.AddDivertToResolve(h,m),this.AddDivertToResolve(d,u);}return n.AddContent(u),n},this.AddDivertToResolve=(n,r)=>{this._sequenceDivertsToResolve.push(new sm.SequenceDivertToResolve(n,r));},this.sequenceType=t,this.sequenceElements=[];for(let n of e){let r=n.content,a=null;r===null||r.length===0?a=n:a=new am.Weave(r),this.sequenceElements.push(a),this.AddContent(a);}}get typeName(){return "Sequence"}ResolveReferences(e){super.ResolveReferences(e);for(let t of this._sequenceDivertsToResolve)t.divert.targetPath=t.targetContent.path;}};qr.Sequence=wo;});var Oo=O(Mr=>{Object.defineProperty(Mr,"__esModule",{value:true});Mr.TunnelOnwards=void 0;var om=oe(),Xn=Ce(),lm=nt(),um=ie(),cm=te(),hm=kt(),pm=U(),dm=hn(),_o=class extends cm.ParsedObject{constructor(){super(...arguments),this._overrideDivertTarget=null,this._divertAfter=null,this.GenerateRuntimeObject=()=>{let e=new om.Container;if(e.AddContent(Xn.ControlCommand.EvalStart()),this.divertAfter){let t=this.divertAfter.GenerateRuntimeObject(),n=t;if(n){let a=this.divertAfter.args;if(a!==null&&a.length>0){let s=-1,o=-1;for(let l=0;l<n.content.length;l+=1){let u=n.content[l];u&&(s==-1&&u.commandType===Xn.ControlCommand.CommandType.EvalStart?s=l:u.commandType===Xn.ControlCommand.CommandType.EvalEnd&&(o=l));}for(let l=s+1;l<o;l+=1){let u=n.content[l];u.parent=null,e.AddContent(n.content[l]);}}}let r=(0, pm.asOrNull)(t,lm.Divert);if(r!=null&&r.hasVariableTarget){let a=new dm.VariableReference(r.variableDivertName);e.AddContent(a);}else this._overrideDivertTarget=new um.DivertTargetValue,e.AddContent(this._overrideDivertTarget);}else e.AddContent(new hm.Void);return e.AddContent(Xn.ControlCommand.EvalEnd()),e.AddContent(Xn.ControlCommand.PopTunnel()),e},this.toString=()=>` -> ${this._divertAfter}`;}get divertAfter(){return this._divertAfter}set divertAfter(e){this._divertAfter=e,this._divertAfter&&this.AddContent(this._divertAfter);}get typeName(){return "TunnelOnwards"}ResolveReferences(e){super.ResolveReferences(e),this.divertAfter&&this.divertAfter.targetContent&&(this._overrideDivertTarget.targetPath=this.divertAfter.targetContent.runtimePath);}};Mr.TunnelOnwards=_o;});var Fo=O(Gr=>{Object.defineProperty(Gr,"__esModule",{value:true});Gr.ListDefinition=void 0;var Po=Ne(),To=class{constructor(e,t){this._name=e||"",this._items=null,this._itemNameToValues=t||new Map;}get name(){return this._name}get items(){if(this._items==null){this._items=new Map;for(let[e,t]of this._itemNameToValues){let n=new Po.InkListItem(this.name,e);this._items.set(n.serialized(),t);}}return this._items}ValueForItem(e){if(!e.itemName)return 0;let t=this._itemNameToValues.get(e.itemName);return typeof t<"u"?t:0}ContainsItem(e){return !e.itemName||e.originName!=this.name?false:this._itemNameToValues.has(e.itemName)}ContainsItemWithName(e){return this._itemNameToValues.has(e)}TryGetItemWithValue(e,t){for(let[n,r]of this._itemNameToValues)if(r==e)return t=new Po.InkListItem(this.name,n),{result:t,exists:true};return t=Po.InkListItem.Null,{result:t,exists:false}}TryGetValueForItem(e,t){if(!e.itemName)return {result:0,exists:false};let n=this._itemNameToValues.get(e.itemName);return n?{result:n,exists:true}:{result:0,exists:false}}};Gr.ListDefinition=To;});var Jr=O($r=>{Object.defineProperty($r,"__esModule",{value:true});$r.ListDefinition=void 0;var fm=Ne(),mm=Ne(),gm=Fo(),Cm=ie(),ym=te(),vm=pt(),No=class extends ym.ParsedObject{get typeName(){return "ListDefinition"}get runtimeListDefinition(){var e;let t=new Map;for(let n of this.itemDefinitions)t.has(n.name)?this.Error(`List '${this.identifier}' contains duplicate items called '${n.name}'`):t.set(n.name,n.seriesValue);return new gm.ListDefinition(((e=this.identifier)===null||e===void 0?void 0:e.name)||"",t)}constructor(e){super(),this.itemDefinitions=e,this.identifier=null,this.variableAssignment=null,this._elementsByName=null,this.ItemNamed=n=>{if(this._elementsByName===null){this._elementsByName=new Map;for(let a of this.itemDefinitions)this._elementsByName.set(a.name,a);}return this._elementsByName.get(n)||null},this.GenerateRuntimeObject=()=>{var n,r;let a=new fm.InkList;for(let s of this.itemDefinitions)if(s.inInitialList){let o=new mm.InkListItem(((n=this.identifier)===null||n===void 0?void 0:n.name)||null,s.name||null);a.Add(o,s.seriesValue);}return a.SetInitialOriginName(((r=this.identifier)===null||r===void 0?void 0:r.name)||""),new Cm.ListValue(a)};let t=1;for(let n of this.itemDefinitions)n.explicitValue!==null&&(t=n.explicitValue),n.seriesValue=t,t+=1;this.AddContent(e);}ResolveReferences(e){super.ResolveReferences(e),e.CheckForNamingCollisions(this,this.identifier,vm.SymbolType.List);}};$r.ListDefinition=No;});var Vo=O(Hr=>{Object.defineProperty(Hr,"__esModule",{value:true});Hr.VariableAssignment=void 0;var bm=oe(),Sm=Jn(),Em=Jr(),Dm=te(),Ec=pt(),Am=bt(),wm=pn(),xm=U(),Io=class extends Dm.ParsedObject{get variableName(){return this.variableIdentifier.name}get typeName(){return this.isNewTemporaryDeclaration?"temp":this.isGlobalDeclaration?this.listDefinition!==null?"LIST":"VAR":"variable assignment"}get isDeclaration(){return this.isGlobalDeclaration||this.isNewTemporaryDeclaration}constructor({assignedExpression:e,isGlobalDeclaration:t,isTemporaryNewDeclaration:n,listDef:r,variableIdentifier:a}){super(),this._runtimeAssignment=null,this.expression=null,this.listDefinition=null,this.GenerateRuntimeObject=()=>{let s=null;if(this.isGlobalDeclaration?s=this.story:this.isNewTemporaryDeclaration&&(s=(0, Sm.ClosestFlowBase)(this)),s&&s.AddNewVariableDeclaration(this),this.isGlobalDeclaration)return null;let o=new bm.Container;return this.expression?o.AddContent(this.expression.runtimeObject):this.listDefinition&&o.AddContent(this.listDefinition.runtimeObject),this._runtimeAssignment=new Am.VariableAssignment(this.variableName,this.isNewTemporaryDeclaration),o.AddContent(this._runtimeAssignment),o},this.toString=()=>`${this.isGlobalDeclaration?"VAR":this.isNewTemporaryDeclaration?"~ temp":""} ${this.variableName}`,this.variableIdentifier=a,this.isGlobalDeclaration=!!t,this.isNewTemporaryDeclaration=!!n,r instanceof Em.ListDefinition?(this.listDefinition=this.AddContent(r),this.listDefinition.variableAssignment=this,this.isGlobalDeclaration=true):e&&(this.expression=this.AddContent(e));}ResolveReferences(e){if(super.ResolveReferences(e),this.isDeclaration&&this.listDefinition===null&&e.CheckForNamingCollisions(this,this.variableIdentifier,this.isGlobalDeclaration?Ec.SymbolType.Var:Ec.SymbolType.Temp),this.isGlobalDeclaration){let t=(0, xm.asOrNull)(this.expression,wm.VariableReference);t&&!t.isConstantReference&&!t.isListItemReference&&this.Error("global variable assignments cannot refer to other variables, only literal values, constants and list items");}if(!this.isNewTemporaryDeclaration){let t=e.ResolveVariableWithName(this.variableName,this);t.found||(this.variableName in this.story.constants?this.Error(`Can't re-assign to a constant (do you need to use VAR when declaring '${this.variableName}'?)`,this):this.Error(`Variable could not be found to assign to: '${this.variableName}'`,this)),this._runtimeAssignment&&(this._runtimeAssignment.isGlobal=t.isGlobal);}}};Hr.VariableAssignment=Io;});var Bt=O(Kr=>{Object.defineProperty(Kr,"__esModule",{value:true});Kr.Weave=void 0;var Dc=Ti(),qe=an(),zr=pr(),_m=mr(),Om=oe(),Ur=cn(),Pm=nt(),Tm=un(),Fm=it(),at=$n(),Nm=yc(),Im=te(),ko=xo(),Vm=Et(),km=Oo(),Rm=Vo(),Me=U(),Ro=class i extends Im.ParsedObject{get rootContainer(){return this._rootContainer||(this._rootContainer=this.GenerateRuntimeObject()),this._rootContainer}get namedWeavePoints(){return this._namedWeavePoints}get lastParsedSignificantObject(){if(this.content.length===0)return null;let e=null;for(let n=this.content.length-1;n>=0;--n){e=this.content[n];let r=(0, Me.asOrNull)(e,Vm.Text);if(!(r&&r.text===`
|
|
15
|
+
`)&&!this.IsGlobalDeclaration(e))break}let t=(0, Me.asOrNull)(e,i);return t&&(e=t.lastParsedSignificantObject),e}constructor(e,t=-1){super(),this.previousWeavePoint=null,this.addContentToPreviousWeavePoint=false,this.hasSeenChoiceInSection=false,this.currentContainer=null,this._unnamedGatherCount=0,this._choiceCount=0,this._rootContainer=null,this._namedWeavePoints=new Map,this.looseEnds=[],this.gatherPointsToResolve=[],this.ResolveWeavePointNaming=()=>{var n,r,a;let s=[...this.FindAll(at.Gather)(o=>!(o.name===null||o.name===void 0)),...this.FindAll(qe.Choice)(o=>!(o.name===null||o.name===void 0))];this._namedWeavePoints=new Map;for(let o of s){let l=this.namedWeavePoints.get(((n=o.identifier)===null||n===void 0?void 0:n.name)||"");if(l){let u=l instanceof at.Gather?"gather":"choice",c=l;this.Error(`A ${u} with the same label name '${o.name}' already exists in this context on line ${c.debugMetadata?c.debugMetadata.startLineNumber:"NO DEBUG METADATA AVAILABLE"}`,o);}!((r=o.identifier)===null||r===void 0)&&r.name&&this.namedWeavePoints.set((a=o.identifier)===null||a===void 0?void 0:a.name,o);}},this.ConstructWeaveHierarchyFromIndentation=()=>{let n=0;for(;n<this.content.length;){let r=this.content[n];if(r instanceof qe.Choice||r instanceof at.Gather){let s=r.indentationDepth-1;if(s>this.baseIndentIndex){let o=n;for(;n<this.content.length;){let h=(0, Me.asOrNull)(this.content[n],qe.Choice)||(0, Me.asOrNull)(this.content[n],at.Gather);if(h!==null&&h.indentationDepth-1<=this.baseIndentIndex)break;n+=1;}let l=n-o,u=this.content.slice(o,o+l);this.content.splice(o,l);let c=new i(u,s);this.InsertContent(o,c),n=o;}}n+=1;}},this.DetermineBaseIndentationFromContent=n=>{for(let r of n)if(r instanceof qe.Choice||r instanceof at.Gather)return r.indentationDepth-1;return 0},this.GenerateRuntimeObject=()=>{this._rootContainer=new Om.Container,this.currentContainer=this._rootContainer,this.looseEnds=[],this.gatherPointsToResolve=[];for(let n of this.content)if(n instanceof qe.Choice||n instanceof at.Gather)this.AddRuntimeForWeavePoint(n);else if(n instanceof i){let r=n;this.AddRuntimeForNestedWeave(r),this.gatherPointsToResolve.splice(0,0,...r.gatherPointsToResolve);}else this.AddGeneralRuntimeContent(n.runtimeObject);return this.PassLooseEndsToAncestors(),this._rootContainer},this.AddRuntimeForGather=n=>{let r=!this.hasSeenChoiceInSection;this.hasSeenChoiceInSection=false;let a=n.runtimeContainer;if(n.name||(a.name=`g-${this._unnamedGatherCount}`,this._unnamedGatherCount+=1),r){if(!this.currentContainer)throw new Error;this.currentContainer.AddContent(a);}else this.rootContainer.AddToNamedContentOnly(a);for(let s of this.looseEnds){let o=s;if(o instanceof at.Gather&&o.indentationDepth==n.indentationDepth)continue;let l=null;if(o instanceof Ur.Divert)l=o.runtimeObject;else {l=new Pm.Divert;let u=o;if(!u.runtimeContainer)throw new Error;u.runtimeContainer.AddContent(l);}this.gatherPointsToResolve.push(new Nm.GatherPointToResolve(l,a));}this.looseEnds=[],this.currentContainer=a;},this.AddRuntimeForWeavePoint=n=>{if(n instanceof at.Gather)this.AddRuntimeForGather(n);else if(n instanceof qe.Choice){if(!this.currentContainer)throw new Error;this.previousWeavePoint instanceof at.Gather&&this.looseEnds.splice(this.looseEnds.indexOf(this.previousWeavePoint),1);let r=n;if(this.currentContainer.AddContent(r.runtimeObject),!r.innerContentContainer)throw new Error;r.innerContentContainer.name=`c-${this._choiceCount}`,this.currentContainer.AddToNamedContentOnly(r.innerContentContainer),this._choiceCount+=1,this.hasSeenChoiceInSection=true;}this.addContentToPreviousWeavePoint=false,this.WeavePointHasLooseEnd(n)&&(this.looseEnds.push(n),(0, Me.asOrNull)(n,qe.Choice)&&(this.addContentToPreviousWeavePoint=true)),this.previousWeavePoint=n;},this.AddRuntimeForNestedWeave=n=>{this.AddGeneralRuntimeContent(n.rootContainer),this.previousWeavePoint!==null&&(this.looseEnds.splice(this.looseEnds.indexOf(this.previousWeavePoint),1),this.addContentToPreviousWeavePoint=false);},this.AddGeneralRuntimeContent=n=>{if(n!==null)if(this.addContentToPreviousWeavePoint){if(!this.previousWeavePoint||!this.previousWeavePoint.runtimeContainer)throw new Error;this.previousWeavePoint.runtimeContainer.AddContent(n);}else {if(!this.currentContainer)throw new Error;this.currentContainer.AddContent(n);}},this.PassLooseEndsToAncestors=()=>{if(this.looseEnds.length===0)return;let n=null,r=null,a=false;for(let s=this.parent;s!==null;s=s.parent){let o=(0, Me.asOrNull)(s,i);o&&(!a&&n===null&&(n=o),a&&r===null&&(r=o)),(s instanceof ko.Sequence||s instanceof zr.Conditional)&&(a=true);}if(!(n===null&&r===null))for(let s=this.looseEnds.length-1;s>=0;s-=1){let o=this.looseEnds[s],l=false;if(a){if(o instanceof qe.Choice&&n!==null)n.ReceiveLooseEnd(o),l=true;else if(!(o instanceof qe.Choice)){let u=n||r;u!==null&&(u.ReceiveLooseEnd(o),l=true);}}else n?.hasOwnProperty("ReceiveLooseEnd")&&n.ReceiveLooseEnd(o),l=true;l&&this.looseEnds.splice(s,1);}},this.ReceiveLooseEnd=n=>{this.looseEnds.push(n);},this.WeavePointNamed=n=>{if(!this.namedWeavePoints)return null;let r=this.namedWeavePoints.get(n);return r||null},this.IsGlobalDeclaration=n=>{let r=(0, Me.asOrNull)(n,Rm.VariableAssignment);return !!(r&&r.isGlobalDeclaration&&r.isDeclaration||(0, Me.asOrNull)(n,_m.ConstantDeclaration))},this.ContentThatFollowsWeavePoint=n=>{let r=[],a=n;if(a.content!==null)for(let l of a.content)this.IsGlobalDeclaration(l)||r.push(l);let s=(0, Me.asOrNull)(a.parent,i);if(s===null)throw new Error("Expected weave point parent to be weave?");let o=s.content.indexOf(a);for(let l=o+1;l<s.content.length;l+=1){let u=s.content[l];if(!this.IsGlobalDeclaration(u)){if(u instanceof qe.Choice||u instanceof at.Gather||u instanceof i)break;r.push(u);}}return r},this.ValidateTermination=n=>{if(this.lastParsedSignificantObject instanceof Dc.AuthorWarning)return;if(this.looseEnds!==null&&this.looseEnds.length>0)for(let a of this.looseEnds){let s=this.ContentThatFollowsWeavePoint(a);this.ValidateFlowOfObjectsTerminates(s,a,n);}else {for(let a of this.content)if(a instanceof qe.Choice||a instanceof Ur.Divert)return;this.ValidateFlowOfObjectsTerminates(this.content,this,n);}},this.BadNestedTerminationHandler=n=>{let r=null;for(let s=n.parent;s!==null;s=s.parent)if(s instanceof ko.Sequence||s instanceof zr.Conditional){r=(0, Me.asOrNull)(s,zr.Conditional);break}let a="Choices nested in conditionals or sequences need to explicitly divert afterwards.";r!==null&&r.FindAll(qe.Choice)().length===1&&(a=`Choices with conditions should be written: '* {condition} choice'. Otherwise, ${a.toLowerCase()}`),this.Error(a,n);},this.ValidateFlowOfObjectsTerminates=(n,r,a)=>{let s=false,o=r;for(let l of n){if(l.Find(Ur.Divert)(c=>!c.isThread&&!c.isTunnel&&!c.isFunctionCall&&!(c.parent instanceof Tm.DivertTarget))!==null&&(s=true),l.Find(km.TunnelOnwards)()!=null){s=true;break}o=l;}if(!s){if(o instanceof Dc.AuthorWarning)return;a(o);}},this.WeavePointHasLooseEnd=n=>{if(n.content===null)return true;for(let r=n.content.length-1;r>=0;--r){let a=(0, Me.asOrNull)(n.content[r],Ur.Divert);if(a&&!(a.isThread||a.isTunnel||a.isFunctionCall))return false}return true},this.CheckForWeavePointNamingCollisions=()=>{if(!this.namedWeavePoints)return;let n=[];for(let r of this.ancestry){let a=(0, Me.asOrNull)(r,Fm.FlowBase);if(a)n.push(a);else break}for(let[r,a]of this.namedWeavePoints)for(let s of n){let o=s.ContentWithNameAtLevel(r);if(o&&o!==a){let l=`${a.GetType()} '${r}' has the same label name as a ${o.GetType()} (on ${o.debugMetadata})`;this.Error(l,a);}}},t==-1?this.baseIndentIndex=this.DetermineBaseIndentationFromContent(e):this.baseIndentIndex=t,this.AddContent(e),this.ConstructWeaveHierarchyFromIndentation();}get typeName(){return "Weave"}ResolveReferences(e){if(super.ResolveReferences(e),this.looseEnds!==null&&this.looseEnds.length>0){let t=false;for(let n=this.parent;n!==null;n=n.parent)if(n instanceof ko.Sequence||n instanceof zr.Conditional){t=true;break}t&&this.ValidateTermination(this.BadNestedTerminationHandler);}for(let t of this.gatherPointsToResolve)t.divert.targetPath=t.targetRuntimeObj.path;this.CheckForWeavePointNamingCollisions();}};Kr.Weave=Ro;});var Co=O(Yr=>{Object.defineProperty(Yr,"__esModule",{value:true});Yr.ConditionalSingleBranch=void 0;var Ac=oe(),Xr=Ce(),wc=nt(),Lm=te(),jm=tt(),Bm=ie(),Wm=Et(),qm=Bt(),Mm=U(),Lo=class extends Lm.ParsedObject{get ownExpression(){return this._ownExpression}set ownExpression(e){this._ownExpression=e,this._ownExpression&&this.AddContent(this._ownExpression);}constructor(e){super(),this._contentContainer=null,this._conditionalDivert=null,this._ownExpression=null,this._innerWeave=null,this.isTrueBranch=false,this.matchingEquality=false,this.isElse=false,this.isInline=false,this.returnDivert=null,this.GenerateRuntimeObject=()=>{if(this._innerWeave)for(let r of this._innerWeave.content){let a=(0, Mm.asOrNull)(r,Wm.Text);a&&a.text.startsWith("else:")&&this.Warning("Saw the text 'else:' which is being treated as content. Did you mean '- else:'?",a);}let t=new Ac.Container,n=this.matchingEquality&&!this.isElse;if(n&&t.AddContent(Xr.ControlCommand.Duplicate()),this._conditionalDivert=new wc.Divert,this._conditionalDivert.isConditional=!this.isElse,!this.isTrueBranch&&!this.isElse){let r=this.ownExpression!==null;r&&t.AddContent(Xr.ControlCommand.EvalStart()),this.ownExpression&&this.ownExpression.GenerateIntoContainer(t),this.matchingEquality&&t.AddContent(jm.NativeFunctionCall.CallWithName("==")),r&&t.AddContent(Xr.ControlCommand.EvalEnd());}return t.AddContent(this._conditionalDivert),this._contentContainer=this.GenerateRuntimeForContent(),this._contentContainer.name="b",this.isInline||this._contentContainer.InsertContent(new Bm.StringValue(`
|
|
16
|
+
`),0),(n||this.isElse&&this.matchingEquality)&&this._contentContainer.InsertContent(Xr.ControlCommand.PopEvaluatedValue(),0),t.AddToNamedContentOnly(this._contentContainer),this.returnDivert=new wc.Divert,this._contentContainer.AddContent(this.returnDivert),t},this.GenerateRuntimeForContent=()=>this._innerWeave===null?new Ac.Container:this._innerWeave.rootContainer,e&&(this._innerWeave=new qm.Weave(e),this.AddContent(this._innerWeave));}get typeName(){return "ConditionalSingleBranch"}ResolveReferences(e){if(!this._conditionalDivert||!this._contentContainer)throw new Error;this._conditionalDivert.targetPath=this._contentContainer.path,super.ResolveReferences(e);}};Yr.ConditionalSingleBranch=Lo;});var _c=O(Zr=>{Object.defineProperty(Zr,"__esModule",{value:true});Zr.CustomFlags=void 0;var xc;(function(i){i[i.ParsingString=1]="ParsingString",i[i.TagActive=2]="TagActive";})(xc||(Zr.CustomFlags=xc={}));});var Oc=O(Qr=>{Object.defineProperty(Qr,"__esModule",{value:true});Qr.DebugMetadata=void 0;var jo=class i{constructor(){this.startLineNumber=0,this.endLineNumber=0,this.startCharacterNumber=0,this.endCharacterNumber=0,this.fileName=null,this.sourceName=null;}Merge(e){let t=new i;return t.fileName=this.fileName,t.sourceName=this.sourceName,this.startLineNumber<e.startLineNumber?(t.startLineNumber=this.startLineNumber,t.startCharacterNumber=this.startCharacterNumber):this.startLineNumber>e.startLineNumber?(t.startLineNumber=e.startLineNumber,t.startCharacterNumber=e.startCharacterNumber):(t.startLineNumber=this.startLineNumber,t.startCharacterNumber=Math.min(this.startCharacterNumber,e.startCharacterNumber)),this.endLineNumber>e.endLineNumber?(t.endLineNumber=this.endLineNumber,t.endCharacterNumber=this.endCharacterNumber):this.endLineNumber<e.endLineNumber?(t.endLineNumber=e.endLineNumber,t.endCharacterNumber=e.endCharacterNumber):(t.endLineNumber=this.endLineNumber,t.endCharacterNumber=Math.max(this.endCharacterNumber,e.endCharacterNumber)),t}toString(){return this.fileName!==null?`line ${this.startLineNumber} of ${this.fileName}"`:"line "+this.startLineNumber}};Qr.DebugMetadata=jo;});var Pc=O(es=>{Object.defineProperty(es,"__esModule",{value:true});es.ExternalDeclaration=void 0;var Gm=te(),Bo=class extends Gm.ParsedObject{get name(){var e;return ((e=this.identifier)===null||e===void 0?void 0:e.name)||null}constructor(e,t){super(),this.identifier=e,this.argumentNames=t,this.GenerateRuntimeObject=()=>(this.story.AddExternal(this),null);}get typeName(){return "EXTERNAL"}toString(){var e;return `EXTERNAL ${(e=this.identifier)===null||e===void 0?void 0:e.name}`}};es.ExternalDeclaration=Bo;});var Tc=O(ts=>{Object.defineProperty(ts,"__esModule",{value:true});ts.FlowDecl=void 0;var Wo=class{constructor(e,t,n){this.name=e,this.args=t,this.isFunction=n;}};ts.FlowDecl=Wo;});var Mo=O(ns=>{Object.defineProperty(ns,"__esModule",{value:true});ns.Wrap=void 0;var $m=te(),qo=class extends $m.ParsedObject{constructor(e){super(),this._objToWrap=e,this.GenerateRuntimeObject=()=>this._objToWrap;}};ns.Wrap=qo;});var Fc=O(is=>{Object.defineProperty(is,"__esModule",{value:true});is.Glue=void 0;var Jm=Mo(),Go=class extends Jm.Wrap{constructor(e){super(e);}get typeName(){return "Glue"}};is.Glue=Go;});var ss=O(rs=>{Object.defineProperty(rs,"__esModule",{value:true});rs.Glue=void 0;var Hm=Te(),$o=class extends Hm.InkObject{toString(){return "Glue"}};rs.Glue=$o;});var Ic=O(as=>{Object.defineProperty(as,"__esModule",{value:true});as.IncDecExpression=void 0;var zm=xr(),Nc=Be(),Um=it(),Km=tt(),Xm=ie(),Ym=bt(),Zm=hn(),Qm=Bt(),Jo=class extends Nc.Expression{constructor(e,t,n){super(),this.varIdentifier=e,this._runtimeAssignment=null,this.expression=null,this.GenerateIntoContainer=r=>{var a,s;r.AddContent(new Zm.VariableReference(((a=this.varIdentifier)===null||a===void 0?void 0:a.name)||null)),this.expression?this.expression.GenerateIntoContainer(r):r.AddContent(new Xm.IntValue(1)),r.AddContent(Km.NativeFunctionCall.CallWithName(this.isInc?"+":"-")),this._runtimeAssignment=new Ym.VariableAssignment(((s=this.varIdentifier)===null||s===void 0?void 0:s.name)||null,false),r.AddContent(this._runtimeAssignment);},this.toString=()=>{var r,a;return this.expression?`${(r=this.varIdentifier)===null||r===void 0?void 0:r.name}${this.isInc?" += ":" -= "}${this.expression}`:`${(a=this.varIdentifier)===null||a===void 0?void 0:a.name}`+(this.isInc?"++":"--")},t instanceof Nc.Expression?(this.expression=t,this.AddContent(this.expression),this.isInc=!!n):this.isInc=t;}get typeName(){return "IncDecExpression"}ResolveReferences(e){var t;super.ResolveReferences(e);let n=e.ResolveVariableWithName(((t=this.varIdentifier)===null||t===void 0?void 0:t.name)||"",this);if(n.found||this.Error(`variable for ${this.incrementDecrementWord} could not be found: '${this.varIdentifier}' after searching: {this.descriptionOfScope}`),!this._runtimeAssignment)throw new Error;this._runtimeAssignment.isGlobal=n.isGlobal,!(this.parent instanceof Qm.Weave)&&!(this.parent instanceof Um.FlowBase)&&!(this.parent instanceof zm.ContentList)&&this.Error(`Can't use ${this.incrementDecrementWord} as sub-expression`);}get incrementDecrementWord(){return this.isInc?"increment":"decrement"}};as.IncDecExpression=Jo;});var zo=O(os=>{Object.defineProperty(os,"__esModule",{value:true});os.IncludedFile=void 0;var eg=te(),Ho=class extends eg.ParsedObject{constructor(e){super(),this.includedStory=e,this.GenerateRuntimeObject=()=>null;}get typeName(){return "IncludedFile"}};os.IncludedFile=Ho;});var Vc=O(ls=>{Object.defineProperty(ls,"__esModule",{value:true});ls.InfixOperator=void 0;var Uo=class{constructor(e,t,n){this.type=e,this.precedence=t,this.requireWhitespace=n,this.toString=()=>this.type;}};ls.InfixOperator=Uo;});var Xo=O(us=>{Object.defineProperty(us,"__esModule",{value:true});us.Knot=void 0;var tg=it(),kc=on(),Ko=class extends tg.FlowBase{get flowLevel(){return kc.FlowLevel.Knot}constructor(e,t,n,r){super(e,t,n,r);}get typeName(){return this.isFunction?"Function":"Knot"}ResolveReferences(e){super.ResolveReferences(e);let t=this.story;for(let n in this.subFlowsByName){let r=t.ContentWithNameAtLevel(n,kc.FlowLevel.Knot,false);if(r){let a=this.subFlowsByName.get(n),s=`Stitch '${a?a.name:"NO STITCH FOUND"}' has the same name as a knot (on ${r.debugMetadata})`;this.Error(s,a);}}}};us.Knot=Ko;});var Rc=O(cs=>{Object.defineProperty(cs,"__esModule",{value:true});cs.List=void 0;var ng=Be(),ig=Ne(),rg=Ne(),sg=ie(),Yo=class extends ng.Expression{constructor(e){super(),this.itemIdentifierList=e,this.GenerateIntoContainer=t=>{var n,r;let a=new ig.InkList;if(this.itemIdentifierList!=null)for(let s of this.itemIdentifierList){let o=((n=s?.name)===null||n===void 0?void 0:n.split("."))||[],l=null,u="";o.length>1?(l=o[0],u=o[1]):u=o[0];let c=this.story.ResolveListItem(l,u,this);if(c===null)l===null?this.Error(`Could not find list definition that contains item '${s}'`):this.Error(`Could not find list item ${s}`);else {if(c.parent==null){this.Error(`Could not find list definition for item ${s}`);return}l||(l=((r=c.parent.identifier)===null||r===void 0?void 0:r.name)||null);let h=new rg.InkListItem(l,c.name||null);a.has(h.serialized())?this.Warning(`Duplicate of item '${s}' in list.`):a.Add(h,c.seriesValue);}}t.AddContent(new sg.ListValue(a));};}get typeName(){return "List"}};cs.List=Yo;});var Qo=O(hs=>{Object.defineProperty(hs,"__esModule",{value:true});hs.ListElementDefinition=void 0;var ag=te(),og=pt(),Zo=class extends ag.ParsedObject{get fullName(){var e;let t=this.parent;if(t===null)throw new Error("Can't get full name without a parent list.");return `${(e=t.identifier)===null||e===void 0?void 0:e.name}.${this.name}`}get typeName(){return "ListElement"}get name(){var e;return ((e=this.indentifier)===null||e===void 0?void 0:e.name)||null}constructor(e,t,n=null){super(),this.indentifier=e,this.inInitialList=t,this.explicitValue=n,this.seriesValue=0,this.parent=null,this.GenerateRuntimeObject=()=>{throw new Error("Not implemented.")},this.toString=()=>this.fullName,this.parent=this.parent;}ResolveReferences(e){super.ResolveReferences(e),e.CheckForNamingCollisions(this,this.indentifier,og.SymbolType.ListItem);}};hs.ListElementDefinition=Zo;});var el=O(ps=>{Object.defineProperty(ps,"__esModule",{value:true});ps.StatementLevel=void 0;var Lc;(function(i){i[i.InnerBlock=0]="InnerBlock",i[i.Stitch=1]="Stitch",i[i.Knot=2]="Knot",i[i.Top=3]="Top";})(Lc||(ps.StatementLevel=Lc={}));});var nl=O(ds=>{Object.defineProperty(ds,"__esModule",{value:true});ds.Stitch=void 0;var lg=it(),ug=on(),tl=class extends lg.FlowBase{get flowLevel(){return ug.FlowLevel.Stitch}constructor(e,t,n,r){super(e,t,n,r),this.baseToString=this.toString,this.toString=()=>`${this.parent!==null?this.parent+" > ":""}${this.baseToString()}`;}get typeName(){return "Stitch"}};ds.Stitch=tl;});var ms=O(fs=>{Object.defineProperty(fs,"__esModule",{value:true});fs.Tag=void 0;var cg=Te(),il=class extends cg.InkObject{constructor(e){super(),this.text=e.toString()||"";}toString(){return "# "+this.text}};fs.Tag=il;});var sl=O(gs=>{Object.defineProperty(gs,"__esModule",{value:true});gs.Choice=void 0;var hg=Pe(),pg=ge(),dg=Te(),rl=class i extends dg.InkObject{constructor(){super(...arguments),this.text="",this.index=0,this.threadAtGeneration=null,this.sourcePath="",this.targetPath=null,this.isInvisibleDefault=false,this.tags=null,this.originalThreadIndex=0;}get pathStringOnChoice(){return this.targetPath===null?(0, pg.throwNullException)("Choice.targetPath"):this.targetPath.toString()}set pathStringOnChoice(e){this.targetPath=new hg.Path(e);}Clone(){let e=new i;return e.text=this.text,e.sourcePath=this.sourcePath,e.index=this.index,e.targetPath=this.targetPath,e.originalThreadIndex=this.originalThreadIndex,e.isInvisibleDefault=this.isInvisibleDefault,this.threadAtGeneration!==null&&(e.threadAtGeneration=this.threadAtGeneration.Copy()),e}};gs.Choice=rl;});var ol=O(Cs=>{Object.defineProperty(Cs,"__esModule",{value:true});Cs.ListDefinitionsOrigin=void 0;var fg=Ne(),mg=ie(),gg=ge(),al=class{constructor(e){this._lists=new Map,this._allUnambiguousListValueCache=new Map;for(let t of e){this._lists.set(t.name,t);for(let[n,r]of t.items){let a=fg.InkListItem.fromSerializedKey(n),s=new mg.ListValue(a,r);if(!a.itemName)throw new Error("item.itemName is null or undefined.");this._allUnambiguousListValueCache.set(a.itemName,s),this._allUnambiguousListValueCache.set(a.fullName,s);}}}get lists(){let e=[];for(let[,t]of this._lists)e.push(t);return e}TryListGetDefinition(e,t){if(e===null)return {result:t,exists:false};let n=this._lists.get(e);return n?{result:n,exists:true}:{result:t,exists:false}}FindSingleItemListWithName(e){if(e===null)return (0, gg.throwNullException)("name");let t=this._allUnambiguousListValueCache.get(e);return typeof t<"u"?t:null}};Cs.ListDefinitionsOrigin=al;});var fn=O(Ss=>{Object.defineProperty(Ss,"__esModule",{value:true});Ss.JsonSerialisation=void 0;var ys=oe(),Ve=ie(),jc=ss(),J=Ce(),dn=Rt(),Bc=nt(),Wc=Zi(),ll=hn(),qc=bt(),ul=tt(),Mc=kt(),Gc=ms(),Cg=Pe(),$c=sl(),yg=Fo(),vg=ol(),vs=Ne(),le=U(),Wt=ge(),bs=class i{static JArrayToRuntimeObjList(e,t=false){let n=e.length;t&&n--;let r=[];for(let a=0;a<n;a++){let s=e[a],o=this.JTokenToRuntimeObject(s);if(o===null)return (0, Wt.throwNullException)("runtimeObj");r.push(o);}return r}static WriteDictionaryRuntimeObjs(e,t){e.WriteObjectStart();for(let[n,r]of t)e.WritePropertyStart(n),this.WriteRuntimeObject(e,r),e.WritePropertyEnd();e.WriteObjectEnd();}static WriteListRuntimeObjs(e,t){e.WriteArrayStart();for(let n of t)this.WriteRuntimeObject(e,n);e.WriteArrayEnd();}static WriteIntDictionary(e,t){e.WriteObjectStart();for(let[n,r]of t)e.WriteIntProperty(n,r);e.WriteObjectEnd();}static WriteRuntimeObject(e,t){let n=(0, le.asOrNull)(t,ys.Container);if(n){this.WriteRuntimeContainer(e,n);return}let r=(0, le.asOrNull)(t,Bc.Divert);if(r){let p="->";r.isExternal?p="x()":r.pushesToStack&&(r.stackPushType==dn.PushPopType.Function?p="f()":r.stackPushType==dn.PushPopType.Tunnel&&(p="->t->"));let g;r.hasVariableTarget?g=r.variableDivertName:g=r.targetPathString,e.WriteObjectStart(),e.WriteProperty(p,g),r.hasVariableTarget&&e.WriteProperty("var",true),r.isConditional&&e.WriteProperty("c",true),r.externalArgs>0&&e.WriteIntProperty("exArgs",r.externalArgs),e.WriteObjectEnd();return}let a=(0, le.asOrNull)(t,Wc.ChoicePoint);if(a){e.WriteObjectStart(),e.WriteProperty("*",a.pathStringOnChoice),e.WriteIntProperty("flg",a.flags),e.WriteObjectEnd();return}let s=(0, le.asOrNull)(t,Ve.BoolValue);if(s){e.WriteBool(s.value);return}let o=(0, le.asOrNull)(t,Ve.IntValue);if(o){e.WriteInt(o.value);return}let l=(0, le.asOrNull)(t,Ve.FloatValue);if(l){e.WriteFloat(l.value);return}let u=(0, le.asOrNull)(t,Ve.StringValue);if(u){u.isNewline?e.Write(`
|
|
17
|
+
`,false):(e.WriteStringStart(),e.WriteStringInner("^"),e.WriteStringInner(u.value),e.WriteStringEnd());return}let c=(0, le.asOrNull)(t,Ve.ListValue);if(c){this.WriteInkList(e,c);return}let h=(0, le.asOrNull)(t,Ve.DivertTargetValue);if(h){if(e.WriteObjectStart(),h.value===null)return (0, Wt.throwNullException)("divTargetVal.value");e.WriteProperty("^->",h.value.componentsString),e.WriteObjectEnd();return}let m=(0, le.asOrNull)(t,Ve.VariablePointerValue);if(m){e.WriteObjectStart(),e.WriteProperty("^var",m.value),e.WriteIntProperty("ci",m.contextIndex),e.WriteObjectEnd();return}if((0, le.asOrNull)(t,jc.Glue)){e.Write("<>");return}let y=(0, le.asOrNull)(t,J.ControlCommand);if(y){e.Write(i._controlCommandNames[y.commandType]);return}let v=(0, le.asOrNull)(t,ul.NativeFunctionCall);if(v){let p=v.name;p=="^"&&(p="L^"),e.Write(p);return}let A=(0, le.asOrNull)(t,ll.VariableReference);if(A){e.WriteObjectStart();let p=A.pathStringForCount;p!=null?e.WriteProperty("CNT?",p):e.WriteProperty("VAR?",A.name),e.WriteObjectEnd();return}let D=(0, le.asOrNull)(t,qc.VariableAssignment);if(D){e.WriteObjectStart();let p=D.isGlobal?"VAR=":"temp=";e.WriteProperty(p,D.variableName),D.isNewDeclaration||e.WriteProperty("re",true),e.WriteObjectEnd();return}if((0, le.asOrNull)(t,Mc.Void)){e.Write("void");return}let f=(0, le.asOrNull)(t,Gc.Tag);if(f){e.WriteObjectStart(),e.WriteProperty("#",f.text),e.WriteObjectEnd();return}let C=(0, le.asOrNull)(t,$c.Choice);if(C){this.WriteChoice(e,C);return}throw new Error("Failed to convert runtime object to Json token: "+t)}static JObjectToDictionaryRuntimeObjs(e){let t=new Map;for(let n in e)if(e.hasOwnProperty(n)){let r=this.JTokenToRuntimeObject(e[n]);if(r===null)return (0, Wt.throwNullException)("inkObject");t.set(n,r);}return t}static JObjectToIntDictionary(e){let t=new Map;for(let n in e)e.hasOwnProperty(n)&&t.set(n,parseInt(e[n]));return t}static JTokenToRuntimeObject(e){if(typeof e=="number"&&!isNaN(e)||typeof e=="boolean")return Ve.Value.Create(e);if(typeof e=="string"){let t=e.toString(),n=/^([0-9]+.[0-9]+f)$/.exec(t);if(n)return new Ve.FloatValue(parseFloat(n[0]));let r=t[0];if(r=="^")return new Ve.StringValue(t.substring(1));if(r==`
|
|
18
|
+
`&&t.length==1)return new Ve.StringValue(`
|
|
19
|
+
`);if(t=="<>")return new jc.Glue;for(let a=0;a<i._controlCommandNames.length;++a){let s=i._controlCommandNames[a];if(t==s)return new J.ControlCommand(a)}if(t=="L^"&&(t="^"),ul.NativeFunctionCall.CallExistsWithName(t))return ul.NativeFunctionCall.CallWithName(t);if(t=="->->")return J.ControlCommand.PopTunnel();if(t=="~ret")return J.ControlCommand.PopFunction();if(t=="void")return new Mc.Void}if(typeof e=="object"&&!Array.isArray(e)){let t=e,n;if(t["^->"])return n=t["^->"],new Ve.DivertTargetValue(new Cg.Path(n.toString()));if(t["^var"]){n=t["^var"];let c=new Ve.VariablePointerValue(n.toString());return "ci"in t&&(n=t.ci,c.contextIndex=parseInt(n)),c}let r=false,a=false,s=dn.PushPopType.Function,o=false;if((n=t["->"])?r=true:(n=t["f()"])?(r=true,a=true,s=dn.PushPopType.Function):(n=t["->t->"])?(r=true,a=true,s=dn.PushPopType.Tunnel):(n=t["x()"])&&(r=true,o=true,a=false,s=dn.PushPopType.Function),r){let c=new Bc.Divert;c.pushesToStack=a,c.stackPushType=s,c.isExternal=o;let h=n.toString();return (n=t.var)?c.variableDivertName=h:c.targetPathString=h,c.isConditional=!!t.c,o&&(n=t.exArgs)&&(c.externalArgs=parseInt(n)),c}if(n=t["*"]){let c=new Wc.ChoicePoint;return c.pathStringOnChoice=n.toString(),(n=t.flg)&&(c.flags=parseInt(n)),c}if(n=t["VAR?"])return new ll.VariableReference(n.toString());if(n=t["CNT?"]){let c=new ll.VariableReference;return c.pathStringForCount=n.toString(),c}let l=false,u=false;if((n=t["VAR="])?(l=true,u=true):(n=t["temp="])&&(l=true,u=false),l){let c=n.toString(),h=!t.re,m=new qc.VariableAssignment(c,h);return m.isGlobal=u,m}if(t["#"]!==void 0)return n=t["#"],new Gc.Tag(n.toString());if(n=t.list){let c=n,h=new vs.InkList;if(n=t.origins){let m=n;h.SetInitialOriginNames(m);}for(let m in c)if(c.hasOwnProperty(m)){let d=c[m],y=new vs.InkListItem(m),v=parseInt(d);h.Add(y,v);}return new Ve.ListValue(h)}if(t.originalChoicePath!=null)return this.JObjectToChoice(t)}if(Array.isArray(e))return this.JArrayToContainer(e);if(e==null)return null;throw new Error("Failed to convert token to runtime object: "+this.toJson(e,["parent"]))}static toJson(e,t,n){return JSON.stringify(e,(r,a)=>t?.some(s=>s===r)?void 0:a,n)}static WriteRuntimeContainer(e,t,n=false){if(e.WriteArrayStart(),t===null)return (0, Wt.throwNullException)("container");for(let l of t.content)this.WriteRuntimeObject(e,l);let r=t.namedOnlyContent,a=t.countFlags,s=t.name!=null&&!n,o=r!=null||a>0||s;if(o&&e.WriteObjectStart(),r!=null)for(let[l,u]of r){let c=l,h=(0, le.asOrNull)(u,ys.Container);e.WritePropertyStart(c),this.WriteRuntimeContainer(e,h,true),e.WritePropertyEnd();}a>0&&e.WriteIntProperty("#f",a),s&&e.WriteProperty("#n",t.name),o?e.WriteObjectEnd():e.WriteNull(),e.WriteArrayEnd();}static JArrayToContainer(e){let t=new ys.Container;t.content=this.JArrayToRuntimeObjList(e,true);let n=e[e.length-1];if(n!=null){let r=new Map;for(let a in n)if(a=="#f")t.countFlags=parseInt(n[a]);else if(a=="#n")t.name=n[a].toString();else {let s=this.JTokenToRuntimeObject(n[a]),o=(0, le.asOrNull)(s,ys.Container);o&&(o.name=a),r.set(a,s);}t.namedOnlyContent=r;}return t}static JObjectToChoice(e){let t=new $c.Choice;return t.text=e.text.toString(),t.index=parseInt(e.index),t.sourcePath=e.originalChoicePath.toString(),t.originalThreadIndex=parseInt(e.originalThreadIndex),t.pathStringOnChoice=e.targetPath.toString(),t.tags=this.JArrayToTags(e),t.isInvisibleDefault=!!e.isInvisibleDefault,t}static JArrayToTags(e){return e.tags?e.tags:null}static WriteChoice(e,t){e.WriteObjectStart(),e.WriteProperty("text",t.text),e.WriteIntProperty("index",t.index),e.WriteProperty("originalChoicePath",t.sourcePath),e.WriteIntProperty("originalThreadIndex",t.originalThreadIndex),e.WriteProperty("targetPath",t.pathStringOnChoice),e.WriteProperty("isInvisibleDefault",t.isInvisibleDefault),this.WriteChoiceTags(e,t),e.WriteObjectEnd();}static WriteChoiceTags(e,t){if(t.tags&&t.tags.length>0){e.WritePropertyStart("tags"),e.WriteArrayStart();for(let n of t.tags)e.Write(n);e.WriteArrayEnd(),e.WritePropertyEnd();}}static WriteInkList(e,t){let n=t.value;if(n===null)return (0, Wt.throwNullException)("rawList");e.WriteObjectStart(),e.WritePropertyStart("list"),e.WriteObjectStart();for(let[r,a]of n){let s=vs.InkListItem.fromSerializedKey(r),o=a;if(s.itemName===null)return (0, Wt.throwNullException)("item.itemName");e.WritePropertyNameStart(),e.WritePropertyNameInner(s.originName?s.originName:"?"),e.WritePropertyNameInner("."),e.WritePropertyNameInner(s.itemName),e.WritePropertyNameEnd(),e.Write(o),e.WritePropertyEnd();}if(e.WriteObjectEnd(),e.WritePropertyEnd(),n.Count==0&&n.originNames!=null&&n.originNames.length>0){e.WritePropertyStart("origins"),e.WriteArrayStart();for(let r of n.originNames)e.Write(r);e.WriteArrayEnd(),e.WritePropertyEnd();}e.WriteObjectEnd();}static ListDefinitionsToJToken(e){let t={};for(let n of e.lists){let r={};for(let[a,s]of n.items){let o=vs.InkListItem.fromSerializedKey(a);if(o.itemName===null)return (0, Wt.throwNullException)("item.itemName");r[o.itemName]=s;}t[n.name]=r;}return t}static JTokenToListDefinitions(e){let t=e,n=[];for(let r in t)if(t.hasOwnProperty(r)){let a=r.toString(),s=t[r],o=new Map;for(let u in s)if(t.hasOwnProperty(r)){let c=s[u];o.set(u,parseInt(c));}let l=new yg.ListDefinition(a,o);n.push(l);}return new vg.ListDefinitionsOrigin(n)}};Ss.JsonSerialisation=bs;bs._controlCommandNames=(()=>{let i=[];i[J.ControlCommand.CommandType.EvalStart]="ev",i[J.ControlCommand.CommandType.EvalOutput]="out",i[J.ControlCommand.CommandType.EvalEnd]="/ev",i[J.ControlCommand.CommandType.Duplicate]="du",i[J.ControlCommand.CommandType.PopEvaluatedValue]="pop",i[J.ControlCommand.CommandType.PopFunction]="~ret",i[J.ControlCommand.CommandType.PopTunnel]="->->",i[J.ControlCommand.CommandType.BeginString]="str",i[J.ControlCommand.CommandType.EndString]="/str",i[J.ControlCommand.CommandType.NoOp]="nop",i[J.ControlCommand.CommandType.ChoiceCount]="choiceCnt",i[J.ControlCommand.CommandType.Turns]="turn",i[J.ControlCommand.CommandType.TurnsSince]="turns",i[J.ControlCommand.CommandType.ReadCount]="readc",i[J.ControlCommand.CommandType.Random]="rnd",i[J.ControlCommand.CommandType.SeedRandom]="srnd",i[J.ControlCommand.CommandType.VisitIndex]="visit",i[J.ControlCommand.CommandType.SequenceShuffleIndex]="seq",i[J.ControlCommand.CommandType.StartThread]="thread",i[J.ControlCommand.CommandType.Done]="done",i[J.ControlCommand.CommandType.End]="end",i[J.ControlCommand.CommandType.ListFromInt]="listInt",i[J.ControlCommand.CommandType.ListRange]="range",i[J.ControlCommand.CommandType.ListRandom]="lrnd",i[J.ControlCommand.CommandType.BeginTag]="#",i[J.ControlCommand.CommandType.EndTag]="/#";for(let e=0;e<J.ControlCommand.CommandType.TOTAL_VALUES;++e)if(i[e]==null)throw new Error("Control command not accounted for in serialisation");return i})();});var pl=O(Qn=>{Object.defineProperty(Qn,"__esModule",{value:true});Qn.CallStack=void 0;var cl=Rt(),Jc=Pe(),bg=ei(),Hc=fn(),Sg=ie(),Eg=It(),Yn=Mn(),Dg=Pn(),zc=tn(),hl=ge(),Zn=class i{get elements(){return this.callStack}get depth(){return this.elements.length}get currentElement(){let t=this._threads[this._threads.length-1].callstack;return t[t.length-1]}get currentElementIndex(){return this.callStack.length-1}get currentThread(){return this._threads[this._threads.length-1]}set currentThread(e){Dg.Debug.Assert(this._threads.length==1,"Shouldn't be directly setting the current thread when we have a stack of them"),this._threads.length=0,this._threads.push(e);}get canPop(){return this.callStack.length>1}constructor(){if(this._threadCounter=0,this._startOfRoot=Yn.Pointer.Null,arguments[0]instanceof bg.Story){let e=arguments[0];this._startOfRoot=Yn.Pointer.StartOf(e.rootContentContainer),this.Reset();}else {let e=arguments[0];this._threads=[];for(let t of e._threads)this._threads.push(t.Copy());this._threadCounter=e._threadCounter,this._startOfRoot=e._startOfRoot.copy();}}Reset(){this._threads=[],this._threads.push(new i.Thread),this._threads[0].callstack.push(new i.Element(cl.PushPopType.Tunnel,this._startOfRoot));}SetJsonToken(e,t){this._threads.length=0;let n=e.threads;for(let r of n){let a=r,s=new i.Thread(a,t);this._threads.push(s);}this._threadCounter=parseInt(e.threadCounter),this._startOfRoot=Yn.Pointer.StartOf(t.rootContentContainer);}WriteJson(e){e.WriteObject(t=>{t.WritePropertyStart("threads"),t.WriteArrayStart();for(let n of this._threads)n.WriteJson(t);t.WriteArrayEnd(),t.WritePropertyEnd(),t.WritePropertyStart("threadCounter"),t.WriteInt(this._threadCounter),t.WritePropertyEnd();});}PushThread(){let e=this.currentThread.Copy();this._threadCounter++,e.threadIndex=this._threadCounter,this._threads.push(e);}ForkThread(){let e=this.currentThread.Copy();return this._threadCounter++,e.threadIndex=this._threadCounter,e}PopThread(){if(this.canPopThread)this._threads.splice(this._threads.indexOf(this.currentThread),1);else throw new Error("Can't pop thread")}get canPopThread(){return this._threads.length>1&&!this.elementIsEvaluateFromGame}get elementIsEvaluateFromGame(){return this.currentElement.type==cl.PushPopType.FunctionEvaluationFromGame}Push(e,t=0,n=0){let r=new i.Element(e,this.currentElement.currentPointer,false);r.evaluationStackHeightWhenPushed=t,r.functionStartInOutputStream=n,this.callStack.push(r);}CanPop(e=null){return this.canPop?e==null?true:this.currentElement.type==e:false}Pop(e=null){if(this.CanPop(e)){this.callStack.pop();return}else throw new Error("Mismatched push/pop in Callstack")}GetTemporaryVariableWithName(e,t=-1){t==-1&&(t=this.currentElementIndex+1);let n=this.callStack[t-1],r=(0, zc.tryGetValueFromMap)(n.temporaryVariables,e,null);return r.exists?r.result:null}SetTemporaryVariable(e,t,n,r=-1){r==-1&&(r=this.currentElementIndex+1);let a=this.callStack[r-1];if(!n&&!a.temporaryVariables.get(e))throw new Error("Could not find temporary variable to set: "+e);let s=(0, zc.tryGetValueFromMap)(a.temporaryVariables,e,null);s.exists&&Sg.ListValue.RetainListOriginsForAssignment(s.result,t),a.temporaryVariables.set(e,t);}ContextForVariableNamed(e){return this.currentElement.temporaryVariables.get(e)?this.currentElementIndex+1:0}ThreadWithIndex(e){let t=this._threads.filter(n=>{if(n.threadIndex==e)return n});return t.length>0?t[0]:null}get callStack(){return this.currentThread.callstack}get callStackTrace(){let e=new Eg.StringBuilder;for(let t=0;t<this._threads.length;t++){let n=this._threads[t],r=t==this._threads.length-1;e.AppendFormat(`=== THREAD {0}/{1} {2}===
|
|
20
|
+
`,t+1,this._threads.length,r?"(current) ":"");for(let a=0;a<n.callstack.length;a++){n.callstack[a].type==cl.PushPopType.Function?e.Append(" [FUNCTION] "):e.Append(" [TUNNEL] ");let s=n.callstack[a].currentPointer;if(!s.isNull){if(e.Append("<SOMEWHERE IN "),s.container===null)return (0, hl.throwNullException)("pointer.container");e.Append(s.container.path.toString()),e.AppendLine(">");}}}return e.toString()}};Qn.CallStack=Zn;(function(i){class e{constructor(r,a,s=false){this.evaluationStackHeightWhenPushed=0,this.functionStartInOutputStream=0,this.currentPointer=a.copy(),this.inExpressionEvaluation=s,this.temporaryVariables=new Map,this.type=r;}Copy(){let r=new e(this.type,this.currentPointer,this.inExpressionEvaluation);return r.temporaryVariables=new Map(this.temporaryVariables),r.evaluationStackHeightWhenPushed=this.evaluationStackHeightWhenPushed,r.functionStartInOutputStream=this.functionStartInOutputStream,r}}i.Element=e;class t{constructor(){if(this.threadIndex=0,this.previousPointer=Yn.Pointer.Null,this.callstack=[],arguments[0]&&arguments[1]){let r=arguments[0],a=arguments[1];this.threadIndex=parseInt(r.threadIndex);let s=r.callstack;for(let l of s){let u=l,c=parseInt(u.type),h=Yn.Pointer.Null,m,d=u.cPath;if(typeof d<"u"){m=d.toString();let D=a.ContentAtPath(new Jc.Path(m));if(h.container=D.container,h.index=parseInt(u.idx),D.obj==null)throw new Error("When loading state, internal story location couldn't be found: "+m+". Has the story changed since this save data was created?");D.approximate&&(h.container!==null?a.Warning("When loading state, exact internal story location couldn't be found: '"+m+"', so it was approximated to '"+h.container.path.toString()+"' to recover. Has the story changed since this save data was created?"):a.Warning("When loading state, exact internal story location couldn't be found: '"+m+"' and it may not be recoverable. Has the story changed since this save data was created?"));}let y=!!u.exp,v=new e(c,h,y),A=u.temp;typeof A<"u"?v.temporaryVariables=Hc.JsonSerialisation.JObjectToDictionaryRuntimeObjs(A):v.temporaryVariables.clear(),this.callstack.push(v);}let o=r.previousContentObject;if(typeof o<"u"){let l=new Jc.Path(o.toString());this.previousPointer=a.PointerAtPath(l);}}}Copy(){let r=new t;r.threadIndex=this.threadIndex;for(let a of this.callstack)r.callstack.push(a.Copy());return r.previousPointer=this.previousPointer.copy(),r}WriteJson(r){r.WriteObjectStart(),r.WritePropertyStart("callstack"),r.WriteArrayStart();for(let a of this.callstack){if(r.WriteObjectStart(),!a.currentPointer.isNull){if(a.currentPointer.container===null)return (0, hl.throwNullException)("el.currentPointer.container");r.WriteProperty("cPath",a.currentPointer.container.path.componentsString),r.WriteIntProperty("idx",a.currentPointer.index);}r.WriteProperty("exp",a.inExpressionEvaluation),r.WriteIntProperty("type",a.type),a.temporaryVariables.size>0&&(r.WritePropertyStart("temp"),Hc.JsonSerialisation.WriteDictionaryRuntimeObjs(r,a.temporaryVariables),r.WritePropertyEnd()),r.WriteObjectEnd();}if(r.WriteArrayEnd(),r.WritePropertyEnd(),r.WriteIntProperty("threadIndex",this.threadIndex),!this.previousPointer.isNull){let a=this.previousPointer.Resolve();if(a===null)return (0, hl.throwNullException)("this.previousPointer.Resolve()");r.WriteProperty("previousContentObject",a.path.toString());}r.WriteObjectEnd();}}i.Thread=t;})(Zn||(Qn.CallStack=Zn={}));});var Kc=O(Ds=>{Object.defineProperty(Ds,"__esModule",{value:true});Ds.VariablesState=void 0;var me=ie(),Ag=Fn(),Uc=fn(),ye=U(),ti=tn(),Dt=ge();function wg(){return class{}}var Es=class i extends wg(){variableChangedEvent(e,t){for(let n of this.variableChangedEventCallbacks)n(e,t);}StartVariableObservation(){this._batchObservingVariableChanges=true,this._changedVariablesForBatchObs=new Set;}CompleteVariableObservation(){this._batchObservingVariableChanges=false;let e=new Map;if(this._changedVariablesForBatchObs!=null)for(let t of this._changedVariablesForBatchObs){let n=this._globalVariables.get(t);this.variableChangedEvent(t,n);}if(this.patch!=null)for(let t of this.patch.changedVariables){let n=this.patch.TryGetGlobal(t,null);n.exists&&e.set(t,n);}return this._changedVariablesForBatchObs=null,e}NotifyObservers(e){for(let[t,n]of e)this.variableChangedEvent(t,n);}get callStack(){return this._callStack}set callStack(e){this._callStack=e;}$(e,t){if(typeof t>"u"){let n=null;return this.patch!==null&&(n=this.patch.TryGetGlobal(e,null),n.exists)?n.result.valueObject:(n=this._globalVariables.get(e),typeof n>"u"&&(n=this._defaultGlobalVariables.get(e)),typeof n<"u"?n.valueObject:null)}else {if(typeof this._defaultGlobalVariables.get(e)>"u")throw new Ag.StoryException("Cannot assign to a variable ("+e+") that hasn't been declared in the story");let n=me.Value.Create(t);if(n==null)throw t==null?new Error("Cannot pass null to VariableState"):new Error("Invalid value passed to VariableState: "+t.toString());this.SetGlobal(e,n);}}constructor(e,t){super(),this.variableChangedEventCallbacks=[],this.patch=null,this._defaultGlobalVariables=new Map,this._changedVariablesForBatchObs=new Set,this._batchObservingVariableChanges=false,this._globalVariables=new Map,this._callStack=e,this._listDefsOrigin=t;try{return new Proxy(this,{get(r,a){return a in r?r[a]:r.$(a)},set(r,a,s){return a in r?r[a]=s:r.$(a,s),!0},ownKeys(r){return [...new Set([...r._defaultGlobalVariables.keys(),...r._globalVariables.keys()])]},getOwnPropertyDescriptor(r,a){return {enumerable:!0,configurable:!0,value:r.$(a)}}})}catch{}}ApplyPatch(){if(this.patch===null)return (0, Dt.throwNullException)("this.patch");for(let[e,t]of this.patch.globals)this._globalVariables.set(e,t);if(this._changedVariablesForBatchObs!==null)for(let e of this.patch.changedVariables)this._changedVariablesForBatchObs.add(e);this.patch=null;}SetJsonToken(e){this._globalVariables.clear();for(let[t,n]of this._defaultGlobalVariables){let r=e[t];if(typeof r<"u"){let a=Uc.JsonSerialisation.JTokenToRuntimeObject(r);if(a===null)return (0, Dt.throwNullException)("tokenInkObject");this._globalVariables.set(t,a);}else this._globalVariables.set(t,n);}}WriteJson(e){e.WriteObjectStart();for(let[t,n]of this._globalVariables){let r=t,a=n;if(i.dontSaveDefaultValues&&this._defaultGlobalVariables.has(r)){let s=this._defaultGlobalVariables.get(r);if(this.RuntimeObjectsEqual(a,s))continue}e.WritePropertyStart(r),Uc.JsonSerialisation.WriteRuntimeObject(e,a),e.WritePropertyEnd();}e.WriteObjectEnd();}RuntimeObjectsEqual(e,t){if(e===null)return (0, Dt.throwNullException)("obj1");if(t===null)return (0, Dt.throwNullException)("obj2");if(e.constructor!==t.constructor)return false;let n=(0, ye.asOrNull)(e,me.BoolValue);if(n!==null)return n.value===(0, ye.asOrThrows)(t,me.BoolValue).value;let r=(0, ye.asOrNull)(e,me.IntValue);if(r!==null)return r.value===(0, ye.asOrThrows)(t,me.IntValue).value;let a=(0, ye.asOrNull)(e,me.FloatValue);if(a!==null)return a.value===(0, ye.asOrThrows)(t,me.FloatValue).value;let s=(0, ye.asOrNull)(e,me.Value),o=(0, ye.asOrNull)(t,me.Value);if(s!==null&&o!==null)return (0, ye.isEquatable)(s.valueObject)&&(0, ye.isEquatable)(o.valueObject)?s.valueObject.Equals(o.valueObject):s.valueObject===o.valueObject;throw new Error("FastRoughDefinitelyEquals: Unsupported runtime object type: "+e.constructor.name)}GetVariableWithName(e,t=-1){let n=this.GetRawVariableWithName(e,t),r=(0, ye.asOrNull)(n,me.VariablePointerValue);return r!==null&&(n=this.ValueAtVariablePointer(r)),n}TryGetDefaultVariableValue(e){let t=(0, ti.tryGetValueFromMap)(this._defaultGlobalVariables,e,null);return t.exists?t.result:null}GlobalVariableExistsWithName(e){return this._globalVariables.has(e)||this._defaultGlobalVariables!==null&&this._defaultGlobalVariables.has(e)}GetRawVariableWithName(e,t){let n=null;if(t==0||t==-1){let r=null;if(this.patch!==null&&(r=this.patch.TryGetGlobal(e,null),r.exists)||(r=(0, ti.tryGetValueFromMap)(this._globalVariables,e,null),r.exists)||this._defaultGlobalVariables!==null&&(r=(0, ti.tryGetValueFromMap)(this._defaultGlobalVariables,e,null),r.exists))return r.result;if(this._listDefsOrigin===null)return (0, Dt.throwNullException)("VariablesState._listDefsOrigin");let a=this._listDefsOrigin.FindSingleItemListWithName(e);if(a)return a}return n=this._callStack.GetTemporaryVariableWithName(e,t),n}ValueAtVariablePointer(e){return this.GetVariableWithName(e.variableName,e.contextIndex)}Assign(e,t){let n=e.variableName;if(n===null)return (0, Dt.throwNullException)("name");let r=-1,a=false;if(e.isNewDeclaration?a=e.isGlobal:a=this.GlobalVariableExistsWithName(n),e.isNewDeclaration){let s=(0, ye.asOrNull)(t,me.VariablePointerValue);s!==null&&(t=this.ResolveVariablePointer(s));}else {let s=null;do s=(0, ye.asOrNull)(this.GetRawVariableWithName(n,r),me.VariablePointerValue),s!=null&&(n=s.variableName,r=s.contextIndex,a=r==0);while(s!=null)}a?this.SetGlobal(n,t):this._callStack.SetTemporaryVariable(n,t,e.isNewDeclaration,r);}SnapshotDefaultGlobals(){this._defaultGlobalVariables=new Map(this._globalVariables);}RetainListOriginsForAssignment(e,t){let n=(0, ye.asOrThrows)(e,me.ListValue),r=(0, ye.asOrThrows)(t,me.ListValue);n.value&&r.value&&r.value.Count==0&&r.value.SetInitialOriginNames(n.value.originNames);}SetGlobal(e,t){let n=null;if(this.patch===null&&(n=(0, ti.tryGetValueFromMap)(this._globalVariables,e,null)),this.patch!==null&&(n=this.patch.TryGetGlobal(e,null),n.exists||(n=(0, ti.tryGetValueFromMap)(this._globalVariables,e,null))),me.ListValue.RetainListOriginsForAssignment(n.result,t),e===null)return (0, Dt.throwNullException)("variableName");if(this.patch!==null?this.patch.SetGlobal(e,t):this._globalVariables.set(e,t),this.variableChangedEvent!==null&&n!==null&&t!==n.result)if(this._batchObservingVariableChanges){if(this._changedVariablesForBatchObs===null)return (0, Dt.throwNullException)("this._changedVariablesForBatchObs");this.patch!==null?this.patch.AddChangedVariable(e):this._changedVariablesForBatchObs!==null&&this._changedVariablesForBatchObs.add(e);}else this.variableChangedEvent(e,t);}ResolveVariablePointer(e){let t=e.contextIndex;t==-1&&(t=this.GetContextIndexOfVariableNamed(e.variableName));let n=this.GetRawVariableWithName(e.variableName,t),r=(0, ye.asOrNull)(n,me.VariablePointerValue);return r??new me.VariablePointerValue(e.variableName,t)}GetContextIndexOfVariableNamed(e){return this.GlobalVariableExistsWithName(e)?0:this._callStack.currentElementIndex}ObserveVariableChange(e){this.variableChangedEventCallbacks.push(e);}};Ds.VariablesState=Es;Es.dontSaveDefaultValues=true;});var fl=O(As=>{Object.defineProperty(As,"__esModule",{value:true});As.PRNG=void 0;var dl=class{constructor(e){this.seed=e%2147483647,this.seed<=0&&(this.seed+=2147483646);}next(){return this.seed=this.seed*48271%2147483647}nextFloat(){return (this.next()-1)/2147483646}};As.PRNG=dl;});var Xc=O(ws=>{Object.defineProperty(ws,"__esModule",{value:true});ws.StatePatch=void 0;var ml=class{get globals(){return this._globals}get changedVariables(){return this._changedVariables}get visitCounts(){return this._visitCounts}get turnIndices(){return this._turnIndices}constructor(){if(this._changedVariables=new Set,this._visitCounts=new Map,this._turnIndices=new Map,arguments.length===1&&arguments[0]!==null){let e=arguments[0];this._globals=new Map(e._globals),this._changedVariables=new Set(e._changedVariables),this._visitCounts=new Map(e._visitCounts),this._turnIndices=new Map(e._turnIndices);}else this._globals=new Map,this._changedVariables=new Set,this._visitCounts=new Map,this._turnIndices=new Map;}TryGetGlobal(e,t){return e!==null&&this._globals.has(e)?{result:this._globals.get(e),exists:true}:{result:t,exists:false}}SetGlobal(e,t){this._globals.set(e,t);}AddChangedVariable(e){return this._changedVariables.add(e)}TryGetVisitCount(e,t){return this._visitCounts.has(e)?{result:this._visitCounts.get(e),exists:true}:{result:t,exists:false}}SetVisitCount(e,t){this._visitCounts.set(e,t);}SetTurnIndex(e,t){this._turnIndices.set(e,t);}TryGetTurnIndex(e,t){return this._turnIndices.has(e)?{result:this._turnIndices.get(e),exists:true}:{result:t,exists:false}}};ws.StatePatch=ml;});var gl=O(ii=>{Object.defineProperty(ii,"__esModule",{value:true});ii.SimpleJson=void 0;var ni=class i{static TextToDictionary(e){return new i.Reader(e).ToDictionary()}static TextToArray(e){return new i.Reader(e).ToArray()}};ii.SimpleJson=ni;(function(i){class e{constructor(r){if(JSON.parse("0",(s,o,l)=>l!=null)){let s=(o,l,u)=>Number.isInteger(l)&&u.source.endsWith(".0")?u.source+"f":l;this._rootObject=JSON.parse(r,s);}else {let s=r.replace(/(,\s*)([0-9]+\.[0]+)([,]*)/g,'$1"$2f"$3');this._rootObject=JSON.parse(s);}}ToDictionary(){return this._rootObject}ToArray(){return this._rootObject}}i.Reader=e;class t{constructor(){this._currentPropertyName=null,this._currentString=null,this._stateStack=[],this._collectionStack=[],this._propertyNameStack=[],this._jsonObject=null;}WriteObject(r){this.WriteObjectStart(),r(this),this.WriteObjectEnd();}WriteObjectStart(){this.StartNewObject(true);let r={};if(this.state===i.Writer.State.Property){this.Assert(this.currentCollection!==null),this.Assert(this.currentPropertyName!==null);let a=this._propertyNameStack.pop();this.currentCollection[a]=r,this._collectionStack.push(r);}else this.state===i.Writer.State.Array?(this.Assert(this.currentCollection!==null),this.currentCollection.push(r),this._collectionStack.push(r)):(this.Assert(this.state===i.Writer.State.None),this._jsonObject=r,this._collectionStack.push(r));this._stateStack.push(new i.Writer.StateElement(i.Writer.State.Object));}WriteObjectEnd(){this.Assert(this.state===i.Writer.State.Object),this._collectionStack.pop(),this._stateStack.pop();}WriteProperty(r,a){if(this.WritePropertyStart(r),arguments[1]instanceof Function){let s=arguments[1];s(this);}else {let s=arguments[1];this.Write(s);}this.WritePropertyEnd();}WriteIntProperty(r,a){this.WritePropertyStart(r),this.WriteInt(a),this.WritePropertyEnd();}WriteFloatProperty(r,a){this.WritePropertyStart(r),this.WriteFloat(a),this.WritePropertyEnd();}WritePropertyStart(r){this.Assert(this.state===i.Writer.State.Object),this._propertyNameStack.push(r),this.IncrementChildCount(),this._stateStack.push(new i.Writer.StateElement(i.Writer.State.Property));}WritePropertyEnd(){this.Assert(this.state===i.Writer.State.Property),this.Assert(this.childCount===1),this._stateStack.pop();}WritePropertyNameStart(){this.Assert(this.state===i.Writer.State.Object),this.IncrementChildCount(),this._currentPropertyName="",this._stateStack.push(new i.Writer.StateElement(i.Writer.State.Property)),this._stateStack.push(new i.Writer.StateElement(i.Writer.State.PropertyName));}WritePropertyNameEnd(){this.Assert(this.state===i.Writer.State.PropertyName),this.Assert(this._currentPropertyName!==null),this._propertyNameStack.push(this._currentPropertyName),this._currentPropertyName=null,this._stateStack.pop();}WritePropertyNameInner(r){this.Assert(this.state===i.Writer.State.PropertyName),this.Assert(this._currentPropertyName!==null),this._currentPropertyName+=r;}WriteArrayStart(){this.StartNewObject(true);let r=[];if(this.state===i.Writer.State.Property){this.Assert(this.currentCollection!==null),this.Assert(this.currentPropertyName!==null);let a=this._propertyNameStack.pop();this.currentCollection[a]=r,this._collectionStack.push(r);}else this.state===i.Writer.State.Array?(this.Assert(this.currentCollection!==null),this.currentCollection.push(r),this._collectionStack.push(r)):(this.Assert(this.state===i.Writer.State.None),this._jsonObject=r,this._collectionStack.push(r));this._stateStack.push(new i.Writer.StateElement(i.Writer.State.Array));}WriteArrayEnd(){this.Assert(this.state===i.Writer.State.Array),this._collectionStack.pop(),this._stateStack.pop();}Write(r,a=true){if(r===null){console.error("Warning: trying to write a null value");return}this.StartNewObject(false),this._addToCurrentObject(r);}WriteBool(r){r!==null&&(this.StartNewObject(false),this._addToCurrentObject(r));}WriteInt(r){r!==null&&(this.StartNewObject(false),this._addToCurrentObject(Math.floor(r)));}WriteFloat(r){r!==null&&(this.StartNewObject(false),r==Number.POSITIVE_INFINITY?this._addToCurrentObject(34e37):r==Number.NEGATIVE_INFINITY?this._addToCurrentObject(-34e37):isNaN(r)?this._addToCurrentObject(0):this._addToCurrentObject(r));}WriteNull(){this.StartNewObject(false),this._addToCurrentObject(null);}WriteStringStart(){this.StartNewObject(false),this._currentString="",this._stateStack.push(new i.Writer.StateElement(i.Writer.State.String));}WriteStringEnd(){this.Assert(this.state==i.Writer.State.String),this._stateStack.pop(),this._addToCurrentObject(this._currentString),this._currentString=null;}WriteStringInner(r,a=true){if(this.Assert(this.state===i.Writer.State.String),r===null){console.error("Warning: trying to write a null string");return}this._currentString+=r;}toString(){return this._jsonObject===null?"":JSON.stringify(this._jsonObject)}StartNewObject(r){r?this.Assert(this.state===i.Writer.State.None||this.state===i.Writer.State.Property||this.state===i.Writer.State.Array):this.Assert(this.state===i.Writer.State.Property||this.state===i.Writer.State.Array),this.state===i.Writer.State.Property&&this.Assert(this.childCount===0),(this.state===i.Writer.State.Array||this.state===i.Writer.State.Property)&&this.IncrementChildCount();}get state(){return this._stateStack.length>0?this._stateStack[this._stateStack.length-1].type:i.Writer.State.None}get childCount(){return this._stateStack.length>0?this._stateStack[this._stateStack.length-1].childCount:0}get currentCollection(){return this._collectionStack.length>0?this._collectionStack[this._collectionStack.length-1]:null}get currentPropertyName(){return this._propertyNameStack.length>0?this._propertyNameStack[this._propertyNameStack.length-1]:null}IncrementChildCount(){this.Assert(this._stateStack.length>0);let r=this._stateStack.pop();r.childCount++,this._stateStack.push(r);}Assert(r){if(!r)throw Error("Assert failed while writing JSON")}_addToCurrentObject(r){this.Assert(this.currentCollection!==null),this.state===i.Writer.State.Array?(this.Assert(Array.isArray(this.currentCollection)),this.currentCollection.push(r)):this.state===i.Writer.State.Property&&(this.Assert(!Array.isArray(this.currentCollection)),this.Assert(this.currentPropertyName!==null),this.currentCollection[this.currentPropertyName]=r,this._propertyNameStack.pop());}}i.Writer=t,(function(n){(function(s){s[s.None=0]="None",s[s.Object=1]="Object",s[s.Array=2]="Array",s[s.Property=3]="Property",s[s.PropertyName=4]="PropertyName",s[s.String=5]="String";})(n.State||(n.State={}));class a{constructor(o){this.type=i.Writer.State.None,this.childCount=0,this.type=o;}}n.StateElement=a;})(t=i.Writer||(i.Writer={}));})(ni||(ii.SimpleJson=ni={}));});var Zc=O(_s=>{Object.defineProperty(_s,"__esModule",{value:true});_s.Flow=void 0;var Yc=pl(),xs=fn(),xg=ge(),Cl=class{constructor(){let e=arguments[0],t=arguments[1];if(this.name=e,this.callStack=new Yc.CallStack(t),arguments[2]){let n=arguments[2];this.callStack.SetJsonToken(n.callstack,t),this.outputStream=xs.JsonSerialisation.JArrayToRuntimeObjList(n.outputStream),this.currentChoices=xs.JsonSerialisation.JArrayToRuntimeObjList(n.currentChoices);let r=n.choiceThreads;typeof r<"u"&&this.LoadFlowChoiceThreads(r,t);}else this.outputStream=[],this.currentChoices=[];}WriteJson(e){e.WriteObjectStart(),e.WriteProperty("callstack",n=>this.callStack.WriteJson(n)),e.WriteProperty("outputStream",n=>xs.JsonSerialisation.WriteListRuntimeObjs(n,this.outputStream));let t=false;for(let n of this.currentChoices){if(n.threadAtGeneration===null)return (0, xg.throwNullException)("c.threadAtGeneration");n.originalThreadIndex=n.threadAtGeneration.threadIndex,this.callStack.ThreadWithIndex(n.originalThreadIndex)===null&&(t||(t=true,e.WritePropertyStart("choiceThreads"),e.WriteObjectStart()),e.WritePropertyStart(n.originalThreadIndex),n.threadAtGeneration.WriteJson(e),e.WritePropertyEnd());}t&&(e.WriteObjectEnd(),e.WritePropertyEnd()),e.WriteProperty("currentChoices",n=>{n.WriteArrayStart();for(let r of this.currentChoices)xs.JsonSerialisation.WriteChoice(n,r);n.WriteArrayEnd();}),e.WriteObjectEnd();}LoadFlowChoiceThreads(e,t){for(let n of this.currentChoices){let r=this.callStack.ThreadWithIndex(n.originalThreadIndex);if(r!==null)n.threadAtGeneration=r.Copy();else {let a=e[`${n.originalThreadIndex}`];n.threadAtGeneration=new Yc.CallStack.Thread(a,t);}}}};_s.Flow=Cl;});var th=O(Ps=>{Object.defineProperty(Ps,"__esModule",{value:true});Ps.StoryState=void 0;var _g=pl(),Og=Kc(),pe=ie(),At=Rt(),Pg=ms(),yl=ss(),Qc=Pe(),Ae=Ce(),vl=It(),wt=fn(),Tg=fl(),Fg=kt(),mn=Mn(),ri=tn(),ue=U(),Ng=Pn(),Ge=ge(),Ig=ei(),Vg=Xc(),eh=gl(),Os=Zc(),kg=Ne(),bl=class i{ToJson(e=false){let t=new eh.SimpleJson.Writer;return this.WriteJson(t),t.toString()}toJson(e=false){return this.ToJson(e)}LoadJson(e){let t=eh.SimpleJson.TextToDictionary(e);this.LoadJsonObj(t),this.onDidLoadState!==null&&this.onDidLoadState();}VisitCountAtPathString(e){let t;if(this._patch!==null){let n=this.story.ContentAtPath(new Qc.Path(e)).container;if(n===null)throw new Error("Content at path not found: "+e);if(t=this._patch.TryGetVisitCount(n,0),t.exists)return t.result}return t=(0, ri.tryGetValueFromMap)(this._visitCounts,e,null),t.exists?t.result:0}VisitCountForContainer(e){if(e===null)return (0, Ge.throwNullException)("container");if(!e.visitsShouldBeCounted)return this.story.Error("Read count for target ("+e.name+" - on "+e.debugMetadata+") unknown. The story may need to be compiled with countAllVisits flag (-c)."),0;if(this._patch!==null){let r=this._patch.TryGetVisitCount(e,0);if(r.exists)return r.result}let t=e.path.toString(),n=(0, ri.tryGetValueFromMap)(this._visitCounts,t,null);return n.exists?n.result:0}IncrementVisitCountForContainer(e){if(this._patch!==null){let r=this.VisitCountForContainer(e);r++,this._patch.SetVisitCount(e,r);return}let t=e.path.toString(),n=(0, ri.tryGetValueFromMap)(this._visitCounts,t,null);n.exists?this._visitCounts.set(t,n.result+1):this._visitCounts.set(t,1);}RecordTurnIndexVisitToContainer(e){if(this._patch!==null){this._patch.SetTurnIndex(e,this.currentTurnIndex);return}let t=e.path.toString();this._turnIndices.set(t,this.currentTurnIndex);}TurnsSinceForContainer(e){if(e.turnIndexShouldBeCounted||this.story.Error("TURNS_SINCE() for target ("+e.name+" - on "+e.debugMetadata+") unknown. The story may need to be compiled with countAllVisits flag (-c)."),this._patch!==null){let r=this._patch.TryGetTurnIndex(e,0);if(r.exists)return this.currentTurnIndex-r.result}let t=e.path.toString(),n=(0, ri.tryGetValueFromMap)(this._turnIndices,t,0);return n.exists?this.currentTurnIndex-n.result:-1}get callstackDepth(){return this.callStack.depth}get outputStream(){return this._currentFlow.outputStream}get currentChoices(){return this.canContinue?[]:this._currentFlow.currentChoices}get generatedChoices(){return this._currentFlow.currentChoices}get currentErrors(){return this._currentErrors}get currentWarnings(){return this._currentWarnings}get variablesState(){return this._variablesState}set variablesState(e){this._variablesState=e;}get callStack(){return this._currentFlow.callStack}get evaluationStack(){return this._evaluationStack}get currentTurnIndex(){return this._currentTurnIndex}set currentTurnIndex(e){this._currentTurnIndex=e;}get currentPathString(){let e=this.currentPointer;return e.isNull?null:e.path===null?(0, Ge.throwNullException)("pointer.path"):e.path.toString()}get previousPathString(){let e=this.previousPointer;return e.isNull?null:e.path===null?(0, Ge.throwNullException)("previousPointer.path"):e.path.toString()}get currentPointer(){return this.callStack.currentElement.currentPointer.copy()}set currentPointer(e){this.callStack.currentElement.currentPointer=e.copy();}get previousPointer(){return this.callStack.currentThread.previousPointer.copy()}set previousPointer(e){this.callStack.currentThread.previousPointer=e.copy();}get canContinue(){return !this.currentPointer.isNull&&!this.hasError}get hasError(){return this.currentErrors!=null&&this.currentErrors.length>0}get hasWarning(){return this.currentWarnings!=null&&this.currentWarnings.length>0}get currentText(){if(this._outputStreamTextDirty){let e=new vl.StringBuilder,t=false;for(let n of this.outputStream){let r=(0, ue.asOrNull)(n,pe.StringValue);if(!t&&r!==null)e.Append(r.value);else {let a=(0, ue.asOrNull)(n,Ae.ControlCommand);a!==null&&(a.commandType==Ae.ControlCommand.CommandType.BeginTag?t=true:a.commandType==Ae.ControlCommand.CommandType.EndTag&&(t=false));}}this._currentText=this.CleanOutputWhitespace(e.toString()),this._outputStreamTextDirty=false;}return this._currentText}CleanOutputWhitespace(e){let t=new vl.StringBuilder,n=-1,r=0;for(let a=0;a<e.length;a++){let s=e.charAt(a),o=s==" "||s==" ";o&&n==-1&&(n=a),o||(s!=`
|
|
21
|
+
`&&n>0&&n!=r&&t.Append(" "),n=-1),s==`
|
|
22
|
+
`&&(r=a+1),o||t.Append(s);}return t.toString()}get currentTags(){if(this._outputStreamTagsDirty){this._currentTags=[];let e=false,t=new vl.StringBuilder;for(let n of this.outputStream){let r=(0, ue.asOrNull)(n,Ae.ControlCommand);if(r!=null){if(r.commandType==Ae.ControlCommand.CommandType.BeginTag){if(e&&t.Length>0){let a=this.CleanOutputWhitespace(t.toString());this._currentTags.push(a),t.Clear();}e=true;}else if(r.commandType==Ae.ControlCommand.CommandType.EndTag){if(t.Length>0){let a=this.CleanOutputWhitespace(t.toString());this._currentTags.push(a),t.Clear();}e=false;}}else if(e){let a=(0, ue.asOrNull)(n,pe.StringValue);a!==null&&t.Append(a.value);}else {let a=(0, ue.asOrNull)(n,Pg.Tag);a!=null&&a.text!=null&&a.text.length>0&&this._currentTags.push(a.text);}}if(t.Length>0){let n=this.CleanOutputWhitespace(t.toString());this._currentTags.push(n),t.Clear();}this._outputStreamTagsDirty=false;}return this._currentTags}get currentFlowName(){return this._currentFlow.name}get currentFlowIsDefaultFlow(){return this._currentFlow.name==this.kDefaultFlowName}get aliveFlowNames(){if(this._aliveFlowNamesDirty){if(this._aliveFlowNames=[],this._namedFlows!=null)for(let e of this._namedFlows.keys())e!=this.kDefaultFlowName&&this._aliveFlowNames.push(e);this._aliveFlowNamesDirty=false;}return this._aliveFlowNames}get inExpressionEvaluation(){return this.callStack.currentElement.inExpressionEvaluation}set inExpressionEvaluation(e){this.callStack.currentElement.inExpressionEvaluation=e;}constructor(e){this.kInkSaveStateVersion=10,this.kMinCompatibleLoadVersion=8,this.onDidLoadState=null,this._currentErrors=null,this._currentWarnings=null,this.divertedPointer=mn.Pointer.Null,this._currentTurnIndex=0,this.storySeed=0,this.previousRandom=0,this.didSafeExit=false,this._currentText=null,this._currentTags=null,this._outputStreamTextDirty=true,this._outputStreamTagsDirty=true,this._patch=null,this._aliveFlowNames=null,this._namedFlows=null,this.kDefaultFlowName="DEFAULT_FLOW",this._aliveFlowNamesDirty=true,this.story=e,this._currentFlow=new Os.Flow(this.kDefaultFlowName,e),this.OutputStreamDirty(),this._aliveFlowNamesDirty=true,this._evaluationStack=[],this._variablesState=new Og.VariablesState(this.callStack,e.listDefinitions),this._visitCounts=new Map,this._turnIndices=new Map,this.currentTurnIndex=-1;let t=new Date().getTime();this.storySeed=new Tg.PRNG(t).next()%100,this.previousRandom=0,this.GoToStart();}GoToStart(){this.callStack.currentElement.currentPointer=mn.Pointer.StartOf(this.story.mainContentContainer);}SwitchFlow_Internal(e){if(e===null)throw new Error("Must pass a non-null string to Story.SwitchFlow");if(this._namedFlows===null&&(this._namedFlows=new Map,this._namedFlows.set(this.kDefaultFlowName,this._currentFlow)),e===this._currentFlow.name)return;let t,n=(0, ri.tryGetValueFromMap)(this._namedFlows,e,null);n.exists?t=n.result:(t=new Os.Flow(e,this.story),this._namedFlows.set(e,t),this._aliveFlowNamesDirty=true),this._currentFlow=t,this.variablesState.callStack=this._currentFlow.callStack,this.OutputStreamDirty();}SwitchToDefaultFlow_Internal(){this._namedFlows!==null&&this.SwitchFlow_Internal(this.kDefaultFlowName);}RemoveFlow_Internal(e){if(e===null)throw new Error("Must pass a non-null string to Story.DestroyFlow");if(e===this.kDefaultFlowName)throw new Error("Cannot destroy default flow");if(this._currentFlow.name===e&&this.SwitchToDefaultFlow_Internal(),this._namedFlows===null)return (0, Ge.throwNullException)("this._namedFlows");this._namedFlows.delete(e),this._aliveFlowNamesDirty=true;}CopyAndStartPatching(e){let t=new i(this.story);if(t._patch=new Vg.StatePatch(this._patch),t._currentFlow.name=this._currentFlow.name,t._currentFlow.callStack=new _g.CallStack(this._currentFlow.callStack),t._currentFlow.outputStream.push(...this._currentFlow.outputStream),t.OutputStreamDirty(),e)for(let n of this._currentFlow.currentChoices)t._currentFlow.currentChoices.push(n.Clone());else t._currentFlow.currentChoices.push(...this._currentFlow.currentChoices);if(this._namedFlows!==null){t._namedFlows=new Map;for(let[n,r]of this._namedFlows)t._namedFlows.set(n,r),t._aliveFlowNamesDirty=true;t._namedFlows.set(this._currentFlow.name,t._currentFlow);}return this.hasError&&(t._currentErrors=[],t._currentErrors.push(...this.currentErrors||[])),this.hasWarning&&(t._currentWarnings=[],t._currentWarnings.push(...this.currentWarnings||[])),t.variablesState=this.variablesState,t.variablesState.callStack=t.callStack,t.variablesState.patch=t._patch,t.evaluationStack.push(...this.evaluationStack),this.divertedPointer.isNull||(t.divertedPointer=this.divertedPointer.copy()),t.previousPointer=this.previousPointer.copy(),t._visitCounts=this._visitCounts,t._turnIndices=this._turnIndices,t.currentTurnIndex=this.currentTurnIndex,t.storySeed=this.storySeed,t.previousRandom=this.previousRandom,t.didSafeExit=this.didSafeExit,t}RestoreAfterPatch(){this.variablesState.callStack=this.callStack,this.variablesState.patch=this._patch;}ApplyAnyPatch(){if(this._patch!==null){this.variablesState.ApplyPatch();for(let[e,t]of this._patch.visitCounts)this.ApplyCountChanges(e,t,true);for(let[e,t]of this._patch.turnIndices)this.ApplyCountChanges(e,t,false);this._patch=null;}}ApplyCountChanges(e,t,n){(n?this._visitCounts:this._turnIndices).set(e.path.toString(),t);}WriteJson(e){if(e.WriteObjectStart(),e.WritePropertyStart("flows"),e.WriteObjectStart(),this._namedFlows!==null)for(let[t,n]of this._namedFlows)e.WriteProperty(t,r=>n.WriteJson(r));else e.WriteProperty(this._currentFlow.name,t=>this._currentFlow.WriteJson(t));if(e.WriteObjectEnd(),e.WritePropertyEnd(),e.WriteProperty("currentFlowName",this._currentFlow.name),e.WriteProperty("variablesState",t=>this.variablesState.WriteJson(t)),e.WriteProperty("evalStack",t=>wt.JsonSerialisation.WriteListRuntimeObjs(t,this.evaluationStack)),!this.divertedPointer.isNull){if(this.divertedPointer.path===null)return (0, Ge.throwNullException)("divertedPointer");e.WriteProperty("currentDivertTarget",this.divertedPointer.path.componentsString);}e.WriteProperty("visitCounts",t=>wt.JsonSerialisation.WriteIntDictionary(t,this._visitCounts)),e.WriteProperty("turnIndices",t=>wt.JsonSerialisation.WriteIntDictionary(t,this._turnIndices)),e.WriteIntProperty("turnIdx",this.currentTurnIndex),e.WriteIntProperty("storySeed",this.storySeed),e.WriteIntProperty("previousRandom",this.previousRandom),e.WriteIntProperty("inkSaveVersion",this.kInkSaveStateVersion),e.WriteIntProperty("inkFormatVersion",Ig.Story.inkVersionCurrent),e.WriteObjectEnd();}LoadJsonObj(e){let t=e,n=t.inkSaveVersion;if(n==null)throw new Error("ink save format incorrect, can't load.");if(parseInt(n)<this.kMinCompatibleLoadVersion)throw new Error("Ink save format isn't compatible with the current version (saw '"+n+"', but minimum is "+this.kMinCompatibleLoadVersion+"), so can't load.");let r=t.flows;if(r!=null){let s=r;Object.keys(s).length===1?this._namedFlows=null:this._namedFlows===null?this._namedFlows=new Map:this._namedFlows.clear();let o=Object.entries(s);for(let[l,u]of o){let c=l,h=u,m=new Os.Flow(c,this.story,h);if(Object.keys(s).length===1)this._currentFlow=new Os.Flow(c,this.story,h);else {if(this._namedFlows===null)return (0, Ge.throwNullException)("this._namedFlows");this._namedFlows.set(c,m);}}if(this._namedFlows!=null&&this._namedFlows.size>1){let l=t.currentFlowName;this._currentFlow=this._namedFlows.get(l);}}else {this._namedFlows=null,this._currentFlow.name=this.kDefaultFlowName,this._currentFlow.callStack.SetJsonToken(t.callstackThreads,this.story),this._currentFlow.outputStream=wt.JsonSerialisation.JArrayToRuntimeObjList(t.outputStream),this._currentFlow.currentChoices=wt.JsonSerialisation.JArrayToRuntimeObjList(t.currentChoices);let s=t.choiceThreads;this._currentFlow.LoadFlowChoiceThreads(s,this.story);}this.OutputStreamDirty(),this._aliveFlowNamesDirty=true,this.variablesState.SetJsonToken(t.variablesState),this.variablesState.callStack=this._currentFlow.callStack,this._evaluationStack=wt.JsonSerialisation.JArrayToRuntimeObjList(t.evalStack);let a=t.currentDivertTarget;if(a!=null){let s=new Qc.Path(a.toString());this.divertedPointer=this.story.PointerAtPath(s);}this._visitCounts=wt.JsonSerialisation.JObjectToIntDictionary(t.visitCounts),this._turnIndices=wt.JsonSerialisation.JObjectToIntDictionary(t.turnIndices),this.currentTurnIndex=parseInt(t.turnIdx),this.storySeed=parseInt(t.storySeed),this.previousRandom=parseInt(t.previousRandom);}ResetErrors(){this._currentErrors=null,this._currentWarnings=null;}ResetOutput(e=null){this.outputStream.length=0,e!==null&&this.outputStream.push(...e),this.OutputStreamDirty();}PushToOutputStream(e){let t=(0, ue.asOrNull)(e,pe.StringValue);if(t!==null){let n=this.TrySplittingHeadTailWhitespace(t);if(n!==null){for(let r of n)this.PushToOutputStreamIndividual(r);this.OutputStreamDirty();return}}this.PushToOutputStreamIndividual(e),this.OutputStreamDirty();}PopFromOutputStream(e){this.outputStream.splice(this.outputStream.length-e,e),this.OutputStreamDirty();}TrySplittingHeadTailWhitespace(e){let t=e.value;if(t===null)return (0, Ge.throwNullException)("single.value");let n=-1,r=-1;for(let c=0;c<t.length;c++){let h=t[c];if(h==`
|
|
23
|
+
`)n==-1&&(n=c),r=c;else {if(h==" "||h==" ")continue;break}}let a=-1,s=-1;for(let c=t.length-1;c>=0;c--){let h=t[c];if(h==`
|
|
24
|
+
`)a==-1&&(a=c),s=c;else {if(h==" "||h==" ")continue;break}}if(n==-1&&a==-1)return null;let o=[],l=0,u=t.length;if(n!=-1){if(n>0){let c=new pe.StringValue(t.substring(0,n));o.push(c);}o.push(new pe.StringValue(`
|
|
25
|
+
`)),l=r+1;}if(a!=-1&&(u=s),u>l){let c=t.substring(l,u);o.push(new pe.StringValue(c));}if(a!=-1&&s>r&&(o.push(new pe.StringValue(`
|
|
26
|
+
`)),a<t.length-1)){let c=t.length-a-1,h=new pe.StringValue(t.substring(a+1,a+1+c));o.push(h);}return o}PushToOutputStreamIndividual(e){let t=(0, ue.asOrNull)(e,yl.Glue),n=(0, ue.asOrNull)(e,pe.StringValue),r=true;if(t)this.TrimNewlinesFromOutputStream(),r=true;else if(n){let a=-1,s=this.callStack.currentElement;s.type==At.PushPopType.Function&&(a=s.functionStartInOutputStream);let o=-1;for(let u=this.outputStream.length-1;u>=0;u--){let c=this.outputStream[u],h=c instanceof Ae.ControlCommand?c:null;if((c instanceof yl.Glue?c:null)!=null){o=u;break}else if(h!=null&&h.commandType==Ae.ControlCommand.CommandType.BeginString){u>=a&&(a=-1);break}}let l=-1;if(o!=-1&&a!=-1?l=Math.min(a,o):o!=-1?l=o:l=a,l!=-1){if(n.isNewline)r=false;else if(n.isNonWhitespace&&(o>-1&&this.RemoveExistingGlue(),a>-1)){let u=this.callStack.elements;for(let c=u.length-1;c>=0;c--){let h=u[c];if(h.type==At.PushPopType.Function)h.functionStartInOutputStream=-1;else break}}}else n.isNewline&&(this.outputStreamEndsInNewline||!this.outputStreamContainsContent)&&(r=false);}if(r){if(e===null)return (0, Ge.throwNullException)("obj");this.outputStream.push(e),this.OutputStreamDirty();}}TrimNewlinesFromOutputStream(){let e=-1,t=this.outputStream.length-1;for(;t>=0;){let n=this.outputStream[t],r=(0, ue.asOrNull)(n,Ae.ControlCommand),a=(0, ue.asOrNull)(n,pe.StringValue);if(r!=null||a!=null&&a.isNonWhitespace)break;a!=null&&a.isNewline&&(e=t),t--;}if(e>=0)for(t=e;t<this.outputStream.length;)(0, ue.asOrNull)(this.outputStream[t],pe.StringValue)?this.outputStream.splice(t,1):t++;this.OutputStreamDirty();}RemoveExistingGlue(){for(let e=this.outputStream.length-1;e>=0;e--){let t=this.outputStream[e];if(t instanceof yl.Glue)this.outputStream.splice(e,1);else if(t instanceof Ae.ControlCommand)break}this.OutputStreamDirty();}get outputStreamEndsInNewline(){if(this.outputStream.length>0)for(let e=this.outputStream.length-1;e>=0&&!(this.outputStream[e]instanceof Ae.ControlCommand);e--){let n=this.outputStream[e];if(n instanceof pe.StringValue){if(n.isNewline)return true;if(n.isNonWhitespace)break}}return false}get outputStreamContainsContent(){for(let e of this.outputStream)if(e instanceof pe.StringValue)return true;return false}get inStringEvaluation(){for(let e=this.outputStream.length-1;e>=0;e--){let t=(0, ue.asOrNull)(this.outputStream[e],Ae.ControlCommand);if(t instanceof Ae.ControlCommand&&t.commandType==Ae.ControlCommand.CommandType.BeginString)return true}return false}PushEvaluationStack(e){let t=(0, ue.asOrNull)(e,pe.ListValue);if(t){let n=t.value;if(n===null)return (0, Ge.throwNullException)("rawList");if(n.originNames!=null){n.origins||(n.origins=[]),n.origins.length=0;for(let r of n.originNames){if(this.story.listDefinitions===null)return (0, Ge.throwNullException)("StoryState.story.listDefinitions");let a=this.story.listDefinitions.TryListGetDefinition(r,null);if(a.result===null)return (0, Ge.throwNullException)("StoryState def.result");n.origins.indexOf(a.result)<0&&n.origins.push(a.result);}}}if(e===null)return (0, Ge.throwNullException)("obj");this.evaluationStack.push(e);}PopEvaluationStack(e){if(typeof e>"u"){let t=this.evaluationStack.pop();return (0, ue.nullIfUndefined)(t)}else {if(e>this.evaluationStack.length)throw new Error("trying to pop too many objects");let t=this.evaluationStack.splice(this.evaluationStack.length-e,e);return (0, ue.nullIfUndefined)(t)}}PeekEvaluationStack(){return this.evaluationStack[this.evaluationStack.length-1]}ForceEnd(){this.callStack.Reset(),this._currentFlow.currentChoices.length=0,this.currentPointer=mn.Pointer.Null,this.previousPointer=mn.Pointer.Null,this.didSafeExit=true;}TrimWhitespaceFromFunctionEnd(){Ng.Debug.Assert(this.callStack.currentElement.type==At.PushPopType.Function);let e=this.callStack.currentElement.functionStartInOutputStream;e==-1&&(e=0);for(let t=this.outputStream.length-1;t>=e;t--){let n=this.outputStream[t],r=(0, ue.asOrNull)(n,pe.StringValue),a=(0, ue.asOrNull)(n,Ae.ControlCommand);if(r!=null){if(a)break;if(r.isNewline||r.isInlineWhitespace)this.outputStream.splice(t,1),this.OutputStreamDirty();else break}}}PopCallStack(e=null){this.callStack.currentElement.type==At.PushPopType.Function&&this.TrimWhitespaceFromFunctionEnd(),this.callStack.Pop(e);}SetChosenPath(e,t){this._currentFlow.currentChoices.length=0;let n=this.story.PointerAtPath(e);!n.isNull&&n.index==-1&&(n.index=0),this.currentPointer=n,t&&this.currentTurnIndex++;}StartFunctionEvaluationFromGame(e,t){this.callStack.Push(At.PushPopType.FunctionEvaluationFromGame,this.evaluationStack.length),this.callStack.currentElement.currentPointer=mn.Pointer.StartOf(e),this.PassArgumentsToEvaluationStack(t);}PassArgumentsToEvaluationStack(e){if(e!==null)for(let t=0;t<e.length;t++){if(!(typeof e[t]=="number"||typeof e[t]=="string"||typeof e[t]=="boolean"||e[t]instanceof kg.InkList))throw new Error("ink arguments when calling EvaluateFunction / ChoosePathStringWithParameters must benumber, string, bool or InkList. Argument was "+((0, ue.nullIfUndefined)(e[t])===null?"null":e[t].constructor.name));this.PushEvaluationStack(pe.Value.Create(e[t]));}}TryExitFunctionEvaluationFromGame(){return this.callStack.currentElement.type==At.PushPopType.FunctionEvaluationFromGame?(this.currentPointer=mn.Pointer.Null,this.didSafeExit=true,true):false}CompleteFunctionEvaluationFromGame(){if(this.callStack.currentElement.type!=At.PushPopType.FunctionEvaluationFromGame)throw new Error("Expected external function evaluation to be complete. Stack trace: "+this.callStack.callStackTrace);let e=this.callStack.currentElement.evaluationStackHeightWhenPushed,t=null;for(;this.evaluationStack.length>e;){let n=this.PopEvaluationStack();t===null&&(t=n);}if(this.PopCallStack(At.PushPopType.FunctionEvaluationFromGame),t){if(t instanceof Fg.Void)return null;let n=(0, ue.asOrThrows)(t,pe.Value);return n.valueType==pe.ValueType.DivertTarget?"-> "+n.valueObject.toString():n.valueObject}return null}AddError(e,t){t?(this._currentWarnings==null&&(this._currentWarnings=[]),this._currentWarnings.push(e)):(this._currentErrors==null&&(this._currentErrors=[]),this._currentErrors.push(e));}OutputStreamDirty(){this._outputStreamTextDirty=true,this._outputStreamTagsDirty=true;}};Ps.StoryState=bl;});var nh=O(Ts=>{Object.defineProperty(Ts,"__esModule",{value:true});Ts.Stopwatch=void 0;var Sl=class{constructor(){this.startTime=void 0;}get ElapsedMilliseconds(){return typeof this.startTime>"u"?0:new Date().getTime()-this.startTime}Start(){this.startTime=new Date().getTime();}Stop(){this.startTime=void 0;}};Ts.Stopwatch=Sl;});var rh=O(Fs=>{Object.defineProperty(Fs,"__esModule",{value:true});Fs.ErrorType=void 0;var ih;(function(i){i[i.Author=0]="Author",i[i.Warning=1]="Warning",i[i.Error=2]="Error";})(ih||(Fs.ErrorType=ih={}));});var ei=O(Gt=>{Object.defineProperty(Gt,"__esModule",{value:true});Gt.Story=Gt.InkList=void 0;var ve=oe(),El=Te(),Dl=fn(),Rg=th(),R=Ce(),$e=Rt(),Lg=Zi(),jg=sl(),sh=nt(),I=ie(),Al=Pe(),si=kt(),Ns=ms(),Bg=bt(),Wg=hn(),qg=tt(),qt=Fn(),wl=fl(),Mt=It(),Mg=ol(),Gg=nh(),xt=Mn(),ai=Ne(),L=U(),H=ge(),ah=gl(),oh=rh(),$g=Ne();Object.defineProperty(Gt,"InkList",{enumerable:true,get:function(){return $g.InkList}});Number.isInteger||(Number.isInteger=function(e){return typeof e=="number"&&isFinite(e)&&e>-9007199254740992&&e<9007199254740992&&Math.floor(e)===e});var gn=class i extends El.InkObject{get currentChoices(){let e=[];if(this._state===null)return (0, H.throwNullException)("this._state");for(let t of this._state.currentChoices)t.isInvisibleDefault||(t.index=e.length,e.push(t));return e}get currentText(){return this.IfAsyncWeCant("call currentText since it's a work in progress"),this.state.currentText}get currentTags(){return this.IfAsyncWeCant("call currentTags since it's a work in progress"),this.state.currentTags}get currentErrors(){return this.state.currentErrors}get currentWarnings(){return this.state.currentWarnings}get currentFlowName(){return this.state.currentFlowName}get currentFlowIsDefaultFlow(){return this.state.currentFlowIsDefaultFlow}get aliveFlowNames(){return this.state.aliveFlowNames}get hasError(){return this.state.hasError}get hasWarning(){return this.state.hasWarning}get variablesState(){return this.state.variablesState}get listDefinitions(){return this._listDefinitions}get state(){return this._state}StartProfiling(){}EndProfiling(){}constructor(){super(),this.inkVersionMinimumCompatible=18,this.onError=null,this.onDidContinue=null,this.onMakeChoice=null,this.onEvaluateFunction=null,this.onCompleteEvaluateFunction=null,this.onChoosePathString=null,this._prevContainers=[],this.allowExternalFunctionFallbacks=false,this._listDefinitions=null,this._variableObservers=null,this._hasValidatedExternals=false,this._temporaryEvaluationContainer=null,this._asyncContinueActive=false,this._stateSnapshotAtLastNewline=null,this._sawLookaheadUnsafeFunctionAfterNewline=false,this._recursiveContinueCount=0,this._asyncSaving=false,this._profiler=null;let e,t=null,n=null;if(arguments[0]instanceof ve.Container)e=arguments[0],typeof arguments[1]<"u"&&(t=arguments[1]),this._mainContentContainer=e;else if(typeof arguments[0]=="string"){let r=arguments[0];n=ah.SimpleJson.TextToDictionary(r);}else n=arguments[0];if(t!=null&&(this._listDefinitions=new Mg.ListDefinitionsOrigin(t)),this._externals=new Map,n!==null){let r=n,a=r.inkVersion;if(a==null)throw new Error("ink version number not found. Are you sure it's a valid .ink.json file?");let s=parseInt(a);if(s>i.inkVersionCurrent)throw new Error("Version of ink used to build story was newer than the current version of the engine");if(s<this.inkVersionMinimumCompatible)throw new Error("Version of ink used to build story is too old to be loaded by this version of the engine");s!=i.inkVersionCurrent&&console.warn(`WARNING: Version of ink ${i.inkVersionCurrent} used to build story doesn't match current version of engine (${s}). Non-critical, but recommend synchronising.`);let o=r.root;if(o==null)throw new Error("Root node for ink not found. Are you sure it's a valid .ink.json file?");let l;(l=r.listDefs)&&(this._listDefinitions=Dl.JsonSerialisation.JTokenToListDefinitions(l)),this._mainContentContainer=(0, L.asOrThrows)(Dl.JsonSerialisation.JTokenToRuntimeObject(o),ve.Container),this.ResetState();}}ToJson(e){let t=false;if(e||(t=true,e=new ah.SimpleJson.Writer),e.WriteObjectStart(),e.WriteIntProperty("inkVersion",i.inkVersionCurrent),e.WriteProperty("root",n=>Dl.JsonSerialisation.WriteRuntimeContainer(n,this._mainContentContainer)),this._listDefinitions!=null){e.WritePropertyStart("listDefs"),e.WriteObjectStart();for(let n of this._listDefinitions.lists){e.WritePropertyStart(n.name),e.WriteObjectStart();for(let[r,a]of n.items){let s=ai.InkListItem.fromSerializedKey(r),o=a;e.WriteIntProperty(s.itemName,o);}e.WriteObjectEnd(),e.WritePropertyEnd();}e.WriteObjectEnd(),e.WritePropertyEnd();}if(e.WriteObjectEnd(),t)return e.toString()}ResetState(){this.IfAsyncWeCant("ResetState"),this._state=new Rg.StoryState(this),this._state.variablesState.ObserveVariableChange(this.VariableStateDidChangeEvent.bind(this)),this.ResetGlobals();}ResetErrors(){if(this._state===null)return (0, H.throwNullException)("this._state");this._state.ResetErrors();}ResetCallstack(){if(this.IfAsyncWeCant("ResetCallstack"),this._state===null)return (0, H.throwNullException)("this._state");this._state.ForceEnd();}ResetGlobals(){if(this._mainContentContainer.namedContent.get("global decl")){let e=this.state.currentPointer.copy();this.ChoosePath(new Al.Path("global decl"),false),this.ContinueInternal(),this.state.currentPointer=e;}this.state.variablesState.SnapshotDefaultGlobals();}SwitchFlow(e){if(this.IfAsyncWeCant("switch flow"),this._asyncSaving)throw new Error("Story is already in background saving mode, can't switch flow to "+e);this.state.SwitchFlow_Internal(e);}RemoveFlow(e){this.state.RemoveFlow_Internal(e);}SwitchToDefaultFlow(){this.state.SwitchToDefaultFlow_Internal();}Continue(){return this.ContinueAsync(0),this.currentText}get canContinue(){return this.state.canContinue}get asyncContinueComplete(){return !this._asyncContinueActive}ContinueAsync(e){this._hasValidatedExternals||this.ValidateExternalBindings(),this.ContinueInternal(e);}ContinueInternal(e=0){this._profiler!=null&&this._profiler.PreContinue();let t=e>0;if(this._recursiveContinueCount++,this._asyncContinueActive)this._asyncContinueActive&&!t&&(this._asyncContinueActive=false);else {if(this._asyncContinueActive=t,!this.canContinue)throw new Error("Can't continue - should check canContinue before calling Continue");this._state.didSafeExit=false,this._state.ResetOutput(),this._recursiveContinueCount==1&&this._state.variablesState.StartVariableObservation();}let n=new Gg.Stopwatch;n.Start();let r=false;this._sawLookaheadUnsafeFunctionAfterNewline=false;do{try{r=this.ContinueSingleStep();}catch(s){if(!(s instanceof qt.StoryException))throw s;this.AddError(s.message,void 0,s.useEndLineNumber);break}if(r||this._asyncContinueActive&&n.ElapsedMilliseconds>e)break}while(this.canContinue);n.Stop();let a=null;if((r||!this.canContinue)&&(this._stateSnapshotAtLastNewline!==null&&this.RestoreStateSnapshot(),this.canContinue||(this.state.callStack.canPopThread&&this.AddError("Thread available to pop, threads should always be flat by the end of evaluation?"),this.state.generatedChoices.length==0&&!this.state.didSafeExit&&this._temporaryEvaluationContainer==null&&(this.state.callStack.CanPop($e.PushPopType.Tunnel)?this.AddError("unexpectedly reached end of content. Do you need a '->->' to return from a tunnel?"):this.state.callStack.CanPop($e.PushPopType.Function)?this.AddError("unexpectedly reached end of content. Do you need a '~ return'?"):this.state.callStack.canPop?this.AddError("unexpectedly reached end of content for unknown reason. Please debug compiler!"):this.AddError("ran out of content. Do you need a '-> DONE' or '-> END'?"))),this.state.didSafeExit=false,this._sawLookaheadUnsafeFunctionAfterNewline=false,this._recursiveContinueCount==1&&(a=this._state.variablesState.CompleteVariableObservation()),this._asyncContinueActive=false,this.onDidContinue!==null&&this.onDidContinue()),this._recursiveContinueCount--,this._profiler!=null&&this._profiler.PostContinue(),this.state.hasError||this.state.hasWarning)if(this.onError!==null){if(this.state.hasError)for(let s of this.state.currentErrors)this.onError(s,oh.ErrorType.Error);if(this.state.hasWarning)for(let s of this.state.currentWarnings)this.onError(s,oh.ErrorType.Warning);this.ResetErrors();}else {let s=new Mt.StringBuilder;throw s.Append("Ink had "),this.state.hasError&&(s.Append(`${this.state.currentErrors.length}`),s.Append(this.state.currentErrors.length==1?" error":" errors"),this.state.hasWarning&&s.Append(" and ")),this.state.hasWarning&&(s.Append(`${this.state.currentWarnings.length}`),s.Append(this.state.currentWarnings.length==1?" warning":" warnings"),this.state.hasWarning&&s.Append(" and ")),s.Append(". It is strongly suggested that you assign an error handler to story.onError. The first issue was: "),s.Append(this.state.hasError?this.state.currentErrors[0]:this.state.currentWarnings[0]),new qt.StoryException(s.toString())}a!=null&&Object.keys(a).length>0&&this._state.variablesState.NotifyObservers(a);}ContinueSingleStep(){if(this._profiler!=null&&this._profiler.PreStep(),this.Step(),this._profiler!=null&&this._profiler.PostStep(),!this.canContinue&&!this.state.callStack.elementIsEvaluateFromGame&&this.TryFollowDefaultInvisibleChoice(),this._profiler!=null&&this._profiler.PreSnapshot(),!this.state.inStringEvaluation){if(this._stateSnapshotAtLastNewline!==null){if(this._stateSnapshotAtLastNewline.currentTags===null)return (0, H.throwNullException)("this._stateAtLastNewline.currentTags");if(this.state.currentTags===null)return (0, H.throwNullException)("this.state.currentTags");let e=this.CalculateNewlineOutputStateChange(this._stateSnapshotAtLastNewline.currentText,this.state.currentText,this._stateSnapshotAtLastNewline.currentTags.length,this.state.currentTags.length);if(e==i.OutputStateChange.ExtendedBeyondNewline||this._sawLookaheadUnsafeFunctionAfterNewline)return this.RestoreStateSnapshot(),true;e==i.OutputStateChange.NewlineRemoved&&this.DiscardSnapshot();}this.state.outputStreamEndsInNewline&&(this.canContinue?this._stateSnapshotAtLastNewline==null&&this.StateSnapshot():this.DiscardSnapshot());}return this._profiler!=null&&this._profiler.PostSnapshot(),false}CalculateNewlineOutputStateChange(e,t,n,r){if(e===null)return (0, H.throwNullException)("prevText");if(t===null)return (0, H.throwNullException)("currText");let a=t.length>=e.length&&e.length>0&&t.charAt(e.length-1)==`
|
|
27
|
+
`;if(n==r&&e.length==t.length&&a)return i.OutputStateChange.NoChange;if(!a)return i.OutputStateChange.NewlineRemoved;if(r>n)return i.OutputStateChange.ExtendedBeyondNewline;for(let s=e.length;s<t.length;s++){let o=t.charAt(s);if(o!=" "&&o!=" ")return i.OutputStateChange.ExtendedBeyondNewline}return i.OutputStateChange.NoChange}ContinueMaximally(){this.IfAsyncWeCant("ContinueMaximally");let e=new Mt.StringBuilder;for(;this.canContinue;)e.Append(this.Continue());return e.toString()}ContentAtPath(e){return this.mainContentContainer.ContentAtPath(e)}KnotContainerWithName(e){let t=this.mainContentContainer.namedContent.get(e);return t instanceof ve.Container?t:null}PointerAtPath(e){if(e.length==0)return xt.Pointer.Null;let t=new xt.Pointer,n=e.length,r=null;return e.lastComponent===null?(0, H.throwNullException)("path.lastComponent"):(e.lastComponent.isIndex?(n=e.length-1,r=this.mainContentContainer.ContentAtPath(e,void 0,n),t.container=r.container,t.index=e.lastComponent.index):(r=this.mainContentContainer.ContentAtPath(e),t.container=r.container,t.index=-1),r.obj==null||r.obj==this.mainContentContainer&&n>0?this.Error("Failed to find content at path '"+e+"', and no approximation of it was possible."):r.approximate&&this.Warning("Failed to find content at path '"+e+"', so it was approximated to: '"+r.obj.path+"'."),t)}StateSnapshot(){this._stateSnapshotAtLastNewline=this._state,this._state=this._state.CopyAndStartPatching(false);}RestoreStateSnapshot(){this._stateSnapshotAtLastNewline===null&&(0, H.throwNullException)("_stateSnapshotAtLastNewline"),this._stateSnapshotAtLastNewline.RestoreAfterPatch(),this._state=this._stateSnapshotAtLastNewline,this._stateSnapshotAtLastNewline=null,this._asyncSaving||this._state.ApplyAnyPatch();}DiscardSnapshot(){this._asyncSaving||this._state.ApplyAnyPatch(),this._stateSnapshotAtLastNewline=null;}CopyStateForBackgroundThreadSave(){if(this.IfAsyncWeCant("start saving on a background thread"),this._asyncSaving)throw new Error("Story is already in background saving mode, can't call CopyStateForBackgroundThreadSave again!");let e=this._state;return this._state=this._state.CopyAndStartPatching(true),this._asyncSaving=true,e}BackgroundSaveComplete(){this._stateSnapshotAtLastNewline===null&&this._state.ApplyAnyPatch(),this._asyncSaving=false;}Step(){let e=true,t=this.state.currentPointer.copy();if(t.isNull)return;let n=(0, L.asOrNull)(t.Resolve(),ve.Container);for(;n&&(this.VisitContainer(n,true),n.content.length!=0);)t=xt.Pointer.StartOf(n),n=(0, L.asOrNull)(t.Resolve(),ve.Container);this.state.currentPointer=t.copy(),this._profiler!=null&&this._profiler.Step(this.state.callStack);let r=t.Resolve(),a=this.PerformLogicAndFlowControl(r);if(this.state.currentPointer.isNull)return;a&&(e=false);let s=(0, L.asOrNull)(r,Lg.ChoicePoint);if(s){let l=this.ProcessChoice(s);l&&this.state.generatedChoices.push(l),r=null,e=false;}if(r instanceof ve.Container&&(e=false),e){let l=(0, L.asOrNull)(r,I.VariablePointerValue);if(l&&l.contextIndex==-1){let u=this.state.callStack.ContextForVariableNamed(l.variableName);r=new I.VariablePointerValue(l.variableName,u);}this.state.inExpressionEvaluation?this.state.PushEvaluationStack(r):this.state.PushToOutputStream(r);}this.NextContent();let o=(0, L.asOrNull)(r,R.ControlCommand);o&&o.commandType==R.ControlCommand.CommandType.StartThread&&this.state.callStack.PushThread();}VisitContainer(e,t){(!e.countingAtStartOnly||t)&&(e.visitsShouldBeCounted&&this.state.IncrementVisitCountForContainer(e),e.turnIndexShouldBeCounted&&this.state.RecordTurnIndexVisitToContainer(e));}VisitChangedContainersDueToDivert(){let e=this.state.previousPointer.copy(),t=this.state.currentPointer.copy();if(t.isNull||t.index==-1)return;if(this._prevContainers.length=0,!e.isNull){let s=e.Resolve(),o=(0, L.asOrNull)(s,ve.Container)||(0, L.asOrNull)(e.container,ve.Container);for(;o;)this._prevContainers.push(o),o=(0, L.asOrNull)(o.parent,ve.Container);}let n=t.Resolve();if(n==null)return;let r=(0, L.asOrNull)(n.parent,ve.Container),a=true;for(;r&&(this._prevContainers.indexOf(r)<0||r.countingAtStartOnly);){let s=r.content.length>0&&n==r.content[0]&&a;s||(a=false),this.VisitContainer(r,s),n=r,r=(0, L.asOrNull)(r.parent,ve.Container);}}PopChoiceStringAndTags(e){let t=(0, L.asOrThrows)(this.state.PopEvaluationStack(),I.StringValue);for(;this.state.evaluationStack.length>0&&(0, L.asOrNull)(this.state.PeekEvaluationStack(),Ns.Tag)!=null;){let n=(0, L.asOrNull)(this.state.PopEvaluationStack(),Ns.Tag);n&&e.push(n.text);}return t.value}ProcessChoice(e){let t=true;if(e.hasCondition){let o=this.state.PopEvaluationStack();this.IsTruthy(o)||(t=false);}let n="",r="",a=[];if(e.hasChoiceOnlyContent&&(r=this.PopChoiceStringAndTags(a)||""),e.hasStartContent&&(n=this.PopChoiceStringAndTags(a)||""),e.onceOnly&&this.state.VisitCountForContainer(e.choiceTarget)>0&&(t=false),!t)return null;let s=new jg.Choice;return s.targetPath=e.pathOnChoice,s.sourcePath=e.path.toString(),s.isInvisibleDefault=e.isInvisibleDefault,s.threadAtGeneration=this.state.callStack.ForkThread(),s.tags=a.reverse(),s.text=(n+r).replace(/^[ \t]+|[ \t]+$/g,""),s}IsTruthy(e){let t=false;if(e instanceof I.Value){let n=e;if(n instanceof I.DivertTargetValue){let r=n;return this.Error("Shouldn't use a divert target (to "+r.targetPath+") as a conditional value. Did you intend a function call 'likeThis()' or a read count check 'likeThis'? (no arrows)"),false}return n.isTruthy}return t}PerformLogicAndFlowControl(e){if(e==null)return false;if(e instanceof sh.Divert){let t=e;if(t.isConditional){let n=this.state.PopEvaluationStack();if(!this.IsTruthy(n))return true}if(t.hasVariableTarget){let n=t.variableDivertName,r=this.state.variablesState.GetVariableWithName(n);if(r==null)this.Error("Tried to divert using a target from a variable that could not be found ("+n+")");else if(!(r instanceof I.DivertTargetValue)){let s=(0, L.asOrNull)(r,I.IntValue),o="Tried to divert to a target from a variable, but the variable ("+n+") didn't contain a divert target, it ";s instanceof I.IntValue&&s.value==0?o+="was empty/null (the value 0).":o+="contained '"+r+"'.",this.Error(o);}let a=(0, L.asOrThrows)(r,I.DivertTargetValue);this.state.divertedPointer=this.PointerAtPath(a.targetPath);}else {if(t.isExternal)return this.CallExternalFunction(t.targetPathString,t.externalArgs),true;this.state.divertedPointer=t.targetPointer.copy();}return t.pushesToStack&&this.state.callStack.Push(t.stackPushType,void 0,this.state.outputStream.length),this.state.divertedPointer.isNull&&!t.isExternal&&(t&&t.debugMetadata&&t.debugMetadata.sourceName!=null?this.Error("Divert target doesn't exist: "+t.debugMetadata.sourceName):this.Error("Divert resolution failed: "+t)),true}else if(e instanceof R.ControlCommand){let t=e;switch(t.commandType){case R.ControlCommand.CommandType.EvalStart:this.Assert(this.state.inExpressionEvaluation===false,"Already in expression evaluation?"),this.state.inExpressionEvaluation=true;break;case R.ControlCommand.CommandType.EvalEnd:this.Assert(this.state.inExpressionEvaluation===true,"Not in expression evaluation mode"),this.state.inExpressionEvaluation=false;break;case R.ControlCommand.CommandType.EvalOutput:if(this.state.evaluationStack.length>0){let p=this.state.PopEvaluationStack();if(!(p instanceof si.Void)){let g=new I.StringValue(p.toString());this.state.PushToOutputStream(g);}}break;case R.ControlCommand.CommandType.NoOp:break;case R.ControlCommand.CommandType.Duplicate:this.state.PushEvaluationStack(this.state.PeekEvaluationStack());break;case R.ControlCommand.CommandType.PopEvaluatedValue:this.state.PopEvaluationStack();break;case R.ControlCommand.CommandType.PopFunction:case R.ControlCommand.CommandType.PopTunnel:let n=t.commandType==R.ControlCommand.CommandType.PopFunction?$e.PushPopType.Function:$e.PushPopType.Tunnel,r=null;if(n==$e.PushPopType.Tunnel){let p=this.state.PopEvaluationStack();r=(0, L.asOrNull)(p,I.DivertTargetValue),r===null&&this.Assert(p instanceof si.Void,"Expected void if ->-> doesn't override target");}if(this.state.TryExitFunctionEvaluationFromGame())break;if(this.state.callStack.currentElement.type!=n||!this.state.callStack.canPop){let p=new Map;p.set($e.PushPopType.Function,"function return statement (~ return)"),p.set($e.PushPopType.Tunnel,"tunnel onwards statement (->->)");let g=p.get(this.state.callStack.currentElement.type);this.state.callStack.canPop||(g="end of flow (-> END or choice)");let S="Found "+p.get(n)+", when expected "+g;this.Error(S);}else this.state.PopCallStack(),r&&(this.state.divertedPointer=this.PointerAtPath(r.targetPath));break;case R.ControlCommand.CommandType.BeginString:this.state.PushToOutputStream(t),this.Assert(this.state.inExpressionEvaluation===true,"Expected to be in an expression when evaluating a string"),this.state.inExpressionEvaluation=false;break;case R.ControlCommand.CommandType.BeginTag:this.state.PushToOutputStream(t);break;case R.ControlCommand.CommandType.EndTag:{if(this.state.inStringEvaluation){let p=[],g=0;for(let w=this.state.outputStream.length-1;w>=0;--w){let N=this.state.outputStream[w];g++;let K=(0, L.asOrNull)(N,R.ControlCommand);if(K!=null){if(K.commandType==R.ControlCommand.CommandType.BeginTag)break;this.Error("Unexpected ControlCommand while extracting tag from choice");break}N instanceof I.StringValue&&p.push(N);}this.state.PopFromOutputStream(g);let S=new Mt.StringBuilder;for(let w of p.reverse())S.Append(w.toString());let _=new Ns.Tag(this.state.CleanOutputWhitespace(S.toString()));this.state.PushEvaluationStack(_);}else this.state.PushToOutputStream(t);break}case R.ControlCommand.CommandType.EndString:{let p=[],g=[],S=0;for(let w=this.state.outputStream.length-1;w>=0;--w){let N=this.state.outputStream[w];S++;let K=(0, L.asOrNull)(N,R.ControlCommand);if(K&&K.commandType==R.ControlCommand.CommandType.BeginString)break;N instanceof Ns.Tag&&g.push(N),N instanceof I.StringValue&&p.push(N);}this.state.PopFromOutputStream(S);for(let w of g)this.state.PushToOutputStream(w);p=p.reverse();let _=new Mt.StringBuilder;for(let w of p)_.Append(w.toString());this.state.inExpressionEvaluation=true,this.state.PushEvaluationStack(new I.StringValue(_.toString()));break}case R.ControlCommand.CommandType.ChoiceCount:let a=this.state.generatedChoices.length;this.state.PushEvaluationStack(new I.IntValue(a));break;case R.ControlCommand.CommandType.Turns:this.state.PushEvaluationStack(new I.IntValue(this.state.currentTurnIndex+1));break;case R.ControlCommand.CommandType.TurnsSince:case R.ControlCommand.CommandType.ReadCount:let s=this.state.PopEvaluationStack();if(!(s instanceof I.DivertTargetValue)){let p="";s instanceof I.IntValue&&(p=". Did you accidentally pass a read count ('knot_name') instead of a target ('-> knot_name')?"),this.Error("TURNS_SINCE / READ_COUNT expected a divert target (knot, stitch, label name), but saw "+s+p);break}let o=(0, L.asOrThrows)(s,I.DivertTargetValue),l=(0, L.asOrNull)(this.ContentAtPath(o.targetPath).correctObj,ve.Container),u;l!=null?t.commandType==R.ControlCommand.CommandType.TurnsSince?u=this.state.TurnsSinceForContainer(l):u=this.state.VisitCountForContainer(l):(t.commandType==R.ControlCommand.CommandType.TurnsSince?u=-1:u=0,this.Warning("Failed to find container for "+t.toString()+" lookup at "+o.targetPath.toString())),this.state.PushEvaluationStack(new I.IntValue(u));break;case R.ControlCommand.CommandType.Random:{let p=(0, L.asOrNull)(this.state.PopEvaluationStack(),I.IntValue),g=(0, L.asOrNull)(this.state.PopEvaluationStack(),I.IntValue);if(g==null||!(g instanceof I.IntValue))return this.Error("Invalid value for minimum parameter of RANDOM(min, max)");if(p==null||!(p instanceof I.IntValue))return this.Error("Invalid value for maximum parameter of RANDOM(min, max)");if(p.value===null)return (0, H.throwNullException)("maxInt.value");if(g.value===null)return (0, H.throwNullException)("minInt.value");let S=p.value-g.value+1;(!isFinite(S)||S>Number.MAX_SAFE_INTEGER)&&(S=Number.MAX_SAFE_INTEGER,this.Error("RANDOM was called with a range that exceeds the size that ink numbers can use.")),S<=0&&this.Error("RANDOM was called with minimum as "+g.value+" and maximum as "+p.value+". The maximum must be larger");let _=this.state.storySeed+this.state.previousRandom,N=new wl.PRNG(_).next(),K=N%S+g.value;this.state.PushEvaluationStack(new I.IntValue(K)),this.state.previousRandom=N;break}case R.ControlCommand.CommandType.SeedRandom:let c=(0, L.asOrNull)(this.state.PopEvaluationStack(),I.IntValue);if(c==null||!(c instanceof I.IntValue))return this.Error("Invalid value passed to SEED_RANDOM");if(c.value===null)return (0, H.throwNullException)("minInt.value");this.state.storySeed=c.value,this.state.previousRandom=0,this.state.PushEvaluationStack(new si.Void);break;case R.ControlCommand.CommandType.VisitIndex:let h=this.state.VisitCountForContainer(this.state.currentPointer.container)-1;this.state.PushEvaluationStack(new I.IntValue(h));break;case R.ControlCommand.CommandType.SequenceShuffleIndex:let m=this.NextSequenceShuffleIndex();this.state.PushEvaluationStack(new I.IntValue(m));break;case R.ControlCommand.CommandType.StartThread:break;case R.ControlCommand.CommandType.Done:this.state.callStack.canPopThread?this.state.callStack.PopThread():(this.state.didSafeExit=true,this.state.currentPointer=xt.Pointer.Null);break;case R.ControlCommand.CommandType.End:this.state.ForceEnd();break;case R.ControlCommand.CommandType.ListFromInt:let d=(0, L.asOrNull)(this.state.PopEvaluationStack(),I.IntValue),y=(0, L.asOrThrows)(this.state.PopEvaluationStack(),I.StringValue);if(d===null)throw new qt.StoryException("Passed non-integer when creating a list element from a numerical value.");let v=null;if(this.listDefinitions===null)return (0, H.throwNullException)("this.listDefinitions");let A=this.listDefinitions.TryListGetDefinition(y.value,null);if(A.exists){if(d.value===null)return (0, H.throwNullException)("minInt.value");let p=A.result.TryGetItemWithValue(d.value,ai.InkListItem.Null);p.exists&&(v=new I.ListValue(p.result,d.value));}else throw new qt.StoryException("Failed to find LIST called "+y.value);v==null&&(v=new I.ListValue),this.state.PushEvaluationStack(v);break;case R.ControlCommand.CommandType.ListRange:let D=(0, L.asOrNull)(this.state.PopEvaluationStack(),I.Value),b=(0, L.asOrNull)(this.state.PopEvaluationStack(),I.Value),f=(0, L.asOrNull)(this.state.PopEvaluationStack(),I.ListValue);if(f===null||b===null||D===null)throw new qt.StoryException("Expected list, minimum and maximum for LIST_RANGE");if(f.value===null)return (0, H.throwNullException)("targetList.value");let C=f.value.ListWithSubRange(b.valueObject,D.valueObject);this.state.PushEvaluationStack(new I.ListValue(C));break;case R.ControlCommand.CommandType.ListRandom:{let p=this.state.PopEvaluationStack();if(p===null)throw new qt.StoryException("Expected list for LIST_RANDOM");let g=p.value,S=null;if(g===null)throw (0, H.throwNullException)("list");if(g.Count==0)S=new ai.InkList;else {let _=this.state.storySeed+this.state.previousRandom,N=new wl.PRNG(_).next(),K=N%g.Count,z=g.entries();for(let Sn=0;Sn<=K-1;Sn++)z.next();let ne=z.next().value,Jt={Key:ai.InkListItem.fromSerializedKey(ne[0]),Value:ne[1]};if(Jt.Key.originName===null)return (0, H.throwNullException)("randomItem.Key.originName");S=new ai.InkList(Jt.Key.originName,this),S.Add(Jt.Key,Jt.Value),this.state.previousRandom=N;}this.state.PushEvaluationStack(new I.ListValue(S));break}default:this.Error("unhandled ControlCommand: "+t);break}return true}else if(e instanceof Bg.VariableAssignment){let t=e,n=this.state.PopEvaluationStack();return this.state.variablesState.Assign(t,n),true}else if(e instanceof Wg.VariableReference){let t=e,n=null;if(t.pathForCount!=null){let r=t.containerForCount,a=this.state.VisitCountForContainer(r);n=new I.IntValue(a);}else n=this.state.variablesState.GetVariableWithName(t.name),n==null&&(this.Warning("Variable not found: '"+t.name+"'. Using default value of 0 (false). This can happen with temporary variables if the declaration hasn't yet been hit. Globals are always given a default value on load if a value doesn't exist in the save state."),n=new I.IntValue(0));return this.state.PushEvaluationStack(n),true}else if(e instanceof qg.NativeFunctionCall){let t=e,n=this.state.PopEvaluationStack(t.numberOfParameters),r=t.Call(n);return this.state.PushEvaluationStack(r),true}return false}ChoosePathString(e,t=true,n=[]){if(this.IfAsyncWeCant("call ChoosePathString right now"),this.onChoosePathString!==null&&this.onChoosePathString(e,n),t)this.ResetCallstack();else if(this.state.callStack.currentElement.type==$e.PushPopType.Function){let r="",a=this.state.callStack.currentElement.currentPointer.container;throw a!=null&&(r="("+a.path.toString()+") "),new Error("Story was running a function "+r+"when you called ChoosePathString("+e+`) - this is almost certainly not not what you want! Full stack trace:
|
|
28
|
+
`+this.state.callStack.callStackTrace)}this.state.PassArgumentsToEvaluationStack(n),this.ChoosePath(new Al.Path(e));}IfAsyncWeCant(e){if(this._asyncContinueActive)throw new Error("Can't "+e+". Story is in the middle of a ContinueAsync(). Make more ContinueAsync() calls or a single Continue() call beforehand.")}ChoosePath(e,t=true){this.state.SetChosenPath(e,t),this.VisitChangedContainersDueToDivert();}ChooseChoiceIndex(e){e=e;let t=this.currentChoices;this.Assert(e>=0&&e<t.length,"choice out of range");let n=t[e];if(this.onMakeChoice!==null&&this.onMakeChoice(n),n.threadAtGeneration===null)return (0, H.throwNullException)("choiceToChoose.threadAtGeneration");if(n.targetPath===null)return (0, H.throwNullException)("choiceToChoose.targetPath");this.state.callStack.currentThread=n.threadAtGeneration,this.ChoosePath(n.targetPath);}HasFunction(e){try{return this.KnotContainerWithName(e)!=null}catch{return false}}EvaluateFunction(e,t=[],n=false){if(this.onEvaluateFunction!==null&&this.onEvaluateFunction(e,t),this.IfAsyncWeCant("evaluate a function"),e==null)throw new Error("Function is null");if(e==""||e.trim()=="")throw new Error("Function is empty or white space.");let r=this.KnotContainerWithName(e);if(r==null)throw new Error("Function doesn't exist: '"+e+"'");let a=[];a.push(...this.state.outputStream),this._state.ResetOutput(),this.state.StartFunctionEvaluationFromGame(r,t);let s=new Mt.StringBuilder;for(;this.canContinue;)s.Append(this.Continue());let o=s.toString();this._state.ResetOutput(a);let l=this.state.CompleteFunctionEvaluationFromGame();return this.onCompleteEvaluateFunction!=null&&this.onCompleteEvaluateFunction(e,t,o,l),n?{returned:l,output:o}:l}EvaluateExpression(e){let t=this.state.callStack.elements.length;this.state.callStack.Push($e.PushPopType.Tunnel),this._temporaryEvaluationContainer=e,this.state.GoToStart();let n=this.state.evaluationStack.length;return this.Continue(),this._temporaryEvaluationContainer=null,this.state.callStack.elements.length>t&&this.state.PopCallStack(),this.state.evaluationStack.length>n?this.state.PopEvaluationStack():null}CallExternalFunction(e,t){if(e===null)return (0, H.throwNullException)("funcName");let n=this._externals.get(e),r=null,a=typeof n<"u";if(a&&!n.lookAheadSafe&&this._state.inStringEvaluation&&this.Error("External function "+e+` could not be called because 1) it wasn't marked as lookaheadSafe when BindExternalFunction was called and 2) the story is in the middle of string generation, either because choice text is being generated, or because you have ink like "hello {func()}". You can work around this by generating the result of your function into a temporary variable before the string or choice gets generated: ~ temp x = `+e+"()"),a&&!n.lookAheadSafe&&this._stateSnapshotAtLastNewline!==null){this._sawLookaheadUnsafeFunctionAfterNewline=true;return}if(!a)if(this.allowExternalFunctionFallbacks){r=this.KnotContainerWithName(e),this.Assert(r!==null,"Trying to call EXTERNAL function '"+e+"' which has not been bound, and fallback ink function could not be found."),this.state.callStack.Push($e.PushPopType.Function,void 0,this.state.outputStream.length),this.state.divertedPointer=xt.Pointer.StartOf(r);return}else this.Assert(false,"Trying to call EXTERNAL function '"+e+"' which has not been bound (and ink fallbacks disabled).");let s=[];for(let u=0;u<t;++u){let h=(0, L.asOrThrows)(this.state.PopEvaluationStack(),I.Value).valueObject;s.push(h);}s.reverse();let o=n.function(s),l=null;o!=null?(l=I.Value.Create(o),this.Assert(l!==null,"Could not create ink value from returned object of type "+typeof o)):l=new si.Void,this.state.PushEvaluationStack(l);}BindExternalFunctionGeneral(e,t,n=true){this.IfAsyncWeCant("bind an external function"),this.Assert(!this._externals.has(e),"Function '"+e+"' has already been bound."),this._externals.set(e,{function:t,lookAheadSafe:n});}TryCoerce(e){return e}BindExternalFunction(e,t,n=false){this.Assert(t!=null,"Can't bind a null function"),this.BindExternalFunctionGeneral(e,r=>{this.Assert(r.length>=t.length,"External function expected "+t.length+" arguments");let a=[];for(let s=0,o=r.length;s<o;s++)a[s]=this.TryCoerce(r[s]);return t.apply(null,a)},n);}UnbindExternalFunction(e){this.IfAsyncWeCant("unbind an external a function"),this.Assert(this._externals.has(e),"Function '"+e+"' has not been bound."),this._externals.delete(e);}ValidateExternalBindings(){let e=null,t=null,n=arguments[1]||new Set;if(arguments[0]instanceof ve.Container&&(e=arguments[0]),arguments[0]instanceof El.InkObject&&(t=arguments[0]),e===null&&t===null)if(this.ValidateExternalBindings(this._mainContentContainer,n),this._hasValidatedExternals=true,n.size==0)this._hasValidatedExternals=true;else {let r="Error: Missing function binding for external";r+=n.size>1?"s":"",r+=": '",r+=Array.from(n).join("', '"),r+="' ",r+=this.allowExternalFunctionFallbacks?", and no fallback ink function found.":" (ink fallbacks disabled)",this.Error(r);}else if(e!=null){for(let r of e.content){let a=r;(a==null||!a.hasValidName)&&this.ValidateExternalBindings(r,n);}for(let[,r]of e.namedContent)this.ValidateExternalBindings((0, L.asOrNull)(r,El.InkObject),n);}else if(t!=null){let r=(0, L.asOrNull)(t,sh.Divert);if(r&&r.isExternal){let a=r.targetPathString;if(a===null)return (0, H.throwNullException)("name");this._externals.has(a)||this.allowExternalFunctionFallbacks&&this.mainContentContainer.namedContent.has(a)||n.add(a);}}}ObserveVariable(e,t){if(this.IfAsyncWeCant("observe a new variable"),this._variableObservers===null&&(this._variableObservers=new Map),!this.state.variablesState.GlobalVariableExistsWithName(e))throw new Error("Cannot observe variable '"+e+"' because it wasn't declared in the ink story.");this._variableObservers.has(e)?this._variableObservers.get(e).push(t):this._variableObservers.set(e,[t]);}ObserveVariables(e,t){for(let n=0,r=e.length;n<r;n++)this.ObserveVariable(e[n],t[n]);}RemoveVariableObserver(e,t){if(this.IfAsyncWeCant("remove a variable observer"),this._variableObservers!==null){if(t!=null){if(this._variableObservers.has(t))if(e!=null){let n=this._variableObservers.get(t);n!=null&&(n.splice(n.indexOf(e),1),n.length===0&&this._variableObservers.delete(t));}else this._variableObservers.delete(t);}else if(e!=null){let n=this._variableObservers.keys();for(let r of n){let a=this._variableObservers.get(r);a!=null&&(a.splice(a.indexOf(e),1),a.length===0&&this._variableObservers.delete(r));}}}}VariableStateDidChangeEvent(e,t){if(this._variableObservers===null)return;let n=this._variableObservers.get(e);if(typeof n<"u"){if(!(t instanceof I.Value))throw new Error("Tried to get the value of a variable that isn't a standard type");let r=(0, L.asOrThrows)(t,I.Value);for(let a of n)a(e,r.valueObject);}}get globalTags(){return this.TagsAtStartOfFlowContainerWithPathString("")}TagsForContentAtPath(e){return this.TagsAtStartOfFlowContainerWithPathString(e)}TagsAtStartOfFlowContainerWithPathString(e){let t=new Al.Path(e),n=this.ContentAtPath(t).container;if(n===null)return (0, H.throwNullException)("flowContainer");for(;;){let s=n.content[0];if(s instanceof ve.Container)n=s;else break}let r=false,a=null;for(let s of n.content){let o=(0, L.asOrNull)(s,R.ControlCommand);if(o!=null)o.commandType==R.ControlCommand.CommandType.BeginTag?r=true:o.commandType==R.ControlCommand.CommandType.EndTag&&(r=false);else if(r){let l=(0, L.asOrNull)(s,I.StringValue);l!==null?(a===null&&(a=[]),l.value!==null&&a.push(l.value)):this.Error("Tag contained non-text content. Only plain text is allowed when using globalTags or TagsAtContentPath. If you want to evaluate dynamic content, you need to use story.Continue().");}else break}return a}BuildStringOfHierarchy(){let e=new Mt.StringBuilder;return this.mainContentContainer.BuildStringOfHierarchy(e,0,this.state.currentPointer.Resolve()),e.toString()}BuildStringOfContainer(e){let t=new Mt.StringBuilder;return e.BuildStringOfHierarchy(t,0,this.state.currentPointer.Resolve()),t.toString()}NextContent(){if(this.state.previousPointer=this.state.currentPointer.copy(),!this.state.divertedPointer.isNull&&(this.state.currentPointer=this.state.divertedPointer.copy(),this.state.divertedPointer=xt.Pointer.Null,this.VisitChangedContainersDueToDivert(),!this.state.currentPointer.isNull))return;if(!this.IncrementContentPointer()){let t=false;this.state.callStack.CanPop($e.PushPopType.Function)?(this.state.PopCallStack($e.PushPopType.Function),this.state.inExpressionEvaluation&&this.state.PushEvaluationStack(new si.Void),t=true):this.state.callStack.canPopThread?(this.state.callStack.PopThread(),t=true):this.state.TryExitFunctionEvaluationFromGame(),t&&!this.state.currentPointer.isNull&&this.NextContent();}}IncrementContentPointer(){let e=true,t=this.state.callStack.currentElement.currentPointer.copy();if(t.index++,t.container===null)return (0, H.throwNullException)("pointer.container");for(;t.index>=t.container.content.length;){e=false;let n=(0, L.asOrNull)(t.container.parent,ve.Container);if(!(n instanceof ve.Container))break;let r=n.content.indexOf(t.container);if(r==-1)break;if(t=new xt.Pointer(n,r),t.index++,e=true,t.container===null)return (0, H.throwNullException)("pointer.container")}return e||(t=xt.Pointer.Null),this.state.callStack.currentElement.currentPointer=t.copy(),e}TryFollowDefaultInvisibleChoice(){let e=this._state.currentChoices,t=e.filter(r=>r.isInvisibleDefault);if(t.length==0||e.length>t.length)return false;let n=t[0];return n.targetPath===null?(0, H.throwNullException)("choice.targetPath"):n.threadAtGeneration===null?(0, H.throwNullException)("choice.threadAtGeneration"):(this.state.callStack.currentThread=n.threadAtGeneration,this._stateSnapshotAtLastNewline!==null&&(this.state.callStack.currentThread=this.state.callStack.ForkThread()),this.ChoosePath(n.targetPath,false),true)}NextSequenceShuffleIndex(){let e=(0, L.asOrNull)(this.state.PopEvaluationStack(),I.IntValue);if(!(e instanceof I.IntValue))return this.Error("expected number of elements in sequence for shuffle index"),0;let t=this.state.currentPointer.container;if(t===null)return (0, H.throwNullException)("seqContainer");if(e.value===null)return (0, H.throwNullException)("numElementsIntVal.value");let n=e.value,a=(0, L.asOrThrows)(this.state.PopEvaluationStack(),I.IntValue).value;if(a===null)return (0, H.throwNullException)("seqCount");let s=a/n,o=a%n,l=t.path.toString(),u=0;for(let d=0,y=l.length;d<y;d++)u+=l.charCodeAt(d)||0;let c=u+s+this.state.storySeed,h=new wl.PRNG(Math.floor(c)),m=[];for(let d=0;d<n;++d)m.push(d);for(let d=0;d<=o;++d){let y=h.next()%m.length,v=m[y];if(m.splice(y,1),d==o)return v}throw new Error("Should never reach here")}Error(e,t=false){let n=new qt.StoryException(e);throw n.useEndLineNumber=t,n}Warning(e){this.AddError(e,true);}AddError(e,t=false,n=false){let r=this.currentDebugMetadata,a=t?"WARNING":"ERROR";if(r!=null){let s=n?r.endLineNumber:r.startLineNumber;e="RUNTIME "+a+": '"+r.fileName+"' line "+s+": "+e;}else this.state.currentPointer.isNull?e="RUNTIME "+a+": "+e:e="RUNTIME "+a+": ("+this.state.currentPointer+"): "+e;this.state.AddError(e,t),t||this.state.ForceEnd();}Assert(e,t=null){if(e==false)throw t==null&&(t="Story assert"),new Error(t+" "+this.currentDebugMetadata)}get currentDebugMetadata(){let e,t=this.state.currentPointer;if(!t.isNull&&t.Resolve()!==null&&(e=t.Resolve().debugMetadata,e!==null))return e;for(let n=this.state.callStack.elements.length-1;n>=0;--n)if(t=this.state.callStack.elements[n].currentPointer,!t.isNull&&t.Resolve()!==null&&(e=t.Resolve().debugMetadata,e!==null))return e;for(let n=this.state.outputStream.length-1;n>=0;--n)if(e=this.state.outputStream[n].debugMetadata,e!==null)return e;return null}get mainContentContainer(){return this._temporaryEvaluationContainer?this._temporaryEvaluationContainer:this._mainContentContainer}};Gt.Story=gn;gn.inkVersionCurrent=21;(function(i){(function(t){t[t.NoChange=0]="NoChange",t[t.ExtendedBeyondNewline=1]="ExtendedBeyondNewline",t[t.NewlineRemoved=2]="NewlineRemoved";})(i.OutputStateChange||(i.OutputStateChange={}));})(gn||(Gt.Story=gn={}));});var uh=O(Ls=>{Object.defineProperty(Ls,"__esModule",{value:true});Ls.Story=void 0;var Jg=Ti(),Hg=mr(),Is=oe(),Vs=Ce(),oi=Kt(),ks=it(),lh=on(),zg=zo(),Ug=Jr(),Kg=Qo(),Xg=ei(),Cn=pt(),Yg=Et(),Zg=bt(),li=U(),Qg=Jn(),eC=Hn(),tC=jt(),Rs=class i extends ks.FlowBase{get flowLevel(){return lh.FlowLevel.Story}get hadError(){return this._hadError}get hadWarning(){return this._hadWarning}constructor(e,t=false){super(null,e,null,false,t),this._errorHandler=null,this._hadError=false,this._hadWarning=false,this._dontFlattenContainers=new Set,this._listDefs=new Map,this.constants=new Map,this.externals=new Map,this.countAllVisits=false,this.ExportRuntime=(n=null)=>{var r,a;this._errorHandler=n,this.constants=new Map;for(let c of this.FindAll(Hg.ConstantDeclaration)()){let h=this.constants.get(c.constantName);if(h&&!h.Equals(c.expression)){let m=`CONST '${c.constantName}' has been redefined with a different value. Multiple definitions of the same CONST are valid so long as they contain the same value. Initial definition was on ${h.debugMetadata}.`;this.Error(m,c,false);}this.constants.set(c.constantName,c.expression);}this._listDefs=new Map;for(let c of this.FindAll(Ug.ListDefinition)())!((r=c.identifier)===null||r===void 0)&&r.name&&this._listDefs.set((a=c.identifier)===null||a===void 0?void 0:a.name,c);this.externals=new Map,this.ResolveWeavePointNaming();let s=this.runtimeObject,o=new Is.Container;o.AddContent(Vs.ControlCommand.EvalStart());let l=[];for(let[c,h]of this.variableDeclarations)if(h.isGlobalDeclaration){if(h.listDefinition)this._listDefs.set(c,h.listDefinition),o.AddContent(h.listDefinition.runtimeObject),l.push(h.listDefinition.runtimeListDefinition);else {if(!h.expression)throw new Error;h.expression.GenerateIntoContainer(o);}let m=new Zg.VariableAssignment(c,true);m.isGlobal=true,o.AddContent(m);}o.AddContent(Vs.ControlCommand.EvalEnd()),o.AddContent(Vs.ControlCommand.End()),this.variableDeclarations.size>0&&(o.name="global decl",s.AddToNamedContentOnly(o)),s.AddContent(Vs.ControlCommand.Done());let u=new Xg.Story(s,l);return this.runtimeObject=u,this.hadError||(this.FlattenContainersIn(s),this.ResolveReferences(this),this.hadError)?null:(u.ResetState(),u)},this.ResolveList=n=>{let r=this._listDefs.get(n);return r||null},this.ResolveListItem=(n,r,a=null)=>{let s=null;if(n)return (s=this._listDefs.get(n))?s.ItemNamed(r):null;{let o=null,l=null;for(let[,u]of this._listDefs.entries()){let c=u.ItemNamed(r);c&&(o?this.Error(`Ambiguous item name '${r}' found in multiple sets, including ${l.identifier} and ${u.identifier}`,a,false):(o=c,l=u));}return o}},this.FlattenContainersIn=n=>{let r=new Set;if(n.content)for(let a of n.content){let s=(0, li.asOrNull)(a,Is.Container);s&&r.add(s);}if(n.namedContent)for(let[,a]of n.namedContent){let s=(0, li.asOrNull)(a,Is.Container);s&&r.add(s);}for(let a of r)this.TryFlattenContainer(a),this.FlattenContainersIn(a);},this.TryFlattenContainer=n=>{if(n.namedContent&&n.namedContent.size>0||n.hasValidName||this._dontFlattenContainers.has(n))return;let r=(0, li.asOrNull)(n.parent,Is.Container);if(r){let a=r.content.indexOf(n);r.content.splice(a,1);let s=n.ownDebugMetadata;if(n.content)for(let o of n.content)o.parent=null,s!==null&&o.ownDebugMetadata===null&&(o.debugMetadata=s),r.InsertContent(o,a),a+=1;}},this.Error=(n,r,a)=>{let s=a?oi.ErrorType.Warning:oi.ErrorType.Error,o="";if(r instanceof Jg.AuthorWarning?(o+="TODO: ",s=oi.ErrorType.Author):a?o+="WARNING: ":o+="ERROR: ",r&&r.debugMetadata!==null&&r.debugMetadata.startLineNumber>=1&&(r.debugMetadata.fileName!=null&&(o+=`'${r.debugMetadata.fileName}' `),o+=`line ${r.debugMetadata.startLineNumber}: `),o+=n,n=o,this._errorHandler!==null)this._errorHandler(n,s);else throw new Error(n);this._hadError=s===oi.ErrorType.Error,this._hadWarning=s===oi.ErrorType.Warning;},this.ResetError=()=>{this._hadError=false,this._hadWarning=false;},this.IsExternal=n=>this.externals.has(n),this.AddExternal=n=>{this.externals.has(n.name)?this.Error(`Duplicate EXTERNAL definition of '${n.name}'`,n,false):n.name&&this.externals.set(n.name,n);},this.DontFlattenContainer=n=>{this._dontFlattenContainers.add(n);},this.NameConflictError=(n,r,a,s)=>{n.Error(`${s} '${r}': name has already been used for a ${a.typeName.toLowerCase()} on ${a.debugMetadata}`);},this.CheckForNamingCollisions=(n,r,a,s="")=>{var o;let l=s||n.typeName;if(i.IsReservedKeyword(r?.name)){n.Error(`'${r}' cannot be used for the name of a ${l.toLowerCase()} because it's a reserved keyword`);return}else if(eC.FunctionCall.IsBuiltIn(r?.name||"")){n.Error(`'${r}' cannot be used for the name of a ${l.toLowerCase()} because it's a built in function`);return}let u=this.ContentWithNameAtLevel(r?.name||"",lh.FlowLevel.Knot),c=(0, li.asOrNull)(u,ks.FlowBase);if(c&&(c!==n||a===Cn.SymbolType.Arg)){this.NameConflictError(n,r?.name||"",c,l);return}if(a<Cn.SymbolType.List)return;for(let[y,v]of this._listDefs)if(r?.name===y&&n!==v&&v.variableAssignment!==n&&this.NameConflictError(n,r?.name,v,l),!(n instanceof Kg.ListElementDefinition))for(let A of v.itemDefinitions)r?.name===A.name&&this.NameConflictError(n,r?.name||"",A,l);if(a<=Cn.SymbolType.Var)return;let h=r?.name&&this.variableDeclarations.get(r?.name)||null;if(h&&h!==n&&h.isGlobalDeclaration&&h.listDefinition==null&&this.NameConflictError(n,r?.name||"",h,l),a<Cn.SymbolType.SubFlowAndWeave)return;let d=new tC.Path(r).ResolveFromContext(n);if(d&&d!==n){this.NameConflictError(n,r?.name||"",d,l);return}if(!(a<Cn.SymbolType.Arg)&&a!==Cn.SymbolType.Arg){let y=(0, li.asOrNull)(n,ks.FlowBase);if(y||(y=(0, Qg.ClosestFlowBase)(n)),y&&y.hasParameters&&y.args){for(let v of y.args)if(((o=v.identifier)===null||o===void 0?void 0:o.name)===r?.name){n.Error(`${l} '${r}': name has already been used for a argument to ${y.identifier} on ${y.debugMetadata}`);return}}}};}get typeName(){return "Story"}PreProcessTopLevelObjects(e){super.PreProcessTopLevelObjects(e);let t=[];for(let n of e)if(n instanceof zg.IncludedFile){let r=n,a=e.indexOf(n);if(e.splice(a,1),r.includedStory){let s=[],o=r.includedStory;if(o.content!=null){for(let l of o.content)l instanceof ks.FlowBase?t.push(l):s.push(l);s.push(new Yg.Text(`
|
|
29
|
+
`)),e.splice(a,0,...s);}}continue}e.splice(0,0,...t);}};Ls.Story=Rs;Rs.IsReservedKeyword=i=>{switch(i){case "true":case "false":case "not":case "return":case "else":case "VAR":case "CONST":case "temp":case "LIST":case "function":return true}return false};});var hh=O(js=>{Object.defineProperty(js,"__esModule",{value:true});js.StringExpression=void 0;var ch=Ce(),nC=Be(),iC=Et(),rC=U(),xl=class i extends nC.Expression{get isSingleString(){return !(this.content.length!==1||!(this.content[0]instanceof iC.Text))}constructor(e){super(),this.GenerateIntoContainer=t=>{t.AddContent(ch.ControlCommand.BeginString());for(let n of this.content)t.AddContent(n.runtimeObject);t.AddContent(ch.ControlCommand.EndString());},this.toString=()=>{let t="";for(let n of this.content)t+=n;return t},this.AddContent(e);}get typeName(){return "String"}Equals(e){let t=(0, rC.asOrNull)(e,i);if(t===null||!this.isSingleString||!t.isSingleString)return false;let n=this.toString(),r=t.toString();return n===r}};js.StringExpression=xl;});var dh=O(yn=>{Object.defineProperty(yn,"__esModule",{value:true});yn.LegacyTag=yn.Tag=void 0;var sC=te(),ph=Ce(),_l=class extends sC.ParsedObject{constructor(e,t=false){super(),this.GenerateRuntimeObject=()=>this.isStart?ph.ControlCommand.BeginTag():ph.ControlCommand.EndTag(),this.toString=()=>this.isStart?"#StartTag":"#EndTag",this.isStart=e,this.inChoice=t;}get typeName(){return "Tag"}};yn.Tag=_l;var aC=Mo(),Ol=class extends aC.Wrap{constructor(e){super(e);}get typeName(){return "Tag"}};yn.LegacyTag=Ol;});var fh=O(Bs=>{Object.defineProperty(Bs,"__esModule",{value:true});Bs.DefaultFileHandler=void 0;var Pl=class{constructor(e){this.rootPath=e,this.ResolveInkFilename=()=>{throw Error("Can't resolve filename because no FileHandler was provided when instantiating the parser / compiler.")},this.LoadInkFileContents=()=>{throw Error("Can't load ink content because no FileHandler was provided when instantiating the parser / compiler.")};}};Bs.DefaultFileHandler=Pl;});var Il=O(Gs=>{Object.defineProperty(Gs,"__esModule",{value:true});Gs.InkParser=void 0;var oC=Lu(),lC=Ti(),uC=Ra(),Ue=Xu(),fe=Wn(),cC=an(),hC=sc(),pC=pr(),ui=Co(),ke=xr(),dC=mr(),Ws=_c(),fC=Oc(),$t=cn(),Tl=un(),mC=Be(),gC=Pc(),mh=Tc(),qs=Hn(),CC=$n(),yC=Fc(),vC=ss(),Ms=Ic(),gh=zo(),bC=Vc(),SC=Xo(),Ch=Rc(),EC=Jr(),DC=Qo(),AC=po(),yh=te(),wC=jt(),vh=io(),bh=xo(),de=Do(),we=el(),xC=nl(),Sh=uh(),ci=hh(),dt=za(),vn=dh(),ft=Et(),Eh=Oo(),Fl=Vo(),Nl=pn(),_C=Va(),_t=U(),hi=Dr(),bn=Hi(),Dh=Kt(),OC=fh(),Y=class i extends dt.StringParser{get fileHandler(){if(!this._fileHandler)throw new Error("No FileHandler defined");return this._fileHandler}set fileHandler(e){this._fileHandler=e;}constructor(e,t=null,n=null,r=null,a=null){if(super(e),this.ParseStory=()=>{let s=this.StatementsAtLevel(we.StatementLevel.Top);return new Sh.Story(s,this._rootParser!==this)},this.SeparatedList=(s,o)=>{let l=this.Parse(s);if(l===null)return null;let u=[];u.push(l);do{let c=this.BeginRule();if(o()===null){this.FailRule(c);break}let m=this.Parse(s);if(m===null){this.FailRule(c);break}this.SucceedRule(c),u.push(m);}while(true);return u},this.CreateDebugMetadata=(s,o)=>{let l=new fC.DebugMetadata;return l.startLineNumber=(s?.lineIndex||0)+1,l.endLineNumber=o.lineIndex+1,l.startCharacterNumber=(s?.characterInLineIndex||0)+1,l.endCharacterNumber=o.characterInLineIndex+1,l.fileName=this._filename,l},this.RuleDidSucceed=(s,o,l)=>{let u=(0, _t.asOrNull)(s,yh.ParsedObject);u&&(u.debugMetadata=this.CreateDebugMetadata(o,l));let c=Array.isArray(s)?s:null;if(c!==null)for(let m of c)(0, _t.asOrNull)(m,yh.ParsedObject)&&(m.hasOwnDebugMetadata||(m.debugMetadata=this.CreateDebugMetadata(o,l)));let h=(0, _t.asOrNull)(s,hi.Identifier);h!=null&&(h.debugMetadata=this.CreateDebugMetadata(o,l));},this.OnStringParserError=(s,o,l=0,u=false)=>{let h=u?"WARNING:":"ERROR:";if(this._filename!==null&&(h+=` '${this._filename}'`),h+=` line ${l+1}: ${s}`,this._externalErrorHandler!==null)this._externalErrorHandler(h,u?Dh.ErrorType.Warning:Dh.ErrorType.Error);else throw new Error(h)},this.AuthorWarning=()=>{this.Whitespace();let s=this.Parse(this.IdentifierWithMetadata);if(s===null||s.name!=="TODO")return null;this.Whitespace(),this.ParseString(":"),this.Whitespace();let o=this.ParseUntilCharactersFromString(`
|
|
30
|
+
\r`);return o?new lC.AuthorWarning(o):null},this.ExtendIdentifierCharacterRanges=s=>{let o=i.ListAllCharacterRanges();for(let l of o)s.AddCharacters(l.ToCharacterSet());},this._parsingChoice=false,this.Choice=()=>{let s=true,o=this.Interleave(this.OptionalExclude(this.Whitespace),this.String("*"));if(!o){if(o=this.Interleave(this.OptionalExclude(this.Whitespace),this.String("+")),o===null)return null;s=false;}let l=this.Parse(this.BracketedName);this.Whitespace(),l!=null&&this.Newline();let u=this.Parse(this.ChoiceCondition);if(this.Whitespace(),this._parsingChoice)throw new Error("Already parsing a choice - shouldn't have nested choices");this._parsingChoice=true;let c=null,h=this.Parse(this.MixedTextAndLogic);h&&(c=new ke.ContentList(h));let m=null,d=null,y=this.ParseString("[")!==null;if(y){this.EndTagIfNecessary(c);let b=this.Parse(this.MixedTextAndLogic);b!==null&&(m=new ke.ContentList(b)),this.Expect(this.String("]"),"closing ']' for weave-style option"),this.EndTagIfNecessary(m);let f=this.Parse(this.MixedTextAndLogic);f!==null&&(d=new ke.ContentList(f));}this.Whitespace(),this.EndTagIfNecessary(d??c);let v=this.Parse(this.MultiDivert);this._parsingChoice=false,this.Whitespace();let A=!c&&!d&&!m;if(A&&v===null&&this.Warning("Choice is completely empty. Interpretting as a default fallback choice. Add a divert arrow to remove this warning: * ->"),!c&&y&&!m&&this.Warning("Blank choice - if you intended a default fallback choice, use the `* ->` syntax"),d||(d=new ke.ContentList),this.EndTagIfNecessary(d),v!==null)for(let b of v){let f=(0, _t.asOrNull)(b,$t.Divert);f&&f.isEmpty||d.AddContent(b);}d.AddContent(new ft.Text(`
|
|
31
|
+
`));let D=new cC.Choice(c,m,d);return l&&(D.identifier=l),D.indentationDepth=o.length,D.hasWeaveStyleInlineBrackets=y,D.condition=u,D.onceOnly=s,D.isInvisibleDefault=A,D},this.ChoiceCondition=()=>{let s=this.Interleave(this.ChoiceSingleCondition,this.ChoiceConditionsSpace);return s===null?null:s.length===1?s[0]:new AC.MultipleConditionExpression(s)},this.ChoiceConditionsSpace=()=>(this.Newline(),this.Whitespace(),dt.ParseSuccess),this.ChoiceSingleCondition=()=>{if(this.ParseString("{")===null)return null;let s=this.Expect(this.Expression,"choice condition inside { }");return this.DisallowIncrement(s),this.Expect(this.String("}"),"closing '}' for choice condition"),s},this.Gather=()=>{let s=this.Parse(this.GatherDashes);if(s===null)return null;let o=Number(s),l=this.Parse(this.BracketedName),u=new CC.Gather(l,o);return this.Newline(),u},this.GatherDashes=()=>{this.Whitespace();let s=0;for(;this.ParseDashNotArrow()!==null;)s+=1,this.Whitespace();return s===0?null:s},this.ParseDashNotArrow=()=>{let s=this.BeginRule();return this.ParseString("->")===null&&this.ParseSingleCharacter()==="-"?this.SucceedRule(s):this.FailRule(s)},this.BracketedName=()=>{if(this.ParseString("(")===null)return null;this.Whitespace();let s=this.Parse(this.IdentifierWithMetadata);return s===null?null:(this.Whitespace(),this.Expect(this.String(")"),"closing ')' for bracketed name"),s)},this.InnerConditionalContent=s=>{if(s===void 0){let h=this.Parse(this.ConditionExpression),m=this.Parse(()=>this.InnerConditionalContent(h));return m===null?null:m}let o,l=s!==null,u=this.Parse(this.Newline)===null;if(u&&!l)return null;if(u)o=this.InlineConditionalBranches();else {if(o=this.MultilineConditionalBranches(),o===null){if(s){let h=this.StatementsAtLevel(we.StatementLevel.InnerBlock);if(h!==null){o=[new ui.ConditionalSingleBranch(h)];let d=this.Parse(this.SingleMultilineCondition);d&&(d.isElse||(this.ErrorWithParsedObject("Expected an '- else:' clause here rather than an extra condition",d),d.isElse=true),o.push(d));}}if(o===null)return null}else if(o.length===1&&o[0].isElse&&s){let h=new ui.ConditionalSingleBranch(null);h.isTrueBranch=true,o.unshift(h);}if(s){let h=false;for(let m=0;m<o.length;++m){let d=o[m],y=m===o.length-1;d.ownExpression?(d.matchingEquality=true,h=true):h&&y?(d.matchingEquality=true,d.isElse=true):!y&&o.length>2?this.ErrorWithParsedObject("Only final branch can be an 'else'. Did you miss a ':'?",d):m===0?d.isTrueBranch=true:d.isElse=true;}}else {for(let h=0;h<o.length;++h){let m=o[h],d=h===o.length-1;if(m.ownExpression===null)if(d)m.isElse=true;else if(m.isElse){let y=o[o.length-1];y.isElse?this.ErrorWithParsedObject("Multiple 'else' cases. Can have a maximum of one, at the end.",y):this.ErrorWithParsedObject("'else' case in conditional should always be the final one",m);}else this.ErrorWithParsedObject("Branch doesn't have condition. Are you missing a ':'? ",m);}o.length===1&&o[0].ownExpression===null&&this.ErrorWithParsedObject("Condition block with no conditions",o[0]);}}if(o===null)return null;for(let h of o)h.isInline=u;return new pC.Conditional(s,o)},this.InlineConditionalBranches=()=>{let s=this.Interleave(this.MixedTextAndLogic,this.Exclude(this.String("|")),null,false);if(s===null||s.length===0)return null;let o=[];if(s.length>2)this.Error("Expected one or two alternatives separated by '|' in inline conditional");else {let l=new ui.ConditionalSingleBranch(s[0]);if(l.isTrueBranch=true,o.push(l),s.length>1){let u=new ui.ConditionalSingleBranch(s[1]);u.isElse=true,o.push(u);}}return o},this.MultilineConditionalBranches=()=>{this.MultilineWhitespace();let s=this.OneOrMore(this.SingleMultilineCondition);return s===null?null:(this.MultilineWhitespace(),s)},this.SingleMultilineCondition=()=>{if(this.Whitespace(),this.ParseString("->")!==null||this.ParseString("-")===null)return null;this.Whitespace();let s=null,o=this.Parse(this.ElseExpression)!==null;o||(s=this.Parse(this.ConditionExpression));let l=this.StatementsAtLevel(we.StatementLevel.InnerBlock);s===null&&l===null&&(this.Error("expected content for the conditional branch following '-'"),l=[new ft.Text("")]),this.MultilineWhitespace();let u=new ui.ConditionalSingleBranch(l);return u.ownExpression=s,u.isElse=o,u},this.ConditionExpression=()=>{let s=this.Parse(this.Expression);return s===null||(this.DisallowIncrement(s),this.Whitespace(),this.ParseString(":")===null)?null:s},this.ElseExpression=()=>this.ParseString("else")===null||(this.Whitespace(),this.ParseString(":")===null)?null:dt.ParseSuccess,this._nonTextPauseCharacters=null,this._nonTextEndCharacters=null,this._notTextEndCharactersChoice=null,this._notTextEndCharactersString=null,this.TrimEndWhitespace=(s,o)=>{if(s.length>0){let l=s.length-1,u=s[l];if(u instanceof ft.Text){let c=u;c.text=c.text.replace(new RegExp(/[ \t]+$/g),""),o?c.text+=" ":c.text.length===0&&(s.splice(l,1),this.TrimEndWhitespace(s,false));}}},this.LineOfMixedTextAndLogic=()=>{this.Parse(this.Whitespace);let s=this.Parse(this.MixedTextAndLogic);if(!s||!s.length)return null;let o=s[0];return o&&o.text&&o.text.startsWith("return")&&this.Warning("Do you need a '~' before 'return'? If not, perhaps use a glue: <> (since it's lowercase) or rewrite somehow?"),s.length===0?null:(s[s.length-1]instanceof $t.Divert||this.TrimEndWhitespace(s,false),this.EndTagIfNecessary(s),s.length>0&&s[0]instanceof vn.Tag&&s[0].isStart||s.push(new ft.Text(`
|
|
32
|
+
`)),this.Expect(this.EndOfLine,"end of line",this.SkipToNextLine),s)},this.MixedTextAndLogic=()=>{this.ParseObject(this.Spaced(this.String("~")))!==null&&this.Error("You shouldn't use a '~' here - tildas are for logic that's on its own line. To do inline logic, use { curly braces } instead");let o=this.Interleave(this.Optional(this.ContentText),this.Optional(this.InlineLogicOrGlueOrStartTag));if(!this._parsingChoice){let l=this.Parse(this.MultiDivert);l!==null&&(o===null&&(o=[]),this.EndTagIfNecessary(o),this.TrimEndWhitespace(o,true),o.push(...l));}return o||null},this.ContentText=()=>this.ContentTextAllowingEscapeChar(),this.ContentTextAllowingEscapeChar=()=>{let s=null;do{let o=this.Parse(this.ContentTextNoEscape),l=this.ParseString("\\")!==null;if(l||o!==null){if(s===null&&(s=""),o!==null&&(s+=String(o)),l){let u=this.ParseSingleCharacter();s+=u;}}else break}while(true);return s!==null?new ft.Text(s):null},this.ContentTextNoEscape=()=>{this._nonTextPauseCharacters===null&&(this._nonTextPauseCharacters=new fe.CharacterSet("-<")),this._nonTextEndCharacters===null&&(this._nonTextEndCharacters=new fe.CharacterSet(`{}|
|
|
33
|
+
\r\\#`),this._notTextEndCharactersChoice=new fe.CharacterSet(this._nonTextEndCharacters),this._notTextEndCharactersChoice.AddCharacters("[]"),this._notTextEndCharactersString=new fe.CharacterSet(this._nonTextEndCharacters),this._notTextEndCharactersString.AddCharacters('"'));let s=()=>this.OneOf([this.ParseDivertArrow,this.ParseThreadArrow,this.EndOfLine,this.Glue]),o=null;this.parsingStringExpression?o=this._notTextEndCharactersString:this._parsingChoice?o=this._notTextEndCharactersChoice:o=this._nonTextEndCharacters;let l=this.ParseUntil(s,this._nonTextPauseCharacters,o);return l!==null?l:null},this.MultiDivert=()=>{this.Whitespace();let s=[],o=this.Parse(this.StartThread);if(o)return s=[o],s;let l=this.Interleave(this.ParseDivertArrowOrTunnelOnwards,this.DivertIdentifierWithArguments);if(!l)return null;s=[],this.EndTagIfNecessary(s);for(let u=0;u<l.length;++u)if(u%2===0){if(l[u]==="->->"){u===0||u===l.length-1||u===l.length-2||this.Error("Tunnel onwards '->->' must only come at the begining or the start of a divert");let m=new Eh.TunnelOnwards;if(u<l.length-1){let d=(0, _t.asOrNull)(l[u+1],$t.Divert);m.divertAfter=d;}s.push(m);break}}else {let h=l[u];u<l.length-1&&(h.isTunnel=true),s.push(h);}if(s.length===0&&l.length===1){let u=new $t.Divert(null);u.isEmpty=true,s.push(u),this._parsingChoice||this.Error("Empty diverts (->) are only valid on choices");}return s},this.StartThread=()=>{if(this.Whitespace(),this.ParseThreadArrow()===null)return null;this.Whitespace();let s=this.Expect(this.DivertIdentifierWithArguments,"target for new thread",()=>new $t.Divert(null));return s.isThread=true,s},this.DivertIdentifierWithArguments=()=>{this.Whitespace();let s=this.Parse(this.DotSeparatedDivertPathComponents);if(!s)return null;this.Whitespace();let o=this.Parse(this.ExpressionFunctionCallArguments);this.Whitespace();let l=new wC.Path(s);return new $t.Divert(l,o)},this.SingleDivert=()=>{let s=this.Parse(this.MultiDivert);if(!s||s.length!==1||s[0]instanceof Eh.TunnelOnwards)return null;let l=s[0];return l.isTunnel?null:l},this.DotSeparatedDivertPathComponents=()=>this.Interleave(this.Spaced(this.IdentifierWithMetadata),this.Exclude(this.String("."))),this.ParseDivertArrowOrTunnelOnwards=()=>{let s=0;for(;this.ParseString("->")!==null;)s+=1;return s===0?null:s===1?"->":(s===2||this.Error("Unexpected number of arrows in divert. Should only have '->' or '->->'"),"->->")},this.ParseDivertArrow=()=>this.ParseString("->"),this.ParseThreadArrow=()=>this.ParseString("<-"),this._binaryOperators=[],this._maxBinaryOpLength=0,this.TempDeclarationOrAssignment=()=>{this.Whitespace();let s=this.ParseTempKeyword();this.Whitespace();let o=null;if(s?o=this.Expect(this.IdentifierWithMetadata,"variable name"):o=this.Parse(this.IdentifierWithMetadata),o===null)return null;this.Whitespace();let l=this.ParseString("+")!==null,u=this.ParseString("-")!==null;if(l&&u&&this.Error("Unexpected sequence '+-'"),this.ParseString("=")===null)return s&&this.Error("Expected '='"),null;let c=this.Expect(this.Expression,"value expression to be assigned");return l||u?new Ms.IncDecExpression(o,c,l):new Fl.VariableAssignment({variableIdentifier:o,assignedExpression:c,isTemporaryNewDeclaration:s})},this.DisallowIncrement=s=>{s instanceof Ms.IncDecExpression&&this.Error("Can't use increment/decrement here. It can only be used on a ~ line");},this.ParseTempKeyword=()=>{let s=this.BeginRule();return this.Parse(this.Identifier)==="temp"?(this.SucceedRule(s),true):(this.FailRule(s),false)},this.ReturnStatement=()=>{if(this.Whitespace(),this.Parse(this.Identifier)!=="return")return null;this.Whitespace();let o=this.Parse(this.Expression);return new vh.ReturnType(o)},this.Expression=(s=0)=>{this.Whitespace();let o=this.ExpressionUnary();if(o===null)return null;for(this.Whitespace();;){let l=this.BeginRule(),u=this.ParseInfixOperator();if(u!==null&&u.precedence>s){let c=`right side of '${u.type}' expression`,h=this.Expect(()=>this.ExpressionInfixRight(o,u),c);if(h===null)return this.FailRule(l),null;o=this.SucceedRule(l,h);continue}this.FailRule(l);break}return this.Whitespace(),o},this.ExpressionUnary=()=>{let s=this.Parse(this.ExpressionDivertTarget);if(s!==null)return s;let o=this.OneOf([this.String("-"),this.String("!")]);o===null&&(o=this.Parse(this.ExpressionNot)),this.Whitespace();let l=this.OneOf([this.ExpressionList,this.ExpressionParen,this.ExpressionFunctionCall,this.ExpressionVariableName,this.ExpressionLiteral]);if(l===null&&o!==null&&(l=this.ExpressionUnary()),l===null)return null;o!==null&&(l=_C.UnaryExpression.WithInner(l,o)),this.Whitespace();let u=this.OneOf([this.String("++"),this.String("--")]);if(u!==null){let c=u==="++";if(!(l instanceof Nl.VariableReference))this.Error(`can only increment and decrement variables, but saw '${l}'.`);else {let h=l;l=new Ms.IncDecExpression(h.identifier,c);}}return l},this.ExpressionNot=()=>{let s=this.Identifier();return s==="not"?s:null},this.ExpressionLiteral=()=>this.OneOf([this.ExpressionFloat,this.ExpressionInt,this.ExpressionBool,this.ExpressionString]),this.ExpressionDivertTarget=()=>{this.Whitespace();let s=this.Parse(this.SingleDivert);return !s||s&&s.isThread?null:(this.Whitespace(),new Tl.DivertTarget(s))},this.ExpressionInt=()=>{let s=this.ParseInt();return s===null?null:new bn.NumberExpression(s,"int")},this.ExpressionFloat=()=>{let s=this.ParseFloat();return s===null?null:new bn.NumberExpression(s,"float")},this.ExpressionString=()=>{if(this.ParseString('"')===null)return null;this.parsingStringExpression=true;let o=this.Parse(this.MixedTextAndLogic);return this.Expect(this.String('"'),"close quote for string expression"),this.parsingStringExpression=false,o===null?o=[new ft.Text("")]:o.find(l=>l instanceof $t.Divert)&&this.Error("String expressions cannot contain diverts (->)"),new ci.StringExpression(o)},this.ExpressionBool=()=>{let s=this.Parse(this.Identifier);return s==="true"?new bn.NumberExpression(true,"bool"):s==="false"?new bn.NumberExpression(false,"bool"):null},this.ExpressionFunctionCall=()=>{let s=this.Parse(this.IdentifierWithMetadata);if(s===null)return null;this.Whitespace();let o=this.Parse(this.ExpressionFunctionCallArguments);return o===null?null:new qs.FunctionCall(s,o)},this.ExpressionFunctionCallArguments=()=>{if(this.ParseString("(")===null)return null;let s=this.Exclude(this.String(",")),o=this.Interleave(this.Expression,s);return o===null&&(o=[]),this.Whitespace(),this.Expect(this.String(")"),"closing ')' for function call"),o},this.ExpressionVariableName=()=>{let s=this.Interleave(this.IdentifierWithMetadata,this.Exclude(this.Spaced(this.String("."))));return s===null||Sh.Story.IsReservedKeyword(s[0].name)?null:new Nl.VariableReference(s)},this.ExpressionParen=()=>{if(this.ParseString("(")===null)return null;let s=this.Parse(this.Expression);return s===null?null:(this.Whitespace(),this.Expect(this.String(")"),"closing parenthesis ')' for expression"),s)},this.ExpressionInfixRight=(s,o)=>{if(!s)return null;this.Whitespace();let l=this.Parse(()=>this.Expression(o.precedence));return l?new uC.BinaryExpression(s,l,o.type):null},this.ParseInfixOperator=()=>{for(let s of this._binaryOperators){let o=this.BeginRule();if(this.ParseString(s.type)!==null){if(s.requireWhitespace&&this.Whitespace()===null){this.FailRule(o);continue}return this.SucceedRule(o,s)}this.FailRule(o);}return null},this.ExpressionList=()=>{if(this.Whitespace(),this.ParseString("(")===null)return null;this.Whitespace();let s=this.SeparatedList(this.ListMember,this.Spaced(this.String(",")));return this.Whitespace(),this.ParseString(")")===null?null:new Ch.List(s)},this.ListMember=()=>{this.Whitespace();let s=this.Parse(this.IdentifierWithMetadata);if(s===null)return null;if(this.ParseString(".")!==null){let l=this.Expect(this.IdentifierWithMetadata,`element name within the set ${s}`);s.name+=`.${l?.name}`;}return this.Whitespace(),s},this.RegisterExpressionOperators=()=>{this.RegisterBinaryOperator("&&",1),this.RegisterBinaryOperator("||",1),this.RegisterBinaryOperator("and",1,true),this.RegisterBinaryOperator("or",1,true),this.RegisterBinaryOperator("==",2),this.RegisterBinaryOperator(">=",2),this.RegisterBinaryOperator("<=",2),this.RegisterBinaryOperator("<",2),this.RegisterBinaryOperator(">",2),this.RegisterBinaryOperator("!=",2),this.RegisterBinaryOperator("?",3),this.RegisterBinaryOperator("has",3,true),this.RegisterBinaryOperator("!?",3),this.RegisterBinaryOperator("hasnt",3,true),this.RegisterBinaryOperator("^",3),this.RegisterBinaryOperator("+",4),this.RegisterBinaryOperator("-",5),this.RegisterBinaryOperator("*",6),this.RegisterBinaryOperator("/",7),this.RegisterBinaryOperator("%",8),this.RegisterBinaryOperator("mod",8,true);},this.RegisterBinaryOperator=(s,o,l=false)=>{let u=new bC.InfixOperator(s,o,l);this._binaryOperators.push(u),this._maxBinaryOpLength=Math.max(this._maxBinaryOpLength,s.length);},this._openFilenames=[],this.IncludeStatement=()=>{if(this.Whitespace(),this.ParseString("INCLUDE")===null)return null;this.Whitespace();let s=this.Expect(()=>this.ParseUntilCharactersFromString(`
|
|
34
|
+
\r`),"filename for include statement");s=s.replace(new RegExp(/[ \t]+$/g),"");let o=this.fileHandler.ResolveInkFilename(s,this._filename);if(this.FilenameIsAlreadyOpen(o))return this.Error(`Recursive INCLUDE detected: '${o}' is already open.`),this.ParseUntilCharactersFromString(`\r
|
|
35
|
+
`),new gh.IncludedFile(null);this.AddOpenFilename(o);let l=null,u="";try{u=this._rootParser.fileHandler.LoadInkFileContents(o,this._filename);}catch(c){this.Error(`Failed to load: '${s}'.
|
|
36
|
+
Error:${c}`);}return u!=null&&(l=new i(u,s,this._externalErrorHandler,this._rootParser,this.fileHandler).ParseStory()),this.RemoveOpenFilename(o),new gh.IncludedFile(l)},this.FilenameIsAlreadyOpen=s=>this._rootParser._openFilenames.includes(s),this.AddOpenFilename=s=>{this._rootParser._openFilenames.push(s);},this.RemoveOpenFilename=s=>{this._rootParser._openFilenames.splice(this._rootParser._openFilenames.indexOf(s),1);},this.KnotDefinition=()=>{let s=this.Parse(this.KnotDeclaration);if(s===null)return null;this.Expect(this.EndOfLine,"end of line after knot name definition",this.SkipToNextLine);let o=()=>this.StatementsAtLevel(we.StatementLevel.Knot),l=this.Expect(o,"at least one line within the knot",this.KnotStitchNoContentRecoveryRule);return new SC.Knot(s.name,l,s.args,s.isFunction)},this.KnotDeclaration=()=>{if(this.Whitespace(),this.KnotTitleEquals()===null)return null;this.Whitespace();let s=this.Parse(this.IdentifierWithMetadata),o,l=s?.name==="function";l?(this.Expect(this.Whitespace,"whitespace after the 'function' keyword"),o=this.Parse(this.IdentifierWithMetadata)):o=s,o===null&&(this.Error(`Expected the name of the ${l?"function":"knot"}`),o=new hi.Identifier("")),this.Whitespace();let u=this.Parse(this.BracketedKnotDeclArguments);return this.Whitespace(),this.Parse(this.KnotTitleEquals),new mh.FlowDecl(o,u,l)},this.KnotTitleEquals=()=>{let s=this.ParseCharactersFromString("=");return s===null||s.length<=1?null:s},this.StitchDefinition=()=>{let s=this.Parse(this.StitchDeclaration);if(s===null)return null;this.Expect(this.EndOfLine,"end of line after stitch name",this.SkipToNextLine);let o=()=>this.StatementsAtLevel(we.StatementLevel.Stitch),l=this.Expect(o,"at least one line within the stitch",this.KnotStitchNoContentRecoveryRule);return new xC.Stitch(s.name,l,s.args,s.isFunction)},this.StitchDeclaration=()=>{if(this.Whitespace(),this.ParseString("=")===null||this.ParseString("=")!==null)return null;this.Whitespace();let s=this.ParseString("function")!==null;s&&this.Whitespace();let o=this.Parse(this.IdentifierWithMetadata);if(o===null)return null;this.Whitespace();let l=this.Parse(this.BracketedKnotDeclArguments);return this.Whitespace(),new mh.FlowDecl(o,l,s)},this.KnotStitchNoContentRecoveryRule=()=>(this.ParseUntil(this.KnotDeclaration,new fe.CharacterSet("="),null),[new ft.Text("<ERROR IN FLOW>")]),this.BracketedKnotDeclArguments=()=>{if(this.ParseString("(")===null)return null;let s=this.Interleave(this.Spaced(this.FlowDeclArgument),this.Exclude(this.String(",")));return this.Expect(this.String(")"),"closing ')' for parameter list"),s===null&&(s=[]),s},this.FlowDeclArgument=()=>{let s=this.Parse(this.IdentifierWithMetadata);this.Whitespace();let o=this.ParseDivertArrow();this.Whitespace();let l=this.Parse(this.IdentifierWithMetadata);if(s==null&&l===null)return null;let u=new oC.Argument;return o!==null&&(u.isDivertTarget=true),s!==null&&s.name==="ref"?(l===null&&this.Error("Expected an parameter name after 'ref'"),u.identifier=l,u.isByReference=true):(u.isDivertTarget?u.identifier=l:u.identifier=s,u.identifier===null&&this.Error("Expected an parameter name"),u.isByReference=false),u},this.ExternalDeclaration=()=>{this.Whitespace();let s=this.Parse(this.IdentifierWithMetadata);if(s===null||s.name!="EXTERNAL")return null;this.Whitespace();let o=this.Expect(this.IdentifierWithMetadata,"name of external function")||new hi.Identifier("");this.Whitespace();let l=this.Expect(this.BracketedKnotDeclArguments,`declaration of arguments for EXTERNAL, even if empty, i.e. 'EXTERNAL ${o}()'`);l===null&&(l=[]);let u=l.map(c=>{var h;return (h=c.identifier)===null||h===void 0?void 0:h.name}).filter(_t.filterUndef);return new gC.ExternalDeclaration(o,u)},this._identifierCharSet=null,this.LogicLine=()=>{if(this.Whitespace(),this.ParseString("~")===null)return null;this.Whitespace();let s=()=>this.OneOf([this.ReturnStatement,this.TempDeclarationOrAssignment,this.Expression]),o=this.Expect(s,"expression after '~'",this.SkipToNextLine);if(o===null)return new ke.ContentList;o instanceof mC.Expression&&!(o instanceof qs.FunctionCall||o instanceof Ms.IncDecExpression)&&this.Error(`Logic following a '~' can't be that type of expression. It can only be something like:
|
|
37
|
+
~ return
|
|
38
|
+
~ var x = blah
|
|
39
|
+
~ x++
|
|
40
|
+
~ myFunction()`);let l=(0, _t.asOrNull)(o,qs.FunctionCall);return l&&(l.shouldPopReturnedValue=true),o.Find(qs.FunctionCall)()!==null&&(o=new ke.ContentList(o,new ft.Text(`
|
|
41
|
+
`))),this.Expect(this.EndOfLine,"end of line",this.SkipToNextLine),o},this.VariableDeclaration=()=>{if(this.Whitespace(),this.Parse(this.Identifier)!=="VAR")return null;this.Whitespace();let o=this.Expect(this.IdentifierWithMetadata,"variable name");this.Whitespace(),this.Expect(this.String("="),"the '=' for an assignment of a value, e.g. '= 5' (initial values are mandatory)"),this.Whitespace();let u=this.Expect(this.Expression,"initial value for ");return u?(u instanceof bn.NumberExpression||u instanceof ci.StringExpression||u instanceof Tl.DivertTarget||u instanceof Nl.VariableReference||u instanceof Ch.List||this.Error("initial value for a variable must be a number, constant, list or divert target"),this.Parse(this.ListElementDefinitionSeparator)!==null?this.Error("Unexpected ','. If you're trying to declare a new list, use the LIST keyword, not VAR"):u instanceof ci.StringExpression&&(u.isSingleString||this.Error("Constant strings cannot contain any logic.")),new Fl.VariableAssignment({assignedExpression:u,isGlobalDeclaration:true,variableIdentifier:o})):null},this.ListDeclaration=()=>{if(this.Whitespace(),this.Parse(this.Identifier)!="LIST")return null;this.Whitespace();let o=this.Expect(this.IdentifierWithMetadata,"list name");this.Whitespace(),this.Expect(this.String("="),"the '=' for an assignment of the list definition"),this.Whitespace();let l=this.Expect(this.ListDefinition,"list item names");return l?(l.identifier=new hi.Identifier(o.name),new Fl.VariableAssignment({variableIdentifier:o,listDef:l})):null},this.ListDefinition=()=>{this.AnyWhitespace();let s=this.SeparatedList(this.ListElementDefinition,this.ListElementDefinitionSeparator);return s===null?null:new EC.ListDefinition(s)},this.ListElementDefinitionSeparator=()=>(this.AnyWhitespace(),this.ParseString(",")===null?null:(this.AnyWhitespace(),",")),this.ListElementDefinition=()=>{let s=this.ParseString("(")!==null,o=s;this.Whitespace();let l=this.Parse(this.IdentifierWithMetadata);if(l===null)return null;this.Whitespace(),s&&this.ParseString(")")!=null&&(o=false,this.Whitespace());let u=null;if(this.ParseString("=")!==null){this.Whitespace();let c=this.Expect(this.ExpressionInt,"value to be assigned to list item");c!==null&&(u=c.value),o&&(this.Whitespace(),this.ParseString(")")!==null&&(o=false));}return o&&this.Error("Expected closing ')'"),new DC.ListElementDefinition(l,s,u)},this.ConstDeclaration=()=>{if(this.Whitespace(),this.Parse(this.Identifier)!=="CONST")return null;this.Whitespace();let o=this.Expect(this.IdentifierWithMetadata,"constant name");this.Whitespace(),this.Expect(this.String("="),"the '=' for an assignment of a value, e.g. '= 5' (initial values are mandatory)"),this.Whitespace();let l=this.Expect(this.Expression,"initial value for ");return l instanceof bn.NumberExpression||l instanceof Tl.DivertTarget||l instanceof ci.StringExpression?l instanceof ci.StringExpression&&(l.isSingleString||this.Error("Constant strings cannot contain any logic.")):this.Error("initial value for a constant must be a number or divert target"),new dC.ConstantDeclaration(o,l)},this.InlineLogicOrGlueOrStartTag=()=>this.OneOf([this.InlineLogic,this.Glue,this.StartTag]),this.Glue=()=>this.ParseString("<>")!==null?new yC.Glue(new vC.Glue):null,this.InlineLogic=()=>{if(this.ParseString("{")===null)return null;let s=this.parsingStringExpression,o=this.tagActive;this.Whitespace();let l=this.Expect(this.InnerLogic,"some kind of logic, conditional or sequence within braces: { ... }");if(l===null)return this.parsingStringExpression=s,null;this.DisallowIncrement(l);let u=(0, _t.asOrNull)(l,ke.ContentList);return u||(u=new ke.ContentList(l)),this.Whitespace(),this.Expect(this.String("}"),"closing brace '}' for inline logic"),this.parsingStringExpression=s,o||this.EndTagIfNecessary(u),u},this.InnerLogic=()=>{this.Whitespace();let s=this.ParseObject(this.SequenceTypeAnnotation);if(s!==null){let u=this.Expect(this.InnerSequenceObjects,"sequence elements (for cycle/stoping etc)");return u===null?null:new bh.Sequence(u,s)}let o=this.Parse(this.ConditionExpression);if(o)return this.Expect(()=>this.InnerConditionalContent(o),"conditional content following query");let l=[this.InnerConditionalContent,this.InnerSequence,this.InnerExpression];for(let u of l){let c=this.BeginRule(),h=this.ParseObject(u);if(h)if(this.Peek(this.Spaced(this.String("}")))===null)this.FailRule(c);else return this.SucceedRule(c,h);else this.FailRule(c);}return null},this.InnerExpression=()=>{let s=this.Parse(this.Expression);return s&&(s.outputWhenComplete=true),s},this.IdentifierWithMetadata=()=>{let s=this.Identifier();return s===null?null:new hi.Identifier(s)},this.Identifier=()=>{let s=this.ParseCharactersFromCharSet(this.identifierCharSet);if(s===null)return null;let o=true;for(let l of s)if(!(l>="0"&&l<="9")){o=false;break}return o?null:s},this._sequenceTypeSymbols=new fe.CharacterSet("!&~$"),this.InnerSequence=()=>{this.Whitespace();let s=de.SequenceType.Stopping,o=this.Parse(this.SequenceTypeAnnotation);o!==null&&(s=o);let l=this.Parse(this.InnerSequenceObjects);return l===null||l.length<=1?null:new bh.Sequence(l,s)},this.SequenceTypeAnnotation=()=>{let s=this.Parse(this.SequenceTypeSymbolAnnotation);if(s===null&&(s=this.Parse(this.SequenceTypeWordAnnotation)),s===null)return null;switch(s){case de.SequenceType.Once:case de.SequenceType.Cycle:case de.SequenceType.Stopping:case de.SequenceType.Shuffle:case de.SequenceType.Shuffle|de.SequenceType.Stopping:case de.SequenceType.Shuffle|de.SequenceType.Once:break;default:return this.Error(`Sequence type combination not supported: ${s}`),de.SequenceType.Stopping}return s},this.SequenceTypeSymbolAnnotation=()=>{this._sequenceTypeSymbols===null&&(this._sequenceTypeSymbols=new fe.CharacterSet("!&~$ "));let s=0,o=this.ParseCharactersFromCharSet(this._sequenceTypeSymbols);if(o===null)return null;for(let l of o)switch(l){case "!":s|=de.SequenceType.Once;break;case "&":s|=de.SequenceType.Cycle;break;case "~":s|=de.SequenceType.Shuffle;break;case "$":s|=de.SequenceType.Stopping;break}return s===0?null:s},this.SequenceTypeWordAnnotation=()=>{let s=this.Interleave(this.SequenceTypeSingleWord,this.Exclude(this.Whitespace));if(s===null||s.length===0||this.ParseString(":")===null)return null;let o=0;for(let l of s)o|=l;return o},this.SequenceTypeSingleWord=()=>{let s=null,o=this.Parse(this.IdentifierWithMetadata);if(o!==null)switch(o.name){case "once":s=de.SequenceType.Once;break;case "cycle":s=de.SequenceType.Cycle;break;case "shuffle":s=de.SequenceType.Shuffle;break;case "stopping":s=de.SequenceType.Stopping;break}return s===null?null:s},this.InnerSequenceObjects=()=>{let s=this.Parse(this.Newline)!==null,o=null;return s?o=this.Parse(this.InnerMultilineSequenceObjects):o=this.Parse(this.InnerInlineSequenceObjects),o},this.InnerInlineSequenceObjects=()=>{let s=this.Interleave(this.Optional(this.MixedTextAndLogic),this.String("|"),null,false);if(s===null)return null;let o=[],l=false;for(let u of s)if(u==="|")l||o.push(new ke.ContentList),l=false;else {let c=u;c===null?this.Error(`Expected content, but got ${u} (this is an ink compiler bug!)`):o.push(new ke.ContentList(c)),l=true;}return l||o.push(new ke.ContentList),o},this.InnerMultilineSequenceObjects=()=>{this.MultilineWhitespace();let s=this.OneOrMore(this.SingleMultilineSequenceElement);return s===null?null:s},this.SingleMultilineSequenceElement=()=>{if(this.Whitespace(),this.ParseString("->")!==null||this.ParseString("-")===null)return null;this.Whitespace();let s=this.StatementsAtLevel(we.StatementLevel.InnerBlock);return s===null?this.MultilineWhitespace():s.unshift(new ft.Text(`
|
|
42
|
+
`)),new ke.ContentList(s)},this._statementRulesAtLevel=[],this._statementBreakRulesAtLevel=[],this.StatementsAtLevel=s=>(s===we.StatementLevel.InnerBlock&&this.Parse(this.GatherDashes)!==null&&this.Error("You can't use a gather (the dashes) within the { curly braces } context. For multi-line sequences and conditions, you should only use one dash."),this.Interleave(this.Optional(this.MultilineWhitespace),()=>this.StatementAtLevel(s),()=>this.StatementsBreakForLevel(s))),this.StatementAtLevel=s=>{let o=this._statementRulesAtLevel[s],l=this.OneOf(o);return s===we.StatementLevel.Top&&l instanceof vh.ReturnType&&this.Error("should not have return statement outside of a knot"),l},this.StatementsBreakForLevel=s=>{this.Whitespace();let o=this._statementBreakRulesAtLevel[s],l=this.OneOf(o);return l===null?null:l},this.GenerateStatementLevelRules=()=>{let s=Object.values(we.StatementLevel);this._statementRulesAtLevel="f".repeat(s.length).split("f").map(()=>[]),this._statementBreakRulesAtLevel="f".repeat(s.length).split("f").map(()=>[]);for(let o of s){let l=[],u=[];l.push(this.Line(this.MultiDivert)),o>=we.StatementLevel.Top&&l.push(this.KnotDefinition),l.push(this.Line(this.Choice)),l.push(this.Line(this.AuthorWarning)),o>we.StatementLevel.InnerBlock&&l.push(this.Gather),o>=we.StatementLevel.Knot&&l.push(this.StitchDefinition),l.push(this.Line(this.ListDeclaration)),l.push(this.Line(this.VariableDeclaration)),l.push(this.Line(this.ConstDeclaration)),l.push(this.Line(this.ExternalDeclaration)),l.push(this.Line(this.IncludeStatement)),l.push(this.LogicLine),l.push(this.LineOfMixedTextAndLogic),o<=we.StatementLevel.Knot&&u.push(this.KnotDeclaration),o<=we.StatementLevel.Stitch&&u.push(this.StitchDeclaration),o<=we.StatementLevel.InnerBlock&&(u.push(this.ParseDashNotArrow),u.push(this.String("}"))),this._statementRulesAtLevel[o]=l,this._statementBreakRulesAtLevel[o]=u;}},this.SkipToNextLine=()=>(this.ParseUntilCharactersFromString(`
|
|
43
|
+
\r`),this.ParseNewline(),dt.ParseSuccess),this.Line=s=>()=>{let o=this.ParseObject(s);return o===null?null:(this.Expect(this.EndOfLine,"end of line",this.SkipToNextLine),o)},this.StartTag=()=>{if(this.Whitespace(),this.ParseString("#")===null)return null;this.parsingStringExpression&&this.Error("Tags aren't allowed inside of strings. Please use \\# if you want a hash symbol.");let s=null;if(this.tagActive){let o=new ke.ContentList;o.AddContent(new vn.Tag(false)),o.AddContent(new vn.Tag(true)),s=o;}else s=new vn.Tag(true);return this.tagActive=true,this.Whitespace(),s},this._inlineWhitespaceChars=new fe.CharacterSet(" "),this.EndOfLine=()=>this.OneOf([this.Newline,this.EndOfFile]),this.Newline=()=>(this.Whitespace(),this.ParseNewline()!==null?dt.ParseSuccess:null),this.EndOfFile=()=>(this.Whitespace(),this.endOfInput?dt.ParseSuccess:null),this.MultilineWhitespace=()=>{let s=this.OneOrMore(this.Newline);return s===null?null:s.length>=1?dt.ParseSuccess:null},this.Whitespace=()=>this.ParseCharactersFromCharSet(this._inlineWhitespaceChars)!==null?dt.ParseSuccess:null,this.Spaced=s=>()=>{this.Whitespace();let o=this.ParseObject(s);return o===null?null:(this.Whitespace(),o)},this.AnyWhitespace=()=>{let s=false;for(;this.OneOf([this.Whitespace,this.MultilineWhitespace])!==null;)s=true;return s?dt.ParseSuccess:null},this.MultiSpaced=s=>()=>{this.AnyWhitespace();let o=this.ParseObject(s);return o===null?null:(this.AnyWhitespace(),o)},this._filename=null,this._externalErrorHandler=null,this._fileHandler=null,this._filename=t,this.RegisterExpressionOperators(),this.GenerateStatementLevelRules(),this.errorHandler=this.OnStringParserError,this._externalErrorHandler=n,a===null?this._fileHandler=new OC.DefaultFileHandler:this._fileHandler=a,r===null){if(this._rootParser=this,this._openFilenames=[],this._filename!==null){let s=this.fileHandler.ResolveInkFilename(this._filename);this._openFilenames.push(s);}}else this._rootParser=r;}PreProcessInputString(e){return new hC.CommentEliminator(e).Process()}get parsingStringExpression(){return this.GetFlag(Number(Ws.CustomFlags.ParsingString))}set parsingStringExpression(e){this.SetFlag(Number(Ws.CustomFlags.ParsingString),e);}get tagActive(){return this.GetFlag(Number(Ws.CustomFlags.TagActive))}set tagActive(e){this.SetFlag(Number(Ws.CustomFlags.TagActive),e);}get identifierCharSet(){return this._identifierCharSet===null&&((this._identifierCharSet=new fe.CharacterSet).AddRange("A","Z").AddRange("a","z").AddRange("0","9").Add("_"),this.ExtendIdentifierCharacterRanges(this._identifierCharSet)),this._identifierCharSet}EndTagIfNecessary(e){this.tagActive&&(e!=null&&(e instanceof ke.ContentList?e.AddContent(new vn.Tag(false)):e.push(new vn.Tag(false))),this.tagActive=false);}};Gs.InkParser=Y;Y.LatinBasic=Ue.CharacterRange.Define("A","z",new fe.CharacterSet().AddRange("[","`"));Y.LatinExtendedA=Ue.CharacterRange.Define("\u0100","\u017F");Y.LatinExtendedB=Ue.CharacterRange.Define("\u0180","\u024F");Y.Greek=Ue.CharacterRange.Define("\u0370","\u03FF",new fe.CharacterSet().AddRange("\u0378","\u0385").AddCharacters("\u0374\u0375\u0378\u0387\u038B\u038D\u03A2"));Y.Cyrillic=Ue.CharacterRange.Define("\u0400","\u04FF",new fe.CharacterSet().AddRange("\u0482","\u0489"));Y.Armenian=Ue.CharacterRange.Define("\u0530","\u058F",new fe.CharacterSet().AddCharacters("\u0530").AddRange("\u0557","\u0560").AddRange("\u0588","\u058E"));Y.Hebrew=Ue.CharacterRange.Define("\u0590","\u05FF",new fe.CharacterSet);Y.Arabic=Ue.CharacterRange.Define("\u0600","\u06FF",new fe.CharacterSet);Y.Korean=Ue.CharacterRange.Define("\uAC00","\uD7AF",new fe.CharacterSet);Y.Latin1Supplement=Ue.CharacterRange.Define("\x80","\xFF",new fe.CharacterSet);Y.Chinese=Ue.CharacterRange.Define("\u4E00","\u9FFF",new fe.CharacterSet);Y.ListAllCharacterRanges=()=>[Y.LatinBasic,Y.LatinExtendedA,Y.LatinExtendedB,Y.Arabic,Y.Armenian,Y.Cyrillic,Y.Greek,Y.Hebrew,Y.Korean,Y.Latin1Supplement,Y.Chinese];});var Ah=O($s=>{Object.defineProperty($s,"__esModule",{value:true});$s.GenerateStoryStats=void 0;var PC=an(),TC=cn(),FC=$n(),NC=Xo(),IC=nl(),VC=Et();function kC(i){let e=i.FindAll(VC.Text)(),t=0;for(let l of e){let u=0,c=true;for(let h of l.text)h==" "||h==" "||h==`
|
|
44
|
+
`||h=="\r"?c=true:c&&(u++,c=false);t+=u;}let n=i.FindAll(NC.Knot)(),r=i.FindAll(IC.Stitch)(),a=i.FindAll(PC.Choice)(),s=i.FindAll(FC.Gather)(l=>l.debugMetadata!=null),o=i.FindAll(TC.Divert)();return {words:t,knots:n.length,functions:n.filter(l=>l.isFunction).length,stitches:r.length,gathers:s.length,diverts:o.length-1,choices:a.length}}$s.GenerateStoryStats=kC;});var wh=O(Js=>{Object.defineProperty(Js,"__esModule",{value:true});Js.JsonFileHandler=void 0;var Vl=class{constructor(e){this.fileHierarchy=e,this.ResolveInkFilename=t=>{if(Object.keys(this.fileHierarchy).includes(t))return t;throw new Error(`Cannot locate ${t}. Are you trying a relative import ? This is not yet implemented.`)},this.LoadInkFileContents=t=>{if(Object.keys(this.fileHierarchy).includes(t))return this.fileHierarchy[t];throw new Error(`Cannot open ${t}.`)};}};Js.JsonFileHandler=Vl;});var _h=O(be=>{Object.defineProperty(be,"__esModule",{value:true});be.Compiler=be.Story=be.InkList=be.JsonFileHandler=be.StatementLevel=be.InkParser=be.CompilerOptions=void 0;var RC=Ca(),LC=ku(),kl=Kt(),jC=Il(),BC=ie(),WC=U(),qC=Ah(),MC=Ca();Object.defineProperty(be,"CompilerOptions",{enumerable:true,get:function(){return MC.CompilerOptions}});var GC=Il();Object.defineProperty(be,"InkParser",{enumerable:true,get:function(){return GC.InkParser}});var $C=el();Object.defineProperty(be,"StatementLevel",{enumerable:true,get:function(){return $C.StatementLevel}});var JC=wh();Object.defineProperty(be,"JsonFileHandler",{enumerable:true,get:function(){return JC.JsonFileHandler}});var xh=ei();Object.defineProperty(be,"InkList",{enumerable:true,get:function(){return xh.InkList}});Object.defineProperty(be,"Story",{enumerable:true,get:function(){return xh.Story}});var Rl=class{get errors(){return this._errors}get warnings(){return this._warnings}get authorMessages(){return this._authorMessages}get inputString(){return this._inputString}get options(){return this._options}get parsedStory(){if(!this._parsedStory)throw new Error;return this._parsedStory}get runtimeStory(){if(!this._runtimeStory)throw new Error("Compilation failed.");return this._runtimeStory}get parser(){if(!this._parser)throw new Error;return this._parser}get debugSourceRanges(){return this._debugSourceRanges}constructor(e,t=null){this._errors=[],this._warnings=[],this._authorMessages=[],this._parsedStory=null,this._runtimeStory=null,this._parser=null,this._debugSourceRanges=[],this.Compile=()=>(this._parser=new jC.InkParser(this.inputString,this.options.sourceFilename||null,this.OnError,null,this.options.fileHandler),this._parsedStory=this.parser.ParseStory(),this.errors.length===0?(this.parsedStory.countAllVisits=this.options.countAllVisits,this._runtimeStory=this.parsedStory.ExportRuntime(this.OnError)):this._runtimeStory=null,this.runtimeStory),this.RetrieveDebugSourceForLatestContent=()=>{var n;for(let r of this.runtimeStory.state.outputStream){let a=(0, WC.asOrNull)(r,BC.StringValue);if(a!==null){let s=new LC.DebugSourceRange(((n=a.value)===null||n===void 0?void 0:n.length)||0,a.debugMetadata,a.value||"unknown");this.debugSourceRanges.push(s);}}},this.GenerateStats=()=>this._parsedStory===null?null:(0, qC.GenerateStoryStats)(this._parsedStory),this.DebugMetadataForContentAtOffset=n=>{let r=0,a=null;for(let s of this.debugSourceRanges){if(s.debugMetadata!==null&&(a=s.debugMetadata),n>=r&&n<r+s.length)return a;r+=s.length;}return null},this.OnError=(n,r)=>{switch(r){case kl.ErrorType.Author:this._authorMessages.push(n);break;case kl.ErrorType.Warning:this._warnings.push(n);break;case kl.ErrorType.Error:this._errors.push(n);break}this.options.errorHandler!==null&&this.options.errorHandler(n,r);},this._inputString=e,this._options=t||new RC.CompilerOptions;}};be.Compiler=Rl;});var Se;(i=>(i.log=(e,...t)=>console.log(`[Pixi\u2019VN Json] ${e}`,...t),i.warn=(e,...t)=>console.warn(`[Pixi\u2019VN Json] ${e}`,...t),i.error=(e,...t)=>console.error(`[Pixi\u2019VN Json] ${e}`,...t),i.info=(e,...t)=>console.info(`[Pixi\u2019VN Json] ${e}`,...t)))(Se||={});var P=class q{static init(e){e.loadAssets&&(q._loadAssets=e.loadAssets),e.soundOperation&&(q._soundOperation=e.soundOperation),e.imageOperation&&(q._imageOperation=e.imageOperation),e.videoOperation&&(q._videoOperation=e.videoOperation),e.imageContainerOperation&&(q._imageContainerOperation=e.imageContainerOperation),e.textOperation&&(q._textOperation=e.textOperation),e.canvasElementOperation&&(q._canvasElementOperation=e.canvasElementOperation),e.setStorageValue&&(q._setStorageValue=e.setStorageValue),e.setInitialStorageValue&&(q._setInitialStorageValue=e.setInitialStorageValue),e.narrationOperation&&(q._narrationOperation=e.narrationOperation),e.effectOperation&&(q._effectOperation=e.effectOperation),e.animateOperation&&(q._animateOperation=e.animateOperation),e.canvasOperation&&(q._canvasOperation=e.canvasOperation),e.getLogichValue&&(q._getLogichValue=e.getLogichValue),e.getConditionalStep&&(q._getConditionalStep=e.getConditionalStep);}static _loadAssets=()=>{};static get loadAssets(){return q._loadAssets}static _soundOperation=()=>{throw Se.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get soundOperation(){return q._soundOperation}static _imageOperation=()=>{throw Se.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get imageOperation(){return q._imageOperation}static _videoOperation=()=>{throw Se.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get videoOperation(){return q._videoOperation}static _imageContainerOperation=()=>{throw Se.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get imageContainerOperation(){return q._imageContainerOperation}static _textOperation=()=>{throw Se.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get textOperation(){return q._textOperation}static _canvasElementOperation=()=>{throw Se.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get canvasElementOperation(){return q._canvasElementOperation}static _setStorageValue=()=>{throw Se.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get setStorageValue(){return q._setStorageValue}static _setInitialStorageValue=()=>{throw Se.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get setInitialStorageValue(){return q._setInitialStorageValue}static _narrationOperation=()=>{throw Se.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get narrationOperation(){return q._narrationOperation}static _effectOperation=()=>{throw Se.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get effectOperation(){return q._effectOperation}static _animateOperation=()=>{throw Se.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get animateOperation(){return q._animateOperation}static _canvasOperation=()=>{throw Se.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get canvasOperation(){return q._canvasOperation}static _getLogichValue=()=>{throw Se.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get getLogichValue(){return q._getLogichValue}static _getConditionalStep=()=>{throw Se.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get getConditionalStep(){return q._getConditionalStep}};var En;(i=>{i.options={replaceRegex:/\[([^\]]+)\]/};let e=[];function t(u,c){e.unshift({fn:u,opts:c});}i.add=t;function n(u){let c=e.findIndex(h=>h.fn===u);c!==-1&&e.splice(c,1);}i.remove=n;function r(){return e.map(u=>u.opts)}i.info=r;function a(u,c){let h=e.filter(m=>(m.opts.type??"after-translation")===c.type);for(let m of h)u=l(u,m.fn,m.opts.validation);return u}i.replace=a;function s(u){let c=e.filter(h=>h.opts.i18nInterpolation);for(let h of c)u=o(u,h.fn,h.opts);return u}i.runI18nPreStep=s;function o(u,c,h){let{validation:m}=h,d=new RegExp(i.options.replaceRegex.source,"g"),y=[...u.matchAll(d)],v=new Set,A=[];for(let D of y)v.has(D[1])||(v.add(D[1]),A.push(D[1]));for(let D of A){if(m==="characterId"){if(!RegisteredCharacters.has(D))continue}else if(m!=="all"){if(m instanceof RegExp){if(!m.test(D))continue}else if(m instanceof ZodType&&!m.safeParse(D).success)continue}c(D)!==void 0&&(u.includes(`{{[${D}]}}`)||(u=u.replaceAll(`[${D}]`,`{{[${D}]}}`)));}return u}function l(u,c,h){let m=new RegExp(i.options.replaceRegex.source,"g"),d=[...u.matchAll(m)],y=new Set,v=[];for(let A of d)y.has(A[1])||(y.add(A[1]),v.push(A[1]));for(let A of v){if(h==="characterId"){if(!RegisteredCharacters.has(A))continue}else if(h!=="all"){if(h instanceof RegExp){if(!h.test(A))continue}else if(h instanceof ZodType&&!h.safeParse(A).success)continue}let D=c(A);D!==void 0&&(u=u.replaceAll(`[${A}]`,D));}return u}})(En||={});function Jh(i,e={}){let t="";return i.values.forEach(n=>{if(typeof n=="string")t+=n;else {let r=P.getLogichValue(n,e);t+=`${r}`;}}),t}var Hl;(i=>{let e=l=>l;function t(l){return Array.isArray(l)?l.map(u=>n(`${u}`)):n(`${l}`)}i.t=t;function n(l){let u=l;return i.beforeToTranslate&&(u=(0, i.beforeToTranslate)(u)),u=En.replace(u,{type:"before-translation"}),u=e(u),i.afterToTranslate&&(u=(0, i.afterToTranslate)(u)),u=En.replace(u,{type:"after-translation"}),u}i.translate=n;function r(l){e=l;}i.setTranslate=r;function a(l,u,c){let{defaultValue:h="empty_string"}=c;typeof u=="string"&&(u=[u]),Array.isArray(u)&&u.forEach(m=>{let d=m;if(i.beforeToTranslate&&(d=(0, i.beforeToTranslate)(d)),h==="empty_string")l[d]===void 0&&(l[d]="");else if(h==="copy_key"){let y=m;i.beforeToTranslate&&(y=(0, i.beforeToTranslate)(y));let v=En.runI18nPreStep(y);v=En.replace(v,{type:"before-translation"}),l[d]=v;}});}function s(l,u=[]){if(typeof l=="object"&&l&&"type"in l)if(l.type==="ifelse")l.then&&s(l.then,u),l.else&&s(l.else,u);else if(l.type==="stepswitch"){if(l.elements)if(Array.isArray(l.elements))l.elements.forEach(c=>{s(c,u);});else if(l.elements.type==="ifelse"){let c=[];s(l.elements,c),c.forEach(h=>{u.push(...h);});}else if(l.elements.type==="stepswitch"){let c=[];s(l.elements,c),c.forEach(h=>{u.push(...h);});}else s(l.elements,u);}else l.type==="resulttocombine"?(l.firstItem&&s(l.firstItem,u),l.secondConditionalItem&&l.secondConditionalItem.forEach(c=>{s(c,u);})):u.push(l);else l&&u.push(l);return u}async function o(l,u={},c={}){let{defaultValue:h="copy_key",operationStringConvert:m}=c,d=l.map(async y=>{if(y.choices){let v=[];Array.isArray(y.choices)?v=[y.choices]:v=s(y.choices),v.forEach(A=>{A.forEach(D=>{if("type"in D){let b=[];D.type==="ifelse"||D.type==="stepswitch"?s(D,b):b=[D],b.map(f=>s(f.text)).forEach(f=>{Array.isArray(f)&&f.forEach(C=>{Array.isArray(C)?C.forEach(p=>{typeof p=="string"?a(u,p,{defaultValue:h}):s(p).forEach(g=>{Array.isArray(g)?g.forEach(S=>{typeof S=="string"&&a(u,S,{defaultValue:h});}):typeof g=="string"&&a(u,g,{defaultValue:h});});}):typeof C=="string"&&a(u,C,{defaultValue:h});});});}});});}if(y.dialogue){let v=[];Array.isArray(y.dialogue)?v=[y.dialogue]:v=s(y.dialogue),v.forEach(A=>{if(typeof A=="string")a(u,A,{defaultValue:h});else if("text"in A){let D=s(A.text);typeof D=="string"&&(D=[D]),D.forEach(b=>{typeof b=="string"?a(u,b,{defaultValue:h}):s(b).forEach(f=>{typeof f=="string"?a(u,f,{defaultValue:h}):Array.isArray(f)&&f.forEach(C=>{typeof C=="string"?a(u,C,{defaultValue:h}):s(C).forEach(p=>{typeof p=="string"&&a(u,p,{defaultValue:h});});});});});}});}if(y.operations)for(let v of y.operations){if(v.type==="operationtoconvert"&&m){let A=Jh(v),D=await m(A,y,{});if(!D)return;v=D;}v.type==="text"&&v.operationType==="show"&&a(u,v.text,{defaultValue:h});}y.conditionalStep&&s(y.conditionalStep).forEach(v=>{Array.isArray(v)?o(v,u,c):o([v],u,c);});});return await Promise.all(d),u}i.generateJsonTranslation=o;})(Hl||={});var Re=Hl;async function zl(i){let e=P.getLogichValue(i,{});if(e)switch(e.type){case "assets":switch(e.operationType){case "load":await Assets.load(e.aliases);break;case "lazyload":Assets.backgroundLoad(e.aliases);break}break;case "bundle":switch(e.operationType){case "load":await Assets.loadBundle(e.aliases);break;case "lazyload":Assets.backgroundLoadBundle(e.aliases);break}break}}var G;(i=>(i.log=(e,...t)=>console.log(`[Pixi\u2019VN Json] ${e}`,...t),i.warn=(e,...t)=>console.warn(`[Pixi\u2019VN Json] ${e}`,...t),i.error=(e,...t)=>console.error(`[Pixi\u2019VN Json] ${e}`,...t),i.info=(e,...t)=>console.info(`[Pixi\u2019VN Json] ${e}`,...t)))(G||={});async function mi(i,e,t){switch(t.type){case "fade":await showWithFade(e.alias,i,t.props,t.priority);break;case "dissolve":await showWithDissolve(e.alias,i,t.props,t.priority);break;case "movein":case "moveout":await moveIn(e.alias,i,t.props,t.priority);break;case "zoomin":case "zoomout":await zoomIn(e.alias,i,t.props,t.priority);break;case "pushin":case "pushout":await pushIn(e.alias,i,t.props,t.priority);break}}function Dn(i){if(i.transition)switch(i.transition.type){case "fade":removeWithFade(i.alias,i.transition.props,i.transition.priority);break;case "dissolve":removeWithDissolve(i.alias,i.transition.props,i.transition.priority);break;case "movein":case "moveout":moveOut(i.alias,i.transition.props,i.transition.priority);break;case "zoomin":case "zoomout":zoomOut(i.alias,i.transition.props,i.transition.priority);break;case "pushin":case "pushout":pushOut(i.alias,i.transition.props,i.transition.priority);break}else canvas.remove(i.alias);}async function Ul(i){switch(i.operationType){case "show":if(i.transition){let e=new ImageSprite(i.props,i.url||i.alias);await mi(e,i,i.transition);}else await showImage(i.alias,i.url,i.props);break;case "edit":{let e=canvas.find(i.alias);e?i.props&&await e.setMemory({...e.memory,...i.props}):G.error(`Image with alias ${i.alias} not found.`);break}case "remove":Dn(i);break}}async function Kl(i){switch(i.operationType){case "show":if(i.transition){let e=new VideoSprite(i.props,i.url||i.alias);await mi(e,i,i.transition);}else await showVideo(i.alias,i.url,i.props);break;case "edit":{let e=canvas.find(i.alias);e?i.props&&await e.setMemory({...e.memory,...i.props}):G.error(`Video with alias ${i.alias} not found.`);break}case "remove":Dn(i);break;case "pause":case "resume":{let e=canvas.find(i.alias);e?e.paused=i.operationType==="pause":G.error(`Video with alias ${i.alias} not found.`);break}}}async function Xl(i){switch(i.operationType){case "show":if(i.transition){let e=new ImageContainer(i.props,i.urls);await mi(e,i,i.transition);}else await showImageContainer(i.alias,i.urls,i.props);break;case "edit":{let e=canvas.find(i.alias);e?i.props&&await e.setMemory({...e.memory,...i.props}):G.error(`ImageContainer with alias ${i.alias} not found.`);break}case "remove":Dn(i);break}}async function Yl(i){switch(i.operationType){case "show":if(i.props=i.props||{},i.props.text=Re.t(i.text),i.transition){let e=new Text(i.props);await mi(e,i,i.transition);}else showText(i.alias,i.text,i.props);break;case "edit":{let e=canvas.find(i.alias);e?i.props&&await e.setMemory({...e.memory,...i.props}):G.error(`Text with alias ${i.alias} not found.`);break}case "remove":Dn(i);break}}async function Zl(i){switch(i.operationType){case "edit":try{let e=canvas.find(i.alias);e?i.props&&e.setMemory({...e.memory,...i.props}):G.error(`Canvas Element with alias ${i.alias} not found.`);}catch(e){G.error(`There was an error while trying to edit the canvas element with alias ${i.alias}.`,e);}break;case "remove":Dn(i);break}}function Ql(i){i.operationType==="clear"&&canvas.removeAll();}async function eu(i){i.type==="shake"&&await shakeEffect(i.alias,i.props,i.priority);}function tu(i){switch(i.type){case "animate":canvas.animate(i.alias,i.keyframes,i.options,i.priority);break;case "animate-sequence":canvas.animate(i.alias,i.sequence,i.options,i.priority);break}}function nu(i){switch(i.type){case "input":narration.requestInput({type:i.valueType},i.defaultValue);break;case "dialogue":narration.dialogue=void 0;break}}function iu(i){switch(i.operationType){case "play":i.url?sound.play(i.alias,i.url,i.props):sound.play(i.alias,i.props);break;case "stop":switch(i.type){case "sound":sound.stop(i.alias);break;case "all":sound.stopAll();break}break;case "pause":switch(i.type){case "sound":sound.pause(i.alias);break;case "channel":sound.findChannel(i.alias).pauseAll();break;case "all":sound.pauseAll();break}break;case "resume":switch(i.type){case "sound":sound.resume(i.alias);break;case "channel":sound.findChannel(i.alias).resumeAll();break;case "all":sound.resumeAll();break}break;case "edit":Object.entries(i.props).forEach(([e,t])=>{let n=sound.find(i.alias);n&&(e==="volume"?n.volume.value=t:n.paused=t);});break}}var Qs="___param___",pp=class M{static init(e){e.loadAssets&&(M._loadAssets=e.loadAssets),e.soundOperation&&(M._soundOperation=e.soundOperation),e.imageOperation&&(M._imageOperation=e.imageOperation),e.videoOperation&&(M._videoOperation=e.videoOperation),e.imageContainerOperation&&(M._imageContainerOperation=e.imageContainerOperation),e.textOperation&&(M._textOperation=e.textOperation),e.canvasElementOperation&&(M._canvasElementOperation=e.canvasElementOperation),e.setStorageValue&&(M._setStorageValue=e.setStorageValue),e.setInitialStorageValue&&(M._setInitialStorageValue=e.setInitialStorageValue),e.narrationOperation&&(M._narrationOperation=e.narrationOperation),e.effectOperation&&(M._effectOperation=e.effectOperation),e.animateOperation&&(M._animateOperation=e.animateOperation),e.canvasOperation&&(M._canvasOperation=e.canvasOperation),e.getLogichValue&&(M._getLogichValue=e.getLogichValue),e.getConditionalStep&&(M._getConditionalStep=e.getConditionalStep);}static _loadAssets=()=>{};static get loadAssets(){return M._loadAssets}static _soundOperation=()=>{throw G.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get soundOperation(){return M._soundOperation}static _imageOperation=()=>{throw G.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get imageOperation(){return M._imageOperation}static _videoOperation=()=>{throw G.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get videoOperation(){return M._videoOperation}static _imageContainerOperation=()=>{throw G.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get imageContainerOperation(){return M._imageContainerOperation}static _textOperation=()=>{throw G.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get textOperation(){return M._textOperation}static _canvasElementOperation=()=>{throw G.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get canvasElementOperation(){return M._canvasElementOperation}static _setStorageValue=()=>{throw G.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get setStorageValue(){return M._setStorageValue}static _setInitialStorageValue=()=>{throw G.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get setInitialStorageValue(){return M._setInitialStorageValue}static _narrationOperation=()=>{throw G.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get narrationOperation(){return M._narrationOperation}static _effectOperation=()=>{throw G.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get effectOperation(){return M._effectOperation}static _animateOperation=()=>{throw G.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get animateOperation(){return M._animateOperation}static _canvasOperation=()=>{throw G.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get canvasOperation(){return M._canvasOperation}static _getLogichValue=()=>{throw G.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get getLogichValue(){return M._getLogichValue}static _getConditionalStep=()=>{throw G.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get getConditionalStep(){return M._getConditionalStep}};function dp(i,e){if(e&&typeof e=="object"&&typeof i.functionName=="string"&&i.functionName in e){let t=e[i.functionName];if(typeof t=="function"){let n=i.args.map(r=>pp.getLogichValue(r,e));return t(...n)}else G.warn(`getLogichValue function ${i.functionName} not found in props`);}}function ru(i,e){let t=P.getLogichValue(i,e);return t&&typeof t=="object"&&"type"in t?P.getLogichValue(t,e):t}function su(i,e={}){let t=ru(i.value,e);switch(i.storageType){case "flagStorage":storage.setFlag(i.key,i.value);break;case "storage":storage.set(i.key,t);break;case "tempstorage":storage.setTempVariable(i.key,t);break;case "params":{let n=storage.get(`${Qs}${narration.openedLabels.length-1}`)||[];n.length>i.key&&(n[i.key]=t),storage.setTempVariable(`${Qs}${narration.openedLabels.length-1}`,n);break}}}function au(i,e={}){let t=ru(i.value,e);switch(i.storageType){case "storage":case "tempstorage":storage.default={[i.key]:t};break}}function ou(i,e={}){let t=lu(i,e);if(t&&typeof t=="object"&&"type"in t)switch(t.type){case "value":return mp(t,e);case "arithmetic":case "arithmeticsingle":return fp(t,e);case "compare":case "union":return gp(t,e);case "function":return dp(t,e)}return t}function fp(i,e){let t=P.getLogichValue(i.leftValue,e);switch(i.type){case "arithmetic":{let n=P.getLogichValue(i.rightValue,e);switch(i.operator){case "*":return t*n;case "/":return t/n;case "+":return typeof t=="string"||typeof n=="string"?`${t}${n}`:Array.isArray(t)&&Array.isArray(n)?[...t,...n]:Array.isArray(t)?[...t,n]:Array.isArray(n)?[t,...n]:t+n;case "-":if(Array.isArray(t)&&Array.isArray(n))return t.filter(r=>!n.includes(r));if(Array.isArray(t))return t.filter(r=>r!==n);if(Array.isArray(n)){G.warn("getValueFromArithmeticOperations cannot subtract array from non-array");return}return t-n;case "%":return t%n;case "POW":return t**n;case "RANDOM":return narration.getRandomNumber(t,n);case "INTERSECTION":if(Array.isArray(t)&&Array.isArray(n))return t.filter(r=>n.includes(r));G.warn("getValueFromArithmeticOperations cannot intersect non-array values");return;default:G.warn("getValueFromArithmeticOperations unknown operator",i);return}}case "arithmeticsingle":switch(i.operator){case "INT":return Number(t);case "FLOOR":return Math.floor(t)}break}}function mp(i,e){if(i&&typeof i=="object"&&"type"in i&&i.type==="value"&&i.storageOperationType==="get")switch(i.storageType){case "storage":case "tempstorage":return i.key==="_input_value_"?narration.inputValue:storage.get(i.key);case "flagStorage":return storage.getFlag(i.key);case "label":return narration.getTimesLabelOpened(i.label);case "choice":return narration.getTimesChoiceMade(i.index);case "logic":return P.getLogichValue(i.operation,e);case "params":{let t=storage.get(`${Qs}${narration.openedLabels.length-1}`)||[];if(t&&t.length>i.key)return t[i.key];G.warn("getValue params not found");return}}return i}function gp(i,e){if(!i)return false;if(typeof i!="object"||!("type"in i))return !!i;switch(i.type){case "compare":{let t=P.getLogichValue(i.leftValue,e),n=P.getLogichValue(i.rightValue,e);switch(i.operator){case "==":return Array.isArray(t)&&Array.isArray(n)?t.length===n.length&&t.every(r=>n.includes(r)):t===n;case "!=":return Array.isArray(t)&&Array.isArray(n)?t.length!==n.length||!t.every(r=>n.includes(r)):t!==n;case "<":return typeof t=="string"&&typeof n=="string"?t.localeCompare(n)<0:Array.isArray(t)&&Array.isArray(n)?t.length<n.length:t<n;case "<=":return typeof t=="string"&&typeof n=="string"?t.localeCompare(n)<=0:Array.isArray(t)&&Array.isArray(n)?t.length<=n.length:t<=n;case ">":return typeof t=="string"&&typeof n=="string"?t.localeCompare(n)>0:Array.isArray(t)&&Array.isArray(n)?t.length>n.length:t>n;case ">=":return typeof t=="string"&&typeof n=="string"?t.localeCompare(n)>=0:Array.isArray(t)&&Array.isArray(n)?t.length>=n.length:t>=n;case "CONTAINS":return Array.isArray(t)&&Array.isArray(n)?n.every(r=>t.includes(r)):Array.isArray(t)?t.includes(n):t.toString().includes(n.toString())}break}case "value":{let t=P.getLogichValue(i,e);return Array.isArray(t)?t.length>0:t&&typeof t=="object"?Object.keys(t).length>0:!!t}case "union":return Cp(i,e)}return !!i}function Cp(i,e){if(i.unionType==="not"){let n=ou(i.condition,e);return Array.isArray(n)?n.length===0:n&&typeof n=="object"?Object.keys(n).length===0:!n}let t=n=>P.getLogichValue(n,e)||false;return i.unionType==="and"?i.conditions.every(t):i.conditions.some(t)}function yp(i,e){return Math.floor(Math.random()*(e-i+1)+i)}function lu(i,e={}){if(Array.isArray(i)||!i)return i;if(i&&typeof i=="object"&&"type"in i)switch(i.type){case "resulttocombine":return vp(i,e);case "ifelse":return P.getLogichValue(i.condition,e)?P.getLogichValue(i.then,e):P.getLogichValue(i.else,e);case "stepswitch":{let t=P.getLogichValue(i.elements,e)||[];if(t.length===0){G.error("getValueFromConditionalStatements elements.length === 0");return}switch(i.choiceType){case "random":{let n=yp(0,t.length-1);return P.getLogichValue(t[n],e)}case "loop":{let n=NarrationManagerStatic.getCurrentStepTimesCounter(i.nestedId)-1;return n>t.length-1?(n=n%t.length,P.getLogichValue(t[n],e)):P.getLogichValue(t[n],e)}case "sequential":{let n,r=NarrationManagerStatic.getCurrentStepTimesCounter(i.nestedId)-1;return i.end==="lastItem"&&(n=P.getLogichValue(t[t.length-1],e)),r>t.length-1?n:P.getLogichValue(t[r],e)}case "sequentialrandom":{let n=NarrationManagerStatic.getRandomNumber(0,t.length-1,{nestedId:i.nestedId,onceOnly:true});if(n===void 0&&i.end==="lastItem"){let r=NarrationManagerStatic.getCurrentStepTimesCounterData(i.nestedId);if(!r?.usedRandomNumbers){G.warn("getValueFromConditionalStatements randomIndexWhitExclude == undefined");return}let a=r.usedRandomNumbers[`0-${t.length-1}`];return P.getLogichValue(t[a[a.length-1]],e)}if(n===void 0){G.warn("getValueFromConditionalStatements randomIndexWhitExclude == undefined");return}return P.getLogichValue(t[n],e)}}}}return i}function gi(i,e={}){if(i.conditionalStep){let t=createExportableElement(P.getLogichValue(i.conditionalStep,e));if(t?.glueEnabled===void 0&&delete t?.glueEnabled,t?.goNextStep===void 0&&delete t?.goNextStep,t?.end===void 0&&delete t?.end,t?.choices===void 0&&delete t?.choices,t?.dialogue===void 0&&delete t?.dialogue,t?.labelToOpen===void 0&&delete t?.labelToOpen,t?.operations===void 0&&delete t?.operations,t){let n={...i,conditionalStep:void 0,...t};return gi(n,e)}else narration.dialogGlue&&(narration.dialogGlue=false);}return i}function vp(i,e){let t=i.firstItem,n=(i.secondConditionalItem??[]).flatMap(a=>Array.isArray(a)?a.map(s=>P.getLogichValue(s,e)):[P.getLogichValue(a,e)]),r=t?[t,...n]:n;if(r.length===0){G.warn("combinateResult toCheck.length === 0");return}if(typeof r[0]=="string")return Re.t(r);if(typeof r[0]=="object"){let a=r,s,o=false,l=a.map((b,f)=>{b=gi(b,e);let C=P.getLogichValue(b.dialogue,e)||"";return f===0?(s=P.getLogichValue(b.glueEnabled,e)||false,C):(typeof C=="object"&&"text"in C&&(C=`${C.character}: ${C.text}`),s===false&&o&&(C=`
|
|
45
|
+
|
|
46
|
+
${C}`),C&&(o=true),s=P.getLogichValue(b.glueEnabled,e)||false,C)}),u=P.getLogichValue(l[0],e),c=typeof u=="object"&&"character"in u?u.character:void 0,h=l.flatMap(b=>{let f;b&&typeof b=="object"&&"text"in b?f=b.text:f=b;let C;return Array.isArray(f)?C=f.map(p=>{let g=P.getLogichValue(p,e);return Re.t(`${g}`)}):C=P.getLogichValue(f,e)||"",Re.t(C)}),m=a.find(b=>b.end),d=a.find(b=>b.choices),y=false,v=false;a.length>0&&(a[0].glueEnabled&&a[0].goNextStep&&a[0].dialogue===void 0&&(narration.dialogGlue=true),y=a[a.length-1].glueEnabled,v=a.reverse().find(b=>!(b.operations&&(!b.dialogue||!b.choices)))?.goNextStep);let A=a.find(b=>b.labelToOpen),D=[];return a.forEach(b=>{b.operations&&(D=[...D,...b.operations]);}),{dialogue:c?{character:c,text:h}:h,end:m?.end,choices:d?.choices,glueEnabled:y,goNextStep:v,labelToOpen:A?.labelToOpen,operations:D}}}var Ci;(i=>{let e=new Set;function t(a){e.add(a);}i.add=t;function n(){e.clear();}i.clear=n;function r(a,s={}){let o=c=>ou(c,s)??void 0,l=lu(a,s);if(e.size===0)return o(l);let u=o;for(let c of e){let h=u;u=m=>c(m,h)??void 0;}return u(l)}i.getLogichValue=r;})(Ci||={});var Dp=Object.create,du=Object.defineProperty,Ap=Object.getOwnPropertyDescriptor,wp=Object.getOwnPropertyNames,xp=Object.getPrototypeOf,_p=Object.prototype.hasOwnProperty,cu=(i=>typeof Ot<"u"?Ot:typeof Proxy<"u"?new Proxy(i,{get:(e,t)=>(typeof Ot<"u"?Ot:e)[t]}):i)(function(i){if(typeof Ot<"u")return Ot.apply(this,arguments);throw Error('Dynamic require of "'+i+'" is not supported')}),fu=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports),Op=(i,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of wp(e))!_p.call(i,r)&&r!==t&&du(i,r,{get:()=>e[r],enumerable:!(n=Ap(e,r))||n.enumerable});return i},Pp=(i,e,t)=>(t=i!=null?Dp(xp(i)):{},Op(du(t,"default",{value:i,enumerable:true}),i)),Tp=fu((i,e)=>{(function(t,n){typeof i=="object"?e.exports=i=n():typeof define=="function"&&define.amd?define([],n):t.CryptoJS=n();})(i,function(){var t=t||(function(n,r){var a;if(typeof window<"u"&&window.crypto&&(a=window.crypto),typeof self<"u"&&self.crypto&&(a=self.crypto),typeof globalThis<"u"&&globalThis.crypto&&(a=globalThis.crypto),!a&&typeof window<"u"&&window.msCrypto&&(a=window.msCrypto),!a&&typeof global<"u"&&global.crypto&&(a=global.crypto),!a&&typeof cu=="function")try{a=cu("crypto");}catch{}var s=function(){if(a){if(typeof a.getRandomValues=="function")try{return a.getRandomValues(new Uint32Array(1))[0]}catch{}if(typeof a.randomBytes=="function")try{return a.randomBytes(4).readInt32LE()}catch{}}throw new Error("Native crypto module could not be used to get secure random number.")},o=Object.create||(function(){function b(){}return function(f){var C;return b.prototype=f,C=new b,b.prototype=null,C}})(),l={},u=l.lib={},c=u.Base=(function(){return {extend:function(b){var f=o(this);return b&&f.mixIn(b),(!f.hasOwnProperty("init")||this.init===f.init)&&(f.init=function(){f.$super.init.apply(this,arguments);}),f.init.prototype=f,f.$super=this,f},create:function(){var b=this.extend();return b.init.apply(b,arguments),b},init:function(){},mixIn:function(b){for(var f in b)b.hasOwnProperty(f)&&(this[f]=b[f]);b.hasOwnProperty("toString")&&(this.toString=b.toString);},clone:function(){return this.init.prototype.extend(this)}}})(),h=u.WordArray=c.extend({init:function(b,f){b=this.words=b||[],f!=r?this.sigBytes=f:this.sigBytes=b.length*4;},toString:function(b){return (b||d).stringify(this)},concat:function(b){var f=this.words,C=b.words,p=this.sigBytes,g=b.sigBytes;if(this.clamp(),p%4)for(var S=0;S<g;S++){var _=C[S>>>2]>>>24-S%4*8&255;f[p+S>>>2]|=_<<24-(p+S)%4*8;}else for(var w=0;w<g;w+=4)f[p+w>>>2]=C[w>>>2];return this.sigBytes+=g,this},clamp:function(){var b=this.words,f=this.sigBytes;b[f>>>2]&=4294967295<<32-f%4*8,b.length=n.ceil(f/4);},clone:function(){var b=c.clone.call(this);return b.words=this.words.slice(0),b},random:function(b){for(var f=[],C=0;C<b;C+=4)f.push(s());return new h.init(f,b)}}),m=l.enc={},d=m.Hex={stringify:function(b){for(var f=b.words,C=b.sigBytes,p=[],g=0;g<C;g++){var S=f[g>>>2]>>>24-g%4*8&255;p.push((S>>>4).toString(16)),p.push((S&15).toString(16));}return p.join("")},parse:function(b){for(var f=b.length,C=[],p=0;p<f;p+=2)C[p>>>3]|=parseInt(b.substr(p,2),16)<<24-p%8*4;return new h.init(C,f/2)}},y=m.Latin1={stringify:function(b){for(var f=b.words,C=b.sigBytes,p=[],g=0;g<C;g++){var S=f[g>>>2]>>>24-g%4*8&255;p.push(String.fromCharCode(S));}return p.join("")},parse:function(b){for(var f=b.length,C=[],p=0;p<f;p++)C[p>>>2]|=(b.charCodeAt(p)&255)<<24-p%4*8;return new h.init(C,f)}},v=m.Utf8={stringify:function(b){try{return decodeURIComponent(escape(y.stringify(b)))}catch{throw new Error("Malformed UTF-8 data")}},parse:function(b){return y.parse(unescape(encodeURIComponent(b)))}},A=u.BufferedBlockAlgorithm=c.extend({reset:function(){this._data=new h.init,this._nDataBytes=0;},_append:function(b){typeof b=="string"&&(b=v.parse(b)),this._data.concat(b),this._nDataBytes+=b.sigBytes;},_process:function(b){var f,C=this._data,p=C.words,g=C.sigBytes,S=this.blockSize,_=S*4,w=g/_;b?w=n.ceil(w):w=n.max((w|0)-this._minBufferSize,0);var N=w*S,K=n.min(N*4,g);if(N){for(var z=0;z<N;z+=S)this._doProcessBlock(p,z);f=p.splice(0,N),C.sigBytes-=K;}return new h.init(f,K)},clone:function(){var b=c.clone.call(this);return b._data=this._data.clone(),b},_minBufferSize:0});u.Hasher=A.extend({cfg:c.extend(),init:function(b){this.cfg=this.cfg.extend(b),this.reset();},reset:function(){A.reset.call(this),this._doReset();},update:function(b){return this._append(b),this._process(),this},finalize:function(b){b&&this._append(b);var f=this._doFinalize();return f},blockSize:16,_createHelper:function(b){return function(f,C){return new b.init(C).finalize(f)}},_createHmacHelper:function(b){return function(f,C){return new D.HMAC.init(b,C).finalize(f)}}});var D=l.algo={};return l})(Math);return t});}),Fp=fu((i,e)=>{(function(t,n){typeof i=="object"?e.exports=i=n(Tp()):typeof define=="function"&&define.amd?define(["./core"],n):n(t.CryptoJS);})(i,function(t){return (function(){var n=t,r=n.lib,a=r.WordArray,s=r.Hasher,o=n.algo,l=[],u=o.SHA1=s.extend({_doReset:function(){this._hash=new a.init([1732584193,4023233417,2562383102,271733878,3285377520]);},_doProcessBlock:function(c,h){for(var m=this._hash.words,d=m[0],y=m[1],v=m[2],A=m[3],D=m[4],b=0;b<80;b++){if(b<16)l[b]=c[h+b]|0;else {var f=l[b-3]^l[b-8]^l[b-14]^l[b-16];l[b]=f<<1|f>>>31;}var C=(d<<5|d>>>27)+D+l[b];b<20?C+=(y&v|~y&A)+1518500249:b<40?C+=(y^v^A)+1859775393:b<60?C+=(y&v|y&A|v&A)-1894007588:C+=(y^v^A)-899497514,D=A,A=v,v=y<<30|y>>>2,y=d,d=C;}m[0]=m[0]+d|0,m[1]=m[1]+y|0,m[2]=m[2]+v|0,m[3]=m[3]+A|0,m[4]=m[4]+D|0;},_doFinalize:function(){var c=this._data,h=c.words,m=this._nDataBytes*8,d=c.sigBytes*8;return h[d>>>5]|=128<<24-d%32,h[(d+64>>>9<<4)+14]=Math.floor(m/4294967296),h[(d+64>>>9<<4)+15]=m,c.sigBytes=h.length*4,this._process(),this._hash},clone:function(){var c=s.clone.call(this);return c._hash=this._hash.clone(),c}});n.SHA1=s._createHelper(u),n.HmacSHA1=s._createHmacHelper(u);})(),t.SHA1});}),hu="___param___",ae;(i=>(i.log=(e,...t)=>console.log(`[Pixi\u2019VN Json] ${e}`,...t),i.warn=(e,...t)=>console.warn(`[Pixi\u2019VN Json] ${e}`,...t),i.error=(e,...t)=>console.error(`[Pixi\u2019VN Json] ${e}`,...t),i.info=(e,...t)=>console.info(`[Pixi\u2019VN Json] ${e}`,...t)))(ae||={});var Np=class ${static init(e){e.loadAssets&&($._loadAssets=e.loadAssets),e.soundOperation&&($._soundOperation=e.soundOperation),e.imageOperation&&($._imageOperation=e.imageOperation),e.videoOperation&&($._videoOperation=e.videoOperation),e.imageContainerOperation&&($._imageContainerOperation=e.imageContainerOperation),e.textOperation&&($._textOperation=e.textOperation),e.canvasElementOperation&&($._canvasElementOperation=e.canvasElementOperation),e.setStorageValue&&($._setStorageValue=e.setStorageValue),e.setInitialStorageValue&&($._setInitialStorageValue=e.setInitialStorageValue),e.narrationOperation&&($._narrationOperation=e.narrationOperation),e.effectOperation&&($._effectOperation=e.effectOperation),e.animateOperation&&($._animateOperation=e.animateOperation),e.canvasOperation&&($._canvasOperation=e.canvasOperation),e.getLogichValue&&($._getLogichValue=e.getLogichValue),e.getConditionalStep&&($._getConditionalStep=e.getConditionalStep);}static _loadAssets=()=>{};static get loadAssets(){return $._loadAssets}static _soundOperation=()=>{throw ae.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get soundOperation(){return $._soundOperation}static _imageOperation=()=>{throw ae.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get imageOperation(){return $._imageOperation}static _videoOperation=()=>{throw ae.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get videoOperation(){return $._videoOperation}static _imageContainerOperation=()=>{throw ae.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get imageContainerOperation(){return $._imageContainerOperation}static _textOperation=()=>{throw ae.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get textOperation(){return $._textOperation}static _canvasElementOperation=()=>{throw ae.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get canvasElementOperation(){return $._canvasElementOperation}static _setStorageValue=()=>{throw ae.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get setStorageValue(){return $._setStorageValue}static _setInitialStorageValue=()=>{throw ae.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get setInitialStorageValue(){return $._setInitialStorageValue}static _narrationOperation=()=>{throw ae.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get narrationOperation(){return $._narrationOperation}static _effectOperation=()=>{throw ae.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get effectOperation(){return $._effectOperation}static _animateOperation=()=>{throw ae.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get animateOperation(){return $._animateOperation}static _canvasOperation=()=>{throw ae.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get canvasOperation(){return $._canvasOperation}static _getLogichValue=()=>{throw ae.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get getLogichValue(){return $._getLogichValue}static _getConditionalStep=()=>{throw ae.error("An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue."),new PixiError("invalid_usage","An error occurred! pixi-vn-json was not initialized. Please contact the Pixi'VN team to report the issue.")};static get getConditionalStep(){return $._getConditionalStep}};function Ip(i,e){if(e&&typeof e=="object"&&typeof i.functionName=="string"&&i.functionName in e){let t=e[i.functionName];if(typeof t=="function"){let n=i.args.map(r=>Np.getLogichValue(r,e));return t(...n)}else ae.warn(`getLogichValue function ${i.functionName} not found in props`);}}function Vp(i,e={}){let t="";return i.values.forEach(n=>{if(typeof n=="string")t+=n;else {let r=P.getLogichValue(n,e);t+=`${r}`;}}),t}async function mu(i,e,t){let n=P.getLogichValue(i,e);if(n)switch(n.type){case "sound":P.soundOperation(n);break;case "assets":case "bundle":await P.loadAssets(n);break;case "image":await P.imageOperation(n);break;case "video":await P.videoOperation(n);break;case "imagecontainer":await P.imageContainerOperation(n);break;case "text":await P.textOperation(n);break;case "canvaselement":await P.canvasElementOperation(n);break;case "canvas":P.canvasOperation(n);break;case "value":P.setStorageValue(n,e);break;case "operationtoconvert":if(t){let r=Vp(n,e),a=await t(r);a&&await mu(a,e,t);}break;case "input":case "dialogue":P.narrationOperation(n);break;case "shake":await P.effectOperation(n);break;case "animate":case "animate-sequence":P.animateOperation(n);break;case "function":await Ip(n,e);break}}function pu(i){let e=P.getLogichValue(i,{});e&&e.type==="value"&&e.storageOperationType==="set"&&(e.storageType==="storage"||e.storageType==="tempstorage")&&P.setInitialStorageValue(e);}var kp=Pp(Fp()),Rp=class extends LabelAbstract{constructor(i,e,t,n={}){t||(t={}),t.onLoadingLabel=async()=>{for(let r of e){let a;if(typeof r=="function"?a=r():a=r,a=P.getConditionalStep(a),a.operations)try{let s=a.operations.map(o=>P.loadAssets(o));await Promise.all(s);}catch(s){ae.error("The operation in the onLoadingLabel function of the label has an error:",s);}}},super(i,t),this._steps=e,this.operationStringConvert=n.operationStringConvert,this.skipEmptyDialogs=n.skipEmptyDialogs||false;}_steps;get steps(){return this._steps.map(i=>this.stepConverter(i))}get stepCount(){return this._steps.length}getStepById(i){if(i<0||i>=this._steps.length)return;let e=this._steps[i];return this.stepConverter(e)}operationStringConvert;skipEmptyDialogs=false;getStepSha(i){if(i<0||i>=this.steps.length)return;let e=this._steps[i];return (0, kp.default)(e.toString().toLocaleLowerCase()).toString()}getDialogueText(i,e){let t="";if(Array.isArray(i)){let n=[];i.forEach(r=>{if(typeof r=="string")n.push(r);else if(r&&typeof r=="object"){let a=P.getLogichValue(r,e);a?(a&&!Array.isArray(a)&&typeof a=="object"&&(a=P.getLogichValue(a,e)||""),Array.isArray(a)?n=n.map(s=>`${s}`).concat(a):n.push(`${a}`)):n.push(`${r}`);}else n.push(`${r}`);}),t=n;}else {let n=P.getLogichValue(i,e);n&&!Array.isArray(n)&&typeof n=="object"&&(n=P.getLogichValue(n,e)),n&&Array.isArray(n)?t=n.map(r=>`${r}`):t=`${n}`;}return t}getDialogue(i,e){if(i==null)return;let t=P.getLogichValue(i,e);return t==null?`${t}`:typeof t=="object"&&"character"in t&&"text"in t?{character:t.character,text:Re.t(this.getDialogueText(t.text,e))}:Re.t(this.getDialogueText(t,e))}getChoices(i,e){return P.getLogichValue(i,e)?.map(t=>P.getLogichValue(t,e)).filter(t=>t!==void 0)}stepConverter(i){return async e=>{let t=typeof i=="function"?i():i;t=createExportableElement(t),t=P.getConditionalStep(t,e);let n=this.operationStringConvert?m=>this.operationStringConvert(m,t,e):void 0,{operations:r=[]}=t;for(let m of r)await mu(m,e,n);let{labelToOpen:a=[]}=t,s=this.getChoices(t.choices,e),o=P.getLogichValue(t.glueEnabled,e),l=this.getDialogue(t.dialogue,e),u=[];Array.isArray(a)||(a=[a]),a.forEach(m=>{let d=P.getLogichValue(m,e);d&&u.push(d);});let c=P.getLogichValue(t.goNextStep,e),h=P.getLogichValue(t.end,e);if(s){let m=s.map(d=>{let y="";if(Array.isArray(d.text)){let v=[];d.text.forEach(A=>{if(typeof A=="string")v.push(Re.t(A));else if(A&&typeof A=="object"){let D=P.getLogichValue(A,e);D&&!Array.isArray(D)&&typeof D=="object"&&(D=P.getLogichValue(D,e)||""),D&&(Array.isArray(D)?v=v.concat(Re.t(D)):v.push(Re.t(D)));}}),y=v;}else typeof d.text=="string"&&(y=Re.t(d.text));return {label:d.label,text:y,props:d.props,type:d.type,oneTime:d.oneTime,onlyHaveNoChoice:d.onlyHaveNoChoice,autoSelect:d.autoSelect}});narration.choices=m;}else narration.choices=void 0;l!==void 0&&(narration.dialogue=l,this.skipEmptyDialogs&&typeof l=="string"&&(l===""||RegExp(/^\s+$/).test(l))&&(c=true)),o?narration.dialogGlue=true:o===false&&(narration.dialogGlue=false);for(let m of u){let d=m.label;typeof d=="object"&&(d=P.getLogichValue(d,e)||"");let y=m.params?.map(v=>P.getLogichValue(v,e));e={...e,...m.props},m.type==="jump"?(narration.openedLabels.length>0&&narration.closeCurrentLabel(),storage.setTempVariable(`${hu}${narration.openedLabels.length}`,y),await narration.call(d,e)):(storage.setTempVariable(`${hu}${narration.openedLabels.length}`,y),await narration.call(d,e));}h==="game_end"?(narration.closeAllLabels(),await narration.continue(e,{runNow:true})):h==="label_end"&&narration.closeCurrentLabel(),c&&await narration.continue(e,{runNow:true});}}};async function Ny(i,e={}){if(!Array.isArray(i))if(typeof i=="object"||typeof i=="string")i=[i];else {ae.error("Error parsing imported Pixi'VN JSON: data is not an object");return}let t=i.map(a=>{if(typeof a=="string")try{return JSON.parse(a)}catch(s){return ae.error("Error parsing imported Pixi'VN JSON",s),{}}return a}),n=t.map(async a=>{if(a.initialOperations)for(let s of a.initialOperations)s.type==="value"&&(typeof s.value!="object"||!s.value||!("type"in s.value))&&pu(s);return Promise.resolve()});await Promise.all(n);let r=t.map(async a=>{if(a.initialOperations)for(let s of a.initialOperations)(s.type!=="value"||s.type==="value"&&typeof s.value=="object"&&s.value&&"type"in s.value)&&pu(s);if(a.labels){let s=a.labels;for(let o in s)try{let l=s[o],u=new Rp(o,l,void 0,e);RegisteredLabels.add(u);}catch(l){ae.error(`Error creating JSON label ${o}`,l);}}return Promise.resolve()});await Promise.all(r);}function By(){P.init({animateOperation:tu,canvasElementOperation:Zl,canvasOperation:Ql,effectOperation:eu,imageContainerOperation:Xl,imageOperation:Ul,textOperation:Yl,narrationOperation:nu,loadAssets:zl,soundOperation:iu,videoOperation:Kl,setStorageValue:su,setInitialStorageValue:au,getLogichValue:Ci.getLogichValue,getConditionalStep:gi});}var W;(r=>(r.log=(a,...s)=>console.log(`[Pixi\u2019VN Ink] ${a}`,...s),r.warn=(a,...s)=>console.warn(`[Pixi\u2019VN Ink] ${a}`,...s),r.error=(a,...s)=>console.error(`[Pixi\u2019VN Ink] ${a}`,...s),r.info=(a,...s)=>console.info(`[Pixi\u2019VN Ink] ${a}`,...s)))(W||={});var jp=/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,Bp=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,Wp=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/,ea={Space_Separator:jp,ID_Start:Bp,ID_Continue:Wp},se={isSpaceSeparator(i){return typeof i=="string"&&ea.Space_Separator.test(i)},isIdStartChar(i){return typeof i=="string"&&(i>="a"&&i<="z"||i>="A"&&i<="Z"||i==="$"||i==="_"||ea.ID_Start.test(i))},isIdContinueChar(i){return typeof i=="string"&&(i>="a"&&i<="z"||i>="A"&&i<="Z"||i>="0"&&i<="9"||i==="$"||i==="_"||i==="\u200C"||i==="\u200D"||ea.ID_Continue.test(i))},isDigit(i){return typeof i=="string"&&/[0-9]/.test(i)},isHexDigit(i){return typeof i=="string"&&/[0-9A-Fa-f]/.test(i)}},na,De,ut,vi,mt,He,ce,sa,wn,qp=function(e,t){na=String(e),De="start",ut=[],vi=0,mt=1,He=0,ce=void 0,sa=void 0,wn=void 0;do ce=Mp(),Jp[De]();while(ce.type!=="eof");return typeof t=="function"?ia({"":wn},"",t):wn};function ia(i,e,t){let n=i[e];if(n!=null&&typeof n=="object")if(Array.isArray(n))for(let r=0;r<n.length;r++){let a=String(r),s=ia(n,a,t);s===void 0?delete n[a]:Object.defineProperty(n,a,{value:s,writable:true,enumerable:true,configurable:true});}else for(let r in n){let a=ia(n,r,t);a===void 0?delete n[r]:Object.defineProperty(n,r,{value:a,writable:true,enumerable:true,configurable:true});}return t.call(i,e,n)}var k,V,An,lt,j;function Mp(){for(k="default",V="",An=false,lt=1;;){j=ct();let i=Cu[k]();if(i)return i}}function ct(){if(na[vi])return String.fromCodePoint(na.codePointAt(vi))}function x(){let i=ct();return i===`
|
|
47
|
+
`?(mt++,He=0):i?He+=i.length:He++,i&&(vi+=i.length),i}var Cu={default(){switch(j){case " ":case "\v":case "\f":case " ":case "\xA0":case "\uFEFF":case `
|
|
48
|
+
`:case "\r":case "\u2028":case "\u2029":x();return;case "/":x(),k="comment";return;case void 0:return x(),Z("eof")}if(se.isSpaceSeparator(j)){x();return}return Cu[De]()},comment(){switch(j){case "*":x(),k="multiLineComment";return;case "/":x(),k="singleLineComment";return}throw Q(x())},multiLineComment(){switch(j){case "*":x(),k="multiLineCommentAsterisk";return;case void 0:throw Q(x())}x();},multiLineCommentAsterisk(){switch(j){case "*":x();return;case "/":x(),k="default";return;case void 0:throw Q(x())}x(),k="multiLineComment";},singleLineComment(){switch(j){case `
|
|
49
|
+
`:case "\r":case "\u2028":case "\u2029":x(),k="default";return;case void 0:return x(),Z("eof")}x();},value(){switch(j){case "{":case "[":return Z("punctuator",x());case "n":return x(),Pt("ull"),Z("null",null);case "t":return x(),Pt("rue"),Z("boolean",true);case "f":return x(),Pt("alse"),Z("boolean",false);case "-":case "+":x()==="-"&&(lt=-1),k="sign";return;case ".":V=x(),k="decimalPointLeading";return;case "0":V=x(),k="zero";return;case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":V=x(),k="decimalInteger";return;case "I":return x(),Pt("nfinity"),Z("numeric",1/0);case "N":return x(),Pt("aN"),Z("numeric",NaN);case '"':case "'":An=x()==='"',V="",k="string";return}throw Q(x())},identifierNameStartEscape(){if(j!=="u")throw Q(x());x();let i=ra();switch(i){case "$":case "_":break;default:if(!se.isIdStartChar(i))throw gu();break}V+=i,k="identifierName";},identifierName(){switch(j){case "$":case "_":case "\u200C":case "\u200D":V+=x();return;case "\\":x(),k="identifierNameEscape";return}if(se.isIdContinueChar(j)){V+=x();return}return Z("identifier",V)},identifierNameEscape(){if(j!=="u")throw Q(x());x();let i=ra();switch(i){case "$":case "_":case "\u200C":case "\u200D":break;default:if(!se.isIdContinueChar(i))throw gu();break}V+=i,k="identifierName";},sign(){switch(j){case ".":V=x(),k="decimalPointLeading";return;case "0":V=x(),k="zero";return;case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":V=x(),k="decimalInteger";return;case "I":return x(),Pt("nfinity"),Z("numeric",lt*(1/0));case "N":return x(),Pt("aN"),Z("numeric",NaN)}throw Q(x())},zero(){switch(j){case ".":V+=x(),k="decimalPoint";return;case "e":case "E":V+=x(),k="decimalExponent";return;case "x":case "X":V+=x(),k="hexadecimal";return}return Z("numeric",lt*0)},decimalInteger(){switch(j){case ".":V+=x(),k="decimalPoint";return;case "e":case "E":V+=x(),k="decimalExponent";return}if(se.isDigit(j)){V+=x();return}return Z("numeric",lt*Number(V))},decimalPointLeading(){if(se.isDigit(j)){V+=x(),k="decimalFraction";return}throw Q(x())},decimalPoint(){switch(j){case "e":case "E":V+=x(),k="decimalExponent";return}if(se.isDigit(j)){V+=x(),k="decimalFraction";return}return Z("numeric",lt*Number(V))},decimalFraction(){switch(j){case "e":case "E":V+=x(),k="decimalExponent";return}if(se.isDigit(j)){V+=x();return}return Z("numeric",lt*Number(V))},decimalExponent(){switch(j){case "+":case "-":V+=x(),k="decimalExponentSign";return}if(se.isDigit(j)){V+=x(),k="decimalExponentInteger";return}throw Q(x())},decimalExponentSign(){if(se.isDigit(j)){V+=x(),k="decimalExponentInteger";return}throw Q(x())},decimalExponentInteger(){if(se.isDigit(j)){V+=x();return}return Z("numeric",lt*Number(V))},hexadecimal(){if(se.isHexDigit(j)){V+=x(),k="hexadecimalInteger";return}throw Q(x())},hexadecimalInteger(){if(se.isHexDigit(j)){V+=x();return}return Z("numeric",lt*Number(V))},string(){switch(j){case "\\":x(),V+=Gp();return;case '"':if(An)return x(),Z("string",V);V+=x();return;case "'":if(!An)return x(),Z("string",V);V+=x();return;case `
|
|
50
|
+
`:case "\r":throw Q(x());case "\u2028":case "\u2029":Hp(j);break;case void 0:throw Q(x())}V+=x();},start(){switch(j){case "{":case "[":return Z("punctuator",x())}k="value";},beforePropertyName(){switch(j){case "$":case "_":V=x(),k="identifierName";return;case "\\":x(),k="identifierNameStartEscape";return;case "}":return Z("punctuator",x());case '"':case "'":An=x()==='"',k="string";return}if(se.isIdStartChar(j)){V+=x(),k="identifierName";return}throw Q(x())},afterPropertyName(){if(j===":")return Z("punctuator",x());throw Q(x())},beforePropertyValue(){k="value";},afterPropertyValue(){switch(j){case ",":case "}":return Z("punctuator",x())}throw Q(x())},beforeArrayValue(){if(j==="]")return Z("punctuator",x());k="value";},afterArrayValue(){switch(j){case ",":case "]":return Z("punctuator",x())}throw Q(x())},end(){throw Q(x())}};function Z(i,e){return {type:i,value:e,line:mt,column:He}}function Pt(i){for(let e of i){if(ct()!==e)throw Q(x());x();}}function Gp(){switch(ct()){case "b":return x(),"\b";case "f":return x(),"\f";case "n":return x(),`
|
|
51
|
+
`;case "r":return x(),"\r";case "t":return x()," ";case "v":return x(),"\v";case "0":if(x(),se.isDigit(ct()))throw Q(x());return "\0";case "x":return x(),$p();case "u":return x(),ra();case `
|
|
52
|
+
`:case "\u2028":case "\u2029":return x(),"";case "\r":return x(),ct()===`
|
|
53
|
+
`&&x(),"";case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":throw Q(x());case void 0:throw Q(x())}return x()}function $p(){let i="",e=ct();if(!se.isHexDigit(e)||(i+=x(),e=ct(),!se.isHexDigit(e)))throw Q(x());return i+=x(),String.fromCodePoint(parseInt(i,16))}function ra(){let i="",e=4;for(;e-- >0;){let t=ct();if(!se.isHexDigit(t))throw Q(x());i+=x();}return String.fromCodePoint(parseInt(i,16))}var Jp={start(){if(ce.type==="eof")throw Tt();ta();},beforePropertyName(){switch(ce.type){case "identifier":case "string":sa=ce.value,De="afterPropertyName";return;case "punctuator":yi();return;case "eof":throw Tt()}},afterPropertyName(){if(ce.type==="eof")throw Tt();De="beforePropertyValue";},beforePropertyValue(){if(ce.type==="eof")throw Tt();ta();},beforeArrayValue(){if(ce.type==="eof")throw Tt();if(ce.type==="punctuator"&&ce.value==="]"){yi();return}ta();},afterPropertyValue(){if(ce.type==="eof")throw Tt();switch(ce.value){case ",":De="beforePropertyName";return;case "}":yi();}},afterArrayValue(){if(ce.type==="eof")throw Tt();switch(ce.value){case ",":De="beforeArrayValue";return;case "]":yi();}},end(){}};function ta(){let i;switch(ce.type){case "punctuator":switch(ce.value){case "{":i={};break;case "[":i=[];break}break;case "null":case "boolean":case "numeric":case "string":i=ce.value;break}if(wn===void 0)wn=i;else {let e=ut[ut.length-1];Array.isArray(e)?e.push(i):Object.defineProperty(e,sa,{value:i,writable:true,enumerable:true,configurable:true});}if(i!==null&&typeof i=="object")ut.push(i),Array.isArray(i)?De="beforeArrayValue":De="beforePropertyName";else {let e=ut[ut.length-1];e==null?De="end":Array.isArray(e)?De="afterArrayValue":De="afterPropertyValue";}}function yi(){ut.pop();let i=ut[ut.length-1];i==null?De="end":Array.isArray(i)?De="afterArrayValue":De="afterPropertyValue";}function Q(i){return bi(i===void 0?`JSON5: invalid end of input at ${mt}:${He}`:`JSON5: invalid character '${yu(i)}' at ${mt}:${He}`)}function Tt(){return bi(`JSON5: invalid end of input at ${mt}:${He}`)}function gu(){return He-=5,bi(`JSON5: invalid identifier character at ${mt}:${He}`)}function Hp(i){console.warn(`JSON5: '${yu(i)}' in strings is not valid ECMAScript; consider escaping`);}function yu(i){let e={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(e[i])return e[i];if(i<" "){let t=i.charCodeAt(0).toString(16);return "\\x"+("00"+t).substring(t.length)}return i}function bi(i){let e=new SyntaxError(i);return e.lineNumber=mt,e.columnNumber=He,e}var zp=function(e,t,n){let r=[],a="",s,o,l="",u;if(t!=null&&typeof t=="object"&&!Array.isArray(t)&&(n=t.space,u=t.quote,t=t.replacer),typeof t=="function")o=t;else if(Array.isArray(t)){s=[];for(let v of t){let A;typeof v=="string"?A=v:(typeof v=="number"||v instanceof String||v instanceof Number)&&(A=String(v)),A!==void 0&&s.indexOf(A)<0&&s.push(A);}}return n instanceof Number?n=Number(n):n instanceof String&&(n=String(n)),typeof n=="number"?n>0&&(n=Math.min(10,Math.floor(n)),l=" ".substr(0,n)):typeof n=="string"&&(l=n.substr(0,10)),c("",{"":e});function c(v,A){let D=A[v];switch(D!=null&&(typeof D.toJSON5=="function"?D=D.toJSON5(v):typeof D.toJSON=="function"&&(D=D.toJSON(v))),o&&(D=o.call(A,v,D)),D instanceof Number?D=Number(D):D instanceof String?D=String(D):D instanceof Boolean&&(D=D.valueOf()),D){case null:return "null";case true:return "true";case false:return "false"}if(typeof D=="string")return h(D);if(typeof D=="number")return String(D);if(typeof D=="object")return Array.isArray(D)?y(D):m(D)}function h(v){let A={"'":.1,'"':.2},D={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"},b="";for(let C=0;C<v.length;C++){let p=v[C];switch(p){case "'":case '"':A[p]++,b+=p;continue;case "\0":if(se.isDigit(v[C+1])){b+="\\x00";continue}}if(D[p]){b+=D[p];continue}if(p<" "){let g=p.charCodeAt(0).toString(16);b+="\\x"+("00"+g).substring(g.length);continue}b+=p;}let f=u||Object.keys(A).reduce((C,p)=>A[C]<A[p]?C:p);return b=b.replace(new RegExp(f,"g"),D[f]),f+b+f}function m(v){if(r.indexOf(v)>=0)throw TypeError("Converting circular structure to JSON5");r.push(v);let A=a;a=a+l;let D=s||Object.keys(v),b=[];for(let C of D){let p=c(C,v);if(p!==void 0){let g=d(C)+":";l!==""&&(g+=" "),g+=p,b.push(g);}}let f;if(b.length===0)f="{}";else {let C;if(l==="")C=b.join(","),f="{"+C+"}";else {let p=`,
|
|
54
|
+
`+a;C=b.join(p),f=`{
|
|
55
|
+
`+a+C+`,
|
|
56
|
+
`+A+"}";}}return r.pop(),a=A,f}function d(v){if(v.length===0)return h(v);let A=String.fromCodePoint(v.codePointAt(0));if(!se.isIdStartChar(A))return h(v);for(let D=A.length;D<v.length;D++)if(!se.isIdContinueChar(String.fromCodePoint(v.codePointAt(D))))return h(v);return v}function y(v){if(r.indexOf(v)>=0)throw TypeError("Converting circular structure to JSON5");r.push(v);let A=a;a=a+l;let D=[];for(let f=0;f<v.length;f++){let C=c(String(f),v);D.push(C!==void 0?C:"null");}let b;if(D.length===0)b="[]";else if(l==="")b="["+D.join(",")+"]";else {let f=`,
|
|
57
|
+
`+a,C=D.join(f);b=`[
|
|
58
|
+
`+a+C+`,
|
|
59
|
+
`+A+"]";}return r.pop(),a=A,b}},Up={parse:qp,stringify:zp},Kp=Up,xn=Kp;var bu="\xA7SPACE\xA7",Su="\xA7DOUBLE_QUOTES\xA7",Eu="\xA7QUOTES\xA7",Du="SPECIAL_\xA7QUOTES\xA7",Au="\xA7CURLY_BRACKETS1\xA7",Xp="\xA7INK_VAR\xA7",wu="\xA7CURLY_BRACKETS2\xA7",T;(f=>{let i=[],e=[];async function t(C,p){for(let g=0;g<i.length;g++)try{let{validation:S}=i[g].opts;if(S instanceof RegExp){if(!S.test(C.join(" ")))continue}else if(S instanceof ZodType&&!S.safeParse(C).success)continue;let _=await i[g].fn(C,p,h);if(_===!0||typeof _=="string")return _}catch{}return false}function n(C,p={name:"custom-command",validation:/^/}){i.unshift({fn:C,opts:p});}f.add=n;function r(){return [...e.map(C=>C.opts),...i.map(C=>C.opts)]}f.info=r;function a(C,p){e.unshift({fn:C,opts:p});}f.addMapper=a;function s(){i.length=0;}f.clear=s;function o(){e.length=0;}f.clearMappers=o;async function l(C,p,g){try{let S=u(C),_=await t(S,g);return _===!0?void 0:typeof _=="string"?(_.startsWith("#")&&(_=_.substring(1)),await f.run(_,p,g)):c(S,p)}catch(S){throw W.error("Error parsing ink hashtag-command",C),S}}f.run=l;function u(C,p){if(C=C.replaceAll('\\"',Su),C=C.replaceAll("\\'",Eu),C=C.replaceAll("\\`",Du),C=C.replaceAll("\\{",Au),C=C.replaceAll("\\}",wu),p?.mergeInkVariables){let w;do w=C,C=C.replace(/\{[^{}:]*\}/g,Xp);while(C!==w)}C=C.replaceAll("{"," { "),C=C.replaceAll("}"," } "),C=C.replaceAll(Au,"{"),C=C.replaceAll(wu,"}");let g=[],S,_="";for(let w=0;w<C.length;w++){let N=C[w];N==='"'||N==="'"||N==="`"?S===void 0?(g.push(_),_="",S=N,_+=N):S===N?(S=void 0,_+=N,g.push(_),_=""):_+=N:_+=N;}return _!==""&&g.push(_),g.forEach((w,N)=>{N%2===1&&(g[N]=w.replaceAll(" ",bu));}),C=g.join(""),g=C.split(" ").filter(w=>w!==""),g=g.map(w=>w.replaceAll(bu," ").replaceAll(Su,'"').replaceAll(Eu,"'").replaceAll(Du,"`")),g=v(g),g=g.flatMap(w=>b(w)),g=g.map(w=>w.startsWith('"')&&w.endsWith('"')||w.startsWith("'")&&w.endsWith("'")||w.startsWith("`")&&w.endsWith("`")?w.slice(1,-1):w),g}f.convertTagTolist=u;function c(C,p,g){for(let S of e){let{validation:_}=S.opts,w=false;if(_ instanceof RegExp?w=_.test(C.join(" ")):_ instanceof ZodType&&(w=_.safeParse(C).success),w)return S.fn(C,p)}g?.silent||W.error("The operation is not valid",C);}f.convertOperation=c;function h(C){return m(C)}f.convertListStringToObj=h;function m(C){if(C.length===0)return {};if(C.length%2!==0)throw W.error("The props list must have a pair number of elements",C),new Error("The props list must have a pair number of elements");let p="{";C.forEach((g,S)=>{if(S%2===0)p+=`"${g}": `;else {switch(g){case "null":case "undefined":case "true":case "false":p+=`${g}`;break;default:y(g)?(g=d(g),p+=`"${g}"`):g.startsWith("{")&&g.endsWith("}")?p+=`${g}`:g.startsWith('"')&&g.endsWith('"')?p+=`${g}`:Number.isNaN(parseFloat(g))?p+=`"${g}"`:p+=`${g}`;}S<C.length-1&&(p+=", ");}}),p+="}";try{return xn.parse(p)}catch(g){throw W.error("Error parsing ink json",p),g}}function d(C){return C.startsWith('"')&&C.endsWith('"')||C.startsWith("'")&&C.endsWith("'")||C.startsWith("`")&&C.endsWith("`")?C.substring(1,C.length-1):C}function y(C){return !!(C.startsWith('"')&&C.endsWith('"')||C.startsWith("'")&&C.endsWith("'")||C.startsWith("`")&&C.endsWith("`"))}function v(C){return A(C).tokens}f.mergeJsonBlocks=v;function A(C){let p=[],g=false;for(let S=0;S<C.length;S++){let _=C[S];if(_!=="{"){p.push(_);continue}let w=D(C,S);if(w===-1){p.push(_);continue}let N=A(C.slice(S+1,w)),K=["{",...N.tokens,"}"],z=K.join(" ");if(!N.hasInvalidMatchedBlock)try{xn.parse(z),p.push(z),S=w;continue}catch{}g=true,p.push(...K),S=w;}return {tokens:p,hasInvalidMatchedBlock:g}}function D(C,p){let g=0;for(let S=p;S<C.length;S++)if(C[S]==="{")g++;else if(C[S]==="}"&&(g--,g===0))return S;return -1}function b(C){if(C==="["||C==="]")return [C];let p=0,g=C.length,S=[];for(;p<g&&C[p]==="[";)S.push("["),p++;let _=[];for(;g>p&&C[g-1]==="]";)_.unshift("]"),g--;let w=C.slice(p,g);return w===""?[...S,..._]:[...S,w,..._]}})(T||={});function Ky(i){T.add(i);}function Xy(i={}){let e=i.sections?.canvas??true,t=i.sections?.sound??true,n=i.sections?.narration??true,r=i.sections?.assets??true;function a(d){return d&&d.length>0?E.enum(Object.fromEntries(d.map(y=>[y,y]))):E.string()}if(n&&(T.addMapper((d,y)=>{y.labelToOpen={label:d[1],type:"call"},y.goNextStep=void 0;},{name:"Call",deprecated:true,description:"Calls the label specified by the second token, then returns to the current position.\n\n```ink\n# call label_name\n```",validation:E.tuple([E.literal("call"),E.string()])}),T.addMapper((d,y)=>{y.labelToOpen={label:d[1],type:"jump"},y.goNextStep=void 0;},{name:"Jump",deprecated:true,description:"Jumps to the label specified by the second token without returning.\n\n```ink\n# jump label_name\n```",validation:E.tuple([E.literal("jump"),E.string()])}),T.addMapper((d,y)=>("dialogue"in y&&delete y.dialogue,"goNextStep"in y&&delete y.goNextStep,{type:"dialogue",operationType:"clean"}),{name:"Pause",description:"Clears the current dialogue and waits for user input before advancing.\n\n```ink\n# pause\n```",validation:E.tuple([E.literal("pause")])}),T.addMapper((d,y)=>{y.goNextStep=true,y.glueEnabled=false;},{name:"Continue",description:"Forces the story to proceed to the next step automatically.\n\n```ink\n# continue\n```",validation:E.tuple([E.literal("continue")])})),e&&T.addMapper(d=>({type:"video",operationType:d[0],alias:d[2]}),{name:"Pause/Resume video",description:"Pauses or resumes a video canvas element identified by its alias.\n\n```ink\n# pause video <alias>\n# resume video <alias>\n```",validation:E.tuple([E.enum(["pause","resume"]),E.literal("video"),E.string()])}),r&&T.addMapper(d=>({type:d[1],operationType:d[0],aliases:d.slice(2)}),{name:"Load assets/bundle",description:`Loads (eagerly or lazily) a set of asset or bundle aliases.
|
|
60
|
+
|
|
61
|
+
\`\`\`ink
|
|
62
|
+
# load assets <alias...>
|
|
63
|
+
# lazyload assets <alias...>
|
|
64
|
+
# load bundle <alias...>
|
|
65
|
+
# lazyload bundle <alias...>
|
|
66
|
+
\`\`\``,validation:E.union([E.tuple([E.enum(["load","lazyload"]),E.literal("assets")]).rest(a(i.assetAliasIds)),E.tuple([E.enum(["load","lazyload"]),E.literal("bundle")]).rest(a(i.bundleIds))])}),t&&(T.addMapper(d=>({type:"all",operationType:d[0]}),{name:"Pause/Resume/Stop all sounds",description:"Pauses, resumes, or stops all active sounds at once.\n\n```ink\n# pause all sounds\n# resume all sounds\n# stop all sounds\n```",validation:E.tuple([E.enum(["pause","resume","stop"]),E.literal("all"),E.enum(["sounds","sound"])])}),T.addMapper(d=>({type:"sound",operationType:"pause",alias:d[2]}),{name:"Pause sound",description:"Pauses the sound identified by its alias.\n\n```ink\n# pause sound <alias>\n```",validation:E.tuple([E.literal("pause"),E.literal("sound"),E.string()])}),T.addMapper(d=>({type:"channel",operationType:"pause",alias:d[2]}),{name:"Pause channel",description:"Pauses the audio channel identified by its alias.\n\n```ink\n# pause channel <alias>\n```",validation:E.tuple([E.literal("pause"),E.literal("channel"),E.string()])}),T.addMapper(d=>({type:"sound",operationType:"resume",alias:d[2]}),{name:"Resume sound",description:"Resumes the sound identified by its alias.\n\n```ink\n# resume sound <alias>\n```",validation:E.tuple([E.literal("resume"),E.literal("sound"),E.string()])}),T.addMapper(d=>({type:"channel",operationType:"resume",alias:d[2]}),{name:"Resume channel",description:"Resumes the audio channel identified by its alias.\n\n```ink\n# resume channel <alias>\n```",validation:E.tuple([E.literal("resume"),E.literal("channel"),E.string()])}),T.addMapper(d=>({type:"sound",operationType:"stop",alias:d[2]}),{name:"Stop sound",description:"Stops the sound identified by its alias.\n\n```ink\n# stop sound <alias>\n```",validation:E.tuple([E.literal("stop"),E.literal("sound"),E.string()])}),T.addMapper(d=>({type:"sound",operationType:"stop",alias:d[2]}),{name:"Remove sound",description:"Removes (stops) the sound identified by its alias.\n\n```ink\n# remove sound <alias>\n```",deprecated:true,validation:E.tuple([E.literal("remove"),E.literal("sound"),E.string()])}),T.addMapper(d=>({type:"sound",operationType:"edit",alias:d[2],props:T.convertListStringToObj(d.slice(3))}),{name:"Edit sound",description:"Edits the properties of a sound identified by its alias.\n\n```ink\n# edit sound <alias> [<key> <value> \u2026]\n```",validation:E.tuple([E.literal("edit"),E.literal("sound"),E.string()]).rest(E.string()).refine(d=>(d.length-3)%2===0)}),T.addMapper(d=>{let y=d[2],v={type:"sound",operationType:"play",alias:y,url:y};return d.length>3&&(v.props=T.convertListStringToObj(d.slice(3))),v},{name:"Play sound",description:"Plays a sound using its alias as the URL, with optional key/value properties.\n\n```ink\n# play sound <alias> [<key> <value> \u2026]\n```",validation:E.tuple([E.literal("play"),E.literal("sound"),a(i.assetAliasIds)]).rest(E.string()).refine(d=>(d.length-3)%2===0)}),T.addMapper(d=>{let y=d[2],v=d[3],A={type:"sound",operationType:"play",alias:y,url:v};return d.length>4&&(A.props=T.convertListStringToObj(d.slice(4))),A},{name:"Play sound with source",description:"Plays a sound with an explicit source URL and optional key/value properties.\n \n```ink\n# play sound <alias> <source> [<key> <value> \u2026]\n```\n",validation:E.tuple([E.literal("play"),E.literal("sound"),E.string(),a(i.assetAliasIds)]).rest(E.string()).refine(d=>d.length>3&&(d.length-3)%2!==0)})),e){let d=function(p){let g=[],S=0,_="";for(let w of p)w.startsWith("{")?(S++,_+=w):w.endsWith("}")&&S>0?(S--,_+=w,S===0&&(g.push(_),_="")):S>0?_+=w:g.push(w);return g},y=function(p,g){switch(p){case "dissolve":case "fade":case "movein":case "moveout":case "zoomin":case "zoomout":case "pushin":case "pushout":break;default:return}let S={type:p};if(g.length>0)try{S.props=T.convertListStringToObj(g);}catch{}return S},v=function(p,g,S){let _,w;S.length%2===0?(_=g,w=S):(_=S[0],w=S.slice(1));let N={type:p,operationType:"show",alias:g,url:_};if(w.length>0){if(w.includes("with")&&w.length>w.indexOf("with")+1){let K=w[w.indexOf("with")+1],z=w.slice(w.indexOf("with")+2);w=w.slice(0,w.indexOf("with"));let ne=y(K,z);ne!==void 0&&(N.transition=ne);}w.length>0&&(N.props=T.convertListStringToObj(w));}return N},A=function(p,g){let S,_;g.length%2===0?(S=p,_=g):(S=g[0],_=g.slice(1));let w={type:"text",operationType:"show",alias:p,text:S};if(_.length>0){if(_.includes("with")&&_.length>_.indexOf("with")+1){let N=_[_.indexOf("with")+1],K=_.slice(_.indexOf("with")+2);_=_.slice(0,_.indexOf("with"));let z=y(N,K);z!==void 0&&(w.transition=z);}_.length>0&&(w.props=T.convertListStringToObj(_));}return w},D=function(p,g,S){let _={type:p,operationType:"remove",alias:g};if(S.includes("with")&&S.length>S.indexOf("with")+1){let w=S[S.indexOf("with")+1],N=S.slice(S.indexOf("with")+2),K=y(w,N);K!==void 0&&(_.transition=K);}return _},b=function(p,g){let S=ne=>ne.startsWith('"')&&ne.endsWith('"')||ne.startsWith("'")&&ne.endsWith("'")||ne.startsWith("`")&&ne.endsWith("`")?ne.substring(1,ne.length-1):ne,_=g.indexOf("["),w=g.indexOf("]",_+1);if(_===-1||w===-1){W.error("Show imagecontainer must have a list of image ulrs",g);return}let N=g.slice(_+1,w);if(N.length===0){W.error("Show imagecontainer must have a list of image ulrs",g);return}let K={type:"imagecontainer",operationType:"show",alias:p,urls:N.map(ne=>S(ne))},z=g.slice(w+1);if(z.length>0){if(z.includes("with")&&z.length>z.indexOf("with")+1){let ne=z[z.indexOf("with")+1],Jt=z.slice(z.indexOf("with")+2);z=z.slice(0,z.indexOf("with"));let Sn=y(ne,Jt);Sn!==void 0&&(K.transition=Sn);}z.length>0&&(K.props=T.convertListStringToObj(z));}return K},f=function(p){let g=p.indexOf("]",4);if(g===-1)return;let S=p.slice(4,g),_=p.slice(g+1),w=_.indexOf("with");return w===-1?{urls:S,beforeWith:_,afterWith:[]}:{urls:S,beforeWith:_.slice(0,w),afterWith:_.slice(w+1)}};T.addMapper(p=>({alias:p[1],type:"shake",props:T.convertListStringToObj(p.slice(2))}),{name:"Shake",description:"Applies shake effect to a canvas alias with optional key/value parameters.\n\n```ink\n# shake <alias> [<key> <value> \u2026]\n```",validation:E.tuple([E.literal("shake"),E.string()]).rest(E.string()).refine(p=>(p.length-2)%2===0)}),T.addMapper(p=>{let g=p.slice(2),S=g,_=[];if(g.includes("options")){let N=g.indexOf("options");S=g.slice(0,N),_=g.slice(N+1);}return {alias:p[1],type:"animate",keyframes:T.convertListStringToObj(S),options:T.convertListStringToObj(_)}},{name:"Animate",description:"Animates a canvas alias with keyframes and optional options section, both in key/value pairs.\n\n```ink\n# animate <alias> [<key> <value> \u2026] [options <key> <value> \u2026]\n```",validation:E.tuple([E.literal("animate"),E.string()]).rest(E.string()).refine(p=>{let g=p.slice(2),S=g.indexOf("options");if(S===-1)return g.length%2===0;if(g.lastIndexOf("options")!==S)return false;let _=g.slice(0,S),w=g.slice(S+1);return _.length%2===0&&w.length%2===0})}),T.addMapper(p=>{let g=p[2],S=d(p.slice(3));return v("image",g,S)},{name:"Show image",description:"Shows an image canvas element with optional source URL, key/value properties, and transition effect.\n\n```ink\n# show image <alias> [<key> <value> \u2026] [with dissolve|fade|movein|moveout|zoomin|zoomout|pushin|pushout [<key> <value> \u2026]]\n```",validation:E.tuple([E.literal("show"),E.literal("image"),a(i.assetAliasIds)]).rest(E.string())}),T.addMapper(p=>{let g=p[2],S=d(p.slice(3));return v("image",g,S)},{name:"Show image with source",description:"Shows an image canvas element with optional source URL, key/value properties, and transition effect.\n\n```ink\n# show image <alias> <source> [<key> <value> \u2026] [with dissolve|fade|movein|moveout|zoomin|zoomout|pushin|pushout [<key> <value> \u2026]]\n```",validation:E.tuple([E.literal("show"),E.literal("image"),E.string(),a(i.assetAliasIds)]).rest(E.string())});let C=a(i.assetAliasIds);T.addMapper(p=>b(p[2],d(p.slice(3))),{name:"Show imagecontainer",description:"Shows an image-container canvas element with a list of image URLs and optional key/value properties.\n\n```ink\n# show imagecontainer <alias> [ <source1> <ursource2> \u2026 ] [<key> <value> \u2026]\n```",validation:E.tuple([E.literal("show"),E.literal("imagecontainer"),E.string(),E.literal("[")]).rest(E.string()).refine(p=>{let g=f(p);return g===void 0?false:g.urls.length>0&&g.urls.every(S=>C.safeParse(S).success)&&g.afterWith.length===0&&g.beforeWith.length%2===0})}),T.addMapper(p=>b(p[2],d(p.slice(3))),{name:"Show imagecontainer with transition",description:"Shows an image-container canvas element with a list of image URLs, optional properties, and a transition effect.\n\n```ink\n# show imagecontainer <alias> [ <ursource1> <source2> \u2026 ] [<key> <value> \u2026] with dissolve|fade|movein|moveout|zoomin|zoomout|pushin|pushout\n```",validation:E.tuple([E.literal("show"),E.literal("imagecontainer"),E.string(),E.literal("[")]).rest(E.string()).refine(p=>{let g=f(p);return g===void 0?false:g.urls.length>0&&g.urls.every(S=>C.safeParse(S).success)&&g.afterWith.length===1&&g.beforeWith.length%2===0})}),T.addMapper(p=>b(p[2],d(p.slice(3))),{name:"Show imagecontainer with transition and props",description:"Shows an image-container canvas element with a list of image URLs, optional properties, a transition effect, and transition key/value properties.\n\n```ink\n# show imagecontainer <alias> [ <url1> <url2> \u2026 ] [<key> <value> \u2026] with dissolve|fade|movein|moveout|zoomin|zoomout|pushin|pushout <key> <value> \u2026\n```",validation:E.tuple([E.literal("show"),E.literal("imagecontainer"),E.string(),E.literal("[")]).rest(E.string()).refine(p=>{let g=f(p);return g===void 0?false:g.urls.length>0&&g.urls.every(S=>C.safeParse(S).success)&&g.afterWith.length>1&&(g.afterWith.length-1)%2===0&&g.beforeWith.length%2===0})}),T.addMapper(p=>{let g=p[2],S=d(p.slice(3));return v("video",g,S)},{name:"Show video",description:"Shows a video canvas element with optional source URL, key/value properties, and transition effect.\n\n```ink\n# show video <alias> [<key> <value> \u2026] [with dissolve|fade|movein|moveout|zoomin|zoomout|pushin|pushout [<key> <value> \u2026]]\n```",validation:E.tuple([E.literal("show"),E.literal("video"),a(i.assetAliasIds)]).rest(E.string())}),T.addMapper(p=>{let g=p[2],S=d(p.slice(3));return v("video",g,S)},{name:"Show video",description:"Shows a video canvas element with optional source URL, key/value properties, and transition effect.\n\n```ink\n# show video <alias> <source> [<key> <value> \u2026] [with dissolve|fade|movein|moveout|zoomin|zoomout|pushin|pushout [<key> <value> \u2026]]\n```",validation:E.tuple([E.literal("show"),E.literal("video"),E.string(),a(i.assetAliasIds)]).rest(E.string())}),T.addMapper(p=>{let g=p[2];return A(g,p.slice(3))},{name:"Show text",description:"Shows a text canvas element with optional text content, key/value properties, and transition effect.\n\n```ink\n# show text <alias> [<text>] [<key> <value> \u2026] [with dissolve|fade|movein|moveout|zoomin|zoomout|pushin|pushout [<key> <value> \u2026]]\n```",validation:E.tuple([E.literal("show"),E.literal("text"),E.string()]).rest(E.string())}),T.addMapper(p=>{let g=p[2],S=d(p.slice(3));return D("image",g,S)},{name:"Remove image",description:"Removes an image canvas element with an optional transition effect.\n\n```ink\n# remove image <alias> [with dissolve|fade|movein|moveout|zoomin|zoomout|pushin|pushout [<key> <value> \u2026]]\n```",validation:E.tuple([E.literal("remove"),E.literal("image"),E.string()]).rest(E.string())}),T.addMapper(p=>{let g=p[2],S=d(p.slice(3));return D("video",g,S)},{name:"Remove video",description:"Removes a video canvas element with an optional transition effect.\n\n```ink\n# remove video <alias> [with dissolve|fade|movein|moveout|zoomin|zoomout|pushin|pushout [<key> <value> \u2026]]\n```",validation:E.tuple([E.literal("remove"),E.literal("video"),E.string()]).rest(E.string())}),T.addMapper(p=>{let g=p[2],S=d(p.slice(3));return D("canvaselement",g,S)},{name:"Remove canvas element",description:"Removes a canvas element with an optional transition effect.\n\n```ink\n# remove canvaselement <alias> [with dissolve|fade|movein|moveout|zoomin|zoomout|pushin|pushout [<key> <value> \u2026]]\n```",validation:E.tuple([E.literal("remove"),E.literal("canvaselement"),E.string()]).rest(E.string())}),T.addMapper(p=>{let g=p[2],S=d(p.slice(3));return D("text",g,S)},{name:"Remove text",description:"Removes a text canvas element with an optional transition effect.\n\n```ink\n# remove text <alias> [with dissolve|fade|movein|moveout|zoomin|zoomout|pushin|pushout [<key> <value> \u2026]]\n```",validation:E.tuple([E.literal("remove"),E.literal("text"),E.string()]).rest(E.string())}),T.addMapper(p=>{let g=p[2],S=d(p.slice(3));return D("imagecontainer",g,S)},{name:"Remove imagecontainer",description:"Removes an image-container canvas element with an optional transition effect.\n\n```ink\n# remove imagecontainer <alias> [with dissolve|fade|movein|moveout|zoomin|zoomout|pushin|pushout [<key> <value> \u2026]]\n```",validation:E.tuple([E.literal("remove"),E.literal("imagecontainer"),E.string()]).rest(E.string())}),T.addMapper(()=>({type:"canvas",operationType:"clear"}),{name:"Clear canvas",description:"Removes every element currently on the canvas.\n\n```ink\n# clear canvas\n```",validation:E.tuple([E.literal("clear"),E.literal("canvas")])}),T.addMapper(p=>({type:"image",operationType:"edit",alias:p[2],props:T.convertListStringToObj(p.slice(3))}),{name:"Edit image",description:"Edits the properties of an image canvas element identified by its alias.\n\n```ink\n# edit image <alias> [<key> <value> \u2026]\n```",validation:E.tuple([E.literal("edit"),E.literal("image"),E.string()]).rest(E.string())}),T.addMapper(p=>({type:"imagecontainer",operationType:"edit",alias:p[2],props:T.convertListStringToObj(p.slice(3))}),{name:"Edit imagecontainer",description:"Edits the properties of an image-container canvas element identified by its alias.\n\n```ink\n# edit imagecontainer <alias> [<key> <value> \u2026]\n```",validation:E.tuple([E.literal("edit"),E.literal("imagecontainer"),E.string()]).rest(E.string())}),T.addMapper(p=>({type:"canvaselement",operationType:"edit",alias:p[2],props:T.convertListStringToObj(p.slice(3))}),{name:"Edit canvas element",description:"Edits the properties of a canvas element identified by its alias.\n\n```ink\n# edit canvaselement <alias> [<key> <value> \u2026]\n```",validation:E.tuple([E.literal("edit"),E.literal("canvaselement"),E.string()]).rest(E.string())}),T.addMapper(p=>({type:"video",operationType:"edit",alias:p[2],props:T.convertListStringToObj(p.slice(3))}),{name:"Edit video",description:"Edits the properties of a video canvas element identified by its alias.\n\n```ink\n# edit video <alias> [<key> <value> \u2026]\n```",validation:E.tuple([E.literal("edit"),E.literal("video"),E.string()]).rest(E.string())}),T.addMapper(p=>({type:"text",operationType:"edit",alias:p[2],props:T.convertListStringToObj(p.slice(3))}),{name:"Edit text",description:"Edits the properties of a text canvas element identified by its alias.\n\n```ink\n# edit text <alias> [<key> <value> \u2026]\n```",validation:E.tuple([E.literal("edit"),E.literal("text"),E.string()]).rest(E.string())});}n&&(T.addMapper(d=>({type:"input",operationType:"request"}),{name:"Request input",description:"Requests player input without any additional constraints.\n\n```ink\n# request input\n```",validation:E.tuple([E.literal("request"),E.literal("input")])}),T.addMapper(d=>{let y={type:"input",operationType:"request"};try{let v=T.convertListStringToObj(d.slice(2));"type"in v&&typeof v.type=="string"&&(y.valueType=v.type),"default"in v&&(y.defaultValue=v.default);}catch{}return y},{name:"Request input with params",description:"Requests player input with optional key/value parameters (e.g. type, default).\n\n```ink\n# request input <key> <value> [<key> <value> \u2026]\n# request input type number default 18\n```",validation:E.tuple([E.literal("request"),E.literal("input")]).rest(E.string()).refine(d=>d.length>2&&(d.length-2)%2===0)}));}var Si="global decl",Ft="___external_value___",Zy=/\[([^\]]+)\]/;var xu=["+","-","/","*","%","_","==",">","<",">=","<=","!=","!","&&","||","MIN","MAX"],_u=["+","-","/","*","%","POW","RANDOM","L^"],Ou=["INT","FLOOR","FLOAT"];function Ht(i,e){if(i.endsWith(".s"))return;if(new RegExp(/.*\.[0-9]+\..*$/).test(i)&&(i=i.split(".").filter(r=>!r.match(/^[0-9]+$/)).join("."),!i.startsWith(".")))return i.replaceAll(".","_|_");if(!new RegExp(/^\.\^.*$/).test(i)&&i.includes("g-")){let n=i.split("g-");return aa(e)+"_|_"+"g-"+n[n.length-1]}let t=0;for(;new RegExp(/^\.\^.*$/).test(i);)t++,i=i.substring(2);if(t=t-1,new RegExp(/^\..*$/).test(i)&&e){let n=i.substring(1);return aa(e,t)+"_|_"+n.replaceAll(".","_|_")}return i.replaceAll(".","_|_")||aa(e,t).replaceAll(".","_|_")}function aa(i,e=0){let t=i.split("_|_");for(;t.length>1&&e>0;)t.pop()?.includes("g-")&&e--,e--;return t.join("_|_")}var Pu="\xA7DOUBLE_SLASH_CONVERTOR\xA7";function Xe(i){return i.startsWith("^")&&(i=i.substring(1)),i=i.replaceAll("\\\\",Pu),i=i.replaceAll("\\n",`
|
|
67
|
+
`),i=i.replaceAll("\\t"," "),i=i.replaceAll(" "," "),i=i.replaceAll(Pu,"\\\\"),i}var Yp={version:"1.13.17"};var Tu=`https://pixi-vn.com/schemas/${Yp.version}/schema.json`,Fu=["==","!=","<","<=",">",">=","CONTAINS"];function gt(i,e,t,n){let{functions:r}=n;i=i.map(s=>{if(typeof s=="string")switch(s){case "rnd":return "RANDOM";case "?":return "CONTAINS"}return s});let a=[];return i.forEach(s=>{if(typeof s=="string")switch(s){case "&&":case "||":if(a.length>=2){let o={type:"union",unionType:s==="&&"?"and":"or",conditions:[a[a.length-2],a[a.length-1]]};a.pop(),a.pop(),a.push(o);}break;case "!":if(a.length===0)W.error("Error parsing ink file: Conditional statement is not valid",i);else {let o={type:"union",unionType:"not",condition:a[a.length-1]};a[a.length-1]=o;}break;case "!?":if(a.length>1){let o={type:"union",unionType:"not",condition:{type:"compare",operator:"CONTAINS",leftValue:a[a.length-2],rightValue:a[a.length-1]}};a.pop(),a.pop(),a.push(o);}else W.error("Error parsing ink file: Conditional statement is not valid",i);break;default:if(Fu.includes(s))if(a.length<2)W.error("Error parsing ink file: Conditional statement is not valid",i);else {let o={type:"compare",operator:s,rightValue:a[a.length-1],leftValue:a[a.length-2]};a.pop(),a.pop(),a.push(o);}else if(_u.includes(s))if(a.length<2)W.error("Error parsing ink file: Conditional statement is not valid",i);else {s==="L^"&&(s="INTERSECTION");let o={type:"arithmetic",operator:s,rightValue:a[a.length-1],leftValue:a[a.length-2]};a.pop(),a.pop(),a.push(o);}else if(Ou.includes(s)){let o={type:"arithmeticsingle",operator:s,leftValue:a[a.length-1]};a.pop(),a.push(o);}else s.startsWith("^")&&a.push(Xe(s));}else if(typeof s=="object"&&"CNT?"in s)if(new RegExp(/.*\.[0-9]\..*/).test(s["CNT?"])){let o=s["CNT?"].split("."),l=o.pop(),u=o.pop();if(u===void 0||l===void 0){W.error("Error parsing ink file: Conditional statement is not valid",i);return}let c=Number(u),h=o.join(".");if(h.includes("^.")){let d=h.split("."),y=d[d.length-1].replaceAll(".","_|_");d.pop(),h=`${d.join(".")}.${y}`,l.includes("c-")&&(h=h+"_|_"+l);}else h=h.replaceAll(".","_|_");let m=Ht(h,e);if(!m)return;a.push({type:"compare",leftValue:oa(m),operator:">=",rightValue:{type:"value",value:c}});}else {let o=Ht(s["CNT?"],e);if(!o)return;a.push(oa(o));}else if(typeof s=="object"&&"VAR?"in s)a.push(Nt({key:s["VAR?"],defaultType:"storage"},t));else if(typeof s=="object"&&"f()"in s){let o=s["f()"],l=r.find(c=>c.name===o);if(!l){W.error(`Error parsing ink file: Function ${o} is not defined`,i);return}let u=[];for(let c=0;c<l.args;c++)a.length!==0&&u.push(a.pop());a.push({type:"function",functionName:o,args:u.reverse()});}else if(typeof s=="object"&&"^->"in s)s["^->"].includes("$r")||a.push(s["^->"]);else if(typeof s=="object"&&"list"in s){let o=Object.values(s.list).map(l=>l);a.push(o);}else a.push(s);}),a}function la(i,e,t,n){return gt(i,e,t,n)}function Nt(i,e,t){let{key:n,defaultType:r}=i,a=e.indexOf(n);return a>=0?{type:"value",storageType:"params",storageOperationType:"get",key:a}:{type:"value",storageOperationType:"get",storageType:r,key:n}}function _n(i,e,t){let{key:n,value:r,defaultType:a,artmeticValue:s}=i,o=e.indexOf(n);if(o>=0)return [{type:"value",storageType:"params",storageOperationType:"set",key:o,value:r}];if(s){if(typeof r=="object"&&"list"in r){let l=Object.values(r.list).map(u=>u);return [{type:"value",storageOperationType:"set",storageType:a,key:n,value:l}]}return [{type:"value",storageOperationType:"set",storageType:a,key:n,value:r}]}else if(typeof r=="object"){if("list"in r&&typeof r.list=="object"){if("origins"in r&&Array.isArray(r.origins)&&r.origins.length>0)return r.origins.reduce(l=>(l.push({type:"value",storageOperationType:"set",storageType:a,key:n,value:Object.values(t.enums[n])}),Object.entries(t.enums[n]).forEach(([u,c])=>{l.push({type:"value",storageOperationType:"set",storageType:a,key:`${n}.${u}`,value:c});}),l),[]);{let l=new Set,u=Object.entries(r.list).reduce((c,[h,m])=>{let[d,y]=h.split(".");return c.push({type:"value",storageOperationType:"set",storageType:a,key:y,value:m}),l.add(d),c},[]);return l.forEach(c=>{u.push({type:"value",storageOperationType:"set",storageType:a,key:c,value:Object.values(t.enums[c])});}),n in t.enums?Object.entries(t.enums[n]).forEach(([c,h])=>{u.push({type:"value",storageOperationType:"set",storageType:a,key:`${n}.${c}`,value:h});}):u.push({type:"value",storageOperationType:"set",storageType:a,key:n,value:Object.values(r.list)}),u}}else if(typeof r=="object"&&"VAR?"in r){if(typeof r["VAR?"]=="string"&&r["VAR?"].includes(".")){let[l,u]=r["VAR?"].split(".");if(l in t.enums&&u in t.enums[l])return [{type:"value",storageOperationType:"set",storageType:a,key:n,value:t.enums[l][u]}]}return [{type:"value",storageOperationType:"set",storageType:a,key:n,value:Nt({key:r["VAR?"],defaultType:"storage"},e)}]}}return [{type:"value",storageOperationType:"set",storageType:a,key:n,value:r}]}function oa(i){return {type:"value",storageType:"label",storageOperationType:"get",label:i}}function ua(i,e){return e||new RegExp(`${"_|_".replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}c-\\d+$`).test(i)?"call":"jump"}function Ei(i,e){if(e){if(typeof e=="string")e.startsWith("^")&&i.push(Xe(e));else if(typeof e=="object"&&"type"in e)switch(e.type){case "value":case "function":console.warn("Warning: trying to add a value or function operation as text. This is likely a mistake, so it will be ignored.");break;default:i.push(e);}}}function ca(i,e,t,n,r,a={}){let{isNewLine:s=true,isHashtagScript:o=false,isThreads:l=false}=a;return Qp(i,e,t,n,r,{isNewLine:s,isHashtagScript:o,isThreads:l})}function Qp(i,e,t,n,r,a){if(!e)return;let{isNewLine:s,isHashtagScript:o=false,isThreads:l}=a;if(o){if(Array.isArray(e)&&e.length>0){let u={goNextStep:true},c=[];try{if(e.length===1&&typeof e[0]=="string"){let h=e[0],m=T.convertTagTolist(h),d=T.convertOperation(m,u,{silent:!0});d&&(d.$origin=h,c.push(d));}}catch{}c.length===0&&c.push({type:"operationtoconvert",values:e}),i.push({...u,operations:c});}}else if(typeof e=="string"&&e.startsWith("^")||e&&typeof e=="object"&&"type"in e&&e.type==="value"&&e.storageOperationType==="get"){if(!s&&i.length>0){let u=i[i.length-1];!u.glueEnabled&&!u.operations&&!u.labelToOpen&&(u.glueEnabled=true,u.labelToOpen||(u.goNextStep=true)),i[i.length-1]=u;}typeof e=="string"?i.push(ed(Xe(e),n.characterIds)):i.push({dialogue:e});}else if(typeof e=="string"){if(e==="end")i.push({end:"game_end"});else if(e==="done")i.push({end:"label_end",goNextStep:true});else if(e==="<>")if(i.length>0){let u=i[i.length-1];u.glueEnabled=true,u.labelToOpen||(u.goNextStep=true),i[i.length-1]=u;}else i.push({glueEnabled:true,goNextStep:false});}else if(typeof e=="object"){if("type"in e)switch(e.type){case "value":e.storageOperationType==="set"?(typeof e.value=="string"&&e.value.startsWith("^")&&(e.value=Xe(e.value)),i.push({goNextStep:true,operations:[e]})):console.warn("Warning: trying to add a value get operation as step. This is likely a mistake, so it will be ignored.");break;case "function":i.push({goNextStep:true,operations:[e]});break;default:if(!s&&i.length>0){let u=i[i.length-1];!u.glueEnabled&&!u.operations&&(u.glueEnabled=true,u.labelToOpen||(u.goNextStep=true)),i[i.length-1]=u;}i.push({conditionalStep:e});}else if("->"in e){let u=s?void 0:true;if(u&&t.includes("c-")&&i.length>0&&i[i.length-1]?.dialogue===void 0&&(u=void 0),!s&&i.length>0){let c=i[i.length-1];c.labelToOpen||(c.goNextStep=true),i[i.length-1]=c;}if(e.params&&e.params.length===0&&delete e.params,e.var)i.push({labelToOpen:{label:Nt({key:e["->"],defaultType:"storage"},r),type:l?"call":"jump",params:e.params},glueEnabled:u});else {let c=Ht(e["->"],t);if(!c)return;i.push({labelToOpen:{label:c,type:ua(c,l),params:e.params},glueEnabled:u});}}else if("->t->"in e){let u=s?void 0:true;if(u&&t.includes("c-")&&i.length>0&&i[i.length-1]?.dialogue===void 0&&(u=void 0),!s&&i.length>0){let h=i[i.length-1];h.labelToOpen||(h.goNextStep=true),i[i.length-1]=h;}e.params&&e.params.length===0&&delete e.params;let c=Ht(e["->t->"],t);if(!c)return;i.push({labelToOpen:{label:c,type:"call",params:e.params},glueEnabled:u});}}}function ed(i,e){let t;if(i.includes(": ")){let n=i.split(": "),r=n[0],a=n.slice(1).join(": ");(e?.has(r)||RegisteredCharacters.has(r))&&(t=r,i=a);}return t?{dialogue:{character:t,text:i}}:{dialogue:i}}function ha(i,e,t,n=true,r=false){return td(i,e,t,n,r)}function td(i,e,t,n,r=false){e&&(typeof e=="string"&&e.startsWith("^")||e&&typeof e=="object"&&"type"in e&&e.type==="value"&&e.storageOperationType==="get"?typeof e=="string"?i.push(Xe(e)):i.push(e):typeof e=="object"&&"type"in e&&i.push(e));}function Di(i,e,t,n){if(i.length===0){W.error("Error parsing ink file: Arithmetic statement is not valid",i);return}let r=gt(i,e,t,n);if(r.length===1){let a=r[0];return a&&typeof a=="object"&&"type"in a?{type:"value",storageType:"logic",storageOperationType:"get",operation:a}:a}}function zt(i,e,t,n="",r,a,s=void 0){let o=[],l="sequential",u=false,c=true;i.forEach(d=>{d==="%"&&(l="loop"),d==="seq"&&(l="random"),d==="MIN"&&(u=true);});let h=i[i.length-1];return Object.keys(h).forEach(d=>{let y=h[d];if(Array.isArray(y)&&y.length>3){y=y.slice(1,y.length-2);let v=[];Ct(y,n,r,v,e,e,t,Ut,s,true,a),v.length===1?o.push(v[0]):o.push({type:"resulttocombine",combine:"cross",secondConditionalItem:v});}else Array.isArray(y)&&y.length===3&&(c=false);}),l==="sequential"?{type:"stepswitch",elements:o,choiceType:l,end:c?"lastItem":void 0,nestedId:s}:u&&l==="random"?{type:"stepswitch",elements:o,choiceType:"sequentialrandom",end:c?"lastItem":void 0,nestedId:s}:{type:"stepswitch",elements:o,choiceType:l}}function Ct(i,e,t,n=[],r,a,s,o,l=void 0,u=true,c=[]){let h=false,m=[],d=false,y=false,v=false,A=[],D=[];if(t.preDialog[e]&&(u=false,r(n,`^${t.preDialog[e].text}`,e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}),t.preDialog[e].glue&&r(n,"<>",e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}),delete t.preDialog[e]),i.includes("visit")){let f=zt(i,a,s,e,t,c,l);f&&(!u&&n.length>0&&r(n,"<>",e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}),r(n,f,e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}));return}let b=i[0];if(b&&typeof b=="object"&&"temp="in b){for(;i[0]&&typeof i[0]=="object"&&"temp="in i[0];)c.push(i[0]["temp="]),i.shift();c=c.reverse();}if(i.forEach((f,C)=>{if(y){if(typeof f=="string"&&f==="/#"){let p=[];Ct(D,e,t,p,ha,ha,s,o,l,u),r(n,p,e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}),y=false,D=[];}else D.push(f);return}else if(h)if(Array.isArray(f))m.push(f);else if(f&&typeof f=="object")"CNT?"in f?C>0&&i[C-1]==="ev"?(d=true,A.push(f)):d?A.push(f):(m.push(f),u=false):"VAR="in f||"temp="in f?_n({key:"VAR="in f?f["VAR="]:f["temp="],value:i[C-1],defaultType:"VAR="in f?"storage":"tempstorage"},c,t).forEach(g=>{if(g.value&&typeof g.value=="string"&&g.value==="/str"&&(g.value=i[C-2]),g.value&&typeof g.value=="object"&&"^->"in g.value&&(g.value=g.value["^->"]),m.length>1){let S=Di(m,e,c,t);m=[],S&&typeof S=="object"&&"type"in S&&S.type==="value"&&"storageType"in S&&S.storageType==="logic"&&(g.value=S.operation);}(typeof g.key!="string"||!g.key.includes("$r"))&&(r(n,g,e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}),u=true);}):"VAR?"in f?m.push(f):"^->"in f?f["^->"].includes("$r")||m.push(f):("f()"in f||"list"in f&&typeof f.list=="object")&&m.push(f);else switch(f){case "/ev":d&&A.push(f),h=false,m.push(f);break;case "out":if(m.length>0){let p=m[m.length-1];if(p&&typeof p=="object"&&"VAR?"in p){m.pop();let g=Nt({key:p["VAR?"],defaultType:"storage"},c);r(n,g,e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v});}else {let g=[];for(;m.length>0&&m[m.length-1]!=="/ev";)g.push(m.pop());g=g.reverse();let S=Di(g,e,c,t);m=[],S&&typeof S=="object"&&"type"in S&&S.type==="value"&&"storageType"in S&&S.storageType==="logic"?r(n,{storageOperationType:"get",storageType:"logic",operation:S.operation,type:"value"},e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}):(r(n,"<>",e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}),S=`^${S}`,r(n,S,e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}));}u=false;}break;case "pop":{let p=m[m.length-1];if(p&&typeof p=="object"&&"f()"in p){let g=[];for(;m.length>0&&m[m.length-1]!=="/ev";)g.push(m.pop());g=g.reverse();let S=gt(g,e,c,t);m=[],S.forEach(_=>{_&&typeof _=="object"&&"type"in _&&_.type==="function"?r(n,_,e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}):W.warn("Unhandled case: value is not a function",_);}),u=false;}else m.push(f);return}default:m.push(f);}else if(typeof f=="string")if(f.startsWith("^"))r(n,f,e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}),u=false;else if(f==="ev")h=true;else if(f===`
|
|
68
|
+
`)u=true;else if(f==="done"||f==="end")r(n,f,e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}),u=false;else if(f==="<>")r(n,f,e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}),u=false;else if(f==="nop"&&d){let p=Nu(A,a,s,e,t,c,l);p&&r(n,p,e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}),d=false,A=[];}else f==="#"?y=true:f==="thread"&&(v=true);else if(Array.isArray(f))if(d)A.push(f);else if(f.length>1&&typeof f[f.length-2]=="object"&&f[f.length-2]&&"c"in f[f.length-2]&&typeof f[f.length-1]=="object"&&f[f.length-1]&&"b"in f[f.length-1]){m.pop();let p=[],g=[];for(;m.length>0&&m[m.length-1]!=="/ev";)p.push(m.pop());A=[...A,...p.reverse()],d=true,g.push(f.pop()),g.push(f.pop()),A=[...A,...f],A.push(g);}else if(f.length>1&&typeof f[f.length-1]=="object"&&f[f.length-1]&&"#n"in f[f.length-1]){let p=f.pop();if(!p){W.error("Error parsing ink file: el is undefined");return}let g=p["#n"];delete p["#n"],f.push(p),r(n,{"->":e?e+"_|_"+g:g},e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}),s({[g]:f},e,t);}else Ct(f,e,t,n,r,a,s,o,l,u,c);else if(f&&typeof f=="object")if("->"in f&&typeof f["->"]=="string"&&!new RegExp(/^\.\^\.\^\.\d\.s$/).test(f["->"])){let p=[];m.length>0&&(p=la(["ev",...m],e,c,t)),f.params=p,r(n,f,e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}),u=false;}else if("->t->"in f&&typeof f["->t->"]=="string"&&!new RegExp(/^\.\^\.\^\.\d\.s$/).test(f["->t->"])){let p=[];m.length>0&&(p=la(["ev",...m],e,c,t)),f.params=p,r(n,f,e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v}),u=false;}else if("*"in f&&typeof f["*"]=="string")f["*"].includes("c")&&(m.push(f),u=false);else if("s"in f&&Array.isArray(f.s))m.push(f),u=false;else if("CNT?"in f)m.push(f),u=false;else if("VAR="in f||"temp="in f){let p="VAR="in f?f["VAR="]:f["temp="],g,S=[];if(p!=="$r"){for(m.pop(),m[m.length-1]==="/ev"&&m.pop();m.length>0&&m[m.length-1]!=="/ev";)S.push(m.pop());S=S.reverse(),g=Di(S,e,c,t),m=[],_n({key:p,value:g,defaultType:"VAR="in f?"storage":"tempstorage",artmeticValue:true},c,t).forEach(w=>{(w.value!==void 0||w.value!==null)&&r(n,w,e,t,c,{isNewLine:u,isHashtagScript:y,isThreads:v});}),u=false;}}else s(f,e,t);}),o(m,n,e,t,c),e.includes("_|_")&&n.length===2){let f=n[0],C=n[1];f&&C&&typeof f=="object"&&"dialogue"in f&&typeof C=="object"&&"labelToOpen"in C&&f.dialogue===" "&&C.labelToOpen&&(n.shift(),delete C.glueEnabled,n[0]=C);}}function da(i,e,t,n,r,a){if(e.length===0)return;let s=gt(e,n,t,r);if(s.length===1){let o={type:"ifelse",condition:s[0],then:i,else:a};return o.else||delete o.else,o}else if(s.length>1){let o={type:"ifelse",condition:{type:"union",unionType:"and",conditions:s},then:i,else:a};return o.else||delete o.else,o}}function Nu(i,e,t,n,r,a,s=void 0){if(i.length===0){W.error("Error parsing ink file: Conditional statement is not valid",i);return}let o=[],l=[];if(i.forEach(h=>{Array.isArray(h)?l.push(h):typeof h=="string"&&h==="du"?r.du?o.push(r.du):r.du=o[o.length-1]:(typeof h!="string"||h!=="/ev")&&o.push(h);}),l.length===0){W.error("Error parsing ink file: Conditional statement is not valid",l);return}let u=pa(l[0],e,t,`${n}${"_|_"}then`,r,a,`${s||""}then`),c;return l.length===2?c=pa(l[1],e,t,`${n}${"_|_"}else`,r,a,`${s||""}else`):l.length>2?(l.shift(),l.push("nop"),l=[{b:l}],c=pa(l,e,t,n,r,a,`${s||""}else`)):c=void 0,r.du=void 0,da(u,o,a,n,r,c)}function pa(i,e,t,n,r,a,s=void 0){let o=[];for(let u of i)typeof u=="object"&&"b"in u&&(u.b=u.b.filter(c=>c!==null&&!(typeof c=="object"&&"->"in c&&new RegExp(/.*\.[0-9]/).test(c["->"]))),Ct(u.b,n,r,o,e,e,t,Ut,s,true,a));return o.length===1?o[0]:{type:"resulttocombine",combine:"cross",secondConditionalItem:o}}function fa(i="",e=""){let t=Array.isArray(i)?i:[i],n=Array.isArray(e)?e:[e];return [...new Set([...t,...n])]}function Ut(i,e,t,n,r){if(i.length>0){let a={};Iu(i,a,r,n);for(let[s,o]of Object.entries(a)){let l=t+"_|_"+s,u={text:o.text.length===1?o.text[0]:o.text,label:l,props:{},type:ua(l,false),oneTime:o.onetime};o.text.length===0&&(u.onlyHaveNoChoice=true,u.autoSelect=true),u.oneTime===false&&delete u.oneTime;let c=da(u,o.conditions,r,t,n)||u,h=e[e.length-1];if(typeof h=="object"&&h&&"type"in h&&(h={conditionalStep:h}),e.length>0&&typeof h=="object"&&h&&"choices"in h&&h.choices){let m=h.choices;m&&Array.isArray(m)?m.push(c):W.error("Unhandled case: choices is PixiVNJsonConditionalStatements<PixiVNJsonChoices> | undefined",o,m),h.choices=m.sort((d,y)=>{try{let v=d.label.split("."),A=v[v.length-1].replaceAll(".","_|_"),D=y.label.split("."),b=D[D.length-1].replaceAll(".","_|_");if(A.includes("c-")&&b.includes("c-")){let f=A.split("c-")[1],C=Number(f),p=b.split("c-")[1],g=Number(p);return C-g}}catch{}return 0});}else e.push({choices:[c]});o.preDialog&&(n.preDialog[l]={...o.preDialog});}}}function Iu(i,e,t,n,r){let a=[],s="",o="",l=false,u=[];for(let c=0;c<i.length;c++){let h=i[c];if(typeof h=="string")h.startsWith("^")?a.push(Xe(h)):xu.includes(h)&&u.push(h);else if(Array.isArray(h)&&h.includes("visit")){let m=zt(h,Ei,(d,y,v)=>{},r,n,t);a.push(m);}else if(h&&typeof h=="object")if("*"in h&&typeof h["*"]&&typeof h["*"]=="string")h["*"].includes("c")&&(s=`c${h["*"].split("c")[1]}`,h.flg&16&&(l=true));else if("s"in h&&Array.isArray(h.s)){let m=Vu(h.s),d=h.s.includes("<>");m&&(r&&e[r]?(e[r].preDialog={text:m,glue:d},e[r].text=fa(m,e[r].text)):(a.push(m),o=m));}else ("CNT?"in h||"VAR?"in h)&&u.push(h);else u.push(h);if(s){e[s]?e[s].text=fa(a,e[s].text):e[s]={text:a,onetime:l,conditions:u},o&&(e[s].preDialog={text:o,glue:false});let m=i.slice(c+1);Iu(m,e,t,n,s);return}}}function Vu(i){for(let e of i)if(typeof e=="string"){if(e.startsWith("^"))return Xe(e)}else if(Array.isArray(e)){let t=Vu(e);if(t)return t}}var ma;(r=>{function i(a,s={}){let{labelToRemove:o=[],initialVarsToRemove:l=[],enums:u={},functions:c=[],preDialog:h={},characterIds:m}=s,d={$schema:Tu};if(d.labels=e(a.root,{labelToRemove:o,initialVarsToRemove:l,enums:u,functions:c,preDialog:h,characterIds:m}),d.labels&&Si in d.labels){let y=d.labels[Si];delete d.labels[Si],y.forEach(v=>{v.operations&&(d.initialOperations=d.initialOperations?[...d.initialOperations,...v.operations]:[...v.operations]);});}if(d.labels&&Ft in d.labels){let y=d.labels[Ft];delete d.labels[Ft],y.forEach(v=>{v.operations&&(d.initialOperations=d.initialOperations?[...d.initialOperations,...v.operations]:[...v.operations]);});}return o.forEach(y=>{d.labels&&y in d.labels&&delete d.labels[y];}),l.forEach(y=>{d.initialOperations&&(d.initialOperations=d.initialOperations.filter(v=>!(v.type==="value"&&v.key===y)));}),d}r.inkToJson=i;function e(a,s){try{let o={};return t(a,o,s),o}catch(o){W.error("Error parsing ink file",o);}}function t(a,s,o){for(let l of a)if(l)if(Array.isArray(l))if(l.includes("visit")){let u=zt(l,Ei,(c,h,m)=>{},"",o,[]);u&&(o.externalSwitch=u);}else t(l,s,o);else typeof l=="object"&&(l&&"VAR="in l&&o.externalSwitch&&(s[Ft]||(s[Ft]=[]),s[Ft].push({operations:_n({defaultType:"storage",key:l["VAR="],value:o.externalSwitch},[],o)})),n(l,s,"",o));}function n(a,s,o="",l){if(a!==null){for(let[u,c]of Object.entries(a))if(Array.isArray(c)){let h=[],m={},d=(o?o+"_|_":"")+u;Ct(c,d,l,h,ca,ca,(y,v,A)=>{n(y,m,v,A);},Ut);for(let[y,v]of Object.entries(m))s[y]=v;h.length>0&&(s[d]=h);}}}})(ma||={});var Ih=Zs(_h(),1),Vh=Zs(Kt(),1);var zC=/(?:^|<>)\s*#\s*([^\r\n]+)/g,UC=/^=+[ \t]+(?:function[ \t]+)?(\w+)/gm,KC=new Set(["DONE","END"]),XC="_|_",Oh=new Map;function kh(i,e){let t=JSON.stringify([e,i]),n=Oh.get(t);if(n)return n;let r=new RegExp(i,e);return Oh.set(t,r),r}function pi(i,e){if(!e||typeof e!="object")return false;let t=e,n=t.anyOf;if(Array.isArray(n))return n.some(s=>pi(i,s));let r=t.oneOf;if(Array.isArray(r))return r.some(s=>pi(i,s));let a=t.allOf;if(Array.isArray(a))return a.every(s=>pi(i,s));if(typeof t.const=="string")return i===t.const;if(Array.isArray(t.enum))return t.enum.some(s=>typeof s=="string"&&s===i);if(t.type!=="string"||typeof t.minLength=="number"&&i.length<t.minLength||typeof t.maxLength=="number"&&i.length>t.maxLength)return false;if(typeof t.pattern=="string")try{if(!kh(t.pattern,"").test(i))return !1}catch{return false}return true}function Hs(i,e){if(!e||typeof e!="object")return false;let t=e,n=t.anyOf;if(Array.isArray(n))return n.some(o=>Hs(i,o));let r=t.oneOf;if(Array.isArray(r))return r.some(o=>Hs(i,o));let a=t.allOf;if(Array.isArray(a))return a.every(o=>Hs(i,o));if(t.type!=="array"||typeof t.minItems=="number"&&i.length<t.minItems||typeof t.maxItems=="number"&&i.length>t.maxItems)return false;let s=Array.isArray(t.prefixItems)?t.prefixItems:[];if(i.length<s.length)return false;for(let o=0;o<s.length;o++)if(!pi(i[o],s[o]))return false;return i.length===s.length?true:t.items===false||typeof t.items>"u"?false:t.items===true?true:i.slice(s.length).every(o=>pi(o,t.items))}function Ll(i,e){if(e.type==="regexp")try{let t=kh(e.source,e.flags);return t.lastIndex=0,t.test(i.join(" "))}catch{return false}return e.type==="literal"?i.join(" ")===e.value:Hs(i,e.schema)}function zs(i){if(!i||typeof i!="object")return [];let e=i;if(Array.isArray(e.anyOf))return e.anyOf.flatMap(zs);if(Array.isArray(e.oneOf))return e.oneOf.flatMap(zs);if(Array.isArray(e.allOf)){let t={};for(let n of e.allOf)n&&typeof n=="object"&&Object.assign(t,n);return zs(t)}return e.type==="array"&&Array.isArray(e.prefixItems)?[e]:[]}function Ph(i,e){if(i===e)return 1;let t=Math.max(i.length,e.length);return t===0?1:Math.max(0,1-Rh(i,e)/t)}function YC(i,e){if(e&&typeof e=="object"){let t=e;if(typeof t.const=="string")return {weight:2,matched:i===void 0?0:2*Ph(i,t.const)};if(Array.isArray(t.enum))return {weight:2,matched:2*(i===void 0?0:Math.max(0,...t.enum.filter(r=>typeof r=="string").map(r=>Ph(i,r))))}}return {weight:1,matched:i===void 0?0:1}}function ZC(i,e){let t=Array.isArray(e.prefixItems)?e.prefixItems:[],n=Math.min(t.length,i.length),r=0,a=0,s=false;for(let o=0;o<n;o++){let l=YC(i[o],t[o]);r+=l.weight,a+=l.matched,l.weight>1&&(s=true);}return {score:r===0?0:a/r,hasDiscriminant:s}}var QC=.8,Th=new Map;function ey(i){let e=JSON.stringify(i),t=Th.get(e);if(t)return t;let n=new HC({strict:false,allErrors:true}).compile(i);return Th.set(e,n),n}function ty(i){if("items"in i)return i;let e=Array.isArray(i.prefixItems)?i.prefixItems.length:0;return {...i,minItems:e,maxItems:e,items:false}}function ny(i,e){let[t]=Ys(i.instancePath);if(t!==void 0&&/^\d+$/.test(t)){let n=Number(t);if(n<e.length)return e[n]}return Wl(i)}function iy(i){return i.keyword==="const"?`must be "${i.params.allowedValue}"`:i.keyword==="enum"?`must be one of ${(i.params.allowedValues??[]).map(t=>`"${t}"`).join(", ")}`:i.message??"invalid value"}function jl(i){let e=i.split(/\r?\n/),t=[];for(let n=0;n<e.length;n++){let r=e[n];for(let a of r.matchAll(zC)){let s=(a[1]??"").trim();if(!s)continue;let o=T.convertTagTolist(s,{mergeInkVariables:true});o.length!==0&&t.push({line:n+1,command:s,tokens:o});}}return t}function Wl(i){return i.keyword==="required"&&typeof i.params?.missingProperty=="string"?i.params.missingProperty:i.keyword==="additionalProperties"&&typeof i.params?.additionalProperty=="string"?i.params.additionalProperty:i.instancePath.split("/").pop()||"(root)"}function Rh(i,e){let t=i.length+1,n=e.length+1,r=Array.from({length:t},(a,s)=>[s,...Array(n-1).fill(0)]);for(let a=1;a<n;a++)r[0][a]=a;for(let a=1;a<t;a++)for(let s=1;s<n;s++){let o=i[a-1]===e[s-1]?0:1;r[a][s]=Math.min(r[a-1][s]+1,r[a][s-1]+1,r[a-1][s-1]+o);}return r[t-1][n-1]}function ry(i,e){let t,n=1/0;for(let a of e){let s=Rh(i,a);s<n&&(n=s,t=a);}let r=Math.max(1,Math.floor(i.length/3));return n<=r?t:void 0}function sy(i,e){if(i.keyword==="additionalProperties"&&typeof i.params?.additionalProperty=="string"){let t=i.params.additionalProperty,n=e&&ry(t,e),r=n?` (did you mean "${n}"?)`:"";return `has an unrecognised property "${t}"${r}`}return i.message??"invalid value"}function Ys(i){return i.split("/").filter(Boolean).map(e=>e.replace(/~1/g,"/").replace(/~0/g,"~"))}function ay(i,e){let t=i,n,r=a=>{a&&typeof a=="object"&&typeof a.$origin=="string"&&(n=a.$origin);};r(t);for(let a of Ys(e)){if(t===null||typeof t!="object")break;t=t[a],r(t);}return n}function oy(i,e){let t=Ys(e);for(let n=t.length;n>=0;n--){let r=t.slice(0,n),a=i;for(let s of r){if(a===null||typeof a!="object"){a=void 0;break}a=a[s];}if(a&&typeof a=="object"&&!Array.isArray(a)&&typeof a.type=="string")return {path:`/${r.map(o=>o.replace(/~/g,"~0").replace(/\//g,"~1")).join("/")}`,node:a}}}function Ks(i,e,t=new Set){if(!i||typeof i!="object")return i;let n=i.$ref;if(typeof n!="string")return i;let r=n.match(/^#\/definitions\/([^/]+)$/);return !r?.[1]||t.has(r[1])||!(r[1]in e)?{}:(t.add(r[1]),Ks(e[r[1]],e,t))}function Xs(i,e){let t=Ks(i,e);if(!t||typeof t!="object")return;let n=t;if(!(n.anyOf||n.oneOf)){if(Array.isArray(n.allOf)){let r={properties:{},required:[]};for(let a of n.allOf){let s=Xs(a,e);if(!s)return;Object.assign(r.properties,s.properties),r.required.push(...s.required);}return r}return {properties:n.properties??{},required:n.required??[]}}}function Fh(i,e){if(!i||typeof i!="object")return true;let t=i;return "const"in t?t.const===e:Array.isArray(t.enum)?t.enum.includes(e):true}function ly(i,e){let t=i.definitions??{},n=[];for(let[r,a]of Object.entries(t)){let s=Xs(a,t);if(!s)continue;let o=s.properties.type;o&&typeof o=="object"&&("const"in o||Array.isArray(o.enum))&&Fh(o,e.type)&&Fh(s.properties.operationType,e.operationType)&&n.push(r);}return n}function uy(i,e,t){let n=i.definitions??{},r={definitions:n,...n[e]},a=new Nh({strict:false,allErrors:true}).compile(r);return a(t)?[]:a.errors??[]}function cy(i,e,t){let n=i.definitions??{},r=Ks(n[e],n);for(let a of Ys(t)){let o=Xs(r,n)?.properties[a];if(o===void 0)return [];r=Ks(o,n);}return Object.keys(Xs(r,n)?.properties??{})}function Us(i){let e=i.map(o=>o.instancePath),t=o=>e.some(l=>l!==o&&l.startsWith(`${o}/`)),n=i.filter(o=>!t(o.instancePath)),r=new Map;for(let o of n){let l=r.get(o.instancePath)??[];l.push(o),r.set(o.instancePath,l);}let a=[];for(let o of r.values()){let l=o.filter(u=>u.keyword!=="anyOf"&&u.keyword!=="oneOf");a.push(...l.length>0?l:o);}let s=new Set;return a.filter(o=>{let l=`${Wl(o)}|${o.message}`;return s.has(l)?false:(s.add(l),true)})}function Bl(i,e,t){return i.map(n=>({instancePath:n.instancePath||"(root)",element:Wl(n),message:sy(n,t?.(n)),origin:ay(e,n.instancePath)}))}function hy(i,e,t){let n=i.map(c=>c.instancePath),r=c=>n.some(h=>h!==c&&h.startsWith(`${c}/`)),a=i.filter(c=>!r(c.instancePath)),s=t&&typeof t=="object"?t:void 0,o=new Map,l=[];for(let c of a){let h=s?oy(e,c.instancePath):void 0;if(!h){l.push(c);continue}let m=o.get(h.path);m?m.errors.push(c):o.set(h.path,{node:h.node,errors:[c]});}let u=Bl(Us(l),e);for(let[c,h]of o){let m=s?ly(s,h.node):[],d=m.length===1?m[0]:void 0;if(!d||!s){u.push(...Bl(Us(h.errors),e));continue}let v=Us(uy(s,d,h.node)).map(A=>({...A,instancePath:`${c}${A.instancePath}`}));u.push(...Bl(v,e,A=>cy(s,d,A.instancePath.slice(c.length))));}return u}var ql;(h=>{function i(m,d={labelToRemove:[],initialVarsToRemove:[],functions:[],enums:{}}){let y=[];try{return {json:new Ih.Compiler(m,{errorHandler:(b,f)=>{let C=b.replace(/^[A-Z]+: line \d+: ?/,""),p=b.match(/line (\d+)/);y.push({message:C,type:f,line:p?Number(p[1]):-1});},countAllVisits:!0,fileHandler:{ResolveInkFilename:b=>b,LoadInkFileContents:()=>""},pluginNames:[],sourceFilename:null}).Compile().ToJson()||"",issues:y}}catch{let A=false,D={...d,textSource:m};return e(y,()=>{A=true;},D),A?i(D.textSource,d):{issues:y}}}h.compile=i;function e(m,d,y){let{functions:v,initialVarsToRemove:A,labelToRemove:D}=y,b=m.find(f=>f.type===Vh.ErrorType.Error);if(b){if(b.message.includes("Divert target not found")){let f=b.message.match(/Divert target not found: '-> (\w+)'/);if(f?.[1]){let C=f[1],p=`
|
|
69
|
+
|
|
70
|
+
=== ${C} ===
|
|
71
|
+
|
|
72
|
+
-> DONE`;return y.textSource=y.textSource.concat(p),D.push(C),d()}}if(b.message.includes("Unresolved variable")){let f=b.message.match(/Unresolved variable: (\w+)/);if(f?.[1]){let C=f[1],p=`VAR ${C} = ""
|
|
73
|
+
|
|
74
|
+
`;return y.textSource=p.concat(y.textSource),A.push(C),d()}}if(b.message.includes("Variable could not be found to assign to")){let f=b.message.match(/Variable could not be found to assign to: (\w+)/);if(f?.[1]){let C=f[1],p=`VAR ${C} = ""
|
|
75
|
+
|
|
76
|
+
`;return y.textSource=p.concat(y.textSource),A.push(C),d()}}if(b.message.includes("Variable could not be found to assign to")){let f=b.message.match(/Variable could not be found to assign to: '(\w+)'/);if(f?.[1]){let C=f[1],p=`VAR ${C} = ""
|
|
77
|
+
|
|
78
|
+
`;return y.textSource=p.concat(y.textSource),A.push(C),d()}}if(b.message.includes("Function call target not found")){let f=b.message.match(/Function call target not found: '-> (\w+)'/);if(f?.[1]){let C=f[1],p=`
|
|
79
|
+
|
|
80
|
+
=== function ${C}() ===
|
|
81
|
+
|
|
82
|
+
~ return
|
|
83
|
+
|
|
84
|
+
`;return y.textSource=y.textSource.concat(p),v.push({name:C,args:0}),D.push(C),d()}}if(b.message.includes(" arguments, but got ")){let f=b.message.match(/Function call to '(\w+)' requires (\d+) arguments, but got (\d+)/);if(f?.[1]){let C=f[1],p=parseInt(f[3]||"0",10),g=p>0?Array.from({length:p},(w,N)=>`arg${N+1}`).join(", "):"",S=`
|
|
85
|
+
|
|
86
|
+
=== function ${C}(${g}) ===
|
|
87
|
+
|
|
88
|
+
~ return
|
|
89
|
+
|
|
90
|
+
`;y.textSource=y.textSource.replaceAll(`
|
|
91
|
+
|
|
92
|
+
=== function ${C}() ===
|
|
93
|
+
|
|
94
|
+
~ return
|
|
95
|
+
|
|
96
|
+
`,""),y.textSource=y.textSource.concat(S);let _=v.find(w=>w.name===C);return _?_.args=p:(v.push({name:C,args:p}),D.push(C)),d()}}if(b.message.includes("Could not find target for read count")){let f=b.message.match(/Could not find target for read count: -> (\w+\.\w+)/);if(f?.[1]){let C=f[1],[p,g]=C.split("."),S=`
|
|
97
|
+
|
|
98
|
+
LIST ${p} = ${g}
|
|
99
|
+
|
|
100
|
+
`;return y.textSource=y.textSource.concat(S),y.initialVarsToRemove.push(p),y.initialVarsToRemove.push(`${p}.${g}`),d()}}if(b.message.includes("variable for increment could not be found")){let f=b.message.match(/variable for increment could not be found: '(\w+)' after searching:/);if(f?.[1]){let C=f[1],p=`VAR ${C} = 0
|
|
101
|
+
|
|
102
|
+
`;return y.textSource=p.concat(y.textSource),y.initialVarsToRemove.push(C),d()}}return m.forEach(f=>{let C=f.message.match(/Function call to '(\w+)' requires (\d+) arguments, but got (\d+)/);C?.[1]&&(f.message=`The function '${C[1]}' have optional arguments, but in ink all arguments must be required. Please make sure to provide all the required arguments for the function call.`);}),{issues:m}}return {issues:m}}h.getErrors=e;function t(m,d){return jl(m).filter(({tokens:y})=>!d.some(({validation:v})=>Ll(y,v)))}h.getUnknownHashtagCommands=t;function n(m,d){let y=d.filter(A=>A.validation.type==="zod");if(y.length===0)return [];let v=[];for(let A of jl(m)){if(d.some(({validation:f})=>Ll(A.tokens,f)))continue;let D;for(let f of y)for(let C of zs(f.validation.schema)){let{score:p,hasDiscriminant:g}=ZC(A.tokens,C);g&&(!D||p>D.score)&&(D={command:f,branch:C,score:p});}if(!D||D.score<QC)continue;let b=ey(ty(D.branch));if(!b(A.tokens))for(let f of Us(b.errors??[]))v.push({line:A.line,command:A.command,handlerName:D.command.name,instancePath:f.instancePath||"(root)",element:ny(f,A.tokens),message:iy(f),score:D.score});}return v}h.getLikelyUnknownHashtagCommandSchemaIssues=n;function r(m,d){let y=new Set;for(let f of m.matchAll(UC))f[1]&&y.add(f[1]);let v=new Set(d),A=new Set,D=m.split(/\r?\n/),b=[];for(let f=0;f<D.length;f++){let C=(D[f]??"").replace(/\/\/.*$/,"");for(let p of C.matchAll(/->[ \t]+(\w[\w.]*)/g)){let g=p[1];if(!g)continue;let S=g.split(".")[0]??g;KC.has(S)||y.has(S)||v.has(g)||v.has(g.replaceAll(".",XC))||v.has(S)||A.has(g)||(A.add(g),b.push({line:f+1,target:g}));}}return b}h.getUnknownDivertTargets=r;function a(m){return new Nh({strict:false,allErrors:true}).compile(m)}h.getSchemaValidator=a;function s(m,d){let y=typeof d=="function"?d:a(d);return y(m)?[]:hy(y.errors??[],m,y.schema)}h.validateAgainstJsonSchema=s;function o(m,d){let y=new Set,v=[];for(let f of d){let C=l(f);C!==void 0?v.push(C):y.add(String(f));}v.sort((f,C)=>C-f);let A=[],D=m.length;for(let f=m.length-1;f>=0;f--)y.has(m[f])&&(A.push({key:m[f],sectionTokens:m.slice(f+1,D)}),D=f);A.reverse();let b=[];for(let f of v)f<0||f>=D||(b.push({key:f,sectionTokens:m.slice(f,D)}),D=f-1);return b.reverse(),[...b,...A]}h.extractKeyedSections=o;function l(m){return typeof m=="number"?Number.isInteger(m)&&m>=0?m:void 0:/^\d+$/.test(m)?Number(m):void 0}function u(m,d){let y=o(m,Object.keys(d)),v=[];for(let{key:A,sectionTokens:D}of y){let b;try{b=T.convertListStringToObj(D);}catch(C){v.push({key:A,instancePath:"(root)",element:String(A),message:`could not parse "${A}" section into key/value pairs: ${C instanceof Error?C.message:String(C)}`});continue}let f=s(b,d[A]);v.push(...f.map(C=>({...C,key:A})));}return v}h.validateKeyedJsonSchemas=u;function c(m,d){let y=[];for(let v of jl(m)){let A=d.find(({validation:b})=>Ll(v.tokens,b));if(!A?.keySchemas)continue;let D=u(v.tokens,A.keySchemas);y.push(...D.map(b=>({...b,line:v.line,command:v.command})));}return y}h.getHashtagKeySchemaIssues=c;})(ql||={});var Ml=Zs(Kt(),1);function Lh(i){if(!i||i.length===0)return;let e=new Set;for(let t of i){let n=typeof t=="string"?t:t?.id;typeof n=="string"&&n.length>0&&e.add(n);}return e.size>0?e:void 0}function jh(i,e={}){let t={labelToRemove:[],initialVarsToRemove:[],functions:e.functions||[],enums:e.enums||{},textSource:i},{json:n,issues:r}=ql.compile(i,t);if(r.forEach(({message:s,type:o})=>{o===Ml.ErrorType.Error?W.error(`Ink compilation error: ${s}`):o===Ml.ErrorType.Warning?W.warn(`Ink compilation warning: ${s}`):W.info(`Ink compilation info: ${s}`);}),!n){W.error("No JSON generated from ink file");return}let a;try{a=xn.parse(n);}catch{W.error("Error parsing ink file");return}return t.enums=a.listDefs||{},ma.inkToJson(a,{...t,characterIds:Lh(e.characters)})}export{O as a,Zs as b,En as c,Re as d,Ci as e,Ny as f,By as g,Zy as h,T as i,Ky as j,Xy as k,Tu as l,Kt as m,ql as n,jh as o};
|