@bablr/agast-vm-helpers 0.1.0 → 0.1.2

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 (3) hide show
  1. package/lib/builders.js +118 -115
  2. package/lib/index.js +13 -13
  3. package/package.json +2 -2
package/lib/builders.js CHANGED
@@ -30,8 +30,8 @@ export const buildGap = () => {
30
30
  return t.node(l.CSTML, 'Gap', [t.ref`value`], { value: t.s_node(l.CSTML, 'Punctuator', '<//>') });
31
31
  };
32
32
 
33
- const buildFlags = (flags) => {
34
- const { token = null, escape = null, trivia = null, expression = null } = flags;
33
+ export const buildFlags = (flags) => {
34
+ const { intrinsic = null, token = null, escape = null, trivia = null, expression = null } = flags;
35
35
 
36
36
  if ((trivia && escape) || (expression && (trivia || escape))) {
37
37
  throw new Error('invalid flags');
@@ -39,16 +39,18 @@ const buildFlags = (flags) => {
39
39
 
40
40
  return {
41
41
  children: [
42
- ...when(trivia, [t.ref`triviaFlag`]),
43
- ...when(token, [t.ref`tokenFlag`]),
44
- ...when(escape, [t.ref`escapeFlag`]),
45
- ...when(expression, [t.ref`expressionFlag`]),
42
+ ...when(trivia, [t.ref`triviaToken`]),
43
+ ...when(intrinsic, [t.ref`intrinsicToken`]),
44
+ ...when(token, [t.ref`tokenToken`]),
45
+ ...when(escape, [t.ref`escapeToken`]),
46
+ ...when(expression, [t.ref`expressionToken`]),
46
47
  ],
47
48
  properties: {
48
- triviaFlag: trivia && t.s_node(l.CSTML, 'Punctuator', '#'),
49
- tokenFlag: token && t.s_node(l.CSTML, 'Punctuator', '*'),
50
- escapeFlag: escape && t.s_node(l.CSTML, 'Punctuator', '@'),
51
- expressionFlag: expression && t.s_node(l.CSTML, 'Punctuator', '+'),
49
+ triviaToken: trivia && t.s_node(l.CSTML, 'Punctuator', '#'),
50
+ intrinsicToken: intrinsic && t.s_node(l.CSTML, 'Punctuator', '~'),
51
+ tokenToken: token && t.s_node(l.CSTML, 'Punctuator', '*'),
52
+ escapeToken: escape && t.s_node(l.CSTML, 'Punctuator', '@'),
53
+ expressionToken: expression && t.s_node(l.CSTML, 'Punctuator', '+'),
52
54
  },
53
55
  };
54
56
  };
@@ -64,134 +66,102 @@ export const buildFullyQualifiedSpamMatcher = (
64
66
  intrinsicValue,
65
67
  attributes = {},
66
68
  ) => {
67
- const attributes_ = Object.entries(attributes).map(({ 0: key, 1: value }) =>
68
- buildAttribute(key, value),
69
- );
69
+ const attributes_ = buildAttributes(attributes);
70
70
 
71
71
  const lArr = language ? [...language] : [];
72
72
 
73
73
  let language_ = lArr.length === 0 ? null : lArr;
74
74
 
75
- const flags_ = buildFlags(flags);
76
75
  return t.node(
77
76
  l.Spamex,
78
77
  'NodeMatcher',
79
78
  [
80
- t.ref`open`,
81
- ...flags_.children,
79
+ t.ref`openToken`,
80
+ t.ref`flags`,
82
81
  ...when(language_, [t.ref`language`, t.ref`languageSeparator`]),
83
82
  t.ref`type`,
84
83
  ...when(intrinsicValue, [t.embedded(buildSpace()), t.ref`intrinsicValue`]),
85
84
  ...when(attributes_.length, [t.embedded(buildSpace())]),
86
85
  ...interpolateArrayChildren(attributes, t.ref`attributes[]`, t.embedded(buildSpace())),
87
- t.ref`close`,
86
+ t.ref`closeToken`,
88
87
  ],
89
88
  {
90
- open: t.s_node(l.CSTML, 'Punctuator', '<'),
91
- ...flags_.properties,
89
+ openToken: t.s_node(l.CSTML, 'Punctuator', '<'),
90
+ flags: buildFlags(flags),
92
91
  language: buildLanguage(language_),
93
92
  languageSeparator: language_ && type && t.s_node(l.CSTML, 'Punctuator', ':'),
94
93
  type: buildIdentifier(type),
95
94
  intrinsicValue: intrinsicValue && buildString(intrinsicValue),
96
95
  attributes: attributes_,
97
- close: t.s_node(l.CSTML, 'Punctuator', '>'),
96
+ closeToken: t.s_node(l.CSTML, 'Punctuator', '>'),
98
97
  },
99
98
  );
100
99
  };
101
100
 
102
101
  export const buildNodeOpenTag = (flags, language, type, intrinsicValue = null, attributes = {}) => {
103
- const attributes_ = Object.entries(attributes).map(({ 0: key, 1: value }) =>
104
- buildAttribute(key, value),
105
- );
102
+ const attributes_ = buildAttributes(attributes);
106
103
 
107
104
  let language_ = !language || language.length === 0 ? null : language;
108
105
 
109
- const flags_ = buildFlags(flags);
110
-
111
106
  return t.node(
112
107
  l.CSTML,
113
108
  'OpenNodeTag',
114
109
  [
115
- t.ref`open`,
116
- ...flags_.children,
110
+ t.ref`openToken`,
111
+ t.ref`flags`,
117
112
  ...when(language_, [t.ref`language`, t.ref`languageSeparator`]),
118
113
  t.ref`type`,
119
114
  ...when(intrinsicValue, [t.embedded(buildSpace()), t.ref`intrinsicValue`]),
120
115
  ...when(attributes_.length, [t.embedded(buildSpace())]),
121
116
  ...interpolateArrayChildren(attributes_, t.ref`attributes[]`, t.embedded(buildSpace())),
122
117
  when(intrinsicValue, [t.embedded(buildSpace), t.ref`selfClosingToken`]),
123
- t.ref`close`,
118
+ t.ref`closeToken`,
124
119
  ],
125
120
  {
126
- open: t.s_node(l.CSTML, 'Punctuator', '<'),
127
- ...flags_.properties,
121
+ openToken: t.s_node(l.CSTML, 'Punctuator', '<'),
122
+ flags: buildFlags(flags),
128
123
  language: buildLanguage(language_),
129
124
  languageSeparator: language_ && type && t.s_node(l.CSTML, 'Punctuator', ':'),
130
125
  type: buildIdentifier(type),
131
126
  intrinsicValue: intrinsicValue && buildString(intrinsicValue),
132
127
  attributes: attributes_,
133
128
  selfClosingToken: intrinsicValue && t.s_node(l.CSTML, 'Punctuator', '/'),
134
- close: t.s_node(l.CSTML, 'Punctuator', '>'),
129
+ closeToken: t.s_node(l.CSTML, 'Punctuator', '>'),
135
130
  },
136
131
  );
137
132
  };
138
133
 
139
134
  export const buildDoctypeTag = (attributes) => {
140
- const attributes_ = Object.entries(attributes).map(({ 0: key, 1: value }) =>
141
- buildAttribute(key, value),
142
- );
135
+ const attributes_ = buildAttributes(attributes);
143
136
 
144
137
  return t.node(
145
138
  l.CSTML,
146
139
  'DoctypeTag',
147
140
  [
148
- t.ref`open`,
141
+ t.ref`openToken`,
149
142
  t.ref`version`,
150
143
  t.ref`versionSeparator`,
151
144
  t.ref`doctype`,
152
145
  ...when(attributes_.length, [t.embedded(buildSpace())]),
153
146
  ...interpolateArrayChildren(attributes_, t.ref`attributes[]`, t.embedded(buildSpace())),
154
- t.ref`close`,
147
+ t.ref`closeToken`,
155
148
  ],
156
149
  {
157
- open: t.s_node(l.CSTML, 'Punctuator', '<!'),
150
+ openToken: t.s_node(l.CSTML, 'Punctuator', '<!'),
158
151
  version: t.s_node(l.CSTML, 'PositiveInteger', '0'),
159
152
  versionSeparator: t.s_node(l.CSTML, 'Punctuator', ':'),
160
153
  doctype: t.s_node(l.CSTML, 'Keyword', 'cstml'),
161
154
  attributes: attributes_,
162
- close: t.s_node(l.CSTML, 'Punctuator', '>'),
163
- },
164
- );
165
- };
166
-
167
- export const buildFragmentFlags = (flags = {}) => {
168
- const { escape = null, trivia = null } = flags;
169
- if (!(escape || trivia)) {
170
- return null;
171
- }
172
-
173
- return t.node(
174
- l.CSTML,
175
- 'NodeFlags',
176
- [...when(trivia, [t.ref`trivia`]), ...when(escape, [t.ref`escape`])],
177
- {
178
- trivia: trivia && t.s_node(l.CSTML, 'Punctuator', '#'),
179
- escape: escape && t.s_node(l.CSTML, 'Punctuator', '@'),
155
+ closeToken: t.s_node(l.CSTML, 'Punctuator', '>'),
180
156
  },
181
157
  );
182
158
  };
183
159
 
184
- export const buildFragmentOpenTag = (flags) => {
185
- return t.node(
186
- l.CSTML,
187
- 'OpenFragmentTag',
188
- [t.ref`open`, ...when(flags, [t.ref`flags`]), t.ref`close`],
189
- {
190
- open: t.s_node(l.CSTML, 'Punctuator', '<'),
191
- flags: buildFragmentFlags(flags),
192
- close: t.s_node(l.CSTML, 'Punctuator', '>'),
193
- },
194
- );
160
+ export const buildFragmentOpenTag = () => {
161
+ return t.node(l.CSTML, 'OpenFragmentTag', [t.ref`openToken`, t.ref`closeToken`], {
162
+ openToken: t.s_node(l.CSTML, 'Punctuator', '<'),
163
+ closeToken: t.s_node(l.CSTML, 'Punctuator', '>'),
164
+ });
195
165
  };
196
166
 
197
167
  export const buildIdentifierPath = (path) => {
@@ -223,26 +193,26 @@ export const buildNodeCloseTag = (type, language) => {
223
193
  l.CSTML,
224
194
  'CloseNodeTag',
225
195
  [
226
- t.ref`open`,
196
+ t.ref`openToken`,
227
197
  ...when(language, [t.ref`language`]),
228
198
  ...when(type && language, [t.ref`languageSeparator`]),
229
199
  ...when(type, [t.ref`type`]),
230
- t.ref`close`,
200
+ t.ref`closeToken`,
231
201
  ],
232
202
  {
233
- open: t.s_node(l.CSTML, 'Punctuator', '</'),
203
+ openToken: t.s_node(l.CSTML, 'Punctuator', '</'),
234
204
  language: buildLanguage(language),
235
205
  languageSeparator: language && type ? t.s_node(l.CSTML, 'Punctuator', ':') : null,
236
206
  type: type && buildIdentifier(type),
237
- close: t.s_node(l.CSTML, 'Punctuator', '>'),
207
+ closeToken: t.s_node(l.CSTML, 'Punctuator', '>'),
238
208
  },
239
209
  );
240
210
  };
241
211
 
242
212
  export const buildFragmentCloseTag = () => {
243
- return t.node(l.CSTML, 'CloseFragmentTag', [t.ref`open`, t.ref`close`], {
244
- open: t.s_node(l.CSTML, 'Punctuator', '</'),
245
- close: t.s_node(l.CSTML, 'Punctuator', '>'),
213
+ return t.node(l.CSTML, 'CloseFragmentTag', [t.ref`openToken`, t.ref`closeToken`], {
214
+ openToken: t.s_node(l.CSTML, 'Punctuator', '</'),
215
+ closeToken: t.s_node(l.CSTML, 'Punctuator', '>'),
246
216
  });
247
217
  };
248
218
 
@@ -261,7 +231,11 @@ export const buildSpace = () => {
261
231
  };
262
232
 
263
233
  export const buildIdentifier = (name) => {
264
- return t.node(l.Instruction, 'Identifier', [t.lit(name)]);
234
+ return t.s_node(l.Instruction, 'Identifier', name);
235
+ };
236
+
237
+ export const buildKeyword = (name) => {
238
+ return t.s_node(l.Instruction, 'Identifier', name);
265
239
  };
266
240
 
267
241
  export const buildCall = (verb, ...args) => {
@@ -295,8 +269,8 @@ export const buildDigit = (value) => {
295
269
  return t.s_node(l.CSTML, 'Digit', value);
296
270
  };
297
271
 
298
- export const buildInteger = (value) => {
299
- const digits = value.toString(10).split('');
272
+ export const buildInteger = (value, base = 10) => {
273
+ const digits = value.toString(base).split('');
300
274
 
301
275
  return t.node(
302
276
  l.CSTML,
@@ -330,21 +304,23 @@ export const buildNumber = (value) => {
330
304
  }
331
305
  };
332
306
 
307
+ const buildLiteralTerminal = (lit) => freeze({ type: 'Literal', value: lit });
308
+
333
309
  export const buildString = (value) => {
334
310
  const pieces = isArray(value) ? value : [value];
335
311
  const terminals = [];
336
312
  let lit = '';
337
313
 
338
314
  if (pieces.length === 1 && pieces[0] === "'") {
339
- return t.node(l.CSTML, 'String', [t.ref`open`, t.ref`content`, t.ref`close`], {
340
- open: t.s_node(l.CSTML, 'Punctuator', '"'),
315
+ return t.node(l.CSTML, 'String', [t.ref`openToken`, t.ref`content`, t.ref`closeToken`], {
316
+ openToken: t.s_node(l.CSTML, 'Punctuator', '"'),
341
317
  content: interpolateString(
342
318
  freeze({
343
319
  type: 'Literal',
344
320
  value,
345
321
  }),
346
322
  ),
347
- close: t.s_node(l.CSTML, 'Punctuator', '"'),
323
+ closeToken: t.s_node(l.CSTML, 'Punctuator', '"'),
348
324
  });
349
325
  }
350
326
 
@@ -359,22 +335,45 @@ export const buildString = (value) => {
359
335
  chr === '\n' ||
360
336
  chr === '\r' ||
361
337
  chr === '\t' ||
362
- chr === '\0'
338
+ chr === '\0' ||
339
+ chr.charCodeAt(0) < 32
363
340
  ) {
364
341
  if (lit) {
365
- terminals.push(freeze({ type: 'Literal', value: lit }));
342
+ terminals.push(buildLiteralTerminal(lit));
366
343
  lit = '';
367
344
  }
368
345
 
346
+ let value;
347
+
348
+ if (escapables[chr]) {
349
+ value = t.node(l.CSTML, 'EscapeCode', [t.ref`sigilToken`], {
350
+ sigilToken: buildKeyword(escapables[chr]),
351
+ digits: null,
352
+ });
353
+ } else if (chr.charCodeAt(0) < 32) {
354
+ const hexDigits = chr.charCodeAt(0).toString(16).padStart(4, '0');
355
+ value = t.node(
356
+ l.CSTML,
357
+ 'EscapeCode',
358
+ [t.ref`sigilToken`, ...[...hexDigits].map((d) => t.ref`digits[]`)],
359
+ {
360
+ sigilToken: buildKeyword('u'),
361
+ digits: [...hexDigits].map((digit) => buildDigit(digit)),
362
+ },
363
+ );
364
+ } else {
365
+ value = buildKeyword(chr);
366
+ }
367
+
369
368
  terminals.push(
370
369
  t.buildEmbedded(
371
370
  t.e_node(
372
371
  l.CSTML,
373
- 'Escape',
374
- [t.ref`escape`, t.ref`escapee`],
372
+ 'EscapeSequence',
373
+ [t.ref`escape`, t.ref`value`],
375
374
  {
376
375
  escape: t.s_node(l.CSTML, 'Punctuator', '\\'),
377
- escapee: t.s_node(l.CSTML, 'Literal', escapables[chr] || chr),
376
+ value,
378
377
  },
379
378
  { cooked: chr },
380
379
  ),
@@ -385,11 +384,11 @@ export const buildString = (value) => {
385
384
  }
386
385
  }
387
386
  } else {
388
- terminals.push(freeze({ type: 'Literal', value: lit }));
387
+ terminals.push(buildLiteralTerminal(lit));
389
388
  lit = '';
390
389
 
391
390
  if (piece == null) {
392
- throw new Error('not impelemented');
391
+ throw new Error('not implemented');
393
392
  } else if (isString(piece.type)) {
394
393
  terminals.push(piece);
395
394
  } else {
@@ -398,25 +397,25 @@ export const buildString = (value) => {
398
397
  }
399
398
  }
400
399
 
401
- if (lit) terminals.push(freeze({ type: 'Literal', value: lit }));
400
+ if (lit) terminals.push(buildLiteralTerminal(lit));
402
401
  lit = '';
403
402
 
404
- return t.node(l.CSTML, 'String', [t.ref`open`, t.ref`content`, t.ref`close`], {
405
- open: t.s_node(l.CSTML, 'Punctuator', "'"),
403
+ return t.node(l.CSTML, 'String', [t.ref`openToken`, t.ref`content`, t.ref`closeToken`], {
404
+ openToken: t.s_node(l.CSTML, 'Punctuator', "'"),
406
405
  content: interpolateString(terminals),
407
- close: t.s_node(l.CSTML, 'Punctuator', "'"),
406
+ closeToken: t.s_node(l.CSTML, 'Punctuator', "'"),
408
407
  });
409
408
  };
410
409
 
411
410
  export const buildBoolean = (value) => {
412
- return t.node(l.Instruction, 'Boolean', [t.ref`value`], {
413
- value: t.s_node(l.Instruction, 'Keyword', value ? 'true' : 'false'),
411
+ return t.node(l.Instruction, 'Boolean', [t.ref`sigilToken`], {
412
+ sigilToken: t.s_node(l.Instruction, 'Keyword', value ? 'true' : 'false'),
414
413
  });
415
414
  };
416
415
 
417
416
  export const buildNull = () => {
418
- return t.node(l.Instruction, 'Null', [t.ref`value`], {
419
- value: t.s_node(l.Instruction, 'Keyword', 'null'),
417
+ return t.node(l.Instruction, 'Null', [t.ref`sigilToken`], {
418
+ sigilToken: t.s_node(l.Instruction, 'Keyword', 'null'),
420
419
  });
421
420
  };
422
421
 
@@ -425,7 +424,7 @@ export const buildArray = (elements) => {
425
424
  l.Instruction,
426
425
  'Array',
427
426
  [
428
- t.ref`open`,
427
+ t.ref`openToken`,
429
428
  ...interpolateArrayChildren(
430
429
  elements,
431
430
  t.ref`elements[]`,
@@ -433,12 +432,12 @@ export const buildArray = (elements) => {
433
432
  t.t_node(l.Comment, null, [t.embedded(t.t_node('Space', 'Space', [t.lit(' ')]))]),
434
433
  ),
435
434
  ),
436
- t.ref`close`,
435
+ t.ref`closeToken`,
437
436
  ],
438
437
  {
439
- open: t.s_node(l.Instruction, 'Punctuator', '['),
438
+ openToken: t.s_node(l.Instruction, 'Punctuator', '['),
440
439
  elements: [...interpolateArray(elements)],
441
- close: t.s_node(l.Instruction, 'Punctuator', ']'),
440
+ closeToken: t.s_node(l.Instruction, 'Punctuator', ']'),
442
441
  },
443
442
  );
444
443
  };
@@ -448,7 +447,7 @@ export const buildTuple = (values) => {
448
447
  l.Instruction,
449
448
  'Tuple',
450
449
  [
451
- t.ref`open`,
450
+ t.ref`openToken`,
452
451
  ...interpolateArrayChildren(
453
452
  values,
454
453
  t.ref`values[]`,
@@ -456,12 +455,12 @@ export const buildTuple = (values) => {
456
455
  t.t_node(l.Comment, null, [t.embedded(t.t_node('Space', 'Space', [t.lit(' ')]))]),
457
456
  ),
458
457
  ),
459
- t.ref`close`,
458
+ t.ref`closeToken`,
460
459
  ],
461
460
  {
462
- open: t.s_node(l.Instruction, 'Punctuator', '('),
461
+ openToken: t.s_node(l.Instruction, 'Punctuator', '('),
463
462
  values: [...interpolateArray(values)],
464
- close: t.s_node(l.Instruction, 'Punctuator', ')'),
463
+ closeToken: t.s_node(l.Instruction, 'Punctuator', ')'),
465
464
  },
466
465
  );
467
466
  };
@@ -471,7 +470,7 @@ export const buildObject = (properties) => {
471
470
  l.Instruction,
472
471
  'Object',
473
472
  [
474
- t.ref`open`,
473
+ t.ref`openToken`,
475
474
  ...interpolateArrayChildren(
476
475
  Object.entries(properties).map(([key, value]) => buildProperty(key, value)),
477
476
  t.ref`properties[]`,
@@ -479,16 +478,16 @@ export const buildObject = (properties) => {
479
478
  t.t_node(l.Comment, null, [t.embedded(t.t_node('Space', 'Space', [t.lit(' ')]))]),
480
479
  ),
481
480
  ),
482
- t.ref`close`,
481
+ t.ref`closeToken`,
483
482
  ],
484
483
  {
485
- open: t.s_node(l.Instruction, 'Punctuator', '{'),
484
+ openToken: t.s_node(l.Instruction, 'Punctuator', '{'),
486
485
  properties: [
487
486
  ...interpolateArray(
488
487
  Object.entries(properties).map(([key, value]) => buildProperty(key, value)),
489
488
  ),
490
489
  ],
491
- close: t.s_node(l.Instruction, 'Punctuator', '}'),
490
+ closeToken: t.s_node(l.Instruction, 'Punctuator', '}'),
492
491
  },
493
492
  {},
494
493
  );
@@ -503,8 +502,8 @@ export const buildMappingAttribute = (key, value) => {
503
502
  };
504
503
 
505
504
  export const buildBooleanAttribute = (key, value) => {
506
- return t.node(l.CSTML, 'BooleanAttribute', [...when(!value, [t.ref`negateSigil`]), t.ref`key`], {
507
- negateSigil: !value ? t.s_node(l.CSTML, 'Puncutator', '!') : null,
505
+ return t.node(l.CSTML, 'BooleanAttribute', [...when(!value, [t.ref`negateToken`]), t.ref`key`], {
506
+ negateToken: !value ? t.s_node(l.CSTML, 'Puncutator', '!') : null,
508
507
  key: buildIdentifier(key),
509
508
  });
510
509
  };
@@ -521,6 +520,8 @@ export const buildExpression = (expr) => {
521
520
  return buildBoolean(expr);
522
521
  case 'string':
523
522
  return buildString(expr);
523
+ case 'number':
524
+ return buildInteger(expr);
524
525
  case 'object': {
525
526
  switch (getPrototypeOf(expr)) {
526
527
  case Array.prototype:
@@ -539,10 +540,12 @@ export const buildExpression = (expr) => {
539
540
  }
540
541
  };
541
542
 
543
+ export const buildAttributes = (attributes = {}) => {
544
+ return Object.entries(attributes).map(({ 0: key, 1: value }) => buildAttribute(key, value));
545
+ };
546
+
542
547
  export const buildNodeMatcher = (flags, language, type, attributes = {}) => {
543
- const attributes_ = Object.entries(attributes).map(({ 0: key, 1: value }) =>
544
- buildAttribute(key, value),
545
- );
548
+ const attributes_ = buildAttributes(attributes);
546
549
 
547
550
  let language_ = !language || language.length === 0 ? null : language;
548
551
 
@@ -552,22 +555,22 @@ export const buildNodeMatcher = (flags, language, type, attributes = {}) => {
552
555
  l.Spamex,
553
556
  'NodeMatcher',
554
557
  [
555
- t.ref`open`,
558
+ t.ref`openToken`,
556
559
  ...when(flags_, [t.ref`flags`]),
557
560
  ...when(language_, [t.ref`language`, t.ref`languageSeparator`]),
558
561
  t.ref`type`,
559
562
  ...when(attributes_.length, [t.embedded(buildSpace())]),
560
563
  ...interpolateArrayChildren(attributes_, t.ref`attributes[]`, t.embedded(buildSpace())),
561
- t.ref`close`,
564
+ t.ref`closeToken`,
562
565
  ],
563
566
  {
564
- open: t.s_node(l.CSTML, 'Punctuator', '<'),
567
+ openToken: t.s_node(l.CSTML, 'Punctuator', '<'),
565
568
  language: buildLanguage(language_),
566
569
  languageSeparator: language_ && type && t.s_node(l.CSTML, 'Punctuator', ':'),
567
570
  flags: flags_,
568
571
  type: buildIdentifier(type),
569
572
  attributes: attributes_,
570
- close: t.s_node(l.CSTML, 'Punctuator', '>'),
573
+ closeToken: t.s_node(l.CSTML, 'Punctuator', '>'),
571
574
  },
572
575
  );
573
576
  };
package/lib/index.js CHANGED
@@ -27,15 +27,15 @@ export const shouldBranch = (effects) => {
27
27
  return effects ? effects.success === 'none' || effects.failure === 'none' : false;
28
28
  };
29
29
 
30
- const reifyFlags = (node) => {
31
- let { triviaFlag, escapeFlag, tokenFlag, expressionFlag, intrinsicValue } = node.properties || {};
30
+ const reifyFlags = (flags) => {
31
+ let { triviaToken, escapeToken, tokenToken, expressionToken, intrinsicToken } = flags.properties;
32
32
 
33
33
  return {
34
- token: !!tokenFlag,
35
- escape: !!escapeFlag,
36
- trivia: !!triviaFlag,
37
- intrinsic: !!intrinsicValue,
38
- expression: !!expressionFlag,
34
+ token: !!tokenToken,
35
+ escape: !!escapeToken,
36
+ trivia: !!triviaToken,
37
+ intrinsic: !!intrinsicToken,
38
+ expression: !!expressionToken,
39
39
  };
40
40
  };
41
41
 
@@ -95,9 +95,9 @@ export const reifyExpression = (node) => {
95
95
  }
96
96
 
97
97
  case 'OpenNodeTag': {
98
- let { language, type, attributes, intrinsicValue } = node.properties;
98
+ let { flags, language, type, attributes, intrinsicValue } = node.properties;
99
99
 
100
- let flags = reifyFlags(node);
100
+ flags = reifyFlags(flags);
101
101
  language = reifyLanguage(language);
102
102
  type = reifyExpression(type);
103
103
  attributes = reifyAttributes(attributes);
@@ -150,9 +150,9 @@ export const reifyExpression = (node) => {
150
150
 
151
151
  switch (node.type) {
152
152
  case 'NodeMatcher':
153
- let { language, type, attributes, intrinsicValue } = node.properties;
153
+ let { flags, language, type, attributes, intrinsicValue } = node.properties;
154
154
 
155
- let flags = reifyFlags(node);
155
+ flags = reifyFlags(flags);
156
156
  language = reifyExpression(language);
157
157
  type = reifyExpression(type);
158
158
  attributes = reifyAttributes(attributes);
@@ -194,7 +194,7 @@ export const reifyExpression = (node) => {
194
194
 
195
195
  case 'Boolean': {
196
196
  // prettier-ignore
197
- switch (getCooked(node.properties.value)) {
197
+ switch (getCooked(node.properties.sigilToken)) {
198
198
  case 'true': return true;
199
199
  case 'false': return false;
200
200
  default: throw new Error();
@@ -249,7 +249,7 @@ export const reifyAttributes = (attributes) => {
249
249
  if (attr.type === 'MappingAttribute') {
250
250
  return [reifyExpression(attr.properties.key), reifyExpression(attr.properties.value)];
251
251
  } else if (attr.type === 'BooleanAttribute') {
252
- return [reifyExpression(attr.properties.key), !attr.properties.negateSigil];
252
+ return [reifyExpression(attr.properties.key), !attr.properties.negateToken];
253
253
  } else {
254
254
  throw new Error();
255
255
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bablr/agast-vm-helpers",
3
3
  "description": "Helper functions for working with the BABLR VM",
4
- "version": "0.1.0",
4
+ "version": "0.1.2",
5
5
  "author": "Conrad Buck<conartist6@gmail.com>",
6
6
  "type": "module",
7
7
  "files": [
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "sideEffects": false,
17
17
  "dependencies": {
18
- "@bablr/agast-helpers": "0.1.0"
18
+ "@bablr/agast-helpers": "0.1.5"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@bablr/eslint-config-base": "github:bablr-lang/eslint-config-base#49f5952efed27f94ee9b94340eb1563c440bf64e",