@kurot/cli 1.3.0 → 2.0.1
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/CHANGELOG.md +43 -0
- package/README.md +118 -330
- package/dist/core/components/discover-components.d.ts.map +1 -1
- package/dist/core/components/discover-components.js +7 -15
- package/dist/core/components/discover-components.js.map +1 -1
- package/dist/core/config.d.ts +8 -16
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +12 -4
- package/dist/core/config.js.map +1 -1
- package/dist/core/dev-server.d.ts +1 -1
- package/dist/core/dev-server.js +13 -13
- package/dist/core/dev-server.js.map +1 -1
- package/dist/core/diagnostics/codes.d.ts +3 -6
- package/dist/core/diagnostics/codes.d.ts.map +1 -1
- package/dist/core/diagnostics/codes.js +4 -10
- package/dist/core/diagnostics/codes.js.map +1 -1
- package/dist/core/diagnostics/output.d.ts +1 -1
- package/dist/core/diagnostics/output.d.ts.map +1 -1
- package/dist/core/{exml → kui}/ast.d.ts +17 -107
- package/dist/core/kui/ast.d.ts.map +1 -0
- package/dist/core/kui/ast.js +8 -0
- package/dist/core/{exml → kui}/ast.js.map +1 -1
- package/dist/core/kui/codegen.d.ts.map +1 -0
- package/dist/core/{exml → kui}/codegen.js +17 -177
- package/dist/core/kui/codegen.js.map +1 -0
- package/dist/core/kui/index.d.ts +29 -0
- package/dist/core/kui/index.d.ts.map +1 -0
- package/dist/core/kui/index.js +23 -0
- package/dist/core/kui/index.js.map +1 -0
- package/dist/core/{exml/exml-diagnostics.d.ts → kui/kui-diagnostics.d.ts} +2 -2
- package/dist/core/kui/kui-diagnostics.d.ts.map +1 -0
- package/dist/core/{exml/exml-diagnostics.js → kui/kui-diagnostics.js} +4 -4
- package/dist/core/kui/kui-diagnostics.js.map +1 -0
- package/dist/core/kui/kui-parser.d.ts +7 -0
- package/dist/core/kui/kui-parser.d.ts.map +1 -0
- package/dist/core/kui/kui-parser.js +153 -0
- package/dist/core/kui/kui-parser.js.map +1 -0
- package/dist/core/{exml → kui}/registry.d.ts +3 -26
- package/dist/core/kui/registry.d.ts.map +1 -0
- package/dist/core/{exml → kui}/registry.js +12 -43
- package/dist/core/kui/registry.js.map +1 -0
- package/dist/core/{exml → kui}/skin-module-builder.d.ts +6 -6
- package/dist/core/kui/skin-module-builder.d.ts.map +1 -0
- package/dist/core/{exml → kui}/skin-module-builder.js +7 -6
- package/dist/core/kui/skin-module-builder.js.map +1 -0
- package/dist/core/kui/skin-parts-declaration.d.ts.map +1 -0
- package/dist/core/{exml → kui}/skin-parts-declaration.js +2 -2
- package/dist/core/kui/skin-parts-declaration.js.map +1 -0
- package/dist/core/kui/source-location.d.ts.map +1 -0
- package/dist/core/kui/source-location.js.map +1 -0
- package/dist/core/namespace-external-plugin.d.ts +1 -1
- package/dist/core/namespace-external-plugin.js +1 -1
- package/dist/core/plugins/compile-custom-namespaces.d.ts +3 -3
- package/dist/core/plugins/compile-custom-namespaces.js +3 -3
- package/dist/core/plugins/compile-kui.d.ts +6 -0
- package/dist/core/plugins/compile-kui.d.ts.map +1 -0
- package/dist/core/plugins/compile-kui.js +167 -0
- package/dist/core/plugins/compile-kui.js.map +1 -0
- package/dist/core/plugins/copy-assets.d.ts +3 -3
- package/dist/core/plugins/copy-assets.d.ts.map +1 -1
- package/dist/core/plugins/copy-assets.js +7 -6
- package/dist/core/plugins/copy-assets.js.map +1 -1
- package/dist/core/plugins/index.d.ts +1 -1
- package/dist/core/plugins/index.d.ts.map +1 -1
- package/dist/core/plugins/index.js +3 -3
- package/dist/core/plugins/index.js.map +1 -1
- package/dist/core/project.d.ts +14 -10
- package/dist/core/project.d.ts.map +1 -1
- package/dist/core/project.js +11 -7
- package/dist/core/project.js.map +1 -1
- package/dist/core/template.js +1 -1
- package/dist/core/template.js.map +1 -1
- package/dist/define.d.ts +1 -1
- package/dist/define.d.ts.map +1 -1
- package/package.json +5 -3
- package/templates/game/kurot.config.ts +3 -3
- package/templates/game/resource/ui/skins/ButtonSkin.kui.xml +8 -0
- package/templates/game/resource/ui/skins/CheckBoxSkin.kui.xml +12 -0
- package/templates/game/resource/ui/skins/ComboBoxSkin.kui.xml +11 -0
- package/templates/game/resource/ui/skins/GroupSkin.kui.xml +6 -0
- package/templates/game/resource/ui/skins/HScrollBarSkin.kui.xml +6 -0
- package/templates/game/resource/ui/skins/HSliderSkin.kui.xml +7 -0
- package/templates/game/resource/ui/skins/ImageSkin.kui.xml +6 -0
- package/templates/game/resource/ui/skins/ItemRendererSkin.kui.xml +7 -0
- package/templates/game/resource/ui/skins/LabelSkin.kui.xml +6 -0
- package/templates/game/resource/ui/skins/ListSkin.kui.xml +9 -0
- package/templates/game/resource/ui/skins/PanelSkin.kui.xml +11 -0
- package/templates/game/resource/ui/skins/ProgressBarSkin.kui.xml +8 -0
- package/templates/game/resource/ui/skins/RadioButtonSkin.kui.xml +12 -0
- package/templates/game/resource/ui/skins/ScrollerSkin.kui.xml +7 -0
- package/templates/game/resource/ui/skins/TabBarSkin.kui.xml +7 -0
- package/templates/game/resource/ui/skins/TextInputSkin.kui.xml +8 -0
- package/templates/game/resource/ui/skins/ToggleButtonSkin.kui.xml +7 -0
- package/templates/game/resource/ui/skins/ToggleSwitchSkin.kui.xml +7 -0
- package/templates/game/resource/ui/skins/VScrollBarSkin.kui.xml +6 -0
- package/templates/game/resource/ui/skins/VSliderSkin.kui.xml +7 -0
- package/templates/game/resource/ui/skins/ViewStackSkin.kui.xml +6 -0
- package/dist/core/exml/ast.d.ts.map +0 -1
- package/dist/core/exml/ast.js +0 -8
- package/dist/core/exml/codegen.d.ts.map +0 -1
- package/dist/core/exml/codegen.js.map +0 -1
- package/dist/core/exml/exml-diagnostics.d.ts.map +0 -1
- package/dist/core/exml/exml-diagnostics.js.map +0 -1
- package/dist/core/exml/exml-parser.d.ts +0 -27
- package/dist/core/exml/exml-parser.d.ts.map +0 -1
- package/dist/core/exml/exml-parser.js +0 -380
- package/dist/core/exml/exml-parser.js.map +0 -1
- package/dist/core/exml/index.d.ts +0 -54
- package/dist/core/exml/index.d.ts.map +0 -1
- package/dist/core/exml/index.js +0 -51
- package/dist/core/exml/index.js.map +0 -1
- package/dist/core/exml/registry.d.ts.map +0 -1
- package/dist/core/exml/registry.js.map +0 -1
- package/dist/core/exml/skin-module-builder.d.ts.map +0 -1
- package/dist/core/exml/skin-module-builder.js.map +0 -1
- package/dist/core/exml/skin-parts-declaration.d.ts.map +0 -1
- package/dist/core/exml/skin-parts-declaration.js.map +0 -1
- package/dist/core/exml/source-location.d.ts.map +0 -1
- package/dist/core/exml/source-location.js.map +0 -1
- package/dist/core/exml/xml-parser.d.ts +0 -86
- package/dist/core/exml/xml-parser.d.ts.map +0 -1
- package/dist/core/exml/xml-parser.js +0 -196
- package/dist/core/exml/xml-parser.js.map +0 -1
- package/dist/core/plugins/compile-exml.d.ts +0 -14
- package/dist/core/plugins/compile-exml.d.ts.map +0 -1
- package/dist/core/plugins/compile-exml.js +0 -256
- package/dist/core/plugins/compile-exml.js.map +0 -1
- package/templates/game/resource/default.thm.json +0 -19
- package/templates/game/resource/skins/eui/ButtonSkin.exml +0 -16
- package/templates/game/resource/skins/eui/CheckBoxSkin.exml +0 -18
- package/templates/game/resource/skins/eui/ComboBoxSkin.exml +0 -31
- package/templates/game/resource/skins/eui/GroupSkin.exml +0 -4
- package/templates/game/resource/skins/eui/HScrollBarSkin.exml +0 -6
- package/templates/game/resource/skins/eui/HSliderSkin.exml +0 -7
- package/templates/game/resource/skins/eui/ImageSkin.exml +0 -4
- package/templates/game/resource/skins/eui/ItemRendererSkin.exml +0 -15
- package/templates/game/resource/skins/eui/LabelSkin.exml +0 -7
- package/templates/game/resource/skins/eui/ListSkin.exml +0 -11
- package/templates/game/resource/skins/eui/PanelSkin.exml +0 -15
- package/templates/game/resource/skins/eui/ProgressBarSkin.exml +0 -11
- package/templates/game/resource/skins/eui/RadioButtonSkin.exml +0 -18
- package/templates/game/resource/skins/eui/ScrollerSkin.exml +0 -8
- package/templates/game/resource/skins/eui/TabBarSkin.exml +0 -6
- package/templates/game/resource/skins/eui/TextInputSkin.exml +0 -22
- package/templates/game/resource/skins/eui/ToggleButtonSkin.exml +0 -21
- package/templates/game/resource/skins/eui/ToggleSwitchSkin.exml +0 -15
- package/templates/game/resource/skins/eui/VScrollBarSkin.exml +0 -6
- package/templates/game/resource/skins/eui/VSliderSkin.exml +0 -7
- package/templates/game/resource/skins/eui/ViewStackSkin.exml +0 -4
- /package/dist/core/{exml → kui}/codegen.d.ts +0 -0
- /package/dist/core/{exml → kui}/skin-parts-declaration.d.ts +0 -0
- /package/dist/core/{exml → kui}/source-location.d.ts +0 -0
- /package/dist/core/{exml → kui}/source-location.js +0 -0
|
@@ -34,7 +34,7 @@ class CodeGenerator {
|
|
|
34
34
|
}
|
|
35
35
|
// ── Private methods ───────────────────────────────────────────────
|
|
36
36
|
emitHeader() {
|
|
37
|
-
this.line(`// Generated from ${this._ir.className || 'Skin'}.
|
|
37
|
+
this.line(`// Generated from ${this._ir.className || 'Skin'}.kui.xml`);
|
|
38
38
|
this.line('// @generated — do not edit manually');
|
|
39
39
|
this.line('');
|
|
40
40
|
}
|
|
@@ -46,15 +46,8 @@ class CodeGenerator {
|
|
|
46
46
|
}
|
|
47
47
|
moduleImports.get(modulePath).add(className);
|
|
48
48
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (!moduleImports.has('@kurot/ui')) {
|
|
52
|
-
moduleImports.set('@kurot/ui', new Set());
|
|
53
|
-
}
|
|
54
|
-
moduleImports.get('@kurot/ui').add('Binding');
|
|
55
|
-
}
|
|
56
|
-
// Egret encodes Rectangle-valued properties such as scale9Grid as a
|
|
57
|
-
// comma-separated EXML attribute (for example "1,3,8,8").
|
|
49
|
+
// KUI keeps rectangle-valued properties such as scale9Grid in the compact
|
|
50
|
+
// comma-separated form used by the runtime compiler.
|
|
58
51
|
if (this.hasPropertyInTree('scale9Grid')) {
|
|
59
52
|
if (!moduleImports.has('@kurot/core')) {
|
|
60
53
|
moduleImports.set('@kurot/core', new Set());
|
|
@@ -68,11 +61,6 @@ class CodeGenerator {
|
|
|
68
61
|
const uiImports = moduleImports.get('@kurot/ui');
|
|
69
62
|
uiImports.add('State');
|
|
70
63
|
uiImports.add('SetProperty');
|
|
71
|
-
for (const state of this._ir.states) {
|
|
72
|
-
for (const override of state.overrides) {
|
|
73
|
-
uiImports.add(override.type);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
64
|
}
|
|
77
65
|
for (const [modulePath, classes] of moduleImports) {
|
|
78
66
|
const names = [...classes].sort().join(', ');
|
|
@@ -95,14 +83,11 @@ class CodeGenerator {
|
|
|
95
83
|
this.line(`skin.height = ${this._ir.height};`);
|
|
96
84
|
}
|
|
97
85
|
for (const prop of this._ir.properties) {
|
|
98
|
-
|
|
99
|
-
this.emitPropertyAssignment('skin', prop.name, prop.value);
|
|
100
|
-
}
|
|
86
|
+
this.emitPropertyAssignment('skin', prop.name, prop.value);
|
|
101
87
|
}
|
|
102
88
|
this.emitNodeDeclarations(this._ir.children);
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const childVars = defaultChildren.map(n => n.varName).join(', ');
|
|
89
|
+
if (this._ir.children.length > 0) {
|
|
90
|
+
const childVars = this._ir.children.map(n => n.varName).join(', ');
|
|
106
91
|
this.line(`skin.elementsContent = [${childVars}];`);
|
|
107
92
|
}
|
|
108
93
|
for (const decl of this._ir.declarations) {
|
|
@@ -120,17 +105,16 @@ class CodeGenerator {
|
|
|
120
105
|
this.emitNodeProperties(node);
|
|
121
106
|
this.emitNodePropertyChildren(node);
|
|
122
107
|
this.emitNodeDeclarations(node.children);
|
|
123
|
-
|
|
124
|
-
if (defaultPropChildren.length > 0) {
|
|
108
|
+
if (node.children.length > 0) {
|
|
125
109
|
const info = lookupComponent(node.className);
|
|
126
110
|
const defaultProp = info?.defaultProperty ?? 'elementsContent';
|
|
127
111
|
const isArray = info?.isArray !== false;
|
|
128
|
-
const childVars =
|
|
112
|
+
const childVars = node.children.map(c => c.varName).join(', ');
|
|
129
113
|
if (isArray) {
|
|
130
114
|
this.line(`${node.varName}.${defaultProp} = [${childVars}];`);
|
|
131
115
|
}
|
|
132
116
|
else {
|
|
133
|
-
this.line(`${node.varName}.${defaultProp} = ${
|
|
117
|
+
this.line(`${node.varName}.${defaultProp} = ${node.children[0].varName};`);
|
|
134
118
|
}
|
|
135
119
|
}
|
|
136
120
|
}
|
|
@@ -138,21 +122,11 @@ class CodeGenerator {
|
|
|
138
122
|
emitNodeCreation(node) {
|
|
139
123
|
this.line(`const ${node.varName} = new ${node.className}();`);
|
|
140
124
|
if (node.id) {
|
|
141
|
-
this.line(`skin
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
// Anonymous state targets still need a stable key for `skin.getPart()`.
|
|
145
|
-
const hasStateProps = node.properties.some(p => p.state);
|
|
146
|
-
if (hasStateProps) {
|
|
147
|
-
this.line(`skin.${node.varName} = ${node.varName};`);
|
|
148
|
-
}
|
|
125
|
+
this.line(`skin[${JSON.stringify(node.id)}] = ${node.varName};`);
|
|
149
126
|
}
|
|
150
127
|
}
|
|
151
128
|
emitNodeProperties(node) {
|
|
152
129
|
for (const prop of node.properties) {
|
|
153
|
-
if (prop.state) {
|
|
154
|
-
continue;
|
|
155
|
-
}
|
|
156
130
|
this.emitPropertyAssignment(node.varName, prop.name, prop.value);
|
|
157
131
|
}
|
|
158
132
|
}
|
|
@@ -168,46 +142,14 @@ class CodeGenerator {
|
|
|
168
142
|
return;
|
|
169
143
|
}
|
|
170
144
|
}
|
|
171
|
-
if (value.type === 'binding') {
|
|
172
|
-
this.emitBinding(target, prop, value.expression);
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
145
|
this.line(`${target}.${prop} = ${this.propertyValueToJS(prop, value)};`);
|
|
176
146
|
}
|
|
177
|
-
emitBinding(target, prop, expression) {
|
|
178
|
-
// Inner braces distinguish template bindings from simple property chains.
|
|
179
|
-
if (expression.includes('{')) {
|
|
180
|
-
const parts = parseBindingTemplate(expression);
|
|
181
|
-
if (parts.some(p => p.type === 'binding')) {
|
|
182
|
-
const templates = [];
|
|
183
|
-
const chainIndex = [];
|
|
184
|
-
for (let i = 0; i < parts.length; i++) {
|
|
185
|
-
if (parts[i].type === 'literal') {
|
|
186
|
-
templates.push(`"${escapeJS(parts[i].value)}"`);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
templates.push(`"${parts[i].value}"`);
|
|
190
|
-
chainIndex.push(i);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
this.line(`Binding.bindProperties(this, [${templates.join(', ')}], [${chainIndex.join(', ')}], ${target}, "${prop}");`);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
this.line(`Binding.bindProperty(this, ["${expression.split('.').join('", "')}"], ${target}, "${prop}");`);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
147
|
emitNodePropertyChildren(node) {
|
|
201
148
|
for (const pc of node.propertyChildren) {
|
|
202
149
|
for (const child of pc.nodes) {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
this.emitNodeCreation(child);
|
|
208
|
-
this.emitNodeProperties(child);
|
|
209
|
-
this.line(`${node.varName}.${pc.propertyName} = ${child.varName};`);
|
|
210
|
-
}
|
|
150
|
+
this.emitNodeCreation(child);
|
|
151
|
+
this.emitNodeProperties(child);
|
|
152
|
+
this.line(`${node.varName}.${pc.propertyName} = ${child.varName};`);
|
|
211
153
|
}
|
|
212
154
|
}
|
|
213
155
|
}
|
|
@@ -221,57 +163,14 @@ class CodeGenerator {
|
|
|
221
163
|
this.line(`skin.states = [${stateLines.join(', ')}];`);
|
|
222
164
|
}
|
|
223
165
|
generateStateExpr(state) {
|
|
224
|
-
|
|
225
|
-
const allOverrides = [...state.overrides];
|
|
226
|
-
const nodeOverrides = this.collectStatePropertyOverrides(this._ir.children);
|
|
227
|
-
for (const prop of this._ir.properties) {
|
|
228
|
-
if (prop.state) {
|
|
229
|
-
nodeOverrides.push({
|
|
230
|
-
stateName: prop.state,
|
|
231
|
-
targetId: '',
|
|
232
|
-
propName: prop.name,
|
|
233
|
-
value: prop.value,
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
for (const { stateName, targetId, propName, value } of nodeOverrides) {
|
|
238
|
-
const matches = stateName === state.name || state.stateGroups.includes(stateName);
|
|
239
|
-
if (matches) {
|
|
240
|
-
allOverrides.push({ type: 'SetProperty', targetId, name: propName, value });
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
if (allOverrides.length === 0) {
|
|
166
|
+
if (state.overrides.length === 0) {
|
|
244
167
|
return `new State("${state.name}")`;
|
|
245
168
|
}
|
|
246
|
-
const overrides =
|
|
169
|
+
const overrides = state.overrides.map(o => this.generateOverrideExpr(o)).join(', ');
|
|
247
170
|
return `new State("${state.name}", [${overrides}])`;
|
|
248
171
|
}
|
|
249
172
|
generateOverrideExpr(override) {
|
|
250
|
-
|
|
251
|
-
case 'AddItems':
|
|
252
|
-
return `new AddItems("${override.targetId}", "${override.destinationId}", ${override.position}, "${override.propertyName}")`;
|
|
253
|
-
case 'SetProperty':
|
|
254
|
-
return `new SetProperty("${override.targetId}", "${override.name}", ${this.propertyValueToJS(override.name, override.value)})`;
|
|
255
|
-
default:
|
|
256
|
-
return '/* unknown override */';
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
collectStatePropertyOverrides(nodes) {
|
|
260
|
-
const result = [];
|
|
261
|
-
for (const node of nodes) {
|
|
262
|
-
for (const prop of node.properties) {
|
|
263
|
-
if (prop.state) {
|
|
264
|
-
result.push({
|
|
265
|
-
stateName: prop.state,
|
|
266
|
-
targetId: node.id ?? node.varName,
|
|
267
|
-
propName: prop.name,
|
|
268
|
-
value: prop.value,
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
result.push(...this.collectStatePropertyOverrides(node.children));
|
|
273
|
-
}
|
|
274
|
-
return result;
|
|
173
|
+
return `new SetProperty("${override.targetId}", "${override.name}", ${this.propertyValueToJS(override.name, override.value)})`;
|
|
275
174
|
}
|
|
276
175
|
valueToJS(value) {
|
|
277
176
|
switch (value.type) {
|
|
@@ -279,12 +178,6 @@ class CodeGenerator {
|
|
|
279
178
|
return literalToJS(value);
|
|
280
179
|
case 'percent':
|
|
281
180
|
return String(value.value);
|
|
282
|
-
case 'binding':
|
|
283
|
-
return `/* binding: ${value.expression} */`;
|
|
284
|
-
case 'ref':
|
|
285
|
-
return value.varName;
|
|
286
|
-
default:
|
|
287
|
-
return 'undefined';
|
|
288
181
|
}
|
|
289
182
|
}
|
|
290
183
|
propertyValueToJS(prop, value) {
|
|
@@ -308,20 +201,9 @@ class CodeGenerator {
|
|
|
308
201
|
if (!className)
|
|
309
202
|
return 'createSkin';
|
|
310
203
|
const parts = className.split('.');
|
|
311
|
-
const base = parts[parts.length - 1];
|
|
204
|
+
const base = (parts[parts.length - 1] ?? 'Skin').replace(/[^A-Za-z0-9_$]/g, '_');
|
|
312
205
|
return `create${base}`;
|
|
313
206
|
}
|
|
314
|
-
hasBindingsInTree(nodes) {
|
|
315
|
-
for (const node of nodes) {
|
|
316
|
-
for (const prop of node.properties) {
|
|
317
|
-
if (prop.value.type === 'binding')
|
|
318
|
-
return true;
|
|
319
|
-
}
|
|
320
|
-
if (this.hasBindingsInTree(node.children))
|
|
321
|
-
return true;
|
|
322
|
-
}
|
|
323
|
-
return false;
|
|
324
|
-
}
|
|
325
207
|
hasPropertyInTree(propertyName) {
|
|
326
208
|
if (this._ir.properties.some(prop => prop.name === propertyName))
|
|
327
209
|
return true;
|
|
@@ -347,46 +229,4 @@ function literalToJS(value) {
|
|
|
347
229
|
return String(value.value);
|
|
348
230
|
return JSON.stringify(value.value);
|
|
349
231
|
}
|
|
350
|
-
function escapeJS(s) {
|
|
351
|
-
return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n');
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Parse a binding template expression.
|
|
355
|
-
* e.g. "Hello {name}!" → [{literal: "Hello "}, {binding: "name"}, {literal: "!"}]
|
|
356
|
-
* e.g. "{data.label}" → [{binding: "data.label"}]
|
|
357
|
-
*/
|
|
358
|
-
function parseBindingTemplate(expr) {
|
|
359
|
-
const parts = [];
|
|
360
|
-
let i = 0;
|
|
361
|
-
let current = '';
|
|
362
|
-
while (i < expr.length) {
|
|
363
|
-
if (expr[i] === '{') {
|
|
364
|
-
if (current) {
|
|
365
|
-
parts.push({ type: 'literal', value: current });
|
|
366
|
-
current = '';
|
|
367
|
-
}
|
|
368
|
-
let depth = 1;
|
|
369
|
-
let j = i + 1;
|
|
370
|
-
while (j < expr.length && depth > 0) {
|
|
371
|
-
if (expr[j] === '{') {
|
|
372
|
-
depth++;
|
|
373
|
-
}
|
|
374
|
-
if (expr[j] === '}') {
|
|
375
|
-
depth--;
|
|
376
|
-
}
|
|
377
|
-
j++;
|
|
378
|
-
}
|
|
379
|
-
parts.push({ type: 'binding', value: expr.slice(i + 1, j - 1) });
|
|
380
|
-
i = j;
|
|
381
|
-
}
|
|
382
|
-
else {
|
|
383
|
-
current += expr[i];
|
|
384
|
-
i++;
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
if (current) {
|
|
388
|
-
parts.push({ type: 'literal', value: current });
|
|
389
|
-
}
|
|
390
|
-
return parts;
|
|
391
|
-
}
|
|
392
232
|
//# sourceMappingURL=codegen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../../src/core/kui/codegen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KUI Skin parser and ESM factory generator.
|
|
3
|
+
*/
|
|
4
|
+
import type { SkinIR } from './ast.js';
|
|
5
|
+
import type { CodeGenOptions } from './codegen.js';
|
|
6
|
+
import type { NamespaceModule } from './registry.js';
|
|
7
|
+
export { SourceLocator, createSourceLocator } from './source-location.js';
|
|
8
|
+
export type { SourcePosition } from './source-location.js';
|
|
9
|
+
export type { SkinIR, SkinNode, PropertyAssignment, PropertyValue, PropertyChild, LiteralValue, PercentValue, StateDef, StateOverride, StateSetProperty, UnresolvedTag, } from './ast.js';
|
|
10
|
+
export { lookupComponent, localName, suggestComponentTag, } from './registry.js';
|
|
11
|
+
export type { ComponentInfo, NamespaceModule } from './registry.js';
|
|
12
|
+
export { parseKUISkin } from './kui-parser.js';
|
|
13
|
+
export { generateCode } from './codegen.js';
|
|
14
|
+
export type { CodeGenOptions } from './codegen.js';
|
|
15
|
+
export interface CompileKUIOptions extends CodeGenOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Project-defined KUI component namespaces.
|
|
18
|
+
*/
|
|
19
|
+
readonly customNamespaces?: readonly NamespaceModule[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Compiles one KUI Skin source string to an ESM factory module.
|
|
23
|
+
*/
|
|
24
|
+
export declare function compileKUI(source: string, className?: string, options?: CompileKUIOptions): string;
|
|
25
|
+
/**
|
|
26
|
+
* Parses one KUI Skin source string into the compiler IR.
|
|
27
|
+
*/
|
|
28
|
+
export declare function parseToIR(source: string, className?: string, customNamespaces?: readonly NamespaceModule[]): SkinIR;
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/kui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,YAAY,EACX,MAAM,EACN,QAAQ,EACR,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,aAAa,GACb,MAAM,UAAU,CAAC;AAElB,OAAO,EACN,eAAe,EACf,SAAS,EACT,mBAAmB,GACnB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACxD;;OAEG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;CACvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CACzB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,iBAAiB,GACzB,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,SAAS,CACxB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,gBAAgB,GAAE,SAAS,eAAe,EAAO,GAC/C,MAAM,CAER"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KUI Skin parser and ESM factory generator.
|
|
3
|
+
*/
|
|
4
|
+
import { generateCode } from './codegen.js';
|
|
5
|
+
import { parseKUISkin } from './kui-parser.js';
|
|
6
|
+
export { SourceLocator, createSourceLocator } from './source-location.js';
|
|
7
|
+
export { lookupComponent, localName, suggestComponentTag, } from './registry.js';
|
|
8
|
+
export { parseKUISkin } from './kui-parser.js';
|
|
9
|
+
export { generateCode } from './codegen.js';
|
|
10
|
+
/**
|
|
11
|
+
* Compiles one KUI Skin source string to an ESM factory module.
|
|
12
|
+
*/
|
|
13
|
+
export function compileKUI(source, className, options) {
|
|
14
|
+
const ir = parseKUISkin(source, className, options?.customNamespaces ?? []);
|
|
15
|
+
return generateCode(ir, options);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Parses one KUI Skin source string into the compiler IR.
|
|
19
|
+
*/
|
|
20
|
+
export function parseToIR(source, className, customNamespaces = []) {
|
|
21
|
+
return parseKUISkin(source, className, customNamespaces);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/kui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAK/C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAiB1E,OAAO,EACN,eAAe,EACf,SAAS,EACT,mBAAmB,GACnB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAU5C;;GAEG;AACH,MAAM,UAAU,UAAU,CACzB,MAAc,EACd,SAAkB,EAClB,OAA2B;IAE3B,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC;IAC5E,OAAO,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACxB,MAAc,EACd,SAAkB,EAClB,mBAA+C,EAAE;IAEjD,OAAO,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -2,7 +2,7 @@ import type { Diagnostic } from '../diagnostics/index.js';
|
|
|
2
2
|
import type { UnresolvedTag } from './ast.js';
|
|
3
3
|
import type { NamespaceModule } from './registry.js';
|
|
4
4
|
/**
|
|
5
|
-
* Creates source-located diagnostics for unresolved
|
|
5
|
+
* Creates source-located diagnostics for unresolved KUI component tags.
|
|
6
6
|
*/
|
|
7
7
|
export declare function createUnresolvedTagDiagnostics(file: string, source: string, tags: readonly UnresolvedTag[], customNamespaces?: readonly NamespaceModule[]): readonly Diagnostic[];
|
|
8
|
-
//# sourceMappingURL=
|
|
8
|
+
//# sourceMappingURL=kui-diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kui-diagnostics.d.ts","sourceRoot":"","sources":["../../../src/core/kui/kui-diagnostics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD;;GAEG;AACH,wBAAgB,8BAA8B,CAC7C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,aAAa,EAAE,EAC9B,gBAAgB,GAAE,SAAS,eAAe,EAAO,GAC/C,SAAS,UAAU,EAAE,CAkBvB"}
|
|
@@ -2,7 +2,7 @@ import { DIAGNOSTIC_CODES } from '../diagnostics/index.js';
|
|
|
2
2
|
import { createSourceLocator } from './source-location.js';
|
|
3
3
|
import { suggestComponentTag } from './registry.js';
|
|
4
4
|
/**
|
|
5
|
-
* Creates source-located diagnostics for unresolved
|
|
5
|
+
* Creates source-located diagnostics for unresolved KUI component tags.
|
|
6
6
|
*/
|
|
7
7
|
export function createUnresolvedTagDiagnostics(file, source, tags, customNamespaces = []) {
|
|
8
8
|
const locator = createSourceLocator(source);
|
|
@@ -10,9 +10,9 @@ export function createUnresolvedTagDiagnostics(file, source, tags, customNamespa
|
|
|
10
10
|
const position = locator.locate(tag.range.start);
|
|
11
11
|
const suggestion = suggestComponentTag(tag.name, customNamespaces);
|
|
12
12
|
return {
|
|
13
|
-
code: DIAGNOSTIC_CODES.
|
|
13
|
+
code: DIAGNOSTIC_CODES.KUI_UNKNOWN_TAG,
|
|
14
14
|
severity: 'warning',
|
|
15
|
-
message: `Unknown
|
|
15
|
+
message: `Unknown KUI tag "${tag.name}" was dropped from the generated skin.`,
|
|
16
16
|
location: {
|
|
17
17
|
file,
|
|
18
18
|
line: position.line,
|
|
@@ -23,4 +23,4 @@ export function createUnresolvedTagDiagnostics(file, source, tags, customNamespa
|
|
|
23
23
|
};
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
-
//# sourceMappingURL=
|
|
26
|
+
//# sourceMappingURL=kui-diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kui-diagnostics.js","sourceRoot":"","sources":["../../../src/core/kui/kui-diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAKpD;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAC7C,IAAY,EACZ,MAAc,EACd,IAA8B,EAC9B,mBAA+C,EAAE;IAEjD,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACnE,OAAO;YACN,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,oBAAoB,GAAG,CAAC,IAAI,wCAAwC;YAC7E,QAAQ,EAAE;gBACT,IAAI;gBACJ,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;aACvB;YACD,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,iBAAiB,UAAU,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzE,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SkinIR } from './ast.js';
|
|
2
|
+
import type { NamespaceModule } from './registry.js';
|
|
3
|
+
/**
|
|
4
|
+
* Parses a KUI Skin document into the existing skin code-generation IR.
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseKUISkin(source: string, className: string | undefined, customNamespaces?: readonly NamespaceModule[]): SkinIR;
|
|
7
|
+
//# sourceMappingURL=kui-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kui-parser.d.ts","sourceRoot":"","sources":["../../../src/core/kui/kui-parser.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAIX,MAAM,EAIN,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD;;GAEG;AACH,wBAAgB,YAAY,CAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,gBAAgB,GAAE,SAAS,eAAe,EAAO,GAC/C,MAAM,CAGR"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { isUIAssetReference, isUIDesignTokenReference, isUIResourceReference, isSyntheticNodeId, parseUIDocument, } from '@kurot/ui-document';
|
|
2
|
+
import { localName, lookupComponent } from './registry.js';
|
|
3
|
+
/**
|
|
4
|
+
* Parses a KUI Skin document into the existing skin code-generation IR.
|
|
5
|
+
*/
|
|
6
|
+
export function parseKUISkin(source, className, customNamespaces = []) {
|
|
7
|
+
const document = parseUIDocument(source);
|
|
8
|
+
return new KUIParseContext(source, document, className ?? document.id, customNamespaces).parse();
|
|
9
|
+
}
|
|
10
|
+
class KUIParseContext {
|
|
11
|
+
_source;
|
|
12
|
+
_document;
|
|
13
|
+
_className;
|
|
14
|
+
_customNamespaces;
|
|
15
|
+
_imports = new Map([['Skin', '@kurot/ui']]);
|
|
16
|
+
_skinParts = [];
|
|
17
|
+
_unresolvedTags = [];
|
|
18
|
+
_variable = 0;
|
|
19
|
+
constructor(_source, _document, _className, _customNamespaces) {
|
|
20
|
+
this._source = _source;
|
|
21
|
+
this._document = _document;
|
|
22
|
+
this._className = _className;
|
|
23
|
+
this._customNamespaces = _customNamespaces;
|
|
24
|
+
}
|
|
25
|
+
parse() {
|
|
26
|
+
const root = this._document.root;
|
|
27
|
+
if (root.type !== 'kui.Group') {
|
|
28
|
+
throw new Error(`KUI Skin root component must be kui.Group, received ${root.type}.`);
|
|
29
|
+
}
|
|
30
|
+
const width = numericProperty(root.properties.width);
|
|
31
|
+
const height = numericProperty(root.properties.height);
|
|
32
|
+
const rootNode = this._node(root, false);
|
|
33
|
+
return {
|
|
34
|
+
className: this._className,
|
|
35
|
+
...(width === undefined ? {} : { width }),
|
|
36
|
+
...(height === undefined ? {} : { height }),
|
|
37
|
+
properties: [],
|
|
38
|
+
imports: this._imports,
|
|
39
|
+
skinParts: this._skinParts,
|
|
40
|
+
children: rootNode === undefined ? [] : [rootNode],
|
|
41
|
+
propertyChildren: [],
|
|
42
|
+
states: this._states(),
|
|
43
|
+
declarations: [],
|
|
44
|
+
unresolvedTags: this._unresolvedTags,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
_node(node, exposeAsPart = true) {
|
|
48
|
+
if (node.instance !== undefined) {
|
|
49
|
+
throw new Error(`KUI Skin node "${node.id}" cannot be a reusable component instance.`);
|
|
50
|
+
}
|
|
51
|
+
const tag = typeTag(node.type);
|
|
52
|
+
const info = lookupComponent(tag, this._customNamespaces);
|
|
53
|
+
if (!info) {
|
|
54
|
+
this._unresolvedTags.push({ name: tag, range: sourceRange(this._source, tag) });
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
const className = localName(tag);
|
|
58
|
+
this._imports.set(className, info.module);
|
|
59
|
+
if (exposeAsPart && !isSyntheticNodeId(node.id)) {
|
|
60
|
+
this._skinParts.push(node.id);
|
|
61
|
+
}
|
|
62
|
+
const propertyChildren = [];
|
|
63
|
+
const properties = [];
|
|
64
|
+
for (const [name, value] of Object.entries(node.properties)) {
|
|
65
|
+
const semanticChild = this._semanticChild(name, value);
|
|
66
|
+
if (semanticChild) {
|
|
67
|
+
propertyChildren.push(semanticChild);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
properties.push({ name, value: propertyValue(value) });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
className,
|
|
75
|
+
module: info.module,
|
|
76
|
+
varName: safeVariable(node.id, className, ++this._variable),
|
|
77
|
+
id: node.id,
|
|
78
|
+
properties,
|
|
79
|
+
children: node.children.map(child => this._node(child)).filter(isSkinNode),
|
|
80
|
+
propertyChildren,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
_semanticChild(name, value) {
|
|
84
|
+
if (!isPlainObject(value) || typeof value.type !== 'string')
|
|
85
|
+
return undefined;
|
|
86
|
+
const properties = isPlainObject(value.properties) ? value.properties : {};
|
|
87
|
+
const node = this._node({
|
|
88
|
+
id: `_${name}${this._variable + 1}`,
|
|
89
|
+
type: value.type,
|
|
90
|
+
properties,
|
|
91
|
+
children: [],
|
|
92
|
+
}, false);
|
|
93
|
+
return node === undefined ? undefined : { propertyName: name, nodes: [node] };
|
|
94
|
+
}
|
|
95
|
+
_states() {
|
|
96
|
+
return Object.entries(this._document.contract.states).map(([name, definition]) => ({
|
|
97
|
+
name,
|
|
98
|
+
overrides: definition.overrides.map(override => {
|
|
99
|
+
if (override.transition !== undefined) {
|
|
100
|
+
throw new Error(`Compiled KUI skins do not support transitions in state "${name}".`);
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
type: 'SetProperty',
|
|
104
|
+
targetId: override.targetId,
|
|
105
|
+
name: override.property,
|
|
106
|
+
value: propertyValue(override.value),
|
|
107
|
+
};
|
|
108
|
+
}),
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function propertyValue(value) {
|
|
113
|
+
if (typeof value === 'string' && value.endsWith('%')) {
|
|
114
|
+
const percentage = Number.parseFloat(value);
|
|
115
|
+
if (!Number.isNaN(percentage))
|
|
116
|
+
return { type: 'percent', value: percentage };
|
|
117
|
+
}
|
|
118
|
+
if (isUIResourceReference(value) || isUIDesignTokenReference(value)) {
|
|
119
|
+
return { type: 'literal', value: value.key };
|
|
120
|
+
}
|
|
121
|
+
if (isUIAssetReference(value)) {
|
|
122
|
+
return { type: 'literal', value: value.assetId };
|
|
123
|
+
}
|
|
124
|
+
return { type: 'literal', value };
|
|
125
|
+
}
|
|
126
|
+
function typeTag(type) {
|
|
127
|
+
const separator = type.indexOf('.');
|
|
128
|
+
if (separator === -1)
|
|
129
|
+
return type;
|
|
130
|
+
const prefix = type.slice(0, separator);
|
|
131
|
+
const name = type.slice(separator + 1);
|
|
132
|
+
return prefix === 'kui' ? name : `${prefix}:${name}`;
|
|
133
|
+
}
|
|
134
|
+
function safeVariable(id, className, index) {
|
|
135
|
+
const candidate = id.replace(/[^A-Za-z0-9_$]/g, '_');
|
|
136
|
+
if (/^[A-Za-z_$]/.test(candidate))
|
|
137
|
+
return candidate;
|
|
138
|
+
return `_${className.charAt(0).toLowerCase()}${className.slice(1)}${index}`;
|
|
139
|
+
}
|
|
140
|
+
function sourceRange(source, tag) {
|
|
141
|
+
const start = Math.max(0, source.indexOf(`<${tag}`));
|
|
142
|
+
return { start, end: start + tag.length + 1 };
|
|
143
|
+
}
|
|
144
|
+
function numericProperty(value) {
|
|
145
|
+
return typeof value === 'number' ? value : undefined;
|
|
146
|
+
}
|
|
147
|
+
function isPlainObject(value) {
|
|
148
|
+
return typeof value === 'object' && !Array.isArray(value);
|
|
149
|
+
}
|
|
150
|
+
function isSkinNode(node) {
|
|
151
|
+
return node !== undefined;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=kui-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kui-parser.js","sourceRoot":"","sources":["../../../src/core/kui/kui-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Static component registry for
|
|
2
|
+
* Static component registry for KUI → JS code generation.
|
|
3
3
|
*
|
|
4
4
|
* Maps local tag names such as `Button` and `Skin` to their module specifiers
|
|
5
5
|
* and default properties.
|
|
@@ -19,8 +19,7 @@ export interface ComponentInfo {
|
|
|
19
19
|
readonly isArray?: boolean;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
* A project-defined
|
|
23
|
-
* convention (see `ProjectConfig.exml.namespaces` in `@kurot/cli`).
|
|
22
|
+
* A project-defined KUI XML namespace.
|
|
24
23
|
*/
|
|
25
24
|
export interface NamespaceModule {
|
|
26
25
|
/**
|
|
@@ -42,10 +41,7 @@ export interface NamespaceModule {
|
|
|
42
41
|
* Looks up a component by its tag name.
|
|
43
42
|
*
|
|
44
43
|
* Project-defined namespaces (`customNamespaces`) take priority when the
|
|
45
|
-
* tag's prefix matches one
|
|
46
|
-
* convention, where the prefix alone — not the declared xmlns URI — decides
|
|
47
|
-
* which module a tag resolves to (the same is true of the built-in `eui`/
|
|
48
|
-
* `egret` prefixes below).
|
|
44
|
+
* tag's prefix matches one. The namespace prefix selects the generated module.
|
|
49
45
|
*
|
|
50
46
|
* @param tagName - Complete tag name, optionally including a prefix.
|
|
51
47
|
* @param customNamespaces - Project-defined namespaces from `kurot.config.ts`.
|
|
@@ -83,23 +79,4 @@ export declare function localName(tagName: string): string;
|
|
|
83
79
|
* @returns A close registered tag, or `undefined` when no candidate is reliable.
|
|
84
80
|
*/
|
|
85
81
|
export declare function suggestComponentTag(tagName: string, customNamespaces?: readonly NamespaceModule[]): string | undefined;
|
|
86
|
-
/**
|
|
87
|
-
* Checks whether a tag name uses EXML property-node syntax.
|
|
88
|
-
*
|
|
89
|
-
* e.g. "eui:Button.label" → property "label" on `Button`.
|
|
90
|
-
*
|
|
91
|
-
* @param tagName - Complete tag name to inspect.
|
|
92
|
-
* @returns Whether the tag contains a property separator.
|
|
93
|
-
*/
|
|
94
|
-
export declare function isPropertyNode(tagName: string): boolean;
|
|
95
|
-
/**
|
|
96
|
-
* Parses a property-node tag such as `eui:Button.label`.
|
|
97
|
-
*
|
|
98
|
-
* @param tagName - Complete property-node tag name.
|
|
99
|
-
* @returns The owner and property names, or `undefined` when the tag is not a property node.
|
|
100
|
-
*/
|
|
101
|
-
export declare function parsePropertyNode(tagName: string): {
|
|
102
|
-
owner: string;
|
|
103
|
-
property: string;
|
|
104
|
-
} | undefined;
|
|
105
82
|
//# sourceMappingURL=registry.d.ts.map
|