@poe-platform/safe-bash 0.1.506 → 0.1.508

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 (39) hide show
  1. package/dist/safe-bash/chunks/chunk-3ISDVRIM.js +3821 -0
  2. package/dist/safe-bash/chunks/chunk-3ISDVRIM.js.map +7 -0
  3. package/dist/safe-bash/commands/node/index.d.ts +0 -1
  4. package/dist/safe-bash/commands/node/index.d.ts.map +1 -1
  5. package/dist/safe-bash/commands/node/index.js +0 -1
  6. package/dist/safe-bash/commands/node/index.js.map +1 -1
  7. package/dist/safe-bash/commands/xml/evaluate.d.ts +27 -0
  8. package/dist/safe-bash/commands/xml/evaluate.d.ts.map +1 -0
  9. package/dist/safe-bash/commands/xml/evaluate.js +208 -0
  10. package/dist/safe-bash/commands/xml/evaluate.js.map +1 -0
  11. package/dist/safe-bash/commands/xml/index.browser.js +11 -0
  12. package/dist/safe-bash/commands/xml/index.browser.js.map +7 -0
  13. package/dist/safe-bash/commands/xml/index.d.ts +7 -0
  14. package/dist/safe-bash/commands/xml/index.d.ts.map +1 -0
  15. package/dist/safe-bash/commands/xml/index.js +196 -0
  16. package/dist/safe-bash/commands/xml/index.js.map +1 -0
  17. package/dist/safe-bash/commands/xml/limits.d.ts +36 -0
  18. package/dist/safe-bash/commands/xml/limits.d.ts.map +1 -0
  19. package/dist/safe-bash/commands/xml/limits.js +55 -0
  20. package/dist/safe-bash/commands/xml/limits.js.map +1 -0
  21. package/dist/safe-bash/commands/xml/query.d.ts +21 -0
  22. package/dist/safe-bash/commands/xml/query.d.ts.map +1 -0
  23. package/dist/safe-bash/commands/xml/query.js +111 -0
  24. package/dist/safe-bash/commands/xml/query.js.map +1 -0
  25. package/dist/safe-bash/core.browser.js +990 -3879
  26. package/dist/safe-bash/core.browser.js.map +4 -4
  27. package/dist/safe-bash/core.d.ts +1 -0
  28. package/dist/safe-bash/core.d.ts.map +1 -1
  29. package/dist/safe-bash/core.js +1 -0
  30. package/dist/safe-bash/core.js.map +1 -1
  31. package/dist/safe-bash/node-unavailable.d.ts +2 -0
  32. package/dist/safe-bash/node-unavailable.d.ts.map +1 -0
  33. package/dist/safe-bash/node-unavailable.js +2 -0
  34. package/dist/safe-bash/node-unavailable.js.map +1 -0
  35. package/dist/safe-bash/plugins/composition.d.ts +2 -0
  36. package/dist/safe-bash/plugins/composition.d.ts.map +1 -1
  37. package/dist/safe-bash/plugins/composition.js +3 -1
  38. package/dist/safe-bash/plugins/composition.js.map +1 -1
  39. package/package.json +22 -2
