babel-plugin-wallace 0.0.2 → 0.0.6

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 (120) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/ast-helpers.d.ts +10 -0
  3. package/dist/ast-helpers.js +52 -0
  4. package/dist/ast-helpers.js.map +1 -0
  5. package/dist/babel-types.d.ts +4 -0
  6. package/dist/babel-types.js +3 -0
  7. package/dist/babel-types.js.map +1 -0
  8. package/dist/config.d.ts +14 -0
  9. package/dist/config.js +47 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/consolidation/ComponentDefinitionData.d.ts +29 -0
  12. package/dist/consolidation/ComponentDefinitionData.js +82 -0
  13. package/dist/consolidation/ComponentDefinitionData.js.map +1 -0
  14. package/dist/consolidation/consolidateComponent.d.ts +6 -0
  15. package/dist/consolidation/consolidateComponent.js +41 -0
  16. package/dist/consolidation/consolidateComponent.js.map +1 -0
  17. package/dist/consolidation/index.d.ts +2 -0
  18. package/dist/consolidation/index.js +8 -0
  19. package/dist/consolidation/index.js.map +1 -0
  20. package/dist/consolidation/processNodes.d.ts +3 -0
  21. package/dist/consolidation/processNodes.js +202 -0
  22. package/dist/consolidation/processNodes.js.map +1 -0
  23. package/dist/consolidation/types.d.ts +15 -0
  24. package/dist/consolidation/types.js +3 -0
  25. package/dist/consolidation/types.js.map +1 -0
  26. package/dist/consolidation/utils.d.ts +21 -0
  27. package/dist/consolidation/utils.js +91 -0
  28. package/dist/consolidation/utils.js.map +1 -0
  29. package/dist/consolidation/visibility.d.ts +5 -0
  30. package/dist/consolidation/visibility.js +43 -0
  31. package/dist/consolidation/visibility.js.map +1 -0
  32. package/dist/constants.d.ts +31 -0
  33. package/dist/constants.js +40 -0
  34. package/dist/constants.js.map +1 -0
  35. package/dist/contexts/handlers.d.ts +18 -0
  36. package/dist/contexts/handlers.js +152 -0
  37. package/dist/contexts/handlers.js.map +1 -0
  38. package/dist/contexts/index.d.ts +2 -0
  39. package/dist/contexts/index.js +6 -0
  40. package/dist/contexts/index.js.map +1 -0
  41. package/dist/contexts/parameters.d.ts +8 -0
  42. package/dist/contexts/parameters.js +114 -0
  43. package/dist/contexts/parameters.js.map +1 -0
  44. package/dist/directives.d.ts +8 -0
  45. package/dist/directives.js +193 -0
  46. package/dist/directives.js.map +1 -0
  47. package/dist/errors.d.ts +34 -0
  48. package/dist/errors.js +47 -0
  49. package/dist/errors.js.map +1 -0
  50. package/dist/helpers.d.ts +4 -0
  51. package/dist/helpers.js +35 -0
  52. package/dist/helpers.js.map +1 -0
  53. package/dist/index.d.ts +10 -0
  54. package/dist/index.js +34 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/models/component.d.ts +25 -0
  57. package/dist/models/component.js +114 -0
  58. package/dist/models/component.js.map +1 -0
  59. package/dist/models/directive.d.ts +13 -0
  60. package/dist/models/directive.js +8 -0
  61. package/dist/models/directive.js.map +1 -0
  62. package/dist/models/index.d.ts +5 -0
  63. package/dist/models/index.js +15 -0
  64. package/dist/models/index.js.map +1 -0
  65. package/dist/models/module.d.ts +12 -0
  66. package/dist/models/module.js +40 -0
  67. package/dist/models/module.js.map +1 -0
  68. package/dist/models/node.d.ts +107 -0
  69. package/dist/models/node.js +327 -0
  70. package/dist/models/node.js.map +1 -0
  71. package/dist/utils.d.ts +13 -0
  72. package/dist/utils.js +66 -0
  73. package/dist/utils.js.map +1 -0
  74. package/dist/visitors/attribute.d.ts +10 -0
  75. package/dist/visitors/attribute.js +82 -0
  76. package/dist/visitors/attribute.js.map +1 -0
  77. package/dist/visitors/jsx.d.ts +13 -0
  78. package/dist/visitors/jsx.js +61 -0
  79. package/dist/visitors/jsx.js.map +1 -0
  80. package/dist/visitors/program.d.ts +12 -0
  81. package/dist/visitors/program.js +26 -0
  82. package/dist/visitors/program.js.map +1 -0
  83. package/dist/writers/define-component.d.ts +7 -0
  84. package/dist/writers/define-component.js +101 -0
  85. package/dist/writers/define-component.js.map +1 -0
  86. package/dist/writers/index.d.ts +1 -0
  87. package/dist/writers/index.js +7 -0
  88. package/dist/writers/index.js.map +1 -0
  89. package/package.json +20 -10
  90. package/README.md +0 -3
  91. package/lib/_config/directives.js +0 -356
  92. package/lib/_config/index.js +0 -2
  93. package/lib/_config/loader.js +0 -43
  94. package/lib/_config/parse_directives.js +0 -63
  95. package/lib/config.js +0 -263
  96. package/lib/convert.js +0 -27
  97. package/lib/definitions/constants.js +0 -73
  98. package/lib/definitions/node_data.js +0 -183
  99. package/lib/definitions/watcher.js +0 -26
  100. package/lib/generate/code_generator.js +0 -333
  101. package/lib/generate/statement_builders.js +0 -130
  102. package/lib/help-system/browser-code.js +0 -50
  103. package/lib/help-system/entry.js +0 -92
  104. package/lib/help-system/error-display.js +0 -20
  105. package/lib/help-system/styles.css +0 -25
  106. package/lib/import-checker.js +0 -35
  107. package/lib/index.js +0 -47
  108. package/lib/jsx/component_dom.js +0 -40
  109. package/lib/jsx/contexts.js +0 -121
  110. package/lib/jsx/extract.js +0 -214
  111. package/lib/jsx/parse.js +0 -98
  112. package/lib/parse/component_templates.js +0 -44
  113. package/lib/parse/inline_directives.js +0 -318
  114. package/lib/parse/parse_node.js +0 -73
  115. package/lib/polyfills.js +0 -10
  116. package/lib/utils/babel.js +0 -100
  117. package/lib/utils/dom.js +0 -174
  118. package/lib/utils/misc.js +0 -152
  119. package/lib_old/handlers.js +0 -52
  120. package/lib_old/index.js +0 -145
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/models/module.ts"],"names":[],"mappings":";;;AAAA,kCAAkC;AAKlC,SAAS,kBAAkB,CACzB,IAAuB,EACvB,IAAY,EACZ,MAAc;IAEd,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,MAAM,eAAe,GAAG,CAAC,CAAC,iBAAiB,CACzC,CAAC,SAAS,CAAC,EACX,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CACxB,CAAC;IACF,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AACjD,CAAC;AAED,MAAa,MAAM;IAIjB,YAAY,IAAuB;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;IACpC,CAAC;IACD,WAAW,CAAC,IAA+B;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvE,MAAM,MAAM,GAAG,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC;YAC1C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;YACrB,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,aAAa,CAAC,IAAiB;QAC7B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,iBAAiB;QACf,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACtC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;gBAChD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA/BD,wBA+BC"}
@@ -0,0 +1,107 @@
1
+ import type { NodePath } from "@babel/core";
2
+ import type { Expression, JSXElement, JSXExpressionContainer, JSXText } from "@babel/types";
3
+ interface Attribute {
4
+ name: string;
5
+ value?: string;
6
+ }
7
+ interface Watch {
8
+ expression: Expression;
9
+ callback: string;
10
+ }
11
+ interface RepeatInstruction {
12
+ expression: Expression;
13
+ componentCls: string;
14
+ poolExpression: Expression | undefined;
15
+ }
16
+ interface EventListener {
17
+ eventName: string;
18
+ callback: Expression;
19
+ }
20
+ interface BindInstruction {
21
+ eventName: string;
22
+ expression: Expression;
23
+ }
24
+ export interface ConditionalDisplay {
25
+ expression: Expression;
26
+ reverse: boolean;
27
+ }
28
+ interface ToggleTrigger {
29
+ name: string;
30
+ expression: Expression;
31
+ }
32
+ interface ToggleTarget {
33
+ name: string;
34
+ value: Expression | string;
35
+ }
36
+ type ValidElementType = JSXElement | JSXExpressionContainer | JSXText;
37
+ export declare class ExtractedNode {
38
+ #private;
39
+ component: any;
40
+ tagName: string;
41
+ element: HTMLElement | Text | undefined;
42
+ isRepeatedNode: boolean;
43
+ repeatNode: ExtractedNode | undefined;
44
+ address: Array<number>;
45
+ path: NodePath<ValidElementType>;
46
+ parent: TagNode;
47
+ watches: Watch[];
48
+ eventListeners: EventListener[];
49
+ bindInstructions: BindInstruction[];
50
+ isNestedClass: boolean;
51
+ repeatExpression: Expression | undefined;
52
+ poolExpression: Expression | undefined;
53
+ /**
54
+ * The sets of classes that may be toggled.
55
+ */
56
+ toggleTargets: ToggleTarget[];
57
+ /**
58
+ * The triggers that cause the classes to be toggled.
59
+ */
60
+ toggleTriggers: ToggleTrigger[];
61
+ constructor(address: Array<number>, path: NodePath<ValidElementType>, parent: TagNode);
62
+ getElement(): HTMLElement | Text;
63
+ addEventListener(eventName: string, callback: Expression): void;
64
+ addBindInstruction(eventName: string, expression: Expression): void;
65
+ addWatch(expression: Expression, callback: string): void;
66
+ addToggleTrigger(name: string, expression: Expression): void;
67
+ addToggleTarget(name: string, value: Expression | string): void;
68
+ watchAttribute(attName: string, expression: Expression): void;
69
+ watchText(expression: Expression): void;
70
+ setProps(expression: Expression): void;
71
+ getProps(): Expression | undefined;
72
+ setConditionalDisplay(expression: Expression, reverse: boolean): void;
73
+ getShieldInfo(): ConditionalDisplay | undefined;
74
+ setRef(name: string): void;
75
+ getRef(): string | undefined;
76
+ setRepeatExpression(expression: Expression): void;
77
+ /**
78
+ * Called on the parent of a repeat.
79
+ */
80
+ getRepeatInstruction(): RepeatInstruction | undefined;
81
+ setStub(name: string): void;
82
+ getStub(): string | undefined;
83
+ setBaseComponent(expression: Expression): void;
84
+ }
85
+ export declare class TagNode extends ExtractedNode {
86
+ parent: TagNode;
87
+ address: Array<number>;
88
+ path: NodePath<JSXElement>;
89
+ attributes: Attribute[];
90
+ constructor(path: NodePath<JSXElement>, address: Array<number>, parent: TagNode, component: any, // TODO: fix type circular import.
91
+ tagName: string, isNestedClass: boolean);
92
+ addFixedAttribute(name: string, value?: string): void;
93
+ getElement(): HTMLElement | undefined;
94
+ }
95
+ export declare class StubNode extends ExtractedNode {
96
+ constructor(path: NodePath<JSXElement>, address: Array<number>, parent: TagNode, name: string);
97
+ getElement(): HTMLElement | Text;
98
+ }
99
+ export declare class DynamicTextNode extends ExtractedNode {
100
+ constructor(path: NodePath<JSXExpressionContainer>, address: Array<number>, parent: TagNode, expression: Expression);
101
+ getElement(): HTMLElement | Text;
102
+ }
103
+ export declare class PlainTextNode extends ExtractedNode {
104
+ constructor(path: NodePath<JSXText>, address: Array<number>, parent: TagNode);
105
+ getElement(): HTMLElement | Text;
106
+ }
107
+ export {};
@@ -0,0 +1,327 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8
+ if (kind === "m") throw new TypeError("Private method is not writable");
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
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
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
+ };
13
+ var _ExtractedNode_stubName, _ExtractedNode_conditionalDisplay, _ExtractedNode_ref, _ExtractedNode_props, _ExtractedNode_forExpression, _ExtractedNode_forVariable;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.PlainTextNode = exports.DynamicTextNode = exports.StubNode = exports.TagNode = exports.ExtractedNode = void 0;
16
+ const utils_1 = require("../utils");
17
+ const errors_1 = require("../errors");
18
+ const constants_1 = require("../constants");
19
+ class ExtractedNode {
20
+ constructor(address, path, parent) {
21
+ this.isRepeatedNode = false;
22
+ this.watches = [];
23
+ this.eventListeners = [];
24
+ this.bindInstructions = [];
25
+ this.isNestedClass = false;
26
+ /**
27
+ * The sets of classes that may be toggled.
28
+ */
29
+ this.toggleTargets = [];
30
+ /**
31
+ * The triggers that cause the classes to be toggled.
32
+ */
33
+ this.toggleTriggers = [];
34
+ _ExtractedNode_stubName.set(this, void 0);
35
+ _ExtractedNode_conditionalDisplay.set(this, void 0);
36
+ _ExtractedNode_ref.set(this, void 0);
37
+ _ExtractedNode_props.set(this, void 0);
38
+ _ExtractedNode_forExpression.set(this, void 0);
39
+ _ExtractedNode_forVariable.set(this, void 0);
40
+ this.path = path;
41
+ this.address = address;
42
+ this.parent = parent;
43
+ }
44
+ getElement() {
45
+ throw new Error("Not implemented");
46
+ }
47
+ addEventListener(eventName, callback) {
48
+ if (this.isNestedClass) {
49
+ (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.NO_ATTRIBUTES_ON_NESTED_CLASS);
50
+ }
51
+ this.eventListeners.push({ eventName, callback });
52
+ }
53
+ addBindInstruction(eventName, expression) {
54
+ if (this.isNestedClass) {
55
+ (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.NO_ATTRIBUTES_ON_NESTED_CLASS);
56
+ }
57
+ this.bindInstructions.push({ eventName, expression });
58
+ }
59
+ addWatch(expression, callback) {
60
+ this.watches.push({
61
+ expression,
62
+ callback,
63
+ });
64
+ }
65
+ addToggleTrigger(name, expression) {
66
+ this.toggleTriggers.push({ name, expression });
67
+ }
68
+ addToggleTarget(name, value) {
69
+ this.toggleTargets.push({ name, value });
70
+ }
71
+ watchAttribute(attName, expression) {
72
+ if (this.isNestedClass) {
73
+ (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.NO_ATTRIBUTES_ON_NESTED_CLASS);
74
+ }
75
+ this.addWatch(expression, (0, utils_1.setAttributeCallback)(attName));
76
+ }
77
+ watchText(expression) {
78
+ this.addWatch(expression, `${constants_1.WATCH_CALLBACK_PARAMS.element}.textContent = n`);
79
+ }
80
+ setProps(expression) {
81
+ if (this.isRepeatedNode) {
82
+ this.setRepeatExpression(expression);
83
+ }
84
+ else {
85
+ if (__classPrivateFieldGet(this, _ExtractedNode_props, "f")) {
86
+ (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.PROPS_ALREADY_DEFINED);
87
+ }
88
+ __classPrivateFieldSet(this, _ExtractedNode_props, expression, "f");
89
+ }
90
+ }
91
+ getProps() {
92
+ return __classPrivateFieldGet(this, _ExtractedNode_props, "f");
93
+ }
94
+ setConditionalDisplay(expression, reverse) {
95
+ if (__classPrivateFieldGet(this, _ExtractedNode_conditionalDisplay, "f")) {
96
+ (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.CONDITIONAL_DISPLAY_ALREADY_DEFINED);
97
+ }
98
+ __classPrivateFieldSet(this, _ExtractedNode_conditionalDisplay, { expression, reverse }, "f");
99
+ }
100
+ getShieldInfo() {
101
+ return __classPrivateFieldGet(this, _ExtractedNode_conditionalDisplay, "f");
102
+ }
103
+ setRef(name) {
104
+ if (__classPrivateFieldGet(this, _ExtractedNode_ref, "f")) {
105
+ (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.REF_ALREADY_DEFINED);
106
+ }
107
+ __classPrivateFieldSet(this, _ExtractedNode_ref, name, "f");
108
+ }
109
+ getRef() {
110
+ return __classPrivateFieldGet(this, _ExtractedNode_ref, "f");
111
+ }
112
+ // TODO: fix not to use directive.
113
+ setRepeatExpression(expression) {
114
+ if (!this.parent) {
115
+ (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.REPEAT_WITHOUT_PARENT);
116
+ }
117
+ // if (this.isRepeatedNode) {
118
+ // error(this.path, ERROR_MESSAGES.REPEAT_ALREADY_DEFINED);
119
+ // }
120
+ // if (!this.isNestedClass) {
121
+ // error(this.path, ERROR_MESSAGES.REPEAT_ONLY_ON_NESTED_CLASS);
122
+ // }
123
+ this.isRepeatedNode = true;
124
+ // While this could potentially be set multiple times, we later check that repeat
125
+ // cannot be used if there siblings.
126
+ this.repeatExpression = expression;
127
+ this.parent.repeatNode = this;
128
+ }
129
+ /**
130
+ * Called on the parent of a repeat.
131
+ */
132
+ getRepeatInstruction() {
133
+ return this.repeatNode
134
+ ? {
135
+ expression: this.repeatNode.repeatExpression,
136
+ componentCls: this.repeatNode.tagName,
137
+ poolExpression: this.repeatNode.poolExpression,
138
+ }
139
+ : undefined;
140
+ }
141
+ setStub(name) {
142
+ if (__classPrivateFieldGet(this, _ExtractedNode_stubName, "f")) {
143
+ (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.STUB_ALREADY_DEFINED);
144
+ }
145
+ __classPrivateFieldSet(this, _ExtractedNode_stubName, name, "f");
146
+ }
147
+ getStub() {
148
+ return __classPrivateFieldGet(this, _ExtractedNode_stubName, "f");
149
+ }
150
+ // setForLoop(expression: Expression, variable: string | undefined) {
151
+ // if (this.#forExpression) {
152
+ // error(this.path, ERROR_MESSAGES.REF_ALREADY_DEFINED);
153
+ // }
154
+ // this.#forVariable = variable;
155
+ // this.#forExpression = expression;
156
+ // }
157
+ // getForLoop():
158
+ // | { expression: Expression; variable: string | undefined }
159
+ // | undefined {
160
+ // if (this.#forExpression) {
161
+ // return { expression: this.#forExpression, variable: this.#forVariable };
162
+ // }
163
+ // }
164
+ setBaseComponent(expression) {
165
+ if (this.component.baseComponent) {
166
+ (0, errors_1.error)(this.path, errors_1.ERROR_MESSAGES.BASE_COMPONENT_ALREADY_DEFINED);
167
+ }
168
+ this.component.baseComponent = expression;
169
+ }
170
+ }
171
+ exports.ExtractedNode = ExtractedNode;
172
+ _ExtractedNode_stubName = new WeakMap(), _ExtractedNode_conditionalDisplay = new WeakMap(), _ExtractedNode_ref = new WeakMap(), _ExtractedNode_props = new WeakMap(), _ExtractedNode_forExpression = new WeakMap(), _ExtractedNode_forVariable = new WeakMap();
173
+ class TagNode extends ExtractedNode {
174
+ // directives: ExtractedDirective[] = [];
175
+ constructor(path, address, parent, component, // TODO: fix type circular import.
176
+ tagName, isNestedClass) {
177
+ super(address, path, parent);
178
+ this.attributes = [];
179
+ this.path = path;
180
+ this.address = address;
181
+ this.component = component;
182
+ this.tagName = tagName;
183
+ this.parent = parent;
184
+ this.isNestedClass = isNestedClass;
185
+ }
186
+ addFixedAttribute(name, value) {
187
+ this.attributes.push({ name, value });
188
+ }
189
+ getElement() {
190
+ if (this.isRepeatedNode) {
191
+ return undefined;
192
+ }
193
+ const element = (0, utils_1.createElement)(this.tagName);
194
+ this.attributes.forEach(({ name, value }) => {
195
+ element.setAttribute(name, value || "");
196
+ });
197
+ this.element = element;
198
+ return this.element;
199
+ }
200
+ }
201
+ exports.TagNode = TagNode;
202
+ class StubNode extends ExtractedNode {
203
+ constructor(path, address, parent, name) {
204
+ super(address, path, parent);
205
+ this.setStub(name);
206
+ }
207
+ getElement() {
208
+ this.element = (0, utils_1.createElement)("div");
209
+ return this.element;
210
+ }
211
+ }
212
+ exports.StubNode = StubNode;
213
+ class DynamicTextNode extends ExtractedNode {
214
+ constructor(path, address, parent, expression) {
215
+ super(address, path, parent);
216
+ this.watchText(expression);
217
+ }
218
+ getElement() {
219
+ this.element = (0, utils_1.createElement)("span");
220
+ return this.element;
221
+ }
222
+ }
223
+ exports.DynamicTextNode = DynamicTextNode;
224
+ class PlainTextNode extends ExtractedNode {
225
+ constructor(path, address, parent) {
226
+ super(address, path, parent);
227
+ }
228
+ getElement() {
229
+ // @ts-ignore
230
+ this.element = (0, utils_1.createTextNode)(this.path.node.value);
231
+ return this.element;
232
+ }
233
+ }
234
+ exports.PlainTextNode = PlainTextNode;
235
+ // class NodeData {
236
+ // constructor(path, module, component, parentNodeData, nodeTreeAddress) {
237
+ // this.path = path;
238
+ // this.module = module;
239
+ // this.component = component;
240
+ // this.parentNodeData = parentNodeData;
241
+ // this.nodeTreeAddress = nodeTreeAddress;
242
+ // this.nestedClass = undefined;
243
+ // this.isRepeat = false;
244
+ // this.props = undefined;
245
+ // this.shieldQuery = undefined;
246
+ // this.reverseShield = 0;
247
+ // this.buildCalls = [];
248
+ // this.watches = [];
249
+ // this.seq = 0;
250
+ // }
251
+ // isDynamic() {
252
+ // return (
253
+ // this.watches.length > 0 ||
254
+ // this.buildCalls.length > 0 ||
255
+ // this.props ||
256
+ // this.nestedClass ||
257
+ // this.shieldQuery
258
+ // );
259
+ // }
260
+ // /**
261
+ // * Creates a watch on this node.
262
+ // *
263
+ // * @param {string} watch - the field or function to watch.
264
+ // * @param {string} converter - the value to pass to method, or free function call if
265
+ // * property is not supplied.
266
+ // * @param {string} property - the method on the wrapper (Can even be dotted
267
+ // * `style.color`).
268
+ // */
269
+ // addWatch(watch, converter, property) {
270
+ // this.watches.push({ watch, converter, property });
271
+ // }
272
+ // /**
273
+ // * Creates an event listener on this node.
274
+ // * Slot will be expanded.
275
+ // *
276
+ // * @param {string} event
277
+ // * @param {string} slot
278
+ // */
279
+ // addEventListener(event, code) {
280
+ // this.module.requireImport(builderCalls.onEvent);
281
+ // const callback = `function(${eventCallbackArgs}) {${code}}`;
282
+ // this.addBuildCall(builderCalls.onEvent, [
283
+ // componentRefInBuild,
284
+ // `'${event.toLowerCase()}'`,
285
+ // callback,
286
+ // ]);
287
+ // }
288
+ // addBuildCall(functionName, args) {
289
+ // this.buildCalls.push([functionName, ...args]);
290
+ // }
291
+ // saveAs(name) {
292
+ // this.module.requireImport(builderCalls.saveAs);
293
+ // this.addBuildCall(builderCalls.saveAs, [
294
+ // componentRefInBuild,
295
+ // literal(name),
296
+ // ]);
297
+ // }
298
+ // requireImport(name, source, alias) {
299
+ // // TODO: make it use alias
300
+ // this.module.requireImport(name, source, alias);
301
+ // }
302
+ // repeat(data, key) {
303
+ // // There is no transform here. Should we allow it?
304
+ // const parent = this.parentNodeData;
305
+ // if (parent === undefined) {
306
+ // // TODO: throw better error, and assert parent has no other children.
307
+ // throw Error("For must be used under a parent.");
308
+ // }
309
+ // let getPoolCall;
310
+ // if (key) {
311
+ // const keyFn = `function(props) {return props.${key}}`;
312
+ // this.requireImport(builderCalls.getKeyedPool);
313
+ // getPoolCall = `${builderCalls.getKeyedPool}(${this.nestedClass}, ${keyFn})`;
314
+ // } else {
315
+ // this.requireImport(builderCalls.getSequentialPool);
316
+ // getPoolCall = `${builderCalls.getSequentialPool}(${this.nestedClass})`;
317
+ // }
318
+ // this.requireImport(builderCalls.initRepeater);
319
+ // parent.addBuildCall(builderCalls.initRepeater, [
320
+ // componentRefInBuild,
321
+ // getPoolCall,
322
+ // ]);
323
+ // parent.addWatch(alwaysUpdate, `w.gkItems(${data})`);
324
+ // this.isRepeat = true;
325
+ // }
326
+ // }
327
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/models/node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAOA,oCAA+E;AAC/E,sCAAkD;AAClD,4CAAqD;AA+CrD,MAAa,aAAa;IA6BxB,YACE,OAAsB,EACtB,IAAgC,EAChC,MAAe;QA5BjB,mBAAc,GAAY,KAAK,CAAC;QAKhC,YAAO,GAAY,EAAE,CAAC;QACtB,mBAAc,GAAoB,EAAE,CAAC;QACrC,qBAAgB,GAAsB,EAAE,CAAC;QACzC,kBAAa,GAAY,KAAK,CAAC;QAG/B;;WAEG;QACH,kBAAa,GAAmB,EAAE,CAAC;QACnC;;WAEG;QACH,mBAAc,GAAoB,EAAE,CAAC;QACrC,0CAA8B;QAC9B,oDAAoD;QACpD,qCAAyB;QACzB,uCAA+B;QAC/B,+CAAuC;QACvC,6CAAiC;QAM/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IACD,UAAU;QACR,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IACD,gBAAgB,CAAC,SAAiB,EAAE,QAAoB;QACtD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAA,cAAK,EAAC,IAAI,CAAC,IAAI,EAAE,uBAAc,CAAC,6BAA6B,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,kBAAkB,CAAC,SAAiB,EAAE,UAAsB;QAC1D,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAA,cAAK,EAAC,IAAI,CAAC,IAAI,EAAE,uBAAc,CAAC,6BAA6B,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,QAAQ,CAAC,UAAsB,EAAE,QAAgB;QAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,UAAU;YACV,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IACD,gBAAgB,CAAC,IAAY,EAAE,UAAsB;QACnD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,eAAe,CAAC,IAAY,EAAE,KAA0B;QACtD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,cAAc,CAAC,OAAe,EAAE,UAAsB;QACpD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAA,cAAK,EAAC,IAAI,CAAC,IAAI,EAAE,uBAAc,CAAC,6BAA6B,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,SAAS,CAAC,UAAsB;QAC9B,IAAI,CAAC,QAAQ,CACX,UAAU,EACV,GAAG,iCAAqB,CAAC,OAAO,kBAAkB,CACnD,CAAC;IACJ,CAAC;IACD,QAAQ,CAAC,UAAsB;QAC7B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,IAAI,uBAAA,IAAI,4BAAO,EAAE,CAAC;gBAChB,IAAA,cAAK,EAAC,IAAI,CAAC,IAAI,EAAE,uBAAc,CAAC,qBAAqB,CAAC,CAAC;YACzD,CAAC;YACD,uBAAA,IAAI,wBAAU,UAAU,MAAA,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,QAAQ;QACN,OAAO,uBAAA,IAAI,4BAAO,CAAC;IACrB,CAAC;IACD,qBAAqB,CAAC,UAAsB,EAAE,OAAgB;QAC5D,IAAI,uBAAA,IAAI,yCAAoB,EAAE,CAAC;YAC7B,IAAA,cAAK,EAAC,IAAI,CAAC,IAAI,EAAE,uBAAc,CAAC,mCAAmC,CAAC,CAAC;QACvE,CAAC;QACD,uBAAA,IAAI,qCAAuB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAA,CAAC;IACrD,CAAC;IACD,aAAa;QACX,OAAO,uBAAA,IAAI,yCAAoB,CAAC;IAClC,CAAC;IACD,MAAM,CAAC,IAAY;QACjB,IAAI,uBAAA,IAAI,0BAAK,EAAE,CAAC;YACd,IAAA,cAAK,EAAC,IAAI,CAAC,IAAI,EAAE,uBAAc,CAAC,mBAAmB,CAAC,CAAC;QACvD,CAAC;QACD,uBAAA,IAAI,sBAAQ,IAAI,MAAA,CAAC;IACnB,CAAC;IACD,MAAM;QACJ,OAAO,uBAAA,IAAI,0BAAK,CAAC;IACnB,CAAC;IACD,kCAAkC;IAClC,mBAAmB,CAAC,UAAsB;QACxC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAA,cAAK,EAAC,IAAI,CAAC,IAAI,EAAE,uBAAc,CAAC,qBAAqB,CAAC,CAAC;QACzD,CAAC;QACD,6BAA6B;QAC7B,6DAA6D;QAC7D,IAAI;QACJ,6BAA6B;QAC7B,kEAAkE;QAClE,IAAI;QACJ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,iFAAiF;QACjF,oCAAoC;QACpC,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAChC,CAAC;IACD;;OAEG;IACH,oBAAoB;QAClB,OAAO,IAAI,CAAC,UAAU;YACpB,CAAC,CAAC;gBACE,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB;gBAC5C,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO;gBACrC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc;aAC/C;YACH,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,IAAY;QAClB,IAAI,uBAAA,IAAI,+BAAU,EAAE,CAAC;YACnB,IAAA,cAAK,EAAC,IAAI,CAAC,IAAI,EAAE,uBAAc,CAAC,oBAAoB,CAAC,CAAC;QACxD,CAAC;QACD,uBAAA,IAAI,2BAAa,IAAI,MAAA,CAAC;IACxB,CAAC;IACD,OAAO;QACL,OAAO,uBAAA,IAAI,+BAAU,CAAC;IACxB,CAAC;IACD,qEAAqE;IACrE,+BAA+B;IAC/B,4DAA4D;IAC5D,MAAM;IACN,kCAAkC;IAClC,sCAAsC;IACtC,IAAI;IACJ,gBAAgB;IAChB,+DAA+D;IAC/D,kBAAkB;IAClB,+BAA+B;IAC/B,+EAA+E;IAC/E,MAAM;IACN,IAAI;IACJ,gBAAgB,CAAC,UAAsB;QACrC,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;YACjC,IAAA,cAAK,EAAC,IAAI,CAAC,IAAI,EAAE,uBAAc,CAAC,8BAA8B,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,UAAU,CAAC;IAC5C,CAAC;CACF;AAtKD,sCAsKC;;AAED,MAAa,OAAQ,SAAQ,aAAa;IAKxC,yCAAyC;IACzC,YACE,IAA0B,EAC1B,OAAsB,EACtB,MAAe,EACf,SAAc,EAAE,kCAAkC;IAClD,OAAe,EACf,aAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAV/B,eAAU,GAAgB,EAAE,CAAC;QAW3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IACD,iBAAiB,CAAC,IAAY,EAAE,KAAc;QAC5C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,UAAU;QACR,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,qBAAa,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;YAC1C,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AApCD,0BAoCC;AAED,MAAa,QAAS,SAAQ,aAAa;IACzC,YACE,IAA0B,EAC1B,OAAsB,EACtB,MAAe,EACf,IAAY;QAEZ,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IACD,UAAU;QACR,IAAI,CAAC,OAAO,GAAG,IAAA,qBAAa,EAAC,KAAK,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAdD,4BAcC;AAED,MAAa,eAAgB,SAAQ,aAAa;IAChD,YACE,IAAsC,EACtC,OAAsB,EACtB,MAAe,EACf,UAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IACD,UAAU;QACR,IAAI,CAAC,OAAO,GAAG,IAAA,qBAAa,EAAC,MAAM,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAdD,0CAcC;AAED,MAAa,aAAc,SAAQ,aAAa;IAC9C,YACE,IAAuB,EACvB,OAAsB,EACtB,MAAe;QAEf,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,UAAU;QACR,aAAa;QACb,IAAI,CAAC,OAAO,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAbD,sCAaC;AAED,mBAAmB;AACnB,4EAA4E;AAC5E,wBAAwB;AACxB,4BAA4B;AAC5B,kCAAkC;AAClC,4CAA4C;AAC5C,8CAA8C;AAC9C,oCAAoC;AACpC,6BAA6B;AAC7B,8BAA8B;AAC9B,oCAAoC;AACpC,8BAA8B;AAC9B,4BAA4B;AAC5B,yBAAyB;AACzB,oBAAoB;AACpB,MAAM;AACN,kBAAkB;AAClB,eAAe;AACf,mCAAmC;AACnC,sCAAsC;AACtC,sBAAsB;AACtB,4BAA4B;AAC5B,yBAAyB;AACzB,SAAS;AACT,MAAM;AACN,QAAQ;AACR,qCAAqC;AACrC,OAAO;AACP,+DAA+D;AAC/D,yFAAyF;AACzF,+DAA+D;AAC/D,gFAAgF;AAChF,yDAAyD;AACzD,QAAQ;AACR,2CAA2C;AAC3C,yDAAyD;AACzD,MAAM;AACN,QAAQ;AACR,+CAA+C;AAC/C,8BAA8B;AAC9B,OAAO;AACP,6BAA6B;AAC7B,4BAA4B;AAC5B,QAAQ;AACR,oCAAoC;AACpC,uDAAuD;AACvD,mEAAmE;AACnE,gDAAgD;AAChD,6BAA6B;AAC7B,oCAAoC;AACpC,kBAAkB;AAClB,UAAU;AACV,MAAM;AACN,uCAAuC;AACvC,qDAAqD;AACrD,MAAM;AACN,mBAAmB;AACnB,sDAAsD;AACtD,+CAA+C;AAC/C,6BAA6B;AAC7B,uBAAuB;AACvB,UAAU;AACV,MAAM;AACN,yCAAyC;AACzC,iCAAiC;AACjC,sDAAsD;AACtD,MAAM;AACN,wBAAwB;AACxB,yDAAyD;AACzD,0CAA0C;AAC1C,kCAAkC;AAClC,8EAA8E;AAC9E,yDAAyD;AACzD,QAAQ;AACR,uBAAuB;AACvB,iBAAiB;AACjB,+DAA+D;AAC/D,uDAAuD;AACvD,qFAAqF;AACrF,eAAe;AACf,4DAA4D;AAC5D,gFAAgF;AAChF,QAAQ;AAER,qDAAqD;AACrD,uDAAuD;AACvD,6BAA6B;AAC7B,qBAAqB;AACrB,UAAU;AAEV,2DAA2D;AAC3D,4BAA4B;AAC5B,MAAM;AACN,IAAI"}
@@ -0,0 +1,13 @@
1
+ import type { Statement } from "@babel/types";
2
+ export declare function createElement(tagName: string): HTMLElement;
3
+ export declare function createTextNode(text: string): Text;
4
+ export declare function setAttributeCallback(attName: string): string;
5
+ export declare function isCapitalized(s: string): boolean;
6
+ export declare function escapeSingleQuotes(text: string): string;
7
+ export declare function escapeDoubleQuotes(text: string): string;
8
+ /**
9
+ * Strips extraneous whitespace from HTML
10
+ */
11
+ export declare function stripHtml(htmlString: string): string;
12
+ export declare function arrayStartsWith(origin: Array<any>, test: Array<any>): boolean;
13
+ export declare function codeToNode(code: string): Statement[];
package/dist/utils.js ADDED
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createElement = createElement;
4
+ exports.createTextNode = createTextNode;
5
+ exports.setAttributeCallback = setAttributeCallback;
6
+ exports.isCapitalized = isCapitalized;
7
+ exports.escapeSingleQuotes = escapeSingleQuotes;
8
+ exports.escapeDoubleQuotes = escapeDoubleQuotes;
9
+ exports.stripHtml = stripHtml;
10
+ exports.arrayStartsWith = arrayStartsWith;
11
+ exports.codeToNode = codeToNode;
12
+ const jsdom_1 = require("jsdom");
13
+ const babel = require("@babel/core");
14
+ const constants_1 = require("./constants");
15
+ const document = new jsdom_1.JSDOM("<!DOCTYPE html>").window.document;
16
+ function createElement(tagName) {
17
+ return document.createElement(tagName);
18
+ }
19
+ function createTextNode(text) {
20
+ return document.createTextNode(text);
21
+ }
22
+ function setAttributeCallback(attName) {
23
+ attName = attName === "class" ? "className" : attName;
24
+ return `${constants_1.WATCH_CALLBACK_PARAMS.element}.${attName} = ${constants_1.WATCH_CALLBACK_PARAMS.newValue}`;
25
+ // TODO: determine if non-standart att and use setAttribute() instead?
26
+ }
27
+ const REGEX_CAPITALIZED = new RegExp(/^[A-Z].*/);
28
+ function isCapitalized(s) {
29
+ return REGEX_CAPITALIZED.test(s);
30
+ }
31
+ function escapeSingleQuotes(text) {
32
+ return text.replace(/'/g, "\\'");
33
+ }
34
+ function escapeDoubleQuotes(text) {
35
+ return text.replace(/"/g, '\\"');
36
+ }
37
+ /**
38
+ * Strips extraneous whitespace from HTML
39
+ */
40
+ function stripHtml(htmlString) {
41
+ return htmlString
42
+ .replace(/\n/g, "")
43
+ .replace(/[\t ]+\</g, " <")
44
+ .replace(/\>[\t ]+$/g, "> ")
45
+ .replace(/\>[\t ]+\</g, "><")
46
+ .trim();
47
+ }
48
+ function arrayStartsWith(origin, test) {
49
+ if (test.length <= origin.length) {
50
+ return false;
51
+ }
52
+ for (const [i, v] of origin.entries()) {
53
+ if (test[i] !== v) {
54
+ return false;
55
+ }
56
+ }
57
+ return true;
58
+ }
59
+ function codeToNode(code) {
60
+ const statement = babel.template.ast(code);
61
+ if (statement instanceof Array) {
62
+ return statement;
63
+ }
64
+ return [statement];
65
+ }
66
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;AAQA,sCAEC;AAED,wCAEC;AAED,oDAIC;AAID,sCAEC;AAED,gDAEC;AAED,gDAEC;AAKD,8BAOC;AAED,0CAUC;AAED,gCAMC;AAlED,iCAA8B;AAE9B,qCAAqC;AAErC,2CAAoD;AAEpD,MAAM,QAAQ,GAAG,IAAI,aAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AAE9D,SAAgB,aAAa,CAAC,OAAe;IAC3C,OAAO,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,cAAc,CAAC,IAAY;IACzC,OAAO,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,oBAAoB,CAAC,OAAe;IAClD,OAAO,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;IACtD,OAAO,GAAG,iCAAqB,CAAC,OAAO,IAAI,OAAO,MAAM,iCAAqB,CAAC,QAAQ,EAAE,CAAC;IACzF,sEAAsE;AACxE,CAAC;AAED,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;AAEjD,SAAgB,aAAa,CAAC,CAAS;IACrC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,UAAkB;IAC1C,OAAO,UAAU;SACd,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;SAClB,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1B,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;SAC3B,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;SAC5B,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,eAAe,CAAC,MAAkB,EAAE,IAAgB;IAClE,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,UAAU,CAAC,IAAY;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,SAAS,YAAY,KAAK,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,CAAC,SAAS,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { NodePath } from "@babel/core";
2
+ import type { JSXAttribute } from "@babel/types";
3
+ import { TagNode } from "../models";
4
+ interface State {
5
+ extractedNode: TagNode;
6
+ }
7
+ export declare const attributeVisitors: {
8
+ JSXAttribute(path: NodePath<JSXAttribute>, { extractedNode }: State): void;
9
+ };
10
+ export {};
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.attributeVisitors = void 0;
4
+ const t = require("@babel/types");
5
+ const config_1 = require("../config");
6
+ const errors_1 = require("../errors");
7
+ const ast_helpers_1 = require("../ast-helpers");
8
+ /**
9
+ * Name could be:
10
+ * foo
11
+ * foo:bar
12
+ *
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
+ return { type: "expression", expression: expression };
41
+ }
42
+ else if (value === null) {
43
+ return { type: "null" };
44
+ }
45
+ else {
46
+ (0, errors_1.error)(path, errors_1.ERROR_MESSAGES.JSX_ELEMENTS_NOT_ALLOWED_IN_EXPRESSIONS);
47
+ }
48
+ }
49
+ exports.attributeVisitors = {
50
+ JSXAttribute(path, { extractedNode }) {
51
+ if (extractedNode.path.node !== path.parentPath.parentPath.node) {
52
+ // We exit here as otherwise we'd traverse attributes of nested JSXElements too.
53
+ return;
54
+ }
55
+ const { base, qualifier } = extractName(path);
56
+ const extractedValue = extractValue(path);
57
+ const isEventHandler = extractedValue.type === "expression" && base.startsWith("on");
58
+ const directiveClass = isEventHandler
59
+ ? config_1.gleekitConfig.directives["on*"]
60
+ : config_1.gleekitConfig.directives[base];
61
+ if (directiveClass) {
62
+ const handler = new directiveClass();
63
+ handler.apply(extractedNode, extractedValue, qualifier, base);
64
+ }
65
+ else {
66
+ const attName = qualifier ? `${base}:${qualifier}` : base;
67
+ switch (extractedValue.type) {
68
+ case "expression":
69
+ extractedNode.watchAttribute(attName, extractedValue.expression);
70
+ break;
71
+ case "string":
72
+ extractedNode.addFixedAttribute(attName, extractedValue.value);
73
+ break;
74
+ case "null":
75
+ extractedNode.addFixedAttribute(attName);
76
+ break;
77
+ }
78
+ }
79
+ path.remove();
80
+ },
81
+ };
82
+ //# sourceMappingURL=attribute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribute.js","sourceRoot":"","sources":["../../src/visitors/attribute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { NodePath } from "@babel/core";
2
+ import type { JSXElement, JSXExpressionContainer, JSXText } from "@babel/types";
3
+ import { Component, WalkTracker } from "../models";
4
+ interface State {
5
+ component: Component;
6
+ tracker?: WalkTracker;
7
+ }
8
+ export declare const jsxVisitors: {
9
+ JSXElement(path: NodePath<JSXElement>, { component, tracker }: State): void;
10
+ JSXText(path: NodePath<JSXText>, { component, tracker }: State): void;
11
+ JSXExpressionContainer(path: NodePath<JSXExpressionContainer>, { component, tracker }: State): void;
12
+ };
13
+ export {};