@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.
- package/CHANGELOG.md +41 -0
- package/README.md +40 -9
- package/dist/commands/build.d.ts +3 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +3 -0
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/clean.d.ts +3 -0
- package/dist/commands/clean.d.ts.map +1 -1
- package/dist/commands/clean.js +3 -0
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/create.d.ts +3 -0
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +3 -0
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/dev.d.ts +3 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +5 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/core/components/discover-components.d.ts +16 -0
- package/dist/core/components/discover-components.d.ts.map +1 -0
- package/dist/core/components/discover-components.js +191 -0
- package/dist/core/components/discover-components.js.map +1 -0
- package/dist/core/config.d.ts +45 -17
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +16 -6
- package/dist/core/config.js.map +1 -1
- package/dist/core/dev-server.d.ts +5 -5
- package/dist/core/dev-server.d.ts.map +1 -1
- package/dist/core/dev-server.js +97 -25
- package/dist/core/dev-server.js.map +1 -1
- package/dist/core/diagnostics/output.d.ts +31 -0
- package/dist/core/diagnostics/output.d.ts.map +1 -1
- package/dist/core/diagnostics/output.js +13 -0
- package/dist/core/diagnostics/output.js.map +1 -1
- package/dist/core/diagnostics/types.d.ts +15 -0
- package/dist/core/diagnostics/types.d.ts.map +1 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/core/exml/ast.d.ts +27 -0
- package/dist/core/exml/ast.d.ts.map +1 -1
- package/dist/core/exml/codegen.d.ts +6 -7
- package/dist/core/exml/codegen.d.ts.map +1 -1
- package/dist/core/exml/codegen.js +57 -87
- package/dist/core/exml/codegen.js.map +1 -1
- package/dist/core/exml/exml-diagnostics.d.ts +2 -1
- package/dist/core/exml/exml-diagnostics.d.ts.map +1 -1
- package/dist/core/exml/exml-diagnostics.js +2 -2
- package/dist/core/exml/exml-diagnostics.js.map +1 -1
- package/dist/core/exml/exml-parser.d.ts +11 -11
- package/dist/core/exml/exml-parser.d.ts.map +1 -1
- package/dist/core/exml/exml-parser.js +93 -179
- package/dist/core/exml/exml-parser.js.map +1 -1
- package/dist/core/exml/index.d.ts +13 -13
- package/dist/core/exml/index.d.ts.map +1 -1
- package/dist/core/exml/index.js +12 -13
- package/dist/core/exml/index.js.map +1 -1
- package/dist/core/exml/registry.d.ts +39 -33
- package/dist/core/exml/registry.d.ts.map +1 -1
- package/dist/core/exml/registry.js +56 -43
- package/dist/core/exml/registry.js.map +1 -1
- package/dist/core/exml/skin-module-builder.d.ts +14 -0
- package/dist/core/exml/skin-module-builder.d.ts.map +1 -1
- package/dist/core/exml/skin-module-builder.js +8 -2
- package/dist/core/exml/skin-module-builder.js.map +1 -1
- package/dist/core/exml/xml-parser.d.ts +36 -26
- package/dist/core/exml/xml-parser.d.ts.map +1 -1
- package/dist/core/exml/xml-parser.js +133 -144
- package/dist/core/exml/xml-parser.js.map +1 -1
- package/dist/core/namespace-external-plugin.d.ts +5 -5
- package/dist/core/namespace-external-plugin.js +5 -5
- package/dist/core/pipeline.d.ts +59 -39
- package/dist/core/pipeline.d.ts.map +1 -1
- package/dist/core/pipeline.js +6 -1
- package/dist/core/pipeline.js.map +1 -1
- package/dist/core/plugins/clean-output.d.ts +3 -0
- package/dist/core/plugins/clean-output.d.ts.map +1 -1
- package/dist/core/plugins/clean-output.js +3 -1
- package/dist/core/plugins/clean-output.js.map +1 -1
- package/dist/core/plugins/compile-custom-namespaces.d.ts +6 -1
- package/dist/core/plugins/compile-custom-namespaces.d.ts.map +1 -1
- package/dist/core/plugins/compile-custom-namespaces.js +74 -11
- package/dist/core/plugins/compile-custom-namespaces.js.map +1 -1
- package/dist/core/plugins/compile-engine.d.ts +2 -4
- package/dist/core/plugins/compile-engine.d.ts.map +1 -1
- package/dist/core/plugins/compile-engine.js +5 -5
- package/dist/core/plugins/compile-engine.js.map +1 -1
- package/dist/core/plugins/compile-exml.d.ts.map +1 -1
- package/dist/core/plugins/compile-exml.js +18 -3
- package/dist/core/plugins/compile-exml.js.map +1 -1
- package/dist/core/plugins/compile-source.d.ts +1 -1
- package/dist/core/plugins/compile-source.d.ts.map +1 -1
- package/dist/core/plugins/compile-source.js +10 -8
- package/dist/core/plugins/compile-source.js.map +1 -1
- package/dist/core/plugins/component-catalog.d.ts +6 -0
- package/dist/core/plugins/component-catalog.d.ts.map +1 -0
- package/dist/core/plugins/component-catalog.js +30 -0
- package/dist/core/plugins/component-catalog.js.map +1 -0
- package/dist/core/plugins/copy-assets.d.ts +1 -2
- package/dist/core/plugins/copy-assets.d.ts.map +1 -1
- package/dist/core/plugins/copy-assets.js +1 -3
- package/dist/core/plugins/copy-assets.js.map +1 -1
- package/dist/core/plugins/generate-html.d.ts.map +1 -1
- package/dist/core/plugins/generate-html.js +1 -1
- package/dist/core/plugins/generate-html.js.map +1 -1
- package/dist/core/plugins/index.d.ts +1 -0
- package/dist/core/plugins/index.d.ts.map +1 -1
- package/dist/core/plugins/index.js +3 -0
- package/dist/core/plugins/index.js.map +1 -1
- package/dist/core/project.d.ts +85 -6
- package/dist/core/project.d.ts.map +1 -1
- package/dist/core/project.js +53 -8
- package/dist/core/project.js.map +1 -1
- package/dist/core/template.d.ts +8 -1
- package/dist/core/template.d.ts.map +1 -1
- package/dist/core/template.js +18 -8
- package/dist/core/template.js.map +1 -1
- package/dist/define.d.ts +1 -1
- package/dist/define.d.ts.map +1 -1
- package/dist/utils/fs.d.ts +15 -0
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +15 -0
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/logger.d.ts +7 -3
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +7 -3
- package/dist/utils/logger.js.map +1 -1
- package/package.json +1 -1
- package/templates/game/kurot.config.ts +4 -2
- package/templates/game/src/game-components.ts +0 -6
- /package/templates/game/resource/skins/{ButtonSkin.exml → eui/ButtonSkin.exml} +0 -0
- /package/templates/game/resource/skins/{CheckBoxSkin.exml → eui/CheckBoxSkin.exml} +0 -0
- /package/templates/game/resource/skins/{ComboBoxSkin.exml → eui/ComboBoxSkin.exml} +0 -0
- /package/templates/game/resource/skins/{GroupSkin.exml → eui/GroupSkin.exml} +0 -0
- /package/templates/game/resource/skins/{HScrollBarSkin.exml → eui/HScrollBarSkin.exml} +0 -0
- /package/templates/game/resource/skins/{HSliderSkin.exml → eui/HSliderSkin.exml} +0 -0
- /package/templates/game/resource/skins/{ImageSkin.exml → eui/ImageSkin.exml} +0 -0
- /package/templates/game/resource/skins/{ItemRendererSkin.exml → eui/ItemRendererSkin.exml} +0 -0
- /package/templates/game/resource/skins/{LabelSkin.exml → eui/LabelSkin.exml} +0 -0
- /package/templates/game/resource/skins/{ListSkin.exml → eui/ListSkin.exml} +0 -0
- /package/templates/game/resource/skins/{PanelSkin.exml → eui/PanelSkin.exml} +0 -0
- /package/templates/game/resource/skins/{ProgressBarSkin.exml → eui/ProgressBarSkin.exml} +0 -0
- /package/templates/game/resource/skins/{RadioButtonSkin.exml → eui/RadioButtonSkin.exml} +0 -0
- /package/templates/game/resource/skins/{ScrollerSkin.exml → eui/ScrollerSkin.exml} +0 -0
- /package/templates/game/resource/skins/{TabBarSkin.exml → eui/TabBarSkin.exml} +0 -0
- /package/templates/game/resource/skins/{TextInputSkin.exml → eui/TextInputSkin.exml} +0 -0
- /package/templates/game/resource/skins/{ToggleButtonSkin.exml → eui/ToggleButtonSkin.exml} +0 -0
- /package/templates/game/resource/skins/{ToggleSwitchSkin.exml → eui/ToggleSwitchSkin.exml} +0 -0
- /package/templates/game/resource/skins/{VScrollBarSkin.exml → eui/VScrollBarSkin.exml} +0 -0
- /package/templates/game/resource/skins/{VSliderSkin.exml → eui/VSliderSkin.exml} +0 -0
- /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:
|
|
162
|
-
|
|
163
|
-
|
|
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
|
-
- **
|
|
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
|
|
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
|
|
306
|
-
│ ├──
|
|
307
|
-
│
|
|
308
|
-
│
|
|
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
|
```
|
package/dist/commands/build.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/commands/build.js
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EACN,gBAAgB,EAChB,2BAA2B,EAC3B,kBAAkB,
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/clean.d.ts
CHANGED
|
@@ -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"}
|
package/dist/commands/clean.js
CHANGED
|
@@ -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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,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"}
|
package/dist/commands/create.js
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/commands/dev.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/commands/dev.js
CHANGED
|
@@ -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
|
package/dist/commands/dev.js.map
CHANGED
|
@@ -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;
|
|
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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"}
|