@kurot/cli 1.1.1 → 1.1.3

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 (150) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +40 -9
  3. package/dist/commands/build.d.ts +3 -0
  4. package/dist/commands/build.d.ts.map +1 -1
  5. package/dist/commands/build.js +3 -0
  6. package/dist/commands/build.js.map +1 -1
  7. package/dist/commands/clean.d.ts +3 -0
  8. package/dist/commands/clean.d.ts.map +1 -1
  9. package/dist/commands/clean.js +3 -0
  10. package/dist/commands/clean.js.map +1 -1
  11. package/dist/commands/create.d.ts +3 -0
  12. package/dist/commands/create.d.ts.map +1 -1
  13. package/dist/commands/create.js +3 -0
  14. package/dist/commands/create.js.map +1 -1
  15. package/dist/commands/dev.d.ts +3 -0
  16. package/dist/commands/dev.d.ts.map +1 -1
  17. package/dist/commands/dev.js +5 -1
  18. package/dist/commands/dev.js.map +1 -1
  19. package/dist/core/components/discover-components.d.ts +16 -0
  20. package/dist/core/components/discover-components.d.ts.map +1 -0
  21. package/dist/core/components/discover-components.js +191 -0
  22. package/dist/core/components/discover-components.js.map +1 -0
  23. package/dist/core/config.d.ts +45 -17
  24. package/dist/core/config.d.ts.map +1 -1
  25. package/dist/core/config.js +16 -6
  26. package/dist/core/config.js.map +1 -1
  27. package/dist/core/dev-server.d.ts +5 -5
  28. package/dist/core/dev-server.d.ts.map +1 -1
  29. package/dist/core/dev-server.js +97 -25
  30. package/dist/core/dev-server.js.map +1 -1
  31. package/dist/core/diagnostics/output.d.ts +31 -0
  32. package/dist/core/diagnostics/output.d.ts.map +1 -1
  33. package/dist/core/diagnostics/output.js +13 -0
  34. package/dist/core/diagnostics/output.js.map +1 -1
  35. package/dist/core/diagnostics/types.d.ts +15 -0
  36. package/dist/core/diagnostics/types.d.ts.map +1 -1
  37. package/dist/core/errors.d.ts.map +1 -1
  38. package/dist/core/errors.js.map +1 -1
  39. package/dist/core/exml/ast.d.ts +27 -0
  40. package/dist/core/exml/ast.d.ts.map +1 -1
  41. package/dist/core/exml/codegen.d.ts +6 -7
  42. package/dist/core/exml/codegen.d.ts.map +1 -1
  43. package/dist/core/exml/codegen.js +57 -87
  44. package/dist/core/exml/codegen.js.map +1 -1
  45. package/dist/core/exml/exml-diagnostics.d.ts +2 -1
  46. package/dist/core/exml/exml-diagnostics.d.ts.map +1 -1
  47. package/dist/core/exml/exml-diagnostics.js +2 -2
  48. package/dist/core/exml/exml-diagnostics.js.map +1 -1
  49. package/dist/core/exml/exml-parser.d.ts +11 -11
  50. package/dist/core/exml/exml-parser.d.ts.map +1 -1
  51. package/dist/core/exml/exml-parser.js +93 -179
  52. package/dist/core/exml/exml-parser.js.map +1 -1
  53. package/dist/core/exml/index.d.ts +13 -13
  54. package/dist/core/exml/index.d.ts.map +1 -1
  55. package/dist/core/exml/index.js +12 -13
  56. package/dist/core/exml/index.js.map +1 -1
  57. package/dist/core/exml/registry.d.ts +39 -33
  58. package/dist/core/exml/registry.d.ts.map +1 -1
  59. package/dist/core/exml/registry.js +56 -43
  60. package/dist/core/exml/registry.js.map +1 -1
  61. package/dist/core/exml/skin-module-builder.d.ts +14 -0
  62. package/dist/core/exml/skin-module-builder.d.ts.map +1 -1
  63. package/dist/core/exml/skin-module-builder.js +8 -2
  64. package/dist/core/exml/skin-module-builder.js.map +1 -1
  65. package/dist/core/exml/xml-parser.d.ts +36 -26
  66. package/dist/core/exml/xml-parser.d.ts.map +1 -1
  67. package/dist/core/exml/xml-parser.js +133 -144
  68. package/dist/core/exml/xml-parser.js.map +1 -1
  69. package/dist/core/namespace-external-plugin.d.ts +5 -5
  70. package/dist/core/namespace-external-plugin.js +5 -5
  71. package/dist/core/pipeline.d.ts +59 -39
  72. package/dist/core/pipeline.d.ts.map +1 -1
  73. package/dist/core/pipeline.js +6 -1
  74. package/dist/core/pipeline.js.map +1 -1
  75. package/dist/core/plugins/clean-output.d.ts +3 -0
  76. package/dist/core/plugins/clean-output.d.ts.map +1 -1
  77. package/dist/core/plugins/clean-output.js +3 -1
  78. package/dist/core/plugins/clean-output.js.map +1 -1
  79. package/dist/core/plugins/compile-custom-namespaces.d.ts +6 -1
  80. package/dist/core/plugins/compile-custom-namespaces.d.ts.map +1 -1
  81. package/dist/core/plugins/compile-custom-namespaces.js +74 -11
  82. package/dist/core/plugins/compile-custom-namespaces.js.map +1 -1
  83. package/dist/core/plugins/compile-engine.d.ts +2 -4
  84. package/dist/core/plugins/compile-engine.d.ts.map +1 -1
  85. package/dist/core/plugins/compile-engine.js +5 -5
  86. package/dist/core/plugins/compile-engine.js.map +1 -1
  87. package/dist/core/plugins/compile-exml.d.ts.map +1 -1
  88. package/dist/core/plugins/compile-exml.js +18 -3
  89. package/dist/core/plugins/compile-exml.js.map +1 -1
  90. package/dist/core/plugins/compile-source.d.ts +1 -1
  91. package/dist/core/plugins/compile-source.d.ts.map +1 -1
  92. package/dist/core/plugins/compile-source.js +10 -8
  93. package/dist/core/plugins/compile-source.js.map +1 -1
  94. package/dist/core/plugins/component-catalog.d.ts +6 -0
  95. package/dist/core/plugins/component-catalog.d.ts.map +1 -0
  96. package/dist/core/plugins/component-catalog.js +30 -0
  97. package/dist/core/plugins/component-catalog.js.map +1 -0
  98. package/dist/core/plugins/copy-assets.d.ts +1 -2
  99. package/dist/core/plugins/copy-assets.d.ts.map +1 -1
  100. package/dist/core/plugins/copy-assets.js +1 -3
  101. package/dist/core/plugins/copy-assets.js.map +1 -1
  102. package/dist/core/plugins/generate-html.d.ts.map +1 -1
  103. package/dist/core/plugins/generate-html.js +1 -1
  104. package/dist/core/plugins/generate-html.js.map +1 -1
  105. package/dist/core/plugins/index.d.ts +1 -0
  106. package/dist/core/plugins/index.d.ts.map +1 -1
  107. package/dist/core/plugins/index.js +3 -0
  108. package/dist/core/plugins/index.js.map +1 -1
  109. package/dist/core/project.d.ts +85 -6
  110. package/dist/core/project.d.ts.map +1 -1
  111. package/dist/core/project.js +53 -8
  112. package/dist/core/project.js.map +1 -1
  113. package/dist/core/template.d.ts +8 -1
  114. package/dist/core/template.d.ts.map +1 -1
  115. package/dist/core/template.js +18 -8
  116. package/dist/core/template.js.map +1 -1
  117. package/dist/define.d.ts +1 -1
  118. package/dist/define.d.ts.map +1 -1
  119. package/dist/utils/fs.d.ts +15 -0
  120. package/dist/utils/fs.d.ts.map +1 -1
  121. package/dist/utils/fs.js +15 -0
  122. package/dist/utils/fs.js.map +1 -1
  123. package/dist/utils/logger.d.ts +7 -3
  124. package/dist/utils/logger.d.ts.map +1 -1
  125. package/dist/utils/logger.js +7 -3
  126. package/dist/utils/logger.js.map +1 -1
  127. package/package.json +1 -1
  128. package/templates/game/kurot.config.ts +4 -2
  129. package/templates/game/src/game-components.ts +0 -6
  130. /package/templates/game/resource/skins/{ButtonSkin.exml → eui/ButtonSkin.exml} +0 -0
  131. /package/templates/game/resource/skins/{CheckBoxSkin.exml → eui/CheckBoxSkin.exml} +0 -0
  132. /package/templates/game/resource/skins/{ComboBoxSkin.exml → eui/ComboBoxSkin.exml} +0 -0
  133. /package/templates/game/resource/skins/{GroupSkin.exml → eui/GroupSkin.exml} +0 -0
  134. /package/templates/game/resource/skins/{HScrollBarSkin.exml → eui/HScrollBarSkin.exml} +0 -0
  135. /package/templates/game/resource/skins/{HSliderSkin.exml → eui/HSliderSkin.exml} +0 -0
  136. /package/templates/game/resource/skins/{ImageSkin.exml → eui/ImageSkin.exml} +0 -0
  137. /package/templates/game/resource/skins/{ItemRendererSkin.exml → eui/ItemRendererSkin.exml} +0 -0
  138. /package/templates/game/resource/skins/{LabelSkin.exml → eui/LabelSkin.exml} +0 -0
  139. /package/templates/game/resource/skins/{ListSkin.exml → eui/ListSkin.exml} +0 -0
  140. /package/templates/game/resource/skins/{PanelSkin.exml → eui/PanelSkin.exml} +0 -0
  141. /package/templates/game/resource/skins/{ProgressBarSkin.exml → eui/ProgressBarSkin.exml} +0 -0
  142. /package/templates/game/resource/skins/{RadioButtonSkin.exml → eui/RadioButtonSkin.exml} +0 -0
  143. /package/templates/game/resource/skins/{ScrollerSkin.exml → eui/ScrollerSkin.exml} +0 -0
  144. /package/templates/game/resource/skins/{TabBarSkin.exml → eui/TabBarSkin.exml} +0 -0
  145. /package/templates/game/resource/skins/{TextInputSkin.exml → eui/TextInputSkin.exml} +0 -0
  146. /package/templates/game/resource/skins/{ToggleButtonSkin.exml → eui/ToggleButtonSkin.exml} +0 -0
  147. /package/templates/game/resource/skins/{ToggleSwitchSkin.exml → eui/ToggleSwitchSkin.exml} +0 -0
  148. /package/templates/game/resource/skins/{VScrollBarSkin.exml → eui/VScrollBarSkin.exml} +0 -0
  149. /package/templates/game/resource/skins/{VSliderSkin.exml → eui/VSliderSkin.exml} +0 -0
  150. /package/templates/game/resource/skins/{ViewStackSkin.exml → eui/ViewStackSkin.exml} +0 -0
