@tabnas/parser 0.2.0 → 0.3.1

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.
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ /* Copyright (c) 2013-2026 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.json = void 0;
5
+ exports.registerJsonGrammar = registerJsonGrammar;
6
+ const defprop = Object.defineProperty;
7
+ // Attach a hidden marker property to a node — used when info.map /
8
+ // info.list mode is on so callers can introspect implicit/explicit
9
+ // container origins. JSON parsing ignores marker properties.
10
+ function mark(node, marker, data) {
11
+ if (node != null && typeof node === 'object') {
12
+ defprop(node, marker, { value: data, writable: true });
13
+ }
14
+ }
15
+ // JSON-only options. Restrictive enough to mirror JSON.parse.
16
+ const JSON_OPTIONS = {
17
+ text: { lex: false },
18
+ number: {
19
+ hex: false,
20
+ oct: false,
21
+ bin: false,
22
+ sep: null,
23
+ exclude: /^00+/,
24
+ },
25
+ string: {
26
+ chars: '"',
27
+ multiChars: '',
28
+ allowUnknown: false,
29
+ escape: { v: null },
30
+ },
31
+ comment: { lex: false },
32
+ map: { extend: false },
33
+ lex: { empty: false },
34
+ rule: { finish: false, include: 'json' },
35
+ result: { fail: [undefined, NaN] },
36
+ tokenSet: { KEY: ['#ST', null, null, null] },
37
+ };
38
+ // Install the pure JSON rule set (val / map / list / pair / elem) on
39
+ // the given Tabnas instance. Exposed so other grammar plugins can layer
40
+ // its extensions on top without re-declaring the JSON core.
41
+ function registerJsonGrammar(tn) {
42
+ const {
43
+ // Complex tokens
44
+ TX, // Text (unquoted character sequence)
45
+ ST, // String (quoted character sequence)
46
+ } = tn.token;
47
+ tn.grammar({
48
+ ref: {
49
+ '@finish': (_rule, ctx) => {
50
+ if (!ctx.cfg.rule.finish) {
51
+ ctx.t0.err = 'end_of_source';
52
+ return ctx.t0;
53
+ }
54
+ return undefined;
55
+ },
56
+ // Get key string value from first matching token of `Open` state.
57
+ '@pairkey': (r) => {
58
+ const key_token = r.o0;
59
+ const key = ST === key_token.tin || TX === key_token.tin
60
+ ? key_token.val
61
+ : key_token.src;
62
+ r.u.key = key;
63
+ },
64
+ '@val-bo': (rule) => (rule.node = undefined),
65
+ '@val-bc': (r, ctx) => {
66
+ // val can be undefined when there is no value at all (eg. empty
67
+ // string, thus no matched opening token).
68
+ r.node =
69
+ undefined === r.node
70
+ ? undefined === r.child.node
71
+ ? 0 === r.os
72
+ ? undefined
73
+ : (() => {
74
+ let val = r.o0.resolveVal(r, ctx);
75
+ if (ctx.cfg.info.text &&
76
+ typeof val === 'string' &&
77
+ (r.o0.tin === ctx.cfg.t.ST ||
78
+ r.o0.tin === ctx.cfg.t.TX)) {
79
+ const quote = r.o0.tin === ctx.cfg.t.ST && r.o0.src.length > 0
80
+ ? r.o0.src[0]
81
+ : '';
82
+ const sv = new String(val);
83
+ mark(sv, ctx.cfg.info.marker, { quote });
84
+ val = sv;
85
+ }
86
+ return val;
87
+ })()
88
+ : r.child.node
89
+ : r.node;
90
+ },
91
+ '@map-bo': (r, ctx) => {
92
+ r.node = Object.create(null);
93
+ if (ctx.cfg.info.map) {
94
+ mark(r.node, ctx.cfg.info.marker, { implicit: false, meta: {} });
95
+ }
96
+ },
97
+ '@list-bo': (r, ctx) => {
98
+ r.node = [];
99
+ if (ctx.cfg.info.list) {
100
+ mark(r.node, ctx.cfg.info.marker, { implicit: false, meta: {} });
101
+ }
102
+ },
103
+ '@pair-bc': (r, ctx) => {
104
+ if (r.u.pair) {
105
+ if (ctx.cfg.info.map && r.u.key === ctx.cfg.info.marker) {
106
+ return;
107
+ }
108
+ r.u.prev = r.node[r.u.key];
109
+ r.node[r.u.key] = r.child.node;
110
+ }
111
+ },
112
+ '@elem-bc': (r) => {
113
+ if (true !== r.u.done && undefined !== r.child.node) {
114
+ r.node.push(r.child.node);
115
+ }
116
+ },
117
+ },
118
+ rule: {
119
+ val: {
120
+ // Opening token alternates.
121
+ open: [
122
+ // A map: `{ ...`
123
+ { s: '#OB', p: 'map', b: 1, g: 'map,json' },
124
+ // A list: `[ ...`
125
+ { s: '#OS', p: 'list', b: 1, g: 'list,json' },
126
+ // A plain value: `x` `"x"` `1` `true` ....
127
+ { s: '#VAL', g: 'val,json' },
128
+ ],
129
+ // Closing token alternates.
130
+ close: [
131
+ // End of input.
132
+ { s: '#ZZ', g: 'end,json' },
133
+ // There's more JSON.
134
+ { b: 1, g: 'more,json' },
135
+ ],
136
+ },
137
+ map: {
138
+ open: [
139
+ // An empty map: {}.
140
+ { s: '#OB #CB', b: 1, n: { pk: 0 }, g: 'map,json' },
141
+ // Start matching map key-value pairs: a:1.
142
+ // Reset counter n.pk as new map (for extensions).
143
+ { s: '#OB', p: 'pair', n: { pk: 0 }, g: 'map,json,pair' },
144
+ ],
145
+ close: [
146
+ // End of map.
147
+ { s: '#CB', g: 'end,json' },
148
+ ],
149
+ },
150
+ list: {
151
+ open: [
152
+ // An empty list: [].
153
+ { s: '#OS #CS', b: 1, g: 'list,json' },
154
+ // Start matching list elements: 1,2.
155
+ { s: '#OS', p: 'elem', g: 'list,elem,json' },
156
+ ],
157
+ close: [
158
+ // End of list.
159
+ { s: '#CS', g: 'end,json' },
160
+ ],
161
+ },
162
+ // sets key:val on node
163
+ pair: {
164
+ open: [
165
+ // Match key-colon start of pair.
166
+ {
167
+ s: '#KEY #CL',
168
+ p: 'val',
169
+ u: { pair: true },
170
+ a: '@pairkey',
171
+ g: 'map,pair,key,json',
172
+ },
173
+ ],
174
+ close: [
175
+ // Comma means a new pair at same pair-key level.
176
+ { s: '#CA', r: 'pair', g: 'map,pair,json' },
177
+ // End of map.
178
+ { s: '#CB', b: 1, g: 'map,pair,json' },
179
+ ],
180
+ },
181
+ // push onto node
182
+ elem: {
183
+ open: [
184
+ // List elements are values.
185
+ { p: 'val', g: 'list,elem,val,json' },
186
+ ],
187
+ close: [
188
+ // Next element.
189
+ { s: '#CA', r: 'elem', g: 'list,elem,json' },
190
+ // End of list.
191
+ { s: '#CS', b: 1, g: 'list,elem,json' },
192
+ ],
193
+ },
194
+ },
195
+ });
196
+ }
197
+ const json = function json(tn, _options) {
198
+ tn.options(JSON_OPTIONS);
199
+ registerJsonGrammar(tn);
200
+ };
201
+ exports.json = json;
202
+ //# sourceMappingURL=json-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-plugin.js","sourceRoot":"","sources":["../test/json-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"root":["../test/json-plugin.ts"],"version":"6.0.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tabnas/parser",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "main": "dist/tabnas.js",
5
5
  "type": "commonjs",
6
6
  "types": "dist/tabnas.d.ts",
@@ -37,8 +37,9 @@
37
37
  },
38
38
  "license": "MIT",
39
39
  "files": [
40
+ "LICENSE",
40
41
  "dist",
41
- "LICENSE"
42
+ "dist-test"
42
43
  ],
43
44
  "exports": {
44
45
  ".": "./dist/tabnas.js",
@@ -48,8 +49,8 @@
48
49
  "./builtins": "./dist/builtins.js"
49
50
  },
50
51
  "devDependencies": {
51
- "@tabnas/debug": "file:../../debug/ts",
52
- "@tabnas/railroad": "file:../../railroad/ts",
52
+ "@tabnas/debug": "*",
53
+ "@tabnas/railroad": "*",
53
54
  "@types/node": "25.6.0",
54
55
  "typescript": "6.0.3"
55
56
  },