@vxrn/utils 1.25.5 → 1.25.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/cjs/createMessageSocket.cjs +133 -0
  2. package/dist/cjs/createMessageSocket.native.js +182 -0
  3. package/dist/cjs/createMessageSocket.native.js.map +1 -0
  4. package/dist/cjs/detectPackageManager.cjs +93 -0
  5. package/dist/cjs/detectPackageManager.native.js +103 -0
  6. package/dist/cjs/detectPackageManager.native.js.map +1 -0
  7. package/dist/cjs/exec.cjs +63 -0
  8. package/dist/cjs/exec.native.js +68 -0
  9. package/dist/cjs/exec.native.js.map +1 -0
  10. package/dist/cjs/index.cjs +25 -0
  11. package/dist/cjs/index.native.js +28 -0
  12. package/dist/cjs/index.native.js.map +1 -0
  13. package/dist/cjs/mustReplace.cjs +49 -0
  14. package/dist/cjs/mustReplace.native.js +78 -0
  15. package/dist/cjs/mustReplace.native.js.map +1 -0
  16. package/dist/esm/createMessageSocket.mjs +108 -0
  17. package/dist/esm/createMessageSocket.mjs.map +1 -0
  18. package/dist/esm/createMessageSocket.native.js +154 -0
  19. package/dist/esm/createMessageSocket.native.js.map +1 -0
  20. package/dist/esm/detectPackageManager.mjs +68 -0
  21. package/dist/esm/detectPackageManager.mjs.map +1 -0
  22. package/dist/esm/detectPackageManager.native.js +75 -0
  23. package/dist/esm/detectPackageManager.native.js.map +1 -0
  24. package/dist/esm/exec.mjs +36 -0
  25. package/dist/esm/exec.mjs.map +1 -0
  26. package/dist/esm/exec.native.js +38 -0
  27. package/dist/esm/exec.native.js.map +1 -0
  28. package/dist/esm/index.js +7 -0
  29. package/dist/esm/index.js.map +1 -0
  30. package/dist/esm/index.mjs +7 -0
  31. package/dist/esm/index.mjs.map +1 -0
  32. package/dist/esm/index.native.js +7 -0
  33. package/dist/esm/index.native.js.map +1 -0
  34. package/dist/esm/mustReplace.mjs +24 -0
  35. package/dist/esm/mustReplace.mjs.map +1 -0
  36. package/dist/esm/mustReplace.native.js +50 -0
  37. package/dist/esm/mustReplace.native.js.map +1 -0
  38. package/package.json +3 -3
  39. package/types/createMessageSocket.d.ts.map +1 -0
  40. package/types/detectPackageManager.d.ts.map +1 -0
  41. package/types/exec.d.ts.map +1 -0
  42. package/types/index.d.ts.map +1 -0
  43. package/types/mustReplace.d.ts.map +1 -0