@@ -1,4 +1,7 @@
1
- import { type ProjectConfig } from './config.js';
1
+ import type { ProjectConfig } from './config.js';
2
+ /**
3
+ * Output mode used to resolve a project and its build paths.
4
+ */
2
5
  export type BuildMode = 'development' | 'release';
3
6
  /**
4
7
  * A project-defined EXML namespace (Egret's `xmlns:game="game.*"` convention).
@@ -18,9 +21,76 @@ export interface CustomNamespace {
18
21
  */
19
22
  readonly specifier: string;
20
23
  /**
21
- * Absolute path to the barrel file exporting every class in this namespace.
24
+ * Absolute path to a user-maintained barrel file. Convention-based component
25
+ * namespaces omit this and receive a generated entry during compilation.
22
26
  */
23
- readonly entry: string;
27
+ readonly entry?: string;
28
+ /**
29
+ * Components exported by a generated namespace entry.
30
+ */
31
+ readonly components?: readonly ProjectComponent[];
32
+ }
33
+ /**
34
+ * Resolved directories for convention-based reusable UI components.
35
+ */
36
+ export interface ComponentConvention {
37
+ /**
38
+ * XML namespace prefix used by component tags.
39
+ */
40
+ readonly prefix: string;
41
+ /**
42
+ * Virtual module specifier shared by compiled skins and application code.
43
+ */
44
+ readonly specifier: string;
45
+ /**
46
+ * Absolute directory containing component TypeScript sources.
47
+ */
48
+ readonly sourceDir: string;
49
+ /**
50
+ * Absolute directory containing paired component skins.
51
+ */
52
+ readonly skinDir: string;
53
+ }
54
+ /**
55
+ * A reusable component source paired with its standard EUI skin.
56
+ */
57
+ export interface ProjectComponent {
58
+ /**
59
+ * Exported component class name.
60
+ */
61
+ readonly name: string;
62
+ /**
63
+ * Complete EXML tag, including the configured namespace prefix.
64
+ */
65
+ readonly tag: string;
66
+ /**
67
+ * XML namespace prefix used by the component tag.
68
+ */
69
+ readonly namespace: string;
70
+ /**
71
+ * Virtual module specifier that owns the component export.
72
+ */
73
+ readonly specifier: string;
74
+ /**
75
+ * Absolute TypeScript source path.
76
+ */
77
+ readonly source: string;
78
+ /**
79
+ * POSIX TypeScript source path relative to the project root.
80
+ */
81
+ readonly sourceRelative: string;
82
+ /**
83
+ * Absolute EXML skin path.
84
+ */
85
+ readonly skin: string;
86
+ /**
87
+ * POSIX EXML skin path relative to the project root.
88
+ */
89
+ readonly skinRelative: string;
90
+ /**
91
+ * Skin class declared by the EXML root.
92
+ */
93
+ readonly skinClass: string;
24
94
  }
