effect-grammar 0.4.0 → 0.5.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 (72) hide show
  1. package/README.md +175 -87
  2. package/dist/binary.d.ts +64 -0
  3. package/dist/binary.d.ts.map +1 -0
  4. package/dist/binary.js +246 -0
  5. package/dist/binary.js.map +1 -0
  6. package/dist/codec.d.ts +17 -0
  7. package/dist/codec.d.ts.map +1 -0
  8. package/dist/codec.js +14 -0
  9. package/dist/codec.js.map +1 -0
  10. package/dist/combinators.d.ts +112 -6
  11. package/dist/combinators.d.ts.map +1 -1
  12. package/dist/combinators.js +218 -28
  13. package/dist/combinators.js.map +1 -1
  14. package/dist/compile.d.ts +36 -0
  15. package/dist/compile.d.ts.map +1 -0
  16. package/dist/compile.js +228 -0
  17. package/dist/compile.js.map +1 -0
  18. package/dist/core.d.ts +34 -1
  19. package/dist/core.d.ts.map +1 -1
  20. package/dist/core.js +51 -1
  21. package/dist/core.js.map +1 -1
  22. package/dist/env.d.ts +5 -0
  23. package/dist/env.d.ts.map +1 -1
  24. package/dist/env.js +20 -1
  25. package/dist/env.js.map +1 -1
  26. package/dist/errors.d.ts +12 -0
  27. package/dist/errors.d.ts.map +1 -1
  28. package/dist/errors.js +40 -4
  29. package/dist/errors.js.map +1 -1
  30. package/dist/gen.d.ts.map +1 -1
  31. package/dist/gen.js +5 -7
  32. package/dist/gen.js.map +1 -1
  33. package/dist/index.d.ts +5 -4
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +3 -2
  36. package/dist/index.js.map +1 -1
  37. package/dist/parse.d.ts +10 -1
  38. package/dist/parse.d.ts.map +1 -1
  39. package/dist/parse.js +81 -19
  40. package/dist/parse.js.map +1 -1
  41. package/dist/pattern.d.ts +2 -1
  42. package/dist/pattern.d.ts.map +1 -1
  43. package/dist/pattern.js +46 -2
  44. package/dist/pattern.js.map +1 -1
  45. package/dist/print.d.ts +8 -0
  46. package/dist/print.d.ts.map +1 -1
  47. package/dist/print.js +136 -18
  48. package/dist/print.js.map +1 -1
  49. package/dist/render.d.ts.map +1 -1
  50. package/dist/render.js +33 -6
  51. package/dist/render.js.map +1 -1
  52. package/dist/schema.d.ts +8 -3
  53. package/dist/schema.d.ts.map +1 -1
  54. package/dist/schema.js +11 -13
  55. package/dist/schema.js.map +1 -1
  56. package/dist/testing.d.ts +18 -0
  57. package/dist/testing.d.ts.map +1 -0
  58. package/dist/testing.js +72 -0
  59. package/dist/testing.js.map +1 -0
  60. package/package.json +9 -3
  61. package/dist/ast.d.ts +0 -115
  62. package/dist/ast.d.ts.map +0 -1
  63. package/dist/ast.js +0 -253
  64. package/dist/ast.js.map +0 -1
  65. package/dist/grammar.d.ts +0 -8
  66. package/dist/grammar.d.ts.map +0 -1
  67. package/dist/grammar.js +0 -8
  68. package/dist/grammar.js.map +0 -1
  69. package/dist/recovery.d.ts +0 -10
  70. package/dist/recovery.d.ts.map +0 -1
  71. package/dist/recovery.js +0 -296
  72. package/dist/recovery.js.map +0 -1
package/dist/print.js CHANGED
@@ -1,8 +1,9 @@
1
- import { Predicate, Result } from "effect";
1
+ import { Equal, Predicate, Result } from "effect";
2
2
  import { nodeOf, resolve, unsafeToNever, } from "./core.js";
3
- import { caseFor, evaluate, frame, isCount, Unbound } from "./env.js";
4
- import { exceptionMessage, preview, PrintError } from "./errors.js";
5
- import { unifyPattern } from "./pattern.js";
3
+ import { caseFor, copyFields, evaluate, frame, nonByte, isCount, toBytes, Unbound, } from "./env.js";
4
+ import { describeRoundTrip, exceptionMessage, preview, PrintError, } from "./errors.js";
5
+ import { reparse } from "./parse.js";
6
+ import { ownKeys, unifyPattern } from "./pattern.js";
6
7
  import { describe, describeStep } from "./render.js";
