@thomasfosterau/effect-parse 0.0.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/README.md +247 -230
  2. package/dist/Ascii.d.ts +32 -53
  3. package/dist/Ascii.d.ts.map +1 -1
  4. package/dist/Ascii.js +576 -571
  5. package/dist/Ascii.js.map +1 -1
  6. package/dist/Binary.d.ts +6 -29
  7. package/dist/Binary.d.ts.map +1 -1
  8. package/dist/Binary.js +129 -116
  9. package/dist/Binary.js.map +1 -1
  10. package/dist/Bits.d.ts +4 -2
  11. package/dist/Bits.d.ts.map +1 -1
  12. package/dist/Bits.js +121 -123
  13. package/dist/Bits.js.map +1 -1
  14. package/dist/Compiler.d.ts +39 -0
  15. package/dist/Compiler.d.ts.map +1 -0
  16. package/dist/Compiler.js +48 -0
  17. package/dist/Compiler.js.map +1 -0
  18. package/dist/Encoding.d.ts +29 -46
  19. package/dist/Encoding.d.ts.map +1 -1
  20. package/dist/Encoding.js +76 -75
  21. package/dist/Encoding.js.map +1 -1
  22. package/dist/Expression.d.ts +15 -49
  23. package/dist/Expression.d.ts.map +1 -1
  24. package/dist/Expression.js +143 -131
  25. package/dist/Expression.js.map +1 -1
  26. package/dist/Input.d.ts +206 -177
  27. package/dist/Input.d.ts.map +1 -1
  28. package/dist/Input.js +317 -299
  29. package/dist/Input.js.map +1 -1
  30. package/dist/Nom.d.ts +44 -84
  31. package/dist/Nom.d.ts.map +1 -1
  32. package/dist/Nom.js +423 -453
  33. package/dist/Nom.js.map +1 -1
  34. package/dist/ParseError.d.ts +54 -49
  35. package/dist/ParseError.d.ts.map +1 -1
  36. package/dist/ParseError.js +233 -275
  37. package/dist/ParseError.js.map +1 -1
  38. package/dist/Parser.d.ts +345 -313
  39. package/dist/Parser.d.ts.map +1 -1
  40. package/dist/Parser.js +2010 -1802
  41. package/dist/Parser.js.map +1 -1
  42. package/dist/ParserSchema.d.ts +8 -7
  43. package/dist/ParserSchema.d.ts.map +1 -1
  44. package/dist/ParserSchema.js +49 -49
  45. package/dist/ParserSchema.js.map +1 -1
  46. package/dist/ParserStream.d.ts +26 -20
  47. package/dist/ParserStream.d.ts.map +1 -1
  48. package/dist/ParserStream.js +267 -255
  49. package/dist/ParserStream.js.map +1 -1
  50. package/dist/Syntax.d.ts +401 -0
  51. package/dist/Syntax.d.ts.map +1 -0
  52. package/dist/Syntax.js +717 -0
  53. package/dist/Syntax.js.map +1 -0
  54. package/dist/Text.d.ts +98 -134
  55. package/dist/Text.d.ts.map +1 -1
  56. package/dist/Text.js +534 -496
  57. package/dist/Text.js.map +1 -1
  58. package/dist/Token.d.ts +60 -42
  59. package/dist/Token.d.ts.map +1 -1
  60. package/dist/Token.js +331 -265
  61. package/dist/Token.js.map +1 -1
  62. package/dist/index.d.ts +16 -17
  63. package/dist/index.js +16 -17
  64. package/dist/internal/compiler/closure.d.ts +14 -16
  65. package/dist/internal/compiler/closure.d.ts.map +1 -1
  66. package/dist/internal/compiler/closure.js +1458 -1637
  67. package/dist/internal/compiler/closure.js.map +1 -1
  68. package/dist/internal/compiler/entries.d.ts +11 -11
  69. package/dist/internal/compiler/entries.d.ts.map +1 -1
  70. package/dist/internal/compiler/entries.js +36 -26
  71. package/dist/internal/compiler/entries.js.map +1 -1
  72. package/dist/internal/compiler/first.d.ts +19 -19
  73. package/dist/internal/compiler/first.d.ts.map +1 -1
  74. package/dist/internal/compiler/first.js +251 -227
  75. package/dist/internal/compiler/first.js.map +1 -1
  76. package/dist/internal/compiler/jit.d.ts +6 -17
  77. package/dist/internal/compiler/jit.d.ts.map +1 -1
  78. package/dist/internal/compiler/jit.js +860 -988
  79. package/dist/internal/compiler/jit.js.map +1 -1
  80. package/dist/internal/compiler/registry.d.ts +20 -21
  81. package/dist/internal/compiler/registry.d.ts.map +1 -1
  82. package/dist/internal/compiler/registry.js +21 -41
  83. package/dist/internal/compiler/registry.js.map +1 -1
  84. package/dist/internal/compiler/sets.d.ts +9 -13
  85. package/dist/internal/compiler/sets.d.ts.map +1 -1
  86. package/dist/internal/compiler/sets.js +76 -73
  87. package/dist/internal/compiler/sets.js.map +1 -1
  88. package/dist/internal/entries.d.ts +3 -3
  89. package/dist/internal/entries.d.ts.map +1 -1
  90. package/dist/internal/entries.js +38 -30
  91. package/dist/internal/entries.js.map +1 -1
  92. package/dist/internal/node.d.ts +177 -173
  93. package/dist/internal/node.d.ts.map +1 -1
  94. package/dist/internal/node.js +77 -66
  95. package/dist/internal/node.js.map +1 -1
  96. package/dist/internal/numbers.d.ts +7 -8
  97. package/dist/internal/numbers.d.ts.map +1 -1
  98. package/dist/internal/numbers.js +246 -276
  99. package/dist/internal/numbers.js.map +1 -1
  100. package/dist/internal/resume.d.ts +6 -24
  101. package/dist/internal/resume.d.ts.map +1 -1
  102. package/dist/internal/resume.js +30 -29
  103. package/dist/internal/resume.js.map +1 -1
  104. package/dist/internal/run.d.ts +15 -0
  105. package/dist/internal/run.d.ts.map +1 -0
  106. package/dist/internal/run.js +36 -0
  107. package/dist/internal/run.js.map +1 -0
  108. package/dist/internal/stack.d.ts +16 -0
  109. package/dist/internal/stack.d.ts.map +1 -0
  110. package/dist/internal/stack.js +26 -0
  111. package/dist/internal/stack.js.map +1 -0
  112. package/dist/internal/syntax.d.ts +146 -0
  113. package/dist/internal/syntax.d.ts.map +1 -0
  114. package/dist/internal/syntax.js +305 -0
  115. package/dist/internal/syntax.js.map +1 -0
  116. package/dist/internal/text.d.ts +10 -2
  117. package/dist/internal/text.d.ts.map +1 -1
  118. package/dist/internal/text.js +295 -345
  119. package/dist/internal/text.js.map +1 -1
  120. package/dist/internal/tokens.d.ts +25 -30
  121. package/dist/internal/tokens.d.ts.map +1 -1
  122. package/dist/internal/tokens.js +369 -363
  123. package/dist/internal/tokens.js.map +1 -1
  124. package/package.json +42 -28
  125. package/src/Ascii.ts +278 -187
  126. package/src/Binary.ts +150 -44
  127. package/src/Bits.ts +6 -3
  128. package/src/Compiler.ts +98 -0
  129. package/src/Expression.ts +10 -5
  130. package/src/Input.ts +106 -28
  131. package/src/Nom.ts +4 -3
  132. package/src/ParseError.ts +48 -51
  133. package/src/Parser.ts +1163 -795
  134. package/src/ParserStream.ts +104 -80
  135. package/src/Syntax.ts +900 -0
  136. package/src/Text.ts +272 -187
  137. package/src/Token.ts +180 -87
  138. package/src/index.ts +2 -0
  139. package/src/internal/compiler/closure.ts +121 -88
  140. package/src/internal/compiler/entries.ts +21 -8
  141. package/src/internal/compiler/first.ts +17 -15
  142. package/src/internal/compiler/jit.ts +360 -157
  143. package/src/internal/compiler/registry.ts +12 -33
  144. package/src/internal/compiler/sets.ts +17 -11
  145. package/src/internal/entries.ts +4 -2
  146. package/src/internal/node.ts +51 -37
  147. package/src/internal/numbers.ts +22 -20
  148. package/src/internal/resume.ts +8 -4
  149. package/src/internal/run.ts +41 -0
  150. package/src/internal/stack.ts +36 -0
  151. package/src/internal/syntax.ts +421 -0
  152. package/src/internal/text.ts +32 -25
  153. package/src/internal/tokens.ts +96 -51
  154. package/dist/index.d.ts.map +0 -1
  155. package/dist/index.js.map +0 -1
