@jondotsoy/don 0.0.5 → 0.0.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.
package/README.md CHANGED
@@ -9,107 +9,3 @@ DON is a human-readable data serialization format designed around the concept of
9
9
  - **Flexible Nesting**: Supports hierarchies of any depth
10
10
  - **Multiple Data Types**: Keywords, strings, numbers, booleans, and null
11
11
  - **Heredoc Support**: Multi-line content blocks for embedded scripts and text
12
- - **Comments**: Supports line comments (`//`, `#`) and multi-line comments (`/* */`)
13
- - **Unambiguous**: Clear parsing rules and delimitation
14
-
15
- ## Installation
16
-
17
- ### Using npm
18
-
19
- ```bash
20
- npm install @jondotsoy/don
21
- ```
22
-
23
- ### Using Bun
24
-
25
- ```bash
26
- bun add @jondotsoy/don
27
- ```
28
-
29
- ## Usage
30
-
31
- ### Deserialization (DON → JavaScript)
32
-
33
- Parse DON format strings into JavaScript objects using `DocumentDecoder`:
34
-
35
- ```typescript
36
- import { DocumentDecoder } from "@jondotsoy/don";
37
-
38
- const donPayload = `
39
- name "my-app"
40
- version "1.0.0"
41
- container {
42
- image "nginx"
43
- port 8080
44
- }
45
- `;
46
-
47
- const decoder = new DocumentDecoder();
48
- const result = decoder.decode(donPayload);
49
-
50
- console.log(result);
51
- // Output: { name: "my-app", version: "1.0.0", container: { image: "nginx", port: 8080 } }
52
- ```
53
-
54
- ### Serialization (JavaScript → DON)
55
-
56
- Convert JavaScript objects into DON format strings using `DocumentEncoder`:
57
-
58
- ```typescript
59
- import { DocumentEncoder } from "@jondotsoy/don";
60
-
61
- const data = {
62
- name: "my-app",
63
- version: "1.0.0",
64
- container: {
65
- image: "nginx",
66
- port: 8080,
67
- },
68
- };
69
-
70
- const encoder = new DocumentEncoder();
71
- const donString = encoder.encode(data);
72
-
73
- console.log(donString);
74
- // Output:
75
- // name "my-app"
76
- // version "1.0.0"
77
- // container {
78
- // image "nginx"
79
- // port 8080
80
- // }
81
- ```
82
-
83
- ### Working with Heredocs
84
-
85
- ```typescript
86
- import { DocumentDecoder } from "@jondotsoy/don";
87
-
88
- const donPayload = `
89
- name "deployment-script"
90
- script <<<
91
- #!/bin/bash
92
- echo "Deploying application..."
93
- npm run build
94
- `;
95
-
96
- const result = new DocumentDecoder().decode(donPayload);
97
-
98
- console.log(result.script);
99
- // Output: "#!/bin/bash\necho \"Deploying application...\"\nnpm run build"
100
- ```
101
-
102
- ## Documentation
103
-
104
- For more information about DON, check out the [complete documentation](./docs/index.md):
105
-
106
- - [DON File Format](./docs/don-file.md): Complete format specification
107
- - [Formal Specification v0](./docs/specs/v0/spec.md): Draft specification (v0)
108
- - [Directives](./docs/concepts/directive.md): Anatomy and usage of directives
109
- - [Heredocs](./docs/concepts/heredoc.md): Multi-line content blocks
110
- - [Data Types](./docs/concepts/types/): Specification of supported types
111
- - [Inspiration](./docs/inspiration.md): Project goals and vision
112
-
113
- ## License
114
-
115
- This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
package/lib/esm/don.js CHANGED
@@ -1,4 +1,4 @@
1
- import { SyntaxEncode } from "./v1/compiler/syntax-encode";
1
+ import { SyntaxEncode } from "./v1/compiler/syntax-encode.js";
2
2
  export class Directive {
3
3
  name;
4
4
  args;
@@ -1 +1 @@
1
- {"version":3,"file":"don.js","sourceRoot":"","sources":["../../src/don.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,OAAO,SAAS;IAET;IACA;IACA;IAHX,YACW,IAAY,EACZ,IAAmC,EACnC,WAAwB,EAAE;QAF1B,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAA+B;QACnC,aAAQ,GAAR,QAAQ,CAAkB;IAClC,CAAC;CACL;AAED,MAAM,WAAW,GAAG,CAAC,IAAmB,EAAa,EAAE;IACrD,OAAO,IAAI,SAAS,CAClB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAChB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CACxD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAkB,EAAe,EAAE;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5C,OAAO,IAAI,SAAS,CAClB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAChB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CACxD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG;IACd,MAAM,CAAC,KAAK,CAAC,IAAY;QACvB,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAErD,OAAO,cAAc,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;CACF"}
1
+ {"version":3,"file":"don.js","sourceRoot":"","sources":["../../src/don.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,MAAM,OAAO,SAAS;IAET;IACA;IACA;IAHX,YACW,IAAY,EACZ,IAAmC,EACnC,WAAwB,EAAE;QAF1B,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAA+B;QACnC,aAAQ,GAAR,QAAQ,CAAkB;IAClC,CAAC;CACL;AAED,MAAM,WAAW,GAAG,CAAC,IAAmB,EAAa,EAAE;IACrD,OAAO,IAAI,SAAS,CAClB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAChB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CACxD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAkB,EAAe,EAAE;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5C,OAAO,IAAI,SAAS,CAClB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAChB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CACxD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG;IACd,MAAM,CAAC,KAAK,CAAC,IAAY;QACvB,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAErD,OAAO,cAAc,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;CACF"}
@@ -1,2 +1,3 @@
1
1
  export { SyntaxEncode } from "./v1/compiler/syntax-encode.js";
2
+ export { DON, Directive } from "./don.js";
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC"}
package/lib/esm/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export { SyntaxEncode } from "./v1/compiler/syntax-encode.js";
2
- // TODO: preparar package.json
2
+ export { DON, Directive } from "./don.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,8BAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jondotsoy/don",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "DON (Directive Object Notation) - A human-readable data serialization format based on directives and subdirectives for configuration files, infrastructure definitions, and structured data",
5
5
  "keywords": [
6
6
  "don",
@@ -1,2 +0,0 @@
1
- export declare const KeySyntaxKind: Record<number | string, string>;
2
- //# sourceMappingURL=key-syntax-kind.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"key-syntax-kind.d.ts","sourceRoot":"","sources":["../../../../src/v1/__utils__/key-syntax-kind.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAoBzD,CAAC"}
@@ -1,23 +0,0 @@
1
- import { SyntaxKind } from "../utils/syntax-kind.js";
2
- export const KeySyntaxKind = {
3
- [SyntaxKind.unknown]: "Unknown",
4
- [SyntaxKind.alphabet]: "Alphabet",
5
- [SyntaxKind.integer]: "Int",
6
- [SyntaxKind.whitespace]: "Whitespace",
7
- [SyntaxKind.newline]: "Newline",
8
- [SyntaxKind.dot]: "Dot",
9
- [SyntaxKind.underscore]: "underscore",
10
- [SyntaxKind.openCurlyBrace]: "OpenCurlyBrace",
11
- [SyntaxKind.closeCurlyBrace]: "CloseCurlyBrace",
12
- [SyntaxKind.keyword]: "Keyword",
13
- [SyntaxKind.numeric]: "Numeric",
14
- [SyntaxKind.boolean]: "Boolean",
15
- [SyntaxKind.null]: "Null",
16
- [SyntaxKind.comment]: "Comment",
17
- [SyntaxKind.indent]: "Indent",
18
- [SyntaxKind.heredoc]: "Heredoc",
19
- [SyntaxKind.singleQuote]: "SingleQuote",
20
- [SyntaxKind.doubleQuote]: "DoubleQuote",
21
- [SyntaxKind.string]: "String",
22
- };
23
- //# sourceMappingURL=key-syntax-kind.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"key-syntax-kind.js","sourceRoot":"","sources":["../../../../src/v1/__utils__/key-syntax-kind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAoC;IAC5D,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS;IAC/B,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,UAAU;IACjC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK;IAC3B,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,YAAY;IACrC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS;IAC/B,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,KAAK;IACvB,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,YAAY;IACrC,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,gBAAgB;IAC7C,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,iBAAiB;IAC/C,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS;IAC/B,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS;IAC/B,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS;IAC/B,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM;IACzB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS;IAC/B,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC7B,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS;IAC/B,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,aAAa;IACvC,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,aAAa;IACvC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ;CAC9B,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { u8 } from "../types/u8.js";
2
- export declare const normalize: (input: string | Uint8Array | number[]) => u8;
3
- //# sourceMappingURL=normalize.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../src/v1/__utils__/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEzC,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,GAAG,UAAU,GAAG,MAAM,EAAE,KAAG,EAMjE,CAAC"}
@@ -1,10 +0,0 @@
1
- export const normalize = (input) => {
2
- if (typeof input === "string")
3
- return [...new TextEncoder().encode(input)];
4
- if (input instanceof Uint8Array)
5
- return [...input];
6
- if (Array.isArray(input) && input.every((value) => typeof value === "number"))
7
- return input;
8
- throw new Error("not implemented");
9
- };
10
- //# sourceMappingURL=normalize.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../../src/v1/__utils__/normalize.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAqC,EAAM,EAAE;IACrE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;IACnD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;QAC3E,OAAO,KAAK,CAAC;IACf,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACrC,CAAC,CAAC"}
@@ -1,15 +0,0 @@
1
- type Candidate = Result<any, any, any> | (() => any);
2
- export declare class Result<O, E, V> {
3
- readonly ok: O;
4
- readonly error: E;
5
- readonly value: V;
6
- constructor(ok: O, error: E, value: V);
7
- [Symbol.iterator](): Generator<O | E | V, void, unknown>;
8
- static ok: <V_1>(value: V_1) => Result<true, undefined, V_1>;
9
- static error: <E_1>(error: E_1) => Result<false, E_1, undefined>;
10
- }
11
- type ResultType<O, E, V> = Result<O, E, V> & [O, E, V];
12
- type R<T> = T extends Result<infer O, infer E, infer V> ? ResultType<O, E, V> : T extends () => infer V ? ResultType<true, unknown, V> | Result<false, unknown, null> : ResultType<false, unknown, never>;
13
- export declare const t: <T extends Candidate>(candidate: T) => R<T>;
14
- export {};
15
- //# sourceMappingURL=t.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"t.d.ts","sourceRoot":"","sources":["../../../../src/v1/__utils__/t.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AAErD,qBAAa,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAEvB,QAAQ,CAAC,EAAE,EAAE,CAAC;IACd,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAFR,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,CAAC;IAGlB,CAAC,MAAM,CAAC,QAAQ,CAAC;IAMlB,MAAM,CAAC,EAAE,GAAI,GAAC,EAAE,OAAO,GAAC,kCAAiD;IACzE,MAAM,CAAC,KAAK,GAAI,GAAC,EAAE,OAAO,GAAC,mCAAkD;CAC9E;AAED,KAAK,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEvD,KAAK,CAAC,CAAC,CAAC,IACN,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GACvC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GACnB,CAAC,SAAS,MAAM,MAAM,CAAC,GACrB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,GAC3D,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAE1C,eAAO,MAAM,CAAC,GAAI,CAAC,SAAS,SAAS,EAAE,WAAW,CAAC,KAAG,CAAC,CAAC,CAAC,CAYxD,CAAC"}
@@ -1,32 +0,0 @@
1
- export class Result {
2
- ok;
3
- error;
4
- value;
5
- constructor(ok, error, value) {
6
- this.ok = ok;
7
- this.error = error;
8
- this.value = value;
9
- }
10
- *[Symbol.iterator]() {
11
- yield this.ok;
12
- yield this.error;
13
- yield this.value;
14
- }
15
- static ok = (value) => new Result(true, undefined, value);
16
- static error = (error) => new Result(false, error, undefined);
17
- }
18
- export const t = (candidate) => {
19
- if (candidate instanceof Result) {
20
- return candidate;
21
- }
22
- if (typeof candidate === "function") {
23
- try {
24
- return Result.ok(candidate());
25
- }
26
- catch (ex) {
27
- return Result.error(ex);
28
- }
29
- }
30
- return Result.error(new Error("invalid candidate"));
31
- };
32
- //# sourceMappingURL=t.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"t.js","sourceRoot":"","sources":["../../../../src/v1/__utils__/t.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,MAAM;IAEN;IACA;IACA;IAHX,YACW,EAAK,EACL,KAAQ,EACR,KAAQ;QAFR,OAAE,GAAF,EAAE,CAAG;QACL,UAAK,GAAL,KAAK,CAAG;QACR,UAAK,GAAL,KAAK,CAAG;IAChB,CAAC;IAEJ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChB,MAAM,IAAI,CAAC,EAAE,CAAC;QACd,MAAM,IAAI,CAAC,KAAK,CAAC;QACjB,MAAM,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,EAAE,GAAG,CAAI,KAAQ,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,IAAa,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACzE,MAAM,CAAC,KAAK,GAAG,CAAI,KAAQ,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,KAAc,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;;AAY/E,MAAM,CAAC,MAAM,CAAC,GAAG,CAAsB,SAAY,EAAQ,EAAE;IAC3D,IAAI,SAAS,YAAY,MAAM,EAAE,CAAC;QAChC,OAAO,SAAgB,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAQ,CAAC;QACvC,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,CAAQ,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAQ,CAAC;AAC7D,CAAC,CAAC"}
@@ -1,7 +0,0 @@
1
- declare module "bun:test" {
2
- interface Matchers<T> {
3
- toTokenSnapshot(snapName: string): T;
4
- }
5
- }
6
- export {};
7
- //# sourceMappingURL=to-token-snapshot.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"to-token-snapshot.d.ts","sourceRoot":"","sources":["../../../../src/v1/__utils__/to-token-snapshot.ts"],"names":[],"mappings":"AAyEA,OAAO,QAAQ,UAAU,CAAC;IACxB,UAAU,QAAQ,CAAC,CAAC;QAClB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;KACtC;CACF"}
@@ -1,162 +0,0 @@
1
- import { expect } from "bun:test";
2
- import * as fs from "node:fs";
3
- import { Lexema } from "../compiler/lexema.js";
4
- import { Token } from "../compiler/token.js";
5
- import { Part } from "../compiler/part.js";
6
- import { KeySyntaxKind } from "./key-syntax-kind.js";
7
- import { PartSet } from "../compiler/part-set.js";
8
- import { DirectiveNode, DocumentNode } from "../compiler/directive-node.js";
9
- import { t } from "./t.js";
10
- import { SyntaxEncode } from "../compiler/syntax-encode.js";
11
- const isObject = (value) => typeof value === "object" && value !== null;
12
- const isLexema = (value) => isObject(value) && value instanceof Lexema;
13
- const isToken = (value) => isObject(value) && value instanceof Token;
14
- const isPartSet = (value) => isObject(value) && value instanceof PartSet;
15
- const isPart = (value) => isObject(value) && value instanceof Part;
16
- const isTokenArray = (received) => typeof received === "object" &&
17
- Array.isArray(received) &&
18
- received.every(isToken);
19
- const isNode = (value) => isObject(value) && value instanceof DirectiveNode;
20
- const isDocumentNode = (value) => isObject(value) && value instanceof DocumentNode;
21
- const isDirectiveArray = (value) => isObject(value) && Array.isArray(value) && value.every(isNode);
22
- const toSpanStr = (span) => {
23
- const posStr = `Offset ${span.index} Len ${span.length}`;
24
- const i = span.startLocation && span.endLocation
25
- ? `; Ln ${span.startLocation.line + 1}, Col ${span.startLocation.column + 1} (Padding ${span.startLocation.paddingLine}) -> Ln ${span.endLocation.line + 1}, Col ${span.endLocation.column + 1} (Padding ${span.startLocation.paddingLine})`
26
- : "";
27
- return `${posStr}${i}`;
28
- };
29
- const toHex = function* (value) {
30
- const buff = typeof value === "string"
31
- ? new Uint8Array(new TextEncoder().encode(value))
32
- : value;
33
- const e = 16;
34
- const hexParts = Array.from(buff).reduce((list, n8, index) => {
35
- const col = Math.floor(index / e);
36
- const set = list.get(col) ?? new Set();
37
- set.add([n8, n8.toString(16).padStart(2, "0").toUpperCase()]);
38
- list.set(col, set);
39
- return list;
40
- }, new Map());
41
- let colIndex = -1;
42
- for (const col of hexParts.values()) {
43
- const i = (++colIndex).toString().padStart(4, " ");
44
- const hexLine = Array.from(col, ([u8, char]) => char)
45
- .join(" ")
46
- .padEnd(e * 3 - 1, " ");
47
- const asciiRepresentation = new TextDecoder().decode(new Uint8Array(Array.from(col, ([u8]) => (u8 === 0x0a ? [92, 110] : [u8])).flat()));
48
- yield `${i}: ${hexLine} [${asciiRepresentation}]`;
49
- }
50
- };
51
- expect.extend({
52
- // to-token-snapshot
53
- toTokenSnapshot(received, spanName) {
54
- const lexema = isLexema(received) ? received : null;
55
- const document = lexema ? Lexema.debugGetDocument(lexema) : null;
56
- const snapPath = new URL(`${spanName}.snap`, new URL("../__tokens_snapshots__/", import.meta.url));
57
- const jsonPath = new URL(`${spanName}.snap.json`, new URL("../__tokens_snapshots__/", import.meta.url));
58
- fs.mkdirSync(new URL("./", snapPath), { recursive: true });
59
- const inspectTokens = (value) => {
60
- const spaces = 2;
61
- const margin = typeof spaces === "number" ? " ".repeat(spaces) : spaces;
62
- function* lines(input, depth = 0) {
63
- const lineMargin = margin.repeat(depth);
64
- const nextLineMargin = margin.repeat(depth + 1);
65
- if (isLexema(input)) {
66
- if (document) {
67
- yield new TextDecoder().decode(document);
68
- yield "";
69
- yield "-".repeat(60);
70
- yield "";
71
- yield* toHex(document);
72
- yield "";
73
- yield "-".repeat(60);
74
- yield "";
75
- }
76
- for (const token of input.tokens) {
77
- yield* lines(token, depth);
78
- }
79
- }
80
- if (isToken(input)) {
81
- const token = input;
82
- const typeStr = KeySyntaxKind[token.type] ?? `Token<${token.type}>`;
83
- const span = token.span;
84
- const payload = document
85
- ? new TextDecoder().decode(document.subarray(span.index, span.index + span.length))
86
- : null;
87
- const errorStr = input.getErrors().length
88
- ? ` - SyntaxError: ${input.getErrors().join(` `)}`
89
- : ``;
90
- yield `${lineMargin}Token: [${toSpanStr(span)}] ${typeStr} ${payload ? JSON.stringify(payload) : ""}${errorStr}`;
91
- for (const part of token.parts) {
92
- yield* lines(part, depth + 1);
93
- }
94
- }
95
- if (isPart(input)) {
96
- const part = input;
97
- const typeStr = KeySyntaxKind[part.type] ?? `Part<${part.type}>`;
98
- const span = part.span;
99
- const payload = new TextDecoder().decode(new Uint8Array(part.buffer));
100
- const payloadHex = Array.from(new Uint8Array(part.buffer), (e) => e.toString(16).padStart(2, "0").toUpperCase()).join(" ");
101
- yield `${lineMargin}Part#${part.id}: [${toSpanStr(span)}] ${typeStr} [${payloadHex}] ${JSON.stringify(payload)}`;
102
- }
103
- if (isPartSet(input)) {
104
- const buff = new Uint8Array(input.parts.map((part) => part.buffer).flat());
105
- yield new TextDecoder().decode(buff);
106
- yield "";
107
- yield `-`.repeat(60);
108
- yield "";
109
- yield* toHex(buff);
110
- yield "";
111
- yield `-`.repeat(60);
112
- yield "";
113
- const partSet = input;
114
- for (const part of partSet.parts) {
115
- yield* lines(part, depth);
116
- }
117
- }
118
- if (isDirectiveArray(input)) {
119
- for (const directive of input) {
120
- yield* lines(directive, depth);
121
- }
122
- }
123
- if (isNode(input)) {
124
- const directiveNode = input;
125
- const name = directiveNode.name;
126
- yield `${lineMargin}Directive#${directiveNode.id}: ${name.text() ?? "<unnamed>"} [${toSpanStr(directiveNode.span)}]`;
127
- yield `${lineMargin}Name: [${toSpanStr(name.span)}] ${name.text()}`;
128
- if (directiveNode.args.length) {
129
- yield `${lineMargin}Args:`;
130
- for (const arg of directiveNode.args) {
131
- yield `${nextLineMargin}Arg: [${toSpanStr(arg.span)}] ${arg.text()}`;
132
- }
133
- }
134
- for (const child of directiveNode.children) {
135
- yield* lines(child, depth + 1);
136
- }
137
- }
138
- if (isDocumentNode(input)) {
139
- const payload = SyntaxEncode.raw.get(input);
140
- if (typeof payload === "string") {
141
- yield payload;
142
- yield "-".repeat(60);
143
- yield ``;
144
- yield* toHex(payload);
145
- yield ``;
146
- yield "-".repeat(60);
147
- yield ``;
148
- }
149
- yield `Document: [${toSpanStr(input.span)}]`;
150
- yield* lines(input.children, depth + 1);
151
- }
152
- }
153
- return Array.from(lines(value)).join("\n") + "\n";
154
- };
155
- t(() => fs.writeFileSync(snapPath, inspectTokens(received)));
156
- t(() => fs.writeFileSync(jsonPath, JSON.stringify(received, null, 2)));
157
- return {
158
- pass: true,
159
- };
160
- },
161
- });
162
- //# sourceMappingURL=to-token-snapshot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"to-token-snapshot.js","sourceRoot":"","sources":["../../../../src/v1/__utils__/to-token-snapshot.ts"],"names":[],"mappings":"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"}