babel-plugin-wallace 0.14.1 → 0.16.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.
Files changed (50) hide show
  1. package/dist/ast-helpers.d.ts +35 -4
  2. package/dist/ast-helpers.js +83 -14
  3. package/dist/ast-helpers.js.map +1 -1
  4. package/dist/config.d.ts +3 -0
  5. package/dist/config.js +12 -3
  6. package/dist/config.js.map +1 -1
  7. package/dist/consolidation/ComponentDefinitionData.d.ts +9 -4
  8. package/dist/consolidation/ComponentDefinitionData.js +15 -13
  9. package/dist/consolidation/ComponentDefinitionData.js.map +1 -1
  10. package/dist/consolidation/processNodes.js +94 -92
  11. package/dist/consolidation/processNodes.js.map +1 -1
  12. package/dist/consolidation/types.d.ts +3 -3
  13. package/dist/consolidation/utils.d.ts +1 -2
  14. package/dist/consolidation/utils.js +0 -9
  15. package/dist/consolidation/utils.js.map +1 -1
  16. package/dist/constants.d.ts +14 -10
  17. package/dist/constants.js +12 -8
  18. package/dist/constants.js.map +1 -1
  19. package/dist/contexts/handlers.js +1 -1
  20. package/dist/contexts/handlers.js.map +1 -1
  21. package/dist/directives.js +3 -82
  22. package/dist/directives.js.map +1 -1
  23. package/dist/errors.d.ts +3 -10
  24. package/dist/errors.js +22 -25
  25. package/dist/errors.js.map +1 -1
  26. package/dist/index.d.ts +2 -3
  27. package/dist/index.js +2 -40
  28. package/dist/index.js.map +1 -1
  29. package/dist/models/component.d.ts +4 -3
  30. package/dist/models/component.js +16 -22
  31. package/dist/models/component.js.map +1 -1
  32. package/dist/models/index.d.ts +2 -2
  33. package/dist/models/index.js.map +1 -1
  34. package/dist/models/node.d.ts +23 -21
  35. package/dist/models/node.js +40 -67
  36. package/dist/models/node.js.map +1 -1
  37. package/dist/visitors/attribute.d.ts +2 -1
  38. package/dist/visitors/attribute.js +6 -46
  39. package/dist/visitors/attribute.js.map +1 -1
  40. package/dist/visitors/jsx.js +9 -27
  41. package/dist/visitors/jsx.js.map +1 -1
  42. package/dist/visitors/library.d.ts +26 -24
  43. package/dist/visitors/library.js +52 -47
  44. package/dist/visitors/library.js.map +1 -1
  45. package/dist/visitors/main.d.ts +3 -0
  46. package/dist/visitors/main.js +39 -0
  47. package/dist/visitors/main.js.map +1 -0
  48. package/dist/writers/defineComponent.js +14 -7
  49. package/dist/writers/defineComponent.js.map +1 -1
  50. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  import type { NodePath } from "@babel/core";
2
- import type { Expression, JSXElement, JSXExpressionContainer, JSXText } from "@babel/types";
2
+ import type { Expression, JSXElement, JSXExpressionContainer, JSXText, Identifier, NewExpression } from "@babel/types";
3
3
  import { IMPORTABLES, SPECIAL_SYMBOLS } from "../constants";