25
95
  /**
26
96
  * Resolved view of a Kurot project.
@@ -74,9 +144,18 @@ export interface Project {
74
144
  */
75
145
  readonly enginePackages: string[];
76
146
  /**
77
- * Project-defined EXML namespaces, resolved from `config.exml.namespaces`.
147
+ * Project-defined EXML namespaces from manual barrels and the generated
148
+ * reusable-component entry.
78
149
  */
79
150
  readonly customNamespaces: CustomNamespace[];
151
+ /**
152
+ * Resolved convention-based component directories, when configured.
153
+ */
154
+ readonly componentConvention?: ComponentConvention;
155
+ /**
156
+ * Validated reusable components discovered from the configured directories.
157
+ */
158
+ readonly components: ProjectComponent[];
80
159
  }
81
160
  /**
82
161
  * Base output folder names, used by both build and clean.
@@ -88,8 +167,8 @@ export declare const OUTPUT_DIRS: {
88
167
  /**
89
168
  * Loads and resolves the project rooted at the current working directory.
90
169
  *
91
- * @param mode - The build mode to resolve the project for
92
- * @returns The resolved project view
170
+ * @param mode - Build mode to resolve the project for.
171
+ * @returns The resolved project view.
93
172
  */
94
173
  export declare function loadProject(mode: BuildMode): Promise<Project>;
