@chrisluyi/daas-cli 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +36 -1
- package/package.json +3 -2
- package/skill.md +48 -1
package/dist/index.js
CHANGED
|
@@ -2311,8 +2311,32 @@ async function runMain(cmd, opts = {}) {
|
|
|
2311
2311
|
}
|
|
2312
2312
|
}
|
|
2313
2313
|
|
|
2314
|
+
// src/index.ts
|
|
2315
|
+
import { createLogger as createLogger5, setLogger as setLogger5 } from "@chrisluyi/logger";
|
|
2316
|
+
|
|
2317
|
+
// src/logger/consolaTransport.ts
|
|
2318
|
+
function consolaTransport() {
|
|
2319
|
+
return (entry) => {
|
|
2320
|
+
switch (entry.level) {
|
|
2321
|
+
case "debug":
|
|
2322
|
+
consola.debug(entry.message, entry.context ?? "");
|
|
2323
|
+
break;
|
|
2324
|
+
case "info":
|
|
2325
|
+
consola.info(entry.message);
|
|
2326
|
+
break;
|
|
2327
|
+
case "warn":
|
|
2328
|
+
consola.warn(entry.message);
|
|
2329
|
+
break;
|
|
2330
|
+
case "error":
|
|
2331
|
+
consola.fatal(entry.message);
|
|
2332
|
+
break;
|
|
2333
|
+
}
|
|
2334
|
+
};
|
|
2335
|
+
}
|
|
2336
|
+
|
|
2314
2337
|
// src/commands/build.ts
|
|
2315
2338
|
import { createConfig } from "@chrisluyi/rsbuild-config";
|
|
2339
|
+
import { createLogger, setLogger, apiTransport } from "@chrisluyi/logger";
|
|
2316
2340
|
import { createRsbuild } from "@rsbuild/core";
|
|
2317
2341
|
|
|
2318
2342
|
// src/daas-config.ts
|
|
@@ -2339,7 +2363,8 @@ function readDaasConfig(cwd = process.cwd()) {
|
|
|
2339
2363
|
configUrl: daas.configUrl,
|
|
2340
2364
|
port: daas.port ?? 3000,
|
|
2341
2365
|
coverage: daas.coverage,
|
|
2342
|
-
setupFiles: daas.setupFiles
|
|
2366
|
+
setupFiles: daas.setupFiles,
|
|
2367
|
+
logUrl: daas.logUrl
|
|
2343
2368
|
};
|
|
2344
2369
|
}
|
|
2345
2370
|
|
|
@@ -2565,6 +2590,7 @@ var buildCommand = defineCommand({
|
|
|
2565
2590
|
const json = args.json;
|
|
2566
2591
|
try {
|
|
2567
2592
|
const daasConfig = readDaasConfig();
|
|
2593
|
+
setLogger(createLogger([consolaTransport(), apiTransport(daasConfig.logUrl)]));
|
|
2568
2594
|
const manifest = readManifest();
|
|
2569
2595
|
if (!json)
|
|
2570
2596
|
consola.start(`Building ${manifest.name}...`);
|
|
@@ -2622,6 +2648,7 @@ var buildCommand = defineCommand({
|
|
|
2622
2648
|
|
|
2623
2649
|
// src/commands/dev.ts
|
|
2624
2650
|
import { createConfig as createConfig2 } from "@chrisluyi/rsbuild-config";
|
|
2651
|
+
import { createLogger as createLogger2, setLogger as setLogger2, apiTransport as apiTransport2 } from "@chrisluyi/logger";
|
|
2625
2652
|
import { createRsbuild as createRsbuild2 } from "@rsbuild/core";
|
|
2626
2653
|
var devCommand = defineCommand({
|
|
2627
2654
|
meta: { name: "dev", description: "Start MFE dev server" },
|
|
@@ -2641,6 +2668,7 @@ var devCommand = defineCommand({
|
|
|
2641
2668
|
async run({ args }) {
|
|
2642
2669
|
try {
|
|
2643
2670
|
const daasConfig = readDaasConfig();
|
|
2671
|
+
setLogger2(createLogger2([consolaTransport(), apiTransport2(daasConfig.logUrl)]));
|
|
2644
2672
|
const manifest = readManifest();
|
|
2645
2673
|
const remoteMeta = await fetchRemoteConfig(daasConfig.configUrl, false);
|
|
2646
2674
|
checkCliVersion(remoteMeta);
|
|
@@ -2698,6 +2726,9 @@ function handleError(command, e2, json) {
|
|
|
2698
2726
|
process.exit(EXIT_CODES.GENERAL_ERROR);
|
|
2699
2727
|
}
|
|
2700
2728
|
|
|
2729
|
+
// src/commands/info.ts
|
|
2730
|
+
import { createLogger as createLogger3, setLogger as setLogger3, apiTransport as apiTransport3 } from "@chrisluyi/logger";
|
|
2731
|
+
|
|
2701
2732
|
// src/init/monorepo.ts
|
|
2702
2733
|
import { existsSync as existsSync3, readFileSync as readFileSync3 } from "fs";
|
|
2703
2734
|
import { dirname, resolve as resolve4 } from "path";
|
|
@@ -2738,6 +2769,7 @@ var infoCommand = defineCommand({
|
|
|
2738
2769
|
let manifest;
|
|
2739
2770
|
try {
|
|
2740
2771
|
daasConfig = readDaasConfig();
|
|
2772
|
+
setLogger3(createLogger3([consolaTransport(), apiTransport3(daasConfig.logUrl)]));
|
|
2741
2773
|
manifest = readManifest();
|
|
2742
2774
|
} catch (e2) {
|
|
2743
2775
|
if (json)
|
|
@@ -3441,6 +3473,7 @@ function getPackageName(cwd) {
|
|
|
3441
3473
|
|
|
3442
3474
|
// src/commands/test.ts
|
|
3443
3475
|
import { createVitestConfig } from "@chrisluyi/rsbuild-config/vitest";
|
|
3476
|
+
import { createLogger as createLogger4, setLogger as setLogger4, apiTransport as apiTransport4 } from "@chrisluyi/logger";
|
|
3444
3477
|
import { startVitest } from "vitest/node";
|
|
3445
3478
|
var testCommand = defineCommand({
|
|
3446
3479
|
meta: { name: "test", description: "Run MFE tests" },
|
|
@@ -3456,6 +3489,7 @@ var testCommand = defineCommand({
|
|
|
3456
3489
|
try {
|
|
3457
3490
|
const manifest = readManifest();
|
|
3458
3491
|
const daasConfig = readDaasConfig();
|
|
3492
|
+
setLogger4(createLogger4([consolaTransport(), apiTransport4(daasConfig.logUrl)]));
|
|
3459
3493
|
const config = createVitestConfig(manifest, {
|
|
3460
3494
|
coverage: daasConfig.coverage,
|
|
3461
3495
|
setupFiles: daasConfig.setupFiles
|
|
@@ -3479,6 +3513,7 @@ var testCommand = defineCommand({
|
|
|
3479
3513
|
});
|
|
3480
3514
|
|
|
3481
3515
|
// src/index.ts
|
|
3516
|
+
setLogger5(createLogger5([consolaTransport()]));
|
|
3482
3517
|
var main = defineCommand({
|
|
3483
3518
|
meta: {
|
|
3484
3519
|
name: "daas",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chrisluyi/daas-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"daas": "./dist/index.js"
|
|
@@ -16,11 +16,12 @@
|
|
|
16
16
|
"skill.md"
|
|
17
17
|
],
|
|
18
18
|
"scripts": {
|
|
19
|
-
"build": "bun build src/index.ts --outfile dist/index.js.tmp --target bun --external @rspack/core --external @rspack/lite-tapable --external @rsbuild/core --external @rsbuild/plugin-react --external @module-federation/rsbuild-plugin --external vitest --external @vitest/browser --external @vitest/ui --external tapable --external react-router-dom --external lightningcss --external @chrisluyi/template --external @chrisluyi/rsbuild-config && printf '%s\\n' '#!/usr/bin/env bun' | cat - dist/index.js.tmp > dist/index.js && rm dist/index.js.tmp && chmod +x dist/index.js && bun build src/test.ts --outfile dist/test.js --target bun --external vitest --external @testing-library/react --external @testing-library/user-event --external @chrisluyi/rsbuild-config",
|
|
19
|
+
"build": "bun build src/index.ts --outfile dist/index.js.tmp --target bun --external @rspack/core --external @rspack/lite-tapable --external @rsbuild/core --external @rsbuild/plugin-react --external @module-federation/rsbuild-plugin --external vitest --external @vitest/browser --external @vitest/ui --external tapable --external react-router-dom --external lightningcss --external @chrisluyi/template --external @chrisluyi/logger --external @chrisluyi/rsbuild-config && printf '%s\\n' '#!/usr/bin/env bun' | cat - dist/index.js.tmp > dist/index.js && rm dist/index.js.tmp && chmod +x dist/index.js && bun build src/test.ts --outfile dist/test.js --target bun --external vitest --external @testing-library/react --external @testing-library/user-event --external @chrisluyi/rsbuild-config",
|
|
20
20
|
"test": "bun test --ignore 'templates/**'"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@clack/prompts": "^0.7.0",
|
|
24
|
+
"@chrisluyi/logger": "workspace:*",
|
|
24
25
|
"@chrisluyi/rsbuild-config": "workspace:*",
|
|
25
26
|
"@chrisluyi/template": "workspace:*",
|
|
26
27
|
"@rsbuild/core": "^1.0.0",
|
package/skill.md
CHANGED
|
@@ -96,13 +96,60 @@ src/
|
|
|
96
96
|
components/App.tsx ← presentational component
|
|
97
97
|
containers/AppContainer.tsx ← data/business logic wrapper
|
|
98
98
|
services/index.ts ← data fetching / API calls
|
|
99
|
+
flows/ ← multi-step flows (optional — add when needed)
|
|
100
|
+
<name>/
|
|
101
|
+
types.ts ← TData interface
|
|
102
|
+
index.ts ← createFlow<TData>(...)
|
|
103
|
+
steps/ ← step components (useFlowData / useFlowActions)
|
|
99
104
|
config/
|
|
100
105
|
regions/default.ts ← region config layer
|
|
101
106
|
platforms/default.ts ← platform config layer
|
|
102
107
|
products/default.ts ← product config layer
|
|
103
108
|
```
|
|
104
109
|
|
|
110
|
+
## Template Runtime (`@chrisluyi/template/runtime`)
|
|
111
|
+
|
|
112
|
+
Key utilities available in MFE components:
|
|
113
|
+
|
|
114
|
+
| Export | Purpose |
|
|
115
|
+
|---|---|
|
|
116
|
+
| `createApiClient` | Region-aware HTTP client (auto-injects X-Region-Id, X-Locale headers) |
|
|
117
|
+
| `createService` | React Query data fetching with Zod validation |
|
|
118
|
+
| `createStore` | Zustand UI state (per-module singleton) |
|
|
119
|
+
| `createForm` | Zod-validated form with regional widget injection |
|
|
120
|
+
| `createFlow` | Router-agnostic multi-step flow engine |
|
|
121
|
+
| `FlowEngine` | Component wrapper — renders current step automatically |
|
|
122
|
+
| `useFlow` | Hook — use when you need a custom layout (progress bar etc.) |
|
|
123
|
+
| `useFlowData` | Step hook — read/write the shared typed data bag |
|
|
124
|
+
| `useFlowActions` | Step hook — `next()`, `back()`, `isFirst`, `isLast` |
|
|
125
|
+
| `useRegional` | Access the full `RegionalRegistry` from any component |
|
|
126
|
+
|
|
127
|
+
### Flow SDK quick reference
|
|
128
|
+
|
|
129
|
+
```ts
|
|
130
|
+
// Define
|
|
131
|
+
const myFlow = createFlow<MyData>({
|
|
132
|
+
id: "MyFlow",
|
|
133
|
+
steps: [{ id: "step1", component: Step1 }, { id: "step2", component: Step2 }],
|
|
134
|
+
initialData: {},
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
// Mount
|
|
138
|
+
const registry = useRegional()
|
|
139
|
+
return <FlowEngine flow={myFlow} registry={registry} />
|
|
140
|
+
|
|
141
|
+
// Inside a step — no props needed
|
|
142
|
+
const { data, setData } = useFlowData<MyData>()
|
|
143
|
+
const { next, back, isLast } = useFlowActions()
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Regional step injection via `RegionalRegistry.flows?`:
|
|
147
|
+
```ts
|
|
148
|
+
createRegistry(defaultRegistry, {
|
|
149
|
+
flows: { MyFlow: { extraSteps: [{ after: "step1", id: "extra", component: ExtraStep }] } }
|
|
150
|
+
})
|
|
151
|
+
```
|
|
152
|
+
|
|
105
153
|
## Roadmap (do not suggest these — not yet implemented)
|
|
106
154
|
|
|
107
|
-
- v1.5: `daas dev sg-foo-mb-dev` target strings for multi-region builds
|
|
108
155
|
- v2+: `daas lint` — validates project structure against template conventions
|