@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
package/CHANGELOG.md CHANGED
@@ -5,6 +5,47 @@ All notable changes to `@kurot/cli` are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## Unreleased
9
+
10
+ ## 1.1.3 — 2026-08-30
11
+
12
+ ### Fixed
13
+
14
+ - EXML string attributes now decode Egret-style `\n` sequences as hard line
15
+ breaks instead of rendering the backslash and `n` literally.
16
+
17
+ ## 1.1.2 — 2026-08-30
18
+
19
+ ### Added
20
+
21
+ - Convention-based reusable components through `exml.components`, pairing
22
+ `src/components/<Name>.ts` with
23
+ `resource/skins/components/<Name>Skin.exml` while keeping standard EUI Skin
24
+ files editable in existing visual tooling.
25
+ - Automatic `#ns/<prefix>` namespace entries, Theme mappings, exact EXML tag
26
+ validation with spelling suggestions, and a development-only
27
+ `.kurot/component-catalog.json` for future editor and agent tooling.
28
+ - Component-aware development watching for TypeScript/Skin additions,
29
+ removals, renames, and edits.
30
+
31
+ ### Changed
32
+
33
+ - New game projects no longer scaffold or require `src/game-components.ts`.
34
+ Manual `exml.namespaces` barrels remain supported for advanced use.
35
+ - Default EUI skins in new game projects are grouped under
36
+ `resource/skins/eui`, keeping them separate from reusable component skins.
37
+
38
+ ### Fixed
39
+
40
+ - Release bundles now preserve component constructor names required by the
41
+ Theme default-Skin lookup contract.
42
+
43
+ ### Tests
44
+
45
+ - Added coverage for component discovery, pairing validation, generated
46
+ namespaces, Theme mappings, development catalogs, release name preservation,
47
+ watched component additions, and the updated game template layout.
48
+
8
49
  ## 1.1.0 — 2026-08-13
9
50
 
10
51
  ### Added
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  CLI tool for the Kurot game engine — a modern replacement for the legacy Egret CLI. Powered by esbuild for fast compilation, with a built-in EXML skin parser and code generator.
4
4
 
5
+ > **Stable (1.1.3).** Requires Node.js 20 or later and emits ES2022 ESM projects.
6
+
5
7
  > Migrating from Egret? See [egret-migration.md](../../docs/egret-migration.md)
6
8
  >
7
9
  > Release history: [CHANGELOG.md](CHANGELOG.md)