95
174
  //# sourceMappingURL=project.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/core/project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,eAAe,EAAE,CAAC;CAC7C;AAED;;GAEG;AACH,eAAO,MAAM,WAAW;;;CAAgE,CAAC;AAEzF;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBnE"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/core/project.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IACnD;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAID;;GAEG;AACH,eAAO,MAAM,WAAW;;;CAAgE,CAAC;AAEzF;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAsCnE"}
@@ -1,6 +1,9 @@
1
1
  import * as path from 'node:path';
2
2
  import * as fs from 'node:fs';
3
3
  import { loadConfig } from './config.js';
4
+ import { discoverComponents } from './components/discover-components.js';
5
+ import { ConfigError } from './errors.js';
6
+ const NAMESPACE_SPECIFIER_PREFIX = '#ns/';
4
7
  /**
5
8
  * Base output folder names, used by both build and clean.
6
9
  */
@@ -8,8 +11,8 @@ export const OUTPUT_DIRS = { development: 'bin-debug', release: 'bin-release' };
8
11
  /**
9
12
  * Loads and resolves the project rooted at the current working directory.
10
13
  *
11
- * @param mode - The build mode to resolve the project for
12
- * @returns The resolved project view
14
+ * @param mode - Build mode to resolve the project for.
15
+ * @returns The resolved project view.
13
16
  */
