@bablr/helpers 0.18.1 → 0.19.0

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/lib/grammar.js CHANGED
@@ -2,6 +2,7 @@ import every from 'iter-tools-es/methods/every';
2
2
  import isString from 'iter-tools-es/methods/is-string';
3
3
  import objectEntries from 'iter-tools-es/methods/object-entries';
4
4
  import { getPrototypeOf } from './object.js';
5
+ import { OpenNodeTag, CloseNodeTag } from './symbols.js';
5
6
 
6
7
  const { isArray } = Array;
7
8
  const isSymbol = (value) => typeof value === 'symbol';
@@ -110,14 +111,14 @@ export const buildDependentLanguages = (language, transformLanguage = (l) => l)
110
111
 
111
112
  const arrayLast = (arr) => arr[arr.length - 1];
112
113
 
113
- export function* zipLanguages(tokens, rootLanguage) {
114
+ export function* zipLanguages(tags, rootLanguage) {
114
115
  const languages = [rootLanguage];
115
116
 
116
- for (const token of tokens) {
117
- switch (token.type) {
118
- case 'OpenNodeTag': {
119
- if (token.value.language) {
120
- const dependentLanguage = languages.dependencies[token.value.language];
117
+ for (const tag of tags) {
118
+ switch (tag.type) {
119
+ case OpenNodeTag: {
120
+ if (tag.value.language) {
121
+ const dependentLanguage = languages.dependencies[tag.value.language];
121
122
 
122
123
  if (!dependentLanguage) throw new Error('language was not a dependency');
123
124
 
@@ -126,14 +127,14 @@ export function* zipLanguages(tokens, rootLanguage) {
126
127
  break;
127
128
  }
128
129
 
129
- case 'CloseNodeTag': {
130
- if (token.value.language !== arrayLast(languages).canonicalURL) {
130
+ case CloseNodeTag: {
131
+ if (tag.value.language !== arrayLast(languages).canonicalURL) {
131
132
  languages.pop();
132
133
  }
133
134
  break;
134
135
  }
135
136
  }
136
137
 
137
- yield [token, arrayLast(languages)];
138
+ yield [tag, arrayLast(languages)];
138
139
  }
139
140
  }
@@ -1,6 +1,6 @@
1
1
  /* @macrome
2
2
  * @generatedby @bablr/macrome-generator-bablr
3
- * @generatedfrom ./productions.macro.js#f76280b033fb91e9fb8362cc2c1caa8988b5beb4
3
+ * @generatedfrom ./productions.macro.js#ab30a55dff3676ff2418023be450dabe54386ee0
4
4
  * This file is autogenerated. Please do not edit it directly.
5
5
  * When editing run `npx macrome watch` then change the file this is generated from.
6
6
  */
@@ -17,13 +17,28 @@ export function* List({
17
17
  allowHoles = false,
18
18
  allowTrailingSeparator = true
19
19
  } = ctx.unbox(props);
20
+ yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
21
+ verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
22
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), _t.ref`values[]`, _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
23
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
24
+ values: [_t.node(_l.Instruction, "Array", [_t.ref`openToken`, _t.ref`closeToken`], {
25
+ openToken: _t.s_i_node(_l.Instruction, "Punctuator", "["),
26
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", "]")
27
+ }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
28
+ openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
29
+ content: _t.node(_l.CSTML, "Content", [_t.lit("separators[]")], {}, {}),
30
+ closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
31
+ }, {})],
32
+ closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
33
+ }, {})
34
+ }, {});
20
35
  let sep,
21
36
  it,
22
37
  anySep = false;
23
38
  for (;;) {
24
39
  it = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
25
40
  verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
26
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, ..._interpolateArrayChildren(element, _t.ref`values[]`, _t.embedded(_t.t_node(_l.Comment, null, [_t.embedded(_t.t_node('Space', 'Space', [_t.lit(' ')]))]))), _t.ref`closeToken`], {
41
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), ..._interpolateArrayChildren(element, _t.ref`values[]`, _t.embedded(_t.t_node(_l.Comment, null, [_t.embedded(_t.t_node('Space', 'Space', [_t.lit(' ')]))]))), _t.ref`closeToken`], {
27
42
  openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
28
43
  values: [..._interpolateArray(element)],
29
44
  closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
@@ -32,7 +47,7 @@ export function* List({
32
47
  if (it || allowTrailingSeparator) {
33
48
  sep = yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
34
49
  verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
35
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, ..._interpolateArrayChildren(separator, _t.ref`values[]`, _t.embedded(_t.t_node(_l.Comment, null, [_t.embedded(_t.t_node('Space', 'Space', [_t.lit(' ')]))]))), _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
50
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), ..._interpolateArrayChildren(separator, _t.ref`values[]`, _t.embedded(_t.t_node(_l.Comment, null, [_t.embedded(_t.t_node('Space', 'Space', [_t.lit(' ')]))]))), _t.embedded(_t.node(_l.Instruction, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
36
51
  openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
37
52
  values: [..._interpolateArray(separator), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
38
53
  openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
@@ -46,22 +61,6 @@ export function* List({
46
61
  }
47
62
  if (!(sep || allowHoles)) break;
48
63
  }
49
- if (!anySep) {
50
- yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
51
- verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
52
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.embedded(_t.s_t_node(_l.Space, "Space", [_t.lit(" ")], {}, {})), _t.ref`values[]`, _t.ref`closeToken`], {
53
- openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
54
- values: [_t.node(_l.Instruction, "Null", [_t.ref`sigilToken`], {
55
- sigilToken: _t.s_i_node(_l.Instruction, "Keyword", "null")
56
- }, {}), _t.node(_l.CSTML, "String", [_t.ref`openToken`, _t.ref`content`, _t.ref`closeToken`], {
57
- openToken: _t.s_i_node(_l.CSTML, "Punctuator", "'"),
58
- content: _t.node(_l.CSTML, "Content", [_t.lit("separators[]")], {}, {}),
59
- closeToken: _t.s_i_node(_l.CSTML, "Punctuator", "'")
60
- }, {})],
61
- closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
62
- }, {})
63
- }, {});
64
- }
65
64
  }
66
65
  export function* Any({
67
66
  value: matchers,
@@ -70,7 +69,7 @@ export function* Any({
70
69
  for (const matcher of ctx.unbox(matchers)) {
71
70
  if (yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
72
71
  verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
73
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, ..._interpolateArrayChildren(matcher, _t.ref`values[]`, _t.embedded(_t.t_node(_l.Comment, null, [_t.embedded(_t.t_node('Space', 'Space', [_t.lit(' ')]))]))), _t.ref`closeToken`], {
72
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), ..._interpolateArrayChildren(matcher, _t.ref`values[]`, _t.embedded(_t.t_node(_l.Comment, null, [_t.embedded(_t.t_node('Space', 'Space', [_t.lit(' ')]))]))), _t.ref`closeToken`], {
74
73
  openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
75
74
  values: [..._interpolateArray(matcher)],
76
75
  closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
@@ -85,7 +84,7 @@ export function* All({
85
84
  for (const matcher of ctx.unbox(matchers)) {
86
85
  yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
87
86
  verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
88
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, ..._interpolateArrayChildren(matcher, _t.ref`values[]`, _t.embedded(_t.t_node(_l.Comment, null, [_t.embedded(_t.t_node('Space', 'Space', [_t.lit(' ')]))]))), _t.ref`closeToken`], {
87
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), ..._interpolateArrayChildren(matcher, _t.ref`values[]`, _t.embedded(_t.t_node(_l.Comment, null, [_t.embedded(_t.t_node('Space', 'Space', [_t.lit(' ')]))]))), _t.ref`closeToken`], {
89
88
  openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
90
89
  values: [..._interpolateArray(matcher)],
91
90
  closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
@@ -99,7 +98,7 @@ export function* Punctuator({
99
98
  if (!intrinsicValue) throw new Error('Intrinsic productions must have value');
100
99
  yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
101
100
  verb: _t.s_node(_l.Instruction, "Identifier", "eat"),
102
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, ..._interpolateArrayChildren(intrinsicValue, _t.ref`values[]`, _t.embedded(_t.t_node(_l.Comment, null, [_t.embedded(_t.t_node('Space', 'Space', [_t.lit(' ')]))]))), _t.ref`closeToken`], {
101
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), ..._interpolateArrayChildren(intrinsicValue, _t.ref`values[]`, _t.embedded(_t.t_node(_l.Comment, null, [_t.embedded(_t.t_node('Space', 'Space', [_t.lit(' ')]))]))), _t.ref`closeToken`], {
103
102
  openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
104
103
  values: [..._interpolateArray(intrinsicValue)],
105
104
  closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
@@ -117,7 +116,7 @@ export function* Optional({
117
116
  }
118
117
  yield _t.node(_l.Instruction, "Call", [_t.ref`verb`, _t.ref`arguments`], {
119
118
  verb: _t.s_node(_l.Instruction, "Identifier", "eatMatch"),
120
- arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, ..._interpolateArrayChildren(matchers_[0], _t.ref`values[]`, _t.embedded(_t.t_node(_l.Comment, null, [_t.embedded(_t.t_node('Space', 'Space', [_t.lit(' ')]))]))), _t.ref`closeToken`], {
119
+ arguments: _t.node(_l.Instruction, "Tuple", [_t.ref`openToken`, _t.ref`values[]`, _t.arr(), ..._interpolateArrayChildren(matchers_[0], _t.ref`values[]`, _t.embedded(_t.t_node(_l.Comment, null, [_t.embedded(_t.t_node('Space', 'Space', [_t.lit(' ')]))]))), _t.ref`closeToken`], {
121
120
  openToken: _t.s_i_node(_l.Instruction, "Punctuator", "("),
122
121
  values: [..._interpolateArray(matchers_[0])],
123
122
  closeToken: _t.s_i_node(_l.Instruction, "Punctuator", ")")
@@ -8,6 +8,8 @@ export function* List({ value: props, ctx }) {
8
8
  allowTrailingSeparator = true,
9
9
  } = ctx.unbox(props);
10
10
 
11
+ yield i`eat([] 'separators[]')`;
12
+
11
13
  let sep,
12
14
  it,
13
15
  anySep = false;
@@ -19,10 +21,6 @@ export function* List({ value: props, ctx }) {
19
21
  }
20
22
  if (!(sep || allowHoles)) break;
21
23
  }
22
-
23
- if (!anySep) {
24
- yield i`eat(null 'separators[]')`;
25
- }
26
24
  }
27
25
 
28
26
  export function* Any({ value: matchers, ctx }) {
package/lib/source.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import slice from 'iter-tools-es/methods/slice';
2
2
  import { streamFromTree } from '@bablr/agast-helpers/tree';
3
3
  import { StreamIterable, getStreamIterator } from '@bablr/agast-helpers/stream';
4
+ import { ShiftTag, GapTag, LiteralTag } from './symbols.js';
4
5
 
5
6
  const escapables = {
6
7
  n: '\n',
@@ -91,8 +92,8 @@ function* __embeddedSourceFrom(iterable) {
91
92
 
92
93
  export const embeddedSourceFrom = (iterable) => new StreamIterable(__embeddedSourceFrom(iterable));
93
94
 
94
- function* __sourceFromTokenStream(terminals) {
95
- let iter = getStreamIterator(terminals);
95
+ function* __sourceFromTokenStream(Tags) {
96
+ let iter = getStreamIterator(Tags);
96
97
  let step;
97
98
 
98
99
  for (;;) {
@@ -104,18 +105,17 @@ function* __sourceFromTokenStream(terminals) {
104
105
 
105
106
  if (step.done) break;
106
107
 
107
- const terminal = step.value;
108
+ const tag = step.value;
108
109
 
109
- if (terminal.type === 'Literal') {
110
- yield* terminal.value;
111
- } else if (terminal.type === 'Gap') {
110
+ if (tag.type === LiteralTag) {
111
+ yield* tag.value;
112
+ } else if (tag.type === GapTag) {
112
113
  yield null;
113
114
  }
114
115
  }
115
116
  }
116
117
 
117
- export const sourceFromTokenStream = (terminals) =>
118
- new StreamIterable(__sourceFromTokenStream(terminals));
118
+ export const sourceFromTokenStream = (Tags) => new StreamIterable(__sourceFromTokenStream(Tags));
119
119
 
120
120
  function* __sourceFromQuasis(quasis) {
121
121
  let first = true;
@@ -157,11 +157,11 @@ export function* fillGapsWith(expressions, iterable) {
157
157
 
158
158
  const token = step.value;
159
159
 
160
- if (token.type === 'Shift') {
160
+ if (token.type === ShiftTag) {
161
161
  holding = true;
162
162
  }
163
163
 
164
- if (token.type === 'Gap') {
164
+ if (token.type === GapTag) {
165
165
  if (holding) {
166
166
  holding = false;
167
167
  yield token;
package/lib/stream.js CHANGED
@@ -9,12 +9,15 @@ import {
9
9
  } from '@bablr/agast-helpers/stream';
10
10
  import isString from 'iter-tools-es/methods/is-string';
11
11
  import emptyStack from '@iter-tools/imm-stack';
12
+ import { DoctypeTag, OpenNodeTag, CloseNodeTag } from './symbols.js';
12
13
 
13
14
  import { unresolveLanguage } from './grammar.js';
14
15
 
16
+ const { freeze } = Object;
17
+
15
18
  // bad: wrecks tree by breaking weak linkages
16
- function* __resolveTerminals(ctx, terminals) {
17
- const co = new Coroutine(getStreamIterator(terminals));
19
+ function* __resolveTags(ctx, tags) {
20
+ const co = new Coroutine(getStreamIterator(tags));
18
21
  let languages = emptyStack;
19
22
 
20
23
  for (;;) {
@@ -26,60 +29,60 @@ function* __resolveTerminals(ctx, terminals) {
26
29
 
27
30
  if (co.done) break;
28
31
 
29
- const terminal = co.value;
32
+ const tag = co.value;
30
33
 
31
- if (terminal.type === 'DoctypeTag') {
32
- languages = languages.push(ctx.languages.get(terminal.value.attributes['bablr-language']));
34
+ if (tag.type === DoctypeTag) {
35
+ languages = languages.push(ctx.languages.get(tag.value.attributes['bablr-language']));
33
36
  }
34
37
 
35
- if (terminal.type === 'CloseNodeTag') {
38
+ if (tag.type === CloseNodeTag) {
36
39
  languages = languages.pop();
37
40
  }
38
41
 
39
- if (terminal.type === 'OpenNodeTag') {
40
- if (isString(terminal.value.language)) {
42
+ if (tag.type === OpenNodeTag) {
43
+ if (isString(tag.value.language)) {
41
44
  const currentLanguage = languages.value;
42
- const nodeLanguageURL = terminal.value.language;
45
+ const nodeLanguageURL = tag.value.language;
43
46
  const nodeLanguage = ctx.languages.get(nodeLanguageURL);
44
47
 
45
48
  languages = languages.push(nodeLanguage);
46
49
 
47
- yield {
48
- type: 'OpenNodeTag',
49
- value: {
50
- ...terminal.value,
50
+ yield freeze({
51
+ type: OpenNodeTag,
52
+ value: freeze({
53
+ ...tag.value,
51
54
  language: unresolveLanguage(ctx, currentLanguage, nodeLanguageURL),
52
- },
53
- };
55
+ }),
56
+ });
54
57
  } else {
55
- yield terminal;
58
+ yield tag;
56
59
  }
57
60
  } else {
58
- yield terminal;
61
+ yield tag;
59
62
  }
60
63
  }
61
64
  }
62
65
 
63
- export const resolveTerminals = (ctx, terminals) => {
64
- return new StreamIterable(__resolveTerminals(ctx, terminals));
66
+ export const resolveTags = (ctx, tags) => {
67
+ return new StreamIterable(__resolveTags(ctx, tags));
65
68
  };
66
69
 
67
- export const generatePrettyCSTMLStrategy = (terminals, options = {}) => {
70
+ export const generatePrettyCSTMLStrategy = (tags, options = {}) => {
68
71
  const { ctx } = options;
69
72
 
70
- return generatePrettyCSTML(ctx ? resolveTerminals(ctx, terminals) : terminals, options);
73
+ return generatePrettyCSTML(ctx ? resolveTags(ctx, tags) : tags, options);
71
74
  };
72
75
 
73
- export const printPrettyCSTML = (terminals, options = {}) => {
74
- return stringFromStream(generateStandardOutput(generatePrettyCSTMLStrategy(terminals, options)));
76
+ export const printPrettyCSTML = (tags, options = {}) => {
77
+ return stringFromStream(generateStandardOutput(generatePrettyCSTMLStrategy(tags, options)));
75
78
  };
76
79
 
77
- export const generateCSTMLStrategy = (terminals, options = {}) => {
80
+ export const generateCSTMLStrategy = (tags, options = {}) => {
78
81
  const { ctx } = options;
79
82
 
80
- return generateCSTML(ctx ? resolveTerminals(ctx, terminals) : terminals, options);
83
+ return generateCSTML(ctx ? resolveTags(ctx, tags) : tags, options);
81
84
  };
82
85
 
83
- export const printCSTML = (terminals, options = {}) => {
84
- return stringFromStream(generateStandardOutput(generateCSTMLStrategy(terminals, options)));
86
+ export const printCSTML = (tags, options = {}) => {
87
+ return stringFromStream(generateStandardOutput(generateCSTMLStrategy(tags, options)));
85
88
  };
package/lib/symbols.js CHANGED
@@ -1 +1 @@
1
- export const node = Symbol.for('@bablr/node');
1
+ export * from '@bablr/agast-helpers/symbols';
package/lib/tree.js CHANGED
@@ -3,6 +3,6 @@ import { streamFromTree } from '@bablr/agast-helpers/tree';
3
3
  import { printPrettyCSTML as printPrettyCSTMLFromStream } from './stream.js';
4
4
 
5
5
  export const printPrettyCSTML = (rootNode, options = {}) => {
6
- // i need a context-aware streamFromTree here to build a stream with linked terminals...?
6
+ // i need a context-aware streamFromTree here to build a stream with linked Tags...?
7
7
  return printPrettyCSTMLFromStream(streamFromTree(rootNode), options);
8
8
  };
package/lib/trivia.js CHANGED
@@ -1,15 +1,16 @@
1
1
  import { Coroutine } from '@bablr/coroutine';
2
2
  import { reifyExpression } from '@bablr/agast-vm-helpers';
3
3
  import { mapProductions } from './enhancers.js';
4
+ import { OpenNodeTag, CloseNodeTag, ReferenceTag } from './symbols.js';
4
5
 
5
6
  const lookbehind = (context, s) => {
6
7
  let token = s.result;
7
8
  while (
8
9
  token &&
9
- ['OpenNodeTag', 'CloseNodeTag', 'Reference'].includes(token.type) &&
10
- (token.type !== 'OpenNodeTag' || !(token.value.flags.intrinsic && token.value.flags.token))
10
+ [OpenNodeTag, CloseNodeTag, ReferenceTag].includes(token.type) &&
11
+ (token.type !== OpenNodeTag || !(token.value.flags.intrinsic && token.value.flags.token))
11
12
  ) {
12
- const prevToken = context.getPreviousTerminal(token);
13
+ const prevToken = context.getPreviousTag(token);
13
14
  if (!prevToken) break;
14
15
  token = prevToken;
15
16
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bablr/helpers",
3
3
  "description": "Command helpers for use in writing BABLR grammars",
4
- "version": "0.18.1",
4
+ "version": "0.19.0",
5
5
  "author": "Conrad Buck<conartist6@gmail.com>",
6
6
  "type": "module",
7
7
  "files": [
@@ -28,19 +28,19 @@
28
28
  "clean": "macrome clean"
29
29
  },
30
30
  "dependencies": {
31
- "@bablr/language_enhancer-debug-log": "0.5.0",
32
- "@bablr/strategy_enhancer-debug-log": "0.4.0",
33
- "@bablr/agast-helpers": "0.3.2",
34
- "@bablr/agast-vm-helpers": "0.3.2",
31
+ "@bablr/language_enhancer-debug-log": "0.6.0",
32
+ "@bablr/strategy_enhancer-debug-log": "0.5.0",
33
+ "@bablr/agast-helpers": "0.4.0",
34
+ "@bablr/agast-vm-helpers": "0.4.0",
35
35
  "@bablr/coroutine": "0.1.0",
36
36
  "@iter-tools/imm-stack": "1.1.0",
37
37
  "iter-tools-es": "^7.5.3"
38
38
  },
39
39
  "devDependencies": {
40
- "@bablr/boot": "0.4.0",
40
+ "@bablr/boot": "0.5.0",
41
41
  "@bablr/eslint-config-base": "github:bablr-lang/eslint-config-base#d834ccc52795d6c3b96ecc6c419960fceed221a6",
42
42
  "@bablr/macrome": "0.1.3",
43
- "@bablr/macrome-generator-bablr": "0.3.1",
43
+ "@bablr/macrome-generator-bablr": "0.3.2",
44
44
  "enhanced-resolve": "^5.12.0",
45
45
  "eslint": "^7.32.0",
46
46
  "eslint-import-resolver-enhanced-resolve": "^1.0.5",