@@ -1,85 +1,88 @@
1
- import { compile, compileAny, PredicateRanges } from "../tokens.js";
1
+ import * as Predicate from "effect/Predicate";
2
+ import { PredicateRanges, compile, compileAny } from "../tokens.js";
3
+ import { firstCodePoint } from "../text.js";
4
+ import * as Arr from "effect/Array";
5
+ import * as Order from "effect/Order";
6
+ //#region src/internal/compiler/sets.ts
7
+ /**
8
+ * Token sets for compiled parsers: membership tables for small units, the
9
+ * exact test for the rest, and the code point ranges when they are known.
10
+ */
2
11
  /** Size of the membership table: every byte, and the Latin-1 code points. */
3
- export const TableSize = 256;
4
- const isRange = (u) => typeof u === "object" && u !== null && u._tag === "TokenRange";
5
- const toCode = (u) => typeof u === "number" ? u : u.codePointAt(0);
12
+ const TableSize = 256;
13
+ const isRange = (u) => Predicate.isObjectOrArray(u) && u._tag === "TokenRange";
14
+ const toCode = (u) => Predicate.isNumber(u) ? u : firstCodePoint(u);
6
15
  /** The code point ranges of a token set, or `undefined` if it has an unknown predicate. */
7
- export const rangesOf = (set) => {
8
- const out = [];
9
- const add = (u) => {
10
- if (typeof u === "string") {
11
- for (const c of u) {
12
- const cp = c.codePointAt(0);
13
- out.push([cp, cp]);
14
- }
15
- return true;
16
- }
17
- if (typeof u === "number") {
18
- out.push([u, u]);
19
- return true;
20
- }
21
- if (u instanceof Uint8Array) {
22
- for (const b of u)
23
- out.push([b, b]);
24
- return true;
25
- }
26
- if (isRange(u)) {
27
- out.push([toCode(u.from), toCode(u.to)]);
28
- return true;
29
- }
30
- if (typeof u === "function") {
31
- const r = u[PredicateRanges];
32
- if (r === undefined)
33
- return false;
34
- for (const [a, b] of r)
35
- out.push([a, b]);
36
- return true;
37
- }
38
- if (Array.isArray(u))
39
- return u.every(add);
40
- return false;
41
- };
42
- if (!add(set))
43
- return undefined;
44
- out.sort((a, b) => a[0] - b[0]);
45
- const merged = [];
46
- for (const [a, b] of out) {
47
- if (b < a)
48
- continue;
49
- const last = merged[merged.length - 1];
50
- if (last !== undefined && a <= last[1] + 1)
51
- last[1] = Math.max(last[1], b);
52
- else
53
- merged.push([a, b]);
54
- }
55
- return merged;
16
+ const rangesOf = (set) => {
17
+ const out = [];
18
+ const add = (u) => {
19
+ if (Predicate.isString(u)) {
20
+ for (const c of u) {
21
+ const cp = firstCodePoint(c);
22
+ out.push([cp, cp]);
23
+ }
24
+ return true;
25
+ }
26
+ if (Predicate.isNumber(u)) {
27
+ out.push([u, u]);
28
+ return true;
29
+ }
30
+ if (u instanceof Uint8Array) {
31
+ for (const b of u) out.push([b, b]);
32
+ return true;
33
+ }
34
+ if (isRange(u)) {
35
+ out.push([toCode(u.from), toCode(u.to)]);
36
+ return true;
37
+ }
38
+ if (Predicate.isFunction(u)) {
39
+ const r = u[PredicateRanges];
40
+ if (r === void 0) return false;
41
+ for (const [a, b] of r) out.push([a, b]);
42
+ return true;
43
+ }
44
+ if (Array.isArray(u)) return u.every(add);
45
+ return false;
46
+ };
47
+ if (!add(set)) return void 0;
48
+ const merged = [];
49
+ for (const [a, b] of Arr.sort(out, Order.mapInput(Order.Number, (range) => range[0]))) {
50
+ if (b < a) continue;
51
+ const last = merged[merged.length - 1];
52
+ if (last !== void 0 && a <= last[1] + 1) last[1] = Math.max(last[1], b);
53
+ else merged.push([a, b]);
54
+ }
55
+ return merged;
56
56
  };
57
57
  const makeSet = (test, set) => {
58
- // The table calls the test once per small code: token-set predicates are
59
- // assumed to be pure (see the design notes).
60
- const table = new Uint8Array(TableSize);
61
- for (let c = 0; c < TableSize; c++)
62
- table[c] = test(c) ? 1 : 0;
63
- return { test, table, ranges: rangesOf(set) };
58
+ const table = /* @__PURE__ */ new Uint8Array(256);
59
+ for (let c = 0; c < 256; c++) table[c] = test(c) ? 1 : 0;
60
+ return {
61
+ test,
62
+ table,
63
+ ranges: rangesOf(set)
64
+ };
64
65
  };
65
66
  /**
66
- * The set as a `Token` parser sees it: string predicates receive strings on
67
- * string input, everything receives numbers on byte input.
68
- */
69
- export const tokenSet = (set, kind) => {
70
- const m = compileAny(set);
71
- return makeSet(kind === 0 ? m.forString.code : m.forCode.code, set);
67
+ * The set as a `Token` parser sees it: string predicates receive strings on
68
+ * string input, everything receives numbers on byte input.
69
+ */
70
+ const tokenSet = (set, kind) => {
71
+ const m = compileAny(set);
72
+ return makeSet(kind === 0 ? m.forString.code : m.forCode.code, set);
72
73
  };
73
74
  /** The set as a `Text` parser sees it: code points, for any encoding. */
74
- export const textSet = (set) => makeSet(compile(set, "string").code, set);
75
+ const textSet = (set) => makeSet(compile(set, "string").code, set);
75
76
  /** Whether some accepted code point is at least `limit` (true when unknown). */
76
- export const reachesAbove = (s, limit) => s.ranges === undefined || s.ranges.some(([, b]) => b >= limit);
77
+ const reachesAbove = (s, limit) => s.ranges === void 0 || s.ranges.some(([, b]) => b >= limit);
77
78
  /** The input kind a `Text` encoding reads: 0 for strings, 1 for bytes. */
78
- export const kindOfEncoding = (enc) => {
79
- let k = kinds.get(enc);
80
- if (k === undefined)
81
- kinds.set(enc, k = typeof enc.encode("") === "string" ? 0 : 1);
82
- return k;
79
+ const kindOfEncoding = (enc) => {
80
+ let k = kinds.get(enc);
81
+ if (k === void 0) kinds.set(enc, k = Predicate.isString(enc.encode("")) ? 0 : 1);
82
+ return k;
83
83
  };
84
- const kinds = new WeakMap();
84
+ const kinds = /*#__PURE__*/ new WeakMap();
85
+ //#endregion
86
+ export { TableSize, kindOfEncoding, reachesAbove, textSet, tokenSet };
87
+
85
88
  //# sourceMappingURL=sets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sets.js","sourceRoot":"","sources":["../../../src/internal/compiler/sets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sets.js","names":[],"sources":["../../../src/internal/compiler/sets.ts"],"sourcesContent":["/**\n * Token sets for compiled parsers: membership tables for small units, the\n * exact test for the rest, and the code point ranges when they are known.\n */\nimport * as Arr from \"effect/Array\"\nimport * as Order from \"effect/Order\"\nimport * as Predicate from \"effect/Predicate\"\nimport type { Encoding } from \"../../Encoding.js\"\nimport { firstCodePoint } from \"../text.js\"\nimport { compile, compileAny, PredicateRanges } from \"../tokens.js\"\n\n/** Size of the membership table: every byte, and the Latin-1 code points. */\nexport const TableSize = 256\n\nexport interface CharSet {\n /** Tests a code point (or byte, for `Token` on bytes). */\n readonly test: (code: number) => boolean\n /** `table[c] === 1` iff `test(c)`, for `c < TableSize`. */\n readonly table: Uint8Array\n /** Sorted inclusive ranges of accepted code points, when known. */\n readonly ranges: ReadonlyArray<readonly [number, number]> | undefined\n}\n\nconst isRange = (u: unknown): u is { readonly from: string | number; readonly to: string | number } =>\n Predicate.isObjectOrArray(u) && (u as any)._tag === \"TokenRange\"\n\nconst toCode = (u: string | number): number => (Predicate.isNumber(u) ? u : firstCodePoint(u))\n\n/** The code point ranges of a token set, or `undefined` if it has an unknown predicate. */\nconst rangesOf = (set: unknown): Array<[number, number]> | undefined => {\n const out: Array<[number, number]> = []\n const add = (u: unknown): boolean => {\n if (Predicate.isString(u)) {\n for (const c of u) {\n const cp = firstCodePoint(c)\n out.push([cp, cp])\n }\n return true\n }\n if (Predicate.isNumber(u)) {\n out.push([u, u])\n return true\n }\n if (u instanceof Uint8Array) {\n for (const b of u) out.push([b, b])\n return true\n }\n if (isRange(u)) {\n out.push([toCode(u.from), toCode(u.to)])\n return true\n }\n if (Predicate.isFunction(u)) {\n const r = (u as any)[PredicateRanges] as ReadonlyArray<readonly [number, number]> | undefined\n if (r === undefined) return false\n for (const [a, b] of r) out.push([a, b])\n return true\n }\n if (Array.isArray(u)) return u.every(add)\n return false\n }\n if (!add(set)) return undefined\n const merged: Array<[number, number]> = []\n for (const [a, b] of Arr.sort(\n out,\n Order.mapInput(Order.Number, (range: readonly [number, number]) => range[0])\n )) {\n if (b < a) continue\n const last = merged[merged.length - 1]\n if (last !== undefined && a <= last[1] + 1) last[1] = Math.max(last[1], b)\n else merged.push([a, b])\n }\n return merged\n}\n\nconst makeSet = (test: (code: number) => boolean, set: unknown): CharSet => {\n // The table calls the test once per small code: token-set predicates are\n // assumed to be pure (see the design notes).\n const table = new Uint8Array(TableSize)\n for (let c = 0; c < TableSize; c++) table[c] = test(c) ? 1 : 0\n return { test, table, ranges: rangesOf(set) }\n}\n\n/**\n * The set as a `Token` parser sees it: string predicates receive strings on\n * string input, everything receives numbers on byte input.\n */\nexport const tokenSet = (set: unknown, kind: 0 | 1): CharSet => {\n const m = compileAny(set)\n return makeSet(kind === 0 ? m.forString.code : m.forCode.code, set)\n}\n\n/** The set as a `Text` parser sees it: code points, for any encoding. */\nexport const textSet = (set: unknown): CharSet => makeSet(compile(set, \"string\").code, set)\n\n/** Whether some accepted code point is at least `limit` (true when unknown). */\nexport const reachesAbove = (s: CharSet, limit: number): boolean =>\n s.ranges === undefined || s.ranges.some(([, b]) => b >= limit)\n\n/** The input kind a `Text` encoding reads: 0 for strings, 1 for bytes. */\nexport const kindOfEncoding = (enc: Encoding<any>): 0 | 1 => {\n let k = kinds.get(enc)\n if (k === undefined) kinds.set(enc, (k = Predicate.isString(enc.encode(\"\")) ? 0 : 1))\n return k\n}\n\nconst kinds = /*#__PURE__*/ new WeakMap<Encoding<any>, 0 | 1>()\n"],"mappings":";;;;;;;;;;;AAYA,MAAa,YAAY;AAWzB,MAAM,WAAW,MACf,UAAU,gBAAgB,CAAC,KAAM,EAAU,SAAS;AAEtD,MAAM,UAAU,MAAgC,UAAU,SAAS,CAAC,IAAI,IAAI,eAAe,CAAC;;AAG5F,MAAM,YAAY,QAAsD;CACtE,MAAM,MAA+B,CAAC;CACtC,MAAM,OAAO,MAAwB;EACnC,IAAI,UAAU,SAAS,CAAC,GAAG;GACzB,KAAK,MAAM,KAAK,GAAG;IACjB,MAAM,KAAK,eAAe,CAAC;IAC3B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;GACnB;GACA,OAAO;EACT;EACA,IAAI,UAAU,SAAS,CAAC,GAAG;GACzB,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;GACf,OAAO;EACT;EACA,IAAI,aAAa,YAAY;GAC3B,KAAK,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;GAClC,OAAO;EACT;EACA,IAAI,QAAQ,CAAC,GAAG;GACd,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC;GACvC,OAAO;EACT;EACA,IAAI,UAAU,WAAW,CAAC,GAAG;GAC3B,MAAM,IAAK,EAAU;GACrB,IAAI,MAAM,KAAA,GAAW,OAAO;GAC5B,KAAK,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;GACvC,OAAO;EACT;EACA,IAAI,MAAM,QAAQ,CAAC,GAAG,OAAO,EAAE,MAAM,GAAG;EACxC,OAAO;CACT;CACA,IAAI,CAAC,IAAI,GAAG,GAAG,OAAO,KAAA;CACtB,MAAM,SAAkC,CAAC;CACzC,KAAK,MAAM,CAAC,GAAG,MAAM,IAAI,KACvB,KACA,MAAM,SAAS,MAAM,SAAS,UAAqC,MAAM,EAAE,CAC7E,GAAG;EACD,IAAI,IAAI,GAAG;EACX,MAAM,OAAO,OAAO,OAAO,SAAS;EACpC,IAAI,SAAS,KAAA,KAAa,KAAK,KAAK,KAAK,GAAG,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,CAAC;OACpE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;CACzB;CACA,OAAO;AACT;AAEA,MAAM,WAAW,MAAiC,QAA0B;CAG1E,MAAM,wBAAQ,IAAI,WAAA,GAAoB;CACtC,KAAK,IAAI,IAAI,GAAG,IAAA,KAAe,KAAK,MAAM,KAAK,KAAK,CAAC,IAAI,IAAI;CAC7D,OAAO;EAAE;EAAM;EAAO,QAAQ,SAAS,GAAG;CAAE;AAC9C;;;;;AAMA,MAAa,YAAY,KAAc,SAAyB;CAC9D,MAAM,IAAI,WAAW,GAAG;CACxB,OAAO,QAAQ,SAAS,IAAI,EAAE,UAAU,OAAO,EAAE,QAAQ,MAAM,GAAG;AACpE;;AAGA,MAAa,WAAW,QAA0B,QAAQ,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM,GAAG;;AAG1F,MAAa,gBAAgB,GAAY,UACvC,EAAE,WAAW,KAAA,KAAa,EAAE,OAAO,MAAM,GAAG,OAAO,KAAK,KAAK;;AAG/D,MAAa,kBAAkB,QAA8B;CAC3D,IAAI,IAAI,MAAM,IAAI,GAAG;CACrB,IAAI,MAAM,KAAA,GAAW,MAAM,IAAI,KAAM,IAAI,UAAU,SAAS,IAAI,OAAO,EAAE,CAAC,IAAI,IAAI,CAAE;CACpF,OAAO;AACT;AAEA,MAAM,sBAAsB,IAAI,QAA8B"}
@@ -1,12 +1,11 @@
1
+ //#region src/internal/entries.d.ts
1
2
  /**
2
3
  * Building objects as `Object.fromEntries` does, without its array of
3
4
  * `[key, value]` pairs: the compilers use these when a parser maps a
4
5
  * repetition of pairs with `Object.fromEntries` (see `Parser.fromEntries`).
5
6
  */
6
7
  /** The built-in `Object.fromEntries`, which compiled parsers recognize. */
7
- export declare const fromEntries: <K extends PropertyKey, V>(entries: Iterable<readonly [K, V]>) => {
8
- [P in K]: V;
9
- };
8
+ export declare const fromEntries: <K extends PropertyKey, V>(entries: Iterable<readonly [K, V]>) => { [P in K]: V; };
10
9
  /**
11
10
  * Whether `o[key] = value` on a new plain object creates the same property
12
11
  * as `Object.fromEntries` (a writable, enumerable, configurable data
@@ -24,4 +23,5 @@ export declare const isPlainKey: (key: unknown) => key is string;
24
23
  export declare const addEntry: (o: object, deferred: Array<unknown> | undefined, key: unknown, value: unknown) => Array<unknown> | undefined;
25
24
  /** Adds the deferred entries of {@link addEntry} to `o`, in order. */
26
25
  export declare const flushEntries: (o: object, deferred: ReadonlyArray<unknown>) => void;
26
+ //#endregion
27
27
  //# sourceMappingURL=entries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../src/internal/entries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,2EAA2E;AAC3E,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK;KAAG,CAAC,IAAI,CAAC,GAAG,CAAC;CAC9E,CAAA;AAK3B;;;;;GAKG;AACH,eAAO,MAAM,UAAU,QAAS,OAAO,KAAG,GAAG,IAAI,MAAuE,CAAA;AAMxH;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,MAChB,MAAM,YACC,KAAK,CAAC,OAAO,CAAC,GAAG,SAAS,OAC/B,OAAO,SACL,OAAO,KACb,KAAK,CAAC,OAAO,CAAC,GAAG,SAQnB,CAAA;AAED,sEAAsE;AACtE,eAAO,MAAM,YAAY,MAAO,MAAM,YAAY,aAAa,CAAC,OAAO,CAAC,KAAG,IAE1E,CAAA"}
1
+ {"version":3,"file":"entries.d.ts","names":[],"sources":["../../src/internal/entries.ts"],"mappings":";;;;;;;qBASa,cAAc,UAAU,aAAa,GAAG,SAAS,mBAAmB,GAAG,WAAW,KAAK,IAAI;;;;;;;qBAY3F,aAAc,iBAAe;;;;;;;;qBAa7B,WACX,WACA,UAAU,4BACV,cACA,mBACC;;qBAWU,eAAgB,WAAW,UAAU"}
@@ -1,42 +1,50 @@
1
+ import * as Predicate from "effect/Predicate";
2
+ //#region src/internal/entries.ts
1
3
  /**
2
- * Building objects as `Object.fromEntries` does, without its array of
3
- * `[key, value]` pairs: the compilers use these when a parser maps a
4
- * repetition of pairs with `Object.fromEntries` (see `Parser.fromEntries`).
5
- */
4
+ * Building objects as `Object.fromEntries` does, without its array of
5
+ * `[key, value]` pairs: the compilers use these when a parser maps a
6
+ * repetition of pairs with `Object.fromEntries` (see `Parser.fromEntries`).
7
+ */
6
8
  /** The built-in `Object.fromEntries`, which compiled parsers recognize. */
7
- export const fromEntries = Object.fromEntries;
9
+ const fromEntries = Object.fromEntries;
8
10
  const objectPrototype = Object.prototype;
9
11
  const hasOwn = objectPrototype.hasOwnProperty;
10
12
  /**
11
- * Whether `o[key] = value` on a new plain object creates the same property
12
- * as `Object.fromEntries` (a writable, enumerable, configurable data
13
- * property): `key` is a string that `Object.prototype` has no property for,
14
- * so there is no setter (`__proto__`) or read-only property to run into.
15
- */
16
- export const isPlainKey = (key) => typeof key === "string" && !hasOwn.call(objectPrototype, key);
13
+ * Whether `o[key] = value` on a new plain object creates the same property
14
+ * as `Object.fromEntries` (a writable, enumerable, configurable data
15
+ * property): `key` is a string that `Object.prototype` has no property for,
16
+ * so there is no setter (`__proto__`) or read-only property to run into.
17
+ */
18
+ const isPlainKey = (key) => Predicate.isString(key) && !hasOwn.call(objectPrototype, key);
17
19
  const define = (o, key, value) => {
18
- Object.defineProperty(o, key, { value, writable: true, enumerable: true, configurable: true });
20
+ Object.defineProperty(o, key, {
21
+ value,
22
+ writable: true,
23
+ enumerable: true,
24
+ configurable: true
25
+ });
19
26
  };
20
27
  /**
21
- * Adds an entry whose key is not plain to `o`, given the entries already
22
- * deferred. Keys that are objects may run code when converted to property
23
- * keys, which `Object.fromEntries` only does once every entry is parsed:
24
- * from the first such key on, entries are deferred to {@link flushEntries}.
25
- * Returns the deferred entries, if any.
26
- */
27
- export const addEntry = (o, deferred, key, value) => {
28
- if (deferred === undefined && (typeof key !== "object" || key === null) && typeof key !== "function") {
29
- define(o, key, value);
30
- return undefined;
31
- }
32
- if (deferred === undefined)
33
- deferred = [];
34
- deferred.push(key, value);
35
- return deferred;
28
+ * Adds an entry whose key is not plain to `o`, given the entries already
29
+ * deferred. Keys that are objects may run code when converted to property
30
+ * keys, which `Object.fromEntries` only does once every entry is parsed:
31
+ * from the first such key on, entries are deferred to {@link flushEntries}.
32
+ * Returns the deferred entries, if any.
33
+ */
34
+ const addEntry = (o, deferred, key, value) => {
35
+ if (deferred === void 0 && !Predicate.isObjectOrArray(key) && !Predicate.isFunction(key)) {
36
+ define(o, key, value);
37
+ return;
38
+ }
39
+ if (deferred === void 0) deferred = [];
40
+ deferred.push(key, value);
41
+ return deferred;
36
42
  };
37
43
  /** Adds the deferred entries of {@link addEntry} to `o`, in order. */
38
- export const flushEntries = (o, deferred) => {
39
- for (let i = 0; i < deferred.length; i += 2)
40
- define(o, deferred[i], deferred[i + 1]);
44
+ const flushEntries = (o, deferred) => {
45
+ for (let i = 0; i < deferred.length; i += 2) define(o, deferred[i], deferred[i + 1]);
41
46
  };
47
+ //#endregion
48
+ export { addEntry, flushEntries, fromEntries, isPlainKey };
49
+
42
50
  //# sourceMappingURL=entries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entries.js","sourceRoot":"","sources":["../../src/internal/entries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,WAAW,GACtB,MAAM,CAAC,WAAkB,CAAA;AAE3B,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAA;AACxC,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,CAAA;AAE7C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAY,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;AAExH,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,GAAY,EAAE,KAAc,EAAQ,EAAE;IAC/D,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,GAAkB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;AAC/G,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,CAAS,EACT,QAAoC,EACpC,GAAY,EACZ,KAAc,EACc,EAAE;IAC9B,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;QACrG,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QACrB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS;QAAE,QAAQ,GAAG,EAAE,CAAA;IACzC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACzB,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,sEAAsE;AACtE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,QAAgC,EAAQ,EAAE;IAChF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AACtF,CAAC,CAAA"}
1
+ {"version":3,"file":"entries.js","names":[],"sources":["../../src/internal/entries.ts"],"sourcesContent":["/**\n * Building objects as `Object.fromEntries` does, without its array of\n * `[key, value]` pairs: the compilers use these when a parser maps a\n * repetition of pairs with `Object.fromEntries` (see `Parser.fromEntries`).\n */\n\nimport * as Predicate from \"effect/Predicate\"\n\n/** The built-in `Object.fromEntries`, which compiled parsers recognize. */\nexport const fromEntries: <K extends PropertyKey, V>(entries: Iterable<readonly [K, V]>) => { [P in K]: V } =\n Object.fromEntries as any\n\nconst objectPrototype = Object.prototype\nconst hasOwn = objectPrototype.hasOwnProperty\n\n/**\n * Whether `o[key] = value` on a new plain object creates the same property\n * as `Object.fromEntries` (a writable, enumerable, configurable data\n * property): `key` is a string that `Object.prototype` has no property for,\n * so there is no setter (`__proto__`) or read-only property to run into.\n */\nexport const isPlainKey = (key: unknown): key is string => Predicate.isString(key) && !hasOwn.call(objectPrototype, key)\n\nconst define = (o: object, key: unknown, value: unknown): void => {\n Object.defineProperty(o, key as PropertyKey, { value, writable: true, enumerable: true, configurable: true })\n}\n\n/**\n * Adds an entry whose key is not plain to `o`, given the entries already\n * deferred. Keys that are objects may run code when converted to property\n * keys, which `Object.fromEntries` only does once every entry is parsed:\n * from the first such key on, entries are deferred to {@link flushEntries}.\n * Returns the deferred entries, if any.\n */\nexport const addEntry = (\n o: object,\n deferred: Array<unknown> | undefined,\n key: unknown,\n value: unknown\n): Array<unknown> | undefined => {\n if (deferred === undefined && !Predicate.isObjectOrArray(key) && !Predicate.isFunction(key)) {\n define(o, key, value)\n return undefined\n }\n if (deferred === undefined) deferred = []\n deferred.push(key, value)\n return deferred\n}\n\n/** Adds the deferred entries of {@link addEntry} to `o`, in order. */\nexport const flushEntries = (o: object, deferred: ReadonlyArray<unknown>): void => {\n for (let i = 0; i < deferred.length; i += 2) define(o, deferred[i], deferred[i + 1])\n}\n"],"mappings":";;;;;;;;AASA,MAAa,cACX,OAAO;AAET,MAAM,kBAAkB,OAAO;AAC/B,MAAM,SAAS,gBAAgB;;;;;;;AAQ/B,MAAa,cAAc,QAAgC,UAAU,SAAS,GAAG,KAAK,CAAC,OAAO,KAAK,iBAAiB,GAAG;AAEvH,MAAM,UAAU,GAAW,KAAc,UAAyB;CAChE,OAAO,eAAe,GAAG,KAAoB;EAAE;EAAO,UAAU;EAAM,YAAY;EAAM,cAAc;CAAK,CAAC;AAC9G;;;;;;;;AASA,MAAa,YACX,GACA,UACA,KACA,UAC+B;CAC/B,IAAI,aAAa,KAAA,KAAa,CAAC,UAAU,gBAAgB,GAAG,KAAK,CAAC,UAAU,WAAW,GAAG,GAAG;EAC3F,OAAO,GAAG,KAAK,KAAK;EACpB;CACF;CACA,IAAI,aAAa,KAAA,GAAW,WAAW,CAAC;CACxC,SAAS,KAAK,KAAK,KAAK;CACxB,OAAO;AACT;;AAGA,MAAa,gBAAgB,GAAW,aAA2C;CACjF,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK,GAAG,OAAO,GAAG,SAAS,IAAI,SAAS,IAAI,EAAE;AACrF"}