@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.
Files changed (154) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +115 -303
  3. package/dist/core/components/discover-components.d.ts.map +1 -1
  4. package/dist/core/components/discover-components.js +12 -11
  5. package/dist/core/components/discover-components.js.map +1 -1
  6. package/dist/core/config.d.ts +8 -16
  7. package/dist/core/config.d.ts.map +1 -1
  8. package/dist/core/config.js +12 -4
  9. package/dist/core/config.js.map +1 -1
  10. package/dist/core/dev-server.d.ts +1 -1
  11. package/dist/core/dev-server.js +13 -13
  12. package/dist/core/dev-server.js.map +1 -1
  13. package/dist/core/diagnostics/codes.d.ts +3 -6
  14. package/dist/core/diagnostics/codes.d.ts.map +1 -1
  15. package/dist/core/diagnostics/codes.js +4 -10
  16. package/dist/core/diagnostics/codes.js.map +1 -1
  17. package/dist/core/diagnostics/output.d.ts +1 -1
  18. package/dist/core/diagnostics/output.d.ts.map +1 -1
  19. package/dist/core/{exml → kui}/ast.d.ts +17 -107
  20. package/dist/core/kui/ast.d.ts.map +1 -0
  21. package/dist/core/kui/ast.js +8 -0
  22. package/dist/core/{exml → kui}/ast.js.map +1 -1
  23. package/dist/core/kui/codegen.d.ts.map +1 -0
  24. package/dist/core/{exml → kui}/codegen.js +17 -176
  25. package/dist/core/kui/codegen.js.map +1 -0
  26. package/dist/core/kui/index.d.ts +29 -0
  27. package/dist/core/kui/index.d.ts.map +1 -0
  28. package/dist/core/kui/index.js +23 -0
  29. package/dist/core/kui/index.js.map +1 -0
  30. package/dist/core/{exml/exml-diagnostics.d.ts → kui/kui-diagnostics.d.ts} +2 -2
  31. package/dist/core/kui/kui-diagnostics.d.ts.map +1 -0
  32. package/dist/core/{exml/exml-diagnostics.js → kui/kui-diagnostics.js} +4 -4
  33. package/dist/core/kui/kui-diagnostics.js.map +1 -0
  34. package/dist/core/kui/kui-parser.d.ts +7 -0
  35. package/dist/core/kui/kui-parser.d.ts.map +1 -0
  36. package/dist/core/kui/kui-parser.js +157 -0
  37. package/dist/core/kui/kui-parser.js.map +1 -0
  38. package/dist/core/{exml → kui}/registry.d.ts +3 -26
  39. package/dist/core/kui/registry.d.ts.map +1 -0
  40. package/dist/core/{exml → kui}/registry.js +12 -43
  41. package/dist/core/kui/registry.js.map +1 -0
  42. package/dist/core/{exml → kui}/skin-module-builder.d.ts +6 -6
  43. package/dist/core/kui/skin-module-builder.d.ts.map +1 -0
  44. package/dist/core/{exml → kui}/skin-module-builder.js +7 -6
  45. package/dist/core/kui/skin-module-builder.js.map +1 -0
  46. package/dist/core/{exml → kui}/skin-parts-declaration.d.ts +1 -1
  47. package/dist/core/kui/skin-parts-declaration.d.ts.map +1 -0
  48. package/dist/core/kui/skin-parts-declaration.js +182 -0
  49. package/dist/core/kui/skin-parts-declaration.js.map +1 -0
  50. package/dist/core/kui/source-location.d.ts.map +1 -0
  51. package/dist/core/kui/source-location.js.map +1 -0
  52. package/dist/core/namespace-external-plugin.d.ts +1 -1
  53. package/dist/core/namespace-external-plugin.js +1 -1
  54. package/dist/core/plugins/compile-custom-namespaces.d.ts +3 -3
  55. package/dist/core/plugins/compile-custom-namespaces.js +3 -3
  56. package/dist/core/plugins/compile-kui.d.ts +6 -0
  57. package/dist/core/plugins/compile-kui.d.ts.map +1 -0
  58. package/dist/core/plugins/compile-kui.js +143 -0
  59. package/dist/core/plugins/compile-kui.js.map +1 -0
  60. package/dist/core/plugins/copy-assets.d.ts +3 -3
  61. package/dist/core/plugins/copy-assets.d.ts.map +1 -1
  62. package/dist/core/plugins/copy-assets.js +7 -6
  63. package/dist/core/plugins/copy-assets.js.map +1 -1
  64. package/dist/core/plugins/index.d.ts +1 -1
  65. package/dist/core/plugins/index.d.ts.map +1 -1
  66. package/dist/core/plugins/index.js +3 -3
  67. package/dist/core/plugins/index.js.map +1 -1
  68. package/dist/core/project.d.ts +14 -10
  69. package/dist/core/project.d.ts.map +1 -1
  70. package/dist/core/project.js +11 -7
  71. package/dist/core/project.js.map +1 -1
  72. package/dist/core/template.js +1 -1
  73. package/dist/core/template.js.map +1 -1
  74. package/dist/define.d.ts +1 -1
  75. package/dist/define.d.ts.map +1 -1
  76. package/package.json +5 -3
  77. package/templates/game/kurot.config.ts +3 -3
  78. package/templates/game/resource/ui/skins/ButtonSkin.kui.xml +24 -0
  79. package/templates/game/resource/ui/skins/CheckBoxSkin.kui.xml +45 -0
  80. package/templates/game/resource/ui/skins/ComboBoxSkin.kui.xml +32 -0
  81. package/templates/game/resource/ui/skins/GroupSkin.kui.xml +11 -0
  82. package/templates/game/resource/ui/skins/HScrollBarSkin.kui.xml +11 -0
  83. package/templates/game/resource/ui/skins/HSliderSkin.kui.xml +13 -0
  84. package/templates/game/resource/ui/skins/ImageSkin.kui.xml +11 -0
  85. package/templates/game/resource/ui/skins/ItemRendererSkin.kui.xml +22 -0
  86. package/templates/game/resource/ui/skins/LabelSkin.kui.xml +11 -0
  87. package/templates/game/resource/ui/skins/ListSkin.kui.xml +15 -0
  88. package/templates/game/resource/ui/skins/PanelSkin.kui.xml +18 -0
  89. package/templates/game/resource/ui/skins/ProgressBarSkin.kui.xml +14 -0
  90. package/templates/game/resource/ui/skins/RadioButtonSkin.kui.xml +45 -0
  91. package/templates/game/resource/ui/skins/ScrollerSkin.kui.xml +13 -0
  92. package/templates/game/resource/ui/skins/TabBarSkin.kui.xml +12 -0
  93. package/templates/game/resource/ui/skins/TextInputSkin.kui.xml +28 -0
  94. package/templates/game/resource/ui/skins/ToggleButtonSkin.kui.xml +34 -0
  95. package/templates/game/resource/ui/skins/ToggleSwitchSkin.kui.xml +29 -0
  96. package/templates/game/resource/ui/skins/VScrollBarSkin.kui.xml +11 -0
  97. package/templates/game/resource/ui/skins/VSliderSkin.kui.xml +13 -0
  98. package/templates/game/resource/ui/skins/ViewStackSkin.kui.xml +11 -0
  99. package/dist/core/exml/ast.d.ts.map +0 -1
  100. package/dist/core/exml/ast.js +0 -8
  101. package/dist/core/exml/codegen.d.ts.map +0 -1
  102. package/dist/core/exml/codegen.js.map +0 -1
  103. package/dist/core/exml/exml-diagnostics.d.ts.map +0 -1
  104. package/dist/core/exml/exml-diagnostics.js.map +0 -1
  105. package/dist/core/exml/exml-parser.d.ts +0 -27
  106. package/dist/core/exml/exml-parser.d.ts.map +0 -1
  107. package/dist/core/exml/exml-parser.js +0 -380
  108. package/dist/core/exml/exml-parser.js.map +0 -1
  109. package/dist/core/exml/index.d.ts +0 -54
  110. package/dist/core/exml/index.d.ts.map +0 -1
  111. package/dist/core/exml/index.js +0 -51
  112. package/dist/core/exml/index.js.map +0 -1
  113. package/dist/core/exml/registry.d.ts.map +0 -1
  114. package/dist/core/exml/registry.js.map +0 -1
  115. package/dist/core/exml/skin-module-builder.d.ts.map +0 -1
  116. package/dist/core/exml/skin-module-builder.js.map +0 -1
  117. package/dist/core/exml/skin-parts-declaration.d.ts.map +0 -1
  118. package/dist/core/exml/skin-parts-declaration.js +0 -82
  119. package/dist/core/exml/skin-parts-declaration.js.map +0 -1
  120. package/dist/core/exml/source-location.d.ts.map +0 -1
  121. package/dist/core/exml/source-location.js.map +0 -1
  122. package/dist/core/exml/xml-parser.d.ts +0 -86
  123. package/dist/core/exml/xml-parser.d.ts.map +0 -1
  124. package/dist/core/exml/xml-parser.js +0 -196
  125. package/dist/core/exml/xml-parser.js.map +0 -1
  126. package/dist/core/plugins/compile-exml.d.ts +0 -14
  127. package/dist/core/plugins/compile-exml.d.ts.map +0 -1
  128. package/dist/core/plugins/compile-exml.js +0 -256
  129. package/dist/core/plugins/compile-exml.js.map +0 -1
  130. package/templates/game/resource/default.thm.json +0 -19
  131. package/templates/game/resource/skins/eui/ButtonSkin.exml +0 -16
  132. package/templates/game/resource/skins/eui/CheckBoxSkin.exml +0 -18
  133. package/templates/game/resource/skins/eui/ComboBoxSkin.exml +0 -31
  134. package/templates/game/resource/skins/eui/GroupSkin.exml +0 -4
  135. package/templates/game/resource/skins/eui/HScrollBarSkin.exml +0 -6
  136. package/templates/game/resource/skins/eui/HSliderSkin.exml +0 -7
  137. package/templates/game/resource/skins/eui/ImageSkin.exml +0 -4
  138. package/templates/game/resource/skins/eui/ItemRendererSkin.exml +0 -15
  139. package/templates/game/resource/skins/eui/LabelSkin.exml +0 -7
  140. package/templates/game/resource/skins/eui/ListSkin.exml +0 -11
  141. package/templates/game/resource/skins/eui/PanelSkin.exml +0 -15
  142. package/templates/game/resource/skins/eui/ProgressBarSkin.exml +0 -11
  143. package/templates/game/resource/skins/eui/RadioButtonSkin.exml +0 -18
  144. package/templates/game/resource/skins/eui/ScrollerSkin.exml +0 -8
  145. package/templates/game/resource/skins/eui/TabBarSkin.exml +0 -6
  146. package/templates/game/resource/skins/eui/TextInputSkin.exml +0 -22
  147. package/templates/game/resource/skins/eui/ToggleButtonSkin.exml +0 -21
  148. package/templates/game/resource/skins/eui/ToggleSwitchSkin.exml +0 -15
  149. package/templates/game/resource/skins/eui/VScrollBarSkin.exml +0 -6
  150. package/templates/game/resource/skins/eui/VSliderSkin.exml +0 -7
  151. package/templates/game/resource/skins/eui/ViewStackSkin.exml +0 -4
  152. /package/dist/core/{exml → kui}/codegen.d.ts +0 -0
  153. /package/dist/core/{exml → kui}/source-location.d.ts +0 -0
  154. /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 EXML → JS code generation.
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
- eui: '@kurot/ui',
13
- egret: '@kurot/core',
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
- // Binding
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: this mirrors Egret's `xmlns:game="game.*"`
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
- return COMPONENTS[local];
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
- * EXML source file resolved for skin compilation.
4
+ * KUI source file resolved for skin compilation.
5
5
  */
