@spotify/backstage-plugin-pulse-common 0.11.6 → 0.11.8
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/CHANGELOG.md +13 -0
- package/dist/config.esm.js +1 -1
- package/dist/index.cjs.js +17 -17
- package/dist/templates/convertTemplateToNode.esm.js +1 -1
- package/dist/templates/evaluation.esm.js +1 -1
- package/dist/templates/index.esm.js +1 -1
- package/dist/templates/locators.esm.js +1 -1
- package/dist/templates/logic.esm.js +1 -1
- package/dist/templates/schema/logic_parser.esm.js +19 -19
- package/dist/templates/validateResponse.esm.js +1 -1
- package/dist/templates/validateTemplate.esm.js +1 -1
- package/package.json +10 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @spotify/backstage-plugin-pulse-common
|
|
2
2
|
|
|
3
|
+
## 0.11.8
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Upgraded Backstage to v1.29.1
|
|
8
|
+
|
|
9
|
+
## 0.11.7
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Added additional plugin metadata to `package.json`.
|
|
14
|
+
- Upgraded Backstage to v1.28.2
|
|
15
|
+
|
|
3
16
|
## 0.11.6
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
package/dist/config.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const
|
|
1
|
+
const r="pulse.experimentalFlags",l=(t,e)=>t.getOptionalStringArray(r)?.includes(e),o=(t,e)=>{const i=t.getOptionalStringArray(r),n=`${e}=`;return i?.find(a=>a.startsWith(n))?.replace(n,"")};export{l as getExperimentalOptionalBoolean,o as getExperimentalOptionalString};
|
|
2
2
|
//# sourceMappingURL=config.esm.js.map
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
"use strict";var Ft=require("@backstage/plugin-permission-common"),Zt=require("@ungap/structured-clone"),Bt=require("ajv"),Gt=require("ajv-formats"),Vt=require("assert"),Wt=require("crypto"),Xt=require("lodash");function W(i){return i&&typeof i=="object"&&"default"in i?i:{default:i}}function Ht(i){if(i&&typeof i=="object"&&"default"in i)return i;var t=Object.create(null);return i&&Object.keys(i).forEach(function(n){if(n!=="default"){var s=Object.getOwnPropertyDescriptor(i,n);Object.defineProperty(t,n,s.get?s:{enumerable:!0,get:function(){return i[n]}})}}),t.default=i,Object.freeze(t)}var Jt=W(Zt),Yt=W(Bt),Kt=W(Gt),en=W(Vt),tn=Ht(Wt),ne=W(Xt);const nn="survey-instance",Ge=Ft.createPermission({name:"survey.instance.administer",attributes:{action:"create"}}),sn=[Ge],Ve="pulse.experimentalFlags",rn=(i,t)=>{const n=i.getOptionalStringArray(Ve);return n==null?void 0:n.includes(t)},an=(i,t)=>{var n;const s=i.getOptionalStringArray(Ve),r=`${t}=`;return(n=s==null?void 0:s.find(a=>a.startsWith(r)))==null?void 0:n.replace(r,"")},on=()=>{"structuredClone"in globalThis||(globalThis.structuredClone=Jt.default)};var ln="surveyTemplate",_n="http://json-schema.org/draft-07/schema",cn="Survey Template",un="object",pn={template:{type:"object",description:"Meta data about the survey template",properties:{id:{type:"string",description:"An id of the survey template. If there are multiple templates with the same id, they must have different versions.",format:"regex",pattern:"^[a-zA-Z][a-zA-Z0-9_-]*[a-zA-Z0-9]$",minLength:1},version:{type:"string",format:"regex",pattern:"^[0-9]+(\\.[0-9]+)?$",description:"A version of template"},name:{type:"string",description:"The display name of the survey template",minLength:1},description:{type:"string",description:"A longer description of the survey template"},owner:{type:"string",description:"The owner of the survey template",minLength:1}},required:["id","version","name","owner"],additionalProperties:!1},parameters:{type:"array",description:"Template parameters that can or must be set when creating a survey from this template. Parameters are referred to elsewhere in the survey using the ${p:<id>} construct and will get lazily in-place replaced.",items:{type:"object",properties:{id:{type:"string",description:"The id of the parameter",format:"regex",pattern:"^[a-zA-Z][a-zA-Z0-9_]*$"},description:{type:"string",description:"The description of the parameter"},format:{type:"string",enum:["string","number","boolean"],description:"The format of the parameter. Should only be set if a default value is not provided."},default:{type:["string","number","boolean"],description:"An optional default value of this parameter. If this is omitted, the parameter must be provided when creating a survey from the template."}},required:["id","description"],oneOf:[{required:["format"]},{required:["default"]}],additionalProperties:!1}},macros:{type:"object",description:"Expression shortcuts. Macros are referred to elsewhere in the survey using the ${m:<name>} construct (similar to parameters) and will get lazily in-place replaced. Macros can be recursive and contain references to parameters or answers in the survey.",additionalProperties:{type:"string"}},sections:{type:"array",description:"The survey sections, in the order they will appear in the survey",items:{$ref:"#/$defs/section"}}},dn=!1,hn=["template","parameters","sections"],mn={section:{type:"object",description:"A survey section.",properties:{id:{type:"string",description:"The id of this section",format:"regex",pattern:"^[a-zA-Z][a-zA-Z0-9_-]*[a-zA-Z0-9]$"},name:{type:"string",description:"The name of this section"},display_logic:{type:"string",description:"An optional boolean expression that decides if the surveyee should see the questions in this section."},hide_progress_bar:{type:"boolean",description:"When set, the survey progress bar will not be shown during this section."},pages:{type:"array",description:"The questions in the section, split into pages",items:{$ref:"#/$defs/page"}}},additionalProperties:!1,required:["id","name","pages"]},page:{type:"object",properties:{questions:{type:"array",description:"The questions on the page",items:{$ref:"#/$defs/question"}}},required:["questions"],additionalProperties:!1},question:{type:"object",properties:{id:{type:"string",description:"The unique ID of the question",pattern:"^[a-zA-Z][a-zA-Z0-9_]*$"},text:{type:"string",description:"The question description, in markdown"},type:{type:"string",enum:["mc-single","mc-multi","matrix-single","matrix-multi","text-single","text-multi","description"],description:"The type of question"},layout:{type:"string",enum:["vertical","horizontal"],description:"Determines the visual layout of the options in multiple choice questions"},display_logic:{type:"string",description:"A boolean expression with logic if this question should be displayed or not"},required:{type:"string",enum:["required","optional","request"],description:"If the question is required to answer; request means you will get a warning if you skip it but you can."},validation:{type:"object",description:"Validation constraints on the question. Only applied if the user has answered the question, so typically used in combination with required",properties:{min_choices:{type:"integer",description:"The minimum number of choices to user can pick (multiple choice questions only)"},max_choices:{type:"integer",description:"The maximum number of choices to user can pick (multiple choice questions only)"}},additionalProperties:!1},statements:{type:"array",items:{$ref:"#/$defs/statement"}},dynamic_statements:{type:"string",description:"Carry forward statements from a previous question",pattern:"^[a-zA-Z][a-zA-Z0-9_]*/(all|selected|all_entered_text|selected_entered_text|not_selected|for_matrix_choice\\([\\-a-zA-Z0-9_]+\\)|unselected_for_matrix_choice\\([\\-a-zA-Z0-9_]+\\))$"},statement_groups:{type:"array",items:{type:"object",properties:{statements:{type:"array",items:{$ref:"#/$defs/statement"}},id:{type:"string",description:"The id of the group."},display:{type:"string",description:"The display name of the group"},display_logic:{type:"string",description:"A boolean expression determining if the group should be displayed"},randomization:{$ref:"#/$defs/randomization"}},required:["statements","id","display"],additionalProperties:!1}},choices:{type:"array",items:{$ref:"#/$defs/choice"}},dynamic_choices:{type:"string",description:"Carry forward choices from a previous question",pattern:"^[a-zA-Z][a-zA-Z0-9_]*/(all|selected|all_entered_text|selected_entered_text|not_selected|for_matrix_choice\\([\\-a-zA-Z0-9_]+\\)|unselected_for_matrix_choice\\([\\-a-zA-Z0-9_]+\\))$"},choice_groups:{type:"array",items:{type:"object",properties:{choices:{type:"array",items:{$ref:"#/$defs/choice"}},id:{type:"string",description:"The id of the group."},display:{type:"string",description:"The display name of the group"},display_logic:{type:"string",description:"A boolean expression determining if the group should be displayed"},randomization:{$ref:"#/$defs/randomization"}},required:["choices","id","display"],additionalProperties:!1}},randomization:{$ref:"#/$defs/randomization"},configuration:{type:"object",properties:{choice_column_width_pixels:{type:"integer",description:"Size of the column with the choice descriptions in a matrix question"}},additionalProperties:!1}},additionalProperties:!1,required:["text"],oneOf:[{$ref:"#/$defs/question-mc-horizontal"},{$ref:"#/$defs/question-mc-vertical"},{$ref:"#/$defs/question-matrix"},{$ref:"#/$defs/question-text"},{$ref:"#/$defs/question-description"}]},"question-mc-horizontal":{type:"object",properties:{type:{enum:["mc-single","mc-multi"]},position:{const:"horizontal"}},required:["id","type","position","choices"],not:{anyOf:[{required:["choice_groups"]},{required:["dynamic_choices"]},{required:["statements"]},{required:["dynamic_statements"]},{required:["statement_groups"]}]}},"question-mc-vertical":{type:"object",properties:{type:{enum:["mc-single","mc-multi"]},position:{const:"vertical"}},required:["id","type"],not:{anyOf:[{required:["statements"]},{required:["dynamic_statements"]},{required:["statement_groups"]}]},oneOf:[{anyOf:[{required:["choices"]},{required:["dynamic_choices"]}],not:{required:["choice_groups"]}},{required:["choice_groups"],not:{anyOf:[{required:["choices"]},{required:["dynamic_choices"]}]}}]},"question-matrix":{type:"object",properties:{type:{enum:["matrix-single","matrix-multi"]}},required:["id","type","choices"],not:{anyOf:[{required:["dynamic_choices"]},{required:["choice_groups"]}]},oneOf:[{anyOf:[{required:["statements"]},{required:["dynamic_statements"]}],not:{required:["statement_groups"]}},{required:["statement_groups"],not:{anyOf:[{required:["statements"]},{required:["dynamic_statements"]}]}}]},"question-text":{type:"object",properties:{type:{enum:["text-single","text-multi"]}},required:["id","type"],not:{anyOf:[{required:["choices"]},{required:["choice_groups"]},{required:["dynamic_choices"]},{required:["statements"]},{required:["statement_groups"]},{required:["dynamic_statements"]},{required:["randomization"]}]}},"question-description":{type:"object",properties:{type:{const:"description"}},not:{anyOf:[{required:["choices"]},{required:["choice_groups"]},{required:["dynamic_choices"]},{required:["statements"]},{required:["statement_groups"]},{required:["dynamic_statements"]},{required:["randomization"]}]}},statement:{type:"object",properties:{id:{type:"string",pattern:"^[a-zA-Z][a-zA-Z0-9_]*$",description:"The id of the statement"},display:{type:"string",description:"The statement name, as shown to the surveyee"},display_logic:{type:"string",description:"A boolean expression determining if the statement should be displayed"}},required:["id","display"],additionalProperties:!1},choice:{type:"object",properties:{display:{type:"string",description:"The choice name, as shown to the surveyee"},id:{type:"string",pattern:"^[a-zA-Z][a-zA-Z0-9_]*$",description:"The id of the choice"},value:{type:"integer",description:"The value the choice"},display_logic:{type:"string",description:"A boolean expression determining if the choice should be displayed"},text_input:{type:"string",enum:["no","optional","forced"],description:"If a textbox should appear next to the choice, and if it should be mandatory to fill it in if the choice is selected"},exclusive_answer:{type:"boolean",description:"If true, this choice can't be combined with other choices in this question"}},required:["display"],oneOf:[{required:["value"]},{required:["id"]}],additionalProperties:!1},randomization:{type:"object",description:"Configuration of the display order randomization of choices, statements or groups.",properties:{type:{type:"string",description:"The type of randomization: randomize all items, a subset of them, or using constrained randomization",enum:["all","subset","constrained"]},total:{type:"integer",description:"Maximum number of items to show"},order:{type:"string",description:"A space separated string containing the order of the items; each 'word' is either an id of some item or the wildcard $ representing the remaining items"}},required:["type"],oneOf:[{properties:{type:{const:"all"}},not:{required:["total","order"]}},{properties:{type:{const:"subset"}},required:["total"],not:{required:["order"]}},{properties:{type:{const:"constrained"}},required:["order"]}],additionalProperties:!1}},We={$id:ln,$schema:_n,title:cn,type:un,properties:pn,additionalProperties:dn,required:hn,$defs:mn};const fn=/\$\{m:([^\}]+)\}/g,yn=100,ge=(i,t)=>{if(typeof t=="string"){let n=t,s=0;for(;s<yn;){const r=n.replace(fn,(a,o)=>{if(i[o]===void 0)throw new Error(`Undefined macro: ${o}`);return i[o]});if(r===n)return r;n=r,s+=1}throw new Error(`Failed to finish interpolate macros - cyclic macros!? Stuck at: ${t}"`)}return typeof t=="object"&&Object.keys(t).forEach(n=>{t[n]=ge(i,t[n])}),t},Xe=i=>(i.sections=ge(i.macros||{},i.sections),i),gn="(?<questionId>[a-zA-Z][a-zA-Z0-9_]*)",xn="((?<expressionWithoutIdentifier>all|all_entered_text|selected|selected_entered_text|not_selected)|(?<expressionWithIdentifier>for_matrix_choice|unselected_for_matrix_choice)(\\((?<identifier>[\\-a-zA-Z0-9_]+)\\)))",He=new RegExp(`^${gn}/${xn}$`);var v=(i=>(i.ALL="all",i.ALL_ENTERED_TEXT="all_entered_text",i.SELECTED="selected",i.SELECTED_ENTERED_TEXT="selected_entered_text",i.NOT_SELECTED="not_selected",i.FOR_MATRIX_CHOICE="for_matrix_choice",i.UNSELECTED_FOR_MATRIX_CHOICE="unselected_for_matrix_choice",i))(v||{});const Je=i=>He.test(i),D=i=>{var t;const n=(t=i.match(He))==null?void 0:t.groups;if(!n)throw new Error(`Invalid locator expression: ${i}`);const s=n.expressionWithoutIdentifier||n.expressionWithIdentifier||"all",r={questionId:n.questionId,expression:s};if(n.identifier){const a=isNaN(parseInt(n.identifier,10))?n.identifier:parseInt(n.identifier,10);r.identifier=a}return r};var wn=(i=>(i.DuplicateResponse="DUPLICATE_RESPONSE",i.InternalError="INTERNAL_ERROR",i.InvalidDates="INVALID_DATES",i.InvalidId="INVALID_ID",i.InvalidParticipants="INVALID_PARTICIPANTS",i.InvalidResponse="INVALID_RESPONSE",i.MissingTitle="MISSING_TITLE",i.OverlappingSurveys="OVERLAPPING_SURVEYS",i.ParticipantsFrozen="PARTICIPANTS_FROZEN",i.SurveyIsClosed="SURVEY_IS_CLOSED",i.Unauthorized="UNAUTHORIZED",i))(wn||{}),vn=(i=>(i.Horizontal="HORIZONTAL",i.Vertical="VERTICAL",i))(vn||{}),Tn=(i=>(i.Optional="OPTIONAL",i.Request="REQUEST",i.Required="REQUIRED",i))(Tn||{}),N=(i=>(i.Description="DESCRIPTION",i.MatrixMulti="MATRIX_MULTI",i.MatrixSingle="MATRIX_SINGLE",i.McMulti="MC_MULTI",i.McSingle="MC_SINGLE",i.TextMulti="TEXT_MULTI",i.TextSingle="TEXT_SINGLE",i))(N||{}),bn=(i=>(i.All="ALL",i.Constrained="CONSTRAINED",i.Subset="SUBSET",i))(bn||{}),En=(i=>(i.Finalized="FINALIZED",i.Partial="PARTIAL",i))(En||{}),Rn=(i=>(i.Active="ACTIVE",i.Published="PUBLISHED",i))(Rn||{}),In=(i=>(i.Q1="Q1",i.Q2="Q2",i.Q3="Q3",i.Q4="Q4",i))(In||{});const ie=(i,t="camelCase")=>{const n=t==="camelCase"?ne.default.camelCase:ne.default.snakeCase;return ne.default.transform(i,(s,r,a)=>{const o=typeof a=="string"?n(a):a;s[o]=ne.default.isObject(r)&&!(r instanceof Date)?ie(r,t):r})};function Nn(i){const t=structuredClone(i);return{...t,...t.template,sections:t.sections.map(n=>({...ie(n),pages:n.pages.map((s,r)=>({...s,id:`${n.id}-${r}`,questions:qn(t,n,s.questions)}))}))}}function qn(i,t,n){return n.map(s=>kn(i.template.id,t,s))}function kn(i,t,n){var s,r;return{...ie({...n,choiceGroups:(s=n.choice_groups)==null?void 0:s.map(a=>({...a,randomization:xe(a.randomization)})),statementGroups:(r=n.statement_groups)==null?void 0:r.map(a=>({...a,randomization:xe(a.randomization)})),randomization:xe(n.randomization)}),id:Ke(i,n),type:ve(n.type),layout:On(n.layout),required:An(n.required),label:t.name}}function xe(i){var t;return i?{type:Ye(i.type),order:(t=i.order)==null?void 0:t.split(" "),total:i.total}:void 0}function Ye(i){return i.toUpperCase()}function Ke(i,t){return`${i}.${t.id}`}const we=i=>i.split(".").pop();function ve(i="description"){return i.replace("-","_").toUpperCase()}function On(i){return i==null?void 0:i.toUpperCase()}function An(i="optional"){return i.replace("-","_").toUpperCase()}function Te(i){return structuredClone(i).sections.flatMap(t=>t.pages.flatMap(n=>n.questions))}var Sn=Object.defineProperty,$n=(i,t,n)=>t in i?Sn(i,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):i[t]=n,q=(i,t,n)=>($n(i,typeof t!="symbol"?t+"":t,n),n);function zn(i={}){return i.transformer&&i.transformer.constructor.name==="object"&&(i.transformer=Y.fromObj(i.transformer)),It._load_from_dict({data:Ci,memo:Qi,...i})}const et={};class tt{}const se={},nt={escape(i){return i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},compile(i,t){return new RegExp(i,t)},error:SyntaxError};function Dn(i,t,n,s){const r=i.compile(t,s).exec(n);if(r!=null)return r[0]}class it{constructor(t,n,s,r,a=!1){this.terminals=t,this.g_regex_flags=n,this.re_=s,this.use_bytes=r,this.match_whole=a,this.allowed_types=new Set(this.terminals.map(o=>o.name)),this._regexps=this._build_mres(t)}_build_mres(t){let n=this.match_whole?"$":"",s=Fn(t,a=>a.pattern.flags.join("")),r=[];for(let[a,o]of s){const l=o.map(u=>`(?<${u.name}>${u.pattern.to_regexp()+n})`).join("|");r.push(new RegExp(l,this.g_regex_flags+a+"y"))}return r}match(t,n){for(const s of this._regexps){s.lastIndex=n;let r=s.exec(t);if(r){let a=null;for(let[o,l]of Object.entries(r.groups))if(l){a=o;break}return[r[0],a]}}}}const st=typeof require!="undefined"&&require("util");class rt{}const X={};function w(i){return Object.entries(i)}function be(i){return Object.keys(i)}function Pn(i,t){t===void 0&&(t=Object.keys(i)[0]);let n=i[t];return delete i[t],n}function at(i,t,n=null){return i[t]||n}function ot(i,t){if(i.constructor.name==="Map")for(const[n,s]of w(t))i.set(n,s);else for(const[n,s]of w(t))i[n]=s}function Ln(i){return function(){return new i(...arguments)}}function f(i){let t=0,n=[...arguments].slice(1);return i.replace(/%([sr])/g,function(){const s=arguments[1],r=n[t++];return s==="r"?st?st.inspect(r,!1,null,!0):JSON.stringify(r,null,0):r})}function Cn(i,t){let n=new Set(i);for(const s of t)n.add(s);return n}function lt(i,t){return[...i].filter(n=>!t.has(n))}function _t(i){return{...i}}function ct(i){return!!i}function Ee(i){return Object.create(i.prototype)}function k(i){if(typeof i=="object"){let t=Object.create(Object.getPrototypeOf(i));return Object.assign(t,i)}return i}function re(i){return new Set(i)}function Re(i){return i&&i.constructor.name==="Object"}function Qn(i){return i&&i.constructor.name==="Array"}function Mn(i){return typeof i=="function"}function*H(i,t=0){let n=t;for(const s of i)yield[n++,s]}function jn(i){for(const t of i)if(t)return!0;return!1}function ut(i,t){return t.filter(i||ct)}function ae(i){let t=[...arguments].slice(1);return function(){return i(...t,...arguments)}}class Ie extends Error{}function b(i){return i[i.length-1]}function P(i){return function(){let t=new i(...arguments);return t.__call__.bind(t)}}function A(i,t){return Array.from({length:t},()=>i).flat()}function pt(i){return/^[A-Z_$]*$/.test(i)}function Ne(i,t,n){const s=i.split(t);return n?s.splice(-n-1):s}function qe(i,t){let n=new RegExp(t,"g");return(i.match(n)||[]).length}function Un(i,t){for(let n of i)if(!t.has(n))return!1;return!0}function*Fn(i,t){let n=[],s=null;for(const r of i){const a=t(r);s&&a!=s&&(yield[s,n],n=[]),n.push(r),s=a}yield[s,n]}let S=class extends Error{};class $ extends S{}function ke(i,t,n="Got %r, expected one of %s"){if(!t.includes(i))throw new $(f(n,i,t))}class oe extends S{}class Zn extends S{}let J=class extends S{},Q=class jt extends S{constructor(){super(...arguments),q(this,"pos_in_stream",null),q(this,"_terminals_by_name",null)}get_context(t,n=40){let s,r,a=this.pos_in_stream,o=max(a-n,0),l=a+n;return t instanceof bytes?(r=b(Ne(t.slice(o,a),`
|
|
2
|
-
`,1)),
|
|
3
|
-
`,1)[0],(r+
|
|
1
|
+
"use strict";var St=require("@backstage/plugin-permission-common"),$t=require("@ungap/structured-clone"),zt=require("ajv"),Dt=require("ajv-formats"),Pt=require("assert"),Lt=require("crypto"),Ct=require("lodash");function j(s){return s&&typeof s=="object"&&"default"in s?s:{default:s}}function Qt(s){if(s&&typeof s=="object"&&"default"in s)return s;var t=Object.create(null);return s&&Object.keys(s).forEach(function(n){if(n!=="default"){var i=Object.getOwnPropertyDescriptor(s,n);Object.defineProperty(t,n,i.get?i:{enumerable:!0,get:function(){return s[n]}})}}),t.default=s,Object.freeze(t)}var Mt=j($t),jt=j(zt),Ut=j(Dt),Ft=j(Pt),Bt=Qt(Lt),V=j(Ct);const Zt="survey-instance",Pe=St.createPermission({name:"survey.instance.administer",attributes:{action:"create"}}),Gt=[Pe],Le="pulse.experimentalFlags",Vt=(s,t)=>s.getOptionalStringArray(Le)?.includes(t),Wt=(s,t)=>{const n=s.getOptionalStringArray(Le),i=`${t}=`;return n?.find(r=>r.startsWith(i))?.replace(i,"")},Xt=()=>{"structuredClone"in globalThis||(globalThis.structuredClone=Mt.default)};var Ht="surveyTemplate",Jt="http://json-schema.org/draft-07/schema",Yt="Survey Template",Kt="object",en={template:{type:"object",description:"Meta data about the survey template",properties:{id:{type:"string",description:"An id of the survey template. If there are multiple templates with the same id, they must have different versions.",format:"regex",pattern:"^[a-zA-Z][a-zA-Z0-9_-]*[a-zA-Z0-9]$",minLength:1},version:{type:"string",format:"regex",pattern:"^[0-9]+(\\.[0-9]+)?$",description:"A version of template"},name:{type:"string",description:"The display name of the survey template",minLength:1},description:{type:"string",description:"A longer description of the survey template"},owner:{type:"string",description:"The owner of the survey template",minLength:1}},required:["id","version","name","owner"],additionalProperties:!1},parameters:{type:"array",description:"Template parameters that can or must be set when creating a survey from this template. Parameters are referred to elsewhere in the survey using the ${p:<id>} construct and will get lazily in-place replaced.",items:{type:"object",properties:{id:{type:"string",description:"The id of the parameter",format:"regex",pattern:"^[a-zA-Z][a-zA-Z0-9_]*$"},description:{type:"string",description:"The description of the parameter"},format:{type:"string",enum:["string","number","boolean"],description:"The format of the parameter. Should only be set if a default value is not provided."},default:{type:["string","number","boolean"],description:"An optional default value of this parameter. If this is omitted, the parameter must be provided when creating a survey from the template."}},required:["id","description"],oneOf:[{required:["format"]},{required:["default"]}],additionalProperties:!1}},macros:{type:"object",description:"Expression shortcuts. Macros are referred to elsewhere in the survey using the ${m:<name>} construct (similar to parameters) and will get lazily in-place replaced. Macros can be recursive and contain references to parameters or answers in the survey.",additionalProperties:{type:"string"}},sections:{type:"array",description:"The survey sections, in the order they will appear in the survey",items:{$ref:"#/$defs/section"}}},tn=!1,nn=["template","parameters","sections"],sn={section:{type:"object",description:"A survey section.",properties:{id:{type:"string",description:"The id of this section",format:"regex",pattern:"^[a-zA-Z][a-zA-Z0-9_-]*[a-zA-Z0-9]$"},name:{type:"string",description:"The name of this section"},display_logic:{type:"string",description:"An optional boolean expression that decides if the surveyee should see the questions in this section."},hide_progress_bar:{type:"boolean",description:"When set, the survey progress bar will not be shown during this section."},pages:{type:"array",description:"The questions in the section, split into pages",items:{$ref:"#/$defs/page"}}},additionalProperties:!1,required:["id","name","pages"]},page:{type:"object",properties:{questions:{type:"array",description:"The questions on the page",items:{$ref:"#/$defs/question"}}},required:["questions"],additionalProperties:!1},question:{type:"object",properties:{id:{type:"string",description:"The unique ID of the question",pattern:"^[a-zA-Z][a-zA-Z0-9_]*$"},text:{type:"string",description:"The question description, in markdown"},type:{type:"string",enum:["mc-single","mc-multi","matrix-single","matrix-multi","text-single","text-multi","description"],description:"The type of question"},layout:{type:"string",enum:["vertical","horizontal"],description:"Determines the visual layout of the options in multiple choice questions"},display_logic:{type:"string",description:"A boolean expression with logic if this question should be displayed or not"},required:{type:"string",enum:["required","optional","request"],description:"If the question is required to answer; request means you will get a warning if you skip it but you can."},validation:{type:"object",description:"Validation constraints on the question. Only applied if the user has answered the question, so typically used in combination with required",properties:{min_choices:{type:"integer",description:"The minimum number of choices to user can pick (multiple choice questions only)"},max_choices:{type:"integer",description:"The maximum number of choices to user can pick (multiple choice questions only)"}},additionalProperties:!1},statements:{type:"array",items:{$ref:"#/$defs/statement"}},dynamic_statements:{type:"string",description:"Carry forward statements from a previous question",pattern:"^[a-zA-Z][a-zA-Z0-9_]*/(all|selected|all_entered_text|selected_entered_text|not_selected|for_matrix_choice\\([\\-a-zA-Z0-9_]+\\)|unselected_for_matrix_choice\\([\\-a-zA-Z0-9_]+\\))$"},statement_groups:{type:"array",items:{type:"object",properties:{statements:{type:"array",items:{$ref:"#/$defs/statement"}},id:{type:"string",description:"The id of the group."},display:{type:"string",description:"The display name of the group"},display_logic:{type:"string",description:"A boolean expression determining if the group should be displayed"},randomization:{$ref:"#/$defs/randomization"}},required:["statements","id","display"],additionalProperties:!1}},choices:{type:"array",items:{$ref:"#/$defs/choice"}},dynamic_choices:{type:"string",description:"Carry forward choices from a previous question",pattern:"^[a-zA-Z][a-zA-Z0-9_]*/(all|selected|all_entered_text|selected_entered_text|not_selected|for_matrix_choice\\([\\-a-zA-Z0-9_]+\\)|unselected_for_matrix_choice\\([\\-a-zA-Z0-9_]+\\))$"},choice_groups:{type:"array",items:{type:"object",properties:{choices:{type:"array",items:{$ref:"#/$defs/choice"}},id:{type:"string",description:"The id of the group."},display:{type:"string",description:"The display name of the group"},display_logic:{type:"string",description:"A boolean expression determining if the group should be displayed"},randomization:{$ref:"#/$defs/randomization"}},required:["choices","id","display"],additionalProperties:!1}},randomization:{$ref:"#/$defs/randomization"},configuration:{type:"object",properties:{choice_column_width_pixels:{type:"integer",description:"Size of the column with the choice descriptions in a matrix question"}},additionalProperties:!1}},additionalProperties:!1,required:["text"],oneOf:[{$ref:"#/$defs/question-mc-horizontal"},{$ref:"#/$defs/question-mc-vertical"},{$ref:"#/$defs/question-matrix"},{$ref:"#/$defs/question-text"},{$ref:"#/$defs/question-description"}]},"question-mc-horizontal":{type:"object",properties:{type:{enum:["mc-single","mc-multi"]},position:{const:"horizontal"}},required:["id","type","position","choices"],not:{anyOf:[{required:["choice_groups"]},{required:["dynamic_choices"]},{required:["statements"]},{required:["dynamic_statements"]},{required:["statement_groups"]}]}},"question-mc-vertical":{type:"object",properties:{type:{enum:["mc-single","mc-multi"]},position:{const:"vertical"}},required:["id","type"],not:{anyOf:[{required:["statements"]},{required:["dynamic_statements"]},{required:["statement_groups"]}]},oneOf:[{anyOf:[{required:["choices"]},{required:["dynamic_choices"]}],not:{required:["choice_groups"]}},{required:["choice_groups"],not:{anyOf:[{required:["choices"]},{required:["dynamic_choices"]}]}}]},"question-matrix":{type:"object",properties:{type:{enum:["matrix-single","matrix-multi"]}},required:["id","type","choices"],not:{anyOf:[{required:["dynamic_choices"]},{required:["choice_groups"]}]},oneOf:[{anyOf:[{required:["statements"]},{required:["dynamic_statements"]}],not:{required:["statement_groups"]}},{required:["statement_groups"],not:{anyOf:[{required:["statements"]},{required:["dynamic_statements"]}]}}]},"question-text":{type:"object",properties:{type:{enum:["text-single","text-multi"]}},required:["id","type"],not:{anyOf:[{required:["choices"]},{required:["choice_groups"]},{required:["dynamic_choices"]},{required:["statements"]},{required:["statement_groups"]},{required:["dynamic_statements"]},{required:["randomization"]}]}},"question-description":{type:"object",properties:{type:{const:"description"}},not:{anyOf:[{required:["choices"]},{required:["choice_groups"]},{required:["dynamic_choices"]},{required:["statements"]},{required:["statement_groups"]},{required:["dynamic_statements"]},{required:["randomization"]}]}},statement:{type:"object",properties:{id:{type:"string",pattern:"^[a-zA-Z][a-zA-Z0-9_]*$",description:"The id of the statement"},display:{type:"string",description:"The statement name, as shown to the surveyee"},display_logic:{type:"string",description:"A boolean expression determining if the statement should be displayed"}},required:["id","display"],additionalProperties:!1},choice:{type:"object",properties:{display:{type:"string",description:"The choice name, as shown to the surveyee"},id:{type:"string",pattern:"^[a-zA-Z][a-zA-Z0-9_]*$",description:"The id of the choice"},value:{type:"integer",description:"The value the choice"},display_logic:{type:"string",description:"A boolean expression determining if the choice should be displayed"},text_input:{type:"string",enum:["no","optional","forced"],description:"If a textbox should appear next to the choice, and if it should be mandatory to fill it in if the choice is selected"},exclusive_answer:{type:"boolean",description:"If true, this choice can't be combined with other choices in this question"}},required:["display"],oneOf:[{required:["value"]},{required:["id"]}],additionalProperties:!1},randomization:{type:"object",description:"Configuration of the display order randomization of choices, statements or groups.",properties:{type:{type:"string",description:"The type of randomization: randomize all items, a subset of them, or using constrained randomization",enum:["all","subset","constrained"]},total:{type:"integer",description:"Maximum number of items to show"},order:{type:"string",description:"A space separated string containing the order of the items; each 'word' is either an id of some item or the wildcard $ representing the remaining items"}},required:["type"],oneOf:[{properties:{type:{const:"all"}},not:{required:["total","order"]}},{properties:{type:{const:"subset"}},required:["total"],not:{required:["order"]}},{properties:{type:{const:"constrained"}},required:["order"]}],additionalProperties:!1}},Ce={$id:Ht,$schema:Jt,title:Yt,type:Kt,properties:en,additionalProperties:tn,required:nn,$defs:sn};const rn=/\$\{m:([^\}]+)\}/g,an=100,_e=(s,t)=>{if(typeof t=="string"){let n=t,i=0;for(;i<an;){const r=n.replace(rn,(a,o)=>{if(s[o]===void 0)throw new Error(`Undefined macro: ${o}`);return s[o]});if(r===n)return r;n=r,i+=1}throw new Error(`Failed to finish interpolate macros - cyclic macros!? Stuck at: ${t}"`)}return typeof t=="object"&&Object.keys(t).forEach(n=>{t[n]=_e(s,t[n])}),t},Qe=s=>(s.sections=_e(s.macros||{},s.sections),s),on="(?<questionId>[a-zA-Z][a-zA-Z0-9_]*)",ln="((?<expressionWithoutIdentifier>all|all_entered_text|selected|selected_entered_text|not_selected)|(?<expressionWithIdentifier>for_matrix_choice|unselected_for_matrix_choice)(\\((?<identifier>[\\-a-zA-Z0-9_]+)\\)))",Me=new RegExp(`^${on}/${ln}$`);var w=(s=>(s.ALL="all",s.ALL_ENTERED_TEXT="all_entered_text",s.SELECTED="selected",s.SELECTED_ENTERED_TEXT="selected_entered_text",s.NOT_SELECTED="not_selected",s.FOR_MATRIX_CHOICE="for_matrix_choice",s.UNSELECTED_FOR_MATRIX_CHOICE="unselected_for_matrix_choice",s))(w||{});const je=s=>Me.test(s),S=s=>{const t=s.match(Me)?.groups;if(!t)throw new Error(`Invalid locator expression: ${s}`);const n=t.expressionWithoutIdentifier||t.expressionWithIdentifier||"all",i={questionId:t.questionId,expression:n};if(t.identifier){const r=isNaN(parseInt(t.identifier,10))?t.identifier:parseInt(t.identifier,10);i.identifier=r}return i};var _n=(s=>(s.DuplicateResponse="DUPLICATE_RESPONSE",s.InternalError="INTERNAL_ERROR",s.InvalidDates="INVALID_DATES",s.InvalidId="INVALID_ID",s.InvalidParticipants="INVALID_PARTICIPANTS",s.InvalidResponse="INVALID_RESPONSE",s.MissingTitle="MISSING_TITLE",s.OverlappingSurveys="OVERLAPPING_SURVEYS",s.ParticipantsFrozen="PARTICIPANTS_FROZEN",s.SurveyIsClosed="SURVEY_IS_CLOSED",s.Unauthorized="UNAUTHORIZED",s))(_n||{}),cn=(s=>(s.Horizontal="HORIZONTAL",s.Vertical="VERTICAL",s))(cn||{}),pn=(s=>(s.Optional="OPTIONAL",s.Request="REQUEST",s.Required="REQUIRED",s))(pn||{}),I=(s=>(s.Description="DESCRIPTION",s.MatrixMulti="MATRIX_MULTI",s.MatrixSingle="MATRIX_SINGLE",s.McMulti="MC_MULTI",s.McSingle="MC_SINGLE",s.TextMulti="TEXT_MULTI",s.TextSingle="TEXT_SINGLE",s))(I||{}),un=(s=>(s.All="ALL",s.Constrained="CONSTRAINED",s.Subset="SUBSET",s))(un||{}),dn=(s=>(s.Finalized="FINALIZED",s.Partial="PARTIAL",s))(dn||{}),hn=(s=>(s.Active="ACTIVE",s.Published="PUBLISHED",s))(hn||{}),mn=(s=>(s.Q1="Q1",s.Q2="Q2",s.Q3="Q3",s.Q4="Q4",s))(mn||{});const W=(s,t="camelCase")=>{const n=t==="camelCase"?V.default.camelCase:V.default.snakeCase;return V.default.transform(s,(i,r,a)=>{const o=typeof a=="string"?n(a):a;i[o]=V.default.isObject(r)&&!(r instanceof Date)?W(r,t):r})};function fn(s){const t=structuredClone(s);return{...t,...t.template,sections:t.sections.map(n=>({...W(n),pages:n.pages.map((i,r)=>({...i,id:`${n.id}-${r}`,questions:yn(t,n,i.questions)}))}))}}function yn(s,t,n){return n.map(i=>gn(s.template.id,t,i))}function gn(s,t,n){return{...W({...n,choiceGroups:n.choice_groups?.map(i=>({...i,randomization:ce(i.randomization)})),statementGroups:n.statement_groups?.map(i=>({...i,randomization:ce(i.randomization)})),randomization:ce(n.randomization)}),id:Fe(s,n),type:ue(n.type),layout:xn(n.layout),required:wn(n.required),label:t.name}}function ce(s){return s?{type:Ue(s.type),order:s.order?.split(" "),total:s.total}:void 0}function Ue(s){return s.toUpperCase()}function Fe(s,t){return`${s}.${t.id}`}const pe=s=>s.split(".").pop();function ue(s="description"){return s.replace("-","_").toUpperCase()}function xn(s){return s?.toUpperCase()}function wn(s="optional"){return s.replace("-","_").toUpperCase()}function de(s){return structuredClone(s).sections.flatMap(t=>t.pages.flatMap(n=>n.questions))}function vn(s={}){return s.transformer&&s.transformer.constructor.name==="object"&&(s.transformer=Z.fromObj(s.transformer)),ft._load_from_dict({data:Ii,memo:Ri,...s})}const Be={};class Ze{}const X={},Ge={escape(s){return s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},compile(s,t){return new RegExp(s,t)},error:SyntaxError};function Tn(s,t,n,i){const r=s.compile(t,i).exec(n);if(r!=null)return r[0]}class Ve{constructor(t,n,i,r,a=!1){this.terminals=t,this.g_regex_flags=n,this.re_=i,this.use_bytes=r,this.match_whole=a,this.allowed_types=new Set(this.terminals.map(o=>o.name)),this._regexps=this._build_mres(t)}_build_mres(t){let n=this.match_whole?"$":"",i=On(t,a=>a.pattern.flags.join("")),r=[];for(let[a,o]of i){const l=o.map(p=>`(?<${p.name}>${p.pattern.to_regexp()+n})`).join("|");r.push(new RegExp(l,this.g_regex_flags+a+"y"))}return r}match(t,n){for(const i of this._regexps){i.lastIndex=n;let r=i.exec(t);if(r){let a=null;for(let[o,l]of Object.entries(r.groups))if(l){a=o;break}return[r[0],a]}}}}const We=typeof require<"u"&&require("util");class Xe{}const U={};function g(s){return Object.entries(s)}function he(s){return Object.keys(s)}function bn(s,t){t===void 0&&(t=Object.keys(s)[0]);let n=s[t];return delete s[t],n}function He(s,t,n=null){return s[t]||n}function Je(s,t){if(s.constructor.name==="Map")for(const[n,i]of g(t))s.set(n,i);else for(const[n,i]of g(t))s[n]=i}function En(s){return function(){return new s(...arguments)}}function h(s){let t=0,n=[...arguments].slice(1);return s.replace(/%([sr])/g,function(){const i=arguments[1],r=n[t++];return i==="r"?We?We.inspect(r,!1,null,!0):JSON.stringify(r,null,0):r})}function In(s,t){let n=new Set(s);for(const i of t)n.add(i);return n}function Ye(s,t){return[...s].filter(n=>!t.has(n))}function Ke(s){return{...s}}function et(s){return!!s}function me(s){return Object.create(s.prototype)}function R(s){if(typeof s=="object"){let t=Object.create(Object.getPrototypeOf(s));return Object.assign(t,s)}return s}function H(s){return new Set(s)}function fe(s){return s&&s.constructor.name==="Object"}function Rn(s){return s&&s.constructor.name==="Array"}function Nn(s){return typeof s=="function"}function*F(s,t=0){let n=t;for(const i of s)yield[n++,i]}function qn(s){for(const t of s)if(t)return!0;return!1}function tt(s,t){return t.filter(s||et)}function J(s){let t=[...arguments].slice(1);return function(){return s(...t,...arguments)}}class ye extends Error{}function v(s){return s[s.length-1]}function $(s){return function(){let t=new s(...arguments);return t.__call__.bind(t)}}function N(s,t){return Array.from({length:t},()=>s).flat()}function nt(s){return/^[A-Z_$]*$/.test(s)}function ge(s,t,n){const i=s.split(t);return n?i.splice(-n-1):i}function xe(s,t){let n=new RegExp(t,"g");return(s.match(n)||[]).length}function kn(s,t){for(let n of s)if(!t.has(n))return!1;return!0}function*On(s,t){let n=[],i=null;for(const r of s){const a=t(r);i&&a!=i&&(yield[i,n],n=[]),n.push(r),i=a}yield[i,n]}let q=class extends Error{};class k extends q{}function we(s,t,n="Got %r, expected one of %s"){if(!t.includes(s))throw new k(h(n,s,t))}class Y extends q{}class An extends q{}class B extends q{}class A extends q{pos_in_stream=null;_terminals_by_name=null;get_context(t,n=40){let i,r,a=this.pos_in_stream,o=max(a-n,0),l=a+n;return t instanceof bytes?(r=v(ge(t.slice(o,a),`
|
|
2
|
+
`,1)),i=t.slice(a,l).split(`
|
|
3
|
+
`,1)[0],(r+i+`
|
|
4
4
|
`+" "*r.expandtabs().length+`^
|
|
5
|
-
`).decode("ascii","backslashreplace")):(r=
|
|
6
|
-
`,1)),
|
|
7
|
-
`,1)[0],r+
|
|
5
|
+
`).decode("ascii","backslashreplace")):(r=v(ge(t.slice(o,a),`
|
|
6
|
+
`,1)),i=t.slice(a,l).split(`
|
|
7
|
+
`,1)[0],r+i+`
|
|
8
8
|
`+" "*r.expandtabs().length+`^
|
|
9
|
-
`)}match_examples(t,n,
|
|
9
|
+
`)}match_examples(t,n,i=!1){fe(n)&&(n=g(n));let r=[null,!1];for(const[a,[o,l]]of F(n))for(const[p,c]of F(l))try{t(c)}catch(_){if(_ instanceof A){if(_.state.eq(this.state)){if(_.token===this.token)return o;i&&_.token.type===this.token.type&&!v(r)&&(r=[o,!0]),r[0]===null&&(r=[o,!1])}}else throw _}return r[0]}_format_expected(t){let n;return this._terminals_by_name&&(n=this._terminals_by_name,t=t.map(i=>i in n?n[i].user_repr():i)),h(`Expected one of:
|
|
10
10
|
* %s
|
|
11
11
|
`,t.join(`
|
|
12
|
-
* `))}}
|
|
12
|
+
* `))}}class Sn extends A{constructor(t,n=null,i=null){super(),this.expected=t,this.state=n,this.token=new f("<EOF>",""),this.pos_in_stream=-1,this.line=-1,this.column=-1,this._terminals_by_name=i}}class D extends A{constructor({seq:t,lex_pos:n,line:i,column:r,allowed:a=null,considered_tokens:o=null,state:l=null,token_history:p=null,terminals_by_name:c=null,considered_rules:_=null}={}){super(),this.line=i,this.column=r,this.pos_in_stream=n,this.state=l,this._terminals_by_name=c,this.allowed=a,this.considered_tokens=o,this.considered_rules=_,this.token_history=p,this.char=t[n]}}let P=class extends A{constructor({token:t,expected:n,considered_rules:i=null,state:r=null,interactive_parser:a=null,terminals_by_name:o=null,token_history:l=null}={}){super(),this.line=t&&t.line||"?",this.column=t&&t.column||"?",this.pos_in_stream=t&&t.start_pos||null,this.state=r,this.token=t,this.expected=n,this._accepts=Be,this.considered_rules=i,this.interactive_parser=a,this._terminals_by_name=o,this.token_history=l}get accepts(){return this._accepts===Be&&(this._accepts=this.interactive_parser&&this.interactive_parser.accepts()),this._accepts}};class ve extends q{constructor(t,n,i){let r=h(`Error trying to process rule "%s":
|
|
13
13
|
|
|
14
|
-
%s`,t,
|
|
15
|
-
`];let
|
|
16
|
-
`];for(const r of this.children)r instanceof
|
|
17
|
-
`);return
|
|
18
|
-
`)||
|
|
19
|
-
`),this.last_token=s}eq(t){return t instanceof Ze?this.text===t.text&&this.line_ctr===t.line_ctr&&this.last_token===t.last_token:X}}class mt{constructor(t,n){this.lexer=t,this.state=n}static from_text(t,n){return new this(t,new Ze(n))}lex(t){return this.lexer.lex(this.state,t)}}class ue extends rt{lex(t,n){return X}}function ai(i,t){i.sort((n,s)=>{let r=t(n),a=t(s);for(let o=0;o<r.length;o++){if(r[o]>a[o])return 1;if(r[o]<a[o])return-1}return 0})}class pe extends ue{constructor(t){super();let n=[...t.terminals];if(this.re=t.re_module,!t.skip_validation){for(const s of n){try{this.re.compile(s.pattern.to_regexp(),t.g_regex_flags)}catch(r){throw r instanceof this.re.error?new J(f("Cannot compile token %s: %s",s.name,s.pattern)):r}if(s.pattern.min_width===0)throw new J(f("Lexer does not allow zero-width terminals. (%s: %s)",s.name,s.pattern))}if(!(new Set(t.ignore)<=new Set(n.map(s=>s.name))))throw new J(f("Ignore terminals are not defined: %s",lt(new Set(t.ignore),new Set(n.map(s=>s.name)))))}this.newline_types=re(n.filter(s=>ri(s.pattern.to_regexp())).map(s=>s.name)),this.ignore_types=re(t.ignore),ai(n,s=>[-s.priority,-s.pattern.max_width,-s.pattern.value.length,s.name]),this.terminals=n,this.user_callbacks=t.callbacks,this.g_regex_flags=t.g_regex_flags,this.use_bytes=t.use_bytes,this.terminals_by_name=t.terminals_by_name,this._scanner=null}_build_scanner(){let t;[t,this.callback]=si(this.terminals,this.g_regex_flags,this.re,this.use_bytes);for(const[n,s]of w(this.user_callbacks))n in this.callback?this.callback[n]=new ii(this.callback[n],s,r=>r.type===n):this.callback[n]=s;this._scanner=new it(t,this.g_regex_flags,this.re,this.use_bytes)}get scanner(){return this._scanner===null&&this._build_scanner(),this._scanner}match(t,n){return this.scanner.match(t,n)}*lex(t,n){try{for(;;)yield this.next_token(t,n)}catch(s){if(!(s instanceof Ie))throw s}}next_token(t,n=null){let s,r,a,o,l=t.line_ctr;for(;l.char_pos<t.text.length;){if(r=this.match(t.text,l.char_pos),!r)throw s=lt(this.scanner.allowed_types,this.ignore_types),s||(s=new Set(["<END-OF-FILE>"])),new M({seq:t.text,lex_pos:l.char_pos,line:l.line,column:l.column,allowed:s,token_history:t.last_token&&[t.last_token],state:n,terminals_by_name:this.terminals_by_name});let[u,c]=r;if(this.ignore_types.has(c))c in this.callback&&(o=new x(c,u,l.char_pos,l.line,l.column),this.callback[c](o)),l.feed(u,this.newline_types.has(c));else{if(a=new x(c,u,l.char_pos,l.line,l.column),l.feed(u,this.newline_types.has(c)),a.end_line=l.line,a.end_column=l.column,a.end_pos=l.char_pos,a.type in this.callback&&(a=this.callback[a.type](a),!(a instanceof x)))throw new J(f("Callbacks must return a token (returned %r)",a));return t.last_token=a,a}}throw new Ie(this)}}class oi extends ue{constructor({conf:t,states:n,always_accept:s=[]}={}){super();let r,a,o,l=[...t.terminals],u=t.terminals_by_name,c=k(t);c.terminals=l;let _=new Map;this.lexers={};for(let[m,h]of w(n))r=re(h),_.has(r)?a=_.get(r):(h=Cn(new Set(h),[...new Set(t.ignore),...new Set(s)]),o=k(c),o.terminals=[...h].filter(y=>y in u).map(y=>u[y]),a=new pe(o),_.set(r,a)),this.lexers[m]=a;this.root_lexer=new pe(c)}*lex(t,n){let s,r,a;try{for(;;)r=this.lexers[n.position],yield r.next_token(t,n)}catch(o){if(!(o instanceof Ie))if(o instanceof M)try{throw s=t.last_token,a=this.root_lexer.next_token(t,n),new j({token:a,expected:o.allowed,state:n,token_history:[s],terminals_by_name:this.root_lexer.terminals_by_name})}catch(l){throw l}else throw o}}}class ft extends E{static get __serialize_fields__(){return["terminals","ignore","g_regex_flags","use_bytes","lexer_type"]}static get __serialize_namespace__(){return[ce]}constructor({terminals:t,re_module:n,ignore:s=[],postlex:r=null,callbacks:a=null,g_regex_flags:o="",skip_validation:l=!1,use_bytes:u=!1}={}){super(),this.terminals=t,this.terminals_by_name=Object.fromEntries(this.terminals.map(c=>[c.name,c])),this.ignore=s,this.postlex=r,this.callbacks=Object.keys(a).length||{},this.g_regex_flags=o,this.re_module=n,this.skip_validation=l,this.use_bytes=u,this.lexer_type=null}_deserialize(){this.terminals_by_name=Object.fromEntries(this.terminals.map(t=>[t.name,t]))}}class yt extends E{static get __serialize_fields__(){return["rules","start","parser_type"]}constructor(t,n,s){super(),this.rules=t,this.callbacks=n,this.start=s,this.parser_type=null}}class li{constructor(t){this.node_builder=t}__call__(t){return t.length===1?t[0]:this.node_builder(t)}}const _i=P(li);class ci{constructor(t,n=null){this.node_builder=t,this.node_filter=n}__call__(t){let n,s,r,a=this.node_builder(t);return a instanceof R&&(r=a.meta,n=this._pp_get_meta(t),n!==null&&("line"in r||(r.line=n&&n.container_line||n.line,r.column=n&&n.container_column||n.column,r.start_pos=n&&n.container_start_pos||n.start_pos,r.empty=!1),r.container_line=n&&n.container_line||n.line,r.container_column=n&&n.container_column||n.column),s=this._pp_get_meta([...t].reverse()),s!==null&&("end_line"in r||(r.end_line=s&&s.container_end_line||s.end_line,r.end_column=s&&s.container_end_column||s.end_column,r.end_pos=s&&s.container_end_pos||s.end_pos,r.empty=!1),r.container_end_line=s&&s.container_end_line||s.end_line,r.container_end_column=s&&s.container_end_column||s.end_column)),a}_pp_get_meta(t){for(const n of t)if(!(this.node_filter!==null&&!this.node_filter(n))){if(n instanceof R){if(!n.meta.empty)return n.meta}else if(n instanceof x)return n}}}const gt=P(ci);function ui(i){if(Mn(i))return ae({unknown_param_0:gt,node_filter:i});if(i===!0)return gt;if(i===!1)return null;throw new $(f("Invalid option for propagate_positions: %r",i))}class Ce{constructor(t,n,s){this.node_builder=s,this.to_include=t,this.append_none=n}__call__(t){let n=[];for(const[s,r,a]of this.to_include)a&&n.push(...A([null],a)),r?n.push(...t[s].children):n.push(t[s]);return this.append_none&&n.push(...A([null],this.append_none)),this.node_builder(n)}}const pi=P(Ce);class di extends Ce{__call__(t){let n=[];for(const[s,r,a]of this.to_include)a&&n.push(...A([null],a)),r?n.length?n.push(...t[s].children):n=t[s].children:n.push(t[s]);return this.append_none&&n.push(...A([null],this.append_none)),this.node_builder(n)}}const hi=P(di);class mi extends Ce{constructor(t,n){super(),this.node_builder=n,this.to_include=t}__call__(t){let n=[];for(const[s,r]of this.to_include)r?n.length?n.push(...t[s].children):n=t[s].children:n.push(t[s]);return this.node_builder(n)}}const fi=P(mi);function yi(i){return!i.is_term&&i.name.startsWith("_")}function gi(i,t,n,s){let r,a;s.length?(a=s.map(u=>(0+u).toString()).join(""),r=a.split("0").map(u=>u.length)):r=A([0],i.length+1);let o=[],l=0;for(const[u,c]of H(i))l+=r[u],(t||!(c.is_term&&c.filter_out))&&(o.push([u,yi(c),l]),l=0);if(l+=r[i.length],s.length||o.length<i.length||jn(o.map(([u,c,_])=>c)))return(s.length||n).length?ae(n?pi:hi,o,l):ae(fi,o.map(([u,c,_])=>[u,c]))}function xi(i){function t(n){let s=new R(i.name,n);return i(s)}return t=wraps(i)(t),t}function wi(i,t,n){if(n===_vargs_meta||n===_vargs_meta_inline)throw new NotImplementedError("Meta args not supported for internal transformer");function s(r){return n(i,t,r,null)}return s=wraps(i)(s),s}class vi{constructor(t,n,s=!1,r=!1,a=!1){this.tree_class=n,this.propagate_positions=s,this.ambiguous=r,this.maybe_placeholders=a,this.rule_builders=[...this._init_builders(t)]}*_init_builders(t){let n,s,r,a,o=ui(this.propagate_positions);for(const l of t)r=l.options,s=r.keep_all_tokens,n=r.expand1,a=[...ut(null,[n&&!l.alias&&_i,gi(l.expansion,s,this.ambiguous,this.maybe_placeholders?r.empty_indices:[]),o])],yield[l,a]}create_callback(t=null){let n,s,r,a=new Map;for(const[o,l]of this.rule_builders){s=o.alias||o.options.template_source||o.origin.name,t&&t[s]?(n=t&&t[s],r=n&&n.visit_wrapper||null,r!==null?n=wi(n,s,r):t instanceof ht&&(n=xi(n))):n=ae(this.tree_class,s);for(const u of l)n=u(n);if(a.has(o))throw new oe(f("Rule '%s' already exists",o));a.set(o,n)}return a}}class xt extends E{constructor({parser_conf:t,debug:n=!1}={}){super();let s=new LALR_Analyzer({unknown_param_0:t,debug:n});s.compute_lalr();let r=t.callbacks;this._parse_table=s.parse_table,this.parser_conf=t,this.parser=new wt(s.parse_table,r,n)}static deserialize(t,n,s,r=!1){let a=Ee(this);return a._parse_table=Ei.deserialize(t,n),a.parser=new wt(a._parse_table,s,r),a}serialize(t){return this._parse_table.serialize(t)}parse_interactive(t,n){return this.parser.parse({lexer:t,start:n,start_interactive:!0})}parse({lexer:t,start:n,on_error:s=null}={}){let r,a;try{return this.parser.parse({lexer:t,start:n})}catch(o){if(o instanceof Q){if(s===null)throw o;for(;;){if(o instanceof M&&(a=o.interactive_parser.lexer_thread.state,r=a.line_ctr.char_pos),!s(o))throw o;o instanceof M&&r===a.line_ctr.char_pos&&a.line_ctr.feed(a.text.slice(r,r+1));try{return o.interactive_parser.resume_parse()}catch(l){if(l instanceof j){if(o instanceof j&&o.token.type===l.token.type&&l.token.type==="$END"&&o.interactive_parser.eq(l.interactive_parser))throw l;o=l}else if(l instanceof M)o=l;else throw l}}}else throw o}}}class Ti{constructor(t,n,s){this.parse_table=t,this.start_state=this.parse_table.start_states[s],this.end_state=this.parse_table.end_states[s],this.states=this.parse_table.states,this.callbacks=n,this.start=s}}class Be{constructor(t,n,s=null,r=null){this.parse_conf=t,this.lexer=n,this.state_stack=s||[this.parse_conf.start_state],this.value_stack=r||[]}get position(){return b(this.state_stack)}eq(t){return t instanceof Be?this.state_stack.length===t.state_stack.length&&this.position===t.position:X}copy(){return k(this)}feed_token(t,n=!1){let s,r,a,o,l,u,c,_,m,h,y=this.state_stack,d=this.value_stack,p=this.parse_conf.states,g=this.parse_conf.end_state,T=this.parse_conf.callbacks;for(;;){if(m=b(y),t.type in p[m])[r,a]=p[m][t.type];else throw o=new Set(be(p[m]).filter(O=>pt(O)).map(O=>O)),new j({token:t,expected:o,state:this,interactive_parser:null});if(r===Qe){y.push(a),d.push(t.type in T?T[t.type](t):t);return}else if(u=a,_=u.expansion.length,_?(c=d.slice(-_),y.splice(-_),d.splice(-_)):c=[],h=T.get(u)(c),[s,l]=p[b(y)][u.origin.name],y.push(l),d.push(h),n&&b(y)===g)return b(d)}}}class wt{constructor(t,n,s=!1){this.parse_table=t,this.callbacks=n,this.debug=s}parse({lexer:t,start:n,value_stack:s=null,state_stack:r=null,start_interactive:a=!1}={}){let o=new Ti(this.parse_table,this.callbacks,n),l=new Be(o,t,r,s);return a?new U(this,l,l.lexer):this.parse_from_state(l)}parse_from_state(t){let n,s;try{s=null;for(s of t.lexer.lex(t))t.feed_token(s);return n=s?x.new_borrow_pos("$END","",s):new x("$END","",0,1,1),t.feed_token(n,!0)}catch(r){if(r instanceof Q){try{r.interactive_parser=new U(this,t,t.lexer)}catch(a){if(!(a instanceof ReferenceError))throw a}throw r}else if(r instanceof Error){if(this.debug){console.log(""),console.log("STATE STACK DUMP"),console.log("----------------");for(const[a,o]of H(t.state_stack))console.log(f("%d)",a),o);console.log("")}throw r}else throw r}}}let U=class Ut{constructor(t,n,s){this.parser=t,this.parser_state=n,this.lexer_thread=s,this.result=null}feed_token(t){return this.parser_state.feed_token(t,t.type==="$END")}*iter_parse(){for(const t of this.lexer_thread.lex(this.parser_state))yield t,this.result=this.feed_token(t)}exhaust_lexer(){return[...this.iter_parse()]}feed_eof(t=null){let n=t!==null?x.new_borrow_pos("$END","",t):new x("$END","",0,1,1);return this.feed_token(n)}copy(){return k(this)}eq(t){return t instanceof Ut?this.parser_state===t.parser_state&&this.lexer_thread===t.lexer_thread:!1}as_immutable(){let t=k(this);return new vt(t.parser,t.parser_state,t.lexer_thread)}pretty(){let t=["Parser choices:"];for(const[n,s]of w(this.choices()))t.push(f(" - %s -> %r",n,s));return t.push(f("stack size: %s",this.parser_state.state_stack.length)),t.join(`
|
|
20
|
-
`)}choices(){return this.parser_state.parse_conf.parse_table.states[this.parser_state.position]}accepts(){let t,n=new Set;for(const s of this.choices())if(pt(s)){t=k(this);let r=null;try{t.feed_token(new x(s,""))}catch(a){if(r=a,!(a instanceof j))throw a}r||n.add(s)}return n}resume_parse(){return this.parser.parse_from_state(this.parser_state)}};class vt extends U{constructor(){super(...arguments),q(this,"result",null)}feed_token(t){let n=k(this);return n.result=U.feed_token(n,t),n}exhaust_lexer(){let t=this.as_mutable();return t.exhaust_lexer(),t.as_immutable()}as_mutable(){let t=k(this);return new U(t.parser,t.parser_state,t.lexer_thread)}}class Tt{constructor(t){this.name=t}repr(){return this.toString()}}var Qe=new Tt("Shift"),bt=new Tt("Reduce");class bi{constructor(t,n,s){this.states=t,this.start_states=n,this.end_states=s}serialize(t){let n=new Enumerator,s=Object.fromEntries(w(this.states).map(([r,a])=>[r,Object.fromEntries(w(a).map(([o,[l,u]])=>[at(n,o),l===bt?[1,u.serialize(t)]:[0,u]]))]));return{tokens:n.reversed(),states:s,start_states:this.start_states,end_states:this.end_states}}static deserialize(t,n){const s=this;let r=t.tokens,a=Object.fromEntries(w(t.states).map(([o,l])=>[o,Object.fromEntries(w(l).map(([u,[c,_]])=>[r[u],c===1?[bt,V.deserialize(_,n)]:[Qe,_]]))]));return new s(a,t.start_states,t.end_states)}}class Ei extends bi{static from_ParseTable(t){const n=this;let s=[...t.states],r=Object.fromEntries(H(s).map(([u,c])=>[c,u])),a={};for(let[u,c]of w(t.states))c=Object.fromEntries(w(c).map(([_,m])=>[_,m[0]===Qe?[m[0],r[m[1]]]:m])),a[r[u]]=c;let o=Object.fromEntries(w(t.start_states).map(([u,c])=>[u,r[c]])),l=Object.fromEntries(w(t.end_states).map(([u,c])=>[u,r[c]]));return new n(a,o,l)}}function Ri(i){if(i&&i.__future_interface__)return i;{class t extends ue{constructor(s){super(),this.lexer=i(s)}lex(s,r){return this.lexer.lex(s.text)}}return t}}function Ii(i,t,n,s,r){let a=yt.deserialize(i.parser_conf,t),o=xt.deserialize(i.parser,t,s,r.debug);return a.callbacks=s,new Ni({lexer_conf:n,parser_conf:a,options:r,parser:o})}var Et={};class Ni extends E{static get __serialize_fields__(){return["lexer_conf","parser_conf","parser"]}constructor({lexer_conf:t,parser_conf:n,options:s,parser:r=null}={}){super();let a,o;this.parser_conf=n,this.lexer_conf=t,this.options=s,r?this.parser=r:(o=at(Et,n.parser_type),this.parser=o(t,n,s));let l=t.lexer_type;if(this.skip_lexer=!1,["dynamic","dynamic_complete"].includes(l)){this.skip_lexer=!0;return}const u={basic:Ai,contextual:Si};l in u?(a=u[l],this.lexer=a(t,this.parser,t.postlex,s)):this.lexer=Ri(l)(t),t.postlex&&(this.lexer=new Oi(this.lexer,t.postlex))}_verify_start(t=null){let n;if(t===null){if(n=this.parser_conf.start,n.length>1)throw new $("Lark initialized with more than 1 possible start rule. Must specify which start rule to parse",n);[t]=n}else if(!this.parser_conf.start.includes(t))throw new $(f("Unknown start rule %s. Must be one of %r",t,this.parser_conf.start));return t}_make_lexer_thread(t){return this.skip_lexer?t:mt.from_text(this.lexer,t)}parse(t,n=null,s=null){let r=this._verify_start(n),a=s===null?{}:{on_error:s},o=this._make_lexer_thread(t);return this.parser.parse({lexer:o,start:r,...a})}parse_interactive(t=null,n=null){let s=this._verify_start(n);if(this.parser_conf.parser_type!=="lalr")throw new $("parse_interactive() currently only works with parser='lalr' ");let r=this._make_lexer_thread(t);return this.parser.parse_interactive(r,s)}}function qi(i,t){let n;ke(i,["lalr","earley","cyk"]),typeof t!="object"&&(n={lalr:["basic","contextual"],earley:["basic","dynamic","dynamic_complete"],cyk:["basic"]}[i],ke(t,n,f("Parser %r does not support lexer %%r, expected one of %%s",i)))}function ki(i,t){let n,s={};for(const r of t)n=i&&i[r.name]||null,n!==null&&(s[r.name]=n);return s}class Oi{constructor(t,n){this.lexer=t,this.postlexer=n}lex(t,n){let s=this.lexer.lex(t,n);return this.postlexer.process(s)}}function Ai(i,t,n,s){return new pe(i)}function Si(i,t,n,s){let r=Object.fromEntries(w(t._parse_table.states).map(([o,l])=>[o,[...be(l)]])),a=n?n.always_accept:[];return new oi({conf:i,states:r,always_accept:a})}function $i(i,t,n=null){let s=n?n.debug:!1;return new xt({parser_conf:t,debug:s})}Et.lalr=$i;class Rt extends rt{constructor(){super(...arguments),q(this,"always_accept",[])}process(t){return t}}class zi extends E{constructor(t){super(),q(this,"OPTIONS_DOC",'\n **=== General Options ===**\n\n start\n The start symbol. Either a string, or a list of strings for multiple possible starts (Default: "start")\n debug\n Display debug information and extra warnings. Use only when debugging (Default: ``False``)\n When used with Earley, it generates a forest graph as "sppf.png", if \'dot\' is installed.\n transformer\n Applies the transformer to every parse tree (equivalent to applying it after the parse, but faster)\n propagate_positions\n Propagates (line, column, end_line, end_column) attributes into all tree branches.\n Accepts ``False``, ``True``, or a callable, which will filter which nodes to ignore when propagating.\n maybe_placeholders\n When ``True``, the ``[]`` operator returns ``None`` when not matched.\n When ``False``, ``[]`` behaves like the ``?`` operator, and returns no value at all.\n (default= ``True``)\n cache\n Cache the results of the Lark grammar analysis, for x2 to x3 faster loading. LALR only for now.\n\n - When ``False``, does nothing (default)\n - When ``True``, caches to a temporary file in the local directory\n - When given a string, caches to the path pointed by the string\n regex\n When True, uses the ``regex`` module instead of the stdlib ``re``.\n g_regex_flags\n Flags that are applied to all terminals (both regex and strings)\n keep_all_tokens\n Prevent the tree builder from automagically removing "punctuation" tokens (Default: ``False``)\n tree_class\n Lark will produce trees comprised of instances of this class instead of the default ``lark.Tree``.\n\n **=== Algorithm Options ===**\n\n parser\n Decides which parser engine to use. Accepts "earley" or "lalr". (Default: "earley").\n (there is also a "cyk" option for legacy)\n lexer\n Decides whether or not to use a lexer stage\n\n - "auto" (default): Choose for me based on the parser\n - "basic": Use a basic lexer\n - "contextual": Stronger lexer (only works with parser="lalr")\n - "dynamic": Flexible and powerful (only with parser="earley")\n - "dynamic_complete": Same as dynamic, but tries *every* variation of tokenizing possible.\n ambiguity\n Decides how to handle ambiguity in the parse. Only relevant if parser="earley"\n\n - "resolve": The parser will automatically choose the simplest derivation\n (it chooses consistently: greedy for tokens, non-greedy for rules)\n - "explicit": The parser will return all derivations wrapped in "_ambig" tree nodes (i.e. a forest).\n - "forest": The parser will return the root of the shared packed parse forest.\n\n **=== Misc. / Domain Specific Options ===**\n\n postlex\n Lexer post-processing (Default: ``None``) Only works with the basic and contextual lexers.\n priority\n How priorities should be evaluated - "auto", ``None``, "normal", "invert" (Default: "auto")\n lexer_callbacks\n Dictionary of callbacks for the lexer. May alter tokens during lexing. Use with caution.\n use_bytes\n Accept an input of type ``bytes`` instead of ``str``.\n edit_terminals\n A callback for editing the terminals before parse.\n import_paths\n A List of either paths or loader functions to specify from where grammars are imported\n source_path\n Override the source of from where the grammar was loaded. Useful for relative imports and unconventional grammar loading\n **=== End of Options ===**\n '),q(this,"_defaults",{debug:!1,keep_all_tokens:!1,tree_class:null,cache:!1,postlex:null,parser:"earley",lexer:"auto",transformer:null,start:"start",priority:"auto",ambiguity:"auto",regex:!1,propagate_positions:!1,lexer_callbacks:{},maybe_placeholders:!0,edit_terminals:null,g_regex_flags:"",use_bytes:!1,import_paths:[],source_path:null,_plugins:null});let n,s=_t(t),r=this;for(const[a,o]of w(this._defaults))a in s?(n=Pn(s,a),typeof o=="boolean"&&!["cache","use_bytes","propagate_positions"].includes(a)&&(n=ct(n))):n=o,r[a]=n;if(typeof r.start=="string"&&(r.start=[r.start]),this.options=r,ke(this.parser,["earley","lalr","cyk",null]),this.parser==="earley"&&this.transformer)throw new $("Cannot specify an embedded transformer when using the Earley algorithm. Please use your transformer on the resulting parse tree, or use a different algorithm (i.e. LALR)");if(Object.keys(s).length)throw new $(f("Unknown options: %s",be(s)))}serialize(t){return this.options}static deserialize(t,n){const s=this;return new s(t)}}class It extends E{static get __serialize_fields__(){return["parser","rules","options"]}_build_lexer(t=!1){let n=this.lexer_conf;return t&&(n=k(n),n.ignore=[]),new pe(n)}_prepare_callbacks(){this._callbacks=new Map,this.options.ambiguity!=="forest"&&(this._parse_tree_builder=new vi(this.rules,this.options.tree_class||Ln(R),this.options.propagate_positions,this.options.parser!=="lalr"&&this.options.ambiguity==="explicit",this.options.maybe_placeholders),this._callbacks=this._parse_tree_builder.create_callback(this.options.transformer)),ot(this._callbacks,ki(this.options.transformer,this.terminals))}_deserialize_lexer_conf(t,n,s){let r=ft.deserialize(t.lexer_conf,n);return r.callbacks=s.lexer_callbacks||{},r.re_module=s.regex?regex:nt,r.use_bytes=s.use_bytes,r.g_regex_flags=s.g_regex_flags||"",r.skip_validation=!0,r.postlex=s.postlex,r}_load({f:t,...n}={}){let s;Re(t)?s=t:s=pickle.load(t);let r=s.memo,a=s.data,o=Vn.deserialize(r,{Rule:V,TerminalDef:ce},{}),l=_t(a.options);return ot(l,n),this.options=zi.deserialize(l,o),this.rules=a.rules.map(u=>V.deserialize(u,o)),this.source_path="<deserialized>",qi(this.options.parser,this.options.lexer),this.lexer_conf=this._deserialize_lexer_conf(a.parser,o,this.options),this.terminals=this.lexer_conf.terminals,this._prepare_callbacks(),this._terminals_dict=Object.fromEntries(this.terminals.map(u=>[u.name,u])),this.parser=Ii(a.parser,o,this.lexer_conf,this._callbacks,this.options),this}static _load_from_dict({data:t,memo:n,...s}={}){return Ee(this)._load({f:{data:t,memo:n},...s})}repr(){return f("Lark(open(%r), parser=%r, lexer=%r, ...)",this.source_path,this.options.parser,this.options.lexer)}lex(t,n=!1){let s;!("lexer"in this)||n?s=this._build_lexer(n):s=this.lexer;let r=mt.from_text(s,t).lex(null);return this.options.postlex?this.options.postlex.process(r):r}get_terminal(t){return this._terminals_dict[t]}parse_interactive(t=null,n=null){return this.parser.parse_interactive({unknown_param_0:t,start:n})}parse(t,n=null,s=null){return this.parser.parse(t,n,s)}}class Nt extends S{}class qt extends Rt{constructor(){super(),this.paren_level=0,this.indent_level=[0]}*handle_NL(t){if(this.paren_level>0)return;yield t;let n=Ne(t.value,`
|
|
21
|
-
`,1)[1],
|
|
22
|
-
])+`,flags:[],raw:null,_width:[1,4294967295],__type__:"PatternRE"},priority:0,__type__:"TerminalDef"},1:{name:"IDENTIFIER",pattern:{value:"[a-zA-Z][a-zA-Z0-9_]*[a-zA-Z0-9]",flags:[],raw:"/[a-zA-Z][a-zA-Z0-9_]*[a-zA-Z0-9]/",_width:[2,4294967295],__type__:"PatternRE"},priority:0,__type__:"TerminalDef"},2:{name:"INT",pattern:{value:"-?[0-9]+",flags:[],raw:"/-?[0-9]+/",_width:[1,4294967295],__type__:"PatternRE"},priority:0,__type__:"TerminalDef"},3:{name:"STRING",pattern:{value:`(?:'[^\\']*'|"[^"]*")`,flags:[],raw:null,_width:[2,4294967295],__type__:"PatternRE"},priority:0,__type__:"TerminalDef"},4:{name:"OPERATOR",pattern:{value:"(?:regex_matches|not_contains|contains|==|!=|<=|>=|<|>)",flags:[],raw:null,_width:[1,13],__type__:"PatternRE"},priority:0,__type__:"TerminalDef"},5:{name:"CONJUNCTION",pattern:{value:"(?:and|or)",flags:[],raw:null,_width:[2,3],__type__:"PatternRE"},priority:0,__type__:"TerminalDef"},6:{name:"NEGATION",pattern:{value:"!",flags:[],raw:'"!"',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},7:{name:"TRUE",pattern:{value:"true",flags:[],raw:'"true"',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},8:{name:"FALSE",pattern:{value:"false",flags:[],raw:'"false"',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},9:{name:"DOT",pattern:{value:".",flags:[],raw:'"."',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},10:{name:"__ANON_0",pattern:{value:"selected(",flags:[],raw:'"selected("',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},11:{name:"LSQB",pattern:{value:"[",flags:[],raw:'"["',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},12:{name:"RSQB",pattern:{value:"]",flags:[],raw:'"]"',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},13:{name:"RPAR",pattern:{value:")",flags:[],raw:'")"',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},14:{name:"__ANON_1",pattern:{value:"selected_value(",flags:[],raw:'"selected_value("',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},15:{name:"__ANON_2",pattern:{value:"text(",flags:[],raw:'"text("',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},16:{name:"__ANON_3",pattern:{value:"text_ignore_case(",flags:[],raw:'"text_ignore_case("',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},17:{name:"__ANON_4",pattern:{value:"count_selected(",flags:[],raw:'"count_selected("',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},18:{name:"__ANON_5",pattern:{value:"count_choice_selections(",flags:[],raw:'"count_choice_selections("',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},19:{name:"LPAR",pattern:{value:"(",flags:[],raw:'"("',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},20:{origin:{name:"choice_ref",__type__:"NonTerminal"},expansion:[{name:"INT",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},21:{origin:{name:"choice_ref",__type__:"NonTerminal"},expansion:[{name:"IDENTIFIER",filter_out:!1,__type__:"Terminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},22:{origin:{name:"question_id",__type__:"NonTerminal"},expansion:[{name:"IDENTIFIER",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},23:{origin:{name:"matrix_statement_id",__type__:"NonTerminal"},expansion:[{name:"question_id",__type__:"NonTerminal"},{name:"DOT",filter_out:!0,__type__:"Terminal"},{name:"IDENTIFIER",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},24:{origin:{name:"question_choice_selected",__type__:"NonTerminal"},expansion:[{name:"NEGATION",filter_out:!1,__type__:"Terminal"},{name:"__ANON_0",filter_out:!0,__type__:"Terminal"},{name:"question_id",__type__:"NonTerminal"},{name:"LSQB",filter_out:!0,__type__:"Terminal"},{name:"choice_ref",__type__:"NonTerminal"},{name:"RSQB",filter_out:!0,__type__:"Terminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},25:{origin:{name:"question_choice_selected",__type__:"NonTerminal"},expansion:[{name:"NEGATION",filter_out:!1,__type__:"Terminal"},{name:"__ANON_0",filter_out:!0,__type__:"Terminal"},{name:"matrix_statement_id",__type__:"NonTerminal"},{name:"LSQB",filter_out:!0,__type__:"Terminal"},{name:"choice_ref",__type__:"NonTerminal"},{name:"RSQB",filter_out:!0,__type__:"Terminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},26:{origin:{name:"question_choice_selected",__type__:"NonTerminal"},expansion:[{name:"__ANON_0",filter_out:!0,__type__:"Terminal"},{name:"question_id",__type__:"NonTerminal"},{name:"LSQB",filter_out:!0,__type__:"Terminal"},{name:"choice_ref",__type__:"NonTerminal"},{name:"RSQB",filter_out:!0,__type__:"Terminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"}],order:2,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},27:{origin:{name:"question_choice_selected",__type__:"NonTerminal"},expansion:[{name:"__ANON_0",filter_out:!0,__type__:"Terminal"},{name:"matrix_statement_id",__type__:"NonTerminal"},{name:"LSQB",filter_out:!0,__type__:"Terminal"},{name:"choice_ref",__type__:"NonTerminal"},{name:"RSQB",filter_out:!0,__type__:"Terminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"}],order:3,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},28:{origin:{name:"question_choice_selected_value_comparison",__type__:"NonTerminal"},expansion:[{name:"__ANON_1",filter_out:!0,__type__:"Terminal"},{name:"question_id",__type__:"NonTerminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"},{name:"OPERATOR",filter_out:!1,__type__:"Terminal"},{name:"INT",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},29:{origin:{name:"question_choice_selected_value_comparison",__type__:"NonTerminal"},expansion:[{name:"__ANON_1",filter_out:!0,__type__:"Terminal"},{name:"matrix_statement_id",__type__:"NonTerminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"},{name:"OPERATOR",filter_out:!1,__type__:"Terminal"},{name:"INT",filter_out:!1,__type__:"Terminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},30:{origin:{name:"question_choice_text_comparison",__type__:"NonTerminal"},expansion:[{name:"__ANON_2",filter_out:!0,__type__:"Terminal"},{name:"question_id",__type__:"NonTerminal"},{name:"LSQB",filter_out:!0,__type__:"Terminal"},{name:"choice_ref",__type__:"NonTerminal"},{name:"RSQB",filter_out:!0,__type__:"Terminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"},{name:"OPERATOR",filter_out:!1,__type__:"Terminal"},{name:"STRING",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},31:{origin:{name:"question_choice_text_comparison_case_insensitive",__type__:"NonTerminal"},expansion:[{name:"__ANON_3",filter_out:!0,__type__:"Terminal"},{name:"question_id",__type__:"NonTerminal"},{name:"LSQB",filter_out:!0,__type__:"Terminal"},{name:"choice_ref",__type__:"NonTerminal"},{name:"RSQB",filter_out:!0,__type__:"Terminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"},{name:"OPERATOR",filter_out:!1,__type__:"Terminal"},{name:"STRING",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},32:{origin:{name:"selected_count_comparison",__type__:"NonTerminal"},expansion:[{name:"__ANON_4",filter_out:!0,__type__:"Terminal"},{name:"question_id",__type__:"NonTerminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"},{name:"OPERATOR",filter_out:!1,__type__:"Terminal"},{name:"INT",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},33:{origin:{name:"choice_selection_count_comparison",__type__:"NonTerminal"},expansion:[{name:"__ANON_5",filter_out:!0,__type__:"Terminal"},{name:"question_id",__type__:"NonTerminal"},{name:"LSQB",filter_out:!0,__type__:"Terminal"},{name:"choice_ref",__type__:"NonTerminal"},{name:"RSQB",filter_out:!0,__type__:"Terminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"},{name:"OPERATOR",filter_out:!1,__type__:"Terminal"},{name:"INT",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},34:{origin:{name:"bool_const",__type__:"NonTerminal"},expansion:[{name:"TRUE",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},35:{origin:{name:"bool_const",__type__:"NonTerminal"},expansion:[{name:"FALSE",filter_out:!1,__type__:"Terminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},36:{origin:{name:"condition",__type__:"NonTerminal"},expansion:[{name:"bool_const",__type__:"NonTerminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},37:{origin:{name:"condition",__type__:"NonTerminal"},expansion:[{name:"question_choice_selected",__type__:"NonTerminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},38:{origin:{name:"condition",__type__:"NonTerminal"},expansion:[{name:"question_choice_selected_value_comparison",__type__:"NonTerminal"}],order:2,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},39:{origin:{name:"condition",__type__:"NonTerminal"},expansion:[{name:"question_choice_text_comparison",__type__:"NonTerminal"}],order:3,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},40:{origin:{name:"condition",__type__:"NonTerminal"},expansion:[{name:"question_choice_text_comparison_case_insensitive",__type__:"NonTerminal"}],order:4,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},41:{origin:{name:"condition",__type__:"NonTerminal"},expansion:[{name:"selected_count_comparison",__type__:"NonTerminal"}],order:5,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},42:{origin:{name:"condition",__type__:"NonTerminal"},expansion:[{name:"choice_selection_count_comparison",__type__:"NonTerminal"}],order:6,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},43:{origin:{name:"bool_expr",__type__:"NonTerminal"},expansion:[{name:"condition",__type__:"NonTerminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},44:{origin:{name:"bool_expr",__type__:"NonTerminal"},expansion:[{name:"condition",__type__:"NonTerminal"},{name:"CONJUNCTION",filter_out:!1,__type__:"Terminal"},{name:"bool_expr",__type__:"NonTerminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},45:{origin:{name:"top_level_expr",__type__:"NonTerminal"},expansion:[{name:"LPAR",filter_out:!0,__type__:"Terminal"},{name:"bool_expr",__type__:"NonTerminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},46:{origin:{name:"top_level_expr",__type__:"NonTerminal"},expansion:[{name:"LPAR",filter_out:!0,__type__:"Terminal"},{name:"bool_expr",__type__:"NonTerminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"},{name:"CONJUNCTION",filter_out:!1,__type__:"Terminal"},{name:"top_level_expr",__type__:"NonTerminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},47:{origin:{name:"start",__type__:"NonTerminal"},expansion:[{name:"top_level_expr",__type__:"NonTerminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},48:{origin:{name:"start",__type__:"NonTerminal"},expansion:[{name:"bool_expr",__type__:"NonTerminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"}},Mi=Object.defineProperty,ji=(i,t,n)=>t in i?Mi(i,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):i[t]=n,F=(i,t,n)=>(ji(i,typeof t!="symbol"?t+"":t,n),n),Ui=(i,t,n)=>{if(!t.has(i))throw TypeError("Cannot "+n)},kt=(i,t,n)=>{if(t.has(i))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(i):t.set(i,n)},K=(i,t,n)=>(Ui(i,t,"access private method"),n),ee,de,he,Me;const je=/\$\{q\:(?<locator>[\-a-zA-Z0-9_\/\(\)]+)\}/g,Ot=i=>{var t,n;return(n=(t=i.choiceId)!=null?t:i.choiceValue)!=null?n:i.text};class me{constructor(t,n=[],s="",r=!1){kt(this,ee),kt(this,he),F(this,"questions",new Map),F(this,"responsesByQuestion",new Map),F(this,"responsesByQuestionStatement",new Map),F(this,"surveyResponseId"),F(this,"forExport"),F(this,"evaluationCache",new Map),this.questions=new Map((t?Te(t):[]).filter(a=>a.id).map(a=>[we(a.id),a])),n.filter(a=>a.singleAnswer||a.multipleAnswers).forEach(a=>{const o=we(a.questionId);this.responsesByQuestion.set(o,[...this.responsesByQuestion.get(o)||[],a]),a.statementId&&this.responsesByQuestionStatement.set(`${o}.${a.statementId}`,a)}),this.surveyResponseId=s,this.forExport=r}getQuestionAnswers(t,n){let s;if(n){const r=this.responsesByQuestionStatement.get(`${t}.${n}`);s=r===void 0?[]:[r]}else s=this.responsesByQuestion.get(t)||[];return s.flatMap(r=>{const{multipleAnswers:a,singleAnswer:o}=r;return a||[o]})}evaluateDisplayLogic(t){if(t&&!this.forExport)try{const n=this.evaluationCache.get(t);if(n!==void 0)return n;const s=Ue(t,this);return this.evaluationCache.set(t,s),s}catch(n){return console.error(n),!1}return!0}evaluateDynamicExpression(t,n){const s=this.questions.get(t.questionId);if(!s)return[];const r=this.getQuestionChoicesFlattened(s),a=r.filter(_=>this.isSelected({questionId:t.questionId,choice:_.id||_.value})),o=this.getQuestionStatementsFlattened(s),l=_=>n==="choices"?_:{..._,id:_.id||_.value||_.display},u=_=>({id:_.id,display:_.display,value:_.value});let c=[];switch(t.expression){case v.ALL:c=r.map(l);break;case v.ALL_ENTERED_TEXT:c=r.map(_=>K(this,he,Me).call(this,_,t)).filter(_=>!!_).map(_=>l(_));break;case v.SELECTED:c=a;break;case v.SELECTED_ENTERED_TEXT:c=a.map(_=>K(this,he,Me).call(this,_,t)).filter(_=>!!_).map(_=>l(_));break;case v.NOT_SELECTED:c=r.filter(_=>!this.isSelected({questionId:t.questionId,choice:_.id||_.value})).map(l);break;case v.FOR_MATRIX_CHOICE:c=o.filter(_=>this.isSelected({questionId:t.questionId,statementId:_.id,choice:t.identifier}));break;case v.UNSELECTED_FOR_MATRIX_CHOICE:c=o.filter(_=>!this.isSelected({questionId:t.questionId,statementId:_.id,choice:t.identifier}));break;default:c=[]}return this.forExport&&(c=t.expression===v.FOR_MATRIX_CHOICE||t.expression===v.UNSELECTED_FOR_MATRIX_CHOICE?o:r.map(l)),c.map(u)}isSelected(t){return!!K(this,ee,de).call(this,t.questionId,t.statementId,t.choice).length}countSelected(t){return this.getQuestionAnswers(t).length}selectedValue(t){const n=this.getQuestionAnswers(typeof t=="string"?t:t.questionId,typeof t=="string"?void 0:t.statementId);return n.length?Ot(n[0]):null}countChoiceSelections(t,n){return K(this,ee,de).call(this,t,null,n).length}textEntry(t){return K(this,ee,de).call(this,t.questionId,t.statementId,t.choice).map(n=>n.text).filter(n=>n).join(", ")}getQuestionText(t){if(this.forExport)return t.text;let n=t.text;return n=n.replaceAll(je,(s,r)=>{if(r&&Je(r)){const a=D(r);return this.evaluateDynamicExpression(a,"choices").map(o=>o.display).join(", ")}return s}),n}getQuestionChoices(t){var n;const s=((n=t.choices)!=null?n:[]).filter(r=>this.evaluateDisplayLogic(r.displayLogic));if(t.dynamicChoices){const r=D(t.dynamicChoices),a=this.evaluateDynamicExpression(r,"choices");s.push(...a)}return t.type===N.MatrixSingle||t.type===N.MatrixMulti?s:this.applyRandomization(s,t.id,r=>{var a;return`${(a=r.id)!=null?a:r.value}`},t.randomization)}getQuestionChoiceGroups(t){var n;const s=(((n=t.choiceGroups)==null?void 0:n.filter(r=>this.evaluateDisplayLogic(r.displayLogic)))||[]).map(r=>({...r,choices:this.applyRandomization(r.choices.filter(a=>this.evaluateDisplayLogic(a.displayLogic)),t.id,a=>{var o;return`${(o=a.id)!=null?o:a.value}`},r.randomization)})).filter(r=>!!r.choices.length);return this.applyRandomization(s,t.id,r=>r.id,t.randomization)}getQuestionStatements(t){var n;const s=((n=t.statements)!=null?n:[]).filter(r=>this.evaluateDisplayLogic(r.displayLogic));if(t.dynamicStatements){const r=D(t.dynamicStatements),a=this.evaluateDynamicExpression(r,"statements");s.push(...a)}return this.applyRandomization(s,t.id,r=>r.id,t.randomization)}getQuestionStatementGroups(t){var n;const s=(((n=t.statementGroups)==null?void 0:n.filter(r=>this.evaluateDisplayLogic(r.displayLogic)))||[]).map(r=>({...r,statements:this.applyRandomization(r.statements.filter(a=>this.evaluateDisplayLogic(a.displayLogic)),t.id,a=>a.id,r.randomization)})).filter(r=>!!r.statements.length);return this.applyRandomization(s,t.id,r=>r.id,t.randomization)}getQuestionChoicesFlattened(t){return[...this.getQuestionChoices(t),...this.getQuestionChoiceGroups(t).flatMap(n=>n.choices)]}getQuestionStatementsFlattened(t){return[...this.getQuestionStatements(t),...this.getQuestionStatementGroups(t).flatMap(n=>n.statements)]}applyRandomization(t,n,s,r){var a,o;if(!r||this.forExport)return t;const l=new Map(t.map(p=>[s(p),p])),u=[...l.keys()],c=new Set(u),_=((a=r.order)!=null?a:["$"]).filter(p=>p==="$"||c.has(p)),m=u.filter(p=>!_.includes(p)).map(p=>({weight:this.keyHash(n,p),key:p}));m.sort((p,g)=>p.weight.localeCompare(g.weight));const h=(o=r.total)!=null?o:u.length,y=Math.min(h-(_.length-1),m.length),d=[];return _.forEach(p=>{p==="$"?d.push(...m.slice(0,y).map(g=>g.key)):d.push(p)}),d.map(p=>l.get(p))}keyHash(t,n){const s=`${t}.${this.surveyResponseId}.${n}`;return tn.createHash("sha256").update(s).digest("hex")}}ee=new WeakSet,de=function(i,t,n){return this.getQuestionAnswers(i,t).filter(s=>typeof n=="undefined"||n===null||Ot(s)===n)},he=new WeakSet,Me=function(i,t){if(i.textInput&&["forced","optional"].includes(i.textInput)){const n=this.textEntry({questionId:t.questionId,choice:i.id||i.value});return n.trim()?{...i,display:n}:i.textInput==="forced"?null:i}return i};function At(i){if(i.length===1)return i[0];const t=i[1].value;return t==="or"?i[0]||i[2]:t==="and"?i[0]&&i[2]:!1}function fe(i,t,n){switch(t){case"==":return i===n;case"!=":return i!==n;case"<=":return i<=n;case">=":return i>=n;case"<":return i<n;case">":return i>n;default:return!1}}function St(i,t,n,s){const r=s?i.toLowerCase():i,a=s?n.toLowerCase():n;switch(t){case"contains":return r.includes(a);case"not_contains":return!r.includes(a);case"regex_matches":try{return new RegExp(n).test(r)}catch{return!1}default:return fe(r,t,a)}}function Fi(i,t){return i.length>0&&i[0].hasOwnProperty("type")&&i[0].type==="NEGATION"?!t(i.slice(1)):t(i)}function Zi(i){if(!["INT","IDENTIFIER"].includes(i.type))throw new SyntaxError(`Invalid token type: ${i.type}; expected IDENTIFIER or INT`);return I(i)}function I(i){var t,n;switch(i.type){case"IDENTIFIER":return i.value;case"INT":return parseInt(i.value,10);case"STRING":{const s=i.value.match(/(?:'(?<single>[^\']*)')|(?:"(?<double>[^\"]*)")/),r=((t=s==null?void 0:s.groups)==null?void 0:t.double)||((n=s==null?void 0:s.groups)==null?void 0:n.single);return en.default(r),r}case"OPERATOR":return i.value;case"TRUE":return!0;case"FALSE":return!1;default:throw new SyntaxError(`Invalid token type: ${i.type}`)}}function Ue(i,t){const n={bool_const:s=>s[0].value==="true",condition:s=>s[0],bool_expr:At,top_level_expr:At,start:s=>s[0],question_id:s=>s[0].value,choice_ref:s=>Zi(s[0]),matrix_statement_id:s=>({questionId:s[0],statementId:s[1].value}),question_choice_selected:s=>Fi(s,r=>t.isSelected({questionId:typeof r[0]=="string"?r[0]:r[0].questionId,statementId:typeof r[0]=="string"?void 0:r[0].statementId,choice:r[1]})),question_choice_selected_value_comparison:s=>{const r=t.selectedValue(s[0]);return r!==null&&fe(r,I(s[1]),I(s[2]))},question_choice_text_comparison:s=>St(t.textEntry({questionId:s[0],choice:s[1]}),I(s[2]),I(s[3]),!1),question_choice_text_comparison_case_insensitive:s=>St(t.textEntry({questionId:s[0],choice:s[1]}),I(s[2]),I(s[3]),!0),selected_count_comparison:s=>fe(t.countSelected(s[0]),I(s[1]),I(s[2])),choice_selection_count_comparison:s=>fe(t.countChoiceSelections(s[0],s[1]),I(s[2]),I(s[3]))};return Li.get_parser({transformer:n}).parse(i)}var Bi=Object.defineProperty,Gi=(i,t,n)=>t in i?Bi(i,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):i[t]=n,L=(i,t,n)=>(Gi(i,typeof t!="symbol"?t+"":t,n),n);const $t=new Yt.default({allowUnionTypes:!0});Kt.default($t);const zt=$t.compile(We);class te extends Error{}class z extends Error{}class ye extends Error{}class C extends Error{}class Vi extends Error{}class Wi{constructor(){L(this,"seenQuestions",new Set),L(this,"seenMultiQuestions",new Set),L(this,"seenQuestionStatements",new Map),L(this,"seenQuestionChoices",new Map),L(this,"seenTextChoices",new Map),L(this,"evaluator",{}),L(this,"validateReference",t=>{var n,s,r;if(!this.seenQuestions.has(t.questionId))throw new te(`Invalid question: ${t.questionId}`);if(t.statementId!==void 0&&!((n=this.seenQuestionStatements.get(t.questionId))!=null&&n.has(t.statementId)))throw new te(`Invalid statement: ${t.questionId}.${t.statementId}`);if(t.choice!==void 0&&!((s=this.seenQuestionChoices.get(t.questionId))!=null&&s.has(t.choice)))throw new te(`Invalid choice: ${t.questionId}[${t.choice}]`);if(t.choice!==void 0&&t.expectText===!0&&!((r=this.seenTextChoices.get(t.questionId))!=null&&r.has(t.choice)))throw new te(`Invalid text reference: ${t.questionId}[${t.choice}]`);if(typeof t.expectMulti=="boolean"&&t.expectMulti&&!this.seenMultiQuestions.has(t.questionId))throw new z(`Invalid question reference: ${t.questionId}. Expected a multi-answer question.`);if(typeof t.expectMulti=="boolean"&&!t.expectMulti&&this.seenMultiQuestions.has(t.questionId))throw new z(`Invalid question reference: ${t.questionId}. Expected a non-multi-answer question.`)}),this.evaluator.isSelected=t=>(this.validateReference(t),!1),this.evaluator.countSelected=t=>(this.validateReference({questionId:t}),0),this.evaluator.selectedValue=t=>(this.validateReference({questionId:typeof t=="string"?t:t.questionId,statementId:typeof t=="string"?void 0:t.statementId,expectMulti:!1}),0),this.evaluator.countChoiceSelections=(t,n)=>(this.validateReference({questionId:t,choice:n}),0),this.evaluator.textEntry=t=>(this.validateReference({...t,expectText:!0}),"")}}const Z=(i,t,n)=>{if(n)try{Ue(n,i.evaluator)}catch(s){throw s instanceof te||s instanceof z||s instanceof C?s:new Error(`Syntax error parsing display logic at ${t}: ${n}`)}},Xi=(i,t)=>{[...t.matchAll(je)].forEach(n=>{var s;const r=D(n.groups.locator);if(!i.seenQuestions.has(r.questionId))throw new z(`Invalid question referenced in locator expression: ${r.questionId}/${r.expression}`);if(r.identifier&&!((s=i.seenQuestionChoices.get(r.questionId))!=null&&s.has(r.identifier)))throw new z(`Invalid question choice referenced in locator expression: ${r.questionId}/${r.expression}(${r.identifier})`)})},B=(i,t,n)=>{if(n){const s=new Set(t);if(n.order){const r=n.order.split(" "),a=r.filter(o=>o==="$").length;if(a===0)throw new ye(`Wildcard $ is missing in randomization order at ${i.id}`);if(a>1)throw new ye(`Wildcard $ occurred multiples times in randomization order at ${i.id}`);if(r.forEach(o=>{if(o!=="$"&&!s.has(o))throw new ye(`Unknown id ${o} in randomization ordering at ${i.id}`)}),n.total!==void 0&&n.total<r.length)throw new ye(`Total value in randomization is too small at ${i.id}`)}}},Dt=(i,t)=>{const n=[v.FOR_MATRIX_CHOICE,v.UNSELECTED_FOR_MATRIX_CHOICE].includes(i.expression),s=(n?t.seenQuestionStatements:t.seenQuestionChoices).get(i.questionId);if(s===void 0)throw new z(`Invalid question referenced in locator expression: ${i.questionId}/${i.expression}`);if(n){const r=t.seenQuestionChoices.get(i.questionId);if(!i.identifier||!(r!=null&&r.has(i.identifier)))throw new z(`Invalid choice referenced in locator expression: ${i.questionId}/${i.expression}(${i.identifier})`)}return s},Hi=(i,t)=>{var n,s,r,a,o,l,u,c,_,m,h;if(Xi(t,i.text),i.id!==void 0){if(Z(t,i.id,i.display_logic),(n=i.statements)==null||n.forEach(d=>{Z(t,`${i.id}.${d.id}`,d.display_logic)}),(s=i.choices)==null||s.forEach(d=>{Z(t,`${i.id}[${d.id||d.value}]`,d.display_logic)}),i.type==="matrix-multi"||i.type==="matrix-single"?i.statement_groups?B(i,i.statement_groups.map(d=>d.id),i.randomization):B(i,(a=(r=i.statements)==null?void 0:r.map(d=>d.id))!=null?a:[],i.randomization):i.choice_groups?B(i,i.choice_groups.map(d=>d.id),i.randomization):B(i,(l=(o=i.choices)==null?void 0:o.map(d=>`${d.id||d.value}`))!=null?l:[],i.randomization),(u=i.statement_groups)==null||u.forEach(d=>{d.statements.forEach(p=>{Z(t,`${i.id}.${p.id}`,p.display_logic)}),B(i,d.statements.map(p=>p.id),d.randomization)}),(c=i.choice_groups)==null||c.forEach(d=>{d.choices.forEach(p=>{Z(t,`${i.id}[${p.id||p.value}]`,p.display_logic)}),B(i,d.choices.map(p=>`${p.id||p.value}`),d.randomization)}),t.seenQuestions.has(i.id))throw new C(`Duplicate question id: ${i.id}`);if(t.seenQuestions.add(i.id),i.type&&["matrix-multi","mc-multi"].includes(i.type)&&t.seenMultiQuestions.add(i.id),i.statements||i.dynamic_statements){const d=new Set;if(t.seenQuestionStatements.set(i.id,d),(_=i.statements)==null||_.forEach(p=>{if(d.has(p.id))throw new C(`Duplicate statement id: ${i.id}.${p.id}`);d.add(p.id)}),i.dynamic_statements){const p=D(i.dynamic_statements);Dt(p,t).forEach(g=>{if(typeof g=="number")throw new z(`Dynamic statement in question ${i.id} refers to choices with values`);if(d.has(g))throw new C(`Duplicate statement ${g} via dynamic statements in question ${i.id}`);d.add(g)})}}const y=(m=i.choices)!=null?m:[];if(i.choice_groups){if(new Set(i.choice_groups.map(d=>d.id)).size!==i.choice_groups.length)throw new C(`Choice groups must have a unique id in question ${i.id}`);i.choice_groups.forEach(d=>y.push(...d.choices))}if(y||i.dynamic_choices){const d=new Set;t.seenQuestionChoices.set(i.id,d);const p=new Set;if(t.seenTextChoices.set(i.id,p),y.forEach(g=>{var T;const O=(T=g.id)!=null?T:g.value;if(d.has(O))throw new C(`Duplicate choice: ${i.id}[${O}]`);d.add(O),g.text_input&&g.text_input!=="no"&&p.add(O)}),i.dynamic_choices){const g=D(i.dynamic_choices);Dt(g,t).forEach(T=>{if(d.has(T))throw new C(`Duplicate choice ${T} via dynamic choices in ${i.id}`);d.add(T)}),(h=t.seenTextChoices.get(g.questionId))==null||h.forEach(T=>p.add(T))}if(new Set([...d].map(g=>typeof g)).size>=2)throw new Vi("All choices in a question must either all have id's or all have values")}}},Ji=i=>{if(!zt(i))throw new Error(`Invalid template: ${i.template.id}. Reason: ${JSON.stringify(zt.errors,null,4)}`);Xe(i);const t=new Wi;i.sections.forEach(n=>{Z(t,n.id,n.display_logic),n.pages.forEach(s=>{var r;(r=s.questions)==null||r.forEach(a=>{Hi(a,t)})})})};function Pt(i,t){const n=structuredClone(i);return{...n,sections:n.sections.map(s=>({id:s.id,name:s.name,hideProgressBar:s.hideProgressBar,pages:t.evaluateDisplayLogic(s.displayLogic)?s.pages.map(r=>({...r,questions:Yi(r.questions,t)})).filter(r=>r.questions.length):[]})).filter(s=>s.pages.length)}}function Yi(i,t){return i.filter(n=>t.evaluateDisplayLogic(n.displayLogic)).map(n=>({...n,text:t.getQuestionText(n),statements:t.getQuestionStatements(n),choices:t.getQuestionChoices(n),statementGroups:t.getQuestionStatementGroups(n),choiceGroups:t.getQuestionChoiceGroups(n),randomization:void 0}))}const Lt=i=>!!(i!=null&&i.singleAnswer)||!!(i!=null&&i.multipleAnswers)&&(i==null?void 0:i.multipleAnswers.length)>0,Ct=(i,t)=>{let n=!1,s=t,r=new me(i,s);const a=u=>c=>{const _=u.includes(c.questionId);return _&&(n=!0),!_},o=u=>c=>{const _=!c.statementId||u.includes(c.statementId);return _||(n=!0),_},l=u=>c=>{var _;if(c.singleAnswer){const h=!!c.singleAnswer.text||u.includes(c.singleAnswer.choiceId||c.singleAnswer.choiceValue);return h||(n=!0),{...c,singleAnswer:h?c.singleAnswer:void 0}}const m=(_=c.multipleAnswers)==null?void 0:_.filter(h=>!!h.text||u.includes(h.choiceId||h.choiceValue));return m&&m.length<c.multipleAnswers.length&&(n=!0),{...c,multipleAnswers:m}};for(const u of i.sections){if(!r.evaluateDisplayLogic(u.displayLogic)){const c=u.pages.flatMap(_=>_.questions).map(_=>_.id);s=s.filter(a(c)),n&&(n=!1,r=new me(i,s));continue}for(const c of u.pages)for(const _ of c.questions){if(!r.evaluateDisplayLogic(_.displayLogic))s=s.filter(a([_.id]));else{const m=r.getQuestionStatementsFlattened(_).map(p=>p.id),h=r.getQuestionChoicesFlattened(_).map(p=>p.id||p.value),y=o(m),d=l(h);s=s.filter(p=>p.questionId!==_.id||y(p)),s=s.map(p=>p.questionId!==_.id?p:d(p))}n&&(n=!1,r=new me(i,s))}}return s},Qt=(i,t)=>t?`${i}.${t}`:i,Ki=(i,t,n,s)=>{var r;if(!t.singleAnswer)return s==null||s.warn("Response validation failed: No SingleAnswer provided in single answer question.",{surveyResponseId:n.surveyResponseId,questionId:t.questionId}),!1;const a=new Set(n.getQuestionChoicesFlattened(i).map(l=>{var u;return(u=l.id)!=null?u:l.value})),o=(r=t.singleAnswer.choiceId)!=null?r:t.singleAnswer.choiceValue;return a.has(o)?!0:(s==null||s.warn("Response validation failed: Selected choice in single answer question not available",{surveyResponseId:n.surveyResponseId,questionId:i.id,choiceKey:o}),!1)},es=(i,t,n,s)=>{if(!t.multipleAnswers)return s==null||s.warn("Response validation failed: No MultipleAnswer provided in multi answer question",{surveyResponseId:n.surveyResponseId,questionId:t.questionId}),!1;const r=new Set(n.getQuestionChoicesFlattened(i).map(o=>{var l;return(l=o.id)!=null?l:o.value}));let a=!1;return t.multipleAnswers.forEach(o=>{var l;const u=(l=o.choiceId)!=null?l:o.choiceValue;r.has(u)||(s==null||s.warn("Response validation failed: Selected choice in multi answer question not available",{surveyResponseId:n.surveyResponseId,questionId:i.id,choiceKey:u}),a=!0)}),!a},ts=(i,t,n)=>{var s;return(s=i.singleAnswer)!=null&&s.text?!0:(n==null||n.warn("Response validation failed: No text provided",{surveyResponseId:t.surveyResponseId,questionId:i.questionId}),!1)};function Mt(i,t,n,s){if(!Lt(t))return!0;switch(ve(i.type)){case N.McSingle:case N.MatrixSingle:return Ki(i,t,n,s);case N.McMulti:case N.MatrixMulti:return es(i,t,n,s);case N.TextSingle:case N.TextMulti:return ts(t,n,s);default:return s==null||s.warn("Response validation failed: Unsupported question type",{questionId:i.id,questionType:i.type,surveyResponseId:n.surveyResponseId}),!1}}function ns(i,t,n,s){const r={templateId:i.id,surveyResponseId:n.surveyResponseId};s==null||s.debug("Validating response...",{questionResponses:t,...r});const a=Pt(i,n),o=Te(a),l=Ct(a,t);if(new Set(l.map(_=>Qt(_.questionId,_.statementId))).size<l.length)return s==null||s.warn("Response validation failed: Duplicate question/statement ID(s) in the response.",{relevantQuestionResponses:l,...r}),!1;const u=Object.fromEntries(o.filter(_=>_.id).map(_=>[_.id,_])),c=new Map;for(const _ of l){const m=u[_.questionId];if(!m)return s==null||s.warn("Response validation failed: Response provided to a question that's not in the template",{questionId:_.questionId,...r}),!1;let h=c.get(_.questionId);if(h===void 0&&(h=new Map(n.getQuestionStatementsFlattened(m).map(y=>[y.id,y])),c.set(_.questionId,h)),_.statementId){if(!h||!h.size)return s==null||s.warn("Response validation failed: Response provided to a statement even to the question has no statements",{questionId:_.questionId,statementId:_.statementId,...r}),!1;if(!h.get(_.statementId))return s==null||s.warn("Response validation failed: Response provided to an invalid question statement",{questionId:_.questionId,statementId:_.statementId,...r}),!1}else if(h&&h.size)return s==null||s.warn("Response validation failed; Response provided to a question with statements but not statement provided.",{questionId:_.questionId,statementId:_.statementId,...r}),!1;if(!Mt(m,_,n,s))return!1}return!0}const is=We,ss="pulse_default_alpha",rs={allPermissions:sn,SURVEY_RESOURCE_TYPE:nn,surveyAdministerPermission:Ge};exports.DEFAULT_TEMPLATE_ID=ss,exports.LOCATOR_EXPRESSION=v,exports.QUESTION_TEXT_LOCATOR_PATTERN=je,exports.TemplateContextEvaluator=me,exports.evaluateExpression=Ue,exports.evaluateTemplateNode=Pt,exports.extractQuestionNodes=Te,exports.getExperimentalOptionalBoolean=rn,exports.getExperimentalOptionalString=an,exports.getQualifiedQuestionId=Ke,exports.getQuestionTypeEnum=ve,exports.getRandomizationTypeEnum=Ye,exports.getRawQuestionId=we,exports.getRelevantQuestionResponses=Ct,exports.getTemplateNode=Nn,exports.hasAnswer=Lt,exports.interpolateMacros=ge,exports.interpolateTemplate=Xe,exports.parseLocator=D,exports.permissions=rs,exports.polyfillStructuredClone=on,exports.responseRef=Qt,exports.templateSchema=is,exports.transformCase=ie,exports.validateLocator=Je,exports.validateQuestionResponse=Mt,exports.validateResponse=ns,exports.validateTemplate=Ji;
|
|
14
|
+
%s`,t,i);super(r),this.rule=t,this.obj=n,this.orig_exc=i}}function $n(s,t=null,n=null){let i,r,a=new Map;for(const o of s)i=t!==null?t(o):o,r=n!==null?n(o):o,a.has(i)?a.get(i).push(r):a.set(i,[r]);return a}function K(s,t,n){let i;return fe(s)?"__type__"in s?(i=t[s.__type__],i.deserialize(s,n)):"@"in s?n[s["@"]]:Object.fromEntries(g(s).map(([r,a])=>[r,K(a,t,n)])):Rn(s)?s.map(r=>K(r,t,n)):s}let T=class{static deserialize(t,n){const i=this;let r=i&&i.__serialize_fields__;if("@"in t)return n[t["@"]];let a=me(i);for(const o of r)if(t&&o in t)a[o]=K(t[o],bi,n);else throw new KeyError("Cannot find key for class",i,e);return"_deserialize"in a&&a._deserialize(),a}};class zn extends T{static get __serialize_fields__(){return["memoized"]}constructor(t){super(),this.types_to_memoize=t,this.memoized=new Enumerator}in_types(t){return t instanceof this.types_to_memoize}serialize(){return _serialize(this.memoized.reversed(),null)}static deserialize(t,n,i){return K(t,n,i)}}class it{constructor(){this.empty=!0}}class y{constructor(t,n,i=null){this.data=t,this.children=n,this._meta=i}get meta(){return this._meta===null&&(this._meta=new it),this._meta}repr(){return h("Tree(%r, %r)",this.data,this.children)}_pretty_label(){return this.data}_pretty(t,n){if(this.children.length===1&&!(this.children[0]instanceof y))return[N(n,t).join(""),this._pretty_label()," ",h("%s",this.children[0].value),`
|
|
15
|
+
`];let i=[N(n,t).join(""),this._pretty_label(),`
|
|
16
|
+
`];for(const r of this.children)r instanceof y?i.push(...r._pretty(t+1,n)):i.push(N(n,t+1).join(""),h("%s",r.value),`
|
|
17
|
+
`);return i}pretty(t=" "){return this._pretty(0,t).join("")}eq(t){return t&&this&&t&&this&&t.children&&this.children&&t.data&&this.data?this.data===t.data&&this.children===t.children:!1}iter_subtrees(){let t=[this],n=new Map;for(const i of t)n.set(i,i),t.push(...[...i.children].reverse().filter(r=>r instanceof y&&!n.has(r)).map(r=>r));return t=void 0,[...n.values()].reverse()}find_pred(t){return tt(t,this.iter_subtrees())}find_data(t){return this.find_pred(n=>n.data===t)}*scan_values(t){for(const n of this.children)if(n instanceof y)for(const i of n.scan_values(t))yield i;else t(n)&&(yield n)}*iter_subtrees_topdown(){let t,n=[this];for(;n.length;)if(t=n.pop(),t instanceof y){yield t;for(const i of[...t.children].reverse())n.push(i)}}copy(){return type(this)(this.data,this.children)}set(t,n){this.data=t,this.children=n}}let Z=class extends Ze{static get __visit_tokens__(){return!0}constructor(t=!0){super(),this.__visit_tokens__=t}static fromObj(t,...n){class i extends this{}for(let[r,a]of Object.entries(t))i.prototype[r]=a;return new i(...n)}_call_userfunc(t,n=null){let i,r,a=n!==null?n:t.children;if(t&&t.data&&this&&this[t.data]){i=this&&this[t.data];try{return r=i&&i.visit_wrapper||null,r!==null?i.visit_wrapper(i,t.data,a,t.meta):i(a)}catch(o){throw o instanceof Y?o:o instanceof Error?new ve(t.data,t,o):o}}else return this.__default__(t.data,a,t.meta)}_call_userfunc_token(t){let n;if(t&&t.type&&this&&this[t.type]){n=this&&this[t.type];try{return n(t)}catch(i){throw i instanceof Y?i:i instanceof Error?new ve(t.type,t,i):i}}else return this.__default_token__(t)}*_transform_children(t){let n;for(const i of t)i instanceof y?n=this._transform_tree(i):this.__visit_tokens__&&i instanceof f?n=this._call_userfunc_token(i):n=i,n!==X&&(yield n)}_transform_tree(t){let n=[...this._transform_children(t.children)];return this._call_userfunc(t,n)}transform(t){return this._transform_tree(t)}__default__(t,n,i){return new y(t,n,i)}__default_token__(t){return t}};class st extends Z{_transform_tree(t){return this._call_userfunc(t)}transform(t){for(const n of t.iter_subtrees())n.children=[...this._transform_children(n.children)];return this._transform_tree(t)}}class Dn extends Z{transform(t){let n,i,r,a=[],o=[t];for(;o.length;){const c=o.pop();a.push(c),c instanceof y&&o.push(...c.children)}let l=[];for(const c of[...a].reverse())c instanceof y?(r=c.children.length,r?(n=l.slice(-r),l.splice(-r)):n=[],i=this._call_userfunc(c,n),i!==X&&l.push(i)):this.__visit_tokens__&&c instanceof f?(i=this._call_userfunc_token(c),i!==X&&l.push(i)):l.push(c);let[p]=l;return p}}class Pn extends Z{_transform_tree(t){return t.children=[...this._transform_children(t.children)],this._call_userfunc(t)}}class Te{_call_userfunc(t){const n=this[t.data];return n?n(t):this.__default__(t)}__default__(t){return t}__class_getitem__(t){return cls}}class Ln extends Te{visit(t){for(const n of t.iter_subtrees())this._call_userfunc(n);return t}visit_topdown(t){for(const n of t.iter_subtrees_topdown())this._call_userfunc(n);return t}}class Cn extends Te{visit(t){for(const n of t.children)n instanceof y&&this.visit(n);return this._call_userfunc(t),t}visit_topdown(t){this._call_userfunc(t);for(const n of t.children)n instanceof y&&this.visit_topdown(n);return t}}class Qn extends Ze{visit(t){return t.data in this?this[t.data](t):this.__default__(t)}visit_children(t){return t.children.map(n=>n instanceof y?this.visit(n):n)}__default__(t){return this.visit_children(t)}}var Mn=0;class be extends T{is_term=U;constructor(t){super(),this.name=t}eq(t){return this.is_term===t.is_term&&this.name===t.name}repr(){return h("%s(%r)",type(this).name,this.name)}static get fullrepr(){return property(__repr__)}get fullrepr(){return this.constructor.fullrepr}renamed(t){return type(this)(t(this.name))}}class Ee extends be{static get __serialize_fields__(){return["name","filter_out"]}get is_term(){return!0}constructor(t,n=!1){super(),this.name=t,this.filter_out=n}get fullrepr(){return h("%s(%r, %r)",type(this).name,this.name,this.filter_out)}renamed(t){return type(this)(t(this.name),this.filter_out)}}class Ie extends be{static get __serialize_fields__(){return["name"]}get is_term(){return!1}}class ee extends T{static get __serialize_fields__(){return["keep_all_tokens","expand1","priority","template_source","empty_indices"]}constructor(t=!1,n=!1,i=null,r=null,a=[]){super(),this.keep_all_tokens=t,this.expand1=n,this.priority=i,this.template_source=r,this.empty_indices=a}repr(){return h("RuleOptions(%r, %r, %r, %r)",this.keep_all_tokens,this.expand1,this.priority,this.template_source)}}class M extends T{static get __serialize_fields__(){return["origin","expansion","order","alias","options"]}static get __serialize_namespace__(){return[Ee,Ie,ee]}constructor(t,n,i=0,r=null,a=null){super(),this.origin=t,this.expansion=n,this.alias=r,this.order=i,this.options=a||new ee,this._hash=[this.origin,this.expansion]}_deserialize(){this._hash=[this.origin,this.expansion]}repr(){return h("Rule(%r, %r, %r, %r)",this.origin,this.expansion,this.alias,this.options)}eq(t){return t instanceof M?this.origin===t.origin&&this.expansion===t.expansion:!1}}class Re extends T{constructor(t,n=[],i=null){super(),this.value=t,this.flags=H(n),this.raw=i}repr(){return repr(this.to_regexp())}eq(t){return type(this)===type(t)&&this.value===t.value&&this.flags===t.flags}to_regexp(){throw new NotImplementedError}get min_width(){throw new NotImplementedError}get max_width(){throw new NotImplementedError}_get_flags(t){return t}}class Ne extends Re{static get __serialize_fields__(){return["value","flags"]}static get type(){return"str"}to_regexp(){return this._get_flags(Ge.escape(this.value))}get min_width(){return this.value.length}get max_width(){return this.value.length}}class qe extends Re{static get __serialize_fields__(){return["value","flags","_width"]}static get type(){return"re"}to_regexp(){return this._get_flags(this.value)}_get_width(){return this._width===null&&(this._width=get_regexp_width(this.to_regexp())),this._width}get min_width(){return this._get_width()[0]}get max_width(){return this._get_width()[1]}}let te=class extends T{static get __serialize_fields__(){return["name","pattern","priority"]}static get __serialize_namespace__(){return[Ne,qe]}constructor(t,n,i=Mn){super(),this.name=t,this.pattern=n,this.priority=i}repr(){return h("%s(%r, %r)",type(this).name,this.name,this.pattern)}user_repr(){return this.name.startsWith("__")?this.pattern.raw||this.name:this.name}};class f{value;type;constructor(t,n,i=null,r=null,a=null,o=null,l=null,p=null){this.type=t,this.start_pos=i,this.value=n,this.line=r,this.column=a,this.end_line=o,this.end_column=l,this.end_pos=p}update(t=null,n=null){return f.new_borrow_pos(t!==null?t:this.type,n!==null?n:this.value,this)}static new_borrow_pos(t,n,i){const r=this;return new r(t,n,i.start_pos,i.line,i.column,i.end_line,i.end_column,i.end_pos)}repr(){return h("Token(%r, %r)",this.type,this.value)}eq(t){return t instanceof f&&this.type!==t.type?!1:str.__eq__(this,t)}static get __hash__(){return str.__hash__}}class $e{constructor(t){this.newline_char=t,this.char_pos=0,this.line=1,this.column=1,this.line_start_pos=0}eq(t){return t instanceof $e?this.char_pos===t.char_pos&&this.newline_char===t.newline_char:U}feed(t,n=!0){let i;n&&(i=xe(t,this.newline_char),i&&(this.line+=i,this.line_start_pos=this.char_pos+t.lastIndexOf(this.newline_char)+1)),this.char_pos+=t.length,this.column=this.char_pos-this.line_start_pos+1}}class jn{constructor(t){this.scanner=t}__call__(t){let n,i=this.scanner.match(t.value,0);return i&&([n,t.type]=i),t}}const Un=$(jn);class Fn{constructor(t,n,i){this.callback1=t,this.callback2=n,this.cond=i}__call__(t){let n=this.callback1(t);return this.cond(n)?this.callback2(t):n}}const Bn=$(Fn);function Zn(s,t,n,i){let r,a,o=$n(s,c=>c.pattern.constructor.type),l=new Set,p={};for(const c of o.get("re")||[]){a=[];for(const _ of o.get("str")||[])_.priority===c.priority&&(r=_.pattern.value,r===Tn(n,c.pattern.to_regexp(),r,t)&&(a.push(_),kn(new Set(_.pattern.flags),new Set(c.pattern.flags))&&l.add(_)));a.length&&(p[c.name]=new Un(new Ve(a,t,n,i,!0)))}return[s.filter(c=>!l.has(c)).map(c=>c),p]}function Gn(s){return s.includes(`
|
|
18
|
+
`)||s.includes("\\n")||s.includes("\\s")||s.includes("[^")||s.includes("(?s")&&s.includes(".")}class ze{constructor(t,n=null,i=null){this.text=t,this.line_ctr=n||new $e(`
|
|
19
|
+
`),this.last_token=i}eq(t){return t instanceof ze?this.text===t.text&&this.line_ctr===t.line_ctr&&this.last_token===t.last_token:U}}class rt{constructor(t,n){this.lexer=t,this.state=n}static from_text(t,n){return new this(t,new ze(n))}lex(t){return this.lexer.lex(this.state,t)}}class ne extends Xe{lex(t,n){return U}}function Vn(s,t){s.sort((n,i)=>{let r=t(n),a=t(i);for(let o=0;o<r.length;o++){if(r[o]>a[o])return 1;if(r[o]<a[o])return-1}return 0})}class ie extends ne{constructor(t){super();let n=[...t.terminals];if(this.re=t.re_module,!t.skip_validation){for(const i of n){try{this.re.compile(i.pattern.to_regexp(),t.g_regex_flags)}catch(r){throw r instanceof this.re.error?new B(h("Cannot compile token %s: %s",i.name,i.pattern)):r}if(i.pattern.min_width===0)throw new B(h("Lexer does not allow zero-width terminals. (%s: %s)",i.name,i.pattern))}if(!(new Set(t.ignore)<=new Set(n.map(i=>i.name))))throw new B(h("Ignore terminals are not defined: %s",Ye(new Set(t.ignore),new Set(n.map(i=>i.name)))))}this.newline_types=H(n.filter(i=>Gn(i.pattern.to_regexp())).map(i=>i.name)),this.ignore_types=H(t.ignore),Vn(n,i=>[-i.priority,-i.pattern.max_width,-i.pattern.value.length,i.name]),this.terminals=n,this.user_callbacks=t.callbacks,this.g_regex_flags=t.g_regex_flags,this.use_bytes=t.use_bytes,this.terminals_by_name=t.terminals_by_name,this._scanner=null}_build_scanner(){let t;[t,this.callback]=Zn(this.terminals,this.g_regex_flags,this.re,this.use_bytes);for(const[n,i]of g(this.user_callbacks))n in this.callback?this.callback[n]=new Bn(this.callback[n],i,r=>r.type===n):this.callback[n]=i;this._scanner=new Ve(t,this.g_regex_flags,this.re,this.use_bytes)}get scanner(){return this._scanner===null&&this._build_scanner(),this._scanner}match(t,n){return this.scanner.match(t,n)}*lex(t,n){try{for(;;)yield this.next_token(t,n)}catch(i){if(!(i instanceof ye))throw i}}next_token(t,n=null){let i,r,a,o,l=t.line_ctr;for(;l.char_pos<t.text.length;){if(r=this.match(t.text,l.char_pos),!r)throw i=Ye(this.scanner.allowed_types,this.ignore_types),i||(i=new Set(["<END-OF-FILE>"])),new D({seq:t.text,lex_pos:l.char_pos,line:l.line,column:l.column,allowed:i,token_history:t.last_token&&[t.last_token],state:n,terminals_by_name:this.terminals_by_name});let[p,c]=r;if(this.ignore_types.has(c))c in this.callback&&(o=new f(c,p,l.char_pos,l.line,l.column),this.callback[c](o)),l.feed(p,this.newline_types.has(c));else{if(a=new f(c,p,l.char_pos,l.line,l.column),l.feed(p,this.newline_types.has(c)),a.end_line=l.line,a.end_column=l.column,a.end_pos=l.char_pos,a.type in this.callback&&(a=this.callback[a.type](a),!(a instanceof f)))throw new B(h("Callbacks must return a token (returned %r)",a));return t.last_token=a,a}}throw new ye(this)}}class Wn extends ne{constructor({conf:t,states:n,always_accept:i=[]}={}){super();let r,a,o,l=[...t.terminals],p=t.terminals_by_name,c=R(t);c.terminals=l;let _=new Map;this.lexers={};for(let[d,m]of g(n))r=H(m),_.has(r)?a=_.get(r):(m=In(new Set(m),[...new Set(t.ignore),...new Set(i)]),o=R(c),o.terminals=[...m].filter(u=>u in p).map(u=>p[u]),a=new ie(o),_.set(r,a)),this.lexers[d]=a;this.root_lexer=new ie(c)}*lex(t,n){let i,r,a;try{for(;;)r=this.lexers[n.position],yield r.next_token(t,n)}catch(o){if(!(o instanceof ye))if(o instanceof D)try{throw i=t.last_token,a=this.root_lexer.next_token(t,n),new P({token:a,expected:o.allowed,state:n,token_history:[i],terminals_by_name:this.root_lexer.terminals_by_name})}catch(l){throw l}else throw o}}}class at extends T{static get __serialize_fields__(){return["terminals","ignore","g_regex_flags","use_bytes","lexer_type"]}static get __serialize_namespace__(){return[te]}constructor({terminals:t,re_module:n,ignore:i=[],postlex:r=null,callbacks:a=null,g_regex_flags:o="",skip_validation:l=!1,use_bytes:p=!1}={}){super(),this.terminals=t,this.terminals_by_name=Object.fromEntries(this.terminals.map(c=>[c.name,c])),this.ignore=i,this.postlex=r,this.callbacks=Object.keys(a).length||{},this.g_regex_flags=o,this.re_module=n,this.skip_validation=l,this.use_bytes=p,this.lexer_type=null}_deserialize(){this.terminals_by_name=Object.fromEntries(this.terminals.map(t=>[t.name,t]))}}class ot extends T{static get __serialize_fields__(){return["rules","start","parser_type"]}constructor(t,n,i){super(),this.rules=t,this.callbacks=n,this.start=i,this.parser_type=null}}class Xn{constructor(t){this.node_builder=t}__call__(t){return t.length===1?t[0]:this.node_builder(t)}}const Hn=$(Xn);class Jn{constructor(t,n=null){this.node_builder=t,this.node_filter=n}__call__(t){let n,i,r,a=this.node_builder(t);return a instanceof y&&(r=a.meta,n=this._pp_get_meta(t),n!==null&&("line"in r||(r.line=n&&n.container_line||n.line,r.column=n&&n.container_column||n.column,r.start_pos=n&&n.container_start_pos||n.start_pos,r.empty=!1),r.container_line=n&&n.container_line||n.line,r.container_column=n&&n.container_column||n.column),i=this._pp_get_meta([...t].reverse()),i!==null&&("end_line"in r||(r.end_line=i&&i.container_end_line||i.end_line,r.end_column=i&&i.container_end_column||i.end_column,r.end_pos=i&&i.container_end_pos||i.end_pos,r.empty=!1),r.container_end_line=i&&i.container_end_line||i.end_line,r.container_end_column=i&&i.container_end_column||i.end_column)),a}_pp_get_meta(t){for(const n of t)if(!(this.node_filter!==null&&!this.node_filter(n))){if(n instanceof y){if(!n.meta.empty)return n.meta}else if(n instanceof f)return n}}}const lt=$(Jn);function Yn(s){if(Nn(s))return J({unknown_param_0:lt,node_filter:s});if(s===!0)return lt;if(s===!1)return null;throw new k(h("Invalid option for propagate_positions: %r",s))}class ke{constructor(t,n,i){this.node_builder=i,this.to_include=t,this.append_none=n}__call__(t){let n=[];for(const[i,r,a]of this.to_include)a&&n.push(...N([null],a)),r?n.push(...t[i].children):n.push(t[i]);return this.append_none&&n.push(...N([null],this.append_none)),this.node_builder(n)}}const Kn=$(ke);class ei extends ke{__call__(t){let n=[];for(const[i,r,a]of this.to_include)a&&n.push(...N([null],a)),r?n.length?n.push(...t[i].children):n=t[i].children:n.push(t[i]);return this.append_none&&n.push(...N([null],this.append_none)),this.node_builder(n)}}const ti=$(ei);class ni extends ke{constructor(t,n){super(),this.node_builder=n,this.to_include=t}__call__(t){let n=[];for(const[i,r]of this.to_include)r?n.length?n.push(...t[i].children):n=t[i].children:n.push(t[i]);return this.node_builder(n)}}const ii=$(ni);function si(s){return!s.is_term&&s.name.startsWith("_")}function ri(s,t,n,i){let r,a;i.length?(a=i.map(p=>(0+p).toString()).join(""),r=a.split("0").map(p=>p.length)):r=N([0],s.length+1);let o=[],l=0;for(const[p,c]of F(s))l+=r[p],(t||!(c.is_term&&c.filter_out))&&(o.push([p,si(c),l]),l=0);if(l+=r[s.length],i.length||o.length<s.length||qn(o.map(([p,c,_])=>c)))return(i.length||n).length?J(n?Kn:ti,o,l):J(ii,o.map(([p,c,_])=>[p,c]))}function ai(s){function t(n){let i=new y(s.name,n);return s(i)}return t=wraps(s)(t),t}function oi(s,t,n){if(n===_vargs_meta||n===_vargs_meta_inline)throw new NotImplementedError("Meta args not supported for internal transformer");function i(r){return n(s,t,r,null)}return i=wraps(s)(i),i}class li{constructor(t,n,i=!1,r=!1,a=!1){this.tree_class=n,this.propagate_positions=i,this.ambiguous=r,this.maybe_placeholders=a,this.rule_builders=[...this._init_builders(t)]}*_init_builders(t){let n,i,r,a,o=Yn(this.propagate_positions);for(const l of t)r=l.options,i=r.keep_all_tokens,n=r.expand1,a=[...tt(null,[n&&!l.alias&&Hn,ri(l.expansion,i,this.ambiguous,this.maybe_placeholders?r.empty_indices:[]),o])],yield[l,a]}create_callback(t=null){let n,i,r,a=new Map;for(const[o,l]of this.rule_builders){i=o.alias||o.options.template_source||o.origin.name,t&&t[i]?(n=t&&t[i],r=n&&n.visit_wrapper||null,r!==null?n=oi(n,i,r):t instanceof st&&(n=ai(n))):n=J(this.tree_class,i);for(const p of l)n=p(n);if(a.has(o))throw new Y(h("Rule '%s' already exists",o));a.set(o,n)}return a}}class _t extends T{constructor({parser_conf:t,debug:n=!1}={}){super();let i=new LALR_Analyzer({unknown_param_0:t,debug:n});i.compute_lalr();let r=t.callbacks;this._parse_table=i.parse_table,this.parser_conf=t,this.parser=new ct(i.parse_table,r,n)}static deserialize(t,n,i,r=!1){let a=me(this);return a._parse_table=pi.deserialize(t,n),a.parser=new ct(a._parse_table,i,r),a}serialize(t){return this._parse_table.serialize(t)}parse_interactive(t,n){return this.parser.parse({lexer:t,start:n,start_interactive:!0})}parse({lexer:t,start:n,on_error:i=null}={}){let r,a;try{return this.parser.parse({lexer:t,start:n})}catch(o){if(o instanceof A){if(i===null)throw o;for(;;){if(o instanceof D&&(a=o.interactive_parser.lexer_thread.state,r=a.line_ctr.char_pos),!i(o))throw o;o instanceof D&&r===a.line_ctr.char_pos&&a.line_ctr.feed(a.text.slice(r,r+1));try{return o.interactive_parser.resume_parse()}catch(l){if(l instanceof P){if(o instanceof P&&o.token.type===l.token.type&&l.token.type==="$END"&&o.interactive_parser.eq(l.interactive_parser))throw l;o=l}else if(l instanceof D)o=l;else throw l}}}else throw o}}}class _i{constructor(t,n,i){this.parse_table=t,this.start_state=this.parse_table.start_states[i],this.end_state=this.parse_table.end_states[i],this.states=this.parse_table.states,this.callbacks=n,this.start=i}}class De{constructor(t,n,i=null,r=null){this.parse_conf=t,this.lexer=n,this.state_stack=i||[this.parse_conf.start_state],this.value_stack=r||[]}get position(){return v(this.state_stack)}eq(t){return t instanceof De?this.state_stack.length===t.state_stack.length&&this.position===t.position:U}copy(){return R(this)}feed_token(t,n=!1){let i,r,a,o,l,p,c,_,d,m,u=this.state_stack,b=this.value_stack,x=this.parse_conf.states,At=this.parse_conf.end_state,oe=this.parse_conf.callbacks;for(;;){if(d=v(u),t.type in x[d])[r,a]=x[d][t.type];else throw o=new Set(he(x[d]).filter(le=>nt(le)).map(le=>le)),new P({token:t,expected:o,state:this,interactive_parser:null});if(r===Oe){u.push(a),b.push(t.type in oe?oe[t.type](t):t);return}else if(p=a,_=p.expansion.length,_?(c=b.slice(-_),u.splice(-_),b.splice(-_)):c=[],m=oe.get(p)(c),[i,l]=x[v(u)][p.origin.name],u.push(l),b.push(m),n&&v(u)===At)return v(b)}}}class ct{constructor(t,n,i=!1){this.parse_table=t,this.callbacks=n,this.debug=i}parse({lexer:t,start:n,value_stack:i=null,state_stack:r=null,start_interactive:a=!1}={}){let o=new _i(this.parse_table,this.callbacks,n),l=new De(o,t,r,i);return a?new L(this,l,l.lexer):this.parse_from_state(l)}parse_from_state(t){let n,i;try{i=null;for(i of t.lexer.lex(t))t.feed_token(i);return n=i?f.new_borrow_pos("$END","",i):new f("$END","",0,1,1),t.feed_token(n,!0)}catch(r){if(r instanceof A){try{r.interactive_parser=new L(this,t,t.lexer)}catch(a){if(!(a instanceof ReferenceError))throw a}throw r}else if(r instanceof Error){if(this.debug){console.log(""),console.log("STATE STACK DUMP"),console.log("----------------");for(const[a,o]of F(t.state_stack))console.log(h("%d)",a),o);console.log("")}throw r}else throw r}}}let L=class Ot{constructor(t,n,i){this.parser=t,this.parser_state=n,this.lexer_thread=i,this.result=null}feed_token(t){return this.parser_state.feed_token(t,t.type==="$END")}*iter_parse(){for(const t of this.lexer_thread.lex(this.parser_state))yield t,this.result=this.feed_token(t)}exhaust_lexer(){return[...this.iter_parse()]}feed_eof(t=null){let n=t!==null?f.new_borrow_pos("$END","",t):new f("$END","",0,1,1);return this.feed_token(n)}copy(){return R(this)}eq(t){return t instanceof Ot?this.parser_state===t.parser_state&&this.lexer_thread===t.lexer_thread:!1}as_immutable(){let t=R(this);return new pt(t.parser,t.parser_state,t.lexer_thread)}pretty(){let t=["Parser choices:"];for(const[n,i]of g(this.choices()))t.push(h(" - %s -> %r",n,i));return t.push(h("stack size: %s",this.parser_state.state_stack.length)),t.join(`
|
|
20
|
+
`)}choices(){return this.parser_state.parse_conf.parse_table.states[this.parser_state.position]}accepts(){let t,n=new Set;for(const i of this.choices())if(nt(i)){t=R(this);let r=null;try{t.feed_token(new f(i,""))}catch(a){if(r=a,!(a instanceof P))throw a}r||n.add(i)}return n}resume_parse(){return this.parser.parse_from_state(this.parser_state)}};class pt extends L{result=null;feed_token(t){let n=R(this);return n.result=L.feed_token(n,t),n}exhaust_lexer(){let t=this.as_mutable();return t.exhaust_lexer(),t.as_immutable()}as_mutable(){let t=R(this);return new L(t.parser,t.parser_state,t.lexer_thread)}}class ut{constructor(t){this.name=t}repr(){return this.toString()}}var Oe=new ut("Shift"),dt=new ut("Reduce");class ci{constructor(t,n,i){this.states=t,this.start_states=n,this.end_states=i}serialize(t){let n=new Enumerator,i=Object.fromEntries(g(this.states).map(([r,a])=>[r,Object.fromEntries(g(a).map(([o,[l,p]])=>[He(n,o),l===dt?[1,p.serialize(t)]:[0,p]]))]));return{tokens:n.reversed(),states:i,start_states:this.start_states,end_states:this.end_states}}static deserialize(t,n){const i=this;let r=t.tokens,a=Object.fromEntries(g(t.states).map(([o,l])=>[o,Object.fromEntries(g(l).map(([p,[c,_]])=>[r[p],c===1?[dt,M.deserialize(_,n)]:[Oe,_]]))]));return new i(a,t.start_states,t.end_states)}}class pi extends ci{static from_ParseTable(t){const n=this;let i=[...t.states],r=Object.fromEntries(F(i).map(([p,c])=>[c,p])),a={};for(let[p,c]of g(t.states))c=Object.fromEntries(g(c).map(([_,d])=>[_,d[0]===Oe?[d[0],r[d[1]]]:d])),a[r[p]]=c;let o=Object.fromEntries(g(t.start_states).map(([p,c])=>[p,r[c]])),l=Object.fromEntries(g(t.end_states).map(([p,c])=>[p,r[c]]));return new n(a,o,l)}}function ui(s){if(s&&s.__future_interface__)return s;{class t extends ne{constructor(i){super(),this.lexer=s(i)}lex(i,r){return this.lexer.lex(i.text)}}return t}}function di(s,t,n,i,r){let a=ot.deserialize(s.parser_conf,t),o=_t.deserialize(s.parser,t,i,r.debug);return a.callbacks=i,new hi({lexer_conf:n,parser_conf:a,options:r,parser:o})}var ht={};class hi extends T{static get __serialize_fields__(){return["lexer_conf","parser_conf","parser"]}constructor({lexer_conf:t,parser_conf:n,options:i,parser:r=null}={}){super();let a,o;this.parser_conf=n,this.lexer_conf=t,this.options=i,r?this.parser=r:(o=He(ht,n.parser_type),this.parser=o(t,n,i));let l=t.lexer_type;if(this.skip_lexer=!1,["dynamic","dynamic_complete"].includes(l)){this.skip_lexer=!0;return}const p={basic:gi,contextual:xi};l in p?(a=p[l],this.lexer=a(t,this.parser,t.postlex,i)):this.lexer=ui(l)(t),t.postlex&&(this.lexer=new yi(this.lexer,t.postlex))}_verify_start(t=null){let n;if(t===null){if(n=this.parser_conf.start,n.length>1)throw new k("Lark initialized with more than 1 possible start rule. Must specify which start rule to parse",n);[t]=n}else if(!this.parser_conf.start.includes(t))throw new k(h("Unknown start rule %s. Must be one of %r",t,this.parser_conf.start));return t}_make_lexer_thread(t){return this.skip_lexer?t:rt.from_text(this.lexer,t)}parse(t,n=null,i=null){let r=this._verify_start(n),a=i===null?{}:{on_error:i},o=this._make_lexer_thread(t);return this.parser.parse({lexer:o,start:r,...a})}parse_interactive(t=null,n=null){let i=this._verify_start(n);if(this.parser_conf.parser_type!=="lalr")throw new k("parse_interactive() currently only works with parser='lalr' ");let r=this._make_lexer_thread(t);return this.parser.parse_interactive(r,i)}}function mi(s,t){let n;we(s,["lalr","earley","cyk"]),typeof t!="object"&&(n={lalr:["basic","contextual"],earley:["basic","dynamic","dynamic_complete"],cyk:["basic"]}[s],we(t,n,h("Parser %r does not support lexer %%r, expected one of %%s",s)))}function fi(s,t){let n,i={};for(const r of t)n=s&&s[r.name]||null,n!==null&&(i[r.name]=n);return i}class yi{constructor(t,n){this.lexer=t,this.postlexer=n}lex(t,n){let i=this.lexer.lex(t,n);return this.postlexer.process(i)}}function gi(s,t,n,i){return new ie(s)}function xi(s,t,n,i){let r=Object.fromEntries(g(t._parse_table.states).map(([o,l])=>[o,[...he(l)]])),a=n?n.always_accept:[];return new Wn({conf:s,states:r,always_accept:a})}function wi(s,t,n=null){let i=n?n.debug:!1;return new _t({parser_conf:t,debug:i})}ht.lalr=wi;class mt extends Xe{process(t){return t}always_accept=[]}class vi extends T{OPTIONS_DOC='\n **=== General Options ===**\n\n start\n The start symbol. Either a string, or a list of strings for multiple possible starts (Default: "start")\n debug\n Display debug information and extra warnings. Use only when debugging (Default: ``False``)\n When used with Earley, it generates a forest graph as "sppf.png", if \'dot\' is installed.\n transformer\n Applies the transformer to every parse tree (equivalent to applying it after the parse, but faster)\n propagate_positions\n Propagates (line, column, end_line, end_column) attributes into all tree branches.\n Accepts ``False``, ``True``, or a callable, which will filter which nodes to ignore when propagating.\n maybe_placeholders\n When ``True``, the ``[]`` operator returns ``None`` when not matched.\n When ``False``, ``[]`` behaves like the ``?`` operator, and returns no value at all.\n (default= ``True``)\n cache\n Cache the results of the Lark grammar analysis, for x2 to x3 faster loading. LALR only for now.\n\n - When ``False``, does nothing (default)\n - When ``True``, caches to a temporary file in the local directory\n - When given a string, caches to the path pointed by the string\n regex\n When True, uses the ``regex`` module instead of the stdlib ``re``.\n g_regex_flags\n Flags that are applied to all terminals (both regex and strings)\n keep_all_tokens\n Prevent the tree builder from automagically removing "punctuation" tokens (Default: ``False``)\n tree_class\n Lark will produce trees comprised of instances of this class instead of the default ``lark.Tree``.\n\n **=== Algorithm Options ===**\n\n parser\n Decides which parser engine to use. Accepts "earley" or "lalr". (Default: "earley").\n (there is also a "cyk" option for legacy)\n lexer\n Decides whether or not to use a lexer stage\n\n - "auto" (default): Choose for me based on the parser\n - "basic": Use a basic lexer\n - "contextual": Stronger lexer (only works with parser="lalr")\n - "dynamic": Flexible and powerful (only with parser="earley")\n - "dynamic_complete": Same as dynamic, but tries *every* variation of tokenizing possible.\n ambiguity\n Decides how to handle ambiguity in the parse. Only relevant if parser="earley"\n\n - "resolve": The parser will automatically choose the simplest derivation\n (it chooses consistently: greedy for tokens, non-greedy for rules)\n - "explicit": The parser will return all derivations wrapped in "_ambig" tree nodes (i.e. a forest).\n - "forest": The parser will return the root of the shared packed parse forest.\n\n **=== Misc. / Domain Specific Options ===**\n\n postlex\n Lexer post-processing (Default: ``None``) Only works with the basic and contextual lexers.\n priority\n How priorities should be evaluated - "auto", ``None``, "normal", "invert" (Default: "auto")\n lexer_callbacks\n Dictionary of callbacks for the lexer. May alter tokens during lexing. Use with caution.\n use_bytes\n Accept an input of type ``bytes`` instead of ``str``.\n edit_terminals\n A callback for editing the terminals before parse.\n import_paths\n A List of either paths or loader functions to specify from where grammars are imported\n source_path\n Override the source of from where the grammar was loaded. Useful for relative imports and unconventional grammar loading\n **=== End of Options ===**\n ';_defaults={debug:!1,keep_all_tokens:!1,tree_class:null,cache:!1,postlex:null,parser:"earley",lexer:"auto",transformer:null,start:"start",priority:"auto",ambiguity:"auto",regex:!1,propagate_positions:!1,lexer_callbacks:{},maybe_placeholders:!0,edit_terminals:null,g_regex_flags:"",use_bytes:!1,import_paths:[],source_path:null,_plugins:null};constructor(t){super();let n,i=Ke(t),r=this;for(const[a,o]of g(this._defaults))a in i?(n=bn(i,a),typeof o=="boolean"&&!["cache","use_bytes","propagate_positions"].includes(a)&&(n=et(n))):n=o,r[a]=n;if(typeof r.start=="string"&&(r.start=[r.start]),this.options=r,we(this.parser,["earley","lalr","cyk",null]),this.parser==="earley"&&this.transformer)throw new k("Cannot specify an embedded transformer when using the Earley algorithm. Please use your transformer on the resulting parse tree, or use a different algorithm (i.e. LALR)");if(Object.keys(i).length)throw new k(h("Unknown options: %s",he(i)))}serialize(t){return this.options}static deserialize(t,n){const i=this;return new i(t)}}class ft extends T{static get __serialize_fields__(){return["parser","rules","options"]}_build_lexer(t=!1){let n=this.lexer_conf;return t&&(n=R(n),n.ignore=[]),new ie(n)}_prepare_callbacks(){this._callbacks=new Map,this.options.ambiguity!=="forest"&&(this._parse_tree_builder=new li(this.rules,this.options.tree_class||En(y),this.options.propagate_positions,this.options.parser!=="lalr"&&this.options.ambiguity==="explicit",this.options.maybe_placeholders),this._callbacks=this._parse_tree_builder.create_callback(this.options.transformer)),Je(this._callbacks,fi(this.options.transformer,this.terminals))}_deserialize_lexer_conf(t,n,i){let r=at.deserialize(t.lexer_conf,n);return r.callbacks=i.lexer_callbacks||{},r.re_module=i.regex?regex:Ge,r.use_bytes=i.use_bytes,r.g_regex_flags=i.g_regex_flags||"",r.skip_validation=!0,r.postlex=i.postlex,r}_load({f:t,...n}={}){let i;fe(t)?i=t:i=pickle.load(t);let r=i.memo,a=i.data,o=zn.deserialize(r,{Rule:M,TerminalDef:te},{}),l=Ke(a.options);return Je(l,n),this.options=vi.deserialize(l,o),this.rules=a.rules.map(p=>M.deserialize(p,o)),this.source_path="<deserialized>",mi(this.options.parser,this.options.lexer),this.lexer_conf=this._deserialize_lexer_conf(a.parser,o,this.options),this.terminals=this.lexer_conf.terminals,this._prepare_callbacks(),this._terminals_dict=Object.fromEntries(this.terminals.map(p=>[p.name,p])),this.parser=di(a.parser,o,this.lexer_conf,this._callbacks,this.options),this}static _load_from_dict({data:t,memo:n,...i}={}){return me(this)._load({f:{data:t,memo:n},...i})}repr(){return h("Lark(open(%r), parser=%r, lexer=%r, ...)",this.source_path,this.options.parser,this.options.lexer)}lex(t,n=!1){let i;!("lexer"in this)||n?i=this._build_lexer(n):i=this.lexer;let r=rt.from_text(i,t).lex(null);return this.options.postlex?this.options.postlex.process(r):r}get_terminal(t){return this._terminals_dict[t]}parse_interactive(t=null,n=null){return this.parser.parse_interactive({unknown_param_0:t,start:n})}parse(t,n=null,i=null){return this.parser.parse(t,n,i)}}class yt extends q{}class gt extends mt{constructor(){super(),this.paren_level=0,this.indent_level=[0]}*handle_NL(t){if(this.paren_level>0)return;yield t;let n=ge(t.value,`
|
|
21
|
+
`,1)[1],i=xe(n," ")+xe(n," ")*this.tab_len;if(i>v(this.indent_level))this.indent_level.push(i),yield f.new_borrow_pos(this.INDENT_type,n,t);else{for(;i<v(this.indent_level);)this.indent_level.pop(),yield f.new_borrow_pos(this.DEDENT_type,n,t);if(i!==v(this.indent_level))throw new yt(h("Unexpected dedent to column %s. Expected dedent to %s",i,v(this.indent_level)))}}*_process(t){for(const n of t)n.type===this.NL_type?yield*this.handle_NL(n):yield n,this.OPEN_PAREN_types.includes(n.type)?this.paren_level+=1:this.CLOSE_PAREN_types.includes(n.type)&&(this.paren_level-=1);for(;this.indent_level.length>1;)this.indent_level.pop(),yield new f(this.DEDENT_type,"")}process(t){return this.paren_level=0,this.indent_level=[0],this._process(t)}get always_accept(){return[this.NL_type]}get NL_type(){throw new NotImplementedError}get OPEN_PAREN_types(){throw new NotImplementedError}get CLOSE_PAREN_types(){throw new NotImplementedError}get INDENT_type(){throw new NotImplementedError}get DEDENT_type(){throw new NotImplementedError}get tab_len(){throw new NotImplementedError}}class Ti extends gt{static get NL_type(){return"_NEWLINE"}get NL_type(){return this.constructor.NL_type}static get OPEN_PAREN_types(){return["LPAR","LSQB","LBRACE"]}get OPEN_PAREN_types(){return this.constructor.OPEN_PAREN_types}static get CLOSE_PAREN_types(){return["RPAR","RSQB","RBRACE"]}get CLOSE_PAREN_types(){return this.constructor.CLOSE_PAREN_types}static get INDENT_type(){return"_INDENT"}get INDENT_type(){return this.constructor.INDENT_type}static get DEDENT_type(){return"_DEDENT"}get DEDENT_type(){return this.constructor.DEDENT_type}static get tab_len(){return 8}get tab_len(){return this.constructor.tab_len}}const bi={Terminal:Ee,NonTerminal:Ie,RuleOptions:ee,PatternStr:Ne,PatternRE:qe,TerminalDef:te};var Ei={LarkError:q,ConfigurationError:k,GrammarError:Y,ParseError:An,LexError:B,UnexpectedInput:A,UnexpectedEOF:Sn,UnexpectedCharacters:D,UnexpectedToken:P,VisitError:ve,Meta:it,Tree:y,Discard:X,Transformer:Z,Transformer_InPlace:st,Transformer_NonRecursive:Dn,Transformer_InPlaceRecursive:Pn,VisitorBase:Te,Visitor:Ln,Visitor_Recursive:Cn,Interpreter:Qn,Symbol:be,Terminal:Ee,NonTerminal:Ie,RuleOptions:ee,Rule:M,Pattern:Re,PatternStr:Ne,PatternRE:qe,TerminalDef:te,Token:f,Lexer:ne,LexerConf:at,ParserConf:ot,InteractiveParser:L,ImmutableInteractiveParser:pt,PostLex:mt,Lark:ft,DedentError:yt,Indenter:gt,PythonIndenter:Ti,get_parser:vn},Ii={parser:{lexer_conf:{terminals:[{"@":0},{"@":1},{"@":2},{"@":3},{"@":4},{"@":5},{"@":6},{"@":7},{"@":8},{"@":9},{"@":10},{"@":11},{"@":12},{"@":13},{"@":14},{"@":15},{"@":16},{"@":17},{"@":18},{"@":19}],ignore:["WS"],g_regex_flags:0,use_bytes:!1,lexer_type:"contextual",__type__:"LexerConf"},parser_conf:{rules:[{"@":20},{"@":21},{"@":22},{"@":23},{"@":24},{"@":25},{"@":26},{"@":27},{"@":28},{"@":29},{"@":30},{"@":31},{"@":32},{"@":33},{"@":34},{"@":35},{"@":36},{"@":37},{"@":38},{"@":39},{"@":40},{"@":41},{"@":42},{"@":43},{"@":44},{"@":45},{"@":46},{"@":47},{"@":48}],start:["start"],parser_type:"lalr",__type__:"ParserConf"},parser:{tokens:{0:"STRING",1:"IDENTIFIER",2:"INT",3:"choice_ref",4:"$END",5:"RPAR",6:"LSQB",7:"RSQB",8:"question_id",9:"matrix_statement_id",10:"CONJUNCTION",11:"DOT",12:"top_level_expr",13:"LPAR",14:"OPERATOR",15:"TRUE",16:"__ANON_1",17:"__ANON_0",18:"__ANON_4",19:"question_choice_selected_value_comparison",20:"bool_const",21:"condition",22:"__ANON_5",23:"__ANON_3",24:"question_choice_selected",25:"selected_count_comparison",26:"FALSE",27:"question_choice_text_comparison",28:"NEGATION",29:"start",30:"__ANON_2",31:"bool_expr",32:"question_choice_text_comparison_case_insensitive",33:"choice_selection_count_comparison"},states:{0:{0:[0,25]},1:{1:[0,28],2:[0,23],3:[0,22]},2:{2:[0,21]},3:{2:[0,23],1:[0,28],3:[0,29]},4:{4:[1,{"@":44}],5:[1,{"@":44}]},5:{6:[0,19]},6:{2:[0,37]},7:{2:[0,23],3:[0,75],1:[0,28]},8:{5:[0,43]},9:{2:[0,70]},10:{5:[0,81]},11:{3:[0,50],2:[0,23],1:[0,28]},12:{7:[0,10]},13:{0:[0,34]},14:{2:[0,67]},15:{5:[1,{"@":23}],6:[1,{"@":23}]},16:{8:[0,46],9:[0,39],1:[0,82]},17:{10:[1,{"@":25}],4:[1,{"@":25}],5:[1,{"@":25}]},18:{6:[0,11],11:[0,74]},19:{2:[0,23],3:[0,53],1:[0,28]},20:{10:[0,24],4:[1,{"@":45}]},21:{10:[1,{"@":33}],4:[1,{"@":33}],5:[1,{"@":33}]},22:{7:[0,61]},23:{7:[1,{"@":20}]},24:{12:[0,77],13:[0,38]},25:{10:[1,{"@":31}],4:[1,{"@":31}],5:[1,{"@":31}]},26:{10:[1,{"@":24}],4:[1,{"@":24}],5:[1,{"@":24}]},27:{14:[0,6]},28:{7:[1,{"@":21}]},29:{7:[0,45]},30:{15:[0,33],16:[0,16],17:[0,31],18:[0,78],19:[0,41],20:[0,76],21:[0,52],22:[0,48],23:[0,72],24:[0,64],12:[0,84],25:[0,57],26:[0,36],27:[0,40],13:[0,38],28:[0,59],29:[0,42],30:[0,47],31:[0,68],32:[0,35],33:[0,54]},31:{8:[0,66],1:[0,82],9:[0,65]},32:{7:[0,8]},33:{10:[1,{"@":34}],4:[1,{"@":34}],5:[1,{"@":34}]},34:{10:[1,{"@":30}],4:[1,{"@":30}],5:[1,{"@":30}]},35:{10:[1,{"@":40}],4:[1,{"@":40}],5:[1,{"@":40}]},36:{10:[1,{"@":35}],4:[1,{"@":35}],5:[1,{"@":35}]},37:{10:[1,{"@":32}],4:[1,{"@":32}],5:[1,{"@":32}]},38:{15:[0,33],16:[0,16],17:[0,31],31:[0,62],18:[0,78],19:[0,41],20:[0,76],21:[0,52],22:[0,48],23:[0,72],24:[0,64],25:[0,57],26:[0,36],27:[0,40],28:[0,59],30:[0,47],32:[0,35],33:[0,54]},39:{5:[0,56]},40:{10:[1,{"@":39}],4:[1,{"@":39}],5:[1,{"@":39}]},41:{10:[1,{"@":38}],4:[1,{"@":38}],5:[1,{"@":38}]},42:{},43:{10:[1,{"@":27}],4:[1,{"@":27}],5:[1,{"@":27}]},44:{5:[0,17]},45:{5:[0,79]},46:{11:[0,74],5:[0,51]},47:{8:[0,71],1:[0,82]},48:{1:[0,82],8:[0,60]},49:{5:[0,26]},50:{7:[0,49]},51:{14:[0,14]},52:{10:[0,69],4:[1,{"@":43}],5:[1,{"@":43}]},53:{7:[0,44]},54:{10:[1,{"@":42}],4:[1,{"@":42}],5:[1,{"@":42}]},55:{2:[0,23],1:[0,28],3:[0,12]},56:{14:[0,9]},57:{10:[1,{"@":41}],4:[1,{"@":41}],5:[1,{"@":41}]},58:{6:[0,1]},59:{17:[0,85]},60:{6:[0,3]},61:{5:[0,73]},62:{5:[0,20]},63:{5:[0,80]},64:{10:[1,{"@":37}],4:[1,{"@":37}],5:[1,{"@":37}]},65:{6:[0,83]},66:{11:[0,74],6:[0,55]},67:{10:[1,{"@":28}],4:[1,{"@":28}],5:[1,{"@":28}]},68:{4:[1,{"@":48}]},69:{15:[0,33],16:[0,16],17:[0,31],18:[0,78],19:[0,41],20:[0,76],21:[0,52],22:[0,48],23:[0,72],24:[0,64],25:[0,57],26:[0,36],27:[0,40],28:[0,59],30:[0,47],32:[0,35],31:[0,4],33:[0,54]},70:{10:[1,{"@":29}],4:[1,{"@":29}],5:[1,{"@":29}]},71:{6:[0,7]},72:{8:[0,58],1:[0,82]},73:{14:[0,0]},74:{1:[0,15]},75:{7:[0,63]},76:{10:[1,{"@":36}],4:[1,{"@":36}],5:[1,{"@":36}]},77:{4:[1,{"@":46}]},78:{1:[0,82],8:[0,86]},79:{14:[0,2]},80:{14:[0,13]},81:{10:[1,{"@":26}],4:[1,{"@":26}],5:[1,{"@":26}]},82:{5:[1,{"@":22}],11:[1,{"@":22}],6:[1,{"@":22}]},83:{3:[0,32],2:[0,23],1:[0,28]},84:{4:[1,{"@":47}]},85:{8:[0,18],9:[0,5],1:[0,82]},86:{5:[0,27]}},start_states:{start:30},end_states:{start:42}},__type__:"ParsingFrontend"},rules:[{"@":20},{"@":21},{"@":22},{"@":23},{"@":24},{"@":25},{"@":26},{"@":27},{"@":28},{"@":29},{"@":30},{"@":31},{"@":32},{"@":33},{"@":34},{"@":35},{"@":36},{"@":37},{"@":38},{"@":39},{"@":40},{"@":41},{"@":42},{"@":43},{"@":44},{"@":45},{"@":46},{"@":47},{"@":48}],options:{debug:!1,keep_all_tokens:!1,tree_class:null,cache:!1,postlex:null,parser:"lalr",lexer:"contextual",transformer:null,start:["start"],priority:"normal",ambiguity:"auto",regex:!1,propagate_positions:!1,lexer_callbacks:{},maybe_placeholders:!1,edit_terminals:null,g_regex_flags:0,use_bytes:!1,import_paths:[],source_path:null,_plugins:{}},__type__:"Lark"},Ri={0:{name:"WS",pattern:{value:`(?:[ \f\r
|
|
22
|
+
])+`,flags:[],raw:null,_width:[1,4294967295],__type__:"PatternRE"},priority:0,__type__:"TerminalDef"},1:{name:"IDENTIFIER",pattern:{value:"[a-zA-Z][a-zA-Z0-9_]*[a-zA-Z0-9]",flags:[],raw:"/[a-zA-Z][a-zA-Z0-9_]*[a-zA-Z0-9]/",_width:[2,4294967295],__type__:"PatternRE"},priority:0,__type__:"TerminalDef"},2:{name:"INT",pattern:{value:"-?[0-9]+",flags:[],raw:"/-?[0-9]+/",_width:[1,4294967295],__type__:"PatternRE"},priority:0,__type__:"TerminalDef"},3:{name:"STRING",pattern:{value:`(?:'[^\\']*'|"[^"]*")`,flags:[],raw:null,_width:[2,4294967295],__type__:"PatternRE"},priority:0,__type__:"TerminalDef"},4:{name:"OPERATOR",pattern:{value:"(?:regex_matches|not_contains|contains|==|!=|<=|>=|<|>)",flags:[],raw:null,_width:[1,13],__type__:"PatternRE"},priority:0,__type__:"TerminalDef"},5:{name:"CONJUNCTION",pattern:{value:"(?:and|or)",flags:[],raw:null,_width:[2,3],__type__:"PatternRE"},priority:0,__type__:"TerminalDef"},6:{name:"NEGATION",pattern:{value:"!",flags:[],raw:'"!"',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},7:{name:"TRUE",pattern:{value:"true",flags:[],raw:'"true"',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},8:{name:"FALSE",pattern:{value:"false",flags:[],raw:'"false"',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},9:{name:"DOT",pattern:{value:".",flags:[],raw:'"."',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},10:{name:"__ANON_0",pattern:{value:"selected(",flags:[],raw:'"selected("',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},11:{name:"LSQB",pattern:{value:"[",flags:[],raw:'"["',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},12:{name:"RSQB",pattern:{value:"]",flags:[],raw:'"]"',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},13:{name:"RPAR",pattern:{value:")",flags:[],raw:'")"',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},14:{name:"__ANON_1",pattern:{value:"selected_value(",flags:[],raw:'"selected_value("',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},15:{name:"__ANON_2",pattern:{value:"text(",flags:[],raw:'"text("',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},16:{name:"__ANON_3",pattern:{value:"text_ignore_case(",flags:[],raw:'"text_ignore_case("',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},17:{name:"__ANON_4",pattern:{value:"count_selected(",flags:[],raw:'"count_selected("',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},18:{name:"__ANON_5",pattern:{value:"count_choice_selections(",flags:[],raw:'"count_choice_selections("',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},19:{name:"LPAR",pattern:{value:"(",flags:[],raw:'"("',__type__:"PatternStr"},priority:0,__type__:"TerminalDef"},20:{origin:{name:"choice_ref",__type__:"NonTerminal"},expansion:[{name:"INT",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},21:{origin:{name:"choice_ref",__type__:"NonTerminal"},expansion:[{name:"IDENTIFIER",filter_out:!1,__type__:"Terminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},22:{origin:{name:"question_id",__type__:"NonTerminal"},expansion:[{name:"IDENTIFIER",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},23:{origin:{name:"matrix_statement_id",__type__:"NonTerminal"},expansion:[{name:"question_id",__type__:"NonTerminal"},{name:"DOT",filter_out:!0,__type__:"Terminal"},{name:"IDENTIFIER",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},24:{origin:{name:"question_choice_selected",__type__:"NonTerminal"},expansion:[{name:"NEGATION",filter_out:!1,__type__:"Terminal"},{name:"__ANON_0",filter_out:!0,__type__:"Terminal"},{name:"question_id",__type__:"NonTerminal"},{name:"LSQB",filter_out:!0,__type__:"Terminal"},{name:"choice_ref",__type__:"NonTerminal"},{name:"RSQB",filter_out:!0,__type__:"Terminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},25:{origin:{name:"question_choice_selected",__type__:"NonTerminal"},expansion:[{name:"NEGATION",filter_out:!1,__type__:"Terminal"},{name:"__ANON_0",filter_out:!0,__type__:"Terminal"},{name:"matrix_statement_id",__type__:"NonTerminal"},{name:"LSQB",filter_out:!0,__type__:"Terminal"},{name:"choice_ref",__type__:"NonTerminal"},{name:"RSQB",filter_out:!0,__type__:"Terminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},26:{origin:{name:"question_choice_selected",__type__:"NonTerminal"},expansion:[{name:"__ANON_0",filter_out:!0,__type__:"Terminal"},{name:"question_id",__type__:"NonTerminal"},{name:"LSQB",filter_out:!0,__type__:"Terminal"},{name:"choice_ref",__type__:"NonTerminal"},{name:"RSQB",filter_out:!0,__type__:"Terminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"}],order:2,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},27:{origin:{name:"question_choice_selected",__type__:"NonTerminal"},expansion:[{name:"__ANON_0",filter_out:!0,__type__:"Terminal"},{name:"matrix_statement_id",__type__:"NonTerminal"},{name:"LSQB",filter_out:!0,__type__:"Terminal"},{name:"choice_ref",__type__:"NonTerminal"},{name:"RSQB",filter_out:!0,__type__:"Terminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"}],order:3,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},28:{origin:{name:"question_choice_selected_value_comparison",__type__:"NonTerminal"},expansion:[{name:"__ANON_1",filter_out:!0,__type__:"Terminal"},{name:"question_id",__type__:"NonTerminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"},{name:"OPERATOR",filter_out:!1,__type__:"Terminal"},{name:"INT",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},29:{origin:{name:"question_choice_selected_value_comparison",__type__:"NonTerminal"},expansion:[{name:"__ANON_1",filter_out:!0,__type__:"Terminal"},{name:"matrix_statement_id",__type__:"NonTerminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"},{name:"OPERATOR",filter_out:!1,__type__:"Terminal"},{name:"INT",filter_out:!1,__type__:"Terminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},30:{origin:{name:"question_choice_text_comparison",__type__:"NonTerminal"},expansion:[{name:"__ANON_2",filter_out:!0,__type__:"Terminal"},{name:"question_id",__type__:"NonTerminal"},{name:"LSQB",filter_out:!0,__type__:"Terminal"},{name:"choice_ref",__type__:"NonTerminal"},{name:"RSQB",filter_out:!0,__type__:"Terminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"},{name:"OPERATOR",filter_out:!1,__type__:"Terminal"},{name:"STRING",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},31:{origin:{name:"question_choice_text_comparison_case_insensitive",__type__:"NonTerminal"},expansion:[{name:"__ANON_3",filter_out:!0,__type__:"Terminal"},{name:"question_id",__type__:"NonTerminal"},{name:"LSQB",filter_out:!0,__type__:"Terminal"},{name:"choice_ref",__type__:"NonTerminal"},{name:"RSQB",filter_out:!0,__type__:"Terminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"},{name:"OPERATOR",filter_out:!1,__type__:"Terminal"},{name:"STRING",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},32:{origin:{name:"selected_count_comparison",__type__:"NonTerminal"},expansion:[{name:"__ANON_4",filter_out:!0,__type__:"Terminal"},{name:"question_id",__type__:"NonTerminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"},{name:"OPERATOR",filter_out:!1,__type__:"Terminal"},{name:"INT",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},33:{origin:{name:"choice_selection_count_comparison",__type__:"NonTerminal"},expansion:[{name:"__ANON_5",filter_out:!0,__type__:"Terminal"},{name:"question_id",__type__:"NonTerminal"},{name:"LSQB",filter_out:!0,__type__:"Terminal"},{name:"choice_ref",__type__:"NonTerminal"},{name:"RSQB",filter_out:!0,__type__:"Terminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"},{name:"OPERATOR",filter_out:!1,__type__:"Terminal"},{name:"INT",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},34:{origin:{name:"bool_const",__type__:"NonTerminal"},expansion:[{name:"TRUE",filter_out:!1,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},35:{origin:{name:"bool_const",__type__:"NonTerminal"},expansion:[{name:"FALSE",filter_out:!1,__type__:"Terminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},36:{origin:{name:"condition",__type__:"NonTerminal"},expansion:[{name:"bool_const",__type__:"NonTerminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},37:{origin:{name:"condition",__type__:"NonTerminal"},expansion:[{name:"question_choice_selected",__type__:"NonTerminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},38:{origin:{name:"condition",__type__:"NonTerminal"},expansion:[{name:"question_choice_selected_value_comparison",__type__:"NonTerminal"}],order:2,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},39:{origin:{name:"condition",__type__:"NonTerminal"},expansion:[{name:"question_choice_text_comparison",__type__:"NonTerminal"}],order:3,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},40:{origin:{name:"condition",__type__:"NonTerminal"},expansion:[{name:"question_choice_text_comparison_case_insensitive",__type__:"NonTerminal"}],order:4,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},41:{origin:{name:"condition",__type__:"NonTerminal"},expansion:[{name:"selected_count_comparison",__type__:"NonTerminal"}],order:5,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},42:{origin:{name:"condition",__type__:"NonTerminal"},expansion:[{name:"choice_selection_count_comparison",__type__:"NonTerminal"}],order:6,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},43:{origin:{name:"bool_expr",__type__:"NonTerminal"},expansion:[{name:"condition",__type__:"NonTerminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},44:{origin:{name:"bool_expr",__type__:"NonTerminal"},expansion:[{name:"condition",__type__:"NonTerminal"},{name:"CONJUNCTION",filter_out:!1,__type__:"Terminal"},{name:"bool_expr",__type__:"NonTerminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},45:{origin:{name:"top_level_expr",__type__:"NonTerminal"},expansion:[{name:"LPAR",filter_out:!0,__type__:"Terminal"},{name:"bool_expr",__type__:"NonTerminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},46:{origin:{name:"top_level_expr",__type__:"NonTerminal"},expansion:[{name:"LPAR",filter_out:!0,__type__:"Terminal"},{name:"bool_expr",__type__:"NonTerminal"},{name:"RPAR",filter_out:!0,__type__:"Terminal"},{name:"CONJUNCTION",filter_out:!1,__type__:"Terminal"},{name:"top_level_expr",__type__:"NonTerminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},47:{origin:{name:"start",__type__:"NonTerminal"},expansion:[{name:"top_level_expr",__type__:"NonTerminal"}],order:0,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"},48:{origin:{name:"start",__type__:"NonTerminal"},expansion:[{name:"bool_expr",__type__:"NonTerminal"}],order:1,alias:null,options:{keep_all_tokens:!1,expand1:!1,priority:null,template_source:null,empty_indices:[],__type__:"RuleOptions"},__type__:"Rule"}};const Ae=/\$\{q\:(?<locator>[\-a-zA-Z0-9_\/\(\)]+)\}/g,xt=s=>s.choiceId??s.choiceValue??s.text;class se{questions=new Map;responsesByQuestion=new Map;responsesByQuestionStatement=new Map;surveyResponseId;forExport;evaluationCache=new Map;constructor(t,n=[],i="",r=!1){this.questions=new Map((t?de(t):[]).filter(a=>a.id).map(a=>[pe(a.id),a])),n.filter(a=>a.singleAnswer||a.multipleAnswers).forEach(a=>{const o=pe(a.questionId);this.responsesByQuestion.set(o,[...this.responsesByQuestion.get(o)||[],a]),a.statementId&&this.responsesByQuestionStatement.set(`${o}.${a.statementId}`,a)}),this.surveyResponseId=i,this.forExport=r}getQuestionAnswers(t,n){let i;if(n){const r=this.responsesByQuestionStatement.get(`${t}.${n}`);i=r===void 0?[]:[r]}else i=this.responsesByQuestion.get(t)||[];return i.flatMap(r=>{const{multipleAnswers:a,singleAnswer:o}=r;return a||[o]})}#e(t,n,i){return this.getQuestionAnswers(t,n).filter(r=>typeof i>"u"||i===null||xt(r)===i)}#t(t,n){if(t.textInput&&["forced","optional"].includes(t.textInput)){const i=this.textEntry({questionId:n.questionId,choice:t.id||t.value});return i.trim()?{...t,display:i}:t.textInput==="forced"?null:t}return t}evaluateDisplayLogic(t){if(t&&!this.forExport)try{const n=this.evaluationCache.get(t);if(n!==void 0)return n;const i=Se(t,this);return this.evaluationCache.set(t,i),i}catch(n){return console.error(n),!1}return!0}evaluateDynamicExpression(t,n){const i=this.questions.get(t.questionId);if(!i)return[];const r=this.getQuestionChoicesFlattened(i),a=r.filter(_=>this.isSelected({questionId:t.questionId,choice:_.id||_.value})),o=this.getQuestionStatementsFlattened(i),l=_=>n==="choices"?_:{..._,id:_.id||_.value||_.display},p=_=>({id:_.id,display:_.display,value:_.value});let c=[];switch(t.expression){case w.ALL:c=r.map(l);break;case w.ALL_ENTERED_TEXT:c=r.map(_=>this.#t(_,t)).filter(_=>!!_).map(_=>l(_));break;case w.SELECTED:c=a;break;case w.SELECTED_ENTERED_TEXT:c=a.map(_=>this.#t(_,t)).filter(_=>!!_).map(_=>l(_));break;case w.NOT_SELECTED:c=r.filter(_=>!this.isSelected({questionId:t.questionId,choice:_.id||_.value})).map(l);break;case w.FOR_MATRIX_CHOICE:c=o.filter(_=>this.isSelected({questionId:t.questionId,statementId:_.id,choice:t.identifier}));break;case w.UNSELECTED_FOR_MATRIX_CHOICE:c=o.filter(_=>!this.isSelected({questionId:t.questionId,statementId:_.id,choice:t.identifier}));break;default:c=[]}return this.forExport&&(c=t.expression===w.FOR_MATRIX_CHOICE||t.expression===w.UNSELECTED_FOR_MATRIX_CHOICE?o:r.map(l)),c.map(p)}isSelected(t){return!!this.#e(t.questionId,t.statementId,t.choice).length}countSelected(t){return this.getQuestionAnswers(t).length}selectedValue(t){const n=this.getQuestionAnswers(typeof t=="string"?t:t.questionId,typeof t=="string"?void 0:t.statementId);return n.length?xt(n[0]):null}countChoiceSelections(t,n){return this.#e(t,null,n).length}textEntry(t){return this.#e(t.questionId,t.statementId,t.choice).map(n=>n.text).filter(n=>n).join(", ")}getQuestionText(t){if(this.forExport)return t.text;let n=t.text;return n=n.replaceAll(Ae,(i,r)=>{if(r&&je(r)){const a=S(r);return this.evaluateDynamicExpression(a,"choices").map(o=>o.display).join(", ")}return i}),n}getQuestionChoices(t){const n=(t.choices??[]).filter(i=>this.evaluateDisplayLogic(i.displayLogic));if(t.dynamicChoices){const i=S(t.dynamicChoices),r=this.evaluateDynamicExpression(i,"choices");n.push(...r)}return t.type===I.MatrixSingle||t.type===I.MatrixMulti?n:this.applyRandomization(n,t.id,i=>`${i.id??i.value}`,t.randomization)}getQuestionChoiceGroups(t){const n=(t.choiceGroups?.filter(i=>this.evaluateDisplayLogic(i.displayLogic))||[]).map(i=>({...i,choices:this.applyRandomization(i.choices.filter(r=>this.evaluateDisplayLogic(r.displayLogic)),t.id,r=>`${r.id??r.value}`,i.randomization)})).filter(i=>!!i.choices.length);return this.applyRandomization(n,t.id,i=>i.id,t.randomization)}getQuestionStatements(t){const n=(t.statements??[]).filter(i=>this.evaluateDisplayLogic(i.displayLogic));if(t.dynamicStatements){const i=S(t.dynamicStatements),r=this.evaluateDynamicExpression(i,"statements");n.push(...r)}return this.applyRandomization(n,t.id,i=>i.id,t.randomization)}getQuestionStatementGroups(t){const n=(t.statementGroups?.filter(i=>this.evaluateDisplayLogic(i.displayLogic))||[]).map(i=>({...i,statements:this.applyRandomization(i.statements.filter(r=>this.evaluateDisplayLogic(r.displayLogic)),t.id,r=>r.id,i.randomization)})).filter(i=>!!i.statements.length);return this.applyRandomization(n,t.id,i=>i.id,t.randomization)}getQuestionChoicesFlattened(t){return[...this.getQuestionChoices(t),...this.getQuestionChoiceGroups(t).flatMap(n=>n.choices)]}getQuestionStatementsFlattened(t){return[...this.getQuestionStatements(t),...this.getQuestionStatementGroups(t).flatMap(n=>n.statements)]}applyRandomization(t,n,i,r){if(!r||this.forExport)return t;const a=new Map(t.map(u=>[i(u),u])),o=[...a.keys()],l=new Set(o),p=(r.order??["$"]).filter(u=>u==="$"||l.has(u)),c=o.filter(u=>!p.includes(u)).map(u=>({weight:this.keyHash(n,u),key:u}));c.sort((u,b)=>u.weight.localeCompare(b.weight));const _=r.total??o.length,d=Math.min(_-(p.length-1),c.length),m=[];return p.forEach(u=>{u==="$"?m.push(...c.slice(0,d).map(b=>b.key)):m.push(u)}),m.map(u=>a.get(u))}keyHash(t,n){const i=`${t}.${this.surveyResponseId}.${n}`;return Bt.createHash("sha256").update(i).digest("hex")}}function wt(s){if(s.length===1)return s[0];const t=s[1].value;return t==="or"?s[0]||s[2]:t==="and"?s[0]&&s[2]:!1}function re(s,t,n){switch(t){case"==":return s===n;case"!=":return s!==n;case"<=":return s<=n;case">=":return s>=n;case"<":return s<n;case">":return s>n;default:return!1}}function vt(s,t,n,i){const r=i?s.toLowerCase():s,a=i?n.toLowerCase():n;switch(t){case"contains":return r.includes(a);case"not_contains":return!r.includes(a);case"regex_matches":try{return new RegExp(n).test(r)}catch{return!1}default:return re(r,t,a)}}function Ni(s,t){return s.length>0&&s[0].hasOwnProperty("type")&&s[0].type==="NEGATION"?!t(s.slice(1)):t(s)}function qi(s){if(!["INT","IDENTIFIER"].includes(s.type))throw new SyntaxError(`Invalid token type: ${s.type}; expected IDENTIFIER or INT`);return E(s)}function E(s){switch(s.type){case"IDENTIFIER":return s.value;case"INT":return parseInt(s.value,10);case"STRING":{const t=s.value.match(/(?:'(?<single>[^\']*)')|(?:"(?<double>[^\"]*)")/),n=t?.groups?.double||t?.groups?.single;return Ft.default(n),n}case"OPERATOR":return s.value;case"TRUE":return!0;case"FALSE":return!1;default:throw new SyntaxError(`Invalid token type: ${s.type}`)}}function Se(s,t){const n={bool_const:i=>i[0].value==="true",condition:i=>i[0],bool_expr:wt,top_level_expr:wt,start:i=>i[0],question_id:i=>i[0].value,choice_ref:i=>qi(i[0]),matrix_statement_id:i=>({questionId:i[0],statementId:i[1].value}),question_choice_selected:i=>Ni(i,r=>t.isSelected({questionId:typeof r[0]=="string"?r[0]:r[0].questionId,statementId:typeof r[0]=="string"?void 0:r[0].statementId,choice:r[1]})),question_choice_selected_value_comparison:i=>{const r=t.selectedValue(i[0]);return r!==null&&re(r,E(i[1]),E(i[2]))},question_choice_text_comparison:i=>vt(t.textEntry({questionId:i[0],choice:i[1]}),E(i[2]),E(i[3]),!1),question_choice_text_comparison_case_insensitive:i=>vt(t.textEntry({questionId:i[0],choice:i[1]}),E(i[2]),E(i[3]),!0),selected_count_comparison:i=>re(t.countSelected(i[0]),E(i[1]),E(i[2])),choice_selection_count_comparison:i=>re(t.countChoiceSelections(i[0],i[1]),E(i[2]),E(i[3]))};return Ei.get_parser({transformer:n}).parse(s)}const Tt=new jt.default({allowUnionTypes:!0});Ut.default(Tt);const bt=Tt.compile(Ce);let G=class extends Error{};class O extends Error{}class ae extends Error{}class z extends Error{}class ki extends Error{}class Oi{seenQuestions=new Set;seenMultiQuestions=new Set;seenQuestionStatements=new Map;seenQuestionChoices=new Map;seenTextChoices=new Map;evaluator={};constructor(){this.evaluator.isSelected=t=>(this.validateReference(t),!1),this.evaluator.countSelected=t=>(this.validateReference({questionId:t}),0),this.evaluator.selectedValue=t=>(this.validateReference({questionId:typeof t=="string"?t:t.questionId,statementId:typeof t=="string"?void 0:t.statementId,expectMulti:!1}),0),this.evaluator.countChoiceSelections=(t,n)=>(this.validateReference({questionId:t,choice:n}),0),this.evaluator.textEntry=t=>(this.validateReference({...t,expectText:!0}),"")}validateReference=t=>{if(!this.seenQuestions.has(t.questionId))throw new G(`Invalid question: ${t.questionId}`);if(t.statementId!==void 0&&!this.seenQuestionStatements.get(t.questionId)?.has(t.statementId))throw new G(`Invalid statement: ${t.questionId}.${t.statementId}`);if(t.choice!==void 0&&!this.seenQuestionChoices.get(t.questionId)?.has(t.choice))throw new G(`Invalid choice: ${t.questionId}[${t.choice}]`);if(t.choice!==void 0&&t.expectText===!0&&!this.seenTextChoices.get(t.questionId)?.has(t.choice))throw new G(`Invalid text reference: ${t.questionId}[${t.choice}]`);if(typeof t.expectMulti=="boolean"&&t.expectMulti&&!this.seenMultiQuestions.has(t.questionId))throw new O(`Invalid question reference: ${t.questionId}. Expected a multi-answer question.`);if(typeof t.expectMulti=="boolean"&&!t.expectMulti&&this.seenMultiQuestions.has(t.questionId))throw new O(`Invalid question reference: ${t.questionId}. Expected a non-multi-answer question.`)}}const C=(s,t,n)=>{if(n)try{Se(n,s.evaluator)}catch(i){throw i instanceof G||i instanceof O||i instanceof z?i:new Error(`Syntax error parsing display logic at ${t}: ${n}`)}},Ai=(s,t)=>{[...t.matchAll(Ae)].forEach(n=>{const i=S(n.groups.locator);if(!s.seenQuestions.has(i.questionId))throw new O(`Invalid question referenced in locator expression: ${i.questionId}/${i.expression}`);if(i.identifier&&!s.seenQuestionChoices.get(i.questionId)?.has(i.identifier))throw new O(`Invalid question choice referenced in locator expression: ${i.questionId}/${i.expression}(${i.identifier})`)})},Q=(s,t,n)=>{if(n){const i=new Set(t);if(n.order){const r=n.order.split(" "),a=r.filter(o=>o==="$").length;if(a===0)throw new ae(`Wildcard $ is missing in randomization order at ${s.id}`);if(a>1)throw new ae(`Wildcard $ occurred multiples times in randomization order at ${s.id}`);if(r.forEach(o=>{if(o!=="$"&&!i.has(o))throw new ae(`Unknown id ${o} in randomization ordering at ${s.id}`)}),n.total!==void 0&&n.total<r.length)throw new ae(`Total value in randomization is too small at ${s.id}`)}}},Et=(s,t)=>{const n=[w.FOR_MATRIX_CHOICE,w.UNSELECTED_FOR_MATRIX_CHOICE].includes(s.expression),i=(n?t.seenQuestionStatements:t.seenQuestionChoices).get(s.questionId);if(i===void 0)throw new O(`Invalid question referenced in locator expression: ${s.questionId}/${s.expression}`);if(n){const r=t.seenQuestionChoices.get(s.questionId);if(!s.identifier||!r?.has(s.identifier))throw new O(`Invalid choice referenced in locator expression: ${s.questionId}/${s.expression}(${s.identifier})`)}return i},Si=(s,t)=>{if(Ai(t,s.text),s.id!==void 0){if(C(t,s.id,s.display_logic),s.statements?.forEach(i=>{C(t,`${s.id}.${i.id}`,i.display_logic)}),s.choices?.forEach(i=>{C(t,`${s.id}[${i.id||i.value}]`,i.display_logic)}),s.type==="matrix-multi"||s.type==="matrix-single"?s.statement_groups?Q(s,s.statement_groups.map(i=>i.id),s.randomization):Q(s,s.statements?.map(i=>i.id)??[],s.randomization):s.choice_groups?Q(s,s.choice_groups.map(i=>i.id),s.randomization):Q(s,s.choices?.map(i=>`${i.id||i.value}`)??[],s.randomization),s.statement_groups?.forEach(i=>{i.statements.forEach(r=>{C(t,`${s.id}.${r.id}`,r.display_logic)}),Q(s,i.statements.map(r=>r.id),i.randomization)}),s.choice_groups?.forEach(i=>{i.choices.forEach(r=>{C(t,`${s.id}[${r.id||r.value}]`,r.display_logic)}),Q(s,i.choices.map(r=>`${r.id||r.value}`),i.randomization)}),t.seenQuestions.has(s.id))throw new z(`Duplicate question id: ${s.id}`);if(t.seenQuestions.add(s.id),s.type&&["matrix-multi","mc-multi"].includes(s.type)&&t.seenMultiQuestions.add(s.id),s.statements||s.dynamic_statements){const i=new Set;if(t.seenQuestionStatements.set(s.id,i),s.statements?.forEach(r=>{if(i.has(r.id))throw new z(`Duplicate statement id: ${s.id}.${r.id}`);i.add(r.id)}),s.dynamic_statements){const r=S(s.dynamic_statements);Et(r,t).forEach(a=>{if(typeof a=="number")throw new O(`Dynamic statement in question ${s.id} refers to choices with values`);if(i.has(a))throw new z(`Duplicate statement ${a} via dynamic statements in question ${s.id}`);i.add(a)})}}const n=s.choices??[];if(s.choice_groups){if(new Set(s.choice_groups.map(i=>i.id)).size!==s.choice_groups.length)throw new z(`Choice groups must have a unique id in question ${s.id}`);s.choice_groups.forEach(i=>n.push(...i.choices))}if(n||s.dynamic_choices){const i=new Set;t.seenQuestionChoices.set(s.id,i);const r=new Set;if(t.seenTextChoices.set(s.id,r),n.forEach(a=>{const o=a.id??a.value;if(i.has(o))throw new z(`Duplicate choice: ${s.id}[${o}]`);i.add(o),a.text_input&&a.text_input!=="no"&&r.add(o)}),s.dynamic_choices){const a=S(s.dynamic_choices);Et(a,t).forEach(o=>{if(i.has(o))throw new z(`Duplicate choice ${o} via dynamic choices in ${s.id}`);i.add(o)}),t.seenTextChoices.get(a.questionId)?.forEach(o=>r.add(o))}if(new Set([...i].map(a=>typeof a)).size>=2)throw new ki("All choices in a question must either all have id's or all have values")}}},$i=s=>{if(!bt(s))throw new Error(`Invalid template: ${s.template.id}. Reason: ${JSON.stringify(bt.errors,null,4)}`);Qe(s);const t=new Oi;s.sections.forEach(n=>{C(t,n.id,n.display_logic),n.pages.forEach(i=>{i.questions?.forEach(r=>{Si(r,t)})})})};function It(s,t){const n=structuredClone(s);return{...n,sections:n.sections.map(i=>({id:i.id,name:i.name,hideProgressBar:i.hideProgressBar,pages:t.evaluateDisplayLogic(i.displayLogic)?i.pages.map(r=>({...r,questions:zi(r.questions,t)})).filter(r=>r.questions.length):[]})).filter(i=>i.pages.length)}}function zi(s,t){return s.filter(n=>t.evaluateDisplayLogic(n.displayLogic)).map(n=>({...n,text:t.getQuestionText(n),statements:t.getQuestionStatements(n),choices:t.getQuestionChoices(n),statementGroups:t.getQuestionStatementGroups(n),choiceGroups:t.getQuestionChoiceGroups(n),randomization:void 0}))}const Rt=s=>!!s?.singleAnswer||!!s?.multipleAnswers&&s?.multipleAnswers.length>0,Nt=(s,t)=>{let n=!1,i=t,r=new se(s,i);const a=p=>c=>{const _=p.includes(c.questionId);return _&&(n=!0),!_},o=p=>c=>{const _=!c.statementId||p.includes(c.statementId);return _||(n=!0),_},l=p=>c=>{if(c.singleAnswer){const d=!!c.singleAnswer.text||p.includes(c.singleAnswer.choiceId||c.singleAnswer.choiceValue);return d||(n=!0),{...c,singleAnswer:d?c.singleAnswer:void 0}}const _=c.multipleAnswers?.filter(d=>!!d.text||p.includes(d.choiceId||d.choiceValue));return _&&_.length<c.multipleAnswers.length&&(n=!0),{...c,multipleAnswers:_}};for(const p of s.sections){if(!r.evaluateDisplayLogic(p.displayLogic)){const c=p.pages.flatMap(_=>_.questions).map(_=>_.id);i=i.filter(a(c)),n&&(n=!1,r=new se(s,i));continue}for(const c of p.pages)for(const _ of c.questions){if(!r.evaluateDisplayLogic(_.displayLogic))i=i.filter(a([_.id]));else{const d=r.getQuestionStatementsFlattened(_).map(x=>x.id),m=r.getQuestionChoicesFlattened(_).map(x=>x.id||x.value),u=o(d),b=l(m);i=i.filter(x=>x.questionId!==_.id||u(x)),i=i.map(x=>x.questionId!==_.id?x:b(x))}n&&(n=!1,r=new se(s,i))}}return i},qt=(s,t)=>t?`${s}.${t}`:s,Di=(s,t,n,i)=>{if(!t.singleAnswer)return i?.warn("Response validation failed: No SingleAnswer provided in single answer question.",{surveyResponseId:n.surveyResponseId,questionId:t.questionId}),!1;const r=new Set(n.getQuestionChoicesFlattened(s).map(o=>o.id??o.value)),a=t.singleAnswer.choiceId??t.singleAnswer.choiceValue;return r.has(a)?!0:(i?.warn("Response validation failed: Selected choice in single answer question not available",{surveyResponseId:n.surveyResponseId,questionId:s.id,choiceKey:a}),!1)},Pi=(s,t,n,i)=>{if(!t.multipleAnswers)return i?.warn("Response validation failed: No MultipleAnswer provided in multi answer question",{surveyResponseId:n.surveyResponseId,questionId:t.questionId}),!1;const r=new Set(n.getQuestionChoicesFlattened(s).map(o=>o.id??o.value));let a=!1;return t.multipleAnswers.forEach(o=>{const l=o.choiceId??o.choiceValue;r.has(l)||(i?.warn("Response validation failed: Selected choice in multi answer question not available",{surveyResponseId:n.surveyResponseId,questionId:s.id,choiceKey:l}),a=!0)}),!a},Li=(s,t,n)=>s.singleAnswer?.text?!0:(n?.warn("Response validation failed: No text provided",{surveyResponseId:t.surveyResponseId,questionId:s.questionId}),!1);function kt(s,t,n,i){if(!Rt(t))return!0;switch(ue(s.type)){case I.McSingle:case I.MatrixSingle:return Di(s,t,n,i);case I.McMulti:case I.MatrixMulti:return Pi(s,t,n,i);case I.TextSingle:case I.TextMulti:return Li(t,n,i);default:return i?.warn("Response validation failed: Unsupported question type",{questionId:s.id,questionType:s.type,surveyResponseId:n.surveyResponseId}),!1}}function Ci(s,t,n,i){const r={templateId:s.id,surveyResponseId:n.surveyResponseId};i?.debug("Validating response...",{questionResponses:t,...r});const a=It(s,n),o=de(a),l=Nt(a,t);if(new Set(l.map(_=>qt(_.questionId,_.statementId))).size<l.length)return i?.warn("Response validation failed: Duplicate question/statement ID(s) in the response.",{relevantQuestionResponses:l,...r}),!1;const p=Object.fromEntries(o.filter(_=>_.id).map(_=>[_.id,_])),c=new Map;for(const _ of l){const d=p[_.questionId];if(!d)return i?.warn("Response validation failed: Response provided to a question that's not in the template",{questionId:_.questionId,...r}),!1;let m=c.get(_.questionId);if(m===void 0&&(m=new Map(n.getQuestionStatementsFlattened(d).map(u=>[u.id,u])),c.set(_.questionId,m)),_.statementId){if(!m||!m.size)return i?.warn("Response validation failed: Response provided to a statement even to the question has no statements",{questionId:_.questionId,statementId:_.statementId,...r}),!1;if(!m.get(_.statementId))return i?.warn("Response validation failed: Response provided to an invalid question statement",{questionId:_.questionId,statementId:_.statementId,...r}),!1}else if(m&&m.size)return i?.warn("Response validation failed; Response provided to a question with statements but not statement provided.",{questionId:_.questionId,statementId:_.statementId,...r}),!1;if(!kt(d,_,n,i))return!1}return!0}const Qi=Ce,Mi="pulse_default_alpha",ji={allPermissions:Gt,SURVEY_RESOURCE_TYPE:Zt,surveyAdministerPermission:Pe};exports.DEFAULT_TEMPLATE_ID=Mi,exports.LOCATOR_EXPRESSION=w,exports.QUESTION_TEXT_LOCATOR_PATTERN=Ae,exports.TemplateContextEvaluator=se,exports.evaluateExpression=Se,exports.evaluateTemplateNode=It,exports.extractQuestionNodes=de,exports.getExperimentalOptionalBoolean=Vt,exports.getExperimentalOptionalString=Wt,exports.getQualifiedQuestionId=Fe,exports.getQuestionTypeEnum=ue,exports.getRandomizationTypeEnum=Ue,exports.getRawQuestionId=pe,exports.getRelevantQuestionResponses=Nt,exports.getTemplateNode=fn,exports.hasAnswer=Rt,exports.interpolateMacros=_e,exports.interpolateTemplate=Qe,exports.parseLocator=S,exports.permissions=ji,exports.polyfillStructuredClone=Xt,exports.responseRef=qt,exports.templateSchema=Qi,exports.transformCase=W,exports.validateLocator=je,exports.validateQuestionResponse=kt,exports.validateResponse=Ci,exports.validateTemplate=$i;
|
|
23
23
|
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{transformCase as
|
|
1
|
+
import{transformCase as i}from"../transformCase.esm.js";function c(e){const o=structuredClone(e);return{...o,...o.template,sections:o.sections.map(t=>({...i(t),pages:t.pages.map((n,s)=>({...n,id:`${t.id}-${s}`,questions:d(o,t,n.questions)}))}))}}function d(e,o,t){return t.map(n=>m(e.template.id,o,n))}function m(e,o,t){return{...i({...t,choiceGroups:t.choice_groups?.map(n=>({...n,randomization:r(n.randomization)})),statementGroups:t.statement_groups?.map(n=>({...n,randomization:r(n.randomization)})),randomization:r(t.randomization)}),id:u(e,t),type:p(t.type),layout:f(t.layout),required:g(t.required),label:o.name}}function r(e){return e?{type:a(e.type),order:e.order?.split(" "),total:e.total}:void 0}function a(e){return e.toUpperCase()}function u(e,o){return`${e}.${o.id}`}const l=e=>e.split(".").pop();function p(e="description"){return e.replace("-","_").toUpperCase()}function f(e){return e?.toUpperCase()}function g(e="optional"){return e.replace("-","_").toUpperCase()}function y(e){return structuredClone(e).sections.flatMap(o=>o.pages.flatMap(t=>t.questions))}export{y as extractQuestionNodes,u as getQualifiedQuestionId,p as getQuestionTypeEnum,a as getRandomizationTypeEnum,l as getRawQuestionId,c as getTemplateNode};
|
|
2
2
|
//# sourceMappingURL=convertTemplateToNode.esm.js.map
|