@jondotsoy/don 0.0.5 → 0.0.6
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 +0 -104
- package/lib/esm/index.d.ts +1 -0
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/index.js.map +1 -1
- package/package.json +1 -1
- package/lib/esm/v1/__utils__/key-syntax-kind.d.ts +0 -2
- package/lib/esm/v1/__utils__/key-syntax-kind.d.ts.map +0 -1
- package/lib/esm/v1/__utils__/key-syntax-kind.js +0 -23
- package/lib/esm/v1/__utils__/key-syntax-kind.js.map +0 -1
- package/lib/esm/v1/__utils__/normalize.d.ts +0 -3
- package/lib/esm/v1/__utils__/normalize.d.ts.map +0 -1
- package/lib/esm/v1/__utils__/normalize.js +0 -10
- package/lib/esm/v1/__utils__/normalize.js.map +0 -1
- package/lib/esm/v1/__utils__/t.d.ts +0 -15
- package/lib/esm/v1/__utils__/t.d.ts.map +0 -1
- package/lib/esm/v1/__utils__/t.js +0 -32
- package/lib/esm/v1/__utils__/t.js.map +0 -1
- package/lib/esm/v1/__utils__/to-token-snapshot.d.ts +0 -7
- package/lib/esm/v1/__utils__/to-token-snapshot.d.ts.map +0 -1
- package/lib/esm/v1/__utils__/to-token-snapshot.js +0 -162
- package/lib/esm/v1/__utils__/to-token-snapshot.js.map +0 -1
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/index.d.ts
CHANGED
package/lib/esm/index.d.ts.map
CHANGED
|
@@ -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
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;
|
|
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.
|
|
3
|
+
"version": "0.0.6",
|
|
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 +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 +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 +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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"}
|