14
17
  export async function loadProject(mode) {
15
18
  const root = process.cwd();
@@ -17,6 +20,19 @@ export async function loadProject(mode) {
17
20
  const outputDir = mode === 'release'
18
21
  ? path.resolve(root, OUTPUT_DIRS.release, 'web', timestamp())
19
22
  : path.resolve(root, config.output.dir);
23
+ const componentConvention = resolveComponentConvention(root, config);
24
+ const components = await discoverComponents(root, componentConvention);
25
+ const customNamespaces = resolveCustomNamespaces(root, config.exml?.namespaces);
26
+ if (componentConvention) {
27
+ if (customNamespaces.some(namespace => namespace.prefix === componentConvention.prefix)) {
28
+ throw new ConfigError(`Invalid config: exml.components.namespace '${componentConvention.prefix}' conflicts with exml.namespaces.${componentConvention.prefix}`);
29
+ }
30
+ customNamespaces.push({
31
+ prefix: componentConvention.prefix,
32
+ specifier: componentConvention.specifier,
33
+ components,
34
+ });
35
+ }
20
36
  return {
21
37
  root,
22
38
  mode,
@@ -28,14 +44,11 @@ export async function loadProject(mode) {
28
44
  htmlTemplate: config.html ? path.resolve(root, config.html.template) : undefined,
29
45
  themeFile: config.exml ? path.resolve(root, config.exml.themeFile) : undefined,
30
46
  enginePackages: detectEnginePackages(root),
31
- customNamespaces: resolveCustomNamespaces(root, config.exml?.namespaces),
47
+ customNamespaces,
48
+ componentConvention,
49
+ components,
32
50
  };
33
51
  }
34
- /**
35
- * The specifier prefix used for project-defined EXML namespaces (kept out of
36
- * npm's `@scope` space).
37
- */
38
- const NAMESPACE_SPECIFIER_PREFIX = '#ns/';
39
52
  /**
40
53
  * Resolves `config.exml.namespaces` into `CustomNamespace` entries with
41
54
  * absolute barrel paths.
@@ -49,6 +62,38 @@ function resolveCustomNamespaces(root, namespaces) {
49
62
  entry: path.resolve(root, entry),
50
63
  }));
51
64
  }
65
+ /**
66
+ * Resolves the reusable-component convention into absolute project paths.
67
+ *
68
+ * Source files must remain inside `src`, and component skins must remain
69
+ * inside `resource`; paths outside those roots are rejected as invalid config.
70
+ *
71
+ * @returns The resolved convention, or `undefined` when components are not configured.
72
+ * @throws {ConfigError} If either configured directory escapes its required project root.
73
+ */
74
+ function resolveComponentConvention(root, config) {
75
+ const components = config.exml?.components;
76
+ if (!components)
77
+ return undefined;
78
+ const sourceDir = path.resolve(root, components.sourceDir);
79
+ const skinDir = path.resolve(root, components.skinDir);
80
+ if (!isWithin(path.resolve(root, 'src'), sourceDir)) {
81
+ throw new ConfigError('Invalid config: exml.components.sourceDir must be inside the project src directory');
82
+ }
83
+ if (!isWithin(path.resolve(root, 'resource'), skinDir)) {
84
+ throw new ConfigError('Invalid config: exml.components.skinDir must be inside the project resource directory');
85
+ }
86
+ return {
87
+ prefix: components.namespace,
88
+ specifier: `${NAMESPACE_SPECIFIER_PREFIX}${components.namespace}`,
89
+ sourceDir,
90
+ skinDir,
91
+ };
92
+ }
93
+ function isWithin(directory, target) {
94
+ const relative = path.relative(directory, target);
95
+ return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
96
+ }
52
97
  /**
53
98
  * Reads `@kurot/*` runtime dependencies (excluding the CLI) from package.json.
54
99
  */
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/core/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/core/project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAsK1C,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAE1C;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAW,CAAC;AAEzF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAe;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,SAAS,GACd,IAAI,KAAK,SAAS;QACjB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC7D,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IACvE,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChF,IAAI,mBAAmB,EAAE,CAAC;QACzB,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YACzF,MAAM,IAAI,WAAW,CACpB,8CAA8C,mBAAmB,CAAC,MAAM,oCAAoC,mBAAmB,CAAC,MAAM,EAAE,CACxI,CAAC;QACH,CAAC;QACD,gBAAgB,CAAC,IAAI,CAAC;YACrB,MAAM,EAAE,mBAAmB,CAAC,MAAM;YAClC,SAAS,EAAE,mBAAmB,CAAC,SAAS;YACxC,UAAU;SACV,CAAC,CAAC;IACJ,CAAC;IAED,OAAO;QACN,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;QACvC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;QACjC,SAAS;QACT,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC;QAC3C,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAChF,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC9E,cAAc,EAAE,oBAAoB,CAAC,IAAI,CAAC;QAC1C,gBAAgB;QAChB,mBAAmB;QACnB,UAAU;KACV,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAAC,IAAY,EAAE,UAA8C;IAC5F,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3D,MAAM;QACN,SAAS,EAAE,GAAG,0BAA0B,GAAG,MAAM,EAAE;QACnD,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;KAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,0BAA0B,CAAC,IAAY,EAAE,MAAqB;IACtE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC;IAC3C,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,WAAW,CAAC,oFAAoF,CAAC,CAAC;IAC7G,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,WAAW,CAAC,uFAAuF,CAAC,CAAC;IAChH,CAAC;IACD,OAAO;QACN,MAAM,EAAE,UAAU,CAAC,SAAS;QAC5B,SAAS,EAAE,GAAG,0BAA0B,GAAG,UAAU,CAAC,SAAS,EAAE;QACjE,SAAS;QACT,OAAO;KACP,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,SAAiB,EAAE,MAAc;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClD,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,IAAY;IACzC,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAE/E,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;aACxC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,KAAK,YAAY,CAAC;aACnE,IAAI,EAAE,CAAC;IACV,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,SAAS;IACjB,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,CACN,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACf,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CACjB,CAAC;AACH,CAAC"}
@@ -1,4 +1,10 @@
1
+ /**
2
+ * Project templates bundled with the CLI.
3
+ */
1
4
  export declare const TEMPLATES: readonly ["game", "empty"];
5
+ /**
6
+ * Name of a bundled project template.
7
+ */
2
8
  export type TemplateName = (typeof TEMPLATES)[number];
3
9
  /**
4
10
  * Scaffolds a new project by copying `templates/<template>/` into `./<name>/`,
@@ -7,7 +13,8 @@ export type TemplateName = (typeof TEMPLATES)[number];
7
13
  * - `name` is set to the project name.
8
14
  * - `@kurot/cli` is pinned to the version of the CLI doing the scaffolding,
9
15
  * so a project always uses the CLI that created it (never a stale template pin).
10
- * - `@kurot/*` engine packages are set to `latest`.
16
+ * - `@kurot/*` engine packages are pinned to the registry's latest concrete
17
+ * version, with the `latest` tag retained only as an offline fallback.
11
18
  */
12
19
  export declare function scaffoldProject(name: string, template: TemplateName): Promise<void>;
13
20
  //# sourceMappingURL=template.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/core/template.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,SAAS,4BAA6B,CAAC;AACpD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBzF"}
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/core/template.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,eAAO,MAAM,SAAS,4BAA6B,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BzF"}
@@ -1,10 +1,13 @@
1
- import * as path from 'node:path';
2
1
  import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
- import { copyDir, writeFile, exists } from '../utils/fs.js';
4
+ import { copyDir, ensureDir, exists, writeFile } from '../utils/fs.js';
5
5
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
6
6
  const TEMPLATES_DIR = path.resolve(__dirname, '../../templates');
7
7
  const CLI_PKG = path.resolve(__dirname, '../../package.json');
8
+ /**
9
+ * Project templates bundled with the CLI.
10
+ */
8
11
  export const TEMPLATES = ['game', 'empty'];
9
12
  /**
10
13
  * Scaffolds a new project by copying `templates/<template>/` into `./<name>/`,
@@ -13,7 +16,8 @@ export const TEMPLATES = ['game', 'empty'];
13
16
  * - `name` is set to the project name.
14
17
  * - `@kurot/cli` is pinned to the version of the CLI doing the scaffolding,
15
18
  * so a project always uses the CLI that created it (never a stale template pin).
16
- * - `@kurot/*` engine packages are set to `latest`.
19
+ * - `@kurot/*` engine packages are pinned to the registry's latest concrete
20
+ * version, with the `latest` tag retained only as an offline fallback.
17
21
  */
18
22
  export async function scaffoldProject(name, template) {
19
23
  const templateDir = path.join(TEMPLATES_DIR, template);
@@ -25,6 +29,12 @@ export async function scaffoldProject(name, template) {
25
29
  throw new Error(`Directory "${name}" already exists`);
26
30
  }
27
31
  await copyDir(templateDir, destDir);
32
+ if (template === 'game') {
33
+ await Promise.all([
34
+ ensureDir(path.join(destDir, 'src/components')),
35
+ ensureDir(path.join(destDir, 'resource/skins/components')),
36
+ ]);
37
+ }
28
38
  const pkgPath = path.join(destDir, 'package.json');
29
39
  if (await exists(pkgPath)) {
30
40
  const pkg = JSON.parse(await fs.readFile(pkgPath, 'utf-8'));
@@ -43,10 +53,12 @@ async function pinKurotDeps(deps, cliVersion) {
43
53
  if (!deps)
44
54
  return;
45
55
  await Promise.all(Object.keys(deps).map(async (dep) => {
46
- if (dep === '@kurot/cli')
56
+ if (dep === '@kurot/cli') {
47
57
  deps[dep] = `^${cliVersion}`;
48
- else if (dep.startsWith('@kurot/'))
58
+ }
59
+ else if (dep.startsWith('@kurot/')) {
49
60
  deps[dep] = await resolveLatest(dep);
61
+ }
50
62
  }));
51
63
  }
52
64
  /**
@@ -64,9 +76,7 @@ async function resolveLatest(pkg) {
64
76
  return `^${data.version}`;
65
77
  }
66
78
  }
67
- catch {
68
- // Offline / unpublished — fall back below.
69
- }
79
+ catch { }
70
80
  return 'latest';
71
81
  }
72
82
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/core/template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/core/template.ts"],"names":[],"mappings":"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"}
package/dist/define.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export type { ProjectConfig, BuildTarget, StageConfig, ExmlConfig, OutputConfig } from './core/config.js';
1
+ export type { ProjectConfig, BuildTarget, StageConfig, ExmlConfig, ComponentsConfig, OutputConfig, } from './core/config.js';
2
2
  //# sourceMappingURL=define.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,YAAY,GACZ,MAAM,kBAAkB,CAAC"}
@@ -1,5 +1,20 @@
1
+ /**
2
+ * Creates a directory and any missing parent directories.
3
+ */
1
4
  export declare function ensureDir(dir: string): Promise<void>;
5
+ /**
6
+ * Recursively copies a directory.
7
+ *
8
+ * The optional filter receives each file's base name; directories are always
9
+ * traversed so matching descendants remain discoverable.
10
+ */
2
11
  export declare function copyDir(src: string, dest: string, filter?: (name: string) => boolean): Promise<void>;
12
+ /**
13
+ * Writes a UTF-8 file after creating its parent directory.
14
+ */
3
15
  export declare function writeFile(filePath: string, content: string): Promise<void>;
16
+ /**
17
+ * Tests whether a filesystem path is accessible without propagating access errors.
18
+ */
4
19
  export declare function exists(filePath: string): Promise<boolean>;
5
20
  //# sourceMappingURL=fs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAY1G;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK/D"}
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAY1G;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK/D"}
package/dist/utils/fs.js CHANGED
@@ -1,8 +1,17 @@
1
1
  import * as fs from 'node:fs/promises';
2
2
  import * as path from 'node:path';
3
+ /**
4
+ * Creates a directory and any missing parent directories.
5
+ */
3
6
  export async function ensureDir(dir) {
4
7
  await fs.mkdir(dir, { recursive: true });
5
8
  }
9
+ /**
10
+ * Recursively copies a directory.
11
+ *
12
+ * The optional filter receives each file's base name; directories are always
13
+ * traversed so matching descendants remain discoverable.
14
+ */
6
15
  export async function copyDir(src, dest, filter) {
7
16
  await ensureDir(dest);
8
17
  const entries = await fs.readdir(src, { withFileTypes: true });
@@ -17,10 +26,16 @@ export async function copyDir(src, dest, filter) {
17
26
  }
18
27
  }
19
28
  }
29
+ /**
30
+ * Writes a UTF-8 file after creating its parent directory.
31
+ */
20
32
  export async function writeFile(filePath, content) {
21
33
  await ensureDir(path.dirname(filePath));
22
34
  await fs.writeFile(filePath, content, 'utf-8');
23
35
  }
36
+ /**
37
+ * Tests whether a filesystem path is accessible without propagating access errors.
38
+ */
24
39
  export async function exists(filePath) {
25
40
  return fs
26
41
  .access(filePath)
@@ -1 +1 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IAC1C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,IAAY,EAAE,MAAkC;IAC1F,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,MAAM,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IAChE,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB;IAC5C,OAAO,EAAE;SACP,MAAM,CAAC,QAAQ,CAAC;SAChB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IAC1C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,IAAY,EAAE,MAAkC;IAC1F,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,MAAM,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IAChE,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB;IAC5C,OAAO,EAAE;SACP,MAAM,CAAC,QAAQ,CAAC;SAChB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC"}
@@ -1,12 +1,16 @@
1
+ /**
2
+ * Enables or suppresses human-readable logger output.
3
+ * Machine-readable diagnostic modes disable it to keep stdout parseable.
4
+ */
1
5
  export declare function setLoggerEnabled(value: boolean): void;
6
+ /**
7
+ * Human-readable CLI logger with a consistent Kurot prefix and severity color.
8
+ */
2
9
  export declare const logger: {
3
10
  info: (msg: string) => void;
4
11
  success: (msg: string) => void;
5
12
  warn: (msg: string) => void;
6
13
  error: (msg: string) => void;
7
- /**
8
- * Logs a single pipeline step, indented under the current command.
9
- */
10
14
  step: (msg: string) => void;
11
15
  };
12
16
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAgBA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAErD;AAED,eAAO,MAAM,MAAM;gBACN,MAAM,KAAG,IAAI;mBACV,MAAM,KAAG,IAAI;gBAChB,MAAM,KAAG,IAAI;iBACZ,MAAM,KAAG,IAAI;IAC1B;;OAEG;gBACS,MAAM,KAAG,IAAI;CACzB,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAErD;AAED;;GAEG;AACH,eAAO,MAAM,MAAM;gBACN,MAAM,KAAG,IAAI;mBACV,MAAM,KAAG,IAAI;gBAChB,MAAM,KAAG,IAAI;iBACZ,MAAM,KAAG,IAAI;gBACd,MAAM,KAAG,IAAI;CACzB,CAAC"}
@@ -11,17 +11,21 @@ function write(method, message) {
11
11
  return;
12
12
  console[method](message);
13
13
  }
14
+ /**
15
+ * Enables or suppresses human-readable logger output.
16
+ * Machine-readable diagnostic modes disable it to keep stdout parseable.
17
+ */
14
18
  export function setLoggerEnabled(value) {
15
19
  enabled = value;
16
20
  }
21
+ /**
22
+ * Human-readable CLI logger with a consistent Kurot prefix and severity color.
23
+ */
17
24
  export const logger = {
18
25
  info: (msg) => write('log', `${tag} ${msg}`),
19
26
  success: (msg) => write('log', `${tag} ${green}${msg}${reset}`),
20
27
  warn: (msg) => write('warn', `${tag} ${yellow}${msg}${reset}`),
21
28
  error: (msg) => write('error', `${tag} ${red}${msg}${reset}`),
22
- /**
23
- * Logs a single pipeline step, indented under the current command.
24
- */
25
29
  step: (msg) => write('log', `${tag} ${dim}›${reset} ${msg}`),
26
30
  };
27
31
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,GAAG,GAAG,UAAU,CAAC;AACvB,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,MAAM,GAAG,GAAG,SAAS,CAAC;AAEtB,MAAM,GAAG,GAAG,GAAG,IAAI,UAAU,KAAK,EAAE,CAAC;AAErC,IAAI,OAAO,GAAG,IAAI,CAAC;AAEnB,SAAS,KAAK,CAAC,MAAgC,EAAE,OAAe;IAC/D,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC9C,OAAO,GAAG,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IAC1D,OAAO,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;IAC7E,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;IAC5E,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;IAC3E;;OAEG;IACH,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;CAC1E,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,GAAG,GAAG,UAAU,CAAC;AACvB,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,MAAM,GAAG,GAAG,SAAS,CAAC;AAEtB,MAAM,GAAG,GAAG,GAAG,IAAI,UAAU,KAAK,EAAE,CAAC;AAErC,IAAI,OAAO,GAAG,IAAI,CAAC;AAEnB,SAAS,KAAK,CAAC,MAAgC,EAAE,OAAe;IAC/D,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC9C,OAAO,GAAG,KAAK,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IAC1D,OAAO,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;IAC7E,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;IAC5E,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;IAC3E,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;CAC1E,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kurot/cli",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "Kurot CLI - build tool for the Kurot game engine",
5
5
  "author": "Kelvin <kyia.x52@gmail.com>",
6
6
  "license": "MIT",
@@ -12,8 +12,10 @@ export default {
12
12
  },
13
13
  exml: {
14
14
  themeFile: 'resource/default.thm.json',
15
- namespaces: {
16
- game: 'src/game-components.ts',
15
+ components: {
16
+ namespace: 'game',
17
+ sourceDir: 'src/components',
18
+ skinDir: 'resource/skins/components',
17
19
  },
18
20
  },
19
21
  };
@@ -1,6 +0,0 @@
1
- /**
2
- * Central export entry for custom EXML components.
3
- *
4
- * Export components used as `<game:ComponentName />` in EXML from this file.
5
- * This entry is configured by `exml.namespaces.game` in `kurot.config.ts`.
6
- */