4
4
  interface Attribute {
5
5
  name: string;
@@ -9,12 +9,6 @@ interface Watch {
9
9
  expression: Expression | SPECIAL_SYMBOLS.noLookup;
10
10
  callback: string | Expression;
11
11
  }
12
- export interface RepeatInstruction {
13
- expression: Expression;
14
- componentCls: string;
15
- repeatKey: Expression | string | undefined;
16
- poolExpression?: Expression;
17
- }
18
12
  interface EventListener {
19
13
  eventName: string;
20
14
  callback: Expression;
@@ -44,13 +38,13 @@ export declare class ExtractedNode {
44
38
  tagName: string;
45
39
  element: HTMLElement | Text | undefined;
46
40
  elementKey?: number;
47
- detacherVariable?: string;
41
+ detacherIdentifier?: Identifier;
42
+ detacherObject?: NewExpression;
48
43
  detacherStashKey?: number;
49
44
  isNestedComponent: boolean;
50
45
  isRepeatedComponent: boolean;
51
- repeatNode?: ExtractedNode;
46
+ isStub: boolean;
52
47
  repeatKey: Expression | string | undefined;
53
- repeatPool?: Expression;
54
48
  address: Array<number>;
55
49
  initialIndex: number;
56
50
  path: NodePath<ValidElementType>;
@@ -60,6 +54,7 @@ export declare class ExtractedNode {
60
54
  eventListeners: EventListener[];
61
55
  bindInstructions: BindInstruction;
62
56
  hasConditionalChildren: boolean;
57
+ hasNestedChildren: boolean;
63
58
  hasRepeatedChildren: boolean;
64
59
  requiredImports: Set<IMPORTABLES>;
65
60
  /**
@@ -90,30 +85,37 @@ export declare class ExtractedNode {
90
85
  getRef(): string | undefined;
91
86
  setPart(name: string): void;
92
87
  getPart(): string | undefined;
93
- setRepeatExpression(expression: Expression): void;
94
88
  setRepeatKey(expression: Expression | string): void;
95
- setRepeatPool(expression: Expression): void;
96
- /**
97
- * Called on the parent of a repeat.
98
- */
99
- getRepeatInstruction(): RepeatInstruction | undefined;
100
- setStub(name: string): void;
101
- getStubName(): string | undefined;
102
89
  requiredImport(name: IMPORTABLES): void;
103
90
  }
91
+ /**
92
+ * Class for standard tag nodes:
93
+ * <img />
94
+ * <div>...</div>
95
+ */
104
96
  export declare class TagNode extends ExtractedNode {
105
97
  parent: TagNode;
106
98
  address: Array<number>;
107
99
  path: NodePath<JSXElement>;
108
100
  attributes: Attribute[];
109
101
  constructor(path: NodePath<JSXElement>, address: Array<number>, initialIndex: number, parent: TagNode, component: any, // TODO: fix type circular import.
110
- tagName: string, isNestedComponent: boolean, isRepeatedComponent: boolean);
102
+ tagName: string);
111
103
  addFixedAttribute(name: string, value?: string): void;
112
104
  addStaticAttribute(name: string, expression: Expression): void;
113
105
  getElement(): HTMLElement | Text;
114
106
  }
115
- export declare class StubNode extends ExtractedNode {
116
- constructor(path: NodePath<JSXElement>, address: Array<number>, initialIndex: number, parent: TagNode, name: string);
107
+ /**
108
+ * Class for nested component tag nodes:
109
+ *
110
+ * <NestedComponent />
111
+ */
112
+ export declare class NestedComponentTagNode extends TagNode {
113
+ parent: TagNode;
114
+ address: Array<number>;
115
+ path: NodePath<JSXElement>;
116
+ attributes: Attribute[];
117
+ constructor(path: NodePath<JSXElement>, address: Array<number>, initialIndex: number, parent: TagNode, component: any, // TODO: fix type circular import.
118
+ tagName: string, isRepeat: boolean, isStub: boolean);
117
119
  getElement(): HTMLElement | Text;
118
120
  }
119
121
  export declare class DynamicTextNode extends ExtractedNode {
@@ -10,24 +10,26 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
11
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
12
  };
13
- var _ExtractedNode_repeatExpression, _ExtractedNode_stubName, _ExtractedNode_visibilityToggle, _ExtractedNode_ref, _ExtractedNode_part, _ExtractedNode_props, _ExtractedNode_ctrl;
13
+ var _ExtractedNode_visibilityToggle, _ExtractedNode_ref, _ExtractedNode_part, _ExtractedNode_props, _ExtractedNode_ctrl;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.PlainTextNode = exports.DynamicTextNode = exports.StubNode = exports.TagNode = exports.ExtractedNode = void 0;
15
+ exports.PlainTextNode = exports.DynamicTextNode = exports.NestedComponentTagNode = exports.TagNode = exports.ExtractedNode = void 0;
16
16
  const utils_1 = require("../utils");
17
17
  const errors_1 = require("../errors");
18
18
  const constants_1 = require("../constants");
19
+ const config_1 = require("../config");
19
20
  class ExtractedNode {
20
21
  constructor(path, address, initialIndex, parent) {
21
22
  this.isNestedComponent = false;
22
23
  this.isRepeatedComponent = false;
24
+ this.isStub = false;
23
25
  this.children = [];
24
26
  this.watches = [];
25
27
  this.eventListeners = [];
26
28
  this.bindInstructions = {};
27
29
  this.hasConditionalChildren = false;
30
+ this.hasNestedChildren = false;
28
31
  this.hasRepeatedChildren = false;
29
32
  this.requiredImports = new Set();
30
- // poolExpression: Expression | undefined;
31
33
  /**
32
34
  * The sets of classes that may be toggled.
33
35
  */
@@ -37,8 +39,6 @@ class ExtractedNode {
37
39
  */
38
40
  this.classToggleTriggers = [];
39
41
  // Private to prevent being set more thant once by directives.
40
- _ExtractedNode_repeatExpression.set(this, void 0);
41
- _ExtractedNode_stubName.set(this, void 0);
42
42
  _ExtractedNode_visibilityToggle.set(this, void 0);
43
43
  _ExtractedNode_ref.set(this, void 0);
44
44
  _ExtractedNode_part.set(this, void 0);
@@ -90,7 +90,7 @@ class ExtractedNode {
90
90
  __classPrivateFieldSet(this, _ExtractedNode_ctrl, expression, "f");
91
91
  }
92
92
  getCtrl() {
93
- return this.repeatNode ? this.repeatNode.getCtrl() : __classPrivateFieldGet(this, _ExtractedNode_ctrl, "f");
93
+ return __classPrivateFieldGet(this, _ExtractedNode_ctrl, "f");
94
94
  }
95
95
  setProps(expression) {
96
96
  if (__classPrivateFieldGet(this, _ExtractedNode_props, "f")) {
@@ -134,71 +134,27 @@ class ExtractedNode {
134
134
  getPart() {
135
135
  return __classPrivateFieldGet(this, _ExtractedNode_part, "f");
136
136
  }
137
- setRepeatExpression(expression) {
138
- if (__classPrivateFieldGet(this, _ExtractedNode_repeatExpression, "f")) {
139
- (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.DIRECTIVE_ALREADY_DEFINED("items"));
140
- }
141
- this.isRepeatedComponent = true;
142
- __classPrivateFieldSet(this, _ExtractedNode_repeatExpression, expression, "f");
143
- // this.parent.repeatNode = this;
144
- }
145
137
  setRepeatKey(expression) {
146
138
  this.repeatKey = expression;
147
139
  }
148
- setRepeatPool(expression) {
149
- this.repeatPool = expression;
150
- }
151
- /**
152
- * Called on the parent of a repeat.
153
- */
154
- getRepeatInstruction() {
155
- if (this.isRepeatedComponent) {
156
- return {
157
- expression: __classPrivateFieldGet(this, _ExtractedNode_repeatExpression, "f"),
158
- componentCls: this.tagName,
159
- repeatKey: this.repeatKey,
160
- poolExpression: this.repeatPool
161
- };
162
- }
163
- }
164
- setStub(name) {
165
- if (!this.parent) {
166
- (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.CANNOT_MAKE_ROOT_ELEMENT_A_STUB);
167
- }
168
- if (__classPrivateFieldGet(this, _ExtractedNode_stubName, "f")) {
169
- (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.STUB_ALREADY_DEFINED);
170
- }
171
- __classPrivateFieldSet(this, _ExtractedNode_stubName, name, "f");
172
- }
173
- getStubName() {
174
- return __classPrivateFieldGet(this, _ExtractedNode_stubName, "f");
175
- }
176
140
  requiredImport(name) {
177
141
  this.requiredImports.add(name);
178
142
  }
179
143
  }
180
144
  exports.ExtractedNode = ExtractedNode;
181
- _ExtractedNode_repeatExpression = new WeakMap(), _ExtractedNode_stubName = new WeakMap(), _ExtractedNode_visibilityToggle = new WeakMap(), _ExtractedNode_ref = new WeakMap(), _ExtractedNode_part = new WeakMap(), _ExtractedNode_props = new WeakMap(), _ExtractedNode_ctrl = new WeakMap();
145
+ _ExtractedNode_visibilityToggle = new WeakMap(), _ExtractedNode_ref = new WeakMap(), _ExtractedNode_part = new WeakMap(), _ExtractedNode_props = new WeakMap(), _ExtractedNode_ctrl = new WeakMap();
146
+ /**
147
+ * Class for standard tag nodes:
148
+ * <img />
149
+ * <div>...</div>
150
+ */
182
151
  class TagNode extends ExtractedNode {
183
152
  constructor(path, address, initialIndex, parent, component, // TODO: fix type circular import.
184
- tagName, isNestedComponent, isRepeatedComponent) {
153
+ tagName) {
185
154
  super(path, address, initialIndex, parent);
186
155
  this.attributes = [];
187
156
  this.component = component;
188
157
  this.tagName = tagName;
189
- this.isNestedComponent = isNestedComponent;
190
- this.isRepeatedComponent = isRepeatedComponent;
191
- if (!this.parent) {
192
- if (this.isRepeatedComponent) {
193
- (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.REPEAT_NOT_ALLOWED_ON_ROOT);
194
- }
195
- else if (this.isNestedComponent) {
196
- (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.NESTED_COMPONENT_NOT_ALLOWED_ON_ROOT);
197
- }
198
- }
199
- if (this.isRepeatedComponent) {
200
- this.parent.hasRepeatedChildren = true;
201
- }
202
158
  }
203
159
  addFixedAttribute(name, value) {
204
160
  this.attributes.push({ name, value });
@@ -208,9 +164,6 @@ class TagNode extends ExtractedNode {
208
164
  this.attributes.push({ name, value: constants_1.HTML_SPLITTER });
209
165
  }
210
166
  getElement() {
211
- if (this.isRepeatedComponent) {
212
- return undefined;
213
- }
214
167
  const element = (0, utils_1.createElement)(this.tagName);
215
168
  this.attributes.forEach(({ name, value }) => {
216
169
  element.setAttribute(name, value || "");
@@ -220,17 +173,37 @@ class TagNode extends ExtractedNode {
220
173
  }
221
174
  }
222
175
  exports.TagNode = TagNode;
223
- class StubNode extends ExtractedNode {
224
- constructor(path, address, initialIndex, parent, name) {
225
- super(path, address, initialIndex, parent);
226
- this.setStub(name);
176
+ /**
177
+ * Class for nested component tag nodes:
178
+ *
179
+ * <NestedComponent />
180
+ */
181
+ class NestedComponentTagNode extends TagNode {
182
+ constructor(path, address, initialIndex, parent, component, // TODO: fix type circular import.
183
+ tagName, isRepeat, isStub) {
184
+ super(path, address, initialIndex, parent, component, tagName);
185
+ this.attributes = [];
186
+ if (!this.parent) {
187
+ (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.NESTED_COMPONENT_NOT_ALLOWED_ON_ROOT);
188
+ }
189
+ if (isStub) {
190
+ this.isStub = true;
191
+ config_1.wallaceConfig.ensureFlagIstrue(path, config_1.FlagValue.allowStubs);
192
+ }
193
+ if (isRepeat) {
194
+ this.isRepeatedComponent = true;
195
+ this.parent.hasRepeatedChildren = true;
196
+ }
197
+ else {
198
+ this.isNestedComponent = true;
199
+ this.parent.hasNestedChildren = true;
200
+ }
227
201
  }
228
202
  getElement() {
229
- this.element = (0, utils_1.createElement)("div");
230
- return this.element;
203
+ return undefined;
231
204
  }
232
205
  }
233
- exports.StubNode = StubNode;
206
+ exports.NestedComponentTagNode = NestedComponentTagNode;
234
207
  class DynamicTextNode extends ExtractedNode {
235
208
  constructor(path, address, initialIndex, parent, expression) {
236
209
  super(path, address, initialIndex, parent);
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/models/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/models/node.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,9 @@ import { Component, TagNode } from "../models";
4
4
  interface State {
5
5
  extractedNode: TagNode;
6
6
  component: Component;
7
+ allowAttributes: boolean;
7
8
  }
8
9
  export declare const attributeVisitors: {
9
- JSXAttribute(path: NodePath<JSXAttribute>, { extractedNode, component }: State): void;
10
+ JSXAttribute(path: NodePath<JSXAttribute>, { extractedNode, component, allowAttributes }: State): void;
10
11
  };
11
12
  export {};
@@ -1,61 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.attributeVisitors = void 0;
4
- const t = require("@babel/types");
5
4
  const config_1 = require("../config");
6
5
  const constants_1 = require("../constants");
7
6
  const errors_1 = require("../errors");
8
7
  const ast_helpers_1 = require("../ast-helpers");
9
- /**
10
- * Name could be:
11
- * foo
12
- * foo:bar
13
- */
14
- function extractName(path) {
15
- const { name } = path.node;
16
- let base, qualifier;
17
- if (t.isJSXNamespacedName(name)) {
18
- base = name.namespace.name;
19
- qualifier = name.name.name;
20
- }
21
- else {
22
- base = name.name;
23
- }
24
- return { base, qualifier };
25
- }
26
- /**
27
- * Value could be:
28
- *
29
- * foo
30
- * foo="bar"
31
- * foo={bar}
32
- */
33
- function extractValue(path) {
34
- const { value } = path.node;
35
- if (t.isStringLiteral(value)) {
36
- return { type: "string", value: value.value };
37
- }
38
- else if (t.isJSXExpressionContainer(value)) {
39
- const expression = (0, ast_helpers_1.getPlaceholderExpression)(path, value.expression);
40
- if (expression) {
41
- return { type: "expression", expression: expression, path };
42
- }
43
- }
44
- else if (value === null) {
45
- return { type: "null" };
46
- }
47
- else {
48
- (0, errors_1.error)(path, errors_1.ERROR_MESSAGES.JSX_ELEMENTS_NOT_ALLOWED_IN_EXPRESSIONS);
49
- }
50
- }
51
8
  exports.attributeVisitors = {
52
- JSXAttribute(path, { extractedNode, component }) {
9
+ JSXAttribute(path, { extractedNode, component, allowAttributes }) {
53
10
  if (extractedNode.path.node !== path.parentPath.parentPath.node) {
54
11
  // We exit here as otherwise we'd traverse attributes of nested JSXElements too.
55
12
  return;
56
13
  }
57
- const { base, qualifier } = extractName(path);
58
- const extractedValue = extractValue(path);
14
+ const { base, qualifier } = (0, ast_helpers_1.extractAttributeName)(path);
15
+ const extractedValue = (0, ast_helpers_1.extractAttributeValue)(path);
59
16
  if (!extractedValue) {
60
17
  return;
61
18
  }
@@ -69,6 +26,9 @@ exports.attributeVisitors = {
69
26
  handler.apply(extractedNode, extractedValue, qualifier, base);
70
27
  }
71
28
  else {
29
+ if (!allowAttributes) {
30
+ (0, errors_1.error)(path, errors_1.ERROR_MESSAGES.NESTED_COMPONENT_WITH_ATTRIBUTES);
31
+ }
72
32
  const attName = qualifier ? `${base}:${qualifier}` : base;
73
33
  switch (extractedValue.type) {
74
34
  case "expression":
@@ -1 +1 @@
1
- {"version":3,"file":"attribute.js","sourceRoot":"","sources":["../../src/visitors/attribute.ts"],"names":[],"mappings":";;;AAAA,kCAAkC;AAGlC,sCAA0C;AAC1C,4CAAkD;AAElD,sCAAkD;AAClD,gDAA0D;AAO1D;;;;GAIG;AACH,SAAS,WAAW,CAAC,IAA4B;IAI/C,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,IAAI,IAAY,EAAE,SAA6B,CAAC;IAChD,IAAI,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,IAA4B;IAChD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;IAC5B,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;SAAM,IAAI,CAAC,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAA,sCAAwB,EAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACpE,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC9D,CAAC;IACH,CAAC;SAAM,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,IAAA,cAAK,EAAC,IAAI,EAAE,uBAAc,CAAC,uCAAuC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAEY,QAAA,iBAAiB,GAAG;IAC/B,YAAY,CAAC,IAA4B,EAAE,EAAE,aAAa,EAAE,SAAS,EAAS;QAC5E,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAChE,gFAAgF;YAChF,OAAO;QACT,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAG,8BAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACvE,MAAM,cAAc,GAAG,cAAc;YACnC,CAAC,CAAC,sBAAa,CAAC,UAAU,CAAC,KAAK,CAAC;YACjC,CAAC,CAAC,sBAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;YACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1D,QAAQ,cAAc,CAAC,IAAI,EAAE,CAAC;gBAC5B,KAAK,YAAY;oBACf,aAAa,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;oBACjE,MAAM;gBACR,KAAK,QAAQ;oBACX,aAAa,CAAC,iBAAiB,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;oBAC/D,MAAM;gBACR,KAAK,MAAM;oBACT,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;oBACzC,MAAM;YACV,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"attribute.js","sourceRoot":"","sources":["../../src/visitors/attribute.ts"],"names":[],"mappings":";;;AAEA,sCAA0C;AAC1C,4CAAkD;AAElD,sCAAkD;AAClD,gDAA6E;AAQhE,QAAA,iBAAiB,GAAG;IAC/B,YAAY,CACV,IAA4B,EAC5B,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAS;QAEpD,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAChE,gFAAgF;YAChF,OAAO;QACT,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAA,kCAAoB,EAAC,IAAI,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,IAAA,mCAAqB,EAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAG,8BAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACvE,MAAM,cAAc,GAAG,cAAc;YACnC,CAAC,CAAC,sBAAa,CAAC,UAAU,CAAC,KAAK,CAAC;YACjC,CAAC,CAAC,sBAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;YACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,IAAA,cAAK,EAAC,IAAI,EAAE,uBAAc,CAAC,gCAAgC,CAAC,CAAC;YAC/D,CAAC;YACD,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1D,QAAQ,cAAc,CAAC,IAAI,EAAE,CAAC;gBAC5B,KAAK,YAAY;oBACf,aAAa,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;oBACjE,MAAM;gBACR,KAAK,QAAQ;oBACX,aAAa,CAAC,iBAAiB,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;oBAC/D,MAAM;gBACR,KAAK,MAAM;oBACT,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;oBACzC,MAAM;YACV,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;CACF,CAAC"}
@@ -2,39 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.jsxVisitors = void 0;
4
4
  const ast_helpers_1 = require("../ast-helpers");
5
- const config_1 = require("../config");
6
5
  const errors_1 = require("../errors");
7
- const utils_1 = require("../utils");
8
6
  // Calls itself recursively, using trackers to identify where we are.
9
7
  // Must delete visited nodes to avoid reprocessing them with recursion.
10
8
  exports.jsxVisitors = {
11
9
  JSXElement(path, { component, tracker = { childIndex: 0, initialIndex: 0, parent: undefined } }) {
12
- const tagName = (0, ast_helpers_1.getJSXElementName)(path);
13
- if (typeof tagName === "string") {
14
- if ((0, utils_1.isCapitalized)(tagName)) {
15
- (0, errors_1.error)(path, errors_1.ERROR_MESSAGES.INCORRECTLY_NESTED_COMPONENT);
16
- }
17
- component.processJSXElement(path, tracker, tagName, exports.jsxVisitors);
18
- }
19
- else {
20
- const { namespace, name } = tagName;
21
- if (name === "nest" || name === "repeat") {
22
- const componentCls = namespace;
23
- if (!(0, utils_1.isCapitalized)(componentCls)) {
24
- (0, errors_1.error)(path, errors_1.ERROR_MESSAGES.NESTED_COMPONENT_MUST_BE_CAPTIALIZED);
25
- }
26
- component.processNestedOrRepeatedElement(path, tracker, componentCls, name === "repeat");
10
+ const tagData = (0, ast_helpers_1.getJSXElementData)(path);
11
+ switch (tagData.type) {
12
+ case "stub":
13
+ case "nested":
27
14
  path.traverse(errorIfJSXelementsFoundUnderNested);
28
- }
29
- else if (namespace === "stub") {
30
- // TODO: ensure there is nothing inside and no other attributes.
31
- // alternatively, allow attributes to control the stub.
32
- config_1.wallaceConfig.ensureFlagIstrue(path, config_1.FlagValue.allowStubs);
33
- component.processStub(path, name, tracker);
34
- }
35
- else {
36
- (0, errors_1.error)(path, errors_1.ERROR_MESSAGES.UNSUPPORTED_NAMESPACE);
37
- }
15
+ component.processNestedComponentTagNode(path, tracker, tagData.name, tagData.repeat, tagData.type === "stub");
16
+ break;
17
+ case "normal":
18
+ component.processJSXElement(path, tracker, tagData.name, exports.jsxVisitors);
19
+ break;
38
20
  }
39
21
  path.remove();
40
22
  },
@@ -1 +1 @@
1
- {"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../src/visitors/jsx.ts"],"names":[],"mappings":";;;AAEA,gDAAmD;AACnD,sCAAqD;AAErD,sCAAkD;AAClD,oCAAyC;AAOzC,qEAAqE;AACrE,uEAAuE;AAC1D,QAAA,WAAW,GAAG;IACzB,UAAU,CACR,IAA0B,EAC1B,EAAE,SAAS,EAAE,OAAO,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAS;QAErF,MAAM,OAAO,GAAG,IAAA,+BAAiB,EAAC,IAAI,CAAC,CAAC;QACxC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,IAAA,qBAAa,EAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,IAAA,cAAK,EAAC,IAAI,EAAE,uBAAc,CAAC,4BAA4B,CAAC,CAAC;YAC3D,CAAC;YACD,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAW,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;YACpC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACzC,MAAM,YAAY,GAAG,SAAS,CAAC;gBAC/B,IAAI,CAAC,IAAA,qBAAa,EAAC,YAAY,CAAC,EAAE,CAAC;oBACjC,IAAA,cAAK,EAAC,IAAI,EAAE,uBAAc,CAAC,oCAAoC,CAAC,CAAC;gBACnE,CAAC;gBACD,SAAS,CAAC,8BAA8B,CACtC,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,IAAI,KAAK,QAAQ,CAClB,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC;YACpD,CAAC;iBAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBAChC,gEAAgE;gBAChE,uDAAuD;gBACvD,sBAAa,CAAC,gBAAgB,CAAC,IAAI,EAAE,kBAAS,CAAC,UAAU,CAAC,CAAC;gBAC3D,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,IAAA,cAAK,EAAC,IAAI,EAAE,uBAAc,CAAC,qBAAqB,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,IAAuB,EAAE,EAAE,SAAS,EAAE,OAAO,EAAS;QAC5D,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAClC,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IACD,sBAAsB,CACpB,IAAsC,EACtC,EAAE,SAAS,EAAE,OAAO,EAAS;QAE7B,IAAI,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAC;QACnD,kFAAkF;QAClF,sBAAsB;QACtB,SAAS,CAAC,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,SAAS,qCAAqC,CAAC,YAAoB;IACjE,OAAO;QACL,UAAU,CAAC,IAA0B;YACnC,IAAA,cAAK,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,mCAAmC,GAAG,qCAAqC,CAC/E,uBAAc,CAAC,uCAAuC,CACvD,CAAC;AAEF,MAAM,kCAAkC,GAAG,qCAAqC,CAC9E,uBAAc,CAAC,8BAA8B,CAC9C,CAAC"}
1
+ {"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../src/visitors/jsx.ts"],"names":[],"mappings":";;;AAEA,gDAAmD;AAEnD,sCAAkD;AAOlD,qEAAqE;AACrE,uEAAuE;AAC1D,QAAA,WAAW,GAAG;IACzB,UAAU,CACR,IAA0B,EAC1B,EAAE,SAAS,EAAE,OAAO,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAS;QAErF,MAAM,OAAO,GAAG,IAAA,+BAAiB,EAAC,IAAI,CAAC,CAAC;QACxC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,MAAM,CAAC;YACZ,KAAK,QAAQ;gBACX,IAAI,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC;gBAClD,SAAS,CAAC,6BAA6B,CACrC,IAAI,EACJ,OAAO,EACP,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,IAAI,KAAK,MAAM,CACxB,CAAC;gBACF,MAAM;YACR,KAAK,QAAQ;gBACX,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,mBAAW,CAAC,CAAC;gBACtE,MAAM;QACV,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,IAAuB,EAAE,EAAE,SAAS,EAAE,OAAO,EAAS;QAC5D,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAClC,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IACD,sBAAsB,CACpB,IAAsC,EACtC,EAAE,SAAS,EAAE,OAAO,EAAS;QAE7B,IAAI,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAC;QACnD,kFAAkF;QAClF,sBAAsB;QACtB,SAAS,CAAC,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;CACF,CAAC;AAEF,SAAS,qCAAqC,CAAC,YAAoB;IACjE,OAAO;QACL,UAAU,CAAC,IAA0B;YACnC,IAAA,cAAK,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,mCAAmC,GAAG,qCAAqC,CAC/E,uBAAc,CAAC,uCAAuC,CACvD,CAAC;AAEF,MAAM,kCAAkC,GAAG,qCAAqC,CAC9E,uBAAc,CAAC,8BAA8B,CAC9C,CAAC"}
@@ -1,25 +1,33 @@
1
1
  import type { NodePath } from "@babel/core";
2
- import type { AssignmentExpression, FunctionDeclaration, Identifier, IfStatement, MemberExpression, VariableDeclarator } from "@babel/types";
3
- /**
4
- * Very simple visitor which replaces the entire if statement with its consequent or
5
- * alternate.
6
- *
7
- * The test must be in this exact format:
8
- *
9
- * if (wallaceConfig.flags.allowStubs) {}
10
- *
11
- */
2
+ import type { IfStatement, VariableDeclarator } from "@babel/types";
12
3
  export declare const flagVisitor: {
4
+ /**
5
+ * Conditionally removes statement/expressions/identifiers etc...
6
+ * based on leading comments:
7
+ *
8
+ * #INCLUDE-IF: allowCtrl
9
+ * #EXCLUDE-IF: allowCtrl
10
+ *
11
+ * WARNING: NOT RELIABLE! It sometimes knocks out subsequent nodes, so only use on
12
+ * ende nodes.
13
+ */
14
+ enter(path: NodePath): void;
15
+ /**
16
+ * Replaces the entire if statement with its consequent or alternate:
17
+ *
18
+ * The test must be in this exact format:
19
+ *
20
+ * if (wallaceConfig.flags.allowStubs) {
21
+ * // code to keep
22
+ * } else {
23
+ * // code to remove (optional)
24
+ * }
25
+ *
26
+ * You can't do anything more complex in the test or the conditions.
27
+ * There are places where this can't be used, in which case use a comment.
28
+ */
13
29
  IfStatement(path: NodePath<IfStatement>): void;
14
30
  };
15
- /**
16
- * This set of visitors removes references to `ctrl`.
17
- */
18
- export declare const removeCtrl: {
19
- AssignmentExpression(path: NodePath<AssignmentExpression>): void;
20
- MemberExpression(path: NodePath<MemberExpression>): void;
21
- Identifier(path: NodePath<Identifier>): void;
22
- };
23
31
  /**
24
32
  * This flattens the `update` and `_u` methods into one, which are
25
33
  * only separate to allow parts, as this inproves performance when
@@ -28,9 +36,3 @@ export declare const removeCtrl: {
28
36
  export declare const flattenUpdate: {
29
37
  VariableDeclarator(path: NodePath<VariableDeclarator>): void;
30
38
  };
31
- /**
32
- * Removes the last two parameters from repeaters, which aren't used.
33
- */
34
- export declare const removeRepeaterDetacherParams: {
35
- FunctionDeclaration(path: NodePath<FunctionDeclaration>): void;
36
- };
@@ -1,20 +1,53 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.removeRepeaterDetacherParams = exports.flattenUpdate = exports.removeCtrl = exports.flagVisitor = void 0;
4
- /* These visitors should only run on the wallace/lib source files. */
3
+ exports.flattenUpdate = exports.flagVisitor = void 0;
4
+ /**
5
+ * These visitors should only run on the wallace source files and tests.
6
+ * */
5
7
  const t = require("@babel/types");
8
+ const errors_1 = require("../errors");
6
9
  const config_1 = require("../config");
7
10
  const constants_1 = require("../constants");
8
- /**
9
- * Very simple visitor which replaces the entire if statement with its consequent or
10
- * alternate.
11
- *
12
- * The test must be in this exact format:
13
- *
14
- * if (wallaceConfig.flags.allowStubs) {}
15
- *
16
- */
17
11
  exports.flagVisitor = {
12
+ /**
13
+ * Conditionally removes statement/expressions/identifiers etc...
14
+ * based on leading comments:
15
+ *
16
+ * #INCLUDE-IF: allowCtrl
17
+ * #EXCLUDE-IF: allowCtrl
18
+ *
19
+ * WARNING: NOT RELIABLE! It sometimes knocks out subsequent nodes, so only use on
20
+ * ende nodes.
21
+ */
22
+ enter(path) {
23
+ const leadingComments = path.node.leadingComments;
24
+ if (!leadingComments || leadingComments.length === 0)
25
+ return;
26
+ path.node.leadingComments.forEach(comment => {
27
+ const value = comment.value, include = value.includes("#INCLUDE-IF:"), exclude = value.includes("#EXCLUDE-IF:");
28
+ if (include || exclude) {
29
+ const flag = getFlagFromComment(path, value);
30
+ const flagEnabled = config_1.wallaceConfig.flags[flag];
31
+ if ((flagEnabled && exclude) || (!flagEnabled && include)) {
32
+ path.remove();
33
+ }
34
+ }
35
+ });
36
+ },
37
+ /**
38
+ * Replaces the entire if statement with its consequent or alternate:
39
+ *
40
+ * The test must be in this exact format:
41
+ *
42
+ * if (wallaceConfig.flags.allowStubs) {
43
+ * // code to keep
44
+ * } else {
45
+ * // code to remove (optional)
46
+ * }
47
+ *
48
+ * You can't do anything more complex in the test or the conditions.
49
+ * There are places where this can't be used, in which case use a comment.
50
+ */
18
51
  IfStatement(path) {
19
52
  const test = path.node.test;
20
53
  if (t.isMemberExpression(test)) {
@@ -39,30 +72,6 @@ exports.flagVisitor = {
39
72
  }
40
73
  }
41
74
  };
42
- /**
43
- * This set of visitors removes references to `ctrl`.
44
- */
45
- exports.removeCtrl = {
46
- AssignmentExpression(path) {
47
- // @ts-ignore
48
- if (path.node.right.name === "ctrl") {
49
- path.remove();
50
- }
51
- },
52
- MemberExpression(path) {
53
- // @ts-ignore
54
- const name = path.node.property.name;
55
- if (name === "ctrl") {
56
- path.remove();
57
- }
58
- },
59
- Identifier(path) {
60
- const name = path.node.name;
61
- if (name === "ctrl") {
62
- path.remove();
63
- }
64
- }
65
- };
66
75
  /**
67
76
  * This flattens the `update` and `_u` methods into one, which are
68
77
  * only separate to allow parts, as this inproves performance when
@@ -93,17 +102,13 @@ exports.flattenUpdate = {
93
102
  }
94
103
  }
95
104
  };
96
- /**
97
- * Removes the last two parameters from repeaters, which aren't used.
98
- */
99
- exports.removeRepeaterDetacherParams = {
100
- FunctionDeclaration(path) {
101
- var _a, _b;
102
- // @ts-ignore
103
- if ((_b = (_a = path.node.id) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.endsWith("Repeater")) {
104
- path.node.params.pop();
105
- path.node.params.pop();
106
- }
105
+ function getFlagFromComment(path, comment) {
106
+ const chunks = comment.split(":");
107
+ if (chunks.length !== 2) {
108
+ (0, errors_1.error)(path, "Badly formed compiler comment");
107
109
  }
108
- };
110
+ const flag = chunks[1].trim();
111
+ config_1.wallaceConfig.ensureFlagIsValid(flag);
112
+ return flag;
113
+ }
109
114
  //# sourceMappingURL=library.js.map