@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/core/kui/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,aAAa;IAC7B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC9C;AAmFD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC9B,OAAO,EAAE,MAAM,EACf,gBAAgB,GAAE,SAAS,eAAe,EAAO,GAC/C,aAAa,GAAG,SAAS,CAkB3B;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,MAAM,EACf,gBAAgB,GAAE,SAAS,eAAe,EAAO,GAC/C,MAAM,GAAG,SAAS,CAGpB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,GAAE,SAAS,eAAe,EAAO,GAAG,MAAM,GAAG,SAAS,CAcpH;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,MAAM,EACf,gBAAgB,GAAE,SAAS,eAAe,EAAO,GAC/C,MAAM,GAAG,SAAS,CAepB"}
|
|
@@ -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.
|
|
@@ -9,10 +9,8 @@
|
|
|
9
9
|
* Maps XML namespace prefixes to module import paths.
|
|
10
10
|
*/
|
|
11
11
|
const NAMESPACE_MODULES = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
w: '@kurot/ui',
|
|
15
|
-
core: '@kurot/core',
|
|
12
|
+
kui: '@kurot/ui',
|
|
13
|
+
kurot: '@kurot/core',
|
|
16
14
|
};
|
|
17
15
|
// ── Component registry ───────────────────────────────────────────────
|
|
18
16
|
/**
|
|
@@ -54,16 +52,9 @@ const COMPONENTS = {
|
|
|
54
52
|
HorizontalLayout: { module: '@kurot/ui' },
|
|
55
53
|
VerticalLayout: { module: '@kurot/ui' },
|
|
56
54
|
TileLayout: { module: '@kurot/ui' },
|
|
57
|
-
// States
|
|
58
|
-
State: { module: '@kurot/ui' },
|
|
59
|
-
AddItems: { module: '@kurot/ui' },
|
|
60
|
-
SetProperty: { module: '@kurot/ui' },
|
|
61
|
-
SetStateProperty: { module: '@kurot/ui' },
|
|
62
55
|
// Collections
|
|
63
56
|
ArrayCollection: { module: '@kurot/ui', defaultProperty: 'source', isArray: true },
|
|
64
|
-
//
|
|
65
|
-
Binding: { module: '@kurot/ui' },
|
|
66
|
-
// Core classes (egret namespace)
|
|
57
|
+
// Core classes
|
|
67
58
|
DisplayObject: { module: '@kurot/core' },
|
|
68
59
|
DisplayObjectContainer: { module: '@kurot/core' },
|
|
69
60
|
Sprite: { module: '@kurot/core' },
|
|
@@ -86,10 +77,7 @@ const COMPONENTS = {
|
|
|
86
77
|
* Looks up a component by its tag name.
|
|
87
78
|
*
|
|
88
79
|
* Project-defined namespaces (`customNamespaces`) take priority when the
|
|
89
|
-
* tag's prefix matches one
|
|
90
|
-
* convention, where the prefix alone — not the declared xmlns URI — decides
|
|
91
|
-
* which module a tag resolves to (the same is true of the built-in `eui`/
|
|
92
|
-
* `egret` prefixes below).
|
|
80
|
+
* tag's prefix matches one. The namespace prefix selects the generated module.
|
|
93
81
|
*
|
|
94
82
|
* @param tagName - Complete tag name, optionally including a prefix.
|
|
95
83
|
* @param customNamespaces - Project-defined namespaces from `kurot.config.ts`.
|
|
@@ -105,9 +93,15 @@ export function lookupComponent(tagName, customNamespaces = []) {
|
|
|
105
93
|
return undefined;
|
|
106
94
|
return { module: custom.specifier };
|
|
107
95
|
}
|
|
96
|
+
const expectedModule = NAMESPACE_MODULES[prefix];
|
|
97
|
+
if (!expectedModule)
|
|
98
|
+
return undefined;
|
|
99
|
+
const info = COMPONENTS[localName(tagName)];
|
|
100
|
+
return info?.module === expectedModule ? info : undefined;
|
|
108
101
|
}
|
|
109
102
|
const local = localName(tagName);
|
|
110
|
-
|
|
103
|
+
const info = COMPONENTS[local];
|
|
104
|
+
return info?.module === '@kurot/ui' ? info : undefined;
|
|
111
105
|
}
|
|
112
106
|
/**
|
|
113
107
|
* Gets the default property for a component.
|
|
@@ -174,31 +168,6 @@ export function suggestComponentTag(tagName, customNamespaces = []) {
|
|
|
174
168
|
.map(([name]) => name);
|
|
175
169
|
return suggestName(requestedName, prefix, names);
|
|
176
170
|
}
|
|
177
|
-
/**
|
|
178
|
-
* Checks whether a tag name uses EXML property-node syntax.
|
|
179
|
-
*
|
|
180
|
-
* e.g. "eui:Button.label" → property "label" on `Button`.
|
|
181
|
-
*
|
|
182
|
-
* @param tagName - Complete tag name to inspect.
|
|
183
|
-
* @returns Whether the tag contains a property separator.
|
|
184
|
-
*/
|
|
185
|
-
export function isPropertyNode(tagName) {
|
|
186
|
-
return tagName.includes('.');
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Parses a property-node tag such as `eui:Button.label`.
|
|
190
|
-
*
|
|
191
|
-
* @param tagName - Complete property-node tag name.
|
|
192
|
-
* @returns The owner and property names, or `undefined` when the tag is not a property node.
|
|
193
|
-
*/
|
|
194
|
-
export function parsePropertyNode(tagName) {
|
|
195
|
-
const parts = tagName.split('.');
|
|
196
|
-
if (parts.length < 2)
|
|
197
|
-
return undefined;
|
|
198
|
-
const ownerPart = parts[0];
|
|
199
|
-
const property = parts.slice(1).join('.');
|
|
200
|
-
return { owner: localName(ownerPart), property };
|
|
201
|
-
}
|
|
202
171
|
function suggestName(tagName, prefix, names) {
|
|
203
172
|
const requestedName = localName(tagName);
|
|
204
173
|
const candidates = names
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/kui/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { BuildContext } from '../pipeline.js';
|
|
2
2
|
import type { SkinIR } from './ast.js';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* KUI source file resolved for skin compilation.
|
|
5
5
|
*/
|
|
6
|
-
export interface
|
|
6
|
+
export interface KUIFile {
|
|
7
7
|
/**
|
|
8
8
|
* Absolute source path.
|
|
9
9
|
*/
|
|
@@ -13,15 +13,15 @@ export interface ExmlFile {
|
|
|
13
13
|
*/
|
|
14
14
|
readonly relPath: string;
|
|
15
15
|
/**
|
|
16
|
-
* UTF-8
|
|
16
|
+
* UTF-8 KUI source text.
|
|
17
17
|
*/
|
|
18
18
|
readonly contents: string;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
21
|
+
* KUI source paired with its declared skin class name.
|
|
22
22
|
*/
|
|
23
23
|
export interface CompiledSkin {
|
|
24
|
-
readonly file:
|
|
24
|
+
readonly file: KUIFile;
|
|
25
25
|
/**
|
|
26
26
|
* Complete class name used for global factory registration.
|
|
27
27
|
*/
|
|
@@ -35,7 +35,7 @@ export interface BuiltSkinsModule {
|
|
|
35
35
|
readonly skins: readonly SkinIR[];
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
|
-
* Builds and atomically installs the ESM bundle for a set of
|
|
38
|
+
* Builds and atomically installs the ESM bundle for a set of KUI skins.
|
|
39
39
|
*
|
|
40
40
|
* @returns The installed bundle filename and the parsed skins used to build it.
|
|
41
41
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skin-module-builder.d.ts","sourceRoot":"","sources":["../../../src/core/kui/skin-module-builder.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,OAAO;IACvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4BnH"}
|
|
@@ -6,10 +6,10 @@ import { ensureDir } from '../../utils/fs.js';
|
|
|
6
6
|
import { logger } from '../../utils/logger.js';
|
|
7
7
|
import { DIAGNOSTIC_CODES } from '../diagnostics/index.js';
|
|
8
8
|
import { BuildError } from '../errors.js';
|
|
9
|
-
import { createUnresolvedTagDiagnostics } from './
|
|
9
|
+
import { createUnresolvedTagDiagnostics } from './kui-diagnostics.js';
|
|
10
10
|
import { generateCode, parseToIR } from './index.js';
|
|
11
11
|
/**
|
|
12
|
-
* Builds and atomically installs the ESM bundle for a set of
|
|
12
|
+
* Builds and atomically installs the ESM bundle for a set of KUI skins.
|
|
13
13
|
*
|
|
14
14
|
* @returns The installed bundle filename and the parsed skins used to build it.
|
|
15
15
|
*/
|
|
@@ -18,7 +18,7 @@ export async function buildSkinsModule(ctx, skins) {
|
|
|
18
18
|
try {
|
|
19
19
|
const modules = await Promise.all(skins.map(skin => generateSkinModule(ctx, skin)));
|
|
20
20
|
if (modules.some(module => module === undefined) || ctx.diagnostics.hasErrors()) {
|
|
21
|
-
throw new BuildError('
|
|
21
|
+
throw new BuildError('KUI compilation failed.');
|
|
22
22
|
}
|
|
23
23
|
const compiledModules = modules.filter((module) => module !== undefined);
|
|
24
24
|
const stubDir = path.join(temporaryRoot, 'stubs');
|
|
@@ -58,9 +58,9 @@ async function generateSkinModule(ctx, skin) {
|
|
|
58
58
|
catch (error) {
|
|
59
59
|
const message = error instanceof Error ? error.message : String(error);
|
|
60
60
|
const diagnostic = {
|
|
61
|
-
code: DIAGNOSTIC_CODES.
|
|
61
|
+
code: DIAGNOSTIC_CODES.KUI_COMPILE_FAILED,
|
|
62
62
|
severity: 'error',
|
|
63
|
-
message: `
|
|
63
|
+
message: `KUI compile failed: ${message}`,
|
|
64
64
|
location: { file: skin.file.relPath },
|
|
65
65
|
};
|
|
66
66
|
ctx.diagnostics.report(diagnostic);
|
|
@@ -110,6 +110,7 @@ async function installBundle(bundleDir, outputName, destinationDir) {
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
function factoryName(className) {
|
|
113
|
-
|
|
113
|
+
const base = (className.split('.').pop() ?? 'Skin').replace(/[^A-Za-z0-9_$]/g, '_');
|
|
114
|
+
return `create${base}`;
|
|
114
115
|
}
|
|
115
116
|
//# sourceMappingURL=skin-module-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skin-module-builder.js","sourceRoot":"","sources":["../../../src/core/kui/skin-module-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,5 +8,5 @@ export declare const SKIN_PARTS_DECLARATION_PATH = ".kurot/skin-parts.d.ts";
|
|
|
8
8
|
* Generates the project declaration that augments `@kurot/ui`'s
|
|
9
9
|
* `SkinPartsMap` with every compiled skin and its complete named part set.
|
|
10
10
|
*/
|
|
11
|
-
export declare function generateSkinPartsDeclaration(project: Project, skins: readonly SkinIR[]): string
|
|
11
|
+
export declare function generateSkinPartsDeclaration(project: Project, skins: readonly SkinIR[]): Promise<string>;
|
|
12
12
|
//# sourceMappingURL=skin-parts-declaration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skin-parts-declaration.d.ts","sourceRoot":"","sources":["../../../src/core/kui/skin-parts-declaration.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAY,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,2BAA2B,2BAA2B,CAAC;AAcpE;;;GAGG;AACH,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA2C9G"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Project-root-relative path of the generated skin-part declaration.
|
|
5
|
+
*/
|
|
6
|
+
export const SKIN_PARTS_DECLARATION_PATH = '.kurot/skin-parts.d.ts';
|
|
7
|
+
/**
|
|
8
|
+
* Generates the project declaration that augments `@kurot/ui`'s
|
|
9
|
+
* `SkinPartsMap` with every compiled skin and its complete named part set.
|
|
10
|
+
*/
|
|
11
|
+
export async function generateSkinPartsDeclaration(project, skins) {
|
|
12
|
+
const declarationFile = path.join(project.root, SKIN_PARTS_DECLARATION_PATH);
|
|
13
|
+
const entries = skins
|
|
14
|
+
.map(skin => ({
|
|
15
|
+
className: skin.className,
|
|
16
|
+
parts: collectSkinParts(project, declarationFile, skin),
|
|
17
|
+
}))
|
|
18
|
+
.sort((a, b) => a.className.localeCompare(b.className));
|
|
19
|
+
const modules = [...new Set(entries.flatMap(entry => entry.parts.map(part => part.module)))].sort();
|
|
20
|
+
const aliases = new Map(modules.map((module, index) => [module, `SkinPartModule${index}`]));
|
|
21
|
+
const hosts = await collectSkinHosts(project, declarationFile, entries.map(entry => entry.className));
|
|
22
|
+
const lines = ['// Generated by @kurot/cli from compiled KUI skins.', '// @generated — do not edit manually.', ''];
|
|
23
|
+
for (const module of modules) {
|
|
24
|
+
lines.push(`import type * as ${aliases.get(module)} from ${JSON.stringify(module)};`);
|
|
25
|
+
}
|
|
26
|
+
if (modules.length > 0) {
|
|
27
|
+
lines.push('');
|
|
28
|
+
}
|
|
29
|
+
lines.push('declare module "@kurot/ui" {', '\tinterface SkinPartsMap {');
|
|
30
|
+
for (const entry of entries) {
|
|
31
|
+
lines.push(`\t\t${JSON.stringify(entry.className)}: {`);
|
|
32
|
+
for (const part of entry.parts) {
|
|
33
|
+
lines.push(`\t\t\treadonly ${JSON.stringify(part.name)}: ${aliases.get(part.module)}.${part.className};`);
|
|
34
|
+
}
|
|
35
|
+
lines.push('\t\t};');
|
|
36
|
+
}
|
|
37
|
+
lines.push('\t}', '}', '');
|
|
38
|
+
for (const host of hosts) {
|
|
39
|
+
lines.push(`declare module ${JSON.stringify(host.module)} {`, `\tinterface ${host.className} {`, `\t\treadonly skinParts: import("@kurot/ui").SkinPartsOf<${JSON.stringify(host.skinName)}>;`, '\t}', '}', '');
|
|
40
|
+
}
|
|
41
|
+
lines.push('export {};', '');
|
|
42
|
+
return lines.join('\n');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Finds project classes whose skin is selected explicitly, by reusable-component
|
|
46
|
+
* configuration, or by an unambiguous `<ClassName>Skin` naming convention.
|
|
47
|
+
*/
|
|
48
|
+
async function collectSkinHosts(project, declarationFile, skinNames) {
|
|
49
|
+
const files = await collectTypeScriptFiles(project.srcDir);
|
|
50
|
+
const hosts = new Map();
|
|
51
|
+
const skinNameSet = new Set(skinNames);
|
|
52
|
+
for (const component of project.components) {
|
|
53
|
+
if (!skinNameSet.has(component.skinClass)) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const relative = path.relative(path.dirname(declarationFile), component.source).replace(/\.tsx?$/, '.js');
|
|
57
|
+
const module = toModuleSpecifier(relative);
|
|
58
|
+
hosts.set(module, {
|
|
59
|
+
className: component.name,
|
|
60
|
+
module,
|
|
61
|
+
skinName: component.skinClass,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
for (const file of files) {
|
|
65
|
+
const className = path.basename(file).replace(/\.tsx?$/, '');
|
|
66
|
+
if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(className)) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const source = stripComments(await fs.readFile(file, 'utf-8'));
|
|
70
|
+
if (!hasNamedClassExport(source, className)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const match = /\bthis\.skinName\s*=\s*(['"])([^'"]+)\1/.exec(source);
|
|
74
|
+
const explicitSkinName = match?.[2];
|
|
75
|
+
if (explicitSkinName && !skinNameSet.has(explicitSkinName)) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const conventionalSkinNames = skinNames.filter(skinName => getSkinShortName(skinName) === `${className}Skin`);
|
|
79
|
+
const skinName = explicitSkinName ?? (conventionalSkinNames.length === 1 ? conventionalSkinNames[0] : undefined);
|
|
80
|
+
if (!skinName) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const relative = path.relative(path.dirname(declarationFile), file).replace(/\.tsx?$/, '.js');
|
|
84
|
+
const module = toModuleSpecifier(relative);
|
|
85
|
+
hosts.set(module, {
|
|
86
|
+
className,
|
|
87
|
+
module,
|
|
88
|
+
skinName,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return [...hosts.values()].sort((a, b) => a.module.localeCompare(b.module));
|
|
92
|
+
}
|
|
93
|
+
function getSkinShortName(skinName) {
|
|
94
|
+
return skinName.slice(skinName.lastIndexOf('.') + 1);
|
|
95
|
+
}
|
|
96
|
+
async function collectTypeScriptFiles(directory) {
|
|
97
|
+
const files = [];
|
|
98
|
+
async function walk(current) {
|
|
99
|
+
let entries;
|
|
100
|
+
try {
|
|
101
|
+
entries = await fs.readdir(current, { withFileTypes: true });
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (error.code === 'ENOENT') {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
for (const entry of entries) {
|
|
110
|
+
const absolute = path.join(current, entry.name);
|
|
111
|
+
if (entry.isDirectory()) {
|
|
112
|
+
await walk(absolute);
|
|
113
|
+
}
|
|
114
|
+
else if (entry.isFile() && /\.tsx?$/.test(entry.name) && !entry.name.endsWith('.d.ts')) {
|
|
115
|
+
files.push(absolute);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
await walk(directory);
|
|
120
|
+
return files.sort();
|
|
121
|
+
}
|
|
122
|
+
function stripComments(source) {
|
|
123
|
+
return source.replace(/\/\*[\s\S]*?\*\//g, '').replace(/\/\/.*$/gm, '');
|
|
124
|
+
}
|
|
125
|
+
function hasNamedClassExport(source, className) {
|
|
126
|
+
const escaped = className.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
127
|
+
if (new RegExp(`\\bexport\\s+(?:default\\s+)?class\\s+${escaped}\\b`).test(source)) {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
const declared = new RegExp(`\\bclass\\s+${escaped}\\b`).test(source);
|
|
131
|
+
const exported = new RegExp(`\\bexport\\s*\\{[^}]*\\b${escaped}\\b[^}]*\\}`, 's').test(source);
|
|
132
|
+
return declared && exported;
|
|
133
|
+
}
|
|
134
|
+
function toModuleSpecifier(value) {
|
|
135
|
+
const normalized = value.split(path.sep).join('/');
|
|
136
|
+
return normalized.startsWith('.') ? normalized : `./${normalized}`;
|
|
137
|
+
}
|
|
138
|
+
function collectSkinParts(project, declarationFile, skin) {
|
|
139
|
+
const nodes = new Map();
|
|
140
|
+
collectNodes(skin.children, nodes);
|
|
141
|
+
collectNodes(skin.declarations, nodes);
|
|
142
|
+
for (const property of skin.propertyChildren) {
|
|
143
|
+
collectNodes(property.nodes.filter((node) => typeof node !== 'string'), nodes);
|
|
144
|
+
}
|
|
145
|
+
return skin.skinParts.map(name => {
|
|
146
|
+
const node = nodes.get(name);
|
|
147
|
+
if (!node) {
|
|
148
|
+
throw new Error(`Skin part "${name}" in ${skin.className} has no matching KUI node.`);
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
name,
|
|
152
|
+
className: node.className,
|
|
153
|
+
module: resolveTypeModule(project, declarationFile, node),
|
|
154
|
+
};
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
function collectNodes(source, target) {
|
|
158
|
+
for (const node of source) {
|
|
159
|
+
if (node.id) {
|
|
160
|
+
target.set(node.id, node);
|
|
161
|
+
}
|
|
162
|
+
collectNodes(node.children, target);
|
|
163
|
+
for (const property of node.propertyChildren) {
|
|
164
|
+
collectNodes(property.nodes.filter((child) => typeof child !== 'string'), target);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function resolveTypeModule(project, declarationFile, node) {
|
|
169
|
+
const namespace = project.customNamespaces.find(candidate => candidate.specifier === node.module);
|
|
170
|
+
if (!namespace) {
|
|
171
|
+
return node.module;
|
|
172
|
+
}
|
|
173
|
+
const component = namespace.components?.find(candidate => candidate.name === node.className);
|
|
174
|
+
const source = component?.source ?? namespace.entry;
|
|
175
|
+
if (!source) {
|
|
176
|
+
return node.module;
|
|
177
|
+
}
|
|
178
|
+
const relative = path.relative(path.dirname(declarationFile), source).replace(/\.tsx?$/, '.js');
|
|
179
|
+
const specifier = relative.split(path.sep).join('/');
|
|
180
|
+
return specifier.startsWith('.') ? specifier : `./${specifier}`;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=skin-parts-declaration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skin-parts-declaration.js","sourceRoot":"","sources":["../../../src/core/kui/skin-parts-declaration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-location.d.ts","sourceRoot":"","sources":["../../../src/core/kui/source-location.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,aAAa;IAGzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAIpB,MAAM,EAAE,MAAM;IAajC;;OAEG;IACI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;CAuB7C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAEjE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-location.js","sourceRoot":"","sources":["../../../src/core/kui/source-location.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,OAAO,aAAa;IACzB,qEAAqE;IAEpD,WAAW,CAAoB;IAC/B,aAAa,CAAS;IAEvC,qEAAqE;IAErE,YAAmB,MAAc;QAChC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;QACnC,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;gBACjC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,CAAC;QACF,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,qEAAqE;IAErE;;OAEG;IACI,MAAM,CAAC,MAAc;QAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAC5E,MAAM,IAAI,UAAU,CAAC,8CAA8C,IAAI,CAAC,aAAa,SAAS,MAAM,EAAE,CAAC,CAAC;QACzG,CAAC;QAED,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QACvC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACxC,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACP,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;YACnB,CAAC;QACF,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACpC,OAAO;YACN,IAAI,EAAE,SAAS,GAAG,CAAC;YACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;YAChD,MAAM;SACN,CAAC;IACH,CAAC;CACD;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IACjD,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -22,7 +22,7 @@ export declare function normalizeModuleKey(absolutePath: string): string;
|
|
|
22
22
|
*
|
|
23
23
|
* A custom-namespace class (e.g. `HeroNarrowIR`) can be referenced two ways:
|
|
24
24
|
* game code imports it by relative path (`./ui/HeroNarrowIR.js`), while
|
|
25
|
-
*
|
|
25
|
+
* KUI-generated skins import it by the virtual specifier (`#ns/game`,
|
|
26
26
|
* resolved via the HTML import map — see `compile-custom-namespaces.ts`).
|
|
27
27
|
* `external: [specifier]` alone only catches the second case; esbuild matches
|
|
28
28
|
* externals by the literal import string, so the relative import would
|
|
@@ -25,7 +25,7 @@ export function normalizeModuleKey(absolutePath) {
|
|
|
25
25
|
*
|
|
26
26
|
* A custom-namespace class (e.g. `HeroNarrowIR`) can be referenced two ways:
|
|
27
27
|
* game code imports it by relative path (`./ui/HeroNarrowIR.js`), while
|
|
28
|
-
*
|
|
28
|
+
* KUI-generated skins import it by the virtual specifier (`#ns/game`,
|
|
29
29
|
* resolved via the HTML import map — see `compile-custom-namespaces.ts`).
|
|
30
30
|
* `external: [specifier]` alone only catches the second case; esbuild matches
|
|
31
31
|
* externals by the literal import string, so the relative import would
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { BuildContext, BuildPlugin } from '../pipeline.js';
|
|
2
2
|
/**
|
|
3
|
-
* Bundles each project-defined
|
|
3
|
+
* Bundles each project-defined KUI namespace (`ui.namespaces` in
|
|
4
4
|
* `kurot.config.ts`, matching Egret's `xmlns:game="game.*"` convention)
|
|
5
5
|
* into its own chunk under `js/`.
|
|
6
6
|
*
|
|
@@ -8,8 +8,8 @@ import type { BuildContext, BuildPlugin } from '../pipeline.js';
|
|
|
8
8
|
* etc.) is compiled exactly once and wired into the page via the same import
|
|
9
9
|
* map used for `@kurot/*` engine chunks (see `compile-engine.ts`). Both the
|
|
10
10
|
* app bundle (`compile-source.ts`) and the compiled skins bundle
|
|
11
|
-
* (`compile-
|
|
12
|
-
* referenced from
|
|
11
|
+
* (`compile-kui.ts`) mark the namespace specifier as external, so a class
|
|
12
|
+
* referenced from KUI and from game code resolves to the same module
|
|
13
13
|
* instance — never two copies with mismatched `instanceof` identity.
|
|
14
14
|
*
|
|
15
15
|
* In watch mode each barrel is rebuilt on change; the browser still needs a
|
|
@@ -6,7 +6,7 @@ import { ensureDir } from '../../utils/fs.js';
|
|
|
6
6
|
import { logger } from '../../utils/logger.js';
|
|
7
7
|
import { namespaceModuleExternalPlugin, normalizeModuleKey } from '../namespace-external-plugin.js';
|
|
8
8
|
/**
|
|
9
|
-
* Bundles each project-defined
|
|
9
|
+
* Bundles each project-defined KUI namespace (`ui.namespaces` in
|
|
10
10
|
* `kurot.config.ts`, matching Egret's `xmlns:game="game.*"` convention)
|
|
11
11
|
* into its own chunk under `js/`.
|
|
12
12
|
*
|
|
@@ -14,8 +14,8 @@ import { namespaceModuleExternalPlugin, normalizeModuleKey } from '../namespace-
|
|
|
14
14
|
* etc.) is compiled exactly once and wired into the page via the same import
|
|
15
15
|
* map used for `@kurot/*` engine chunks (see `compile-engine.ts`). Both the
|
|
16
16
|
* app bundle (`compile-source.ts`) and the compiled skins bundle
|
|
17
|
-
* (`compile-
|
|
18
|
-
* referenced from
|
|
17
|
+
* (`compile-kui.ts`) mark the namespace specifier as external, so a class
|
|
18
|
+
* referenced from KUI and from game code resolves to the same module
|
|
19
19
|
* instance — never two copies with mismatched `instanceof` identity.
|
|
20
20
|
*
|
|
21
21
|
* In watch mode each barrel is rebuilt on change; the browser still needs a
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile-kui.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/compile-kui.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAYhE;;GAEG;AACH,wBAAgB,UAAU,IAAI,WAAW,CA6CxC"}
|