@modular-react/cli-core 0.1.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/LICENSE +21 -0
- package/README.md +73 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +41 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/create-journey.d.ts +17 -0
- package/dist/commands/create-journey.d.ts.map +1 -0
- package/dist/commands/create-journey.js +193 -0
- package/dist/commands/create-journey.js.map +1 -0
- package/dist/commands/create-module.d.ts +17 -0
- package/dist/commands/create-module.d.ts.map +1 -0
- package/dist/commands/create-module.js +112 -0
- package/dist/commands/create-module.js.map +1 -0
- package/dist/commands/create-store.d.ts +9 -0
- package/dist/commands/create-store.d.ts.map +1 -0
- package/dist/commands/create-store.js +68 -0
- package/dist/commands/create-store.js.map +1 -0
- package/dist/commands/init.d.ts +17 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +184 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/naming.d.ts +4 -0
- package/dist/naming.d.ts.map +1 -0
- package/dist/naming.js +15 -0
- package/dist/naming.js.map +1 -0
- package/dist/preset.d.ts +112 -0
- package/dist/preset.d.ts.map +1 -0
- package/dist/preset.js +2 -0
- package/dist/preset.js.map +1 -0
- package/dist/runtime-versions.d.ts +15 -0
- package/dist/runtime-versions.d.ts.map +1 -0
- package/dist/runtime-versions.js +15 -0
- package/dist/runtime-versions.js.map +1 -0
- package/dist/templates/app-shared.d.ts +8 -0
- package/dist/templates/app-shared.d.ts.map +1 -0
- package/dist/templates/app-shared.js +63 -0
- package/dist/templates/app-shared.js.map +1 -0
- package/dist/templates/journey.d.ts +30 -0
- package/dist/templates/journey.d.ts.map +1 -0
- package/dist/templates/journey.js +166 -0
- package/dist/templates/journey.js.map +1 -0
- package/dist/templates/module.d.ts +8 -0
- package/dist/templates/module.d.ts.map +1 -0
- package/dist/templates/module.js +43 -0
- package/dist/templates/module.js.map +1 -0
- package/dist/templates/shell.d.ts +25 -0
- package/dist/templates/shell.d.ts.map +1 -0
- package/dist/templates/shell.js +162 -0
- package/dist/templates/shell.js.map +1 -0
- package/dist/templates/store.d.ts +6 -0
- package/dist/templates/store.d.ts.map +1 -0
- package/dist/templates/store.js +10 -0
- package/dist/templates/store.js.map +1 -0
- package/dist/templates/workspace.d.ts +8 -0
- package/dist/templates/workspace.d.ts.map +1 -0
- package/dist/templates/workspace.js +58 -0
- package/dist/templates/workspace.js.map +1 -0
- package/dist/utils/detect-scope.d.ts +2 -0
- package/dist/utils/detect-scope.d.ts.map +1 -0
- package/dist/utils/detect-scope.js +13 -0
- package/dist/utils/detect-scope.js.map +1 -0
- package/dist/utils/prompt.d.ts +14 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +26 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/resolve-project.d.ts +9 -0
- package/dist/utils/resolve-project.d.ts.map +1 -0
- package/dist/utils/resolve-project.js +22 -0
- package/dist/utils/resolve-project.js.map +1 -0
- package/dist/utils/transform.d.ts +83 -0
- package/dist/utils/transform.d.ts.map +1 -0
- package/dist/utils/transform.js +250 -0
- package/dist/utils/transform.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
import * as p from "@clack/prompts";
|
|
3
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { resolve } from "pathe";
|
|
5
|
+
import { toCamelCase, toPascalCase } from "../naming.js";
|
|
6
|
+
import { promptText } from "../utils/prompt.js";
|
|
7
|
+
import { rootPackageJson, pnpmWorkspace, tsconfigBase, tsconfigRoot, gitignore, } from "../templates/workspace.js";
|
|
8
|
+
import { appSharedPackageJson, appSharedTsconfig, appSharedTypes, } from "../templates/app-shared.js";
|
|
9
|
+
import { shellPackageJson, shellTsconfig, shellViteConfig, shellIndexHtml, shellAuthStore, shellConfigStore, shellHttpClient, shellHome, } from "../templates/shell.js";
|
|
10
|
+
import { modulePackageJson, moduleTsconfig } from "../templates/module.js";
|
|
11
|
+
export function createInitCommand(preset) {
|
|
12
|
+
return defineCommand({
|
|
13
|
+
meta: {
|
|
14
|
+
name: "init",
|
|
15
|
+
description: "Create a new modular-react project",
|
|
16
|
+
},
|
|
17
|
+
args: {
|
|
18
|
+
name: {
|
|
19
|
+
type: "positional",
|
|
20
|
+
description: "Project name",
|
|
21
|
+
required: false,
|
|
22
|
+
},
|
|
23
|
+
scope: {
|
|
24
|
+
type: "string",
|
|
25
|
+
description: "Package scope (e.g. @myapp)",
|
|
26
|
+
},
|
|
27
|
+
module: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "First module name (e.g. dashboard)",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
async run({ args }) {
|
|
33
|
+
// Treat the run as non-interactive when *any* flag is supplied so we
|
|
34
|
+
// never silently fall back to a TTY prompt in CI. Missing flags are
|
|
35
|
+
// surfaced as errors rather than as blocking reads on stdin.
|
|
36
|
+
const hasAnyFlag = Boolean(args.name || args.scope || args.module);
|
|
37
|
+
const hasAllFlags = Boolean(args.name && args.scope && args.module);
|
|
38
|
+
const isNonInteractive = hasAnyFlag && hasAllFlags;
|
|
39
|
+
const partialFlags = hasAnyFlag && !hasAllFlags;
|
|
40
|
+
if (partialFlags) {
|
|
41
|
+
const missing = [
|
|
42
|
+
!args.name ? "<name> (positional)" : null,
|
|
43
|
+
!args.scope ? "--scope" : null,
|
|
44
|
+
!args.module ? "--module" : null,
|
|
45
|
+
]
|
|
46
|
+
.filter((s) => s !== null)
|
|
47
|
+
.join(", ");
|
|
48
|
+
console.error(`Non-interactive init requires all of name, --scope, --module. Missing: ${missing}`);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
if (!isNonInteractive) {
|
|
52
|
+
p.intro("Create a new modular-react project");
|
|
53
|
+
}
|
|
54
|
+
const projectName = args.name ||
|
|
55
|
+
(await promptText({
|
|
56
|
+
message: "Project name",
|
|
57
|
+
placeholder: "my-app",
|
|
58
|
+
validate: (v) => (!v ? "Required" : undefined),
|
|
59
|
+
}));
|
|
60
|
+
const root = resolve(process.cwd(), projectName);
|
|
61
|
+
if (existsSync(root)) {
|
|
62
|
+
const msg = `Directory "${projectName}" already exists at ${root}. Refusing to overwrite.`;
|
|
63
|
+
if (isNonInteractive) {
|
|
64
|
+
console.error(msg);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
p.cancel(msg);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
const scope = args.scope ||
|
|
71
|
+
(await promptText({
|
|
72
|
+
message: "Package scope",
|
|
73
|
+
placeholder: "@myapp",
|
|
74
|
+
validate: (v) => {
|
|
75
|
+
if (!v || !v.startsWith("@"))
|
|
76
|
+
return "Scope must start with @";
|
|
77
|
+
if (v.length < 2)
|
|
78
|
+
return "Scope too short";
|
|
79
|
+
return undefined;
|
|
80
|
+
},
|
|
81
|
+
}));
|
|
82
|
+
const moduleName = args.module ||
|
|
83
|
+
(await promptText({
|
|
84
|
+
message: "First module name",
|
|
85
|
+
placeholder: "dashboard",
|
|
86
|
+
validate: (v) => (!v ? "Required" : undefined),
|
|
87
|
+
}));
|
|
88
|
+
const pageName = toPascalCase(moduleName) + "Dashboard";
|
|
89
|
+
const listPageName = toPascalCase(moduleName) + "List";
|
|
90
|
+
const importName = toCamelCase(moduleName);
|
|
91
|
+
// Scaffolding is fully synchronous fs work — wrapping it in a
|
|
92
|
+
// `clack` spinner just blocks the event loop and never animates, so
|
|
93
|
+
// we report progress with a plain note instead.
|
|
94
|
+
scaffold({
|
|
95
|
+
preset,
|
|
96
|
+
root,
|
|
97
|
+
projectName,
|
|
98
|
+
scope,
|
|
99
|
+
moduleName,
|
|
100
|
+
pageName,
|
|
101
|
+
listPageName,
|
|
102
|
+
importName,
|
|
103
|
+
});
|
|
104
|
+
if (!isNonInteractive) {
|
|
105
|
+
p.note(`cd ${projectName}\npnpm install\npnpm dev`, "Next steps");
|
|
106
|
+
p.outro("Project created!");
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
console.log(`Project created at ${root}`);
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function scaffold(args) {
|
|
115
|
+
const { preset, root, projectName, scope, moduleName, pageName, listPageName, importName } = args;
|
|
116
|
+
const moduleLabel = toPascalCase(moduleName);
|
|
117
|
+
// Root files
|
|
118
|
+
mkdirSync(root, { recursive: true });
|
|
119
|
+
writeFileSync(resolve(root, "package.json"), rootPackageJson({ name: projectName }));
|
|
120
|
+
writeFileSync(resolve(root, "pnpm-workspace.yaml"), pnpmWorkspace());
|
|
121
|
+
writeFileSync(resolve(root, "tsconfig.base.json"), tsconfigBase());
|
|
122
|
+
writeFileSync(resolve(root, "tsconfig.json"), tsconfigRoot());
|
|
123
|
+
writeFileSync(resolve(root, ".gitignore"), gitignore());
|
|
124
|
+
// app-shared
|
|
125
|
+
mkdirSync(resolve(root, "app-shared", "src", "contracts"), { recursive: true });
|
|
126
|
+
writeFileSync(resolve(root, "app-shared", "package.json"), appSharedPackageJson({ scope, preset }));
|
|
127
|
+
writeFileSync(resolve(root, "app-shared", "tsconfig.json"), appSharedTsconfig());
|
|
128
|
+
writeFileSync(resolve(root, "app-shared", "src", "index.ts"), preset.templates.appSharedIndex({ scope }));
|
|
129
|
+
writeFileSync(resolve(root, "app-shared", "src", "types.ts"), appSharedTypes());
|
|
130
|
+
// shell
|
|
131
|
+
mkdirSync(resolve(root, "shell", "src", "stores"), { recursive: true });
|
|
132
|
+
mkdirSync(resolve(root, "shell", "src", "services"), { recursive: true });
|
|
133
|
+
mkdirSync(resolve(root, "shell", "src", "components"), { recursive: true });
|
|
134
|
+
writeFileSync(resolve(root, "shell", "package.json"), shellPackageJson({ scope, moduleName, preset }));
|
|
135
|
+
writeFileSync(resolve(root, "shell", "tsconfig.json"), shellTsconfig());
|
|
136
|
+
writeFileSync(resolve(root, "shell", "vite.config.ts"), shellViteConfig({ preset }));
|
|
137
|
+
writeFileSync(resolve(root, "shell", "index.html"), shellIndexHtml({ projectName }));
|
|
138
|
+
writeFileSync(resolve(root, "shell", "src", "main.tsx"), preset.templates.shellMain({
|
|
139
|
+
scope,
|
|
140
|
+
moduleName,
|
|
141
|
+
importName,
|
|
142
|
+
docsLink: docsUrl(preset.docs.shellPatterns),
|
|
143
|
+
}));
|
|
144
|
+
writeFileSync(resolve(root, "shell", "src", "stores", "auth.ts"), shellAuthStore({ scope }));
|
|
145
|
+
writeFileSync(resolve(root, "shell", "src", "stores", "config.ts"), shellConfigStore({ scope, appName: projectName }));
|
|
146
|
+
writeFileSync(resolve(root, "shell", "src", "services", "http-client.ts"), shellHttpClient());
|
|
147
|
+
writeFileSync(resolve(root, "shell", "src", "components", "RootLayout.tsx"), preset.templates.shellRootLayout());
|
|
148
|
+
writeFileSync(resolve(root, "shell", "src", "components", "ShellLayout.tsx"), preset.templates.shellShellLayout({ scope }));
|
|
149
|
+
writeFileSync(resolve(root, "shell", "src", "components", "Sidebar.tsx"), preset.templates.shellSidebar({ projectName }));
|
|
150
|
+
writeFileSync(resolve(root, "shell", "src", "components", "Home.tsx"), shellHome({ scope }));
|
|
151
|
+
// First module (with two routes for testable routing). Mirror the
|
|
152
|
+
// shape that `create module` produces — including __tests__ — so the
|
|
153
|
+
// initial module isn't structurally different from any module the user
|
|
154
|
+
// generates afterwards.
|
|
155
|
+
const moduleDir = resolve(root, "modules", moduleName);
|
|
156
|
+
mkdirSync(resolve(moduleDir, "src", "pages"), { recursive: true });
|
|
157
|
+
mkdirSync(resolve(moduleDir, "src", "panels"), { recursive: true });
|
|
158
|
+
mkdirSync(resolve(moduleDir, "src", "__tests__"), { recursive: true });
|
|
159
|
+
writeFileSync(resolve(moduleDir, "package.json"), modulePackageJson({ scope, name: moduleName, preset }));
|
|
160
|
+
writeFileSync(resolve(moduleDir, "tsconfig.json"), moduleTsconfig());
|
|
161
|
+
writeFileSync(resolve(moduleDir, "src", "index.ts"), preset.templates.moduleDescriptor({
|
|
162
|
+
scope,
|
|
163
|
+
name: moduleName,
|
|
164
|
+
route: moduleName,
|
|
165
|
+
pageName,
|
|
166
|
+
listPageName,
|
|
167
|
+
moduleLabel,
|
|
168
|
+
}));
|
|
169
|
+
writeFileSync(resolve(moduleDir, "src", "pages", `${pageName}.tsx`), preset.templates.modulePage({ scope, pageName, moduleLabel, moduleName }));
|
|
170
|
+
writeFileSync(resolve(moduleDir, "src", "pages", `${listPageName}.tsx`), preset.templates.moduleListPage({ scope, pageName: listPageName, moduleLabel }));
|
|
171
|
+
writeFileSync(resolve(moduleDir, "src", "panels", "DetailPanel.tsx"), preset.templates.moduleDetailPanel({ moduleLabel }));
|
|
172
|
+
writeFileSync(resolve(moduleDir, "src", "__tests__", `${moduleName}.test.ts`), preset.templates.moduleTest({
|
|
173
|
+
scope,
|
|
174
|
+
name: moduleName,
|
|
175
|
+
importName,
|
|
176
|
+
route: moduleName,
|
|
177
|
+
pageName,
|
|
178
|
+
moduleLabel,
|
|
179
|
+
}));
|
|
180
|
+
}
|
|
181
|
+
function docsUrl(path) {
|
|
182
|
+
return `https://github.com/kibertoad/modular-react/blob/main/docs/${path}`;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { buildCli, runCli } from "./cli.js";
|
|
2
|
+
export type { CliPreset, PresetPackages, PresetDocs, PresetTemplates, AppSharedIndexParams, AppSharedExtraDeps, ShellMainParams, ShellShellLayoutParams, ShellSidebarParams, ModuleDescriptorParams, ModulePageParams, ModuleListPageParams, ModuleDetailPanelParams, ModuleTestParams, } from "./preset.js";
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EACV,SAAS,EACT,cAAc,EACd,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/naming.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMhD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C"}
|
package/dist/naming.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function toPascalCase(str) {
|
|
2
|
+
return str
|
|
3
|
+
.split(/[-_\s]+/)
|
|
4
|
+
.filter(Boolean)
|
|
5
|
+
.map((s) => s.charAt(0).toUpperCase() + s.slice(1))
|
|
6
|
+
.join("");
|
|
7
|
+
}
|
|
8
|
+
export function toCamelCase(str) {
|
|
9
|
+
const pascal = toPascalCase(str);
|
|
10
|
+
return pascal.charAt(0).toLowerCase() + pascal.slice(1);
|
|
11
|
+
}
|
|
12
|
+
export function capitalize(str) {
|
|
13
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,GAAG;SACP,KAAK,CAAC,SAAS,CAAC;SAChB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
package/dist/preset.d.ts
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A `CliPreset` carries everything the shared command implementations need
|
|
3
|
+
* to know about a router integration (React Router, TanStack Router, ...):
|
|
4
|
+
* the binary name and version, the package names that show up in generated
|
|
5
|
+
* `package.json` files and source imports, and the router-specific template
|
|
6
|
+
* fragments (shell, module descriptor, app-shared, etc.).
|
|
7
|
+
*
|
|
8
|
+
* The router-specific CLI packages each export a single preset and pass it
|
|
9
|
+
* to the command factories from this package.
|
|
10
|
+
*/
|
|
11
|
+
export interface CliPreset {
|
|
12
|
+
/** The binary name (e.g. `react-router-modules`). */
|
|
13
|
+
readonly cliName: string;
|
|
14
|
+
/** The CLI version. Surfaced via `--version`. */
|
|
15
|
+
readonly cliVersion: string;
|
|
16
|
+
/** The CLI description shown in `--help`. */
|
|
17
|
+
readonly cliDescription: string;
|
|
18
|
+
/** Package coordinates the templates depend on. */
|
|
19
|
+
readonly packages: PresetPackages;
|
|
20
|
+
/** Documentation links the templates reference inline. */
|
|
21
|
+
readonly docs: PresetDocs;
|
|
22
|
+
/** Router-specific template fragments. */
|
|
23
|
+
readonly templates: PresetTemplates;
|
|
24
|
+
}
|
|
25
|
+
export interface PresetPackages {
|
|
26
|
+
/** Module-author-facing core (e.g. `@react-router-modules/core`). */
|
|
27
|
+
readonly core: string;
|
|
28
|
+
/** Shell-author-facing runtime (e.g. `@react-router-modules/runtime`). */
|
|
29
|
+
readonly runtime: string;
|
|
30
|
+
/** Test helpers (e.g. `@react-router-modules/testing`). */
|
|
31
|
+
readonly testing: string;
|
|
32
|
+
/** Underlying router (e.g. `react-router`, `@tanstack/react-router`). */
|
|
33
|
+
readonly router: string;
|
|
34
|
+
/** Pinned router version range (e.g. `^7.6.0`). */
|
|
35
|
+
readonly routerVersion: string;
|
|
36
|
+
}
|
|
37
|
+
export interface PresetDocs {
|
|
38
|
+
/** Path under `docs/` to the router-specific shell-patterns guide. */
|
|
39
|
+
readonly shellPatterns: string;
|
|
40
|
+
}
|
|
41
|
+
export interface PresetTemplates {
|
|
42
|
+
appSharedIndex(params: AppSharedIndexParams): string;
|
|
43
|
+
appSharedExtraDeps?: AppSharedExtraDeps;
|
|
44
|
+
shellMain(params: ShellMainParams): string;
|
|
45
|
+
shellMainWithJourneys?(params: ShellMainParams): string;
|
|
46
|
+
shellRootLayout(): string;
|
|
47
|
+
shellShellLayout(params: ShellShellLayoutParams): string;
|
|
48
|
+
shellSidebar(params: ShellSidebarParams): string;
|
|
49
|
+
shellViteDedupe: readonly string[];
|
|
50
|
+
moduleDescriptor(params: ModuleDescriptorParams): string;
|
|
51
|
+
modulePage(params: ModulePageParams): string;
|
|
52
|
+
moduleListPage(params: ModuleListPageParams): string;
|
|
53
|
+
moduleDetailPanel(params: ModuleDetailPanelParams): string;
|
|
54
|
+
moduleTest(params: ModuleTestParams): string;
|
|
55
|
+
}
|
|
56
|
+
export interface AppSharedIndexParams {
|
|
57
|
+
readonly scope: string;
|
|
58
|
+
}
|
|
59
|
+
export interface AppSharedExtraDeps {
|
|
60
|
+
readonly dependencies?: Record<string, string>;
|
|
61
|
+
readonly devDependencies?: Record<string, string>;
|
|
62
|
+
}
|
|
63
|
+
export interface ShellMainParams {
|
|
64
|
+
readonly scope: string;
|
|
65
|
+
readonly moduleName: string;
|
|
66
|
+
readonly importName: string;
|
|
67
|
+
readonly docsLink: string;
|
|
68
|
+
}
|
|
69
|
+
export interface ShellShellLayoutParams {
|
|
70
|
+
readonly scope: string;
|
|
71
|
+
}
|
|
72
|
+
export interface ShellSidebarParams {
|
|
73
|
+
readonly projectName: string;
|
|
74
|
+
}
|
|
75
|
+
export interface ModuleDescriptorParams {
|
|
76
|
+
readonly scope: string;
|
|
77
|
+
readonly name: string;
|
|
78
|
+
readonly route: string;
|
|
79
|
+
readonly pageName: string;
|
|
80
|
+
readonly listPageName: string;
|
|
81
|
+
readonly navGroup?: string;
|
|
82
|
+
/** PascalCase label (e.g. `CustomerOrders` for `customer-orders`). */
|
|
83
|
+
readonly moduleLabel: string;
|
|
84
|
+
}
|
|
85
|
+
export interface ModulePageParams {
|
|
86
|
+
readonly scope: string;
|
|
87
|
+
readonly pageName: string;
|
|
88
|
+
readonly moduleLabel: string;
|
|
89
|
+
readonly moduleName: string;
|
|
90
|
+
}
|
|
91
|
+
export interface ModuleListPageParams {
|
|
92
|
+
readonly scope: string;
|
|
93
|
+
readonly pageName: string;
|
|
94
|
+
readonly moduleLabel: string;
|
|
95
|
+
}
|
|
96
|
+
export interface ModuleDetailPanelParams {
|
|
97
|
+
readonly moduleLabel: string;
|
|
98
|
+
}
|
|
99
|
+
export interface ModuleTestParams {
|
|
100
|
+
readonly scope: string;
|
|
101
|
+
readonly name: string;
|
|
102
|
+
readonly importName: string;
|
|
103
|
+
readonly route: string;
|
|
104
|
+
readonly pageName: string;
|
|
105
|
+
/**
|
|
106
|
+
* PascalCase label rendered by the page templates (e.g. `CustomerOrders`
|
|
107
|
+
* for a `customer-orders` module). The test asserts on this exact text,
|
|
108
|
+
* so the label must match what `modulePage` / `moduleListPage` render.
|
|
109
|
+
*/
|
|
110
|
+
readonly moduleLabel: string;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=preset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"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"}
|
package/dist/preset.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Versions of `@modular-react/*` runtime packages that the CLI bakes into
|
|
3
|
+
* generated `package.json` files. Centralized so a single bump propagates
|
|
4
|
+
* to every template and transform — search for any other literal pin in
|
|
5
|
+
* this codebase and you've found a regression.
|
|
6
|
+
*/
|
|
7
|
+
export declare const RUNTIME_VERSIONS: {
|
|
8
|
+
/** `@modular-react/core` — module-author-facing core. */
|
|
9
|
+
readonly core: "^1.0.0";
|
|
10
|
+
/** `@modular-react/react` — React bindings. */
|
|
11
|
+
readonly react: "^1.0.0";
|
|
12
|
+
/** `@modular-react/journeys` — multi-module flow runtime. */
|
|
13
|
+
readonly journeys: "^0.1.0";
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=runtime-versions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-versions.d.ts","sourceRoot":"","sources":["../src/runtime-versions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;IAC3B,yDAAyD;;IAEzD,+CAA+C;;IAE/C,6DAA6D;;CAErD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Versions of `@modular-react/*` runtime packages that the CLI bakes into
|
|
3
|
+
* generated `package.json` files. Centralized so a single bump propagates
|
|
4
|
+
* to every template and transform — search for any other literal pin in
|
|
5
|
+
* this codebase and you've found a regression.
|
|
6
|
+
*/
|
|
7
|
+
export const RUNTIME_VERSIONS = {
|
|
8
|
+
/** `@modular-react/core` — module-author-facing core. */
|
|
9
|
+
core: "^1.0.0",
|
|
10
|
+
/** `@modular-react/react` — React bindings. */
|
|
11
|
+
react: "^1.0.0",
|
|
12
|
+
/** `@modular-react/journeys` — multi-module flow runtime. */
|
|
13
|
+
journeys: "^0.1.0",
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=runtime-versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-versions.js","sourceRoot":"","sources":["../src/runtime-versions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,yDAAyD;IACzD,IAAI,EAAE,QAAQ;IACd,+CAA+C;IAC/C,KAAK,EAAE,QAAQ;IACf,6DAA6D;IAC7D,QAAQ,EAAE,QAAQ;CACV,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CliPreset } from "../preset.js";
|
|
2
|
+
export declare function appSharedPackageJson(params: {
|
|
3
|
+
scope: string;
|
|
4
|
+
preset: CliPreset;
|
|
5
|
+
}): string;
|
|
6
|
+
export declare function appSharedTsconfig(): string;
|
|
7
|
+
export declare function appSharedTypes(): string;
|
|
8
|
+
//# sourceMappingURL=app-shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-shared.d.ts","sourceRoot":"","sources":["../../src/templates/app-shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG,MAAM,CA2CzF;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAS1C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAavC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export function appSharedPackageJson(params) {
|
|
2
|
+
const extra = params.preset.templates.appSharedExtraDeps;
|
|
3
|
+
const dependencies = {
|
|
4
|
+
"@modular-react/core": "^1.0.0",
|
|
5
|
+
[params.preset.packages.core]: "^2.0.0",
|
|
6
|
+
"@lokalise/api-contracts": "^6.0.0",
|
|
7
|
+
"@lokalise/frontend-http-client": "^7.0.0",
|
|
8
|
+
wretch: "^2.11.0",
|
|
9
|
+
zod: "^3.25.0",
|
|
10
|
+
...extra?.dependencies,
|
|
11
|
+
};
|
|
12
|
+
const peerDependencies = {
|
|
13
|
+
react: "^19.0.0",
|
|
14
|
+
zustand: "^5.0.0",
|
|
15
|
+
};
|
|
16
|
+
const devDependencies = {
|
|
17
|
+
react: "^19.0.0",
|
|
18
|
+
zustand: "^5.0.0",
|
|
19
|
+
"@types/react": "^19.0.0",
|
|
20
|
+
typescript: "^6.0.2",
|
|
21
|
+
...extra?.devDependencies,
|
|
22
|
+
};
|
|
23
|
+
return JSON.stringify({
|
|
24
|
+
name: `${params.scope}/app-shared`,
|
|
25
|
+
version: "0.1.0",
|
|
26
|
+
type: "module",
|
|
27
|
+
main: "./src/index.ts",
|
|
28
|
+
types: "./src/index.ts",
|
|
29
|
+
exports: {
|
|
30
|
+
".": {
|
|
31
|
+
import: "./src/index.ts",
|
|
32
|
+
types: "./src/index.ts",
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
dependencies: sortObject(dependencies),
|
|
36
|
+
peerDependencies: sortObject(peerDependencies),
|
|
37
|
+
devDependencies: sortObject(devDependencies),
|
|
38
|
+
}, null, 2);
|
|
39
|
+
}
|
|
40
|
+
export function appSharedTsconfig() {
|
|
41
|
+
return JSON.stringify({
|
|
42
|
+
extends: "../tsconfig.base.json",
|
|
43
|
+
include: ["src"],
|
|
44
|
+
}, null, 2);
|
|
45
|
+
}
|
|
46
|
+
export function appSharedTypes() {
|
|
47
|
+
return `export interface User {
|
|
48
|
+
id: string
|
|
49
|
+
name: string
|
|
50
|
+
email: string
|
|
51
|
+
role: string
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface LoginCredentials {
|
|
55
|
+
email: string
|
|
56
|
+
password: string
|
|
57
|
+
}
|
|
58
|
+
`;
|
|
59
|
+
}
|
|
60
|
+
function sortObject(obj) {
|
|
61
|
+
return Object.fromEntries(Object.entries(obj).sort(([a], [b]) => a.localeCompare(b)));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=app-shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-shared.js","sourceRoot":"","sources":["../../src/templates/app-shared.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,MAA4C;IAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC;IACzD,MAAM,YAAY,GAAG;QACnB,qBAAqB,EAAE,QAAQ;QAC/B,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ;QACvC,yBAAyB,EAAE,QAAQ;QACnC,gCAAgC,EAAE,QAAQ;QAC1C,MAAM,EAAE,SAAS;QACjB,GAAG,EAAE,SAAS;QACd,GAAG,KAAK,EAAE,YAAY;KACvB,CAAC;IACF,MAAM,gBAAgB,GAAG;QACvB,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,QAAQ;KAClB,CAAC;IACF,MAAM,eAAe,GAAG;QACtB,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,QAAQ;QACjB,cAAc,EAAE,SAAS;QACzB,UAAU,EAAE,QAAQ;QACpB,GAAG,KAAK,EAAE,eAAe;KAC1B,CAAC;IAEF,OAAO,IAAI,CAAC,SAAS,CACnB;QACE,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,aAAa;QAClC,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE;YACP,GAAG,EAAE;gBACH,MAAM,EAAE,gBAAgB;gBACxB,KAAK,EAAE,gBAAgB;aACxB;SACF;QACD,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC;QACtC,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,CAAC;QAC9C,eAAe,EAAE,UAAU,CAAC,eAAe,CAAC;KAC7C,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,SAAS,CACnB;QACE,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE,CAAC,KAAK,CAAC;KACjB,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO;;;;;;;;;;;CAWR,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAAI,GAAsB;IAC3C,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface JourneyTemplateModule {
|
|
2
|
+
/** The module's name as scaffolded by `create module` (e.g. `billing`). */
|
|
3
|
+
readonly moduleName: string;
|
|
4
|
+
/** The default-import name (e.g. `billing`). */
|
|
5
|
+
readonly importName: string;
|
|
6
|
+
/** The package name (e.g. `@myorg/billing-module`). */
|
|
7
|
+
readonly packageName: string;
|
|
8
|
+
}
|
|
9
|
+
export interface JourneyTemplateParams {
|
|
10
|
+
readonly scope: string;
|
|
11
|
+
/** Kebab-case journey id (e.g. `customer-onboarding`). */
|
|
12
|
+
readonly journeyName: string;
|
|
13
|
+
/** PascalCase journey base (e.g. `CustomerOnboarding`). */
|
|
14
|
+
readonly journeyPascal: string;
|
|
15
|
+
/** camelCase journey base (e.g. `customerOnboarding`). */
|
|
16
|
+
readonly journeyCamel: string;
|
|
17
|
+
readonly modules: readonly JourneyTemplateModule[];
|
|
18
|
+
readonly withPersistence: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function journeyPackageJson(params: JourneyTemplateParams): string;
|
|
21
|
+
export declare function journeyTsconfig(): string;
|
|
22
|
+
export declare function journeyIndex(params: JourneyTemplateParams): string;
|
|
23
|
+
export declare function journeyDefinition(params: JourneyTemplateParams): string;
|
|
24
|
+
/**
|
|
25
|
+
* Optional `shell/src/<journey>-persistence.ts`. Generated only when the
|
|
26
|
+
* user passes `--persistence`. Uses `createWebStoragePersistence` and a
|
|
27
|
+
* sensible per-customer key.
|
|
28
|
+
*/
|
|
29
|
+
export declare function journeyPersistence(params: JourneyTemplateParams): string;
|
|
30
|
+
//# sourceMappingURL=journey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journey.d.ts","sourceRoot":"","sources":["../../src/templates/journey.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACnD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAiCxE;AAED,wBAAgB,eAAe,IAAI,MAAM,CASxC;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAelE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAgGvE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAkBxE"}
|