7
8
  class Failure {
8
9
  issue;
@@ -11,6 +12,15 @@ class Failure {
11
12
  }
12
13
  }
13
14
  const fail = (issue) => new Failure(issue);
15
+ /** Parse `printed` back through `grammar`; the issue if it does not read as `value`. */
16
+ const roundTripIssue = (grammar, value, printed, env) => {
17
+ const back = reparse(grammar, printed, env);
18
+ if (!back.ok)
19
+ return { _tag: "RoundTrip", value, printed, error: back.error.message };
20
+ return Equal.equals(back.value, value)
21
+ ? undefined
22
+ : { _tag: "RoundTrip", value, printed, parsed: back.value };
23
+ };
14
24
  const bindingPath = (pattern, scope, slot, path) => {
15
25
  switch (pattern._tag) {
16
26
  case "Ref":
@@ -60,7 +70,35 @@ const outputGen = (node, value, env) => {
60
70
  }
61
71
  return text;
62
72
  };
63
- const out = (grammar, value, env) => {
73
+ const outputMerge = (node, value, env) => {
74
+ if (!Predicate.isObject(value)) {
75
+ return fail({ _tag: "TypeMismatch", expected: "an object", actual: value });
76
+ }
77
+ const keys = ownKeys(value, node.parts.flatMap((part) => part.keys));
78
+ if (!Array.isArray(keys))
79
+ return fail(keys);
80
+ let text = "";
81
+ for (const part of node.parts) {
82
+ const fields = {};
83
+ try {
84
+ copyFields(fields, value, part.keys);
85
+ }
86
+ catch (error) {
87
+ return fail({
88
+ _tag: "InvalidValue",
89
+ expected: "readable fields",
90
+ actual: value,
91
+ detail: exceptionMessage(error),
92
+ });
93
+ }
94
+ const result = out(part.grammar, fields, env);
95
+ if (result instanceof Failure)
96
+ return result;
97
+ text += result;
98
+ }
99
+ return text;
100
+ };
101
+ const out = (grammar, value, env, suspended = new Set()) => {
64
102
  const node = nodeOf(grammar);
65
103
  switch (node._tag) {
66
104
  case "Literal":
@@ -68,14 +106,14 @@ const out = (grammar, value, env) => {
68
106
  case "Regex": {
69
107
  if (!Predicate.isString(value))
70
108
  return fail({ _tag: "TypeMismatch", expected: "a string", actual: value });
71
- node.re.lastIndex = 0;
72
- const match = node.re.exec(value);
73
- if (match === null || match.index !== 0 || match[0].length !== value.length) {
109
+ const expression = new RegExp(node.source, `${node.flags}y`);
110
+ const match = expression.exec(value);
111
+ if (match === null || match[0].length !== value.length) {
74
112
  return fail({
75
113
  _tag: "InvalidValue",
76
114
  expected: node.name,
77
115
  actual: value,
78
- detail: `${JSON.stringify(value)} does not match /${node.re.source}/`,
116
+ detail: `${JSON.stringify(value)} does not match /${node.source}/`,
79
117
  });
80
118
  }
81
119
  return value;
@@ -93,12 +131,44 @@ const out = (grammar, value, env) => {
93
131
  return close instanceof Failure ? close : open + inner + close;
94
132
  }
95
133
  case "Choice": {
134
+ if (node.on !== undefined) {
135
+ const { tag, keys } = node.on;
136
+ if (!Predicate.isObject(value) || !Object.hasOwn(value, tag)) {
137
+ return fail({
138
+ _tag: "TypeMismatch",
139
+ expected: `an object with a ${tag} field`,
140
+ actual: value,
141
+ });
142
+ }
143
+ const key = value[tag];
144
+ const index = keys.findIndex((candidate) => Object.is(candidate, key));
145
+ if (index === -1) {
146
+ return fail({
147
+ _tag: "InvalidValue",
148
+ expected: `${tag} to be one of ${keys.map(preview).join(", ")}`,
149
+ actual: key,
150
+ });
151
+ }
152
+ return out(node.options[index], value, env);
153
+ }
96
154
  const issues = [];
97
155
  for (const option of node.options) {
98
156
  const result = out(option, value, env);
99
- if (!(result instanceof Failure))
157
+ if (result instanceof Failure) {
158
+ issues.push(result.issue);
159
+ continue;
160
+ }
161
+ if (node.checked !== true)
162
+ return result;
163
+ const issue = roundTripIssue(grammar, value, result, env);
164
+ if (issue === undefined)
100
165
  return result;
101
- issues.push(result.issue);
166
+ issues.push({
167
+ _tag: "InvalidValue",
168
+ expected: describe(option),
169
+ actual: value,
170
+ detail: describeRoundTrip(issue),
171
+ });
102
172
  }
103
173
  return fail({ _tag: "NoAlternative", actual: value, issues });
104
174
  }
@@ -163,8 +233,35 @@ const out = (grammar, value, env) => {
163
233
  return out(node.inner, node.printAs, env);
164
234
  case "Label":
165
235
  return out(node.inner, value, env);
166
- case "Suspend":
167
- return out(resolve(node), value, env);
236
+ case "Suspend": {
237
+ if (suspended.has(node)) {
238
+ return fail({
239
+ _tag: "InvalidValue",
240
+ expected: "a productive recursive grammar",
241
+ actual: value,
242
+ detail: `suspend${node.name === undefined ? "" : ` ${JSON.stringify(node.name)}`} recursed without consuming a value`,
243
+ });
244
+ }
245
+ let target;
246
+ try {
247
+ target = resolve(node);
248
+ }
249
+ catch (error) {
250
+ return fail({
251
+ _tag: "InvalidValue",
252
+ expected: "a valid suspended grammar",
253
+ actual: value,
254
+ detail: exceptionMessage(error),
255
+ });
256
+ }
257
+ suspended.add(node);
258
+ try {
259
+ return out(target, value, env, suspended);
260
+ }
261
+ finally {
262
+ suspended.delete(node);
263
+ }
264
+ }
168
265
  case "Match": {
169
266
  const key = evaluate(node.scrutinee, env);
170
267
  if (key === Unbound)
@@ -187,13 +284,18 @@ const out = (grammar, value, env) => {
187
284
  }
188
285
  if (!Predicate.isString(value))
189
286
  return fail({ _tag: "TypeMismatch", expected: "a string", actual: value });
287
+ if (node.unit === "char") {
288
+ return value.length === count
289
+ ? value
290
+ : fail({ _tag: "InvalidValue", expected: `${count} UTF-16 code units`, actual: value });
291
+ }
292
+ if (nonByte.test(value)) {
293
+ return fail({ _tag: "InvalidValue", expected: "a string of bytes", actual: value });
294
+ }
295
+ // A binary string is an encoding detail, so the error shows the bytes it stands for.
190
296
  return value.length === count
191
297
  ? value
192
- : fail({
193
- _tag: "InvalidValue",
194
- expected: `${count} UTF-16 code units`,
195
- actual: value,
196
- });
298
+ : fail({ _tag: "InvalidValue", expected: `${count} bytes`, actual: toBytes(value) });
197
299
  }
198
300
  case "RepeatExact": {
199
301
  const count = evaluate(node.count, env);
@@ -221,6 +323,8 @@ const out = (grammar, value, env) => {
221
323
  }
222
324
  return text;
223
325
  }
326
+ case "Merge":
327
+ return outputMerge(node, value, env);
224
328
  }
225
329
  };
226
330
  export const printUnknown = (grammar, value) => {
@@ -229,5 +333,19 @@ export const printUnknown = (grammar, value) => {
229
333
  ? Result.fail(new PrintError({ issue: result.issue }))
230
334
  : Result.succeed(result);
231
335
  };
336
+ /** Print a value using the grammar's selected branches and configured spellings. This does not verify a round trip; see {@link printCheckedUnknown}. */
232
337
  export const print = (grammar, value) => printUnknown(grammar, value);
338
+ export const printCheckedUnknown = (grammar, value) => {
339
+ const printed = printUnknown(grammar, value);
340
+ if (Result.isFailure(printed))
341
+ return printed;
342
+ const issue = roundTripIssue(grammar, value, printed.success, undefined);
343
+ return issue === undefined ? printed : Result.fail(new PrintError({ issue }));
344
+ };
345
+ /**
346
+ * Print a value, then parse the whole output back and confirm it equals the
347
+ * original. Fails if the text would decode to a different value, so a checked
348
+ * print never hides a broken round trip.
349
+ */
350
+ export const printChecked = (grammar, value) => printCheckedUnknown(grammar, value);
233
351
  //# sourceMappingURL=print.js.map
package/dist/print.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"print.js","sourceRoot":"","sources":["../src/print.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"print.js","sourceRoot":"","sources":["../src/print.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,eAAe,EAMpB,KAAK,IAAI,EACV,MAAM,WAAW,CAAA;AA6KlB,eAAO,MAAM,MAAM,YAAa,eAAe,KAAG,MACc,CAAA;AAEhE,eAAO,MAAM,QAAQ,YAAa,eAAe,KAAG,MAGnD,CAAA;AAED,eAAO,MAAM,YAAY,SAAU,IAAI,SAAS,MAAM,KAAG,MACR,CAAA"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,eAAe,EAMpB,KAAK,IAAI,EACV,MAAM,WAAW,CAAA;AAwMlB,eAAO,MAAM,MAAM,YAAa,eAAe,KAAG,MACc,CAAA;AAEhE,eAAO,MAAM,QAAQ,YAAa,eAAe,KAAG,MAGnD,CAAA;AAED,eAAO,MAAM,YAAY,SAAU,IAAI,SAAS,MAAM,KAAG,MACR,CAAA"}
package/dist/render.js CHANGED
@@ -48,6 +48,8 @@ const nameBindings = (pattern, path, scope, names) => {
48
48
  const showExpr = (expr, context) => {
49
49
  if (expr._tag === "Ref")
50
50
  return context.names.get(expr.scope)?.get(expr.slot) ?? `$${expr.slot}`;
51
+ if (expr._tag === "Count")
52
+ return String(expr.value);
51
53
  const object = showExpr(expr.object, context);
52
54
  return Predicate.isString(expr.key) && /^[A-Za-z_$][\w$]*$/.test(expr.key)
53
55
  ? `${object}.${expr.key}`
@@ -59,7 +61,7 @@ const show = (grammar, context) => {
59
61
  case "Literal":
60
62
  return {
61
63
  precedence: AtomPrecedence,
62
- text: node.value === "" ? "" : JSON.stringify(node.value),
64
+ text: node.value === "" ? "" : (node.name ?? JSON.stringify(node.value)),
63
65
  };
64
66
  case "Regex":
65
67
  return { precedence: AtomPrecedence, text: `<${node.name}>` };
@@ -84,13 +86,22 @@ const show = (grammar, context) => {
84
86
  show(node.inner, context),
85
87
  show(node.close, context),
86
88
  ]);
87
- case "Choice":
89
+ case "Choice": {
90
+ const on = node.on;
91
+ if (on !== undefined) {
92
+ const cases = node.options.map((option, index) => `${preview(on.keys[index])} => ${show(option, context).text}`);
93
+ return {
94
+ precedence: AtomPrecedence,
95
+ text: `on(${on.tag}){${cases.join(" | ")}}`,
96
+ };
97
+ }
88
98
  return {
89
99
  precedence: ChoicePrecedence,
90
100
  text: node.options
91
101
  .map((option) => parenthesize(show(option, context), SequencePrecedence))
92
102
  .join(" | "),
93
103
  };
104
+ }
94
105
  case "Many": {
95
106
  const inner = show(node.inner, context);
96
107
  const sep = show(node.sep, context);
@@ -121,9 +132,18 @@ const show = (grammar, context) => {
121
132
  return { precedence: AtomPrecedence, text: node.name ?? "…" };
122
133
  }
123
134
  context.seen.add(node);
124
- const fragment = show(resolve(node), context);
125
- context.seen.delete(node);
126
- return fragment;
135
+ try {
136
+ return show(resolve(node), context);
137
+ }
138
+ catch (error) {
139
+ return {
140
+ precedence: AtomPrecedence,
141
+ text: `<invalid suspend: ${error instanceof Error ? error.message : preview(error)}>`,
142
+ };
143
+ }
144
+ finally {
145
+ context.seen.delete(node);
146
+ }
127
147
  }
128
148
  case "Match": {
129
149
  const cases = node.cases.map((matchCase) => `${preview(matchCase.key)} => ${show(matchCase.grammar, context).text}`);
@@ -133,12 +153,19 @@ const show = (grammar, context) => {
133
153
  };
134
154
  }
135
155
  case "Take":
136
- return { precedence: AtomPrecedence, text: `<char>{${showExpr(node.count, context)}}` };
156
+ return {
157
+ precedence: AtomPrecedence,
158
+ text: node.name === undefined
159
+ ? `<${node.unit}>{${showExpr(node.count, context)}}`
160
+ : `<${node.name}>`,
161
+ };
137
162
  case "RepeatExact":
138
163
  return {
139
164
  precedence: PostfixPrecedence,
140
165
  text: `(${show(node.inner, context).text}){${showExpr(node.count, context)}}`,
141
166
  };
167
+ case "Merge":
168
+ return sequence(node.parts.map((part) => show(part.grammar, context)));
142
169
  }
143
170
  };
144
171
  const context = (includeBindings) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
package/dist/schema.d.ts CHANGED
@@ -1,6 +1,11 @@
1
1
  import { Schema } from "effect";
2
+ import { type CodecOptions } from "./codec.ts";
2
3
  import type { Grammar } from "./core.ts";
3
- export declare const codec: <S extends Schema.Top, A extends S["Encoded"]>(grammar: Grammar<A>, target: S, options?: {
4
- readonly identifier?: string;
5
- }) => Schema.decodeTo<S, Schema.String, never, never>;
4
+ export type { CodecOptions } from "./codec.ts";
5
+ /**
6
+ * Derive a string-to-schema codec from a grammar. Decoding parses the whole
7
+ * string. Encoding checks the printed value round trip by default; set
8
+ * `roundTrip: "off"` to use unchecked printing.
9
+ */
10
+ export declare const codec: <S extends Schema.Top, A extends S["Encoded"]>(grammar: Grammar<A>, target: S, options?: CodecOptions) => Schema.decodeTo<S, Schema.Codec<string, string, never, never>, never, never>;
6
11
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAqC,MAAM,QAAQ,CAAA;AAE1E,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,WAAW,CAAA;AAc/C,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,WACvD,OAAO,CAAC,CAAC,CAAC,UACX,CAAC,YACC;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,oDAiBzC,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,KAAK,YAAY,EAAa,MAAM,YAAY,CAAA;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,WACvD,OAAO,CAAC,CAAC,CAAC,UACX,CAAC,YACC,YAAY,iFAWvB,CAAA"}
package/dist/schema.js CHANGED
@@ -1,16 +1,14 @@
1
- import { Effect, Schema, SchemaIssue, SchemaTransformation } from "effect";
2
- import { PrintError } from "./errors.js";
1
+ import { Schema } from "effect";
2
+ import { codecFrom } from "./codec.js";
3
3
  import { parse } from "./parse.js";
4
- import { printUnknown } from "./print.js";
5
- import { render } from "./render.js";
6
- const printIssueToSchema = (actual, issue) => {
7
- if (issue._tag === "AtPath") {
8
- return new SchemaIssue.Pointer([issue.path], printIssueToSchema(actual, issue.issue));
9
- }
10
- return new SchemaIssue.InvalidValue({ message: PrintError.format(issue) }, actual);
4
+ import { printCheckedUnknown, printUnknown } from "./print.js";
5
+ /**
6
+ * Derive a string-to-schema codec from a grammar. Decoding parses the whole
7
+ * string. Encoding checks the printed value round trip by default; set
8
+ * `roundTrip: "off"` to use unchecked printing.
9
+ */
10
+ export const codec = (grammar, target, options) => {
11
+ const print = options?.roundTrip === "off" ? printUnknown : printCheckedUnknown;
12
+ return codecFrom(Schema.String, target, grammar, options?.identifier, (text) => parse(grammar, text), (value) => print(grammar, value));
11
13
  };
12
- export const codec = (grammar, target, options) => Schema.String.pipe(Schema.decodeTo(target, SchemaTransformation.transformOrFail({
13
- decode: (text) => Effect.fromResult(parse(grammar, text)).pipe(Effect.mapError(({ message }) => new SchemaIssue.InvalidValue({ message }, text))),
14
- encode: (value) => Effect.fromResult(printUnknown(grammar, value)).pipe(Effect.mapError((error) => printIssueToSchema(value, error.issue))),
15
- })), Schema.annotate({ ...options, description: render(grammar) }));
16
14
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAA;AAI1E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,kBAAkB,GAAG,CAAC,MAAa,EAAE,KAAiB,EAAqB,EAAE;IACjF,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IACvF,CAAC;IACD,OAAO,IAAI,WAAW,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;AACpF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,OAAmB,EACnB,MAAS,EACT,OAA0C,EAC1C,EAAE,CACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,MAAM,CAAC,QAAQ,CACb,MAAM,EACN,oBAAoB,CAAC,eAAe,CAAuB;IACzD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACf,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,CAClF;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAChB,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAClD,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CACnE;CACJ,CAAC,CACH,EACD,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAC9D,CAAA"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAqB,SAAS,EAAE,MAAM,YAAY,CAAA;AAEzD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAI9D;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,OAAmB,EACnB,MAAS,EACT,OAAsB,EACtB,EAAE;IACF,MAAM,KAAK,GAAG,OAAO,EAAE,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAA;IAC/E,OAAO,SAAS,CACd,MAAM,CAAC,MAAM,EACb,MAAM,EACN,OAAO,EACP,OAAO,EAAE,UAAU,EACnB,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,EAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CACjC,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ import * as FastCheck from "effect/testing/FastCheck";
2
+ import type { Grammar } from "./core.ts";
3
+ /** Assert `parse(print(value))` equals `value`. */
4
+ export declare const assertPrintParse: <A>(grammar: Grammar<A>, value: A) => void;
5
+ /**
6
+ * Assert that `text` parses, that parsing its printed form yields an equal
7
+ * value, and that printing the result again is unchanged. Returns that stable
8
+ * printed form; this assertion does not imply universal canonicality.
9
+ */
10
+ export declare const assertParsePrintCanonical: <A>(grammar: Grammar<A>, text: string) => string;
11
+ /** Check `parse(print(value)) = value` over an arbitrary of values. */
12
+ export declare const checkPrintParse: <A>(grammar: Grammar<A>, arbitrary: FastCheck.Arbitrary<A>, params?: FastCheck.Parameters<[A]>) => void;
13
+ /**
14
+ * Check the accepted-text value-preservation and print fixed-point properties
15
+ * over arbitrary text. Inputs that do not parse are skipped.
16
+ */
17
+ export declare const checkCanonicalization: <A>(grammar: Grammar<A>, arbitraryText: FastCheck.Arbitrary<string>, params?: FastCheck.Parameters<[string]>) => void;
18
+ //# sourceMappingURL=testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,0BAA0B,CAAA;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAkBxC,mDAAmD;AACnD,eAAO,MAAM,gBAAgB,GAAI,CAAC,WAAW,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAG,IAKnE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GAAI,CAAC,WAAW,OAAO,CAAC,CAAC,CAAC,QAAQ,MAAM,KAAG,MAMhF,CAAA;AA6BD,uEAAuE;AACvE,eAAO,MAAM,eAAe,GAAI,CAAC,WACtB,OAAO,CAAC,CAAC,CAAC,aACR,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,WACxB,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KACjC,IAOF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,WAC5B,OAAO,CAAC,CAAC,CAAC,iBACJ,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,WACjC,SAAS,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,KACtC,IASF,CAAA"}
@@ -0,0 +1,72 @@
1
+ import { Equal, Result } from "effect";
2
+ import * as FastCheck from "effect/testing/FastCheck";
3
+ import { preview } from "./errors.js";
4
+ import { parse } from "./parse.js";
5
+ import { print, printChecked } from "./print.js";
6
+ /**
7
+ * Property helpers for checking a particular grammar. These properties are not
8
+ * guaranteed for every grammar: choices, transforms, and configured silent
9
+ * spellings can make printing lossy or non-idempotent.
10
+ *
11
+ * - `parse(print(value)) = value` checks a value round trip.
12
+ * - For accepted text, parse, print, and parse again preserve the value, and a
13
+ * second print is unchanged. “Canonical” names that tested fixed-point
14
+ * property; it is not a universal canonicalization guarantee.
15
+ */
16
+ const lawError = (message) => new Error(`grammar law: ${message}`);
17
+ /** Assert `parse(print(value))` equals `value`. */
18
+ export const assertPrintParse = (grammar, value) => {
19
+ const printed = printChecked(grammar, value);
20
+ if (Result.isFailure(printed)) {
21
+ throw lawError(`parse(print(value)) = value fails: ${printed.failure.message}`);
22
+ }
23
+ };
24
+ /**
25
+ * Assert that `text` parses, that parsing its printed form yields an equal
26
+ * value, and that printing the result again is unchanged. Returns that stable
27
+ * printed form; this assertion does not imply universal canonicality.
28
+ */
29
+ export const assertParsePrintCanonical = (grammar, text) => {
30
+ const parsed = parse(grammar, text);
31
+ if (Result.isFailure(parsed)) {
32
+ throw lawError(`parse failed for ${JSON.stringify(text)}: ${parsed.failure.message}`);
33
+ }
34
+ return assertCanonical(grammar, text, parsed.success);
35
+ };
36
+ const assertCanonical = (grammar, text, value) => {
37
+ const canonical = print(grammar, value);
38
+ if (Result.isFailure(canonical)) {
39
+ throw lawError(`print(parse(text)) failed\n text: ${JSON.stringify(text)}\n parsed: ${preview(value)}\n error: ${canonical.failure.message}`);
40
+ }
41
+ const reparsed = parse(grammar, canonical.success);
42
+ if (Result.isFailure(reparsed)) {
43
+ throw lawError(`the canonical text does not parse\n text: ${JSON.stringify(text)}\n canonical: ${JSON.stringify(canonical.success)}\n error: ${reparsed.failure.message}`);
44
+ }
45
+ if (!Equal.equals(reparsed.success, value)) {
46
+ throw lawError(`canonicalization changed the value\n text: ${JSON.stringify(text)}\n canonical: ${JSON.stringify(canonical.success)}\n before: ${preview(value)}\n after: ${preview(reparsed.success)}`);
47
+ }
48
+ const again = print(grammar, reparsed.success);
49
+ if (Result.isFailure(again) || again.success !== canonical.success) {
50
+ throw lawError(`canonicalization is not idempotent\n once: ${JSON.stringify(canonical.success)}\n twice: ${Result.isFailure(again) ? again.failure.message : JSON.stringify(again.success)}`);
51
+ }
52
+ return canonical.success;
53
+ };
54
+ /** Check `parse(print(value)) = value` over an arbitrary of values. */
55
+ export const checkPrintParse = (grammar, arbitrary, params) => {
56
+ FastCheck.assert(FastCheck.property(arbitrary, (value) => {
57
+ assertPrintParse(grammar, value);
58
+ }), params);
59
+ };
60
+ /**
61
+ * Check the accepted-text value-preservation and print fixed-point properties
62
+ * over arbitrary text. Inputs that do not parse are skipped.
63
+ */
64
+ export const checkCanonicalization = (grammar, arbitraryText, params) => {
65
+ FastCheck.assert(FastCheck.property(arbitraryText, (text) => {
66
+ const parsed = parse(grammar, text);
67
+ if (Result.isFailure(parsed))
68
+ return FastCheck.pre(false);
69
+ assertCanonical(grammar, text, parsed.success);
70
+ }), params);
71
+ };
72
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "effect-grammar",
3
- "version": "0.4.0",
4
- "description": "Invertible grammar combinators and parser-printers for Effect.",
3
+ "version": "0.5.0",
4
+ "description": "Bidirectional grammar combinators and Schema codecs for Effect.",
5
5
  "keywords": [
6
6
  "bidirectional",
7
7
  "effect",
@@ -30,6 +30,10 @@
30
30
  "types": "./dist/index.d.ts",
31
31
  "import": "./dist/index.js"
32
32
  },
33
+ "./Binary": {
34
+ "types": "./dist/binary.d.ts",
35
+ "import": "./dist/binary.js"
36
+ },
33
37
  "./Schema": {
34
38
  "types": "./dist/schema.d.ts",
35
39
  "import": "./dist/schema.js"
@@ -45,7 +49,8 @@
45
49
  },
46
50
  "scripts": {
47
51
  "bench": "vitest bench --dir bench",
48
- "build": "tsc -p tsconfig.build.json",
52
+ "build": "pnpm clean && tsc -p tsconfig.build.json",
53
+ "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
49
54
  "check": "pnpm fmt:check && pnpm lint && pnpm typecheck && pnpm test && pnpm build",
50
55
  "fmt": "oxfmt",
51
56
  "fmt:check": "oxfmt --check",
@@ -59,6 +64,7 @@
59
64
  "@changesets/changelog-github": "^0.7.0",
60
65
  "@changesets/cli": "^2.31.0",
61
66
  "@effect/language-service": "^0.87.2",
67
+ "@effect/platform-node": "4.0.0-rc.112",
62
68
  "@effect/tsgo": "0.38.0",
63
69
  "@effect/vitest": "4.0.0-rc.112",
64
70
  "@oxlint/plugins": "1.80.0",