@kurot/cli 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/README.md +115 -303
- package/dist/core/components/discover-components.d.ts.map +1 -1
- package/dist/core/components/discover-components.js +12 -11
- 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 -176
- 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 +157 -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/{exml → kui}/skin-parts-declaration.d.ts +1 -1
- package/dist/core/kui/skin-parts-declaration.d.ts.map +1 -0
- package/dist/core/kui/skin-parts-declaration.js +182 -0
- 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 +143 -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 +24 -0
- package/templates/game/resource/ui/skins/CheckBoxSkin.kui.xml +45 -0
- package/templates/game/resource/ui/skins/ComboBoxSkin.kui.xml +32 -0
- package/templates/game/resource/ui/skins/GroupSkin.kui.xml +11 -0
- package/templates/game/resource/ui/skins/HScrollBarSkin.kui.xml +11 -0
- package/templates/game/resource/ui/skins/HSliderSkin.kui.xml +13 -0
- package/templates/game/resource/ui/skins/ImageSkin.kui.xml +11 -0
- package/templates/game/resource/ui/skins/ItemRendererSkin.kui.xml +22 -0
- package/templates/game/resource/ui/skins/LabelSkin.kui.xml +11 -0
- package/templates/game/resource/ui/skins/ListSkin.kui.xml +15 -0
- package/templates/game/resource/ui/skins/PanelSkin.kui.xml +18 -0
- package/templates/game/resource/ui/skins/ProgressBarSkin.kui.xml +14 -0
- package/templates/game/resource/ui/skins/RadioButtonSkin.kui.xml +45 -0
- package/templates/game/resource/ui/skins/ScrollerSkin.kui.xml +13 -0
- package/templates/game/resource/ui/skins/TabBarSkin.kui.xml +12 -0
- package/templates/game/resource/ui/skins/TextInputSkin.kui.xml +28 -0
- package/templates/game/resource/ui/skins/ToggleButtonSkin.kui.xml +34 -0
- package/templates/game/resource/ui/skins/ToggleSwitchSkin.kui.xml +29 -0
- package/templates/game/resource/ui/skins/VScrollBarSkin.kui.xml +11 -0
- package/templates/game/resource/ui/skins/VSliderSkin.kui.xml +13 -0
- package/templates/game/resource/ui/skins/ViewStackSkin.kui.xml +11 -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 +0 -82
- 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}/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,7 @@ class CodeGenerator {
|
|
|
68
61
|
const uiImports = moduleImports.get('@kurot/ui');
|
|
69
62
|
uiImports.add('State');
|
|
70
63
|
uiImports.add('SetProperty');
|
|
71
|
-
|
|
72
|
-
for (const override of state.overrides) {
|
|
73
|
-
uiImports.add(override.type);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
64
|
+
uiImports.add('SetProperty');
|
|
76
65
|
}
|
|
77
66
|
for (const [modulePath, classes] of moduleImports) {
|
|
78
67
|
const names = [...classes].sort().join(', ');
|
|
@@ -95,14 +84,11 @@ class CodeGenerator {
|
|
|
95
84
|
this.line(`skin.height = ${this._ir.height};`);
|
|
96
85
|
}
|
|
97
86
|
for (const prop of this._ir.properties) {
|
|
98
|
-
|
|
99
|
-
this.emitPropertyAssignment('skin', prop.name, prop.value);
|
|
100
|
-
}
|
|
87
|
+
this.emitPropertyAssignment('skin', prop.name, prop.value);
|
|
101
88
|
}
|
|
102
89
|
this.emitNodeDeclarations(this._ir.children);
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const childVars = defaultChildren.map(n => n.varName).join(', ');
|
|
90
|
+
if (this._ir.children.length > 0) {
|
|
91
|
+
const childVars = this._ir.children.map(n => n.varName).join(', ');
|
|
106
92
|
this.line(`skin.elementsContent = [${childVars}];`);
|
|
107
93
|
}
|
|
108
94
|
for (const decl of this._ir.declarations) {
|
|
@@ -120,17 +106,16 @@ class CodeGenerator {
|
|
|
120
106
|
this.emitNodeProperties(node);
|
|
121
107
|
this.emitNodePropertyChildren(node);
|
|
122
108
|
this.emitNodeDeclarations(node.children);
|
|
123
|
-
|
|
124
|
-
if (defaultPropChildren.length > 0) {
|
|
109
|
+
if (node.children.length > 0) {
|
|
125
110
|
const info = lookupComponent(node.className);
|
|
126
111
|
const defaultProp = info?.defaultProperty ?? 'elementsContent';
|
|
127
112
|
const isArray = info?.isArray !== false;
|
|
128
|
-
const childVars =
|
|
113
|
+
const childVars = node.children.map(c => c.varName).join(', ');
|
|
129
114
|
if (isArray) {
|
|
130
115
|
this.line(`${node.varName}.${defaultProp} = [${childVars}];`);
|
|
131
116
|
}
|
|
132
117
|
else {
|
|
133
|
-
this.line(`${node.varName}.${defaultProp} = ${
|
|
118
|
+
this.line(`${node.varName}.${defaultProp} = ${node.children[0].varName};`);
|
|
134
119
|
}
|
|
135
120
|
}
|
|
136
121
|
}
|
|
@@ -140,19 +125,9 @@ class CodeGenerator {
|
|
|
140
125
|
if (node.id) {
|
|
141
126
|
this.line(`skin.${node.id} = ${node.varName};`);
|
|
142
127
|
}
|
|
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
|
-
}
|
|
149
|
-
}
|
|
150
128
|
}
|
|
151
129
|
emitNodeProperties(node) {
|
|
152
130
|
for (const prop of node.properties) {
|
|
153
|
-
if (prop.state) {
|
|
154
|
-
continue;
|
|
155
|
-
}
|
|
156
131
|
this.emitPropertyAssignment(node.varName, prop.name, prop.value);
|
|
157
132
|
}
|
|
158
133
|
}
|
|
@@ -168,46 +143,14 @@ class CodeGenerator {
|
|
|
168
143
|
return;
|
|
169
144
|
}
|
|
170
145
|
}
|
|
171
|
-
if (value.type === 'binding') {
|
|
172
|
-
this.emitBinding(target, prop, value.expression);
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
146
|
this.line(`${target}.${prop} = ${this.propertyValueToJS(prop, value)};`);
|
|
176
147
|
}
|
|
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
148
|
emitNodePropertyChildren(node) {
|
|
201
149
|
for (const pc of node.propertyChildren) {
|
|
202
150
|
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
|
-
}
|
|
151
|
+
this.emitNodeCreation(child);
|
|
152
|
+
this.emitNodeProperties(child);
|
|
153
|
+
this.line(`${node.varName}.${pc.propertyName} = ${child.varName};`);
|
|
211
154
|
}
|
|
212
155
|
}
|
|
213
156
|
}
|
|
@@ -221,57 +164,14 @@ class CodeGenerator {
|
|
|
221
164
|
this.line(`skin.states = [${stateLines.join(', ')}];`);
|
|
222
165
|
}
|
|
223
166
|
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) {
|
|
167
|
+
if (state.overrides.length === 0) {
|
|
244
168
|
return `new State("${state.name}")`;
|
|
245
169
|
}
|
|
246
|
-
const overrides =
|
|
170
|
+
const overrides = state.overrides.map(o => this.generateOverrideExpr(o)).join(', ');
|
|
247
171
|
return `new State("${state.name}", [${overrides}])`;
|
|
248
172
|
}
|
|
249
173
|
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;
|
|
174
|
+
return `new SetProperty("${override.targetId}", "${override.name}", ${this.propertyValueToJS(override.name, override.value)})`;
|
|
275
175
|
}
|
|
276
176
|
valueToJS(value) {
|
|
277
177
|
switch (value.type) {
|
|
@@ -279,12 +179,6 @@ class CodeGenerator {
|
|
|
279
179
|
return literalToJS(value);
|
|
280
180
|
case 'percent':
|
|
281
181
|
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
182
|
}
|
|
289
183
|
}
|
|
290
184
|
propertyValueToJS(prop, value) {
|
|
@@ -308,20 +202,9 @@ class CodeGenerator {
|
|
|
308
202
|
if (!className)
|
|
309
203
|
return 'createSkin';
|
|
310
204
|
const parts = className.split('.');
|
|
311
|
-
const base = parts[parts.length - 1];
|
|
205
|
+
const base = (parts[parts.length - 1] ?? 'Skin').replace(/[^A-Za-z0-9_$]/g, '_');
|
|
312
206
|
return `create${base}`;
|
|
313
207
|
}
|
|
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
208
|
hasPropertyInTree(propertyName) {
|
|
326
209
|
if (this._ir.properties.some(prop => prop.name === propertyName))
|
|
327
210
|
return true;
|
|
@@ -347,46 +230,4 @@ function literalToJS(value) {
|
|
|
347
230
|
return String(value.value);
|
|
348
231
|
return JSON.stringify(value.value);
|
|
349
232
|
}
|
|
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
233
|
//# 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":"AAOA,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,CAMR"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { isUIAssetReference, isUIDesignTokenReference, isUIResourceReference, 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
|
+
if (document.assetKind !== 'appearance') {
|
|
9
|
+
throw new Error(`KUI compiler expected a Skin document, received ${document.assetKind}.`);
|
|
10
|
+
}
|
|
11
|
+
return new KUIParseContext(source, document, className ?? document.id, customNamespaces).parse();
|
|
12
|
+
}
|
|
13
|
+
class KUIParseContext {
|
|
14
|
+
_source;
|
|
15
|
+
_document;
|
|
16
|
+
_className;
|
|
17
|
+
_customNamespaces;
|
|
18
|
+
_imports = new Map([['Skin', '@kurot/ui']]);
|
|
19
|
+
_skinParts = [];
|
|
20
|
+
_unresolvedTags = [];
|
|
21
|
+
_partIds;
|
|
22
|
+
_variable = 0;
|
|
23
|
+
constructor(_source, _document, _className, _customNamespaces) {
|
|
24
|
+
this._source = _source;
|
|
25
|
+
this._document = _document;
|
|
26
|
+
this._className = _className;
|
|
27
|
+
this._customNamespaces = _customNamespaces;
|
|
28
|
+
this._partIds = new Set(Object.values(this._document.contract.parts).map(part => part.nodeId));
|
|
29
|
+
}
|
|
30
|
+
parse() {
|
|
31
|
+
const root = this._document.root;
|
|
32
|
+
if (root.type !== 'kui.Group') {
|
|
33
|
+
throw new Error(`KUI Skin root component must be kui.Group, received ${root.type}.`);
|
|
34
|
+
}
|
|
35
|
+
const width = numericProperty(root.properties.width);
|
|
36
|
+
const height = numericProperty(root.properties.height);
|
|
37
|
+
const rootNode = this._node(root);
|
|
38
|
+
return {
|
|
39
|
+
className: this._className,
|
|
40
|
+
...(width === undefined ? {} : { width }),
|
|
41
|
+
...(height === undefined ? {} : { height }),
|
|
42
|
+
properties: [],
|
|
43
|
+
imports: this._imports,
|
|
44
|
+
skinParts: this._skinParts,
|
|
45
|
+
children: rootNode === undefined ? [] : [rootNode],
|
|
46
|
+
propertyChildren: [],
|
|
47
|
+
states: this._states(),
|
|
48
|
+
declarations: [],
|
|
49
|
+
unresolvedTags: this._unresolvedTags,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
_node(node) {
|
|
53
|
+
if (node.instance !== undefined) {
|
|
54
|
+
throw new Error(`KUI Skin node "${node.id}" cannot be a reusable component instance.`);
|
|
55
|
+
}
|
|
56
|
+
const tag = typeTag(node.type);
|
|
57
|
+
const info = lookupComponent(tag, this._customNamespaces);
|
|
58
|
+
if (!info) {
|
|
59
|
+
this._unresolvedTags.push({ name: tag, range: sourceRange(this._source, tag) });
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
const className = localName(tag);
|
|
63
|
+
this._imports.set(className, info.module);
|
|
64
|
+
if (this._partIds.has(node.id))
|
|
65
|
+
this._skinParts.push(node.id);
|
|
66
|
+
const propertyChildren = [];
|
|
67
|
+
const properties = [];
|
|
68
|
+
for (const [name, value] of Object.entries(node.properties)) {
|
|
69
|
+
const semanticChild = this._semanticChild(name, value);
|
|
70
|
+
if (semanticChild) {
|
|
71
|
+
propertyChildren.push(semanticChild);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
properties.push({ name, value: propertyValue(value) });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
className,
|
|
79
|
+
module: info.module,
|
|
80
|
+
varName: safeVariable(node.id, className, ++this._variable),
|
|
81
|
+
id: node.id,
|
|
82
|
+
properties,
|
|
83
|
+
children: node.children.map(child => this._node(child)).filter(isSkinNode),
|
|
84
|
+
propertyChildren,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
_semanticChild(name, value) {
|
|
88
|
+
if (!isPlainObject(value) || typeof value.type !== 'string')
|
|
89
|
+
return undefined;
|
|
90
|
+
const properties = isPlainObject(value.properties) ? value.properties : {};
|
|
91
|
+
const node = this._node({
|
|
92
|
+
id: `_${name}${this._variable + 1}`,
|
|
93
|
+
type: value.type,
|
|
94
|
+
properties,
|
|
95
|
+
children: [],
|
|
96
|
+
});
|
|
97
|
+
return node === undefined ? undefined : { propertyName: name, nodes: [node] };
|
|
98
|
+
}
|
|
99
|
+
_states() {
|
|
100
|
+
return Object.entries(this._document.contract.states).map(([name, definition]) => ({
|
|
101
|
+
name,
|
|
102
|
+
overrides: definition.overrides.map(override => {
|
|
103
|
+
if (override.transition !== undefined) {
|
|
104
|
+
throw new Error(`Compiled KUI skins do not support transitions in state "${name}".`);
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
type: 'SetProperty',
|
|
108
|
+
targetId: override.targetId,
|
|
109
|
+
name: override.property,
|
|
110
|
+
value: propertyValue(override.value),
|
|
111
|
+
};
|
|
112
|
+
}),
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function propertyValue(value) {
|
|
117
|
+
if (typeof value === 'string' && value.endsWith('%')) {
|
|
118
|
+
const percentage = Number.parseFloat(value);
|
|
119
|
+
if (!Number.isNaN(percentage))
|
|
120
|
+
return { type: 'percent', value: percentage };
|
|
121
|
+
}
|
|
122
|
+
if (isUIResourceReference(value) || isUIDesignTokenReference(value)) {
|
|
123
|
+
return { type: 'literal', value: value.key };
|
|
124
|
+
}
|
|
125
|
+
if (isUIAssetReference(value)) {
|
|
126
|
+
return { type: 'literal', value: value.assetId };
|
|
127
|
+
}
|
|
128
|
+
return { type: 'literal', value };
|
|
129
|
+
}
|
|
130
|
+
function typeTag(type) {
|
|
131
|
+
const separator = type.indexOf('.');
|
|
132
|
+
if (separator === -1)
|
|
133
|
+
return type;
|
|
134
|
+
const prefix = type.slice(0, separator);
|
|
135
|
+
const name = type.slice(separator + 1);
|
|
136
|
+
return prefix === 'kui' ? name : `${prefix}:${name}`;
|
|
137
|
+
}
|
|
138
|
+
function safeVariable(id, className, index) {
|
|
139
|
+
const candidate = id.replace(/[^A-Za-z0-9_$]/g, '_');
|
|
140
|
+
if (/^[A-Za-z_$]/.test(candidate))
|
|
141
|
+
return candidate;
|
|
142
|
+
return `_${className.charAt(0).toLowerCase()}${className.slice(1)}${index}`;
|
|
143
|
+
}
|
|
144
|
+
function sourceRange(source, tag) {
|
|
145
|
+
const start = Math.max(0, source.indexOf(`<${tag}`));
|
|
146
|
+
return { start, end: start + tag.length + 1 };
|
|
147
|
+
}
|
|
148
|
+
function numericProperty(value) {
|
|
149
|
+
return typeof value === 'number' ? value : undefined;
|
|
150
|
+
}
|
|
151
|
+
function isPlainObject(value) {
|
|
152
|
+
return typeof value === 'object' && !Array.isArray(value);
|
|
153
|
+
}
|
|
154
|
+
function isSkinNode(node) {
|
|
155
|
+
return node !== undefined;
|
|
156
|
+
}
|
|
157
|
+
//# 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
|