├── .eslintignore
├── .eslintrc.cjs
├── .gitignore
├── .prettierrc
├── README.md
├── demo
├── en-US.json
├── index.html
├── pt-BR.json
└── styles.css
├── dist
└── editor.bundle.js
├── package-lock.json
├── package.json
├── rollup.config.js
├── src
├── autocompletion.ts
├── editor.ts
├── idiom-decimal-separator.ts
├── indent-completion-tab.ts
└── prettier.ts
└── tsconfig.json
/.eslintignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
--------------------------------------------------------------------------------
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | browser: true,
5 | node: true
6 | },
7 | parserOptions: {
8 | ecmaVersion: 2020,
9 | parser: '@typescript-eslint/parser'
10 | },
11 | plugins: [
12 | '@typescript-eslint',
13 | 'prettier'
14 | ],
15 | extends: [
16 | 'eslint:recommended',
17 | 'plugin:@typescript-eslint/recommended',
18 | 'prettier'
19 | ],
20 | rules: {
21 | "no-console": 1,
22 | "prettier/prettier": 2
23 | }
24 | };
25 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "semi": true,
3 | "trailingComma": "none",
4 | "singleQuote": true,
5 | "printWidth": 80,
6 | "tabWidth": 2,
7 | "useTabs": false
8 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # CodeMirror Spreadsheet app
2 |
3 | This repository is a demo implementation of the CodeMirror [spreadsheet language package](https://github.com/luizzappa/codemirror-lang-spreadsheet).
4 |
5 | 
6 |
7 | 👉 [Live demo](https://luizzappa.github.io/codemirror-app-spreadsheet/)
8 |
9 | ## Features
10 |
11 | 🔤 Syntax highlighting
12 |
13 | 🌎 Autocomplete with internationalization
14 |
15 | ✨ Prettier
16 |
17 | ## Usage
18 |
19 | Clone repository and install dependencies. Then run:
20 |
21 | ```
22 | npm run start
23 | ```
24 |
25 | ## List of functions
26 |
27 | The list of functions is stored as json for each idiom. They're fecthed asnychronously after an idiom change. The list **may not be complete with all functions**, the purpose here is just to illustrate how to implement autocomplete with internationalization.
28 |
--------------------------------------------------------------------------------
/demo/en-US.json:
--------------------------------------------------------------------------------
1 | ["ABS","ACCRINT","ACCRINTM","ACOS","ACOSH","ACOT","ACOTH","AGGREGATE","ADDRESS","AMORDEGRC","AMORLINC","AND","ARABIC","AREAS","ARRAYTOTEXT","ASC","ASIN","ASINH","ATAN","ATAN2","ATANH","AVEDEV","AVERAGE","AVERAGEA","AVERAGEIF","AVERAGEIFS","BAHTTEXT","BASE","BESSELI","BESSELJ","BESSELK","BESSELY","BETADIST","BETA.DIST","BETAINV","BETA.INV","BIN2DEC","BIN2HEX","BIN2OCT","BINOMDIST","BINOM.DIST","BINOM.DIST.RANGE","BINOM.INV","BITAND","BITLSHIFT","BITOR","BITRSHIFT","BITXOR","BYCOL","BYROW","CALL","CEILING","CEILING.MATH","CEILING.PRECISE","CELL","CHAR","CHIDIST","CHIINV","CHITEST","CHISQ.DIST","CHISQ.DIST.RT","CHISQ.INV","CHISQ.INV.RT","CHISQ.TEST","CHOOSE","CHOOSECOLS","CHOOSEROWS","CLEAN","CODE","COLUMN","COLUMNS","COMBIN","COMBINA","COMPLEX","CONCAT","CONCATENATE","CONFIDENCE","CONFIDENCE.NORM","CONFIDENCE.T","CONVERT","CORREL","COS","COSH","COT","COTH","COUNT","COUNTA","COUNTBLANK","COUNTIF","COUNTIFS","COUPDAYBS","COUPDAYS","COUPDAYSNC","COUPNCD","COUPNUM","COUPPCD","COVAR","COVARIANCE.P","COVARIANCE.S","CRITBINOM","CSC","CSCH","CUBEKPIMEMBER","CUBEMEMBER","CUBEMEMBERPROPERTY","CUBERANKEDMEMBER","CUBESET","CUBESETCOUNT","CUBEVALUE","CUMIPMT","CUMPRINC","DATE","DATEDIF","DATEVALUE","DAVERAGE","DAY","DAYS","DAYS360","DB","DBCS","DCOUNT","DCOUNTA","DDB","DEC2BIN","DEC2HEX","DEC2OCT","DECIMAL","DEGREES","DELTA","DEVSQ","DGET","DISC","DMAX","DMIN","DOLLAR","DOLLARDE","DOLLARFR","DPRODUCT","DROP","DSTDEV","DSTDEVP","DSUM","DURATION","DVAR","DVARP","EDATE","EFFECT","ENCODEURL","EOMONTH","ERF","ERF.PRECISE","ERFC","ERFC.PRECISE","ERROR.TYPE","EUROCONVERT","EVEN","EXACT","EXP","EXPAND","EXPON.DIST","EXPONDIST","FACT","FACTDOUBLE","FALSE","F.DIST","FDIST","F.DIST.RT","FILTER","FILTERXML","FIND","F.INV","F.INV.RT","FINV","FISHER","FISHERINV","FIXED","FLOOR","FLOOR.MATH","FLOOR.PRECISE","FORECAST","Forecastings","FORMULATEXT","FREQUENCY","F.TEST","FTEST","FV","FVSCHEDULE","GAMMA","GAMMA.DIST","GAMMADIST","GAMMA.INV","GAMMAINV","GAMMALN","GAMMALN.PRECISE","GAUSS","GCD","GEOMEAN","GESTEP","GETPIVOTDATA","GROWTH","HARMEAN","HEX2BIN","HEX2DEC","HEX2OCT","HLOOKUP","HOUR","HSTACK","HYPERLINK","HYPGEOM.DIST","HYPGEOMDIST","IF","IFERROR","IFNA","IFS","IMABS","IMAGINARY","IMARGUMENT","IMCONJUGATE","IMCOS","IMCOSH","IMCOT","IMCSC","IMCSCH","IMDIV","IMEXP","IMLN","IMLOG10","IMLOG2","IMPOWER","IMPRODUCT","IMREAL","IMSEC","IMSECH","IMSIN","IMSINH","IMSQRT","IMSUB","IMSUM","IMTAN","INDEX","INDIRECT","INFO","INT","INTERCEPT","INTRATE","IPMT","IRR","ISBLANK","ISERR","ISERROR","ISEVEN","ISFORMULA","ISLOGICAL","ISNA","ISNONTEXT","ISNUMBER","ISODD","ISOMITTED","ISREF","ISTEXT","ISO.CEILING","ISOWEEKNUM","ISPMT","JIS","KURT","LAMBDA","LARGE","LCM","LEFT","LEN","LET","LINEST","LN","LOG","LOG10","LOGEST","LOGINV","LOGNORM.DIST","LOGNORMDIST","LOGNORM.INV","LOOKUP","LOWER","MAKEARRAY","MAP","MATCH","MAX","MAXA","MAXIFS","MDETERM","MDURATION","MEDIAN","MID","MIN","MINIFS","MINA","MINUTE","MINVERSE","MIRR","MMULT","MOD","MODE","MODE.MULT","MODE.SNGL","MONTH","MROUND","MULTINOMIAL","MUNIT","N","NA","NEGBINOM.DIST","NEGBINOMDIST","NETWORKDAYS","NETWORKDAYS.INTL","NOMINAL","NORM.DIST","NORMDIST","NORMINV","NORM.INV","NORM.S.DIST","NORMSDIST","NORM.S.INV","NORMSINV","NOT","NOW","NPER","NPV","NUMBERVALUE","OCT2BIN","OCT2DEC","OCT2HEX","ODD","ODDFPRICE","ODDFYIELD","ODDLPRICE","ODDLYIELD","OFFSET","OR","PDURATION","PEARSON","PERCENTILE.EXC","PERCENTILE.INC","PERCENTILE","PERCENTRANK.EXC","PERCENTRANK.INC","PERCENTRANK","PERMUT","PERMUTATIONA","PHI","PHONETIC","PI","PMT","POISSON.DIST","POISSON","POWER","PPMT","PRICE","PRICEDISC","PRICEMAT","PROB","PRODUCT","PROPER","PV","QUARTILE","QUARTILE.EXC","QUARTILE.INC","QUOTIENT","RADIANS","RAND","RANDARRAY","RANDBETWEEN","RANK.AVG","RANK.EQ","RANK","RATE","RECEIVED","REDUCE","REGISTER.ID","REPLACE","REPT","RIGHT","ROMAN","ROUND","ROUNDDOWN","ROUNDUP","ROW","ROWS","RRI","RSQ","RTD","SCAN","SEARCH","SEC","SECH","SECOND","SEQUENCE","SERIESSUM","SHEET","SHEETS","SIGN","SIN","SINH","SKEW","SKEW.P","SLN","SLOPE","SMALL","SORT","SORTBY","SQRT","SQRTPI","STANDARDIZE","STOCKHISTORY","STDEV","STDEV.P","STDEV.S","STDEVA","STDEVP","STDEVPA","STEYX","SUBSTITUTE","SUBTOTAL","SUM","SUMIF","SUMIFS","SUMPRODUCT","SUMSQ","SUMX2MY2","SUMX2PY2","SUMXMY2","SWITCH","SYD","T","TAN","TANH","TAKE","TBILLEQ","TBILLPRICE","TBILLYIELD","T.DIST","T.DIST.2T","T.DIST.RT","TDIST","TEXT","TEXTAFTER","TEXTBEFORE","TEXTJOIN","TEXTSPLIT","TIME","TIMEVALUE","T.INV","T.INV.2T","TINV","TOCOL","TOROW","TODAY","TRANSPOSE","TREND","TRIM","TRIMMEAN","TRUE","TRUNC","T.TEST","TTEST","TYPE","UNICHAR","UNICODE","UNIQUE","UPPER","VALUE","VALUETOTEXT","VAR","VAR.P","VAR.S","VARA","VARP","VARPA","VDB","VLOOKUP","VSTACK","WEBSERVICE","WEEKDAY","WEEKNUM","WEIBULL","WEIBULL.DIST","WORKDAY","WORKDAY.INTL","WRAPCOLS","WRAPROWS","XIRR","XLOOKUP","XMATCH","XNPV","XOR","YEAR","YEARFRAC","YIELD","YIELDDISC","YIELDMAT","Z.TEST","ZTEST"]
--------------------------------------------------------------------------------
/demo/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Excel formula editor - CodeMirror6
8 |
9 |
10 |
11 |
12 | Excel formula editor
13 |
14 |
15 |
42 |
43 |
44 |
45 |
46 |
47 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/demo/pt-BR.json:
--------------------------------------------------------------------------------
1 | ["ABS","ACOS","ACOSH","ACOT ","ACOTH ","AGORA","AGREGAR","ALEATÓRIO","ALEATÓRIOENTRE","AMORDEGRC","AMORLINC","ANO","ARÁBICO ","ÁREAS","ARRED","ARREDMULTB","ARREDMULTB.MAT ","ARREDMULTB.PRECISO","ARREDONDAR.PARA.BAIXO","ARREDONDAR.PARA.CIMA","ARRUMAR","ASC","ASEN","ASENH","ATAN","ATAN2","ATANH","BAHTTEXT","BASE","BD","BDCONTAR","BDCONTARA","BDDESVPA","BDEST","BDEXTRAIR","BDMÁX","BDMÉDIA","BDMÍN","BDMULTIPL","BDSOMA","BDV","BDVAREST","BDVARP","BESSELI","BESSELJ","BESSELK","BESSELY","BETA.ACUM.INV","BINADEC","BINAHEX","BINAOCT","BITAND ","BITOR ","BITXOR ","CARACT","CARACTUNICODE ","CÉL","CHAMAR","CODIFURL ","CÓDIGO","COL","COLS","COMBIN","COMBINA ","COMPLEXO","CONCAT ","CONCATENAR","CONJUNTOCUBO","CONT.NÚM","CONT.SE","CONT.SES","CONT.VALORES","CONTAGEMCONJUNTOCUBO","CONTAR.VAZIO","CONVERTER","CONVERTEREURO","CORREL","CORRESP","COS","COSEC ","COSECH ","COSH","COT ","COTH ","COVAR","COVARIAÇÃO.P ","COVARIAÇÃO.S ","CRESCIMENTO","CRIT.BINOM","CUPDATAANT","CUPDATAPRÓX","CUPDIAS","CUPDIASINLIQ","CUPDIASPRÓX","CUPNÚM","CURT","DATA","DATA.VALOR","DATADIF","DATAM","DBCS ","DECABIN","DECAHEX","DECAOCT","DECIMAL ","DEGRAU","DELTA","DESC","DESLOC","DESLOCDIRBIT ","DESLOCESQBIT ","DESV.MÉDIO","DESVPAD","DESVPAD.A ","DESVPAD.P ","DESVPADA","DESVPADP","DESVPADPA","DESVQ","DIA","DIA.DA.SEMANA","DIAS ","DIAS360","DIATRABALHO","DIATRABALHO.INTL ","DIATRABALHOTOTAL","DIATRABALHOTOTAL.INTL ","DIREITA","DIST.BETA ","DIST.BIN.NEG","DIST.BIN.NEG.N ","DIST.F ","DIST.F.CD ","DIST.GAMA ","DIST.HIPERGEOM","DIST.HIPERGEOM.N","DIST.LOGNORMAL.N ","DIST.NORM","DIST.NORM.N ","DIST.NORMP","DIST.NORMP.N ","DIST.POISSON ","DIST.QUI","DIST.QUIQUA ","DIST.QUIQUA.CD ","DIST.T ","DIST.T.BC ","DIST.T.CD ","DIST.WEIBULL ","DISTBETA","DISTEXPON","DISTF","DISTGAMA","DISTLOGNORMAL","DISTORÇÃO","DISTORÇÃO.P ","DISTR.BINOM ","DISTR.EXPON ","DISTRBINOM","DISTT","DPD","DURAÇÃO","DURAÇÃOP ","E","É.NÃO.DISP","É.NÃO.TEXTO","ÉCÉL.VAZIA","ÉERRO","ÉERROS","EFETIVA","ÉFÓRMULA ","ÉIMPAR","ÉLÓGICO","ENDEREÇO","ÉNÚM","EPADYX,","ÉPAR","ÉPGTO","ÉREF","ESCOLHER","ESQUERDA","ÉTEXTO","EXATO","EXP","EXT.TEXTO","FATDUPLO","FATORIAL","FILTROXML ","FIMMÊS","FISHER","FISHERINV","FIXO","FONÉTICA","FÓRMULATEXTO ","FRAÇÃOANO","FREQUÊNCIA","função","FUNERRO","FUNERRO.PRECISO ","FUNERROCOMPL","FUNERROCOMPL.PRECISO ","GAMA ","GAUSS ","GRAUS","HEXABIN","HEXADEC","HEXAOCT","HIPERLINK","HOJE","HORA","IDENT.REGISTRO","IFS ","IMABS","IMAGINÁRIO","IMARG","IMCONJ","IMCOS","IMCOSEC ","IMCOSECH ","IMCOSH ","IMCOT ","IMDIV","IMEXP","IMLN","IMLOG10","IMLOG2","ÍMPAR","IMPOT","IMPROD","IMRAIZ","IMREAL","IMSEC ","IMSECH ","IMSENH ","IMSENO","IMSOMA","IMSUBTR","IMTAN ","INCLINAÇÃO","ÍNDICE","INDIRETO","INFODADOSTABELADINÂMICA","INFORMAÇÃO","INT","INT.CONFIANÇA","INT.CONFIANÇA.NORM ","INT.CONFIANÇA.T ","INTERCEPÇÃO","INTERV.DISTR.BINOM ","INV.BETA ","INV.BINOM ","INV.F ","INV.F.CD ","INV.GAMA ","INV.LOGNORMAL ","INV.NORM","INV.NORM.N ","INV.NORMP","INV.NORMP.N ","INV.QUI","INV.QUIQUA ","INV.QUIQUA.CD ","INV.T ","INV.T.BC ","INVF","INVGAMA","INVLOG","INVT","IPGTO","ISO.TETO ","JIS","JUROSACUM","JUROSACUMV","LIN","LINS","LN","LNGAMA","LNGAMA.PRECISO ","LOCALIZAR","LOG","LOG10","LUCRO","LUCRODESC","LUCROPRIMINC","LUCROÚLTINC","LUCROVENC","MAIOR","MAIÚSCULA","MARRED","MATRIZ.DETERM","MATRIZ.INVERSO","MATRIZ.MULT","MAXIFS ","MÁXIMO","MÁXIMOA","MDC","MDURAÇÃO","MED","MÉDIA","MÉDIA.GEOMÉTRICA","MÉDIA.HARMÔNICA","MÉDIA.INTERNA","MÉDIAA","MÉDIASE","MÉDIASES","MEMBROCLASSIFICADOCUBO","MEMBROCUBO","MEMBROKPICUBO","MENOR","MÊS","MINIFS ","MÍNIMO","MÍNIMOA","MINÚSCULA","MINUTO","MMC","MOD","MODO","MODO.MULT ","MODO.ÚNICO ","MOEDA","MOEDADEC","MOEDAFRA","MTIR","MUDAR","MULTINOMIAL","MUNIT ","N","NÃO","NÃO.DISP","NOMINAL","NPER","NÚM.CARACT","NÚMSEMANA","NÚMSEMANAISO ","OCTABIN","OCTADEC","OCTAHEX","ORDEM","ORDEM.EQ ","ORDEM.MÉD ","ORDEM.PORCENTUAL","ORDEM.PORCENTUAL.EXC ","ORDEM.PORCENTUAL.INC ","OTN","OTNLUCRO","OTNVALOR","OU","PADRONIZAR","PAR","PEARSON","PERCENTIL","PERCENTIL.EXC ","PERCENTIL.INC ","PERMUT","PERMUTAS ","PGTO","PGTOCAPACUM","PGTOJURACUM","PHI ","PI","PLAN ","PLANS ","POISSON","POTÊNCIA","PPGTO","PREÇO","PREÇODESC","PREÇOPRIMINC","PREÇOÚLTINC","PREÇOVENC","PREVISÃO","PREVISÃO.ETS ","PREVISÃO.ETS.CONFINT ","PREVISÃO.ETS.SAZONALIDADE","PREVISÃO.ETS.STAT ","PREVISÃO.LINEAR ","PRI.MAIÚSCULA","PROB","PROC","PROCH","PROCURAR","PROCV","PRODUTO","PROJ.LIN","PROJ.LOG","PROPRIEDADEMEMBROCUBO","QUARTIL","QUARTIL.EXC ","QUARTIL.INC ","QUOCIENTE","RADIANOS","RAIZ","RAIZPI","RECEBER","REPT","ROMANO","RQUAD","RTD","SDA","SE","SEC ","SECH ","SEERRO","SEGUNDO","SEN","SENÃODISP ","SENH","SERVIÇOWEB ","SINAL","SOMA","SOMAQUAD","SOMARPRODUTO","SOMASE","SOMASEQUÊNCIA","SOMASES","SOMAX2DY2","SOMAX2SY2","SOMAXMY2","SQL.REQUEST","SUBSTITUIR","SUBTOTAL","SWITCH ","T","TAN","TANH","TAXA","TAXAJURO ","TAXAJUROS","TEMPO","TENDÊNCIA","TESTE.F ","TESTE.QUI","TESTE.QUIQUA ","TESTE.T ","TESTE.Z ","TESTEF","TESTET","TESTEZ","TETO","TETO.MAT ","TETO.PRECISO","TEXTJOIN ","TEXTO","TIPO","TIPO.ERRO","TIR","TIRAR","TRANSPOR","TRUNCAR","UNICODE ","VALOR","VALOR.TEMPO","VALORCUBO","VALORNUMÉRICO ","VAR.A ","VAR.P ","VARA","VAREST","VARP","VARPA","VF","VFPLANO","VP","VPL","WEIBULL","XOR ","XTIR","XVPL","FALSE","TRUE"]
--------------------------------------------------------------------------------
/demo/styles.css:
--------------------------------------------------------------------------------
1 | html,
2 | body {
3 | margin: 10px;
4 | min-height: calc(100vh - 40px);
5 | display: flex;
6 | flex-direction: column;
7 | background: #fff;
8 | color: #444;
9 | font-family: "Gill Sans", "Gill Sans MT", Calibri, "Trebuchet MS", sans-serif;
10 | }
11 |
12 | header {
13 | min-height: 50px;
14 | }
15 |
16 | main {
17 | flex: 1
18 | }
19 |
20 | footer {
21 | min-height: 50px;
22 | align-self: center;
23 | display: flex;
24 | place-items: flex-start;
25 | gap: 25px;
26 | width: max-content;
27 | }
28 |
29 | h1 {
30 | margin-bottom: 50px;
31 | }
32 |
33 | #lang {
34 | margin-bottom: 25px;
35 | }
36 |
37 | .menu-container {
38 | width: 100%;
39 | min-width: 668px;
40 | }
41 |
42 | .left-menu {
43 | display: inline-flex;
44 | gap: 20px;
45 | }
46 |
47 | .right-menu {
48 | float: right;
49 | }
50 |
51 | .right-menu div {
52 | display: inline;
53 | }
54 |
55 | a:link, a:visited {
56 | background-color: #3672f4;
57 | color: white;
58 | padding: 7px 12px;
59 | text-align: center;
60 | text-decoration: none;
61 | display: inline-block;
62 | }
63 |
64 | a:hover, a:active {
65 | background-color: rgb(30, 26, 233);
66 | }
67 |
68 | #editor {
69 | min-height: 25px;
70 | max-height: calc(100vh - 40px - 30vh);
71 | }
72 | .cm-editor {
73 | height: 100%;
74 | max-height: inherit;
75 | }
76 | .cm-scroller { overflow: auto }
77 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "codemirror-app-spreadsheet",
3 | "version": "1.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "codemirror-app-spreadsheet",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "dependencies": {
12 | "@codemirror/autocomplete": "^6.4.2",
13 | "@codemirror/commands": "^6.2.1",
14 | "@codemirror/lang-javascript": "^6.1.4",
15 | "@codemirror/state": "^6.2.0",
16 | "@codemirror/view": "^6.9.2",
17 | "@rollup/plugin-node-resolve": "^15.0.1",
18 | "codemirror": "^6.0.1",
19 | "codemirror-lang-spreadsheet": "^1.0.3",
20 | "rollup": "^3.18.0"
21 | },
22 | "devDependencies": {
23 | "@codemirror/language": "^6.6.0",
24 | "@lezer/highlight": "^1.1.3",
25 | "@typescript-eslint/eslint-plugin": "^5.57.0",
26 | "eslint": "^8.37.0",
27 | "eslint-config-prettier": "^8.8.0",
28 | "eslint-plugin-prettier": "^4.2.1",
29 | "prettier": "^2.8.7",
30 | "rollup-plugin-dts": "^5.3.0",
31 | "rollup-plugin-serve": "^2.0.2",
32 | "rollup-plugin-ts": "^3.2.0",
33 | "typescript": "^4.9.5"
34 | }
35 | },
36 | "node_modules/@babel/code-frame": {
37 | "version": "7.18.6",
38 | "dev": true,
39 | "license": "MIT",
40 | "optional": true,
41 | "dependencies": {
42 | "@babel/highlight": "^7.18.6"
43 | },
44 | "engines": {
45 | "node": ">=6.9.0"
46 | }
47 | },
48 | "node_modules/@babel/helper-validator-identifier": {
49 | "version": "7.19.1",
50 | "dev": true,
51 | "license": "MIT",
52 | "optional": true,
53 | "engines": {
54 | "node": ">=6.9.0"
55 | }
56 | },
57 | "node_modules/@babel/highlight": {
58 | "version": "7.18.6",
59 | "dev": true,
60 | "license": "MIT",
61 | "optional": true,
62 | "dependencies": {
63 | "@babel/helper-validator-identifier": "^7.18.6",
64 | "chalk": "^2.0.0",
65 | "js-tokens": "^4.0.0"
66 | },
67 | "engines": {
68 | "node": ">=6.9.0"
69 | }
70 | },
71 | "node_modules/@codemirror/autocomplete": {
72 | "version": "6.4.2",
73 | "license": "MIT",
74 | "dependencies": {
75 | "@codemirror/language": "^6.0.0",
76 | "@codemirror/state": "^6.0.0",
77 | "@codemirror/view": "^6.6.0",
78 | "@lezer/common": "^1.0.0"
79 | },
80 | "peerDependencies": {
81 | "@codemirror/language": "^6.0.0",
82 | "@codemirror/state": "^6.0.0",
83 | "@codemirror/view": "^6.0.0",
84 | "@lezer/common": "^1.0.0"
85 | }
86 | },
87 | "node_modules/@codemirror/commands": {
88 | "version": "6.2.1",
89 | "license": "MIT",
90 | "dependencies": {
91 | "@codemirror/language": "^6.0.0",
92 | "@codemirror/state": "^6.2.0",
93 | "@codemirror/view": "^6.0.0",
94 | "@lezer/common": "^1.0.0"
95 | }
96 | },
97 | "node_modules/@codemirror/lang-javascript": {
98 | "version": "6.1.4",
99 | "license": "MIT",
100 | "dependencies": {
101 | "@codemirror/autocomplete": "^6.0.0",
102 | "@codemirror/language": "^6.6.0",
103 | "@codemirror/lint": "^6.0.0",
104 | "@codemirror/state": "^6.0.0",
105 | "@codemirror/view": "^6.0.0",
106 | "@lezer/common": "^1.0.0",
107 | "@lezer/javascript": "^1.0.0"
108 | }
109 | },
110 | "node_modules/@codemirror/lang-javascript/node_modules/@codemirror/lint": {
111 | "version": "6.2.0",
112 | "license": "MIT",
113 | "dependencies": {
114 | "@codemirror/state": "^6.0.0",
115 | "@codemirror/view": "^6.0.0",
116 | "crelt": "^1.0.5"
117 | }
118 | },
119 | "node_modules/@codemirror/language": {
120 | "version": "6.6.0",
121 | "license": "MIT",
122 | "dependencies": {
123 | "@codemirror/state": "^6.0.0",
124 | "@codemirror/view": "^6.0.0",
125 | "@lezer/common": "^1.0.0",
126 | "@lezer/highlight": "^1.0.0",
127 | "@lezer/lr": "^1.0.0",
128 | "style-mod": "^4.0.0"
129 | }
130 | },
131 | "node_modules/@codemirror/state": {
132 | "version": "6.2.0",
133 | "license": "MIT"
134 | },
135 | "node_modules/@codemirror/view": {
136 | "version": "6.9.2",
137 | "license": "MIT",
138 | "dependencies": {
139 | "@codemirror/state": "^6.1.4",
140 | "style-mod": "^4.0.0",
141 | "w3c-keyname": "^2.2.4"
142 | }
143 | },
144 | "node_modules/@eslint-community/eslint-utils": {
145 | "version": "4.4.0",
146 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
147 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
148 | "dev": true,
149 | "dependencies": {
150 | "eslint-visitor-keys": "^3.3.0"
151 | },
152 | "engines": {
153 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
154 | },
155 | "peerDependencies": {
156 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
157 | }
158 | },
159 | "node_modules/@eslint-community/regexpp": {
160 | "version": "4.5.0",
161 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz",
162 | "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==",
163 | "dev": true,
164 | "engines": {
165 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
166 | }
167 | },
168 | "node_modules/@eslint/eslintrc": {
169 | "version": "2.0.2",
170 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz",
171 | "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==",
172 | "dev": true,
173 | "dependencies": {
174 | "ajv": "^6.12.4",
175 | "debug": "^4.3.2",
176 | "espree": "^9.5.1",
177 | "globals": "^13.19.0",
178 | "ignore": "^5.2.0",
179 | "import-fresh": "^3.2.1",
180 | "js-yaml": "^4.1.0",
181 | "minimatch": "^3.1.2",
182 | "strip-json-comments": "^3.1.1"
183 | },
184 | "engines": {
185 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
186 | },
187 | "funding": {
188 | "url": "https://opencollective.com/eslint"
189 | }
190 | },
191 | "node_modules/@eslint/js": {
192 | "version": "8.37.0",
193 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.37.0.tgz",
194 | "integrity": "sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==",
195 | "dev": true,
196 | "engines": {
197 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
198 | }
199 | },
200 | "node_modules/@humanwhocodes/config-array": {
201 | "version": "0.11.8",
202 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
203 | "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
204 | "dev": true,
205 | "dependencies": {
206 | "@humanwhocodes/object-schema": "^1.2.1",
207 | "debug": "^4.1.1",
208 | "minimatch": "^3.0.5"
209 | },
210 | "engines": {
211 | "node": ">=10.10.0"
212 | }
213 | },
214 | "node_modules/@humanwhocodes/module-importer": {
215 | "version": "1.0.1",
216 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
217 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
218 | "dev": true,
219 | "engines": {
220 | "node": ">=12.22"
221 | },
222 | "funding": {
223 | "type": "github",
224 | "url": "https://github.com/sponsors/nzakas"
225 | }
226 | },
227 | "node_modules/@humanwhocodes/object-schema": {
228 | "version": "1.2.1",
229 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
230 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
231 | "dev": true
232 | },
233 | "node_modules/@jridgewell/sourcemap-codec": {
234 | "version": "1.4.14",
235 | "dev": true,
236 | "license": "MIT"
237 | },
238 | "node_modules/@lezer/common": {
239 | "version": "1.0.2",
240 | "license": "MIT"
241 | },
242 | "node_modules/@lezer/highlight": {
243 | "version": "1.1.3",
244 | "license": "MIT",
245 | "dependencies": {
246 | "@lezer/common": "^1.0.0"
247 | }
248 | },
249 | "node_modules/@lezer/javascript": {
250 | "version": "1.4.1",
251 | "license": "MIT",
252 | "dependencies": {
253 | "@lezer/highlight": "^1.1.3",
254 | "@lezer/lr": "^1.3.0"
255 | }
256 | },
257 | "node_modules/@lezer/lr": {
258 | "version": "1.3.3",
259 | "license": "MIT",
260 | "dependencies": {
261 | "@lezer/common": "^1.0.0"
262 | }
263 | },
264 | "node_modules/@mdn/browser-compat-data": {
265 | "version": "5.2.45",
266 | "dev": true,
267 | "license": "CC0-1.0"
268 | },
269 | "node_modules/@nodelib/fs.scandir": {
270 | "version": "2.1.5",
271 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
272 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
273 | "dev": true,
274 | "dependencies": {
275 | "@nodelib/fs.stat": "2.0.5",
276 | "run-parallel": "^1.1.9"
277 | },
278 | "engines": {
279 | "node": ">= 8"
280 | }
281 | },
282 | "node_modules/@nodelib/fs.stat": {
283 | "version": "2.0.5",
284 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
285 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
286 | "dev": true,
287 | "engines": {
288 | "node": ">= 8"
289 | }
290 | },
291 | "node_modules/@nodelib/fs.walk": {
292 | "version": "1.2.8",
293 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
294 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
295 | "dev": true,
296 | "dependencies": {
297 | "@nodelib/fs.scandir": "2.1.5",
298 | "fastq": "^1.6.0"
299 | },
300 | "engines": {
301 | "node": ">= 8"
302 | }
303 | },
304 | "node_modules/@rollup/plugin-node-resolve": {
305 | "version": "15.0.1",
306 | "license": "MIT",
307 | "dependencies": {
308 | "@rollup/pluginutils": "^5.0.1",
309 | "@types/resolve": "1.20.2",
310 | "deepmerge": "^4.2.2",
311 | "is-builtin-module": "^3.2.0",
312 | "is-module": "^1.0.0",
313 | "resolve": "^1.22.1"
314 | },
315 | "engines": {
316 | "node": ">=14.0.0"
317 | },
318 | "peerDependencies": {
319 | "rollup": "^2.78.0||^3.0.0"
320 | },
321 | "peerDependenciesMeta": {
322 | "rollup": {
323 | "optional": true
324 | }
325 | }
326 | },
327 | "node_modules/@rollup/pluginutils": {
328 | "version": "5.0.2",
329 | "license": "MIT",
330 | "dependencies": {
331 | "@types/estree": "^1.0.0",
332 | "estree-walker": "^2.0.2",
333 | "picomatch": "^2.3.1"
334 | },
335 | "engines": {
336 | "node": ">=14.0.0"
337 | },
338 | "peerDependencies": {
339 | "rollup": "^1.20.0||^2.0.0||^3.0.0"
340 | },
341 | "peerDependenciesMeta": {
342 | "rollup": {
343 | "optional": true
344 | }
345 | }
346 | },
347 | "node_modules/@types/estree": {
348 | "version": "1.0.0",
349 | "license": "MIT"
350 | },
351 | "node_modules/@types/json-schema": {
352 | "version": "7.0.11",
353 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
354 | "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
355 | "dev": true
356 | },
357 | "node_modules/@types/node": {
358 | "version": "17.0.45",
359 | "dev": true,
360 | "license": "MIT"
361 | },
362 | "node_modules/@types/object-path": {
363 | "version": "0.11.1",
364 | "dev": true,
365 | "license": "MIT"
366 | },
367 | "node_modules/@types/resolve": {
368 | "version": "1.20.2",
369 | "license": "MIT"
370 | },
371 | "node_modules/@types/semver": {
372 | "version": "7.3.13",
373 | "dev": true,
374 | "license": "MIT"
375 | },
376 | "node_modules/@types/ua-parser-js": {
377 | "version": "0.7.36",
378 | "dev": true,
379 | "license": "MIT"
380 | },
381 | "node_modules/@typescript-eslint/eslint-plugin": {
382 | "version": "5.57.0",
383 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.57.0.tgz",
384 | "integrity": "sha512-itag0qpN6q2UMM6Xgk6xoHa0D0/P+M17THnr4SVgqn9Rgam5k/He33MA7/D7QoJcdMxHFyX7U9imaBonAX/6qA==",
385 | "dev": true,
386 | "dependencies": {
387 | "@eslint-community/regexpp": "^4.4.0",
388 | "@typescript-eslint/scope-manager": "5.57.0",
389 | "@typescript-eslint/type-utils": "5.57.0",
390 | "@typescript-eslint/utils": "5.57.0",
391 | "debug": "^4.3.4",
392 | "grapheme-splitter": "^1.0.4",
393 | "ignore": "^5.2.0",
394 | "natural-compare-lite": "^1.4.0",
395 | "semver": "^7.3.7",
396 | "tsutils": "^3.21.0"
397 | },
398 | "engines": {
399 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
400 | },
401 | "funding": {
402 | "type": "opencollective",
403 | "url": "https://opencollective.com/typescript-eslint"
404 | },
405 | "peerDependencies": {
406 | "@typescript-eslint/parser": "^5.0.0",
407 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
408 | },
409 | "peerDependenciesMeta": {
410 | "typescript": {
411 | "optional": true
412 | }
413 | }
414 | },
415 | "node_modules/@typescript-eslint/parser": {
416 | "version": "5.57.0",
417 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.57.0.tgz",
418 | "integrity": "sha512-orrduvpWYkgLCyAdNtR1QIWovcNZlEm6yL8nwH/eTxWLd8gsP+25pdLHYzL2QdkqrieaDwLpytHqycncv0woUQ==",
419 | "dev": true,
420 | "peer": true,
421 | "dependencies": {
422 | "@typescript-eslint/scope-manager": "5.57.0",
423 | "@typescript-eslint/types": "5.57.0",
424 | "@typescript-eslint/typescript-estree": "5.57.0",
425 | "debug": "^4.3.4"
426 | },
427 | "engines": {
428 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
429 | },
430 | "funding": {
431 | "type": "opencollective",
432 | "url": "https://opencollective.com/typescript-eslint"
433 | },
434 | "peerDependencies": {
435 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
436 | },
437 | "peerDependenciesMeta": {
438 | "typescript": {
439 | "optional": true
440 | }
441 | }
442 | },
443 | "node_modules/@typescript-eslint/scope-manager": {
444 | "version": "5.57.0",
445 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.57.0.tgz",
446 | "integrity": "sha512-NANBNOQvllPlizl9LatX8+MHi7bx7WGIWYjPHDmQe5Si/0YEYfxSljJpoTyTWFTgRy3X8gLYSE4xQ2U+aCozSw==",
447 | "dev": true,
448 | "dependencies": {
449 | "@typescript-eslint/types": "5.57.0",
450 | "@typescript-eslint/visitor-keys": "5.57.0"
451 | },
452 | "engines": {
453 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
454 | },
455 | "funding": {
456 | "type": "opencollective",
457 | "url": "https://opencollective.com/typescript-eslint"
458 | }
459 | },
460 | "node_modules/@typescript-eslint/type-utils": {
461 | "version": "5.57.0",
462 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.57.0.tgz",
463 | "integrity": "sha512-kxXoq9zOTbvqzLbdNKy1yFrxLC6GDJFE2Yuo3KqSwTmDOFjUGeWSakgoXT864WcK5/NAJkkONCiKb1ddsqhLXQ==",
464 | "dev": true,
465 | "dependencies": {
466 | "@typescript-eslint/typescript-estree": "5.57.0",
467 | "@typescript-eslint/utils": "5.57.0",
468 | "debug": "^4.3.4",
469 | "tsutils": "^3.21.0"
470 | },
471 | "engines": {
472 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
473 | },
474 | "funding": {
475 | "type": "opencollective",
476 | "url": "https://opencollective.com/typescript-eslint"
477 | },
478 | "peerDependencies": {
479 | "eslint": "*"
480 | },
481 | "peerDependenciesMeta": {
482 | "typescript": {
483 | "optional": true
484 | }
485 | }
486 | },
487 | "node_modules/@typescript-eslint/types": {
488 | "version": "5.57.0",
489 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.57.0.tgz",
490 | "integrity": "sha512-mxsod+aZRSyLT+jiqHw1KK6xrANm19/+VFALVFP5qa/aiJnlP38qpyaTd0fEKhWvQk6YeNZ5LGwI1pDpBRBhtQ==",
491 | "dev": true,
492 | "engines": {
493 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
494 | },
495 | "funding": {
496 | "type": "opencollective",
497 | "url": "https://opencollective.com/typescript-eslint"
498 | }
499 | },
500 | "node_modules/@typescript-eslint/typescript-estree": {
501 | "version": "5.57.0",
502 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.0.tgz",
503 | "integrity": "sha512-LTzQ23TV82KpO8HPnWuxM2V7ieXW8O142I7hQTxWIHDcCEIjtkat6H96PFkYBQqGFLW/G/eVVOB9Z8rcvdY/Vw==",
504 | "dev": true,
505 | "dependencies": {
506 | "@typescript-eslint/types": "5.57.0",
507 | "@typescript-eslint/visitor-keys": "5.57.0",
508 | "debug": "^4.3.4",
509 | "globby": "^11.1.0",
510 | "is-glob": "^4.0.3",
511 | "semver": "^7.3.7",
512 | "tsutils": "^3.21.0"
513 | },
514 | "engines": {
515 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
516 | },
517 | "funding": {
518 | "type": "opencollective",
519 | "url": "https://opencollective.com/typescript-eslint"
520 | },
521 | "peerDependenciesMeta": {
522 | "typescript": {
523 | "optional": true
524 | }
525 | }
526 | },
527 | "node_modules/@typescript-eslint/utils": {
528 | "version": "5.57.0",
529 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.57.0.tgz",
530 | "integrity": "sha512-ps/4WohXV7C+LTSgAL5CApxvxbMkl9B9AUZRtnEFonpIxZDIT7wC1xfvuJONMidrkB9scs4zhtRyIwHh4+18kw==",
531 | "dev": true,
532 | "dependencies": {
533 | "@eslint-community/eslint-utils": "^4.2.0",
534 | "@types/json-schema": "^7.0.9",
535 | "@types/semver": "^7.3.12",
536 | "@typescript-eslint/scope-manager": "5.57.0",
537 | "@typescript-eslint/types": "5.57.0",
538 | "@typescript-eslint/typescript-estree": "5.57.0",
539 | "eslint-scope": "^5.1.1",
540 | "semver": "^7.3.7"
541 | },
542 | "engines": {
543 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
544 | },
545 | "funding": {
546 | "type": "opencollective",
547 | "url": "https://opencollective.com/typescript-eslint"
548 | },
549 | "peerDependencies": {
550 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
551 | }
552 | },
553 | "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": {
554 | "version": "5.1.1",
555 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
556 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
557 | "dev": true,
558 | "dependencies": {
559 | "esrecurse": "^4.3.0",
560 | "estraverse": "^4.1.1"
561 | },
562 | "engines": {
563 | "node": ">=8.0.0"
564 | }
565 | },
566 | "node_modules/@typescript-eslint/utils/node_modules/estraverse": {
567 | "version": "4.3.0",
568 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
569 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
570 | "dev": true,
571 | "engines": {
572 | "node": ">=4.0"
573 | }
574 | },
575 | "node_modules/@typescript-eslint/visitor-keys": {
576 | "version": "5.57.0",
577 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.0.tgz",
578 | "integrity": "sha512-ery2g3k0hv5BLiKpPuwYt9KBkAp2ugT6VvyShXdLOkax895EC55sP0Tx5L0fZaQueiK3fBLvHVvEl3jFS5ia+g==",
579 | "dev": true,
580 | "dependencies": {
581 | "@typescript-eslint/types": "5.57.0",
582 | "eslint-visitor-keys": "^3.3.0"
583 | },
584 | "engines": {
585 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
586 | },
587 | "funding": {
588 | "type": "opencollective",
589 | "url": "https://opencollective.com/typescript-eslint"
590 | }
591 | },
592 | "node_modules/@wessberg/stringutil": {
593 | "version": "1.0.19",
594 | "dev": true,
595 | "license": "MIT",
596 | "engines": {
597 | "node": ">=8.0.0"
598 | }
599 | },
600 | "node_modules/acorn": {
601 | "version": "8.8.2",
602 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
603 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
604 | "dev": true,
605 | "bin": {
606 | "acorn": "bin/acorn"
607 | },
608 | "engines": {
609 | "node": ">=0.4.0"
610 | }
611 | },
612 | "node_modules/acorn-jsx": {
613 | "version": "5.3.2",
614 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
615 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
616 | "dev": true,
617 | "peerDependencies": {
618 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
619 | }
620 | },
621 | "node_modules/ajv": {
622 | "version": "6.12.6",
623 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
624 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
625 | "dev": true,
626 | "dependencies": {
627 | "fast-deep-equal": "^3.1.1",
628 | "fast-json-stable-stringify": "^2.0.0",
629 | "json-schema-traverse": "^0.4.1",
630 | "uri-js": "^4.2.2"
631 | },
632 | "funding": {
633 | "type": "github",
634 | "url": "https://github.com/sponsors/epoberezkin"
635 | }
636 | },
637 | "node_modules/ansi-colors": {
638 | "version": "4.1.3",
639 | "dev": true,
640 | "license": "MIT",
641 | "engines": {
642 | "node": ">=6"
643 | }
644 | },
645 | "node_modules/ansi-regex": {
646 | "version": "5.0.1",
647 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
648 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
649 | "dev": true,
650 | "engines": {
651 | "node": ">=8"
652 | }
653 | },
654 | "node_modules/ansi-styles": {
655 | "version": "3.2.1",
656 | "dev": true,
657 | "license": "MIT",
658 | "optional": true,
659 | "dependencies": {
660 | "color-convert": "^1.9.0"
661 | },
662 | "engines": {
663 | "node": ">=4"
664 | }
665 | },
666 | "node_modules/argparse": {
667 | "version": "2.0.1",
668 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
669 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
670 | "dev": true
671 | },
672 | "node_modules/array-union": {
673 | "version": "2.1.0",
674 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
675 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
676 | "dev": true,
677 | "engines": {
678 | "node": ">=8"
679 | }
680 | },
681 | "node_modules/balanced-match": {
682 | "version": "1.0.2",
683 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
684 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
685 | "dev": true
686 | },
687 | "node_modules/brace-expansion": {
688 | "version": "1.1.11",
689 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
690 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
691 | "dev": true,
692 | "dependencies": {
693 | "balanced-match": "^1.0.0",
694 | "concat-map": "0.0.1"
695 | }
696 | },
697 | "node_modules/braces": {
698 | "version": "3.0.2",
699 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
700 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
701 | "dev": true,
702 | "dependencies": {
703 | "fill-range": "^7.0.1"
704 | },
705 | "engines": {
706 | "node": ">=8"
707 | }
708 | },
709 | "node_modules/browserslist": {
710 | "version": "4.21.5",
711 | "dev": true,
712 | "funding": [
713 | {
714 | "type": "opencollective",
715 | "url": "https://opencollective.com/browserslist"
716 | },
717 | {
718 | "type": "tidelift",
719 | "url": "https://tidelift.com/funding/github/npm/browserslist"
720 | }
721 | ],
722 | "license": "MIT",
723 | "dependencies": {
724 | "caniuse-lite": "^1.0.30001449",
725 | "electron-to-chromium": "^1.4.284",
726 | "node-releases": "^2.0.8",
727 | "update-browserslist-db": "^1.0.10"
728 | },
729 | "bin": {
730 | "browserslist": "cli.js"
731 | },
732 | "engines": {
733 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
734 | }
735 | },
736 | "node_modules/browserslist-generator": {
737 | "version": "2.0.3",
738 | "dev": true,
739 | "license": "MIT",
740 | "dependencies": {
741 | "@mdn/browser-compat-data": "^5.2.33",
742 | "@types/object-path": "^0.11.1",
743 | "@types/semver": "^7.3.13",
744 | "@types/ua-parser-js": "^0.7.36",
745 | "browserslist": "^4.21.5",
746 | "caniuse-lite": "^1.0.30001450",
747 | "isbot": "^3.6.5",
748 | "object-path": "^0.11.8",
749 | "semver": "^7.3.8",
750 | "ua-parser-js": "^1.0.33"
751 | },
752 | "engines": {
753 | "node": ">=16.15.1",
754 | "npm": ">=7.0.0",
755 | "pnpm": ">=3.2.0",
756 | "yarn": ">=1.13"
757 | },
758 | "funding": {
759 | "type": "github",
760 | "url": "https://github.com/wessberg/browserslist-generator?sponsor=1"
761 | }
762 | },
763 | "node_modules/builtin-modules": {
764 | "version": "3.3.0",
765 | "license": "MIT",
766 | "engines": {
767 | "node": ">=6"
768 | },
769 | "funding": {
770 | "url": "https://github.com/sponsors/sindresorhus"
771 | }
772 | },
773 | "node_modules/callsites": {
774 | "version": "3.1.0",
775 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
776 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
777 | "dev": true,
778 | "engines": {
779 | "node": ">=6"
780 | }
781 | },
782 | "node_modules/caniuse-lite": {
783 | "version": "1.0.30001470",
784 | "dev": true,
785 | "funding": [
786 | {
787 | "type": "opencollective",
788 | "url": "https://opencollective.com/browserslist"
789 | },
790 | {
791 | "type": "tidelift",
792 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
793 | }
794 | ],
795 | "license": "CC-BY-4.0"
796 | },
797 | "node_modules/chalk": {
798 | "version": "2.4.2",
799 | "dev": true,
800 | "license": "MIT",
801 | "optional": true,
802 | "dependencies": {
803 | "ansi-styles": "^3.2.1",
804 | "escape-string-regexp": "^1.0.5",
805 | "supports-color": "^5.3.0"
806 | },
807 | "engines": {
808 | "node": ">=4"
809 | }
810 | },
811 | "node_modules/codemirror": {
812 | "version": "6.0.1",
813 | "license": "MIT",
814 | "dependencies": {
815 | "@codemirror/autocomplete": "^6.0.0",
816 | "@codemirror/commands": "^6.0.0",
817 | "@codemirror/language": "^6.0.0",
818 | "@codemirror/lint": "^6.0.0",
819 | "@codemirror/search": "^6.0.0",
820 | "@codemirror/state": "^6.0.0",
821 | "@codemirror/view": "^6.0.0"
822 | }
823 | },
824 | "node_modules/codemirror-lang-spreadsheet": {
825 | "version": "1.0.3",
826 | "resolved": "https://registry.npmjs.org/codemirror-lang-spreadsheet/-/codemirror-lang-spreadsheet-1.0.3.tgz",
827 | "integrity": "sha512-kEEmyFA52GQ33BTmBgfApkZQTKT6SlUOtp0VXfjRk5NyQWycxH/ZCTpQeT4v8rVu1qpF+G48pKS6w0+DbXQGeQ==",
828 | "dependencies": {
829 | "@codemirror/language": "^6.6.0",
830 | "@lezer/highlight": "^1.0.0",
831 | "@lezer/lr": "^1.0.0"
832 | }
833 | },
834 | "node_modules/codemirror/node_modules/@codemirror/lint": {
835 | "version": "6.2.0",
836 | "license": "MIT",
837 | "dependencies": {
838 | "@codemirror/state": "^6.0.0",
839 | "@codemirror/view": "^6.0.0",
840 | "crelt": "^1.0.5"
841 | }
842 | },
843 | "node_modules/codemirror/node_modules/@codemirror/search": {
844 | "version": "6.2.3",
845 | "license": "MIT",
846 | "dependencies": {
847 | "@codemirror/state": "^6.0.0",
848 | "@codemirror/view": "^6.0.0",
849 | "crelt": "^1.0.5"
850 | }
851 | },
852 | "node_modules/color-convert": {
853 | "version": "1.9.3",
854 | "dev": true,
855 | "license": "MIT",
856 | "optional": true,
857 | "dependencies": {
858 | "color-name": "1.1.3"
859 | }
860 | },
861 | "node_modules/color-name": {
862 | "version": "1.1.3",
863 | "dev": true,
864 | "license": "MIT",
865 | "optional": true
866 | },
867 | "node_modules/compatfactory": {
868 | "version": "2.0.9",
869 | "dev": true,
870 | "license": "MIT",
871 | "dependencies": {
872 | "helpertypes": "^0.0.19"
873 | },
874 | "engines": {
875 | "node": ">=14.9.0"
876 | },
877 | "peerDependencies": {
878 | "typescript": ">=3.x || >= 4.x"
879 | }
880 | },
881 | "node_modules/concat-map": {
882 | "version": "0.0.1",
883 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
884 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
885 | "dev": true
886 | },
887 | "node_modules/crelt": {
888 | "version": "1.0.5",
889 | "license": "MIT"
890 | },
891 | "node_modules/cross-spawn": {
892 | "version": "7.0.3",
893 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
894 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
895 | "dev": true,
896 | "dependencies": {
897 | "path-key": "^3.1.0",
898 | "shebang-command": "^2.0.0",
899 | "which": "^2.0.1"
900 | },
901 | "engines": {
902 | "node": ">= 8"
903 | }
904 | },
905 | "node_modules/crosspath": {
906 | "version": "2.0.0",
907 | "dev": true,
908 | "license": "MIT",
909 | "dependencies": {
910 | "@types/node": "^17.0.36"
911 | },
912 | "engines": {
913 | "node": ">=14.9.0"
914 | }
915 | },
916 | "node_modules/debug": {
917 | "version": "4.3.4",
918 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
919 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
920 | "dev": true,
921 | "dependencies": {
922 | "ms": "2.1.2"
923 | },
924 | "engines": {
925 | "node": ">=6.0"
926 | },
927 | "peerDependenciesMeta": {
928 | "supports-color": {
929 | "optional": true
930 | }
931 | }
932 | },
933 | "node_modules/deep-is": {
934 | "version": "0.1.4",
935 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
936 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
937 | "dev": true
938 | },
939 | "node_modules/deepmerge": {
940 | "version": "4.3.0",
941 | "license": "MIT",
942 | "engines": {
943 | "node": ">=0.10.0"
944 | }
945 | },
946 | "node_modules/dir-glob": {
947 | "version": "3.0.1",
948 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
949 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
950 | "dev": true,
951 | "dependencies": {
952 | "path-type": "^4.0.0"
953 | },
954 | "engines": {
955 | "node": ">=8"
956 | }
957 | },
958 | "node_modules/doctrine": {
959 | "version": "3.0.0",
960 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
961 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
962 | "dev": true,
963 | "dependencies": {
964 | "esutils": "^2.0.2"
965 | },
966 | "engines": {
967 | "node": ">=6.0.0"
968 | }
969 | },
970 | "node_modules/electron-to-chromium": {
971 | "version": "1.4.340",
972 | "dev": true,
973 | "license": "ISC"
974 | },
975 | "node_modules/escalade": {
976 | "version": "3.1.1",
977 | "dev": true,
978 | "license": "MIT",
979 | "engines": {
980 | "node": ">=6"
981 | }
982 | },
983 | "node_modules/escape-string-regexp": {
984 | "version": "1.0.5",
985 | "dev": true,
986 | "license": "MIT",
987 | "optional": true,
988 | "engines": {
989 | "node": ">=0.8.0"
990 | }
991 | },
992 | "node_modules/eslint": {
993 | "version": "8.37.0",
994 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.37.0.tgz",
995 | "integrity": "sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==",
996 | "dev": true,
997 | "dependencies": {
998 | "@eslint-community/eslint-utils": "^4.2.0",
999 | "@eslint-community/regexpp": "^4.4.0",
1000 | "@eslint/eslintrc": "^2.0.2",
1001 | "@eslint/js": "8.37.0",
1002 | "@humanwhocodes/config-array": "^0.11.8",
1003 | "@humanwhocodes/module-importer": "^1.0.1",
1004 | "@nodelib/fs.walk": "^1.2.8",
1005 | "ajv": "^6.10.0",
1006 | "chalk": "^4.0.0",
1007 | "cross-spawn": "^7.0.2",
1008 | "debug": "^4.3.2",
1009 | "doctrine": "^3.0.0",
1010 | "escape-string-regexp": "^4.0.0",
1011 | "eslint-scope": "^7.1.1",
1012 | "eslint-visitor-keys": "^3.4.0",
1013 | "espree": "^9.5.1",
1014 | "esquery": "^1.4.2",
1015 | "esutils": "^2.0.2",
1016 | "fast-deep-equal": "^3.1.3",
1017 | "file-entry-cache": "^6.0.1",
1018 | "find-up": "^5.0.0",
1019 | "glob-parent": "^6.0.2",
1020 | "globals": "^13.19.0",
1021 | "grapheme-splitter": "^1.0.4",
1022 | "ignore": "^5.2.0",
1023 | "import-fresh": "^3.0.0",
1024 | "imurmurhash": "^0.1.4",
1025 | "is-glob": "^4.0.0",
1026 | "is-path-inside": "^3.0.3",
1027 | "js-sdsl": "^4.1.4",
1028 | "js-yaml": "^4.1.0",
1029 | "json-stable-stringify-without-jsonify": "^1.0.1",
1030 | "levn": "^0.4.1",
1031 | "lodash.merge": "^4.6.2",
1032 | "minimatch": "^3.1.2",
1033 | "natural-compare": "^1.4.0",
1034 | "optionator": "^0.9.1",
1035 | "strip-ansi": "^6.0.1",
1036 | "strip-json-comments": "^3.1.0",
1037 | "text-table": "^0.2.0"
1038 | },
1039 | "bin": {
1040 | "eslint": "bin/eslint.js"
1041 | },
1042 | "engines": {
1043 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1044 | },
1045 | "funding": {
1046 | "url": "https://opencollective.com/eslint"
1047 | }
1048 | },
1049 | "node_modules/eslint-config-prettier": {
1050 | "version": "8.8.0",
1051 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
1052 | "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
1053 | "dev": true,
1054 | "bin": {
1055 | "eslint-config-prettier": "bin/cli.js"
1056 | },
1057 | "peerDependencies": {
1058 | "eslint": ">=7.0.0"
1059 | }
1060 | },
1061 | "node_modules/eslint-plugin-prettier": {
1062 | "version": "4.2.1",
1063 | "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
1064 | "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
1065 | "dev": true,
1066 | "dependencies": {
1067 | "prettier-linter-helpers": "^1.0.0"
1068 | },
1069 | "engines": {
1070 | "node": ">=12.0.0"
1071 | },
1072 | "peerDependencies": {
1073 | "eslint": ">=7.28.0",
1074 | "prettier": ">=2.0.0"
1075 | },
1076 | "peerDependenciesMeta": {
1077 | "eslint-config-prettier": {
1078 | "optional": true
1079 | }
1080 | }
1081 | },
1082 | "node_modules/eslint-scope": {
1083 | "version": "7.1.1",
1084 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
1085 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
1086 | "dev": true,
1087 | "dependencies": {
1088 | "esrecurse": "^4.3.0",
1089 | "estraverse": "^5.2.0"
1090 | },
1091 | "engines": {
1092 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1093 | }
1094 | },
1095 | "node_modules/eslint-visitor-keys": {
1096 | "version": "3.4.0",
1097 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
1098 | "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
1099 | "dev": true,
1100 | "engines": {
1101 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1102 | },
1103 | "funding": {
1104 | "url": "https://opencollective.com/eslint"
1105 | }
1106 | },
1107 | "node_modules/eslint/node_modules/ansi-styles": {
1108 | "version": "4.3.0",
1109 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1110 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1111 | "dev": true,
1112 | "dependencies": {
1113 | "color-convert": "^2.0.1"
1114 | },
1115 | "engines": {
1116 | "node": ">=8"
1117 | },
1118 | "funding": {
1119 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1120 | }
1121 | },
1122 | "node_modules/eslint/node_modules/chalk": {
1123 | "version": "4.1.2",
1124 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1125 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1126 | "dev": true,
1127 | "dependencies": {
1128 | "ansi-styles": "^4.1.0",
1129 | "supports-color": "^7.1.0"
1130 | },
1131 | "engines": {
1132 | "node": ">=10"
1133 | },
1134 | "funding": {
1135 | "url": "https://github.com/chalk/chalk?sponsor=1"
1136 | }
1137 | },
1138 | "node_modules/eslint/node_modules/color-convert": {
1139 | "version": "2.0.1",
1140 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1141 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1142 | "dev": true,
1143 | "dependencies": {
1144 | "color-name": "~1.1.4"
1145 | },
1146 | "engines": {
1147 | "node": ">=7.0.0"
1148 | }
1149 | },
1150 | "node_modules/eslint/node_modules/color-name": {
1151 | "version": "1.1.4",
1152 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1153 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1154 | "dev": true
1155 | },
1156 | "node_modules/eslint/node_modules/escape-string-regexp": {
1157 | "version": "4.0.0",
1158 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1159 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
1160 | "dev": true,
1161 | "engines": {
1162 | "node": ">=10"
1163 | },
1164 | "funding": {
1165 | "url": "https://github.com/sponsors/sindresorhus"
1166 | }
1167 | },
1168 | "node_modules/eslint/node_modules/has-flag": {
1169 | "version": "4.0.0",
1170 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1171 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1172 | "dev": true,
1173 | "engines": {
1174 | "node": ">=8"
1175 | }
1176 | },
1177 | "node_modules/eslint/node_modules/supports-color": {
1178 | "version": "7.2.0",
1179 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1180 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1181 | "dev": true,
1182 | "dependencies": {
1183 | "has-flag": "^4.0.0"
1184 | },
1185 | "engines": {
1186 | "node": ">=8"
1187 | }
1188 | },
1189 | "node_modules/espree": {
1190 | "version": "9.5.1",
1191 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz",
1192 | "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==",
1193 | "dev": true,
1194 | "dependencies": {
1195 | "acorn": "^8.8.0",
1196 | "acorn-jsx": "^5.3.2",
1197 | "eslint-visitor-keys": "^3.4.0"
1198 | },
1199 | "engines": {
1200 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1201 | },
1202 | "funding": {
1203 | "url": "https://opencollective.com/eslint"
1204 | }
1205 | },
1206 | "node_modules/esquery": {
1207 | "version": "1.5.0",
1208 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
1209 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
1210 | "dev": true,
1211 | "dependencies": {
1212 | "estraverse": "^5.1.0"
1213 | },
1214 | "engines": {
1215 | "node": ">=0.10"
1216 | }
1217 | },
1218 | "node_modules/esrecurse": {
1219 | "version": "4.3.0",
1220 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
1221 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
1222 | "dev": true,
1223 | "dependencies": {
1224 | "estraverse": "^5.2.0"
1225 | },
1226 | "engines": {
1227 | "node": ">=4.0"
1228 | }
1229 | },
1230 | "node_modules/estraverse": {
1231 | "version": "5.3.0",
1232 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1233 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1234 | "dev": true,
1235 | "engines": {
1236 | "node": ">=4.0"
1237 | }
1238 | },
1239 | "node_modules/estree-walker": {
1240 | "version": "2.0.2",
1241 | "license": "MIT"
1242 | },
1243 | "node_modules/esutils": {
1244 | "version": "2.0.3",
1245 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1246 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1247 | "dev": true,
1248 | "engines": {
1249 | "node": ">=0.10.0"
1250 | }
1251 | },
1252 | "node_modules/fast-deep-equal": {
1253 | "version": "3.1.3",
1254 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1255 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
1256 | "dev": true
1257 | },
1258 | "node_modules/fast-diff": {
1259 | "version": "1.2.0",
1260 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
1261 | "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
1262 | "dev": true
1263 | },
1264 | "node_modules/fast-glob": {
1265 | "version": "3.2.12",
1266 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
1267 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
1268 | "dev": true,
1269 | "dependencies": {
1270 | "@nodelib/fs.stat": "^2.0.2",
1271 | "@nodelib/fs.walk": "^1.2.3",
1272 | "glob-parent": "^5.1.2",
1273 | "merge2": "^1.3.0",
1274 | "micromatch": "^4.0.4"
1275 | },
1276 | "engines": {
1277 | "node": ">=8.6.0"
1278 | }
1279 | },
1280 | "node_modules/fast-glob/node_modules/glob-parent": {
1281 | "version": "5.1.2",
1282 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1283 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1284 | "dev": true,
1285 | "dependencies": {
1286 | "is-glob": "^4.0.1"
1287 | },
1288 | "engines": {
1289 | "node": ">= 6"
1290 | }
1291 | },
1292 | "node_modules/fast-json-stable-stringify": {
1293 | "version": "2.1.0",
1294 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
1295 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
1296 | "dev": true
1297 | },
1298 | "node_modules/fast-levenshtein": {
1299 | "version": "2.0.6",
1300 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
1301 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
1302 | "dev": true
1303 | },
1304 | "node_modules/fastq": {
1305 | "version": "1.15.0",
1306 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
1307 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
1308 | "dev": true,
1309 | "dependencies": {
1310 | "reusify": "^1.0.4"
1311 | }
1312 | },
1313 | "node_modules/file-entry-cache": {
1314 | "version": "6.0.1",
1315 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
1316 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
1317 | "dev": true,
1318 | "dependencies": {
1319 | "flat-cache": "^3.0.4"
1320 | },
1321 | "engines": {
1322 | "node": "^10.12.0 || >=12.0.0"
1323 | }
1324 | },
1325 | "node_modules/fill-range": {
1326 | "version": "7.0.1",
1327 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
1328 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
1329 | "dev": true,
1330 | "dependencies": {
1331 | "to-regex-range": "^5.0.1"
1332 | },
1333 | "engines": {
1334 | "node": ">=8"
1335 | }
1336 | },
1337 | "node_modules/find-up": {
1338 | "version": "5.0.0",
1339 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
1340 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
1341 | "dev": true,
1342 | "dependencies": {
1343 | "locate-path": "^6.0.0",
1344 | "path-exists": "^4.0.0"
1345 | },
1346 | "engines": {
1347 | "node": ">=10"
1348 | },
1349 | "funding": {
1350 | "url": "https://github.com/sponsors/sindresorhus"
1351 | }
1352 | },
1353 | "node_modules/flat-cache": {
1354 | "version": "3.0.4",
1355 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
1356 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
1357 | "dev": true,
1358 | "dependencies": {
1359 | "flatted": "^3.1.0",
1360 | "rimraf": "^3.0.2"
1361 | },
1362 | "engines": {
1363 | "node": "^10.12.0 || >=12.0.0"
1364 | }
1365 | },
1366 | "node_modules/flatted": {
1367 | "version": "3.2.7",
1368 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
1369 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
1370 | "dev": true
1371 | },
1372 | "node_modules/fs.realpath": {
1373 | "version": "1.0.0",
1374 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1375 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
1376 | "dev": true
1377 | },
1378 | "node_modules/function-bind": {
1379 | "version": "1.1.1",
1380 | "license": "MIT"
1381 | },
1382 | "node_modules/glob": {
1383 | "version": "7.2.3",
1384 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
1385 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
1386 | "dev": true,
1387 | "dependencies": {
1388 | "fs.realpath": "^1.0.0",
1389 | "inflight": "^1.0.4",
1390 | "inherits": "2",
1391 | "minimatch": "^3.1.1",
1392 | "once": "^1.3.0",
1393 | "path-is-absolute": "^1.0.0"
1394 | },
1395 | "engines": {
1396 | "node": "*"
1397 | },
1398 | "funding": {
1399 | "url": "https://github.com/sponsors/isaacs"
1400 | }
1401 | },
1402 | "node_modules/glob-parent": {
1403 | "version": "6.0.2",
1404 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
1405 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
1406 | "dev": true,
1407 | "dependencies": {
1408 | "is-glob": "^4.0.3"
1409 | },
1410 | "engines": {
1411 | "node": ">=10.13.0"
1412 | }
1413 | },
1414 | "node_modules/globals": {
1415 | "version": "13.20.0",
1416 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
1417 | "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
1418 | "dev": true,
1419 | "dependencies": {
1420 | "type-fest": "^0.20.2"
1421 | },
1422 | "engines": {
1423 | "node": ">=8"
1424 | },
1425 | "funding": {
1426 | "url": "https://github.com/sponsors/sindresorhus"
1427 | }
1428 | },
1429 | "node_modules/globby": {
1430 | "version": "11.1.0",
1431 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
1432 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
1433 | "dev": true,
1434 | "dependencies": {
1435 | "array-union": "^2.1.0",
1436 | "dir-glob": "^3.0.1",
1437 | "fast-glob": "^3.2.9",
1438 | "ignore": "^5.2.0",
1439 | "merge2": "^1.4.1",
1440 | "slash": "^3.0.0"
1441 | },
1442 | "engines": {
1443 | "node": ">=10"
1444 | },
1445 | "funding": {
1446 | "url": "https://github.com/sponsors/sindresorhus"
1447 | }
1448 | },
1449 | "node_modules/grapheme-splitter": {
1450 | "version": "1.0.4",
1451 | "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
1452 | "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
1453 | "dev": true
1454 | },
1455 | "node_modules/has": {
1456 | "version": "1.0.3",
1457 | "license": "MIT",
1458 | "dependencies": {
1459 | "function-bind": "^1.1.1"
1460 | },
1461 | "engines": {
1462 | "node": ">= 0.4.0"
1463 | }
1464 | },
1465 | "node_modules/has-flag": {
1466 | "version": "3.0.0",
1467 | "dev": true,
1468 | "license": "MIT",
1469 | "optional": true,
1470 | "engines": {
1471 | "node": ">=4"
1472 | }
1473 | },
1474 | "node_modules/helpertypes": {
1475 | "version": "0.0.19",
1476 | "dev": true,
1477 | "license": "MIT",
1478 | "engines": {
1479 | "node": ">=10.0.0"
1480 | }
1481 | },
1482 | "node_modules/ignore": {
1483 | "version": "5.2.4",
1484 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
1485 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
1486 | "dev": true,
1487 | "engines": {
1488 | "node": ">= 4"
1489 | }
1490 | },
1491 | "node_modules/import-fresh": {
1492 | "version": "3.3.0",
1493 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
1494 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
1495 | "dev": true,
1496 | "dependencies": {
1497 | "parent-module": "^1.0.0",
1498 | "resolve-from": "^4.0.0"
1499 | },
1500 | "engines": {
1501 | "node": ">=6"
1502 | },
1503 | "funding": {
1504 | "url": "https://github.com/sponsors/sindresorhus"
1505 | }
1506 | },
1507 | "node_modules/imurmurhash": {
1508 | "version": "0.1.4",
1509 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1510 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
1511 | "dev": true,
1512 | "engines": {
1513 | "node": ">=0.8.19"
1514 | }
1515 | },
1516 | "node_modules/inflight": {
1517 | "version": "1.0.6",
1518 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1519 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
1520 | "dev": true,
1521 | "dependencies": {
1522 | "once": "^1.3.0",
1523 | "wrappy": "1"
1524 | }
1525 | },
1526 | "node_modules/inherits": {
1527 | "version": "2.0.4",
1528 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1529 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1530 | "dev": true
1531 | },
1532 | "node_modules/is-builtin-module": {
1533 | "version": "3.2.1",
1534 | "license": "MIT",
1535 | "dependencies": {
1536 | "builtin-modules": "^3.3.0"
1537 | },
1538 | "engines": {
1539 | "node": ">=6"
1540 | },
1541 | "funding": {
1542 | "url": "https://github.com/sponsors/sindresorhus"
1543 | }
1544 | },
1545 | "node_modules/is-core-module": {
1546 | "version": "2.11.0",
1547 | "license": "MIT",
1548 | "dependencies": {
1549 | "has": "^1.0.3"
1550 | },
1551 | "funding": {
1552 | "url": "https://github.com/sponsors/ljharb"
1553 | }
1554 | },
1555 | "node_modules/is-extglob": {
1556 | "version": "2.1.1",
1557 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1558 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1559 | "dev": true,
1560 | "engines": {
1561 | "node": ">=0.10.0"
1562 | }
1563 | },
1564 | "node_modules/is-glob": {
1565 | "version": "4.0.3",
1566 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1567 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1568 | "dev": true,
1569 | "dependencies": {
1570 | "is-extglob": "^2.1.1"
1571 | },
1572 | "engines": {
1573 | "node": ">=0.10.0"
1574 | }
1575 | },
1576 | "node_modules/is-module": {
1577 | "version": "1.0.0",
1578 | "license": "MIT"
1579 | },
1580 | "node_modules/is-number": {
1581 | "version": "7.0.0",
1582 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1583 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1584 | "dev": true,
1585 | "engines": {
1586 | "node": ">=0.12.0"
1587 | }
1588 | },
1589 | "node_modules/is-path-inside": {
1590 | "version": "3.0.3",
1591 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
1592 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
1593 | "dev": true,
1594 | "engines": {
1595 | "node": ">=8"
1596 | }
1597 | },
1598 | "node_modules/isbot": {
1599 | "version": "3.6.7",
1600 | "dev": true,
1601 | "license": "Unlicense",
1602 | "engines": {
1603 | "node": ">=12"
1604 | }
1605 | },
1606 | "node_modules/isexe": {
1607 | "version": "2.0.0",
1608 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1609 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1610 | "dev": true
1611 | },
1612 | "node_modules/js-sdsl": {
1613 | "version": "4.4.0",
1614 | "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz",
1615 | "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==",
1616 | "dev": true,
1617 | "funding": {
1618 | "type": "opencollective",
1619 | "url": "https://opencollective.com/js-sdsl"
1620 | }
1621 | },
1622 | "node_modules/js-tokens": {
1623 | "version": "4.0.0",
1624 | "dev": true,
1625 | "license": "MIT",
1626 | "optional": true
1627 | },
1628 | "node_modules/js-yaml": {
1629 | "version": "4.1.0",
1630 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
1631 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
1632 | "dev": true,
1633 | "dependencies": {
1634 | "argparse": "^2.0.1"
1635 | },
1636 | "bin": {
1637 | "js-yaml": "bin/js-yaml.js"
1638 | }
1639 | },
1640 | "node_modules/json-schema-traverse": {
1641 | "version": "0.4.1",
1642 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1643 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1644 | "dev": true
1645 | },
1646 | "node_modules/json-stable-stringify-without-jsonify": {
1647 | "version": "1.0.1",
1648 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
1649 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
1650 | "dev": true
1651 | },
1652 | "node_modules/levn": {
1653 | "version": "0.4.1",
1654 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
1655 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
1656 | "dev": true,
1657 | "dependencies": {
1658 | "prelude-ls": "^1.2.1",
1659 | "type-check": "~0.4.0"
1660 | },
1661 | "engines": {
1662 | "node": ">= 0.8.0"
1663 | }
1664 | },
1665 | "node_modules/locate-path": {
1666 | "version": "6.0.0",
1667 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
1668 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
1669 | "dev": true,
1670 | "dependencies": {
1671 | "p-locate": "^5.0.0"
1672 | },
1673 | "engines": {
1674 | "node": ">=10"
1675 | },
1676 | "funding": {
1677 | "url": "https://github.com/sponsors/sindresorhus"
1678 | }
1679 | },
1680 | "node_modules/lodash.merge": {
1681 | "version": "4.6.2",
1682 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
1683 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
1684 | "dev": true
1685 | },
1686 | "node_modules/lru-cache": {
1687 | "version": "6.0.0",
1688 | "dev": true,
1689 | "license": "ISC",
1690 | "dependencies": {
1691 | "yallist": "^4.0.0"
1692 | },
1693 | "engines": {
1694 | "node": ">=10"
1695 | }
1696 | },
1697 | "node_modules/magic-string": {
1698 | "version": "0.27.0",
1699 | "dev": true,
1700 | "license": "MIT",
1701 | "dependencies": {
1702 | "@jridgewell/sourcemap-codec": "^1.4.13"
1703 | },
1704 | "engines": {
1705 | "node": ">=12"
1706 | }
1707 | },
1708 | "node_modules/merge2": {
1709 | "version": "1.4.1",
1710 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1711 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1712 | "dev": true,
1713 | "engines": {
1714 | "node": ">= 8"
1715 | }
1716 | },
1717 | "node_modules/micromatch": {
1718 | "version": "4.0.5",
1719 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
1720 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
1721 | "dev": true,
1722 | "dependencies": {
1723 | "braces": "^3.0.2",
1724 | "picomatch": "^2.3.1"
1725 | },
1726 | "engines": {
1727 | "node": ">=8.6"
1728 | }
1729 | },
1730 | "node_modules/mime": {
1731 | "version": "3.0.0",
1732 | "dev": true,
1733 | "license": "MIT",
1734 | "bin": {
1735 | "mime": "cli.js"
1736 | },
1737 | "engines": {
1738 | "node": ">=10.0.0"
1739 | }
1740 | },
1741 | "node_modules/minimatch": {
1742 | "version": "3.1.2",
1743 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1744 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1745 | "dev": true,
1746 | "dependencies": {
1747 | "brace-expansion": "^1.1.7"
1748 | },
1749 | "engines": {
1750 | "node": "*"
1751 | }
1752 | },
1753 | "node_modules/ms": {
1754 | "version": "2.1.2",
1755 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1756 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1757 | "dev": true
1758 | },
1759 | "node_modules/natural-compare": {
1760 | "version": "1.4.0",
1761 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
1762 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
1763 | "dev": true
1764 | },
1765 | "node_modules/natural-compare-lite": {
1766 | "version": "1.4.0",
1767 | "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
1768 | "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
1769 | "dev": true
1770 | },
1771 | "node_modules/node-releases": {
1772 | "version": "2.0.10",
1773 | "dev": true,
1774 | "license": "MIT"
1775 | },
1776 | "node_modules/object-path": {
1777 | "version": "0.11.8",
1778 | "dev": true,
1779 | "license": "MIT",
1780 | "engines": {
1781 | "node": ">= 10.12.0"
1782 | }
1783 | },
1784 | "node_modules/once": {
1785 | "version": "1.4.0",
1786 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1787 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1788 | "dev": true,
1789 | "dependencies": {
1790 | "wrappy": "1"
1791 | }
1792 | },
1793 | "node_modules/opener": {
1794 | "version": "1.5.2",
1795 | "dev": true,
1796 | "license": "(WTFPL OR MIT)",
1797 | "bin": {
1798 | "opener": "bin/opener-bin.js"
1799 | }
1800 | },
1801 | "node_modules/optionator": {
1802 | "version": "0.9.1",
1803 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
1804 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
1805 | "dev": true,
1806 | "dependencies": {
1807 | "deep-is": "^0.1.3",
1808 | "fast-levenshtein": "^2.0.6",
1809 | "levn": "^0.4.1",
1810 | "prelude-ls": "^1.2.1",
1811 | "type-check": "^0.4.0",
1812 | "word-wrap": "^1.2.3"
1813 | },
1814 | "engines": {
1815 | "node": ">= 0.8.0"
1816 | }
1817 | },
1818 | "node_modules/p-limit": {
1819 | "version": "3.1.0",
1820 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
1821 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
1822 | "dev": true,
1823 | "dependencies": {
1824 | "yocto-queue": "^0.1.0"
1825 | },
1826 | "engines": {
1827 | "node": ">=10"
1828 | },
1829 | "funding": {
1830 | "url": "https://github.com/sponsors/sindresorhus"
1831 | }
1832 | },
1833 | "node_modules/p-locate": {
1834 | "version": "5.0.0",
1835 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
1836 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
1837 | "dev": true,
1838 | "dependencies": {
1839 | "p-limit": "^3.0.2"
1840 | },
1841 | "engines": {
1842 | "node": ">=10"
1843 | },
1844 | "funding": {
1845 | "url": "https://github.com/sponsors/sindresorhus"
1846 | }
1847 | },
1848 | "node_modules/parent-module": {
1849 | "version": "1.0.1",
1850 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
1851 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
1852 | "dev": true,
1853 | "dependencies": {
1854 | "callsites": "^3.0.0"
1855 | },
1856 | "engines": {
1857 | "node": ">=6"
1858 | }
1859 | },
1860 | "node_modules/path-exists": {
1861 | "version": "4.0.0",
1862 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
1863 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
1864 | "dev": true,
1865 | "engines": {
1866 | "node": ">=8"
1867 | }
1868 | },
1869 | "node_modules/path-is-absolute": {
1870 | "version": "1.0.1",
1871 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1872 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
1873 | "dev": true,
1874 | "engines": {
1875 | "node": ">=0.10.0"
1876 | }
1877 | },
1878 | "node_modules/path-key": {
1879 | "version": "3.1.1",
1880 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1881 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1882 | "dev": true,
1883 | "engines": {
1884 | "node": ">=8"
1885 | }
1886 | },
1887 | "node_modules/path-parse": {
1888 | "version": "1.0.7",
1889 | "license": "MIT"
1890 | },
1891 | "node_modules/path-type": {
1892 | "version": "4.0.0",
1893 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
1894 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
1895 | "dev": true,
1896 | "engines": {
1897 | "node": ">=8"
1898 | }
1899 | },
1900 | "node_modules/picocolors": {
1901 | "version": "1.0.0",
1902 | "dev": true,
1903 | "license": "ISC"
1904 | },
1905 | "node_modules/picomatch": {
1906 | "version": "2.3.1",
1907 | "license": "MIT",
1908 | "engines": {
1909 | "node": ">=8.6"
1910 | },
1911 | "funding": {
1912 | "url": "https://github.com/sponsors/jonschlinkert"
1913 | }
1914 | },
1915 | "node_modules/prelude-ls": {
1916 | "version": "1.2.1",
1917 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
1918 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
1919 | "dev": true,
1920 | "engines": {
1921 | "node": ">= 0.8.0"
1922 | }
1923 | },
1924 | "node_modules/prettier": {
1925 | "version": "2.8.7",
1926 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz",
1927 | "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==",
1928 | "dev": true,
1929 | "bin": {
1930 | "prettier": "bin-prettier.js"
1931 | },
1932 | "engines": {
1933 | "node": ">=10.13.0"
1934 | },
1935 | "funding": {
1936 | "url": "https://github.com/prettier/prettier?sponsor=1"
1937 | }
1938 | },
1939 | "node_modules/prettier-linter-helpers": {
1940 | "version": "1.0.0",
1941 | "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
1942 | "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
1943 | "dev": true,
1944 | "dependencies": {
1945 | "fast-diff": "^1.1.2"
1946 | },
1947 | "engines": {
1948 | "node": ">=6.0.0"
1949 | }
1950 | },
1951 | "node_modules/punycode": {
1952 | "version": "2.3.0",
1953 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
1954 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
1955 | "dev": true,
1956 | "engines": {
1957 | "node": ">=6"
1958 | }
1959 | },
1960 | "node_modules/queue-microtask": {
1961 | "version": "1.2.3",
1962 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1963 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
1964 | "dev": true,
1965 | "funding": [
1966 | {
1967 | "type": "github",
1968 | "url": "https://github.com/sponsors/feross"
1969 | },
1970 | {
1971 | "type": "patreon",
1972 | "url": "https://www.patreon.com/feross"
1973 | },
1974 | {
1975 | "type": "consulting",
1976 | "url": "https://feross.org/support"
1977 | }
1978 | ]
1979 | },
1980 | "node_modules/resolve": {
1981 | "version": "1.22.1",
1982 | "license": "MIT",
1983 | "dependencies": {
1984 | "is-core-module": "^2.9.0",
1985 | "path-parse": "^1.0.7",
1986 | "supports-preserve-symlinks-flag": "^1.0.0"
1987 | },
1988 | "bin": {
1989 | "resolve": "bin/resolve"
1990 | },
1991 | "funding": {
1992 | "url": "https://github.com/sponsors/ljharb"
1993 | }
1994 | },
1995 | "node_modules/resolve-from": {
1996 | "version": "4.0.0",
1997 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
1998 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
1999 | "dev": true,
2000 | "engines": {
2001 | "node": ">=4"
2002 | }
2003 | },
2004 | "node_modules/reusify": {
2005 | "version": "1.0.4",
2006 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
2007 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
2008 | "dev": true,
2009 | "engines": {
2010 | "iojs": ">=1.0.0",
2011 | "node": ">=0.10.0"
2012 | }
2013 | },
2014 | "node_modules/rimraf": {
2015 | "version": "3.0.2",
2016 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
2017 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
2018 | "dev": true,
2019 | "dependencies": {
2020 | "glob": "^7.1.3"
2021 | },
2022 | "bin": {
2023 | "rimraf": "bin.js"
2024 | },
2025 | "funding": {
2026 | "url": "https://github.com/sponsors/isaacs"
2027 | }
2028 | },
2029 | "node_modules/rollup": {
2030 | "version": "3.18.0",
2031 | "license": "MIT",
2032 | "bin": {
2033 | "rollup": "dist/bin/rollup"
2034 | },
2035 | "engines": {
2036 | "node": ">=14.18.0",
2037 | "npm": ">=8.0.0"
2038 | },
2039 | "optionalDependencies": {
2040 | "fsevents": "~2.3.2"
2041 | }
2042 | },
2043 | "node_modules/rollup-plugin-dts": {
2044 | "version": "5.3.0",
2045 | "dev": true,
2046 | "license": "LGPL-3.0",
2047 | "dependencies": {
2048 | "magic-string": "^0.30.0"
2049 | },
2050 | "engines": {
2051 | "node": ">=v14"
2052 | },
2053 | "funding": {
2054 | "url": "https://github.com/sponsors/Swatinem"
2055 | },
2056 | "optionalDependencies": {
2057 | "@babel/code-frame": "^7.18.6"
2058 | },
2059 | "peerDependencies": {
2060 | "rollup": "^3.0.0",
2061 | "typescript": "^4.1 || ^5.0"
2062 | }
2063 | },
2064 | "node_modules/rollup-plugin-dts/node_modules/magic-string": {
2065 | "version": "0.30.0",
2066 | "dev": true,
2067 | "license": "MIT",
2068 | "dependencies": {
2069 | "@jridgewell/sourcemap-codec": "^1.4.13"
2070 | },
2071 | "engines": {
2072 | "node": ">=12"
2073 | }
2074 | },
2075 | "node_modules/rollup-plugin-serve": {
2076 | "version": "2.0.2",
2077 | "dev": true,
2078 | "license": "MIT",
2079 | "dependencies": {
2080 | "mime": ">=2.4.6",
2081 | "opener": "1"
2082 | }
2083 | },
2084 | "node_modules/rollup-plugin-ts": {
2085 | "version": "3.2.0",
2086 | "dev": true,
2087 | "license": "MIT",
2088 | "dependencies": {
2089 | "@rollup/pluginutils": "^5.0.2",
2090 | "@wessberg/stringutil": "^1.0.19",
2091 | "ansi-colors": "^4.1.3",
2092 | "browserslist": "^4.21.4",
2093 | "browserslist-generator": "^2.0.1",
2094 | "compatfactory": "^2.0.9",
2095 | "crosspath": "^2.0.0",
2096 | "magic-string": "^0.27.0",
2097 | "ts-clone-node": "^2.0.4",
2098 | "tslib": "^2.4.1"
2099 | },
2100 | "engines": {
2101 | "node": ">=14.9.0",
2102 | "npm": ">=7.0.0",
2103 | "pnpm": ">=3.2.0",
2104 | "yarn": ">=1.13"
2105 | },
2106 | "funding": {
2107 | "type": "github",
2108 | "url": "https://github.com/wessberg/rollup-plugin-ts?sponsor=1"
2109 | },
2110 | "peerDependencies": {
2111 | "@babel/core": ">=6.x || >=7.x",
2112 | "@babel/plugin-transform-runtime": ">=6.x || >=7.x",
2113 | "@babel/preset-env": ">=6.x || >=7.x",
2114 | "@babel/preset-typescript": ">=6.x || >=7.x",
2115 | "@babel/runtime": ">=6.x || >=7.x",
2116 | "@swc/core": ">=1.x",
2117 | "@swc/helpers": ">=0.2",
2118 | "rollup": ">=1.x || >=2.x",
2119 | "typescript": ">=3.2.x || >= 4.x"
2120 | },
2121 | "peerDependenciesMeta": {
2122 | "@babel/core": {
2123 | "optional": true
2124 | },
2125 | "@babel/plugin-transform-runtime": {
2126 | "optional": true
2127 | },
2128 | "@babel/preset-env": {
2129 | "optional": true
2130 | },
2131 | "@babel/preset-typescript": {
2132 | "optional": true
2133 | },
2134 | "@babel/runtime": {
2135 | "optional": true
2136 | },
2137 | "@swc/core": {
2138 | "optional": true
2139 | },
2140 | "@swc/helpers": {
2141 | "optional": true
2142 | }
2143 | }
2144 | },
2145 | "node_modules/run-parallel": {
2146 | "version": "1.2.0",
2147 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2148 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
2149 | "dev": true,
2150 | "funding": [
2151 | {
2152 | "type": "github",
2153 | "url": "https://github.com/sponsors/feross"
2154 | },
2155 | {
2156 | "type": "patreon",
2157 | "url": "https://www.patreon.com/feross"
2158 | },
2159 | {
2160 | "type": "consulting",
2161 | "url": "https://feross.org/support"
2162 | }
2163 | ],
2164 | "dependencies": {
2165 | "queue-microtask": "^1.2.2"
2166 | }
2167 | },
2168 | "node_modules/semver": {
2169 | "version": "7.3.8",
2170 | "dev": true,
2171 | "license": "ISC",
2172 | "dependencies": {
2173 | "lru-cache": "^6.0.0"
2174 | },
2175 | "bin": {
2176 | "semver": "bin/semver.js"
2177 | },
2178 | "engines": {
2179 | "node": ">=10"
2180 | }
2181 | },
2182 | "node_modules/shebang-command": {
2183 | "version": "2.0.0",
2184 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2185 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2186 | "dev": true,
2187 | "dependencies": {
2188 | "shebang-regex": "^3.0.0"
2189 | },
2190 | "engines": {
2191 | "node": ">=8"
2192 | }
2193 | },
2194 | "node_modules/shebang-regex": {
2195 | "version": "3.0.0",
2196 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2197 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2198 | "dev": true,
2199 | "engines": {
2200 | "node": ">=8"
2201 | }
2202 | },
2203 | "node_modules/slash": {
2204 | "version": "3.0.0",
2205 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
2206 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
2207 | "dev": true,
2208 | "engines": {
2209 | "node": ">=8"
2210 | }
2211 | },
2212 | "node_modules/strip-ansi": {
2213 | "version": "6.0.1",
2214 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2215 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2216 | "dev": true,
2217 | "dependencies": {
2218 | "ansi-regex": "^5.0.1"
2219 | },
2220 | "engines": {
2221 | "node": ">=8"
2222 | }
2223 | },
2224 | "node_modules/strip-json-comments": {
2225 | "version": "3.1.1",
2226 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
2227 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
2228 | "dev": true,
2229 | "engines": {
2230 | "node": ">=8"
2231 | },
2232 | "funding": {
2233 | "url": "https://github.com/sponsors/sindresorhus"
2234 | }
2235 | },
2236 | "node_modules/style-mod": {
2237 | "version": "4.0.0",
2238 | "license": "MIT"
2239 | },
2240 | "node_modules/supports-color": {
2241 | "version": "5.5.0",
2242 | "dev": true,
2243 | "license": "MIT",
2244 | "optional": true,
2245 | "dependencies": {
2246 | "has-flag": "^3.0.0"
2247 | },
2248 | "engines": {
2249 | "node": ">=4"
2250 | }
2251 | },
2252 | "node_modules/supports-preserve-symlinks-flag": {
2253 | "version": "1.0.0",
2254 | "license": "MIT",
2255 | "engines": {
2256 | "node": ">= 0.4"
2257 | },
2258 | "funding": {
2259 | "url": "https://github.com/sponsors/ljharb"
2260 | }
2261 | },
2262 | "node_modules/text-table": {
2263 | "version": "0.2.0",
2264 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
2265 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
2266 | "dev": true
2267 | },
2268 | "node_modules/to-regex-range": {
2269 | "version": "5.0.1",
2270 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2271 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2272 | "dev": true,
2273 | "dependencies": {
2274 | "is-number": "^7.0.0"
2275 | },
2276 | "engines": {
2277 | "node": ">=8.0"
2278 | }
2279 | },
2280 | "node_modules/ts-clone-node": {
2281 | "version": "2.0.4",
2282 | "dev": true,
2283 | "license": "MIT",
2284 | "dependencies": {
2285 | "compatfactory": "^2.0.9"
2286 | },
2287 | "engines": {
2288 | "node": ">=14.9.0"
2289 | },
2290 | "funding": {
2291 | "type": "github",
2292 | "url": "https://github.com/wessberg/ts-clone-node?sponsor=1"
2293 | },
2294 | "peerDependencies": {
2295 | "typescript": "^3.x || ^4.x"
2296 | }
2297 | },
2298 | "node_modules/tslib": {
2299 | "version": "2.5.0",
2300 | "dev": true,
2301 | "license": "0BSD"
2302 | },
2303 | "node_modules/tsutils": {
2304 | "version": "3.21.0",
2305 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
2306 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
2307 | "dev": true,
2308 | "dependencies": {
2309 | "tslib": "^1.8.1"
2310 | },
2311 | "engines": {
2312 | "node": ">= 6"
2313 | },
2314 | "peerDependencies": {
2315 | "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
2316 | }
2317 | },
2318 | "node_modules/tsutils/node_modules/tslib": {
2319 | "version": "1.14.1",
2320 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
2321 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
2322 | "dev": true
2323 | },
2324 | "node_modules/type-check": {
2325 | "version": "0.4.0",
2326 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
2327 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
2328 | "dev": true,
2329 | "dependencies": {
2330 | "prelude-ls": "^1.2.1"
2331 | },
2332 | "engines": {
2333 | "node": ">= 0.8.0"
2334 | }
2335 | },
2336 | "node_modules/type-fest": {
2337 | "version": "0.20.2",
2338 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
2339 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
2340 | "dev": true,
2341 | "engines": {
2342 | "node": ">=10"
2343 | },
2344 | "funding": {
2345 | "url": "https://github.com/sponsors/sindresorhus"
2346 | }
2347 | },
2348 | "node_modules/typescript": {
2349 | "version": "4.9.5",
2350 | "dev": true,
2351 | "license": "Apache-2.0",
2352 | "bin": {
2353 | "tsc": "bin/tsc",
2354 | "tsserver": "bin/tsserver"
2355 | },
2356 | "engines": {
2357 | "node": ">=4.2.0"
2358 | }
2359 | },
2360 | "node_modules/ua-parser-js": {
2361 | "version": "1.0.34",
2362 | "dev": true,
2363 | "funding": [
2364 | {
2365 | "type": "opencollective",
2366 | "url": "https://opencollective.com/ua-parser-js"
2367 | },
2368 | {
2369 | "type": "paypal",
2370 | "url": "https://paypal.me/faisalman"
2371 | }
2372 | ],
2373 | "license": "MIT",
2374 | "engines": {
2375 | "node": "*"
2376 | }
2377 | },
2378 | "node_modules/update-browserslist-db": {
2379 | "version": "1.0.10",
2380 | "dev": true,
2381 | "funding": [
2382 | {
2383 | "type": "opencollective",
2384 | "url": "https://opencollective.com/browserslist"
2385 | },
2386 | {
2387 | "type": "tidelift",
2388 | "url": "https://tidelift.com/funding/github/npm/browserslist"
2389 | }
2390 | ],
2391 | "license": "MIT",
2392 | "dependencies": {
2393 | "escalade": "^3.1.1",
2394 | "picocolors": "^1.0.0"
2395 | },
2396 | "bin": {
2397 | "browserslist-lint": "cli.js"
2398 | },
2399 | "peerDependencies": {
2400 | "browserslist": ">= 4.21.0"
2401 | }
2402 | },
2403 | "node_modules/uri-js": {
2404 | "version": "4.4.1",
2405 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
2406 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
2407 | "dev": true,
2408 | "dependencies": {
2409 | "punycode": "^2.1.0"
2410 | }
2411 | },
2412 | "node_modules/w3c-keyname": {
2413 | "version": "2.2.6",
2414 | "license": "MIT"
2415 | },
2416 | "node_modules/which": {
2417 | "version": "2.0.2",
2418 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2419 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2420 | "dev": true,
2421 | "dependencies": {
2422 | "isexe": "^2.0.0"
2423 | },
2424 | "bin": {
2425 | "node-which": "bin/node-which"
2426 | },
2427 | "engines": {
2428 | "node": ">= 8"
2429 | }
2430 | },
2431 | "node_modules/word-wrap": {
2432 | "version": "1.2.3",
2433 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
2434 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
2435 | "dev": true,
2436 | "engines": {
2437 | "node": ">=0.10.0"
2438 | }
2439 | },
2440 | "node_modules/wrappy": {
2441 | "version": "1.0.2",
2442 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2443 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
2444 | "dev": true
2445 | },
2446 | "node_modules/yallist": {
2447 | "version": "4.0.0",
2448 | "dev": true,
2449 | "license": "ISC"
2450 | },
2451 | "node_modules/yocto-queue": {
2452 | "version": "0.1.0",
2453 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
2454 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
2455 | "dev": true,
2456 | "engines": {
2457 | "node": ">=10"
2458 | },
2459 | "funding": {
2460 | "url": "https://github.com/sponsors/sindresorhus"
2461 | }
2462 | }
2463 | }
2464 | }
2465 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "codemirror-app-spreadsheet",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "./src/editor.js",
6 | "scripts": {
7 | "start": "rollup -c \"rollup.config.js\" -w",
8 | "test": "echo \"Error: no test specified\" && exit 1",
9 | "prettier-format": "prettier --config .prettierrc --write \"src/**/*.ts\"",
10 | "prettier-check": "prettier --check \"src/**/*.ts\"",
11 | "lint": "eslint --ext .ts --ignore-path .eslintignore ."
12 | },
13 | "author": "",
14 | "license": "ISC",
15 | "type": "module",
16 | "dependencies": {
17 | "@codemirror/autocomplete": "^6.4.2",
18 | "@codemirror/commands": "^6.2.1",
19 | "@codemirror/lang-javascript": "^6.1.4",
20 | "@codemirror/state": "^6.2.0",
21 | "@codemirror/view": "^6.9.2",
22 | "@rollup/plugin-node-resolve": "^15.0.1",
23 | "codemirror": "^6.0.1",
24 | "codemirror-lang-spreadsheet": "^1.0.3",
25 | "rollup": "^3.18.0"
26 | },
27 | "devDependencies": {
28 | "@codemirror/language": "^6.6.0",
29 | "@lezer/highlight": "^1.1.3",
30 | "@typescript-eslint/eslint-plugin": "^5.57.0",
31 | "eslint": "^8.37.0",
32 | "eslint-config-prettier": "^8.8.0",
33 | "eslint-plugin-prettier": "^4.2.1",
34 | "prettier": "^2.8.7",
35 | "rollup-plugin-dts": "^5.3.0",
36 | "rollup-plugin-serve": "^2.0.2",
37 | "rollup-plugin-ts": "^3.2.0",
38 | "typescript": "^4.9.5"
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/rollup.config.js:
--------------------------------------------------------------------------------
1 | import { nodeResolve } from "@rollup/plugin-node-resolve"
2 | import typescript from "rollup-plugin-ts"
3 | import serve from 'rollup-plugin-serve'
4 |
5 | export default {
6 | input: "./src/editor.ts",
7 | output: {
8 | file: "./dist/editor.bundle.js",
9 | format: "iife",
10 | },
11 | plugins: [
12 | typescript(),
13 | nodeResolve(),
14 | serve({
15 | open: true,
16 | verbose: true,
17 | contentBase: ['demo', 'dist'],
18 | host: 'localhost',
19 | port: 10001
20 | }),
21 | ],
22 | };
--------------------------------------------------------------------------------
/src/autocompletion.ts:
--------------------------------------------------------------------------------
1 | import {
2 | autocompletion,
3 | CompletionContext,
4 | Completion,
5 | CompletionResult
6 | } from '@codemirror/autocomplete';
7 | import { syntaxTree } from '@codemirror/language';
8 | import { Toptions } from 'codemirror-lang-spreadsheet';
9 | import { EditorView } from '@codemirror/view';
10 | import { Compartment } from '@codemirror/state';
11 |
12 | /**
13 | * Dispatch a autocompletion reconfigure on editor
14 | * @param editor the Editor View
15 | * @param autocompleteCompartment the autocomplete compartment
16 | * @param newIdiom the new idiom to autocomplete
17 | */
18 | export async function setAutocompletionIdiom(
19 | editor: EditorView,
20 | autocompleteCompartment: Compartment,
21 | newIdiom: NonNullable
22 | ): Promise {
23 | const fileName = `${newIdiom}.json`,
24 | optionsResponse = await fetch(fileName);
25 | if (!optionsResponse.ok) throw new Error(`Failed to fetch ${fileName}`);
26 |
27 | const options = await optionsResponse.json();
28 | function completions(context: CompletionContext): CompletionResult | null {
29 | const currNode = syntaxTree(context.state).resolveInner(context.pos, 0);
30 | if (currNode.name === 'TextToken') return null;
31 | const word = context.matchBefore(/\w*/);
32 | if (word && word.from == word.to && !context.explicit) return null;
33 | return {
34 | from: word!.from,
35 | options: options.map(
36 | (label: string): Completion => ({
37 | label,
38 | type: 'function',
39 | apply: `${label}(`
40 | })
41 | )
42 | };
43 | }
44 |
45 | editor.dispatch({
46 | effects: autocompleteCompartment.reconfigure(
47 | autocompletion({ override: [completions] })
48 | )
49 | });
50 | }
51 |
--------------------------------------------------------------------------------
/src/editor.ts:
--------------------------------------------------------------------------------
1 | //3rd's
2 | import { basicSetup } from 'codemirror';
3 | import { EditorView, keymap } from '@codemirror/view';
4 | import { spreadsheet, Toptions } from 'codemirror-lang-spreadsheet';
5 | import { syntaxHighlighting, HighlightStyle } from '@codemirror/language';
6 | import { tags } from '@lezer/highlight';
7 | import { Compartment } from '@codemirror/state';
8 |
9 | // Locals
10 | import {
11 | indentAndCompletionWithTab,
12 | tabObservable
13 | } from './indent-completion-tab';
14 | import { setAutocompletionIdiom } from './autocompletion';
15 | import { setEditorOptions } from './idiom-decimal-separator';
16 | import { codePrettier } from './prettier';
17 |
18 | const defaultIdiom = 'en-US',
19 | inptIdiom = document.getElementById('langComp') as HTMLSelectElement,
20 | inptSeparator = document.getElementById('separator') as HTMLSelectElement,
21 | inptIndent = document.getElementById('indent') as HTMLInputElement,
22 | btnPrettier = document.getElementById('prettier') as HTMLButtonElement,
23 | languageCompart = new Compartment(),
24 | autocompleteCompart = new Compartment();
25 |
26 | /**
27 | * Configure highlighting
28 | */
29 | const myHighlightStyle = HighlightStyle.define([
30 | { tag: tags.name, color: 'green' }, // Color of functions
31 | { tag: tags.bool, color: '#A020F0' }, // Color of booleans (TRUE or FALSE)
32 | { tag: tags.color, color: '#0000FF' }, // Color of references (eg.: cell, range, named range,...)
33 | { tag: tags.invalid, color: '#FA6F66' } // Color of erros (eg.: #N/A, #DIV/0!, #REF!, #NAME!...)
34 | ]);
35 |
36 | /**
37 | * Create the editor
38 | */
39 | const extensions = [
40 | basicSetup,
41 | keymap.of([indentAndCompletionWithTab]),
42 | syntaxHighlighting(myHighlightStyle),
43 | tabObservable(),
44 | EditorView.lineWrapping
45 | ];
46 |
47 | const editor = new EditorView({
48 | doc: 'IF(SUM(IF(A1=A2,10,-1))=1, "Condition1", "Condition2")',
49 | extensions: [
50 | ...extensions,
51 | languageCompart.of(spreadsheet()),
52 | autocompleteCompart.of([])
53 | ],
54 | parent: document.getElementById('editor') as HTMLDivElement
55 | });
56 |
57 | // Changes editor's config when change decimal separator
58 | inptSeparator.addEventListener('change', (e) => {
59 | const newDecimalSeparator = (e.target as HTMLTextAreaElement).value;
60 | setEditorOptions(editor, languageCompart, {
61 | idiom: inptIdiom.value as NonNullable,
62 | decimalSeparator: newDecimalSeparator as NonNullable<
63 | Toptions['decimalSeparator']
64 | >
65 | });
66 | });
67 |
68 | // Set default autocompletion
69 | setAutocompletionIdiom(editor, autocompleteCompart, defaultIdiom);
70 |
71 | // Changes editor's config and autocompletion when idiom change
72 | inptIdiom.addEventListener('change', (e) => {
73 | const newIdiom = (e.target as HTMLTextAreaElement).value;
74 | setEditorOptions(editor, languageCompart, {
75 | idiom: newIdiom as NonNullable,
76 | decimalSeparator: inptSeparator.value as NonNullable<
77 | Toptions['decimalSeparator']
78 | >
79 | });
80 | setAutocompletionIdiom(
81 | editor,
82 | autocompleteCompart,
83 | newIdiom as NonNullable
84 | );
85 | });
86 |
87 | // Format formula
88 | btnPrettier.addEventListener('click', (e) => {
89 | codePrettier(editor, inptIndent.value);
90 | });
91 |
--------------------------------------------------------------------------------
/src/idiom-decimal-separator.ts:
--------------------------------------------------------------------------------
1 | import {
2 | spreadsheet,
3 | Toptions
4 | } from 'codemirror-lang-spreadsheet';
5 | import { EditorView } from '@codemirror/view';
6 | import { Compartment } from '@codemirror/state';
7 |
8 | /**
9 | * Changes editor options (idiom and/or decimal separator)
10 | * @param editor the EditorView
11 | * @param languageCompartment the language compartment
12 | * @param options spreadsheet language options (idiom and/or decimal separator)
13 | */
14 | export function setEditorOptions(
15 | editor: EditorView,
16 | languageCompartment: Compartment,
17 | options: Toptions
18 | ): void {
19 | editor.dispatch({
20 | effects: languageCompartment.reconfigure(spreadsheet(options)),
21 | changes: {
22 | //Force reprocessing
23 | from: 0,
24 | to: editor.state.doc.length,
25 | insert: editor.state.doc.toString()
26 | }
27 | });
28 | }
29 |
--------------------------------------------------------------------------------
/src/indent-completion-tab.ts:
--------------------------------------------------------------------------------
1 | import { EditorView } from '@codemirror/view';
2 | import { completionStatus, acceptCompletion } from '@codemirror/autocomplete';
3 | import { ViewPlugin, ViewUpdate, KeyBinding, Command } from '@codemirror/view';
4 | import { indentWithTab } from '@codemirror/commands';
5 |
6 | // Select autocompletion with tab
7 | // Inspired by: https://sourcegraph.com/github.com/sourcegraph/sourcegraph@f1c08e272abf56e8f107589a49bc2a5c54429d19/-/blob/client/search-ui/src/input/extensions/loading-indicator.ts
8 | let isAutocompleteOpen = false;
9 |
10 | function tabRun(view: EditorView) {
11 | return isAutocompleteOpen
12 | ? acceptCompletion(view)
13 | : indentWithTab.run && indentWithTab.run(view);
14 | }
15 |
16 | export const indentAndCompletionWithTab: KeyBinding = {
17 | ...indentWithTab,
18 | run: tabRun as Command
19 | };
20 |
21 | export function tabObservable() {
22 | return [
23 | ViewPlugin.fromClass(
24 | class {
25 | constructor(private view: EditorView) {}
26 |
27 | update(update: ViewUpdate) {
28 | const status = completionStatus(update.state);
29 | isAutocompleteOpen = status !== null;
30 | }
31 | }
32 | )
33 | ];
34 | }
35 |
--------------------------------------------------------------------------------
/src/prettier.ts:
--------------------------------------------------------------------------------
1 | import { EditorView } from '@codemirror/view';
2 | import { ensureSyntaxTree } from '@codemirror/language';
3 |
4 | /**
5 | * Improve function visualization by adding indentation
6 | * @param editor the EditorView
7 | * @param indentSize number of indent spaces
8 | * @returns
9 | */
10 | export function codePrettier(
11 | editor: EditorView,
12 | indentSize: number | string
13 | ): void {
14 | // Just remove current whitespaces and line breakes
15 | editor.dispatch({
16 | changes: {
17 | from: 0,
18 | to: editor.state.doc.length,
19 | insert: editor.state.doc.toString().replace(/(?:\r\n|\r|\n)/g, '')
20 | }
21 | });
22 |
23 | const currDoc = editor.state.doc.toString();
24 |
25 | // Get node tree
26 | const tree = ensureSyntaxTree(editor.state, currDoc.length, 5000);
27 |
28 | if (!tree) return;
29 |
30 | // Nodes that will be indent/dedent
31 | const indentNodes = ['Function', 'Argument', 'OpenParen', 'CloseParen'],
32 | indentIncrease = ['Function'],
33 | indentDecrease = ['CloseParen'],
34 | nodes: { from: number; to: number; indent: number }[] = []; // Stores node position and indentation value for later processing
35 |
36 | let indentDepth = 0; // Stores indent level
37 | tree.iterate({
38 | enter: ({ name, from, to }) => {
39 | if (indentNodes.indexOf(name) === -1) return;
40 | if (indentDecrease.indexOf(name) !== -1) indentDepth--;
41 | nodes.push({
42 | from,
43 | to,
44 | indent: +indentSize * indentDepth
45 | });
46 | if (indentIncrease.indexOf(name) !== -1) indentDepth++;
47 | }
48 | });
49 |
50 | let formattedDoc = '';
51 | for (let idx = 0; idx < nodes.length; idx++) {
52 | const currNode = nodes[idx],
53 | nextNode = nodes[idx + 1];
54 |
55 | formattedDoc =
56 | formattedDoc +
57 | ' '.repeat(currNode.indent) +
58 | currDoc.substring(
59 | idx === 0 ? 0 : currNode.from,
60 | nextNode?.from ?? currNode.to
61 | ) +
62 | (nextNode?.indent > 0 || currNode.indent > 0 ? '\n' : '');
63 | }
64 |
65 | // Remove empty lines
66 | formattedDoc = (formattedDoc === '' ? currDoc : formattedDoc).replace(
67 | /^\s*[\r\n]/gm,
68 | ''
69 | );
70 |
71 | editor.dispatch({
72 | changes: {
73 | from: 0,
74 | to: editor.state.doc.length,
75 | insert: formattedDoc
76 | }
77 | });
78 | }
79 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "strict": true,
4 | "target": "es6",
5 | "module": "es2020",
6 | "newLine": "lf",
7 | "declaration": false,
8 | "moduleResolution": "node"
9 | },
10 | "include": ["src/*.ts"]
11 | }
12 |
--------------------------------------------------------------------------------