@@ -0,0 +1,36 @@
1
+ import { execSync, spawn } from "node:child_process";
2
+ const exec = (cmd, options) => {
3
+ return execSync(cmd, options)?.toString() || "";
4
+ };
5
+ const execPromise = (cmd, options) => {
6
+ return new Promise((resolve, reject) => {
7
+ const [command, ...args] = cmd.split(" ");
8
+ const child = spawn(command, args, {
9
+ stdio: options?.quiet ? "pipe" : "inherit",
10
+ shell: true,
11
+ ...options
12
+ });
13
+ if (!options?.quiet || process.env.DEBUG) {
14
+ child.stdout?.pipe(process.stdout);
15
+ child.stderr?.pipe(process.stderr);
16
+ }
17
+ child.on("close", code => {
18
+ if (code !== 0) {
19
+ reject(new Error(`Command failed with exit code ${code}: ${cmd}`));
20
+ } else {
21
+ resolve();
22
+ }
23
+ });
24
+ child.on("error", error => {
25
+ reject(error);
26
+ });
27
+ });
28
+ };
29
+ const execPromiseQuiet = (cmd, options) => {
30
+ return execPromise(cmd, {
31
+ ...options,
32
+ quiet: true
33
+ });
34
+ };
35
+ export { exec, execPromise, execPromiseQuiet };
36
+ //# sourceMappingURL=exec.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["execSync","spawn","exec","cmd","options","toString","execPromise","Promise","resolve","reject","command","args","split","child","stdio","quiet","shell","process","env","DEBUG","stdout","pipe","stderr","on","code","Error","error","execPromiseQuiet"],"sources":["../../src/exec.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAA,EAA6BC,KAAA,QAAa;AAG5C,MAAMC,IAAA,GAAOA,CAACC,GAAA,EAAaC,OAAA,KAA6C;EAC7E,OAAOJ,QAAA,CAASG,GAAA,EAAKC,OAAO,GAAGC,QAAA,CAAS,KAAK;AAC/C;AAEO,MAAMC,WAAA,GAAcA,CACzBH,GAAA,EACAC,OAAA,KAGG;EACH,OAAO,IAAIG,OAAA,CAAc,CAACC,OAAA,EAASC,MAAA,KAAW;IAC5C,MAAM,CAACC,OAAA,EAAS,GAAGC,IAAI,IAAIR,GAAA,CAAIS,KAAA,CAAM,GAAG;IAExC,MAAMC,KAAA,GAAQZ,KAAA,CAAMS,OAAA,EAASC,IAAA,EAAM;MACjCG,KAAA,EAAOV,OAAA,EAASW,KAAA,GAAQ,SAAS;MACjCC,KAAA,EAAO;MACP,GAAGZ;IACL,CAAC;IAED,IAAI,CAACA,OAAA,EAASW,KAAA,IAASE,OAAA,CAAQC,GAAA,CAAIC,KAAA,EAAO;MACxCN,KAAA,CAAMO,MAAA,EAAQC,IAAA,CAAKJ,OAAA,CAAQG,MAAM;MACjCP,KAAA,CAAMS,MAAA,EAAQD,IAAA,CAAKJ,OAAA,CAAQK,MAAM;IACnC;IAEAT,KAAA,CAAMU,EAAA,CAAG,SAAUC,IAAA,IAAS;MAC1B,IAAIA,IAAA,KAAS,GAAG;QACdf,MAAA,CAAO,IAAIgB,KAAA,CAAM,iCAAiCD,IAAI,KAAKrB,GAAG,EAAE,CAAC;MACnE,OAAO;QACLK,OAAA,CAAQ;MACV;IACF,CAAC;IAEDK,KAAA,CAAMU,EAAA,CAAG,SAAUG,KAAA,IAAU;MAC3BjB,MAAA,CAAOiB,KAAK;IACd,CAAC;EACH,CAAC;AACH;AAEO,MAAMC,gBAAA,GAAmBA,CAC9BxB,GAAA,EACAC,OAAA,KAGG;EACH,OAAOE,WAAA,CAAYH,GAAA,EAAK;IACtB,GAAGC,OAAA;IACHW,KAAA,EAAO;EACT,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,38 @@
1
+ import { execSync, spawn } from "child_process";
2
+ var exec = function (cmd, options) {
3
+ var _execSync;
4
+ return ((_execSync = execSync(cmd, options)) === null || _execSync === void 0 ? void 0 : _execSync.toString()) || "";
5
+ };
6
+ var execPromise = function (cmd, options) {
7
+ return new Promise(function (resolve, reject) {
8
+ var [command, ...args] = cmd.split(" ");
9
+ var child = spawn(command, args, {
10
+ stdio: (options === null || options === void 0 ? void 0 : options.quiet) ? "pipe" : "inherit",
11
+ shell: true,
12
+ ...options
13
+ });
14
+ if (!(options === null || options === void 0 ? void 0 : options.quiet) || process.env.DEBUG) {
15
+ var _child_stdout, _child_stderr;
16
+ (_child_stdout = child.stdout) === null || _child_stdout === void 0 ? void 0 : _child_stdout.pipe(process.stdout);
17
+ (_child_stderr = child.stderr) === null || _child_stderr === void 0 ? void 0 : _child_stderr.pipe(process.stderr);
18
+ }
19
+ child.on("close", function (code) {
20
+ if (code !== 0) {
21
+ reject(new Error(`Command failed with exit code ${code}: ${cmd}`));
22
+ } else {
23
+ resolve();
24
+ }
25
+ });
26
+ child.on("error", function (error) {
27
+ reject(error);
28
+ });
29
+ });
30
+ };
31
+ var execPromiseQuiet = function (cmd, options) {
32
+ return execPromise(cmd, {
33
+ ...options,
34
+ quiet: true
35
+ });
36
+ };
37
+ export { exec, execPromise, execPromiseQuiet };
38
+ //# sourceMappingURL=exec.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["execSync","spawn","exec","cmd","options","_execSync","toString","execPromise","Promise","resolve","reject","command","args","split","child","stdio","quiet","shell","process","env","DEBUG","_child_stdout","_child_stderr","stdout","pipe","stderr","on","code","Error","error","execPromiseQuiet"],"sources":["../../src/exec.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAA,EAA6BC,KAAA,QAAa;AAG5C,IAAAC,IAAM,YAAAA,CAAqBC,GAAA,EAAAC,OAA6C;EAC7E,IAAAC,SAAO;EACT,SAAAA,SAAA,GAAAL,QAAA,CAAAG,GAAA,EAAAC,OAAA,eAAAC,SAAA,uBAAAA,SAAA,CAAAC,QAAA;AAEO;AAML,IAAAC,WAAW,YAAAA,CAAeJ,GAAA,EAASC,OAAA;EACjC,WAAOI,OAAS,WAAOC,OAAQ,EAAAC,MAAS;IAExC,KAAAC,OAAM,EAAQ,GAAAC,IAAM,IAAAT,GAAA,CAASU,KAAA,CAAM;IAAA,IACjCC,KAAO,GAAAb,KAAA,CAASU,OAAA,EAAQC,IAAA;MACxBG,KAAA,EAAO,CAAAX,OAAA,aAAAA,OAAA,uBAAAA,OAAA,CAAAY,KAAA;MACPC,KAAG;MACJ,GAAAb;IAED;IACE,MAAAA,OAAM,KAAQ,IAAK,IAAAA,OAAQ,KAAM,kBAAAA,OAAA,CAAAY,KAAA,KAAAE,OAAA,CAAAC,GAAA,CAAAC,KAAA;MACjC,IAAAC,aAAc,EAAKC,aAAQ;MAC7B,CAAAD,aAAA,GAAAP,KAAA,CAAAS,MAAA,cAAAF,aAAA,uBAAAA,aAAA,CAAAG,IAAA,CAAAN,OAAA,CAAAK,MAAA;MAEA,CAAAD,aAAS,GAAUR,KAAA,CAAAW,MAAS,cAAAH,aAAA,uBAAAA,aAAA,CAAAE,IAAA,CAAAN,OAAA,CAAAO,MAAA;IAC1B;IACEX,KAAA,CAAAY,EAAA,QAAW,YAAMC,IAAA;MACnB,IAAAA,IAAO;QACLjB,MAAA,KAAQkB,KAAA,kCAAAD,IAAA,KAAAxB,GAAA;MACV;QACDM,OAAA;MAED;IACE;IACFK,KAAC,CAAAY,EAAA,oBAAAG,KAAA;MACFnB,MAAA,CAAAmB,KAAA;IACH;EAEO;AAML;AAAwB,IACtBC,gBAAG,YAAAA,CAAA3B,GAAA,EAAAC,OAAA;EAAA,OACHG,WAAO,CAAAJ,GAAA;IACR,GAAAC,OAAA;IACHY,KAAA","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ export * from "@vxrn/debug";
2
+ export * from "@vxrn/resolve";
3
+ export * from "./createMessageSocket.mjs";
4
+ export * from "./detectPackageManager.mjs";
5
+ export * from "./exec.mjs";
6
+ export * from "./mustReplace.mjs";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ export * from "@vxrn/debug";
2
+ export * from "@vxrn/resolve";
3
+ export * from "./createMessageSocket.mjs";
4
+ export * from "./detectPackageManager.mjs";
5
+ export * from "./exec.mjs";
6
+ export * from "./mustReplace.mjs";
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ export * from "@vxrn/debug";
2
+ export * from "@vxrn/resolve";
3
+ export * from "./createMessageSocket.native.js";
4
+ export * from "./detectPackageManager.native.js";
5
+ export * from "./exec.native.js";
6
+ export * from "./mustReplace.native.js";
7
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ import { writeFileSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ function mustReplace(source, replacements) {
5
+ let sourceOut = source;
6
+ for (const {
7
+ find,
8
+ replace,
9
+ optional
10
+ } of replacements) {
11
+ if (!optional) {
12
+ const found = find instanceof RegExp ? find.test(sourceOut) : sourceOut.includes(find);
13
+ if (!found) {
14
+ const tmpPath = join(tmpdir(), `replace-error-${Math.random()}`);
15
+ writeFileSync(tmpPath, sourceOut, "utf-8");
16
+ throw new Error(`Substring or pattern "${find}" not found in the string, replacing in source: ${tmpPath}.`);
17
+ }
18
+ }
19
+ sourceOut = sourceOut.replace(find, replace);
20
+ }
21
+ return sourceOut;
22
+ }
23
+ export { mustReplace };
24
+ //# sourceMappingURL=mustReplace.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["writeFileSync","tmpdir","join","mustReplace","source","replacements","sourceOut","find","replace","optional","found","RegExp","test","includes","tmpPath","Math","random","Error"],"sources":["../../src/mustReplace.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,aAAA,QAAqB;AAC9B,SAASC,MAAA,QAAc;AACvB,SAASC,IAAA,QAAY;AAEd,SAASC,YACdC,MAAA,EACAC,YAAA,EAKA;EACA,IAAIC,SAAA,GAAYF,MAAA;EAChB,WAAW;IAAEG,IAAA;IAAMC,OAAA;IAASC;EAAS,KAAKJ,YAAA,EAAc;IACtD,IAAI,CAACI,QAAA,EAAU;MACb,MAAMC,KAAA,GACJH,IAAA,YAAgBI,MAAA,GAASJ,IAAA,CAAKK,IAAA,CAAKN,SAAS,IAAIA,SAAA,CAAUO,QAAA,CAASN,IAAI;MACzE,IAAI,CAACG,KAAA,EAAO;QACV,MAAMI,OAAA,GAAUZ,IAAA,CAAKD,MAAA,CAAO,GAAG,iBAAiBc,IAAA,CAAKC,MAAA,CAAO,CAAC,EAAE;QAC/DhB,aAAA,CAAcc,OAAA,EAASR,SAAA,EAAW,OAAO;QACzC,MAAM,IAAIW,KAAA,CACR,yBAAyBV,IAAI,mDAAmDO,OAAO,GACzF;MACF;IACF;IAGAR,SAAA,GAAYA,SAAA,CAAUE,OAAA,CAAQD,IAAA,EAAMC,OAAO;EAC7C;EACA,OAAOF,SAAA;AACT","ignoreList":[]}
@@ -0,0 +1,50 @@
1
+ import { writeFileSync } from "fs";
2
+ import { tmpdir } from "os";
3
+ import { join } from "path";
4
+ function _instanceof(left, right) {
5
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
6
+ return !!right[Symbol.hasInstance](left);
7
+ } else {
8
+ return left instanceof right;
9
+ }
10
+ }
11
+ function mustReplace(source, replacements) {
12
+ var sourceOut = source;
13
+ var _iteratorNormalCompletion = true,
14
+ _didIteratorError = false,
15
+ _iteratorError = void 0;
16
+ try {
17
+ for (var _iterator = replacements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
18
+ var {
19
+ find,
20
+ replace,
21
+ optional
22
+ } = _step.value;
23
+ if (!optional) {
24
+ var found = _instanceof(find, RegExp) ? find.test(sourceOut) : sourceOut.includes(find);
25
+ if (!found) {
26
+ var tmpPath = join(tmpdir(), `replace-error-${Math.random()}`);
27
+ writeFileSync(tmpPath, sourceOut, "utf-8");
28
+ throw new Error(`Substring or pattern "${find}" not found in the string, replacing in source: ${tmpPath}.`);
29
+ }
30
+ }
31
+ sourceOut = sourceOut.replace(find, replace);
32
+ }
33
+ } catch (err) {
34
+ _didIteratorError = true;
35
+ _iteratorError = err;
36
+ } finally {
37
+ try {
38
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
39
+ _iterator.return();
40
+ }
41
+ } finally {
42
+ if (_didIteratorError) {
43
+ throw _iteratorError;
44
+ }
45
+ }
46
+ }
47
+ return sourceOut;
48
+ }
49
+ export { mustReplace };
50
+ //# sourceMappingURL=mustReplace.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["writeFileSync","tmpdir","join","_instanceof","left","right","Symbol","hasInstance","mustReplace","source","replacements","sourceOut","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","iterator","_step","next","done","find","replace","optional","value","found","RegExp","test","includes","tmpPath","Math","random"],"sources":["../../src/mustReplace.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,aAAA,QAAqB;AAC9B,SAASC,MAAA,QAAc;AACvB,SAASC,IAAA,QAAY;AAEd,SAASC,YACdC,IAAA,EAAAC,KACA;EAMA,IAAIA,KAAA,QAAY,WAAAC,MAAA,oBAAAD,KAAA,CAAAC,MAAA,CAAAC,WAAA;IAChB,SAAWF,KAAE,CAAAC,MAAM,CAAAC,WAAS,EAASH,IAAA,CAAK;EACxC,OAAK;IACH,OAAAA,IAAM,YACJC,KAAA;EACF;AACE;AACA,SAAAG,YAAAC,MAAc,EAAAC,YAAS,EAAW;EAClC,IAAAC,SAAM,GAAIF,MAAA;EAAA,IAAAG,yBACR,OAAyB;IAAIC,iBAAA;IAAAC,cAAA,SAAmD;EAAO;IACzF,KACF,IAAAC,SAAA,GAAAL,YAAA,CAAAJ,MAAA,CAAAU,QAAA,KAAAC,KAAA,IAAAL,yBAAA,IAAAK,KAAA,GAAAF,SAAA,CAAAG,IAAA,IAAAC,IAAA,GAAAP,yBAAA;MACF;QAAAQ,IAAA;QAAAC,OAAA;QAAAC;MAAA,IAAAL,KAAA,CAAAM,KAAA;MAGA,KAAAD,QAAY;QACd,IAAAE,KAAA,GAAArB,WAAA,CAAAiB,IAAA,EAAAK,MAAA,IAAAL,IAAA,CAAAM,IAAA,CAAAf,SAAA,IAAAA,SAAA,CAAAgB,QAAA,CAAAP,IAAA;QACA,IAAO,CAAAI,KAAA;UACT,IAAAI,OAAA,GAAA1B,IAAA,CAAAD,MAAA,qBAAA4B,IAAA,CAAAC,MAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vxrn/utils",
3
- "version": "1.25.5",
3
+ "version": "1.25.7",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "types": "./types/index.d.ts",
@@ -30,8 +30,8 @@
30
30
  "typecheck": "tsc --noEmit"
