@bablr/agast-vm-helpers 0.1.2 → 0.1.4

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
@@ -1,3 +1,12 @@
1
1
  # @bablr/agast-vm-helpers
2
2
 
3
- Helper functions for working with the agAST VM
3
+ Helper functions for working with the agAST VM.
4
+
5
+
6
+ ## Usage
7
+
8
+ ```js
9
+ import { buildExpression, reifyExression } from 'agast-vm-helpers';
10
+
11
+ reifyExpression(buildExpression());
12
+ ```
package/lib/builders.js CHANGED
@@ -20,17 +20,31 @@ function* repeat(times, ...values) {
20
20
  }
21
21
 
22
22
  export const buildReference = (name, isArray) => {
23
- return t.node(l.CSTML, 'Reference', [t.ref`name`, ...when(isArray, [t.ref`arrayOperator`])], {
24
- name: buildIdentifier(name),
25
- arrayOperator: isArray ? t.s_node(l.CSTML, 'Punctuator', '[]') : null,
26
- });
23
+ return t.node(
24
+ l.CSTML,
25
+ 'Reference',
26
+ [t.ref`name`, ...when(isArray, [t.ref`arrayOperatorToken`]), t.ref`sigilToken`],
27
+ {
28
+ name: buildIdentifier(name),
29
+ arrayOperatorToken: isArray ? t.s_node(l.CSTML, 'Punctuator', '[]') : null,
30
+ sigilToken: t.s_node(l.CSTML, 'Punctuator', ':'),
31
+ },
32
+ );
27
33
  };
28
34
 
29
35
  export const buildGap = () => {
30
- return t.node(l.CSTML, 'Gap', [t.ref`value`], { value: t.s_node(l.CSTML, 'Punctuator', '<//>') });
36
+ return t.node(l.CSTML, 'Gap', [t.ref`sigilToken`], {
37
+ sigilToken: t.s_node(l.CSTML, 'Punctuator', '<//>'),
38
+ });
31
39
  };
32
40
 