@@ -0,0 +1,55 @@
1
+ import { yieldTurn } from "../../contracts/yield.js";
2
+ export const defaultXmlQueryLimits = Object.freeze({
3
+ maxInputBytes: 8 * 1024 * 1024, maxOutputBytes: 8 * 1024 * 1024,
4
+ maxSourceBytes: 64 * 1024, maxDepth: 64, maxNodes: 100_000,
5
+ maxAttributes: 10_000, maxAttributesPerElement: 128,
6
+ maxNamespaces: 256, maxSteps: 1_000_000, maxResults: 100_000,
7
+ });
8
+ export class XmlQueryError extends Error {
9
+ status;
10
+ constructor(message, status) {
11
+ super(message);
12
+ this.status = status;
13
+ }
14
+ }
15
+ export class XmlQueryLimitError extends XmlQueryError {
16
+ constructor(name) { super(`${name} limit exceeded`, 5); }
17
+ }
18
+ export function resolveXmlQueryLimits(options = {}) {
19
+ const limits = { ...defaultXmlQueryLimits, ...options };
20
+ for (const [name, value] of Object.entries(limits)) {
21
+ if (!Object.hasOwn(defaultXmlQueryLimits, name) || !Number.isSafeInteger(value) || value < 1) {
22
+ throw new RangeError(`${name} must be a positive safe integer XML limit`);
23
+ }
24
+ }
25
+ if (limits.maxDepth > 256)
26
+ throw new RangeError("maxDepth must be <=256");
27
+ return Object.freeze(limits);
28
+ }
29
+ export class XmlBudget {
30
+ limits;
31
+ signal;
32
+ steps = 0;
33
+ checkpoint = 0;
34
+ outputBytes = 0;
35
+ constructor(limits, signal) {
36
+ this.limits = limits;
37
+ this.signal = signal;
38
+ }
39
+ async tick(work = 1) {
40
+ this.signal.throwIfAborted();
41
+ this.steps += work;
42
+ if (this.steps > this.limits.maxSteps)
43
+ throw new XmlQueryLimitError("maxSteps");
44
+ this.checkpoint += work;
45
+ if (this.checkpoint >= 1024) {
46
+ this.checkpoint = 0;
47
+ await yieldTurn(this.signal);
48
+ }
49
+ }
50
+ results(size) {
51
+ if (size > this.limits.maxResults)
52
+ throw new XmlQueryLimitError("maxResults");
53
+ }
54
+ }
55
+ //# sourceMappingURL=limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../../../src/commands/xml/limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAkBrD,MAAM,CAAC,MAAM,qBAAqB,GAA6B,MAAM,CAAC,MAAM,CAAC;IAC3E,aAAa,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,cAAc,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;IAC/D,cAAc,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO;IAC1D,aAAa,EAAE,MAAM,EAAE,uBAAuB,EAAE,GAAG;IACnD,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO;CAC7D,CAAC,CAAC;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IACA;IAAtC,YAAY,OAAe,EAAW,MAAc;QAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAAjC,WAAM,GAAN,MAAM,CAAQ;IAAoB,CAAC;CAC1E;AACD,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IACnD,YAAY,IAA0B,IAAI,KAAK,CAAC,GAAG,IAAI,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CAChF;AACD,MAAM,UAAU,qBAAqB,CAAC,UAAmC,EAAE;IACzE,MAAM,MAAM,GAAG,EAAE,GAAG,qBAAqB,EAAE,GAAG,OAAO,EAAE,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC7F,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,4CAA4C,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,GAAG,GAAG;QAAE,MAAM,IAAI,UAAU,CAAC,wBAAwB,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AACD,MAAM,OAAO,SAAS;IAIC;IAAiC;IAH9C,KAAK,GAAG,CAAC,CAAC;IACV,UAAU,GAAG,CAAC,CAAC;IACvB,WAAW,GAAG,CAAC,CAAC;IAChB,YAAqB,MAAsB,EAAW,MAAmB;QAApD,WAAM,GAAN,MAAM,CAAgB;QAAW,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAC7E,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QACjB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QACnB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,MAAM,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;QACxB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAY;QAClB,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,MAAM,IAAI,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAChF,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import { XmlBudget } from "./limits.js";
2
+ export type Predicate = {
3
+ kind: "position";
4
+ value: number;
5
+ } | {
6
+ kind: "attribute";
7
+ name: string;
8
+ value: string;
9
+ };
10
+ export interface QueryStep {
11
+ readonly descendant: boolean;
12
+ readonly kind: "element" | "attribute" | "text";
13
+ readonly name: string;
14
+ readonly predicates: readonly Predicate[];
15
+ }
16
+ export interface Query {
17
+ readonly scalar: "string" | "count" | "boolean" | undefined;
18
+ readonly steps: readonly QueryStep[];
19
+ }
20
+ export declare function parseQuery(source: string, budget: XmlBudget): Promise<Query>;
21
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/commands/xml/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAqC,MAAM,aAAa,CAAC;AAE3E,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACjH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;CAC3C;AACD,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CACtC;AAID,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAwElF"}
@@ -0,0 +1,111 @@
1
+ import { XmlBudget, XmlQueryError, XmlQueryLimitError } from "./limits.js";
2
+ const nameStart = (character) => character >= "a" && character <= "z" || character >= "A" && character <= "Z" || character === "_";
3
+ const namePart = (character) => nameStart(character) || character >= "0" && character <= "9" || character === "-" || character === ".";
4
+ export async function parseQuery(source, budget) {
5
+ if (source.length > budget.limits.maxSourceBytes || Buffer.byteLength(source) > budget.limits.maxSourceBytes)
6
+ throw new XmlQueryLimitError("maxSourceBytes");
7
+ // Admit every character before token operations; the grammar itself has no recursion.
8
+ for (let offset = 0; offset < source.length; offset += 256)
9
+ await budget.tick(Math.min(256, source.length - offset));
10
+ let at = 0;
11
+ const fail = () => { throw new XmlQueryError(`unsupported XPath syntax at offset ${at}`, 10); };
12
+ const space = () => { while (source[at] === " " || source[at] === "\t" || source[at] === "\r" || source[at] === "\n")
13
+ at++; };
14
+ const expect = (value) => { space(); if (!source.startsWith(value, at))
15
+ fail(); at += value.length; };
16
+ const name = () => {
17
+ space();
18
+ const start = at;
19
+ if (!nameStart(source[at] ?? ""))
20
+ fail();
21
+ while (namePart(source[at] ?? ""))
22
+ at++;
23
+ if (source[at] === ":")
24
+ fail();
25
+ return source.slice(start, at);
26
+ };
27
+ space();
28
+ let scalar;
29
+ if (source[at] !== "/") {
30
+ const value = name();
31
+ if (value !== "string" && value !== "count" && value !== "boolean")
32
+ fail();
33
+ scalar = value;
34
+ expect("(");
35
+ }
36
+ const steps = [];
37
+ space();
38
+ while (source[at] === "/") {
39
+ at++;
40
+ const descendant = source[at] === "/";
41
+ if (descendant)
42
+ at++;
43
+ space();
44
+ let kind = "element";
45
+ if (source[at] === "@") {
46
+ kind = "attribute";
47
+ at++;
48
+ }
49
+ let selected;
50
+ if (source[at] === "*") {
51
+ selected = "*";
52
+ at++;
53
+ }
54
+ else {
55
+ selected = name();
56
+ space();
57
+ if (source[at] === "(") {
58
+ if (selected !== "text" || kind !== "element")
59
+ fail();
60
+ expect("(");
61
+ expect(")");
62
+ kind = "text";
63
+ }
64
+ }
65
+ const predicates = [];
66
+ space();
67
+ while (source[at] === "[") {
68
+ at++;
69
+ space();
70
+ if (source[at] === "@") {
71
+ at++;
72
+ const attribute = name();
73
+ expect("=");
74
+ space();
75
+ const quote = source[at++];
76
+ if (quote !== "'" && quote !== '"')
77
+ fail();
78
+ const start = at;
79
+ while (at < source.length && source[at] !== quote)
80
+ at++;
81
+ if (at === source.length)
82
+ fail();
83
+ predicates.push({ kind: "attribute", name: attribute, value: source.slice(start, at++) });
84
+ }
85
+ else {
86
+ const start = at;
87
+ while ((source[at] ?? "") >= "0" && (source[at] ?? "") <= "9")
88
+ at++;
89
+ const value = Number(source.slice(start, at));
90
+ if (start === at || !Number.isSafeInteger(value) || value < 1)
91
+ fail();
92
+ predicates.push({ kind: "position", value });
93
+ }
94
+ expect("]");
95
+ space();
96
+ }
97
+ steps.push({ descendant, kind, name: selected, predicates });
98
+ if (kind !== "element" && source[at] === "/")
99
+ fail();
100
+ await budget.tick();
101
+ }
102
+ if (!steps.length)
103
+ fail();
104
+ if (scalar !== undefined)
105
+ expect(")");
106
+ space();
107
+ if (at !== source.length)
108
+ fail();
109
+ return { scalar, steps };
110
+ }
111
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/commands/xml/query.ts"],"names":[],"mappings":"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"}