@borgar/fx 4.7.1 → 4.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fx.d.ts +86 -1
- package/dist/fx.js +1 -1
- package/docs/API.md +171 -7
- package/docs/AST_format.md +45 -15
- package/lib/astTypes.js +96 -0
- package/lib/constants.js +3 -0
- package/lib/fixRanges.js +3 -2
- package/lib/lexer.js +51 -0
- package/lib/lexer.spec.js +63 -0
- package/lib/lexerParts.js +5 -0
- package/lib/parser.js +235 -33
- package/lib/parser.spec.js +380 -89
- package/lib/sr.js +5 -3
- package/lib/sr.spec.js +50 -0
- package/package.json +1 -1
package/dist/fx.d.ts
CHANGED
|
@@ -101,12 +101,15 @@ export declare function addTokenMeta(tokenlist: Array<Token>, context?: {
|
|
|
101
101
|
* @param formula A string (an Excel formula) or a token list that should be adjusted.
|
|
102
102
|
* @param [options={}] Options
|
|
103
103
|
* @param [options.addBounds=false] Fill in any undefined bounds of range objects. Top to 0, bottom to 1048575, left to 0, and right to 16383.
|
|
104
|
+
* @param [options.thisRow=false] Enforces using the `[#This Row]` instead of the `@` shorthand when serializing structured ranges.
|
|
104
105
|
* @param [options.xlsx=false] Switches to the `[1]Sheet1!A1` or `[1]!name` prefix syntax form for external workbooks. See: [Prefixes.md](./Prefixes.md)
|
|
105
106
|
* @returns A formula string or token list (depending on which was input)
|
|
106
107
|
*/
|
|
107
108
|
export declare function fixRanges(formula: (string | Array<Token>), options?: {
|
|
108
109
|
/** Fill in any undefined bounds of range objects. Top to 0, bottom to 1048575, left to 0, and right to 16383. */
|
|
109
110
|
addBounds?: boolean;
|
|
111
|
+
/** Enforces using the `[#This Row]` instead of the `@` shorthand when serializing structured ranges. */
|
|
112
|
+
thisRow?: boolean;
|
|
110
113
|
/** Switches to the `[1]Sheet1!A1` or `[1]!name` prefix syntax form for external workbooks. See: [Prefixes.md](./Prefixes.md) */
|
|
111
114
|
xlsx?: boolean;
|
|
112
115
|
}): (string | Array<Token>);
|
|
@@ -252,7 +255,7 @@ export declare function parse(formula: (string | Array<Token>), options?: {
|
|
|
252
255
|
withLocation?: boolean;
|
|
253
256
|
/** Switches to the `[1]Sheet1!A1` or `[1]!name` prefix syntax form for external workbooks. See: [Prefixes.md](./Prefixes.md) */
|
|
254
257
|
xlsx?: boolean;
|
|
255
|
-
}):
|
|
258
|
+
}): AstExpression;
|
|
256
259
|
|
|
257
260
|
/**
|
|
258
261
|
* Parse a string reference into an object representing it.
|
|
@@ -422,10 +425,13 @@ export declare function stringifyR1C1Ref(refObject: ReferenceR1C1, options?: {
|
|
|
422
425
|
*
|
|
423
426
|
* @param refObject A structured reference object
|
|
424
427
|
* @param [options={}] Options
|
|
428
|
+
* @param [options.thisRow=false] Enforces using the `[#This Row]` instead of the `@` shorthand when serializing structured ranges.
|
|
425
429
|
* @param [options.xlsx=false] Switches to the `[1]Sheet1!A1` or `[1]!name` prefix syntax form for external workbooks. See: [Prefixes.md](./Prefixes.md)
|
|
426
430
|
* @returns The structured reference in string format
|
|
427
431
|
*/
|
|
428
432
|
export declare function stringifyStructRef(refObject: ReferenceStruct, options?: {
|
|
433
|
+
/** Enforces using the `[#This Row]` instead of the `@` shorthand when serializing structured ranges. */
|
|
434
|
+
thisRow?: boolean;
|
|
429
435
|
/** Switches to the `[1]Sheet1!A1` or `[1]!name` prefix syntax form for external workbooks. See: [Prefixes.md](./Prefixes.md) */
|
|
430
436
|
xlsx?: boolean;
|
|
431
437
|
}): string;
|
|
@@ -618,6 +624,69 @@ export declare const tokenTypes: Readonly<{
|
|
|
618
624
|
WHITESPACE: string;
|
|
619
625
|
}>;
|
|
620
626
|
|
|
627
|
+
export declare type AstExpression = (ReferenceIdentifier | Literal | ErrorLiteral | UnaryExpression | BinaryExpression | CallExpression | MatrixExpression | LambdaExpression | LetExpression);
|
|
628
|
+
|
|
629
|
+
export declare type BinaryExpression = {
|
|
630
|
+
arguments: Array<AstExpression>;
|
|
631
|
+
loc?: SourceLocation;
|
|
632
|
+
operator: ("=" | "<" | ">" | "<=" | ">=" | "<>" | "-" | "+" | "*" | "/" | "^" | ":" | " " | "," | "&");
|
|
633
|
+
type: "BinaryExpression";
|
|
634
|
+
};
|
|
635
|
+
|
|
636
|
+
export declare type CallExpression = {
|
|
637
|
+
arguments: Array<AstExpression>;
|
|
638
|
+
callee: Identifier;
|
|
639
|
+
loc?: SourceLocation;
|
|
640
|
+
type: "CallExpression";
|
|
641
|
+
};
|
|
642
|
+
|
|
643
|
+
export declare type ErrorLiteral = {
|
|
644
|
+
loc?: SourceLocation;
|
|
645
|
+
raw: string;
|
|
646
|
+
type: "ErrorLiteral";
|
|
647
|
+
value: string;
|
|
648
|
+
};
|
|
649
|
+
|
|
650
|
+
export declare type Identifier = {
|
|
651
|
+
loc?: SourceLocation;
|
|
652
|
+
name: string;
|
|
653
|
+
type: "Identifier";
|
|
654
|
+
};
|
|
655
|
+
|
|
656
|
+
export declare type LambdaExpression = {
|
|
657
|
+
body: (null | AstExpression);
|
|
658
|
+
loc?: SourceLocation;
|
|
659
|
+
params: Array<Identifier>;
|
|
660
|
+
type: "LambdaExpression";
|
|
661
|
+
};
|
|
662
|
+
|
|
663
|
+
export declare type LetDeclarator = {
|
|
664
|
+
id: Identifier;
|
|
665
|
+
init: (null | AstExpression);
|
|
666
|
+
loc?: SourceLocation;
|
|
667
|
+
type: "LetDeclarator";
|
|
668
|
+
};
|
|
669
|
+
|
|
670
|
+
export declare type LetExpression = {
|
|
671
|
+
body: (null | AstExpression);
|
|
672
|
+
declarations: Array<LetDeclarator>;
|
|
673
|
+
loc?: SourceLocation;
|
|
674
|
+
type: "LetExpression";
|
|
675
|
+
};
|
|
676
|
+
|
|
677
|
+
export declare type Literal = {
|
|
678
|
+
loc?: SourceLocation;
|
|
679
|
+
raw: string;
|
|
680
|
+
type: "Literal";
|
|
681
|
+
value: (string | number | boolean);
|
|
682
|
+
};
|
|
683
|
+
|
|
684
|
+
export declare type MatrixExpression = {
|
|
685
|
+
arguments: Array<Array<(ReferenceIdentifier | Literal | ErrorLiteral | CallExpression)>>;
|
|
686
|
+
loc?: SourceLocation;
|
|
687
|
+
type: "ArrayExpression";
|
|
688
|
+
};
|
|
689
|
+
|
|
621
690
|
/** A range in A1 style coordinates. */
|
|
622
691
|
export declare type RangeA1 = {
|
|
623
692
|
/** Signifies that bottom is a "locked" value */
|
|
@@ -673,6 +742,13 @@ export declare type ReferenceA1 = {
|
|
|
673
742
|
workbookName?: string;
|
|
674
743
|
};
|
|
675
744
|
|
|
745
|
+
export declare type ReferenceIdentifier = {
|
|
746
|
+
kind: ("name" | "range" | "beam" | "table");
|
|
747
|
+
loc?: SourceLocation;
|
|
748
|
+
type: "ReferenceIdentifier";
|
|
749
|
+
value: string;
|
|
750
|
+
};
|
|
751
|
+
|
|
676
752
|
/**
|
|
677
753
|
* A reference containing a R1C1 style range. See [Prefixes.md] for
|
|
678
754
|
* documentation on how scopes work in Fx.
|
|
@@ -707,6 +783,8 @@ export declare type ReferenceStruct = {
|
|
|
707
783
|
workbookName?: string;
|
|
708
784
|
};
|
|
709
785
|
|
|
786
|
+
export declare type SourceLocation = Array<number>;
|
|
787
|
+
|
|
710
788
|
/** A formula language token. */
|
|
711
789
|
export declare type Token = Record<string,any> & {
|
|
712
790
|
/** Source position offsets to the token */
|
|
@@ -731,3 +809,10 @@ export declare type TokenEnhanced = Token & {
|
|
|
731
809
|
index: number;
|
|
732
810
|
};
|
|
733
811
|
|
|
812
|
+
export declare type UnaryExpression = {
|
|
813
|
+
arguments: Array<AstExpression>;
|
|
814
|
+
loc?: SourceLocation;
|
|
815
|
+
operator: ("+" | "-" | "%" | "#" | "@");
|
|
816
|
+
type: "UnaryExpression";
|
|
817
|
+
};
|
|
818
|
+
|
package/dist/fx.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const e="operator",t="error",n="range_beam",l="range_ternary",r="range_named",o="structured",u="unknown",s="UnaryExpression",c="BinaryExpression",i="ReferenceIdentifier",a="CallExpression";function f(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=!1,l="";const r=[],o=()=>{l&&r.push(t?l:{value:l,braced:n}),l=""};for(let t=0;t<e.length;t++){const r=e[t];"["===r?(o(),n=!0):"]"===r?(o(),n=!1):l+=r}return o(),r}function p(e){return{context:f(e,!0)}}function h(e){const t={},n=f(e);if(n.length>1)t.workbookName=n[n.length-2].value,t.sheetName=n[n.length-1].value;else if(1===n.length){const e=n[0];e.braced?t.workbookName=e.value:t.sheetName=e.value}return t}const g=e=>e&&":"===e.value&&{},x=e=>e&&"range"===e.type&&{r0:e.value},d=e=>e&&e.type===l&&{r0:e.value},$=e=>e&&"range"===e.type&&{r1:e.value},y=t=>t&&t.type===e&&"!"===t.value&&{},m=e=>e&&e.type===n&&{r0:e.value},v=e=>e&&e.type===o&&{struct:e.value},E=(e,t)=>{const n=t.xlsx?h:p;return e&&"context"===e.type?n(e.value):e&&"context_quote"===e.type?n(e.value.slice(1,-1).replace(/''/g,"'")):void 0},R=e=>e&&e.type===r&&{name:e.value},w=[[d],[x,g,$],[x],[m],[E,y,d],[E,y,x,g,$],[E,y,x],[E,y,m]],N=w.concat([[R],[E,y,R],[v],[R,v],[E,y,R,v]]);function b(e,t){const n={withLocation:!1,mergeRefs:!1,allowTernary:!1,allowNamed:!0,r1c1:!1,xlsx:!1,...t},l=Fe(e,Ae,n),r=n.xlsx?{workbookName:"",sheetName:"",r0:"",r1:"",name:""}:{context:[],r0:"",r1:"",name:""};l.length&&"fx_prefix"===l[0].type&&l.shift();const o=n.allowNamed?N:w;for(let e=0;e<o.length;e++){const t={...r};if(o[e].length===l.length){const r=o[e].every(((e,r)=>{const o=e(l[r],n);return Object.assign(t,o),o}));if(r)return t}}return null}const A=/[^0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]/;function C(e){let t="",n=0,l=0;const r=e.context||[];for(let e=r.length;e>-1;e--){const o=r[e];if(o){t=(l%2?"["+o+"]":o)+t,n+=A.test(o),l++}}return n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}function T(e){let t="",n=0;const{workbookName:l,sheetName:r}=e;return l&&(t+="["+l+"]",n+=A.test(l)),r&&(t+=r,n+=A.test(r)),n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}const I=(e,t,n)=>Math.min(Math.max(t,e),n),L=(e,t)=>(t?"$":"")+U(e),k=(e,t)=>(t?"$":"")+String(e+1),O=String.fromCharCode;function _(e){const t=e||"",n=t.length;let l=0;if(n>2){const e=t.charCodeAt(n-3);l+=676*(1+e-(e>95?32:0)-65)}if(n>1){const e=t.charCodeAt(n-2);l+=26*(1+e-(e>95?32:0)-65)}if(n){const e=t.charCodeAt(n-1);l+=e-(e>95?32:0)-65}return l}function U(e){return(e>=702?O(((e-702)/676-0)%26+65):"")+(e>=26?O((e/26-1)%26+65):"")+O(e%26+65)}function F(e){let{top:t,left:n,bottom:l,right:r}=e;const{$left:o,$right:u,$top:s,$bottom:c}=e,i=null==n,a=null==r,f=null==t,p=null==l;t=I(0,0|t,1048575),n=I(0,0|n,16383),!i&&!f&&a&&p?(l=t,r=n):(l=I(0,0|l,1048575),r=I(0,0|r,16383));if(0===t&&l>=1048575&&!i&&!a&&(!(o&&!i||u&&!a)||n===r)||f&&p)return L(n,o)+":"+L(r,u);return 0===n&&r>=16383&&!f&&!p&&(!(s&&!f||c&&!p)||t===l)||i&&a?k(t,s)+":"+k(l,c):i||f||a||!p?i||!f||a||p?i||f||!a||p?!i||f||a||p?r!==n||l!==t||u!==o||c!==s?L(n,o)+k(t,s)+":"+L(r,u)+k(l,c):L(n,o)+k(t,s):L(r,u)+k(t,s)+":"+k(l,c):L(n,o)+k(t,s)+":"+k(l,c):L(n,o)+k(l,c)+":"+L(r,u):L(n,o)+k(t,s)+":"+L(r,u)}function S(e){const t=/^(?=.)(\$(?=\D))?([A-Za-z]{0,3})?(\$)?([1-9][0-9]{0,6})?$/.exec(e);return t&&(t[2]||t[4])?[t[4]?(n=t[4],+n-1):null,t[2]?_(t[2]):null,!!t[3],!!t[1]]:null;var n}function M(e){let t=null,n=null,l=null,r=null,o=!1,u=!1,s=!1,c=!1;const[i,a,f]=e.split(":");if(f)return null;const p=S(i),h=a?S(a):null;if(!p||a&&!h)return null;if(null!=p[0]&&null!=p[1]?[t,n,o,u]=p:null==p[0]&&null!=p[1]?[,n,,u]=p:null!=p[0]&&null==p[1]&&([t,,o]=p),a)null!=h[0]&&null!=h[1]?[l,r,s,c]=h:null==h[0]&&null!=h[1]?[,r,,c]=h:null!=h[0]&&null==h[1]&&([l,,s]=h);else{if(null==t||null==n)return null;l=t,r=n,s=o,c=u}return null!=r&&(null==n||null!=n&&r<n)&&([n,r,u,c]=[r,n,c,u]),null!=l&&(null==t||null!=t&&l<t)&&([t,l,o,s]=[l,t,s,o]),{top:t,left:n,bottom:l,right:r,$top:o,$left:u,$bottom:s,$right:c}}function z(e){let{allowNamed:t=!0,allowTernary:n=!1,xlsx:l=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=b(e,{allowNamed:t,allowTernary:n,xlsx:l,r1c1:!1});if(r&&(r.r0||r.name)){let e=null;return r.r0&&(e=M(r.r1?r.r0+":"+r.r1:r.r0)),r.name||e?(r.range=e,delete r.r0,delete r.r1,r):null}return null}function D(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t?T(e):C(e);return n+(e.name?e.name:F(e.range))}function j(e){return null==e.top&&(e.top=0,e.$top=!1),null==e.bottom&&(e.bottom=1048575,e.$bottom=!1),null==e.left&&(e.left=0,e.$left=!1),null==e.right&&(e.right=16383,e.$right=!1),e}const Z=/^\[('['#@[\]]|[^'#@[\]])+\]/i,q=/^([^#@[\]:]+)/i,B={headers:1,data:2,totals:4,all:8,"this row":16,"@":16},P=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Object.freeze(t)},X={0:P(),1:P("headers"),2:P("data"),4:P("totals"),8:P("all"),16:P("this row"),3:P("headers","data"),6:P("data","totals")},W=function(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=Z.exec(e);if(n){const e=n[0].slice(1,-1).replace(/'(['#@[\]])/g,"$1");return[n[0],e]}return t&&(n=q.exec(e),n)?[n[0],n[0]]:null};function H(e){const t=[];let n,l,r=0,o=e,u=0;if(!(n=/^(\[\s*)/.exec(o)))return null;if(l=/^\[#([a-z ]+)\]/i.exec(o)){const e=l[1].toLowerCase();if(r+=l[0].length,!B[e])return null;u|=B[e]}else if(l=W(o,!1))r+=l[0].length,t.push(l[1]);else{let l=!0;for(o=o.slice(n[1].length),r+=n[1].length;l&&(n=/^\[#([a-z ]+)\](\s*,\s*)?/i.exec(o));){const e=n[1].toLowerCase();if(!B[e])return null;u|=B[e],o=o.slice(n[0].length),r+=n[0].length,l=!!n[2]}if(l&&(n=/^@/.exec(o))&&(u|=B["@"],o=o.slice(1),r+=1,l="]"!==o[0]),!(u in X))return null;const s=l?W(e.slice(r)):null;if(s){if(r+=s[0].length,t.push(s[1]),o=e.slice(r),":"===o[0]){o=o.slice(1),r++;const e=W(o);if(!e)return null;r+=e[0].length,t.push(e[1])}l=!1}for(;" "===e[r];)r++;if(l||"]"!==e[r])return null;r++}const s=X[u];return{columns:t,sections:s?s.concat():s,length:r,token:e.slice(0,r)}}function Y(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{xlsx:!1};const n=b(e,t);if(n&&n.struct){const e=H(n.struct);if(e&&e.length===n.struct.length)return t.xlsx?{workbookName:n.workbookName,sheetName:n.sheetName,table:n.name,columns:e.columns,sections:e.sections}:{context:n.context,table:n.name,columns:e.columns,sections:e.sections}}return null}function G(e){return e.replace(/([[\]#'@])/g,"'$1")}function K(e){return!/^[a-zA-Z0-9\u00a1-\uffff]+$/.test(e)}function V(e){return e[0].toUpperCase()+e.slice(1).toLowerCase()}function Q(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t?T(e):C(e);e.table&&(n+=e.table);const l=e.columns?.length??0,r=e.sections?.length??0;if(1!==r||l)if(r||1!==l){n+="[";const t=1===r&&"this row"===e.sections[0].toLowerCase();t?n+="@":r&&(n+=e.sections.map((e=>`[#${V(e)}]`)).join(","),l&&(n+=",")),t&&1===e.columns.length&&!K(e.columns[0])?n+=G(e.columns[0]):l&&(n+=e.columns.slice(0,2).map((e=>`[${G(e)}]`)).join(":")),n+="]"}else n+=`[${G(e.columns[0])}]`;else n+=`[#${V(e.sections[0])}]`;return n}const J=/^(?!!)(\[(?:[^\]])+\])?([0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]+)?(?=!)/,ee=/^'(?:''|[^'])*('|$)(?=!)/,te="\\$?[A-Z]{1,3}\\$?[1-9][0-9]{0,6}",ne="\\$?[A-Z]{1,3}",le="\\$?[1-9][0-9]{0,6}",re="(?![a-z0-9_\\u00a1-\\uffff])",oe=new RegExp(`^${ne}:${ne}${re}`,"i"),ue=new RegExp(`^${le}:${le}${re}`,"i"),se=new RegExp(`^${te}${re}`,"i"),ce=new RegExp(`^((${ne}|${le}):${te}|${te}:(${ne}|${le}))(?![\\w($.])`,"i"),ie="(?:R(?:\\[[+-]?\\d+\\]|[1-9][0-9]{0,6})?)",ae="(?:C(?:\\[[+-]?\\d+\\]|[1-9][0-9]{0,4})?)",fe=new RegExp(`^${ae}(:${ae})?${re}`,"i"),pe=new RegExp(`^${ie}(:${ie})?${re}`,"i"),he=new RegExp(`^(?:(?=[RC])${ie}${ae})${re}`,"i"),ge=new RegExp(`^(${ie}${ae}(:${ae}|:${ie})(?![[\\d])|(${ie}|${ae})(:${ie}${ae}))${re}`,"i"),xe=/^[a-zA-Z\\_\u00a1-\uffff][a-zA-Z0-9\\_.?\u00a1-\uffff]{0,254}/i;function de(e,t){return n=>{const l=t.exec(n);if(l)return{type:e,value:l[0]}}}function $e(e){const t=xe.exec(e);if(t){const e=t[0].toLowerCase();return"r"===e||"c"===e?null:{type:r,value:t[0]}}}const ye=/^'(?:[^[\]]+?)?(?:\[(.+?)\])?(?:[^[\]]+?)'$/,me=/^'\[(.+?)\]'$/;function ve(e,t){const n=ee.exec(e);if(n){const e=n[0];if(t.xlsx&&me.test(e)||ye.test(e))return{type:"context_quote",value:e}}const l=J.exec(e);if(l){const[,e,n]=l;if(e&&n||n||e&&!n&&t.xlsx)return{type:"context",value:l[0]}}}function Ee(e){const t=H(e);if(t){let n=t.length;for(;" "===e[n];)n++;if("!"!==e[n])return{type:o,value:t.token}}return null}const Re=/([RC])(\[?)(-?\d+)/gi,we=/(\d+|[a-zA-Z]+)/gi;function Ne(e,t){let r,o;if(t.r1c1){if(t.allowTernary&&(r=ge.exec(e))?o={type:l,value:r[0]}:(r=he.exec(e))?o={type:"range",value:r[0]}:((r=pe.exec(e))||(r=fe.exec(e)))&&(o={type:n,value:r[0]}),o){for(Re.lastIndex=0;null!==(r=Re.exec(o.value));){const e=("R"===r[1]?1048575:16383)+(r[2]?0:1),t=parseInt(r[3],10);if(t>e||t<-e)return null}return o}}else if(t.allowTernary&&(r=ce.exec(e))?o={type:l,value:r[0]}:(r=oe.exec(e))||(r=ue.exec(e))?o={type:n,value:r[0]}:(r=se.exec(e))&&(o={type:"range",value:r[0]}),o){for(we.lastIndex=0;null!==(r=we.exec(o.value));)if(/^\d/.test(r[1])){if(parseInt(r[1],10)-1>1048575)return null}else if(_(r[1])>16383)return null;return o}}const be=[de(t,/^#(NAME\?|FIELD!|CALC!|VALUE!|REF!|DIV\/0!|NULL!|NUM!|N\/A|GETTING_DATA\b|SPILL!|UNKNOWN!|FIELD\b|CALC\b|SYNTAX\?|ERROR!|CONNECT!|BLOCKED!|EXTERNAL!)/i),de(e,/^(<=|>=|<>|[-+/*^%&<>=]|[{},;]|[()]|@|:|!|#)/),de("func",/^[A-Z_]+[A-Z\d_.]*(?=\()/i),de("bool",/^(TRUE|FALSE)\b/i),de("newline",/^\n+/),de("whitespace",/^[ \f\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/),de("string",/^"(?:""|[^"])*("|$)/),ve,Ne,Ee,de("number",/^(?:\d+(\.\d+)?(?:[eE][+-]?\d+)?|\d+)/),$e],Ae=[function(t,n){return n.r1c1?"!"===t[0]?{type:e,value:t[0]}:null:"!"===t[0]||":"===t[0]?{type:e,value:t[0]}:null},ve,Ne,Ee,$e],Ce={};function Te(e,t){if(e.length){const n=e[0];t[n]=t[n]||{},Te(e.slice(1),t[n])}else t.$=!0}[["range",":","range"],["range"],[n],[l],["context","!","range",":","range"],["context","!","range"],["context","!",n],["context","!",l],["context_quote","!","range",":","range"],["context_quote","!","range"],["context_quote","!",n],["context_quote","!",l],[r],["context","!",r],["context_quote","!",r],[o],[r,o],["context","!",r,o],["context_quote","!",r,o]].forEach((e=>Te(e.concat().reverse(),Ce)));const Ie=function(t,n,l){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;const o=t[l-r];if(o){const u=o.type===e?o.value:o.type;if(u in n)return Ie(t,n[u],l,r+1)}return n.$?r:0};function Le(e){const t=[];for(let n=e.length-1;n>=0;n--){let l=e[n];const r=Ie(e,Ce,n);if(r){const t=e.slice(n-r+1,n+1);l={...l},l.value=t.map((e=>e.value)).join(""),l.loc&&t[0].loc&&(l.loc[0]=t[0].loc[0]),n-=r-1}t.unshift(l)}return t}const ke=(e,t)=>e&&e.type===t,Oe={withLocation:!1,mergeRefs:!0,allowTernary:!1,negativeNumbers:!0,r1c1:!1},_e=e=>e.type===r||"func"===e.type,Ue=t=>!ke(t,e)||"%"===t.value||"}"===t.value||")"===t.value||"#"===t.value;function Fe(t,n){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=Object.assign({},Oe,l),{withLocation:o,mergeRefs:s,negativeNumbers:c}=r,i=[];let a=0,f=null,p=null,h=null;const g=e=>{const t=e.type===u,n=h&&h.type===u;h&&(t&&n||t&&_e(h)||n&&_e(e))?(h.value+=e.value,h.type=u,o&&(h.loc[1]=e.loc[1])):(i.push(e),h=e,"whitespace"!==e.type&&"newline"!==e.type&&(p=f,f=e))};if(/^=/.test(t)){a++,g({type:"fx_prefix",value:"=",...o?{loc:[0,1]}:{}})}for(;a<t.length;){const l=a,s=t.slice(a);let x="",d="";for(let e=0;e<n.length;e++){const t=n[e](s,r);if(t){x=t.type,d=t.value,a+=d.length;break}}x||(x=u,d=t[a],a++);const $={type:x,value:d,...o?{loc:[l,a]}:{}};if("string"===x){const e=d.length;if('""'===d);else if('"'===d||'"'!==d[e-1])$.unterminated=!0;else if('""'!==d&&'"'===d[e-2]){let t=e-1;for(;'"'===d[t];)t--;!(t+1)^(e-t+1)%2==0&&($.unterminated=!0)}}if(c&&"number"===x){const t=h;if(t&&ke(t,e)&&"-"===t.value&&(!p||ke(p,"fx_prefix")||!Ue(p))){const e=i.pop();$.value="-"+d,o&&($.loc[0]=e.loc[0]),f=p,h=i[i.length-1]}}g($)}return s?Le(i):i}function Se(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Fe(e,be,t)}function Me(e){return!!e&&("range"===e.type||e.type===n||e.type===l)}function ze(e){return!!e&&("range"===e.type||e.type===n||e.type===l||e.type===o||e.type===r)}function De(e){return!!e&&("bool"===e.type||e.type===t||"number"===e.type||"string"===e.type)}function je(e){return!!e&&e.type===t}function Ze(e){return!!e&&("whitespace"===e.type||"newline"===e.type)}function qe(e){return!!e&&"func"===e.type}function Be(e){return!!e&&"fx_prefix"===e.type}function Pe(t){return!!t&&t.type===e}const Xe="(END)",We=["ANCHORARRAY","CHOOSE","DROP","IF","IFS","INDEX","INDIRECT","LAMBDA","LET","OFFSET","REDUCE","SINGLE","SWITCH","TAKE","XLOOKUP"],He=e=>!!e&&(e.type===i||("ErrorLiteral"===e.type||e.type===t)&&"#REF!"===e.value||e.type===c&&(":"===e.operator||" "===e.operator||","===e.operator)||e.type===a&&We.includes(e.callee.name.toUpperCase())),Ye={};let Ge,Ke,Ve,Qe=!1,Je=!1;function et(e){const t=new Error(e);throw t.source=Ke.map((e=>e.value)).join(""),t.sourceOffset=Ke.slice(0,Ve).reduce(((e,t)=>e+t.value),"").length,t}function tt(){let e,t=Ve;do{e=Ke[++t]}while(e&&(Ze(e)||Pe(e)&&"("===e.value));return(e=>{const t=(e&&e.value)+"";return!(!ze(e)&&(!Pe(e)||":"!==t&&","!==t&&t.trim())&&(!qe(e)||!We.includes(t.toUpperCase()))&&(!je(e)||"#REF!"!==t))})(e)}function nt(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(e&&e!==Ge.id&&et(`Expected ${e} but got ${Ge.id}`),Ze(Ke[Ve])){if(!(He(t)&&tt()))for(;Ze(Ke[Ve]);)Ve++}if(Ve>=Ke.length)return void(Ge=Ye[Xe]);const n=Ke[Ve];let l;Ve+=1,n.unterminated&&et("Encountered an unterminated token");let r=n.type;return Pe(n)?(l=Ye[n.value],l||et(`Unknown operator ${n.value}`)):Ze(n)?l=Ye["(WHITESPACE)"]:De(n)?l=Ye.Literal:ze(n)?(l=Ye[i],r=i):qe(n)?l=Ye["(FUNCTION)"]:et(`Unexpected ${n.type} token: ${n.value}`),Ge=Object.create(l),Ge.type=r,Ge.value=n.value,n.loc&&(Ge.loc=[...n.loc]),Ge}function lt(e){let t=Ge;nt(null,t);let n=t.nud();for(;e<Ge.lbp;)t=Ge,nt(null,t),n=t.led(n);return n}const rt={nud:()=>et("Invalid syntax"),led:()=>et("Missing operator")};function ot(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=Ye[e];return n?t>=n.lbp&&(n.lbp=t):(n={...rt},n.id=e,n.value=e,n.lbp=t,Ye[e]=n),n}function ut(e,t,n){const l=ot(e,t);return l.led=n||function(e){this.type=c,this.operator=this.value,delete this.value;const n=lt(t);return this.arguments=[e,n],this.loc&&(this.loc=[e.loc[0],n.loc[1]]),this},l}function st(e,t){const n=ot(e,0);return n.lbp=70,n.led=t||function(e){return this.type=s,this.operator=this.value,delete this.value,this.arguments=[e],this.loc&&(this.loc[0]=e.loc[0]),this},n}function ct(e,t){const n=ot(e);return n.nud=t||function(){this.type=s,this.operator=this.value,delete this.value;const e=lt(70);return this.arguments=[e],this.loc&&(this.loc[1]=e.loc[1]),this},n}function it(e,t){return ut(e,t,(function(n){He(n)||et(`Unexpected ${e} operator`);const l=lt(t);return He(l)||et(`Unexpected ${Ge.type} following ${this.id}`),this.type=c,this.operator=this.value.trim()?this.value:" ",delete this.value,this.arguments=[n,l],this.loc&&(this.loc=[n.loc[0],l.loc[1]]),this}))}ot(Xe),it(":",80);const at=it(",",80);it("(WHITESPACE)",80);const ft=e=>{const t=at.lbp>0;return null!=e&&(at.lbp=e?80:0),t};function pt(){let e=1;return()=>"fxg"+e++}function ht(e,t){return null==e&&null==t||e===t}function gt(e,t){if(Array.isArray(e)!==Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!ht(e[n],t[n]))return!1;return!0}function xt(e,t){return!e&&!t||String(e).toLowerCase()===String(t).toLowerCase()}function dt(e,t){if((e.name||t.name)&&e.name!==t.name)return!1;if(e.columns||t.columns){if(e.table!==t.table)return!1;if(!gt(e.columns,t.columns))return!1;if(!gt(e.sections,t.sections))return!1}return!!(!e.range&&!t.range||ht(e.range.top,t.range.top)&&ht(e.range.bottom,t.range.bottom)&&ht(e.range.left,t.range.left)&&ht(e.range.right,t.range.right))&&!(!xt(e.workbookName,t.workbookName)||!xt(e.sheetName,t.sheetName))}function $t(e,t,n){return e.sheetName||(e.sheetName=t),e.workbookName||(e.workbookName=n),e}st("%"),st("#",(function(e){return He(e)||et("# expects a reference"),this.type=s,this.operator=this.value,delete this.value,this.arguments=[e],this})),ct("+"),ct("-"),ct("@"),ut("^",50),ut("*",40),ut("/",40),ut("+",30),ut("-",30),ut("&",20),ut("=",10),ut("<",10),ut(">",10),ut("<=",10),ut(">=",10),ut("<>",10),ot("Literal").nud=function(){const{type:e,value:n}=this;if(this.type="Literal",this.raw=n,"number"===e)this.value=+n;else if("bool"===e)this.value="TRUE"===n.toUpperCase();else if(e===t)this.type="ErrorLiteral",this.value=n.toUpperCase();else{if("string"!==e)throw new Error("Unsupported literal type: "+e);this.value=n.slice(1,-1).replace(/""/g,'"')}return this},ot(i).nud=function(){return this.type=i,this},ot(")"),ct("(",(function(){const e=ft(!0),t=lt(0);return nt(")",t),ft(e),t})),ot("(FUNCTION)").nud=function(){return this},ut("(",90,(function(e){"(FUNCTION)"!==e.id&&et("Cannot call a "+e.type);const t=[];let n=!1;if(")"!==Ge.id){const e=ft(!1);for(;")"!==Ge.id;)if(Ze(Ge)&&nt(),","===Ge.id)t.push(null),n=!0,nt();else{const e=lt(0);t.push(e),n=!1,","===Ge.id&&(nt(","),n=!0)}ft(e)}n&&t.push(null);const l=Ge;return delete this.value,this.type=a,this.callee={type:"Identifier",name:e.value},e.loc&&(this.callee.loc=[...e.loc]),this.arguments=t,e.loc&&(this.loc=[e.loc[0],l.loc[1]]),nt(")",this),this})),ot("}"),ot(";"),ct("{",(function(){"}"===Ge.id&&et("Unexpected empty array");let e=[],t=!1;const n=[e],l=ft(!1);for(;!t;){if(Ze(Ge)&&nt(),De(Ge))e.push(Ye.Literal.nud.call(Ge)),nt();else if(Qe&&He(Ge))e.push(Ye[i].nud.call(Ge)),nt();else if(Je&&qe(Ge)){const t=lt(0);e.push(t)}else et(`Unexpected ${Ge.type} in array: ${Ge.value}`);","===Ge.id?nt(","):";"===Ge.id?(nt(";"),e=[],n.push(e)):t=!0}const r=Ge;return nt("}"),ft(l),this.type="ArrayExpression",this.elements=n,this.loc&&(this.loc[1]=r.loc[1]),delete this.value,this}));const yt=(e,t,n)=>Math.min(Math.max(t,e),n);function mt(e,t){return t?String(e+1):e?"["+e+"]":""}function vt(e){let{r0:t,c0:n,r1:l,c1:r}=e;const{$c0:o,$c1:u,$r0:s,$r1:c}=e,i=null==t,a=null==n;let f=null==l,p=null==r;t=yt(s?0:-1048575,0|t,1048575),n=yt(o?0:-16383,0|n,16383),!i&&f&&!a&&p?(l=t,f=!1,r=n,p=!1):(l=yt(c?0:-1048575,0|l,1048575),r=yt(u?0:-16383,0|r,16383));if(0===t&&l>=1048575&&!a&&!p||i&&f){const e=mt(n,o),t=mt(r,u);return"C"+(e===t?e:e+":C"+t)}if(0===n&&r>=16383&&!i&&!f||a&&p){const e=mt(t,s),n=mt(l,c);return"R"+(e===n?e:e+":R"+n)}const h=mt(t,s),g=mt(l,c),x=mt(n,o),d=mt(r,u);return i||f||a||p?(i?"":"R"+h)+(a?"":"C"+x)+":"+(f?"":"R"+g)+(p?"":"C"+d):h!==g||x!==d?"R"+h+"C"+x+":R"+g+"C"+d:"R"+h+"C"+x}function Et(e){let t=null,n=null,l=null,r=null;const o=/^R(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);o&&(o[1]?(t=parseInt(o[1],10),l=!1):o[2]?(t=parseInt(o[2],10)-1,l=!0):(t=0,l=!1),e=e.slice(o[0].length));const u=/^C(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);return u&&(u[1]?(n=parseInt(u[1],10),r=!1):u[2]?(n=parseInt(u[2],10)-1,r=!0):(n=0,r=!1),e=e.slice(u[0].length)),!o&&!u||e.length?null:[t,n,l,r]}function Rt(e){let t=null;const[n,l]=e.split(":",2),r=Et(n);if(r){const[e,n,o,u]=r;if(!l)return null!=e&&null==n?{r0:e,c0:null,r1:e,c1:null,$r0:o,$c0:!1,$r1:o,$c1:!1}:null==e&&null!=n?{r0:null,c0:n,r1:null,c1:n,$r0:!1,$c0:u,$r1:!1,$c1:u}:{r0:e||0,c0:n||0,r1:e||0,c1:n||0,$r0:o||!1,$c0:u||!1,$r1:o||!1,$c1:u||!1};{const r=Et(l);if(!r)return null;{t={};const[l,s,c,i]=r;null!=e&&null!=l?(t.r0=o===c?Math.min(e,l):e,t.$r0=o,t.r1=o===c?Math.max(e,l):l,t.$r1=c):null!=e&&null==l?(t.r0=e,t.$r0=o,t.r1=null,t.$r1=o):null==e&&null!=l?(t.r0=l,t.$r0=c,t.r1=null,t.$r1=c):null==e&&null==l&&(t.r0=null,t.$r0=!1,t.r1=null,t.$r1=!1),null!=n&&null!=s?(t.c0=u===i?Math.min(n,s):n,t.$c0=u,t.c1=u===i?Math.max(n,s):s,t.$c1=i):null!=n&&null==s?(t.c0=n,t.$c0=u,t.c1=null,t.$c1=u):null==n&&null!=s?(t.c0=s,t.$c0=i,t.c1=null,t.$c1=i):null==n&&null==s&&(t.c0=null,t.$c0=!1,t.c1=null,t.$c1=!1)}}}return t}function wt(e){let{allowNamed:t=!0,allowTernary:n=!1,xlsx:l=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=b(e,{allowNamed:t,allowTernary:n,xlsx:l,r1c1:!0});if(r&&(r.r0||r.name)){const e=r.r1?Rt(r.r0+":"+r.r1):Rt(r.r0);return r.name||e?(r.range=e,delete r.r0,delete r.r1,r):null}return null}function Nt(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t?T(e):C(e);return n+(e.name?e.name:vt(e.range))}const bt=(e,t,n)=>null==t?null:e?t:t-n,At={withLocation:!1,mergeRefs:!1,allowTernary:!0,r1c1:!1};function Ct(e,t,n,l){let r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=e;if(null!=o&&!t){if(o=n+e,o<0){if(!r)return NaN;o=l+o+1}if(o>l){if(!r)return NaN;o-=l+1}}return o}const Tt={wrapEdges:!0,mergeRefs:!0,allowTernary:!0,xlsx:!1};const It=Object.freeze({OPERATOR:e,BOOLEAN:"bool",ERROR:t,NUMBER:"number",FUNCTION:"func",NEWLINE:"newline",WHITESPACE:"whitespace",STRING:"string",CONTEXT:"context",CONTEXT_QUOTE:"context_quote",REF_RANGE:"range",REF_BEAM:n,REF_TERNARY:l,REF_NAMED:r,REF_STRUCT:o,FX_PREFIX:"fx_prefix",UNKNOWN:u}),Lt=Object.freeze({UNARY:s,BINARY:c,REFERENCE:i,LITERAL:"Literal",ERROR:"ErrorLiteral",CALL:a,ARRAY:"ArrayExpression",IDENTIFIER:"Identifier"});exports.MAX_COLS=16383,exports.MAX_ROWS=1048575,exports.addA1RangeBounds=j,exports.addTokenMeta=function(e){let{sheetName:t="",workbookName:r=""}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=[];let c=null;const i=pt(),a=[],f=()=>s.length+(c?1:0);return e.forEach(((e,p)=>{if(e.index=p,e.depth=f(),"("===e.value)s.push(e),e.depth=f();else if(")"===e.value){const t=s.pop();if(t){const n=i();e.groupId=n,e.depth=t.depth,t.groupId=n}else e.error=!0}else if("{"===e.value)c?e.error=!0:(c=e,e.depth=f());else if("}"===e.value){if(c){const t=i();e.groupId=t,e.depth=c.depth,c.groupId=t}else e.error=!0;c=null}else if("range"===e.type||e.type===n||e.type===l||e.type===o){const n=e.type===o?Y(e.value,{allowTernary:!0,xlsx:!0}):z(e.value,{allowTernary:!0,xlsx:!0});if(n&&(n.range||n.columns)){n.source=e.value,$t(n,t,r);const l=a.find((e=>dt(e,n)));l?e.groupId=l.groupId:(n.groupId=i(),e.groupId=n.groupId,a.push(n))}}else e.type===u&&(e.error=!0)})),e},exports.fixRanges=function e(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{addBounds:!1};if("string"==typeof t)return e(Se(t,n),n).map((e=>e.value)).join("");if(!Array.isArray(t))throw new Error("fixRanges expects an array of tokens");const{addBounds:l,r1c1:r,xlsx:u}=n;if(r)throw new Error("fixRanges does not have an R1C1 mode");let s=0;return t.map((e=>{const t={...e};e.loc&&(t.loc=[...e.loc]);let n=0;if(t.type===o){const e=Q(Y(t.value,{xlsx:u}),{xlsx:u});n=e.length-t.value.length,t.value=e}else if(Me(t)){const e=z(t.value,{xlsx:u,allowTernary:!0}),r=e.range;l&&j(r);const o=D(e,{xlsx:u});n=o.length-t.value.length,t.value=o}return s||n?(t.loc&&(t.loc[0]+=s),s+=n,t.loc&&(t.loc[1]+=s)):s+=n,t}))},exports.fromCol=_,exports.isError=je,exports.isFunction=qe,exports.isFxPrefix=Be,exports.isLiteral=De,exports.isOperator=Pe,exports.isRange=Me,exports.isReference=ze,exports.isWhitespace=Ze,exports.mergeRefTokens=Le,exports.nodeTypes=Lt,exports.parse=function(e,t){if("string"==typeof e)Ke=Se(e,{withLocation:!1,...t,mergeRefs:!0});else{if(!Array.isArray(e))throw new Error("Parse requires a string or array of tokens.");Ke=e}for(Qe=t?.permitArrayRanges,Je=t?.permitArrayCalls,Ve=0;Ze(Ke[Ve])||Be(Ke[Ve]);)Ve++;nt(),ft(!0);const n=lt(0);return nt(Xe),n},exports.parseA1Ref=z,exports.parseR1C1Ref=wt,exports.parseStructRef=Y,exports.stringifyA1Ref=D,exports.stringifyR1C1Ref=Nt,exports.stringifyStructRef=Q,exports.toCol=U,exports.tokenTypes=It,exports.tokenize=Se,exports.translateToA1=function(e,n){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Tt;const r=M(n),o="string"==typeof e,u={...Tt,...l},s=o?Se(e,{withLocation:!1,mergeRefs:u.mergeRefs,xlsx:u.xlsx,allowTernary:u.allowTernary,r1c1:!0}):e;let c=0;const i={xlsx:u.xlsx,allowTernary:u.allowTernary};return s.forEach((e=>{if(Me(e)){const n=e.value,l=wt(n,i),o=l.range,s={},a=Ct(o.r0,o.$r0,r.top,1048575,u.wrapEdges),f=Ct(o.r1,o.$r1,r.top,1048575,u.wrapEdges);a>f?(s.top=f,s.$top=o.$r1,s.bottom=a,s.$bottom=o.$r0):(s.top=a,s.$top=o.$r0,s.bottom=f,s.$bottom=o.$r1);const p=Ct(o.c0,o.$c0,r.left,16383,u.wrapEdges),h=Ct(o.c1,o.$c1,r.left,16383,u.wrapEdges);p>h?(s.left=h,s.$left=o.$c1,s.right=p,s.$right=o.$c0):(s.left=p,s.$left=o.$c0,s.right=h,s.$right=o.$c1),isNaN(a)||isNaN(f)||isNaN(p)||isNaN(h)?(e.type=t,e.value="#REF!",delete e.groupId):(l.range=s,e.value=D(l,i)),e.loc&&(e.loc[0]+=c,c+=e.value.length-n.length,e.loc[1]+=c)}else c&&e.loc&&(e.loc[0]+=c,e.loc[1]+=c)})),o?s.map((e=>e.value)).join(""):s},exports.translateToR1C1=function(e,t){let{xlsx:n=!1,allowTernary:l=!0}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{top:r,left:o}=M(t),u="string"==typeof e,s=u?Se(e,{...At,xlsx:n,allowTernary:l}):e;let c=0;const i={xlsx:n,allowTernary:l};return s.forEach((e=>{if(Me(e)){const t=e.value,n=z(t,i),l=n.range,u={};u.r0=bt(l.$top,l.top,r),u.r1=bt(l.$bottom,l.bottom,r),u.c0=bt(l.$left,l.left,o),u.c1=bt(l.$right,l.right,o),u.$r0=l.$top,u.$r1=l.$bottom,u.$c0=l.$left,u.$c1=l.$right,n.range=u,e.value=Nt(n,i),e.loc&&(e.loc[0]+=c,c+=e.value.length-t.length,e.loc[1]+=c)}else c&&e.loc&&(e.loc[0]+=c,e.loc[1]+=c)})),u?s.map((e=>e.value)).join(""):s};
|
|
1
|
+
"use strict";const e="operator",t="error",n="range_beam",l="range_ternary",r="range_named",o="structured",s="unknown",u="UnaryExpression",i="BinaryExpression",c="ReferenceIdentifier",a="CallExpression",f="LetExpression";function p(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=!1,l="";const r=[],o=()=>{l&&r.push(t?l:{value:l,braced:n}),l=""};for(let t=0;t<e.length;t++){const r=e[t];"["===r?(o(),n=!0):"]"===r?(o(),n=!1):l+=r}return o(),r}function h(e){return{context:p(e,!0)}}function g(e){const t={},n=p(e);if(n.length>1)t.workbookName=n[n.length-2].value,t.sheetName=n[n.length-1].value;else if(1===n.length){const e=n[0];e.braced?t.workbookName=e.value:t.sheetName=e.value}return t}const d=e=>e&&":"===e.value&&{},x=e=>e&&"range"===e.type&&{r0:e.value},y=e=>e&&e.type===l&&{r0:e.value},m=e=>e&&"range"===e.type&&{r1:e.value},v=t=>t&&t.type===e&&"!"===t.value&&{},$=e=>e&&e.type===n&&{r0:e.value},w=e=>e&&e.type===o&&{struct:e.value},E=(e,t)=>{const n=t.xlsx?g:h;return e&&"context"===e.type?n(e.value):e&&"context_quote"===e.type?n(e.value.slice(1,-1).replace(/''/g,"'")):void 0},R=e=>e&&e.type===r&&{name:e.value},N=[[y],[x,d,m],[x],[$],[E,v,y],[E,v,x,d,m],[E,v,x],[E,v,$]],b=N.concat([[R],[E,v,R],[w],[R,w],[E,v,R,w]]);function A(e,t){const n={withLocation:!1,mergeRefs:!1,allowTernary:!1,allowNamed:!0,r1c1:!1,xlsx:!1,...t},l=Me(e,Ce,n),r=n.xlsx?{workbookName:"",sheetName:"",r0:"",r1:"",name:""}:{context:[],r0:"",r1:"",name:""};l.length&&"fx_prefix"===l[0].type&&l.shift();const o=n.allowNamed?b:N;for(let e=0;e<o.length;e++){const t={...r};if(o[e].length===l.length){const r=o[e].every(((e,r)=>{const o=e(l[r],n);return Object.assign(t,o),o}));if(r)return t}}return null}const C=/[^0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]/;function T(e){let t="",n=0,l=0;const r=e.context||[];for(let e=r.length;e>-1;e--){const o=r[e];if(o){t=(l%2?"["+o+"]":o)+t,n+=C.test(o),l++}}return n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}function L(e){let t="",n=0;const{workbookName:l,sheetName:r}=e;return l&&(t+="["+l+"]",n+=C.test(l)),r&&(t+=r,n+=C.test(r)),n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}const I=(e,t,n)=>Math.min(Math.max(t,e),n),k=(e,t)=>(t?"$":"")+F(e),O=(e,t)=>(t?"$":"")+String(e+1),_=String.fromCharCode;function U(e){const t=e||"",n=t.length;let l=0;if(n>2){const e=t.charCodeAt(n-3);l+=676*(1+e-(e>95?32:0)-65)}if(n>1){const e=t.charCodeAt(n-2);l+=26*(1+e-(e>95?32:0)-65)}if(n){const e=t.charCodeAt(n-1);l+=e-(e>95?32:0)-65}return l}function F(e){return(e>=702?_(((e-702)/676-0)%26+65):"")+(e>=26?_((e/26-1)%26+65):"")+_(e%26+65)}function S(e){let{top:t,left:n,bottom:l,right:r}=e;const{$left:o,$right:s,$top:u,$bottom:i}=e,c=null==n,a=null==r,f=null==t,p=null==l;t=I(0,0|t,1048575),n=I(0,0|n,16383),!c&&!f&&a&&p?(l=t,r=n):(l=I(0,0|l,1048575),r=I(0,0|r,16383));if(0===t&&l>=1048575&&!c&&!a&&(!(o&&!c||s&&!a)||n===r)||f&&p)return k(n,o)+":"+k(r,s);return 0===n&&r>=16383&&!f&&!p&&(!(u&&!f||i&&!p)||t===l)||c&&a?O(t,u)+":"+O(l,i):c||f||a||!p?c||!f||a||p?c||f||!a||p?!c||f||a||p?r!==n||l!==t||s!==o||i!==u?k(n,o)+O(t,u)+":"+k(r,s)+O(l,i):k(n,o)+O(t,u):k(r,s)+O(t,u)+":"+O(l,i):k(n,o)+O(t,u)+":"+O(l,i):k(n,o)+O(l,i)+":"+k(r,s):k(n,o)+O(t,u)+":"+k(r,s)}function M(e){const t=/^(?=.)(\$(?=\D))?([A-Za-z]{0,3})?(\$)?([1-9][0-9]{0,6})?$/.exec(e);return t&&(t[2]||t[4])?[t[4]?(n=t[4],+n-1):null,t[2]?U(t[2]):null,!!t[3],!!t[1]]:null;var n}function D(e){let t=null,n=null,l=null,r=null,o=!1,s=!1,u=!1,i=!1;const[c,a,f]=e.split(":");if(f)return null;const p=M(c),h=a?M(a):null;if(!p||a&&!h)return null;if(null!=p[0]&&null!=p[1]?[t,n,o,s]=p:null==p[0]&&null!=p[1]?[,n,,s]=p:null!=p[0]&&null==p[1]&&([t,,o]=p),a)null!=h[0]&&null!=h[1]?[l,r,u,i]=h:null==h[0]&&null!=h[1]?[,r,,i]=h:null!=h[0]&&null==h[1]&&([l,,u]=h);else{if(null==t||null==n)return null;l=t,r=n,u=o,i=s}return null!=r&&(null==n||null!=n&&r<n)&&([n,r,s,i]=[r,n,i,s]),null!=l&&(null==t||null!=t&&l<t)&&([t,l,o,u]=[l,t,u,o]),{top:t,left:n,bottom:l,right:r,$top:o,$left:s,$bottom:u,$right:i}}function z(e){let{allowNamed:t=!0,allowTernary:n=!1,xlsx:l=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=A(e,{allowNamed:t,allowTernary:n,xlsx:l,r1c1:!1});if(r&&(r.r0||r.name)){let e=null;return r.r0&&(e=D(r.r1?r.r0+":"+r.r1:r.r0)),r.name||e?(r.range=e,delete r.r0,delete r.r1,r):null}return null}function j(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t?L(e):T(e);return n+(e.name?e.name:S(e.range))}function B(e){return null==e.top&&(e.top=0,e.$top=!1),null==e.bottom&&(e.bottom=1048575,e.$bottom=!1),null==e.left&&(e.left=0,e.$left=!1),null==e.right&&(e.right=16383,e.$right=!1),e}const Z=/^\[('['#@[\]]|[^'#@[\]])+\]/i,q=/^([^#@[\]:]+)/i,P={headers:1,data:2,totals:4,all:8,"this row":16,"@":16},X=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Object.freeze(t)},W={0:X(),1:X("headers"),2:X("data"),4:X("totals"),8:X("all"),16:X("this row"),3:X("headers","data"),6:X("data","totals")},H=function(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=Z.exec(e);if(n){const e=n[0].slice(1,-1).replace(/'(['#@[\]])/g,"$1");return[n[0],e]}return t&&(n=q.exec(e),n)?[n[0],n[0]]:null};function Y(e){const t=[];let n,l,r=0,o=e,s=0;if(!(n=/^(\[\s*)/.exec(o)))return null;if(l=/^\[#([a-z ]+)\]/i.exec(o)){const e=l[1].toLowerCase();if(r+=l[0].length,!P[e])return null;s|=P[e]}else if(l=H(o,!1))r+=l[0].length,t.push(l[1]);else{let l=!0;for(o=o.slice(n[1].length),r+=n[1].length;l&&(n=/^\[#([a-z ]+)\](\s*,\s*)?/i.exec(o));){const e=n[1].toLowerCase();if(!P[e])return null;s|=P[e],o=o.slice(n[0].length),r+=n[0].length,l=!!n[2]}if(l&&(n=/^@/.exec(o))&&(s|=P["@"],o=o.slice(1),r+=1,l="]"!==o[0]),!(s in W))return null;const u=l?H(e.slice(r)):null;if(u){if(r+=u[0].length,t.push(u[1]),o=e.slice(r),":"===o[0]){o=o.slice(1),r++;const e=H(o);if(!e)return null;r+=e[0].length,t.push(e[1])}l=!1}for(;" "===e[r];)r++;if(l||"]"!==e[r])return null;r++}const u=W[s];return{columns:t,sections:u?u.concat():u,length:r,token:e.slice(0,r)}}function G(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{xlsx:!1};const n=A(e,t);if(n&&n.struct){const e=Y(n.struct);if(e&&e.length===n.struct.length)return t.xlsx?{workbookName:n.workbookName,sheetName:n.sheetName,table:n.name,columns:e.columns,sections:e.sections}:{context:n.context,table:n.name,columns:e.columns,sections:e.sections}}return null}function K(e){return e.replace(/([[\]#'@])/g,"'$1")}function V(e){return!/^[a-zA-Z0-9\u00a1-\uffff]+$/.test(e)}function Q(e){return e[0].toUpperCase()+e.slice(1).toLowerCase()}function J(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{xlsx:n,thisRow:l}=t;let r=n?L(e):T(e);e.table&&(r+=e.table);const o=e.columns?.length??0,s=e.sections?.length??0;if(1!==s||o)if(s||1!==o){r+="[";const t=!l&&1===s&&"this row"===e.sections[0].toLowerCase();t?r+="@":s&&(r+=e.sections.map((e=>`[#${Q(e)}]`)).join(","),o&&(r+=",")),t&&1===e.columns.length&&!V(e.columns[0])?r+=K(e.columns[0]):o&&(r+=e.columns.slice(0,2).map((e=>`[${K(e)}]`)).join(":")),r+="]"}else r+=`[${K(e.columns[0])}]`;else r+=`[#${Q(e.sections[0])}]`;return r}const ee=/^(?!!)(\[(?:[^\]])+\])?([0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]+)?(?=!)/,te=/^'(?:''|[^'])*('|$)(?=!)/,ne="\\$?[A-Z]{1,3}\\$?[1-9][0-9]{0,6}",le="\\$?[A-Z]{1,3}",re="\\$?[1-9][0-9]{0,6}",oe="(?![a-z0-9_\\u00a1-\\uffff])",se=new RegExp(`^${le}:${le}${oe}`,"i"),ue=new RegExp(`^${re}:${re}${oe}`,"i"),ie=new RegExp(`^${ne}${oe}`,"i"),ce=new RegExp(`^((${le}|${re}):${ne}|${ne}:(${le}|${re}))(?![\\w($.])`,"i"),ae="(?:R(?:\\[[+-]?\\d+\\]|[1-9][0-9]{0,6})?)",fe="(?:C(?:\\[[+-]?\\d+\\]|[1-9][0-9]{0,4})?)",pe=new RegExp(`^${fe}(:${fe})?${oe}`,"i"),he=new RegExp(`^${ae}(:${ae})?${oe}`,"i"),ge=new RegExp(`^(?:(?=[RC])${ae}${fe})${oe}`,"i"),de=new RegExp(`^(${ae}${fe}(:${fe}|:${ae})(?![[\\d])|(${ae}|${fe})(:${ae}${fe}))${oe}`,"i"),xe=/^[a-zA-Z\\_\u00a1-\uffff][a-zA-Z0-9\\_.?\u00a1-\uffff]{0,254}/i;function ye(e,t){return n=>{const l=t.exec(n);if(l)return{type:e,value:l[0]}}}function me(e){const t=xe.exec(e);if(t){const e=t[0].toLowerCase();return"\\"===e[0]&&t[0].length<3||("r"===e||"c"===e)?null:{type:r,value:t[0]}}}const ve=/^'(?:[^[\]]+?)?(?:\[(.+?)\])?(?:[^[\]]+?)'$/,$e=/^'\[(.+?)\]'$/;function we(e,t){const n=te.exec(e);if(n){const e=n[0];if(t.xlsx&&$e.test(e)||ve.test(e))return{type:"context_quote",value:e}}const l=ee.exec(e);if(l){const[,e,n]=l;if(e&&n||n||e&&!n&&t.xlsx)return{type:"context",value:l[0]}}}function Ee(e){const t=Y(e);if(t){let n=t.length;for(;" "===e[n];)n++;if("!"!==e[n])return{type:o,value:t.token}}return null}const Re=/([RC])(\[?)(-?\d+)/gi,Ne=/(\d+|[a-zA-Z]+)/gi;function be(e,t){let r,o;if(t.r1c1){if(t.allowTernary&&(r=de.exec(e))?o={type:l,value:r[0]}:(r=ge.exec(e))?o={type:"range",value:r[0]}:((r=he.exec(e))||(r=pe.exec(e)))&&(o={type:n,value:r[0]}),o){for(Re.lastIndex=0;null!==(r=Re.exec(o.value));){const e=("R"===r[1]?1048575:16383)+(r[2]?0:1),t=parseInt(r[3],10);if(t>e||t<-e)return null}return o}}else if(t.allowTernary&&(r=ce.exec(e))?o={type:l,value:r[0]}:(r=se.exec(e))||(r=ue.exec(e))?o={type:n,value:r[0]}:(r=ie.exec(e))&&(o={type:"range",value:r[0]}),o){for(Ne.lastIndex=0;null!==(r=Ne.exec(o.value));)if(/^\d/.test(r[1])){if(parseInt(r[1],10)-1>1048575)return null}else if(U(r[1])>16383)return null;return o}}const Ae=[ye(t,/^#(NAME\?|FIELD!|CALC!|VALUE!|REF!|DIV\/0!|NULL!|NUM!|N\/A|GETTING_DATA\b|SPILL!|UNKNOWN!|FIELD\b|CALC\b|SYNTAX\?|ERROR!|CONNECT!|BLOCKED!|EXTERNAL!)/i),ye(e,/^(<=|>=|<>|[-+/*^%&<>=]|[{},;]|[()]|@|:|!|#)/),ye("func",/^[A-Z_]+[A-Z\d_.]*(?=\()/i),ye("bool",/^(TRUE|FALSE)\b/i),ye("newline",/^\n+/),ye("whitespace",/^[ \f\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/),ye("string",/^"(?:""|[^"])*("|$)/),we,be,Ee,ye("number",/^(?:\d+(\.\d+)?(?:[eE][+-]?\d+)?|\d+)/),me],Ce=[function(t,n){return n.r1c1?"!"===t[0]?{type:e,value:t[0]}:null:"!"===t[0]||":"===t[0]?{type:e,value:t[0]}:null},we,be,Ee,me],Te={};function Le(e,t){if(e.length){const n=e[0];t[n]=t[n]||{},Le(e.slice(1),t[n])}else t.$=!0}[["range",":","range"],["range"],[n],[l],["context","!","range",":","range"],["context","!","range"],["context","!",n],["context","!",l],["context_quote","!","range",":","range"],["context_quote","!","range"],["context_quote","!",n],["context_quote","!",l],[r],["context","!",r],["context_quote","!",r],[o],[r,o],["context","!",r,o],["context_quote","!",r,o]].forEach((e=>Le(e.concat().reverse(),Te)));const Ie=function(t,n,l){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;const o=t[l-r];if(o){const s=o.type===e?o.value:o.type;if(s in n)return Ie(t,n[s],l,r+1)}return n.$?r:0};function ke(e){const t=[];for(let n=e.length-1;n>=0;n--){let l=e[n];const r=Ie(e,Te,n);if(r){const t=e.slice(n-r+1,n+1);l={...l},l.value=t.map((e=>e.value)).join(""),l.loc&&t[0].loc&&(l.loc[0]=t[0].loc[0]),n-=r-1}t.unshift(l)}return t}const Oe=(e,t)=>e&&e.type===t,_e={withLocation:!1,mergeRefs:!0,allowTernary:!1,negativeNumbers:!0,r1c1:!1},Ue=e=>e.type===r||"func"===e.type,Fe=t=>!Oe(t,e)||"%"===t.value||"}"===t.value||")"===t.value||"#"===t.value;function Se(t){let n,l=0,o=0;for(const u of t){if(u.type===e)if("("===u.value){if(o++,"func"===n.type){const e=n.value.toLowerCase();"lambda"!==e&&"let"!==e||(l=o)}}else")"===u.value&&(o--,o<l&&(l=0));else l&&u.type===s&&/^[rc]$/.test(u.value)&&(u.type=r);n=u}return t}function Me(t,n){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=Object.assign({},_e,l),{withLocation:o,mergeRefs:u,negativeNumbers:i}=r,c=[];let a=0,f=0,p=0,h=null,g=null,d=null;const x=e=>{const t=e.type===s,n=d&&d.type===s;d&&(t&&n||t&&Ue(d)||n&&Ue(e))?(d.value+=e.value,d.type=s,o&&(d.loc[1]=e.loc[1])):(c.push(e),d=e,"whitespace"!==e.type&&"newline"!==e.type&&(g=h,h=e))};if(/^=/.test(t)){a++,x({type:"fx_prefix",value:"=",...o?{loc:[0,1]}:{}})}for(;a<t.length;){const l=a,u=t.slice(a);let y="",m="";for(let e=0;e<n.length;e++){const t=n[e](u,r);if(t){y=t.type,m=t.value,a+=m.length;break}}y||(y=s,m=t[a],a++);const v={type:y,value:m,...o?{loc:[l,a]}:{}};if(d&&"func"===d.type&&"("===m){const e=d.value.toLowerCase();"lambda"!==e&&"let"!==e||f++}if(y===s){const e=m.toLowerCase();p+="r"===e||"c"===e?1:0}if("string"===y){const e=m.length;if('""'===m);else if('"'===m||'"'!==m[e-1])v.unterminated=!0;else if('""'!==m&&'"'===m[e-2]){let t=e-1;for(;'"'===m[t];)t--;!(t+1)^(e-t+1)%2==0&&(v.unterminated=!0)}}if(i&&"number"===y){const t=d;if(t&&Oe(t,e)&&"-"===t.value&&(!g||Oe(g,"fx_prefix")||!Fe(g))){const e=c.pop();v.value="-"+m,o&&(v.loc[0]=e.loc[0]),h=g,d=c[c.length-1]}}x(v)}return p&&f&&Se(c),u?ke(c):c}function De(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Me(e,Ae,t)}function ze(e){return!!e&&("range"===e.type||e.type===n||e.type===l)}function je(e){return!!e&&("range"===e.type||e.type===n||e.type===l||e.type===o||e.type===r)}function Be(e){return!!e&&("bool"===e.type||e.type===t||"number"===e.type||"string"===e.type)}function Ze(e){return!!e&&e.type===t}function qe(e){return!!e&&("whitespace"===e.type||"newline"===e.type)}function Pe(e){return!!e&&"func"===e.type}function Xe(e){return!!e&&"fx_prefix"===e.type}function We(t){return!!t&&t.type===e}const He="(END)",Ye=["ANCHORARRAY","CHOOSE","DROP","IF","IFS","INDEX","INDIRECT","LAMBDA","LET","OFFSET","REDUCE","SINGLE","SWITCH","TAKE","XLOOKUP"],Ge=e=>Ye.includes(e.toUpperCase()),Ke=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=(e&&e.value)+"";return!!je(e)||(!(!t||!We(e)||":"!==n&&","!==n&&n.trim())||(!(!Pe(e)||!Ge(n))||!(!Ze(e)||"#REF!"!==n)))},Ve=e=>!!e&&(e.type===c||("ErrorLiteral"===e.type||e.type===t)&&"#REF!"===e.value||e.type===i&&(":"===e.operator||" "===e.operator||","===e.operator)||je(e)||e.type===a&&Ge(e.callee.name)),Qe={};let Je,et,tt,nt=!1,lt=!1;function rt(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const n=new Error(e);throw n.source=et.map((e=>e.value)).join(""),n.sourceOffset=et.slice(0,t??tt).reduce(((e,t)=>e+t.value.length),0),n}function ot(){let e,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=tt;do{e=et[++n]}while(e&&(qe(e)||We(e)&&"("===e.value));return Ke(e,t)}function st(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(e&&e!==Je.id&&rt(`Expected ${e} but got ${Je.id}`),qe(et[tt])){const e=Ve(t),n=e&&ot(!1),l=e&&"("===et[tt+1].value;if(!n&&!l)for(;qe(et[tt]);)tt++}if(tt>=et.length)return void(Je=Qe[He]);const n=et[tt];let l;return tt+=1,n.unterminated&&rt("Encountered an unterminated token"),We(n)?(l=Qe[n.value],l||rt(`Unknown operator ${n.value}`)):qe(n)?l=Qe["(WHITESPACE)"]:Be(n)?l=Qe.Literal:je(n)?l=Qe[c]:Pe(n)?l=Qe["(FUNCTION)"]:rt(`Unexpected ${n.type} token: ${n.value}`),Je=Object.create(l),Je.type=n.type,Je.value=n.value,n.loc&&(Je.loc=[...n.loc]),Je}function ut(e){let t=Je;st(null,t);let n=t.nud();for(;e<Je.lbp;)t=Je,st(null,t),n=t.led(n);return n}const it={nud:()=>rt("Invalid syntax"),led:()=>rt("Missing operator")};function ct(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=Qe[e];return n?t>=n.lbp&&(n.lbp=t):(n={...it},n.id=e,n.value=e,n.lbp=t,Qe[e]=n),n}function at(e,t,n){const l=ct(e,t);return l.led=n||function(e){this.type=i,this.operator=this.value,delete this.value;const n=ut(t);return this.arguments=[e,n],this.loc&&(this.loc=[e.loc[0],n.loc[1]]),this},l}function ft(e,t){const n=ct(e,0);return n.lbp=70,n.led=t||function(e){return this.type=u,this.operator=this.value,delete this.value,this.arguments=[e],this.loc&&(this.loc[0]=e.loc[0]),this},n}function pt(e,t){const n=ct(e);return n.nud=t||function(){this.type=u,this.operator=this.value,delete this.value;const e=ut(70);return this.arguments=[e],this.loc&&(this.loc[1]=e.loc[1]),this},n}function ht(e,t){return at(e,t,(function(n){Ve(n)||rt(`Unexpected ${e} operator`);const l=ut(t);return Ve(l)||rt(`Unexpected ${Je.type} following ${this.id}`),this.type=i,this.operator=this.value.trim()?this.value:" ",delete this.value,this.arguments=[n,l],this.loc&&(this.loc=[n.loc[0],l.loc[1]]),this}))}ct(He),ht(":",80);const gt=ht(",",80);ht("(WHITESPACE)",80);const dt=e=>{const t=gt.lbp>0;return null!=e&&(gt.lbp=e?80:0),t};function xt(e){const t=[],n={};let l,r=!1;const o=dt(!1);if(")"!==Je.id)for(;!r;){qe(Je)&&st();const e=tt,o=ut(0);if(","===Je.id){if(o.type===c&&"name"===o.kind){const e=o.value.toLowerCase();e in n&&rt("Duplicate name: "+o.value),n[e]=1;const l={type:"Identifier",name:o.value};o.loc&&(l.loc=o.loc),t.push(l)}else tt=e,rt("LAMBDA argument is not a name");st(",")}else l=o,r=!0}return dt(o),delete this.value,this.type="LambdaExpression",this.params=t,this.body=l||null,e.loc&&(this.loc=[e.loc[0],Je.loc[1]]),st(")",this),this}function yt(e){const t=[],n=[],l={};let r,o=0;const s=(e,s)=>{if(r&&rt("Unexpected argument following calculation"),s&&o>=2)r=e;else{if(!(o%2))if(e&&e.type===c&&"name"===e.kind){const n=e.value.toLowerCase();n in l&&rt("Duplicate name: "+e.value),l[n]=1,t.push({type:"Identifier",name:e.value,loc:e.loc})}else o>=2?r=e:rt("Argument is not a name");else n.push(e)}o++},u=dt(!1);let i=!1;if(")"!==Je.id){for(;")"!==Je.id;)if(qe(Je)&&st(),","===Je.id)s(null),i=!0,st();else{s(ut(0),","!==Je.id),i=!1,","===Je.id&&(st(","),i=!0)}dt(u)}i&&s(null,!0),void 0===r&&rt("Unexpected end of arguments"),dt(u),delete this.value,this.type=f,this.declarations=[],t.length||rt("Unexpected end of arguments");for(let e=0;e<t.length;e++){const l={type:"LetDeclarator",id:t[e],init:n[e],loc:t[e].loc&&[t[e].loc[0],n[e].loc[1]]};this.declarations.push(l)}return this.body=r,e.loc&&(this.loc=[e.loc[0],Je.loc[1]]),st(")",this),this}function mt(){let e=1;return()=>"fxg"+e++}function vt(e,t){return null==e&&null==t||e===t}function $t(e,t){if(Array.isArray(e)!==Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!vt(e[n],t[n]))return!1;return!0}function wt(e,t){return!e&&!t||String(e).toLowerCase()===String(t).toLowerCase()}function Et(e,t){if((e.name||t.name)&&e.name!==t.name)return!1;if(e.columns||t.columns){if(e.table!==t.table)return!1;if(!$t(e.columns,t.columns))return!1;if(!$t(e.sections,t.sections))return!1}return!!(!e.range&&!t.range||vt(e.range.top,t.range.top)&&vt(e.range.bottom,t.range.bottom)&&vt(e.range.left,t.range.left)&&vt(e.range.right,t.range.right))&&!(!wt(e.workbookName,t.workbookName)||!wt(e.sheetName,t.sheetName))}function Rt(e,t,n){return e.sheetName||(e.sheetName=t),e.workbookName||(e.workbookName=n),e}ft("%"),ft("#",(function(e){return Ve(e)||rt("# expects a reference"),this.type=u,this.operator=this.value,delete this.value,this.arguments=[e],this})),pt("+"),pt("-"),pt("@"),at("^",50),at("*",40),at("/",40),at("+",30),at("-",30),at("&",20),at("=",10),at("<",10),at(">",10),at("<=",10),at(">=",10),at("<>",10),ct("Literal").nud=function(){const{type:e,value:n}=this;if(this.type="Literal",this.raw=n,"number"===e)this.value=+n;else if("bool"===e)this.value="TRUE"===n.toUpperCase();else if(e===t)this.type="ErrorLiteral",this.value=n.toUpperCase();else{if("string"!==e)throw new Error("Unsupported literal type: "+e);this.value=n.slice(1,-1).replace(/""/g,'"')}return this},ct(c).nud=function(){return this.type===r?this.kind="name":this.type===o?this.kind="table":this.type===n?this.kind="beam":this.kind="range",this.type=c,this},ct(")"),pt("(",(function(){const e=dt(!0),t=ut(0);return st(")",t),dt(e),t})),ct("(FUNCTION)").nud=function(){return this},at("(",90,(function(e){let t={type:"Identifier",name:e.value};"(FUNCTION)"!==e.id&&("LambdaExpression"===e.type||e.type===a||e.type===f||e.type===c||e.type===u&&"#"===e.value||"ErrorLiteral"===e.type&&"#REF!"===e.value?t=e:rt("Unexpected call",tt-1));const n=e.value.toLowerCase();if("lambda"===n)return xt.call(this,e);if("let"===n)return yt.call(this,e);const l=[];let r=!1;if(")"!==Je.id){const e=dt(!1);for(;")"!==Je.id;)if(qe(Je)&&st(),","===Je.id)l.push(null),r=!0,st();else{const e=ut(0);l.push(e),r=!1,","===Je.id&&(st(","),r=!0)}dt(e)}r&&l.push(null);const o=Je;return delete this.value,this.type=a,this.callee=t,e.loc&&(this.callee.loc=[...e.loc]),this.arguments=l,e.loc&&(this.loc=[e.loc[0],o.loc[1]]),st(")",this),this})),ct("}"),ct(";"),pt("{",(function(){"}"===Je.id&&rt("Unexpected empty array");let e=[],t=!1;const n=[e],l=dt(!1);for(;!t;){if(qe(Je)&&st(),Be(Je))e.push(Qe.Literal.nud.call(Je)),st();else if(nt&&Ve(Je))e.push(Qe[c].nud.call(Je)),st();else if(lt&&Pe(Je)){const t=ut(0);e.push(t)}else rt(`Unexpected ${Je.type} in array: ${Je.value}`);","===Je.id?st(","):";"===Je.id?(st(";"),e=[],n.push(e)):t=!0}const r=Je;return st("}"),dt(l),this.type="ArrayExpression",this.elements=n,this.loc&&(this.loc[1]=r.loc[1]),delete this.value,this}));const Nt=(e,t,n)=>Math.min(Math.max(t,e),n);function bt(e,t){return t?String(e+1):e?"["+e+"]":""}function At(e){let{r0:t,c0:n,r1:l,c1:r}=e;const{$c0:o,$c1:s,$r0:u,$r1:i}=e,c=null==t,a=null==n;let f=null==l,p=null==r;t=Nt(u?0:-1048575,0|t,1048575),n=Nt(o?0:-16383,0|n,16383),!c&&f&&!a&&p?(l=t,f=!1,r=n,p=!1):(l=Nt(i?0:-1048575,0|l,1048575),r=Nt(s?0:-16383,0|r,16383));if(0===t&&l>=1048575&&!a&&!p||c&&f){const e=bt(n,o),t=bt(r,s);return"C"+(e===t?e:e+":C"+t)}if(0===n&&r>=16383&&!c&&!f||a&&p){const e=bt(t,u),n=bt(l,i);return"R"+(e===n?e:e+":R"+n)}const h=bt(t,u),g=bt(l,i),d=bt(n,o),x=bt(r,s);return c||f||a||p?(c?"":"R"+h)+(a?"":"C"+d)+":"+(f?"":"R"+g)+(p?"":"C"+x):h!==g||d!==x?"R"+h+"C"+d+":R"+g+"C"+x:"R"+h+"C"+d}function Ct(e){let t=null,n=null,l=null,r=null;const o=/^R(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);o&&(o[1]?(t=parseInt(o[1],10),l=!1):o[2]?(t=parseInt(o[2],10)-1,l=!0):(t=0,l=!1),e=e.slice(o[0].length));const s=/^C(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);return s&&(s[1]?(n=parseInt(s[1],10),r=!1):s[2]?(n=parseInt(s[2],10)-1,r=!0):(n=0,r=!1),e=e.slice(s[0].length)),!o&&!s||e.length?null:[t,n,l,r]}function Tt(e){let t=null;const[n,l]=e.split(":",2),r=Ct(n);if(r){const[e,n,o,s]=r;if(!l)return null!=e&&null==n?{r0:e,c0:null,r1:e,c1:null,$r0:o,$c0:!1,$r1:o,$c1:!1}:null==e&&null!=n?{r0:null,c0:n,r1:null,c1:n,$r0:!1,$c0:s,$r1:!1,$c1:s}:{r0:e||0,c0:n||0,r1:e||0,c1:n||0,$r0:o||!1,$c0:s||!1,$r1:o||!1,$c1:s||!1};{const r=Ct(l);if(!r)return null;{t={};const[l,u,i,c]=r;null!=e&&null!=l?(t.r0=o===i?Math.min(e,l):e,t.$r0=o,t.r1=o===i?Math.max(e,l):l,t.$r1=i):null!=e&&null==l?(t.r0=e,t.$r0=o,t.r1=null,t.$r1=o):null==e&&null!=l?(t.r0=l,t.$r0=i,t.r1=null,t.$r1=i):null==e&&null==l&&(t.r0=null,t.$r0=!1,t.r1=null,t.$r1=!1),null!=n&&null!=u?(t.c0=s===c?Math.min(n,u):n,t.$c0=s,t.c1=s===c?Math.max(n,u):u,t.$c1=c):null!=n&&null==u?(t.c0=n,t.$c0=s,t.c1=null,t.$c1=s):null==n&&null!=u?(t.c0=u,t.$c0=c,t.c1=null,t.$c1=c):null==n&&null==u&&(t.c0=null,t.$c0=!1,t.c1=null,t.$c1=!1)}}}return t}function Lt(e){let{allowNamed:t=!0,allowTernary:n=!1,xlsx:l=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=A(e,{allowNamed:t,allowTernary:n,xlsx:l,r1c1:!0});if(r&&(r.r0||r.name)){const e=r.r1?Tt(r.r0+":"+r.r1):Tt(r.r0);return r.name||e?(r.range=e,delete r.r0,delete r.r1,r):null}return null}function It(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t?L(e):T(e);return n+(e.name?e.name:At(e.range))}const kt=(e,t,n)=>null==t?null:e?t:t-n,Ot={withLocation:!1,mergeRefs:!1,allowTernary:!0,r1c1:!1};function _t(e,t,n,l){let r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=e;if(null!=o&&!t){if(o=n+e,o<0){if(!r)return NaN;o=l+o+1}if(o>l){if(!r)return NaN;o-=l+1}}return o}const Ut={wrapEdges:!0,mergeRefs:!0,allowTernary:!0,xlsx:!1};const Ft=Object.freeze({OPERATOR:e,BOOLEAN:"bool",ERROR:t,NUMBER:"number",FUNCTION:"func",NEWLINE:"newline",WHITESPACE:"whitespace",STRING:"string",CONTEXT:"context",CONTEXT_QUOTE:"context_quote",REF_RANGE:"range",REF_BEAM:n,REF_TERNARY:l,REF_NAMED:r,REF_STRUCT:o,FX_PREFIX:"fx_prefix",UNKNOWN:s}),St=Object.freeze({UNARY:u,BINARY:i,REFERENCE:c,LITERAL:"Literal",ERROR:"ErrorLiteral",CALL:a,ARRAY:"ArrayExpression",IDENTIFIER:"Identifier"});exports.MAX_COLS=16383,exports.MAX_ROWS=1048575,exports.addA1RangeBounds=B,exports.addTokenMeta=function(e){let{sheetName:t="",workbookName:r=""}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const u=[];let i=null;const c=mt(),a=[],f=()=>u.length+(i?1:0);return e.forEach(((e,p)=>{if(e.index=p,e.depth=f(),"("===e.value)u.push(e),e.depth=f();else if(")"===e.value){const t=u.pop();if(t){const n=c();e.groupId=n,e.depth=t.depth,t.groupId=n}else e.error=!0}else if("{"===e.value)i?e.error=!0:(i=e,e.depth=f());else if("}"===e.value){if(i){const t=c();e.groupId=t,e.depth=i.depth,i.groupId=t}else e.error=!0;i=null}else if("range"===e.type||e.type===n||e.type===l||e.type===o){const n=e.type===o?G(e.value,{allowTernary:!0,xlsx:!0}):z(e.value,{allowTernary:!0,xlsx:!0});if(n&&(n.range||n.columns)){n.source=e.value,Rt(n,t,r);const l=a.find((e=>Et(e,n)));l?e.groupId=l.groupId:(n.groupId=c(),e.groupId=n.groupId,a.push(n))}}else e.type===s&&(e.error=!0)})),e},exports.fixRanges=function e(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{addBounds:!1};if("string"==typeof t)return e(De(t,n),n).map((e=>e.value)).join("");if(!Array.isArray(t))throw new Error("fixRanges expects an array of tokens");const{addBounds:l,r1c1:r,xlsx:s,thisRow:u}=n;if(r)throw new Error("fixRanges does not have an R1C1 mode");let i=0;return t.map((e=>{const t={...e};e.loc&&(t.loc=[...e.loc]);let n=0;if(t.type===o){const e=J(G(t.value,{xlsx:s}),{xlsx:s,thisRow:u});n=e.length-t.value.length,t.value=e}else if(ze(t)){const e=z(t.value,{xlsx:s,allowTernary:!0}),r=e.range;l&&B(r);const o=j(e,{xlsx:s});n=o.length-t.value.length,t.value=o}return i||n?(t.loc&&(t.loc[0]+=i),i+=n,t.loc&&(t.loc[1]+=i)):i+=n,t}))},exports.fromCol=U,exports.isError=Ze,exports.isFunction=Pe,exports.isFxPrefix=Xe,exports.isLiteral=Be,exports.isOperator=We,exports.isRange=ze,exports.isReference=je,exports.isWhitespace=qe,exports.mergeRefTokens=ke,exports.nodeTypes=St,exports.parse=function(e,t){if("string"==typeof e)et=De(e,{withLocation:!1,...t,mergeRefs:!0});else{if(!Array.isArray(e))throw new Error("Parse requires a string or array of tokens.");et=e}for(nt=t?.permitArrayRanges,lt=t?.permitArrayCalls,tt=0;qe(et[tt])||Xe(et[tt]);)tt++;st(),dt(!0);const n=ut(0);return st(He),n},exports.parseA1Ref=z,exports.parseR1C1Ref=Lt,exports.parseStructRef=G,exports.stringifyA1Ref=j,exports.stringifyR1C1Ref=It,exports.stringifyStructRef=J,exports.toCol=F,exports.tokenTypes=Ft,exports.tokenize=De,exports.translateToA1=function(e,n){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Ut;const r=D(n),o="string"==typeof e,s={...Ut,...l},u=o?De(e,{withLocation:!1,mergeRefs:s.mergeRefs,xlsx:s.xlsx,allowTernary:s.allowTernary,r1c1:!0}):e;let i=0;const c={xlsx:s.xlsx,allowTernary:s.allowTernary};return u.forEach((e=>{if(ze(e)){const n=e.value,l=Lt(n,c),o=l.range,u={},a=_t(o.r0,o.$r0,r.top,1048575,s.wrapEdges),f=_t(o.r1,o.$r1,r.top,1048575,s.wrapEdges);a>f?(u.top=f,u.$top=o.$r1,u.bottom=a,u.$bottom=o.$r0):(u.top=a,u.$top=o.$r0,u.bottom=f,u.$bottom=o.$r1);const p=_t(o.c0,o.$c0,r.left,16383,s.wrapEdges),h=_t(o.c1,o.$c1,r.left,16383,s.wrapEdges);p>h?(u.left=h,u.$left=o.$c1,u.right=p,u.$right=o.$c0):(u.left=p,u.$left=o.$c0,u.right=h,u.$right=o.$c1),isNaN(a)||isNaN(f)||isNaN(p)||isNaN(h)?(e.type=t,e.value="#REF!",delete e.groupId):(l.range=u,e.value=j(l,c)),e.loc&&(e.loc[0]+=i,i+=e.value.length-n.length,e.loc[1]+=i)}else i&&e.loc&&(e.loc[0]+=i,e.loc[1]+=i)})),o?u.map((e=>e.value)).join(""):u},exports.translateToR1C1=function(e,t){let{xlsx:n=!1,allowTernary:l=!0}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{top:r,left:o}=D(t),s="string"==typeof e,u=s?De(e,{...Ot,xlsx:n,allowTernary:l}):e;let i=0;const c={xlsx:n,allowTernary:l};return u.forEach((e=>{if(ze(e)){const t=e.value,n=z(t,c),l=n.range,s={};s.r0=kt(l.$top,l.top,r),s.r1=kt(l.$bottom,l.bottom,r),s.c0=kt(l.$left,l.left,o),s.c1=kt(l.$right,l.right,o),s.$r0=l.$top,s.$r1=l.$bottom,s.$c0=l.$left,s.$c1=l.$right,n.range=s,e.value=It(n,c),e.loc&&(e.loc[0]+=i,i+=e.value.length-t.length,e.loc[1]+=i)}else i&&e.loc&&(e.loc[0]+=i,e.loc[1]+=i)})),s?u.map((e=>e.value)).join(""):u};
|
|
2
2
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnguanMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
package/docs/API.md
CHANGED
|
@@ -34,13 +34,26 @@
|
|
|
34
34
|
|
|
35
35
|
**Types**
|
|
36
36
|
|
|
37
|
+
- [AstExpression](#AstExpression)
|
|
38
|
+
- [BinaryExpression](#BinaryExpression)
|
|
39
|
+
- [CallExpression](#CallExpression)
|
|
40
|
+
- [ErrorLiteral](#ErrorLiteral)
|
|
41
|
+
- [Identifier](#Identifier)
|
|
42
|
+
- [LambdaExpression](#LambdaExpression)
|
|
43
|
+
- [LetDeclarator](#LetDeclarator)
|
|
44
|
+
- [LetExpression](#LetExpression)
|
|
45
|
+
- [Literal](#Literal)
|
|
46
|
+
- [MatrixExpression](#MatrixExpression)
|
|
37
47
|
- [RangeA1](#RangeA1)
|
|
38
48
|
- [RangeR1C1](#RangeR1C1)
|
|
39
49
|
- [ReferenceA1](#ReferenceA1)
|
|
50
|
+
- [ReferenceIdentifier](#ReferenceIdentifier)
|
|
40
51
|
- [ReferenceR1C1](#ReferenceR1C1)
|
|
41
52
|
- [ReferenceStruct](#ReferenceStruct)
|
|
53
|
+
- [SourceLocation](#SourceLocation)
|
|
42
54
|
- [Token](#Token)
|
|
43
55
|
- [TokenEnhanced](#TokenEnhanced)
|
|
56
|
+
- [UnaryExpression](#UnaryExpression)
|
|
44
57
|
|
|
45
58
|
## Functions
|
|
46
59
|
|
|
@@ -165,6 +178,7 @@ Returns the same formula with the ranges updated. If an array of tokens was supp
|
|
|
165
178
|
| formula | `string` \| `Array<Token>` | | A string (an Excel formula) or a token list that should be adjusted. |
|
|
166
179
|
| [options] | `object` | `{}` | Options |
|
|
167
180
|
| [options].addBounds | `boolean` | `false` | Fill in any undefined bounds of range objects. Top to 0, bottom to 1048575, left to 0, and right to 16383. |
|
|
181
|
+
| [options].thisRow | `boolean` | `false` | Enforces using the `[#This Row]` instead of the `@` shorthand when serializing structured ranges. |
|
|
168
182
|
| [options].xlsx | `boolean` | `false` | Switches to the `[1]Sheet1!A1` or `[1]!name` prefix syntax form for external workbooks. See: [Prefixes.md](./Prefixes.md) |
|
|
169
183
|
|
|
170
184
|
##### Returns
|
|
@@ -351,7 +365,7 @@ When given a tokenlist, this function returns a new list with ranges returned as
|
|
|
351
365
|
|
|
352
366
|
---
|
|
353
367
|
|
|
354
|
-
### <a id="parse" href="#parse">#</a> parse( formula, _[options = `{}`]_ ) ⇒ `
|
|
368
|
+
### <a id="parse" href="#parse">#</a> parse( formula, _[options = `{}`]_ ) ⇒ [`AstExpression`](#AstExpression)
|
|
355
369
|
|
|
356
370
|
Parses a string formula or list of tokens into an AST.
|
|
357
371
|
|
|
@@ -378,7 +392,7 @@ The AST Abstract Syntax Tree's format is documented in [AST_format.md](./AST_for
|
|
|
378
392
|
|
|
379
393
|
##### Returns
|
|
380
394
|
|
|
381
|
-
`
|
|
395
|
+
[`AstExpression`](#AstExpression) – An AST of nodes
|
|
382
396
|
|
|
383
397
|
---
|
|
384
398
|
|
|
@@ -574,11 +588,12 @@ stringifyStructRef({
|
|
|
574
588
|
|
|
575
589
|
##### Parameters
|
|
576
590
|
|
|
577
|
-
| Name
|
|
578
|
-
|
|
|
579
|
-
| refObject
|
|
580
|
-
| [options]
|
|
581
|
-
| [options].
|
|
591
|
+
| Name | Type | Default | Description |
|
|
592
|
+
| ----------------- | ------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
593
|
+
| refObject | [`ReferenceStruct`](#ReferenceStruct) | | A structured reference object |
|
|
594
|
+
| [options] | `object` | `{}` | Options |
|
|
595
|
+
| [options].thisRow | `boolean` | `false` | Enforces using the `[#This Row]` instead of the `@` shorthand when serializing structured ranges. |
|
|
596
|
+
| [options].xlsx | `boolean` | `false` | Switches to the `[1]Sheet1!A1` or `[1]!name` prefix syntax form for external workbooks. See: [Prefixes.md](./Prefixes.md) |
|
|
582
597
|
|
|
583
598
|
##### Returns
|
|
584
599
|
|
|
@@ -775,6 +790,125 @@ A dictionary of the types used to identify token variants.
|
|
|
775
790
|
|
|
776
791
|
## Types
|
|
777
792
|
|
|
793
|
+
### <a id="AstExpression" href="#AstExpression">#</a> AstExpression = [`ReferenceIdentifier`](#ReferenceIdentifier) | [`Literal`](#Literal) | [`ErrorLiteral`](#ErrorLiteral) | [`UnaryExpression`](#UnaryExpression) | [`BinaryExpression`](#BinaryExpression) | [`CallExpression`](#CallExpression) | [`MatrixExpression`](#MatrixExpression) | [`LambdaExpression`](#LambdaExpression) | [`LetExpression`](#LetExpression)
|
|
794
|
+
|
|
795
|
+
---
|
|
796
|
+
|
|
797
|
+
### <a id="BinaryExpression" href="#BinaryExpression">#</a> BinaryExpression = `Node`
|
|
798
|
+
|
|
799
|
+
##### Properties
|
|
800
|
+
|
|
801
|
+
| Name | Type |
|
|
802
|
+
| --------- | -------------------------------------------------------------------------------------------------------------------------------------- |
|
|
803
|
+
| arguments | `Array<AstExpression>` |
|
|
804
|
+
| [loc] | [`SourceLocation`](#SourceLocation) |
|
|
805
|
+
| operator | `"="` \| `"<"` \| `">"` \| `"<="` \| `">="` \| `"<>"` \| `"-"` \| `"+"` \| `"*"` \| `"/"` \| `"^"` \| `":"` \| `" "` \| `","` \| `"&"` |
|
|
806
|
+
| type | `"BinaryExpression"` |
|
|
807
|
+
|
|
808
|
+
---
|
|
809
|
+
|
|
810
|
+
### <a id="CallExpression" href="#CallExpression">#</a> CallExpression = `Node`
|
|
811
|
+
|
|
812
|
+
##### Properties
|
|
813
|
+
|
|
814
|
+
| Name | Type |
|
|
815
|
+
| --------- | ----------------------------------- |
|
|
816
|
+
| arguments | `Array<AstExpression>` |
|
|
817
|
+
| callee | [`Identifier`](#Identifier) |
|
|
818
|
+
| [loc] | [`SourceLocation`](#SourceLocation) |
|
|
819
|
+
| type | `"CallExpression"` |
|
|
820
|
+
|
|
821
|
+
---
|
|
822
|
+
|
|
823
|
+
### <a id="ErrorLiteral" href="#ErrorLiteral">#</a> ErrorLiteral = `Node`
|
|
824
|
+
|
|
825
|
+
##### Properties
|
|
826
|
+
|
|
827
|
+
| Name | Type |
|
|
828
|
+
| ----- | ----------------------------------- |
|
|
829
|
+
| [loc] | [`SourceLocation`](#SourceLocation) |
|
|
830
|
+
| raw | `string` |
|
|
831
|
+
| type | `"ErrorLiteral"` |
|
|
832
|
+
| value | `string` |
|
|
833
|
+
|
|
834
|
+
---
|
|
835
|
+
|
|
836
|
+
### <a id="Identifier" href="#Identifier">#</a> Identifier = `Node`
|
|
837
|
+
|
|
838
|
+
##### Properties
|
|
839
|
+
|
|
840
|
+
| Name | Type |
|
|
841
|
+
| ----- | ----------------------------------- |
|
|
842
|
+
| [loc] | [`SourceLocation`](#SourceLocation) |
|
|
843
|
+
| name | `string` |
|
|
844
|
+
| type | `"Identifier"` |
|
|
845
|
+
|
|
846
|
+
---
|
|
847
|
+
|
|
848
|
+
### <a id="LambdaExpression" href="#LambdaExpression">#</a> LambdaExpression = `Node`
|
|
849
|
+
|
|
850
|
+
##### Properties
|
|
851
|
+
|
|
852
|
+
| Name | Type |
|
|
853
|
+
| ------ | ------------------------------------------- |
|
|
854
|
+
| body | `null` \| [`AstExpression`](#AstExpression) |
|
|
855
|
+
| [loc] | [`SourceLocation`](#SourceLocation) |
|
|
856
|
+
| params | `Array<Identifier>` |
|
|
857
|
+
| type | `"LambdaExpression"` |
|
|
858
|
+
|
|
859
|
+
---
|
|
860
|
+
|
|
861
|
+
### <a id="LetDeclarator" href="#LetDeclarator">#</a> LetDeclarator = `Node`
|
|
862
|
+
|
|
863
|
+
##### Properties
|
|
864
|
+
|
|
865
|
+
| Name | Type |
|
|
866
|
+
| ----- | ------------------------------------------- |
|
|
867
|
+
| id | [`Identifier`](#Identifier) |
|
|
868
|
+
| init | `null` \| [`AstExpression`](#AstExpression) |
|
|
869
|
+
| [loc] | [`SourceLocation`](#SourceLocation) |
|
|
870
|
+
| type | `"LetDeclarator"` |
|
|
871
|
+
|
|
872
|
+
---
|
|
873
|
+
|
|
874
|
+
### <a id="LetExpression" href="#LetExpression">#</a> LetExpression = `Node`
|
|
875
|
+
|
|
876
|
+
##### Properties
|
|
877
|
+
|
|
878
|
+
| Name | Type |
|
|
879
|
+
| ------------ | ------------------------------------------- |
|
|
880
|
+
| body | `null` \| [`AstExpression`](#AstExpression) |
|
|
881
|
+
| declarations | `Array<LetDeclarator>` |
|
|
882
|
+
| [loc] | [`SourceLocation`](#SourceLocation) |
|
|
883
|
+
| type | `"LetExpression"` |
|
|
884
|
+
|
|
885
|
+
---
|
|
886
|
+
|
|
887
|
+
### <a id="Literal" href="#Literal">#</a> Literal = `Node`
|
|
888
|
+
|
|
889
|
+
##### Properties
|
|
890
|
+
|
|
891
|
+
| Name | Type |
|
|
892
|
+
| ----- | ----------------------------------- |
|
|
893
|
+
| [loc] | [`SourceLocation`](#SourceLocation) |
|
|
894
|
+
| raw | `string` |
|
|
895
|
+
| type | `"Literal"` |
|
|
896
|
+
| value | `string` \| `number` \| `boolean` |
|
|
897
|
+
|
|
898
|
+
---
|
|
899
|
+
|
|
900
|
+
### <a id="MatrixExpression" href="#MatrixExpression">#</a> MatrixExpression = `Node`
|
|
901
|
+
|
|
902
|
+
##### Properties
|
|
903
|
+
|
|
904
|
+
| Name | Type |
|
|
905
|
+
| --------- | ------------------------------------------------------------------------------- |
|
|
906
|
+
| arguments | `Array<Array<(ReferenceIdentifier | Literal | ErrorLiteral | CallExpression)>>` |
|
|
907
|
+
| [loc] | [`SourceLocation`](#SourceLocation) |
|
|
908
|
+
| type | `"ArrayExpression"` |
|
|
909
|
+
|
|
910
|
+
---
|
|
911
|
+
|
|
778
912
|
### <a id="RangeA1" href="#RangeA1">#</a> RangeA1
|
|
779
913
|
|
|
780
914
|
A range in A1 style coordinates.
|
|
@@ -828,6 +962,19 @@ A reference containing an A1 style range. See [Prefixes.md] for documentation
|
|
|
828
962
|
|
|
829
963
|
---
|
|
830
964
|
|
|
965
|
+
### <a id="ReferenceIdentifier" href="#ReferenceIdentifier">#</a> ReferenceIdentifier = `Node`
|
|
966
|
+
|
|
967
|
+
##### Properties
|
|
968
|
+
|
|
969
|
+
| Name | Type |
|
|
970
|
+
| ----- | ---------------------------------------------- |
|
|
971
|
+
| kind | `"name"` \| `"range"` \| `"beam"` \| `"table"` |
|
|
972
|
+
| [loc] | [`SourceLocation`](#SourceLocation) |
|
|
973
|
+
| type | `"ReferenceIdentifier"` |
|
|
974
|
+
| value | `string` |
|
|
975
|
+
|
|
976
|
+
---
|
|
977
|
+
|
|
831
978
|
### <a id="ReferenceR1C1" href="#ReferenceR1C1">#</a> ReferenceR1C1
|
|
832
979
|
|
|
833
980
|
A reference containing a R1C1 style range. See [Prefixes.md] for documentation on how scopes work in Fx.
|
|
@@ -860,6 +1007,10 @@ A reference containing a table slice definition. See [Prefixes.md] for documen
|
|
|
860
1007
|
|
|
861
1008
|
---
|
|
862
1009
|
|
|
1010
|
+
### <a id="SourceLocation" href="#SourceLocation">#</a> SourceLocation = `Array<number>`
|
|
1011
|
+
|
|
1012
|
+
---
|
|
1013
|
+
|
|
863
1014
|
### <a id="Token" href="#Token">#</a> Token extends `Record<string, any>`
|
|
864
1015
|
|
|
865
1016
|
A formula language token.
|
|
@@ -890,4 +1041,17 @@ A token with extra meta data.
|
|
|
890
1041
|
|
|
891
1042
|
---
|
|
892
1043
|
|
|
1044
|
+
### <a id="UnaryExpression" href="#UnaryExpression">#</a> UnaryExpression = `Node`
|
|
1045
|
+
|
|
1046
|
+
##### Properties
|
|
1047
|
+
|
|
1048
|
+
| Name | Type |
|
|
1049
|
+
| --------- | ----------------------------------------- |
|
|
1050
|
+
| arguments | `Array<AstExpression>` |
|
|
1051
|
+
| [loc] | [`SourceLocation`](#SourceLocation) |
|
|
1052
|
+
| operator | `"+"` \| `"-"` \| `"%"` \| `"#"` \| `"@"` |
|
|
1053
|
+
| type | `"UnaryExpression"` |
|
|
1054
|
+
|
|
1055
|
+
---
|
|
1056
|
+
|
|
893
1057
|
|