31
31
  },
32
32
  "dependencies": {
33
- "@vxrn/debug": "1.25.5",
34
- "@vxrn/resolve": "1.25.5",
33
+ "@vxrn/debug": "1.25.7",
34
+ "@vxrn/resolve": "1.25.7",
35
35
  "ws": "^8.21.0"
36
36
  },
37
37
  "devDependencies": {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createMessageSocket.d.ts","sourceRoot":"","sources":["../src/createMessageSocket.ts"],"names":[],"mappings":"AAQA,wBAAgB,mBAAmB,4FA6HlC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectPackageManager.d.ts","sourceRoot":"","sources":["../src/detectPackageManager.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;AA+ChE,eAAO,MAAM,oBAAoB,GAAU,UAAS;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO;;;;;EAwBxE,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAS,MAAM,oBAAoB,CAAA;AAGvE,eAAO,MAAM,IAAI,GAAI,KAAK,MAAM,EAAE,UAAU,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,WAEzE,CAAA;AAED,eAAO,MAAM,WAAW,GACtB,KAAK,MAAM,EACX,UAAU,YAAY,GAAG;IACvB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,kBA4BF,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,KAAK,MAAM,EACX,UAAU,YAAY,GAAG;IACvB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,kBAMF,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,QAAQ,CAAA;AACtB,cAAc,eAAe,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mustReplace.d.ts","sourceRoot":"","sources":["../src/mustReplace.ts"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE;IACZ,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,EAAE,UAoBJ"}