33
- export const buildFlags = (flags) => {
41
+ export const buildShift = () => {
42
+ return t.node(l.CSTML, 'Shift', [t.ref`sigilToken`], {
43
+ sigilToken: t.s_node(l.CSTML, 'Punctuator', '^^^'),
44
+ });
45
+ };
46
+
47
+ export const buildFlags = (flags = {}) => {
34
48
  const { intrinsic = null, token = null, escape = null, trivia = null, expression = null } = flags;
35
49
 
36
50
  if ((trivia && escape) || (expression && (trivia || escape))) {
@@ -55,7 +69,7 @@ export const buildFlags = (flags) => {
55
69
  };
56
70
  };
57
71
 
58
- export const buildSpamMatcher = (type, value, attributes = {}) => {
72
+ export const buildSpamMatcher = (type = null, value = null, attributes = {}) => {
59
73
  return buildFullyQualifiedSpamMatcher({}, null, type, value, attributes);
60
74
  };
61
75
 
@@ -79,7 +93,7 @@ export const buildFullyQualifiedSpamMatcher = (
79
93
  t.ref`openToken`,
80
94
  t.ref`flags`,
81
95
  ...when(language_, [t.ref`language`, t.ref`languageSeparator`]),
82
- t.ref`type`,
96
+ ...when(type, [t.ref`type`]),
83
97
  ...when(intrinsicValue, [t.embedded(buildSpace()), t.ref`intrinsicValue`]),
84
98
  ...when(attributes_.length, [t.embedded(buildSpace())]),
85
99
  ...interpolateArrayChildren(attributes, t.ref`attributes[]`, t.embedded(buildSpace())),
@@ -90,7 +104,7 @@ export const buildFullyQualifiedSpamMatcher = (
90
104
  flags: buildFlags(flags),
91
105
  language: buildLanguage(language_),
92
106
  languageSeparator: language_ && type && t.s_node(l.CSTML, 'Punctuator', ':'),
93
- type: buildIdentifier(type),
107
+ type: type && buildIdentifier(type),
94
108
  intrinsicValue: intrinsicValue && buildString(intrinsicValue),
95
109
  attributes: attributes_,
96
110
  closeToken: t.s_node(l.CSTML, 'Punctuator', '>'),
@@ -98,7 +112,13 @@ export const buildFullyQualifiedSpamMatcher = (
98
112
  );
99
113
  };
100
114
 
101
- export const buildNodeOpenTag = (flags, language, type, intrinsicValue = null, attributes = {}) => {
115
+ export const buildNodeOpenTag = (
116
+ flags,
117
+ language,
118
+ type = null,
119
+ intrinsicValue = null,
120
+ attributes = {},
121
+ ) => {
102
122
  const attributes_ = buildAttributes(attributes);
103
123
 
104
124
  let language_ = !language || language.length === 0 ? null : language;
@@ -110,7 +130,7 @@ export const buildNodeOpenTag = (flags, language, type, intrinsicValue = null, a
110
130
  t.ref`openToken`,
111
131
  t.ref`flags`,
112
132
  ...when(language_, [t.ref`language`, t.ref`languageSeparator`]),
113
- t.ref`type`,
133
+ ...when(type, [t.ref`type`]),
114
134
  ...when(intrinsicValue, [t.embedded(buildSpace()), t.ref`intrinsicValue`]),
115
135
  ...when(attributes_.length, [t.embedded(buildSpace())]),
116
136
  ...interpolateArrayChildren(attributes_, t.ref`attributes[]`, t.embedded(buildSpace())),
@@ -122,7 +142,7 @@ export const buildNodeOpenTag = (flags, language, type, intrinsicValue = null, a
122
142
  flags: buildFlags(flags),
123
143
  language: buildLanguage(language_),
124
144
  languageSeparator: language_ && type && t.s_node(l.CSTML, 'Punctuator', ':'),
125
- type: buildIdentifier(type),
145
+ type: type && buildIdentifier(type),
126
146
  intrinsicValue: intrinsicValue && buildString(intrinsicValue),
127
147
  attributes: attributes_,
128
148
  selfClosingToken: intrinsicValue && t.s_node(l.CSTML, 'Punctuator', '/'),
@@ -157,13 +177,6 @@ export const buildDoctypeTag = (attributes) => {
157
177
  );
158
178
  };
159
179
 
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
- });
165
- };
166
-
167
180
  export const buildIdentifierPath = (path) => {
168
181
  const path_ = [...path];
169
182
  const segments = path_.map((name) => buildIdentifier(name));
@@ -209,13 +222,6 @@ export const buildNodeCloseTag = (type, language) => {
209
222
  );
210
223
  };
211
224
 
212
- export const buildFragmentCloseTag = () => {
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', '>'),
216
- });
217
- };
218
-
219
225
  export const buildLiteral = (value) => {
220
226
  return t.node(l.CSTML, 'Literal', [t.ref`value`], { value });
221
227
  };
package/lib/index.js CHANGED
@@ -16,7 +16,7 @@ export const effectsFor = (verb) => {
16
16
  return { success: 'none', failure: 'none' };
17
17
 
18
18
  case 'guard':
19
- return { success: 'none', failure: 'fail' };
19
+ return { success: 'fail', failure: 'none' };
20
20
 
21
21
  default:
22
22
  throw new Error('invalid match verb');
@@ -69,11 +69,11 @@ export const reifyExpression = (node) => {
69
69
  }
70
70
 
71
71
  case 'Reference': {
72
- let { name, arrayOperator } = node.properties;
72
+ let { name, arrayOperatorToken } = node.properties;
73
73
 
74
74
  name = reifyExpression(name);
75
75
 
76
- return { type: 'Reference', value: { name, isArray: !!arrayOperator } };
76
+ return { type: 'Reference', value: { name, isArray: !!arrayOperatorToken } };
77
77
  }
78
78
 
79
79
  case 'Literal': {
@@ -82,14 +82,6 @@ export const reifyExpression = (node) => {
82
82
  return { type: 'Literal', value: getCooked(value.properties.content) };
83
83
  }
84
84
 
85
- case 'OpenFragmentTag': {
86
- return { type: 'OpenFragmentTag', value: undefined };
87
- }
88
-
89
- case 'CloseFragmentTag': {
90
- return { type: 'CloseFragmentTag', value: {} };
91
- }
92
-
93
85
  case 'IdentifierPath': {
94
86
  return node.properties.segments.map((segment) => reifyExpression(segment));
95
87
  }
@@ -133,6 +125,9 @@ export const reifyExpression = (node) => {
133
125
  case 'Gap':
134
126
  return { type: 'Gap', value: undefined };
135
127
 
128
+ case 'Shift':
129
+ return { type: 'Shift', value: undefined };
130
+
136
131
  default:
137
132
  throw new Error();
138
133
  }
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.2",
4
+ "version": "0.1.4",
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.5"
18
+ "@bablr/agast-helpers": "0.1.6"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@bablr/eslint-config-base": "github:bablr-lang/eslint-config-base#49f5952efed27f94ee9b94340eb1563c440bf64e",