@@ -158,9 +160,11 @@ export default {
158
160
  // Optional: enable EXML skin compilation
159
161
  exml: {
160
162
  themeFile: 'resource/default.thm.json',
161
- // Optional: map a custom EXML prefix to a source barrel file
162
- namespaces: {
163
- game: 'src/ui/index.ts',
163
+ // Optional: discover reusable component source/Skin pairs
164
+ components: {
165
+ namespace: 'game',
166
+ sourceDir: 'src/components',
167
+ skinDir: 'resource/skins/components',
164
168
  },
165
169
  },
166
170
  };
@@ -180,6 +184,7 @@ export default {
180
184
  | `stage.orientation` | `string` | Orientation: `auto` / `portrait` / `landscape` |
181
185
  | `stage.frameRate` | `number` | Frame rate — must be a positive integer |
182
186
  | `exml.themeFile` | `string` | Theme JSON file path |
187
+ | `exml.components` | `ComponentsConfig` | Optional reusable-component convention: namespace, TypeScript source directory, and Skin directory |
183
188
  | `exml.namespaces` | `Record<string, string>` | Optional EXML prefix → source barrel-file mapping |
184
189
 
185
190
  ## HTML Template
@@ -215,7 +220,8 @@ The CLI includes a complete EXML skin parsing and code generation pipeline (XML
215
220
  - **AST / IR Generation** — converts to an intermediate representation (SkinIR)
216
221
  - **Code Generation** — outputs ESM factory functions
217
222
  - **Component Registry** — built-in `eui:*` / `egret:*` namespace mapping to `@kurot/ui` / `@kurot/core`
218
- - **Custom Namespaces** — maps project prefixes such as `game:*` to source barrel files through `exml.namespaces`
223
+ - **Reusable Components** — pairs `src/components/<Name>.ts` with `resource/skins/components/<Name>Skin.exml`, then exposes `<game:Name>` without a hand-written barrel
224
+ - **Custom Namespaces** — retains `exml.namespaces` for advanced manually maintained source barrels
219
225
  - **View States** — supports `<eui:states>`, shorthand `states="up,down"`, state properties, `includeIn`, and `excludeFrom`
220
226
  - **Skin Properties** — preserves root properties such as `minWidth`, `minHeight`, and state-specific values
221
227
  - **Percent Layout** — auto-detects `width="100%"` and converts to `percentWidth`
@@ -233,6 +239,28 @@ The standard declarations `xmlns:eui="http://ns.egret.com/eui"` and
233
239
  resolves their prefixes internally and does not access those URLs over the
234
240
  network, so the original Egret namespace pages do not need to be hosted.
235
241
 
242
+ ### Reusable components
243
+
244
+ The game template keeps reusable component logic and white-Egret-compatible
245
+ skins in parallel directories:
246
+
247
+ ```text
248
+ src/components/<path>/<Name>.ts
249
+ resource/skins/components/<path>/<Name>Skin.exml
250
+ ```
251
+
252
+ The TypeScript file must export a class named `<Name>`, and the paired EXML
253
+ must use a standard `eui:Skin` root with a `class` attribute. The CLI validates
254
+ the pair, generates the shared `#ns/game` entry, adds the default Theme mapping,
255
+ and accepts `<game:Name />` in other skins. Components are globally unique by
256
+ class name within the configured namespace.
257
+
258
+ Development builds also emit `.kurot/component-catalog.json` for editor and
259
+ agent tooling. The catalog is intentionally omitted from release output.
260
+
261
+ `exml.namespaces` remains available for advanced manual namespace barrels, but
262
+ its prefix must not conflict with `exml.components.namespace`.
263
+
236
264
  ### Custom component lifecycle
237
265
 
238
266
  For initialization that requires every EXML skin part to be available, override
@@ -276,7 +304,7 @@ or `js/default.thm.min_<hash>.js` (release) — that registers each skin factory
276
304
  pointer to that module, which the runtime `Theme` imports. No `.exml` is shipped.
277
305
 
278
306
  ```
279
- resource/skins/*.exml
307
+ resource/skins/**/*.exml
280
308
  ↓ parseXML()
281
309
  XML Element Tree
282
310
  ↓ parseEXML()
@@ -302,11 +330,14 @@ my-game/
302
330
  ├── resource/
303
331
  │ ├── default.res.json # Resource config
304
332
  │ ├── default.thm.json # Theme file: component → skin mapping
305
- │ └── skins/ # EXML skin directory (21 default skins)
306
- │ ├── ButtonSkin.exml
307
- │ ├── ...
308
- │ └── ViewStackSkin.exml
333
+ │ └── skins/ # EXML skin directory
334
+ │ ├── components/ # Reusable component skins (standard eui:Skin)
335
+ │ └── eui/ # 21 built-in EUI component skins
336
+ │ ├── ButtonSkin.exml
337
+ │ ├── ...
338
+ │ └── ViewStackSkin.exml
309
339
  └── src/
340
+ ├── components/ # Reusable component TypeScript classes
310
341
  ├── Main.ts # Entry: class Main extends Sprite
311
342
  └── LoadingUI.ts # Loading progress display
312
343
  ```
@@ -1,3 +1,6 @@
1
1
  import { Command } from 'commander';
2
+ /**
3
+ * Commander definition for one-shot and watched project builds.
4
+ */
2
5
  export declare const buildCommand: Command;
3
6
  //# sourceMappingURL=build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoCpC,eAAO,MAAM,YAAY,SAyEtB,CAAC"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyCpC;;GAEG;AACH,eAAO,MAAM,YAAY,SAyEtB,CAAC"}
@@ -5,6 +5,9 @@ import { defaultPlugins } from '../core/plugins/index.js';
5
5
  import { BuildError } from '../core/errors.js';
6
6
  import { DIAGNOSTIC_CODES, parseBuildDiagnosticsFormat, writeMachineOutput, } from '../core/diagnostics/index.js';
7
7
  import { logger, setLoggerEnabled } from '../utils/logger.js';
8
+ /**
9
+ * Commander definition for one-shot and watched project builds.
10
+ */
8
11
  export const buildCommand = new Command('build')
9
12
  .description('Build the project')
10
13
  .option('-r, --release', 'Minified, content-hashed release build (→ bin-release)', false)
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,6 @@
1
1
  import { Command } from 'commander';
2
+ /**
3
+ * Commander definition for removing development and release outputs.
4
+ */
2
5
  export declare const cleanCommand: Command;
3
6
  //# sourceMappingURL=clean.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,YAAY,SAQvB,CAAC"}
1
+ {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;GAEG;AACH,eAAO,MAAM,YAAY,SAQvB,CAAC"}
@@ -4,6 +4,9 @@ import * as path from 'node:path';
4
4
  import { loadConfig } from '../core/config.js';
5
5
  import { OUTPUT_DIRS } from '../core/project.js';
6
6
  import { logger } from '../utils/logger.js';
7
+ /**
8
+ * Commander definition for removing development and release outputs.
9
+ */
7
10
  export const cleanCommand = new Command('clean').description('Remove build output directories').action(async () => {
8
11
  const config = await loadConfig();
9
12
  const names = [...new Set([config.output.dir, OUTPUT_DIRS.release])];
@@ -1 +1 @@
1
- {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAErE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAErE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC"}
@@ -1,3 +1,6 @@
1
1
  import { Command } from 'commander';
2
+ /**
3
+ * Commander definition for scaffolding a project template.
4
+ */
2
5
  export declare const createCommand: Command;
3
6
  //# sourceMappingURL=create.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SAoBvB,CAAC"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;GAEG;AACH,eAAO,MAAM,aAAa,SAoBvB,CAAC"}
@@ -1,6 +1,9 @@
1
1
  import { Command } from 'commander';
2
2
  import { scaffoldProject, TEMPLATES } from '../core/template.js';
3
3
  import { logger } from '../utils/logger.js';
4
+ /**
5
+ * Commander definition for scaffolding a project template.
6
+ */
4
7
  export const createCommand = new Command('create')
5
8
  .description('Create a new Kurot project')
6
9
  .argument('<name>', 'Project name')
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAqB,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAChD,WAAW,CAAC,4BAA4B,CAAC;KACzC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;KAClC,MAAM,CAAC,uBAAuB,EAAE,qBAAqB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC;KACrF,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA6B,EAAE,EAAE;IAC7D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAwB,CAAC,EAAE,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,CAAC,QAAQ,iBAAiB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,oBAAoB,OAAO,CAAC,QAAQ,MAAM,CAAC,CAAC;IACjF,IAAI,CAAC;QACJ,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,QAAwB,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,8BAA8B,CAAC,CAAC;AACtE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAChD,WAAW,CAAC,4BAA4B,CAAC;KACzC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;KAClC,MAAM,CAAC,uBAAuB,EAAE,qBAAqB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC;KACrF,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA6B,EAAE,EAAE;IAC7D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAwB,CAAC,EAAE,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,CAAC,QAAQ,iBAAiB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,oBAAoB,OAAO,CAAC,QAAQ,MAAM,CAAC,CAAC;IACjF,IAAI,CAAC;QACJ,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,QAAwB,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,8BAA8B,CAAC,CAAC;AACtE,CAAC,CAAC,CAAC"}
@@ -1,3 +1,6 @@
1
1
  import { Command } from 'commander';
2
+ /**
3
+ * Commander definition for the development server and file watchers.
4
+ */
2
5
  export declare const devCommand: Command;
3
6
  //# sourceMappingURL=dev.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,UAAU,SA8BpB,CAAC"}
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC;;GAEG;AACH,eAAO,MAAM,UAAU,SAgCpB,CAAC"}
@@ -4,6 +4,9 @@ import { startDevServer } from '../core/dev-server.js';
4
4
  import { ConfigError } from '../core/errors.js';
5
5
  import { parseDevDiagnosticsFormat, writeMachineOutput } from '../core/diagnostics/index.js';
6
6
  import { logger, setLoggerEnabled } from '../utils/logger.js';
7
+ /**
8
+ * Commander definition for the development server and file watchers.
9
+ */
7
10
  export const devCommand = new Command('dev')
8
11
  .description('Start a development server with rebuild on change')
9
12
  .option('-p, --port <port>', 'Port to listen on', '3000')
@@ -32,8 +35,9 @@ export const devCommand = new Command('dev')
32
35
  catch (err) {
33
36
  logger.error(`Dev server failed: ${err instanceof Error ? err.message : String(err)}`);
34
37
  process.exitCode = 1;
35
- if (machine)
38
+ if (machine) {
36
39
  setLoggerEnabled(true);
40
+ }
37
41
  }
38
42
  });
39
43
  //# sourceMappingURL=dev.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAC7F,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAS9D,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KAC1C,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,CAAC;KACxD,MAAM,CAAC,aAAa,EAAE,qBAAqB,EAAE,KAAK,CAAC;KACnD,MAAM,CAAC,UAAU,EAAE,0CAA0C,EAAE,KAAK,CAAC;KACrE,MAAM,CAAC,wBAAwB,EAAE,mCAAmC,EAAE,OAAO,CAAC;KAC9E,MAAM,CAAC,KAAK,EAAE,OAAmB,EAAE,EAAE;IACrC,MAAM,MAAM,GAAG,yBAAyB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,KAAK,OAAO,CAAC;IACnC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACzD,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,IAAI,WAAW,CAAC,iBAAiB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,+BAA+B,IAAI,KAAK,CAAC,CAAC;QACtD,MAAM,cAAc,CAAC,OAAO,EAAE;YAC7B,IAAI;YACJ,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;SACjD,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,sBAAsB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,IAAI,OAAO;YAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;AACF,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAC7F,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAS9D;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KAC1C,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,CAAC;KACxD,MAAM,CAAC,aAAa,EAAE,qBAAqB,EAAE,KAAK,CAAC;KACnD,MAAM,CAAC,UAAU,EAAE,0CAA0C,EAAE,KAAK,CAAC;KACrE,MAAM,CAAC,wBAAwB,EAAE,mCAAmC,EAAE,OAAO,CAAC;KAC9E,MAAM,CAAC,KAAK,EAAE,OAAmB,EAAE,EAAE;IACrC,MAAM,MAAM,GAAG,yBAAyB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,KAAK,OAAO,CAAC;IACnC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACzD,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,IAAI,WAAW,CAAC,iBAAiB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,+BAA+B,IAAI,KAAK,CAAC,CAAC;QACtD,MAAM,cAAc,CAAC,OAAO,EAAE;YAC7B,IAAI;YACJ,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;SACjD,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,sBAAsB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,IAAI,OAAO,EAAE,CAAC;YACb,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;AACF,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ComponentConvention, ProjectComponent } from '../project.js';
2
+ /**
3
+ * Discovers reusable component source/skin pairs using the configured
4
+ * directory convention.
5
+ */
6
+ export declare function discoverComponents(root: string, convention: ComponentConvention | undefined): Promise<ProjectComponent[]>;
7
+ /**
8
+ * Re-scans a loaded project while preserving the components array identity
9
+ * shared with its generated namespace entry.
10
+ */
11
+ export declare function refreshProjectComponents(project: {
12
+ readonly root: string;
13
+ readonly componentConvention?: ComponentConvention;
14
+ readonly components: ProjectComponent[];
15
+ }): Promise<void>;
16
+ //# sourceMappingURL=discover-components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover-components.d.ts","sourceRoot":"","sources":["../../../src/core/components/discover-components.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE3E;;;GAGG;AACH,wBAAsB,kBAAkB,CACvC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,mBAAmB,GAAG,SAAS,GACzC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAqF7B;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,CAAC;CACxC,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhB"}
@@ -0,0 +1,191 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import { ConfigError } from '../errors.js';
4
+ import { localName, parseXML } from '../exml/index.js';
5
+ /**
6
+ * Discovers reusable component source/skin pairs using the configured
7
+ * directory convention.
8
+ */
9
+ export async function discoverComponents(root, convention) {
10
+ if (!convention)
11
+ return [];
12
+ const [sourceFiles, skinFiles] = await Promise.all([
13
+ collectFiles(convention.sourceDir, file => file.endsWith('.ts') && !file.endsWith('.d.ts')),
14
+ collectFiles(convention.skinDir, file => file.endsWith('Skin.exml')),
15
+ ]);
16
+ const sourceByPair = new Map(sourceFiles.map(file => [sourcePairKey(convention.sourceDir, file), file]));
17
+ const skinByPair = new Map(skinFiles.map(file => [skinPairKey(convention.skinDir, file), file]));
18
+ const pairKeys = [...new Set([...sourceByPair.keys(), ...skinByPair.keys()])].sort();
19
+ const components = [];
20
+ const errors = [];
21
+ const names = new Map();
22
+ for (const pairKey of pairKeys) {
23
+ const source = sourceByPair.get(pairKey);
24
+ const skin = skinByPair.get(pairKey);
25
+ if (!source) {
26
+ if (skin) {
27
+ errors.push(`Component skin '${relative(root, skin)}' has no matching source '${pairKey}.ts'.`);
28
+ }
29
+ continue;
30
+ }
31
+ if (!skin) {
32
+ errors.push(`Component source '${relative(root, source)}' has no matching skin '${pairKey}Skin.exml'.`);
33
+ continue;
34
+ }
35
+ const name = path.basename(source, '.ts');
36
+ if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name)) {
37
+ errors.push(`Component source '${relative(root, source)}' must use a valid TypeScript class name.`);
38
+ continue;
39
+ }
40
+ const previous = names.get(name);
41
+ if (previous) {
42
+ errors.push(`Component name '${name}' is duplicated by '${previous}' and '${relative(root, source)}'.`);
43
+ continue;
44
+ }
45
+ names.set(name, relative(root, source));
46
+ const sourceText = await fs.readFile(source, 'utf-8');
47
+ if (hasAbstractClassExport(sourceText, name)) {
48
+ errors.push(`Component class '${name}' in '${relative(root, source)}' must not be abstract.`);
49
+ continue;
50
+ }
51
+ if (!hasNamedClassExport(sourceText, name)) {
52
+ errors.push(`Component source '${relative(root, source)}' must export a class named '${name}'.`);
53
+ continue;
54
+ }
55
+ let skinClass;
56
+ try {
57
+ const skinRoot = parseXML(await fs.readFile(skin, 'utf-8'));
58
+ if (localName(skinRoot.name) !== 'Skin') {
59
+ errors.push(`Component skin '${relative(root, skin)}' must use an eui:Skin root.`);
60
+ continue;
61
+ }
62
+ skinClass = skinRoot.attributes.find(attribute => attribute.name === 'class')?.value ?? '';
63
+ if (!skinClass) {
64
+ errors.push(`Component skin '${relative(root, skin)}' must declare a class attribute.`);
65
+ continue;
66
+ }
67
+ }
68
+ catch (error) {
69
+ const message = error instanceof Error ? error.message : String(error);
70
+ errors.push(`Component skin '${relative(root, skin)}' is invalid EXML: ${message}`);
71
+ continue;
72
+ }
73
+ components.push({
74
+ name,
75
+ tag: `${convention.prefix}:${name}`,
76
+ namespace: convention.prefix,
77
+ specifier: convention.specifier,
78
+ source,
79
+ sourceRelative: relative(root, source),
80
+ skin,
81
+ skinRelative: relative(root, skin),
82
+ skinClass,
83
+ });
84
+ }
85
+ if (errors.length > 0) {
86
+ throw new ConfigError(`Invalid reusable components:\n${errors.map(error => `- ${error}`).join('\n')}`);
87
+ }
88
+ return components.sort((a, b) => a.name.localeCompare(b.name));
89
+ }
90
+ /**
91
+ * Re-scans a loaded project while preserving the components array identity
92
+ * shared with its generated namespace entry.
93
+ */
94
+ export async function refreshProjectComponents(project) {
95
+ const discovered = await discoverComponents(project.root, project.componentConvention);
96
+ project.components.splice(0, project.components.length, ...discovered);
97
+ }
98
+ async function collectFiles(directory, include) {
99
+ const results = [];
100
+ async function walk(current) {
101
+ let entries;
102
+ try {
103
+ entries = await fs.readdir(current, { withFileTypes: true });
104
+ }
105
+ catch (error) {
106
+ if (error.code === 'ENOENT')
107
+ return;
108
+ throw error;
109
+ }
110
+ for (const entry of entries) {
111
+ const absolute = path.join(current, entry.name);
112
+ if (entry.isDirectory()) {
113
+ await walk(absolute);
114
+ }
115
+ else if (entry.isFile() && include(entry.name)) {
116
+ results.push(absolute);
117
+ }
118
+ }
119
+ }
120
+ await walk(directory);
121
+ return results.sort();
122
+ }
123
+ function sourcePairKey(sourceDir, file) {
124
+ return toPosix(path.relative(sourceDir, file).slice(0, -'.ts'.length));
125
+ }
126
+ function skinPairKey(skinDir, file) {
127
+ return toPosix(path.relative(skinDir, file).slice(0, -'Skin.exml'.length));
128
+ }
129
+ function hasNamedClassExport(source, name) {
130
+ source = stripComments(source);
131
+ const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
132
+ const direct = new RegExp(`\\bexport\\s+class\\s+${escaped}\\b`);
133
+ if (direct.test(source))
134
+ return true;
135
+ const declared = new RegExp(`\\bclass\\s+${escaped}\\b`).test(source);
136
+ const exportList = new RegExp(`\\bexport\\s*\\{[^}]*\\b${escaped}\\b[^}]*\\}`, 's').test(source);
137
+ return declared && exportList;
138
+ }
139
+ function hasAbstractClassExport(source, name) {
140
+ const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
141
+ return new RegExp(`\\b(?:export\\s+)?abstract\\s+class\\s+${escaped}\\b`).test(stripComments(source));
142
+ }
143
+ function stripComments(source) {
144
+ let result = '';
145
+ let quote = '';
146
+ for (let index = 0; index < source.length; index++) {
147
+ const current = source[index];
148
+ const next = source[index + 1];
149
+ if (quote) {
150
+ result += current;
151
+ if (current === '\\') {
152
+ result += next ?? '';
153
+ index++;
154
+ }
155
+ else if (current === quote) {
156
+ quote = '';
157
+ }
158
+ continue;
159
+ }
160
+ if (current === '"' || current === "'" || current === '`') {
161
+ quote = current;
162
+ result += current;
163
+ continue;
164
+ }
165
+ if (current === '/' && next === '/') {
166
+ while (index < source.length && source[index] !== '\n') {
167
+ index++;
168
+ }
169
+ result += '\n';
170
+ continue;
171
+ }
172
+ if (current === '/' && next === '*') {
173
+ index += 2;
174
+ while (index < source.length && !(source[index] === '*' && source[index + 1] === '/')) {
175
+ index++;
176
+ }
177
+ index++;
178
+ result += ' ';
179
+ continue;
180
+ }
181
+ result += current;
182
+ }
183
+ return result;
184
+ }
185
+ function relative(root, absolute) {
186
+ return toPosix(path.relative(root, absolute));
187
+ }
188
+ function toPosix(value) {
189
+ return value.split(path.sep).join('/');
190
+ }
191
+ //# sourceMappingURL=discover-components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover-components.js","sourceRoot":"","sources":["../../../src/core/components/discover-components.ts"],"names":[],"mappings":"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"}