6
- export interface ExmlFile {
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 EXML source text.
16
+ * UTF-8 KUI source text.
17
17
  */
18
18
  readonly contents: string;
19
19
  }
20
20
  /**
21
- * EXML source paired with its declared skin class name.
21
+ * KUI source paired with its declared skin class name.
22
22
  */
23
23
  export interface CompiledSkin {
24
- readonly file: ExmlFile;
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 EXML skins.
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 './exml-diagnostics.js';
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 EXML skins.
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('EXML compilation failed.');
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.EXML_COMPILE_FAILED,
61
+ code: DIAGNOSTIC_CODES.KUI_COMPILE_FAILED,
62
62
  severity: 'error',
63
- message: `EXML compile failed: ${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
- return `create${className.split('.').pop()}`;
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
- * EXML-generated skins import it by the virtual specifier (`#ns/game`,
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
- * EXML-generated skins import it by the virtual specifier (`#ns/game`,
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 EXML namespace (`exml.namespaces` in
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-exml.ts`) mark the namespace specifier as external, so a class
12
- * referenced from EXML and from game code resolves to the same module
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 EXML namespace (`exml.namespaces` in
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-exml.ts`) mark the namespace specifier as external, so a class
18
- * referenced from EXML and from game code resolves to the same module
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,6 @@
1
+ import type { BuildPlugin } from '../pipeline.js';
2
+ /**
3
+ * Compiles canonical KUI Skin documents and generates the runtime theme map.
4
+ */
5
+ export declare function compileKUI(): BuildPlugin;
6
+ //# sourceMappingURL=compile-kui.d.ts.map
@@ -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"}