@taujs/create-taujs 0.1.6 → 0.1.8
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 +57 -28
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -9,8 +9,7 @@ import prompts from "prompts";
|
|
|
9
9
|
var PACKAGE_MANAGERS = {
|
|
10
10
|
npm: "npm install",
|
|
11
11
|
pnpm: "pnpm install",
|
|
12
|
-
yarn: "yarn"
|
|
13
|
-
bun: "bun install"
|
|
12
|
+
yarn: "yarn install"
|
|
14
13
|
};
|
|
15
14
|
function parseArgs() {
|
|
16
15
|
const rawArgs = process.argv.slice(2);
|
|
@@ -23,22 +22,31 @@ function parseArgs() {
|
|
|
23
22
|
}
|
|
24
23
|
return { projectName };
|
|
25
24
|
}
|
|
25
|
+
function validateProjectName(value) {
|
|
26
|
+
if (!value) return "Project name is required";
|
|
27
|
+
if (!/^[a-z0-9-_]+$/.test(value)) {
|
|
28
|
+
return "Project name can only contain lowercase letters, numbers, hyphens, and underscores";
|
|
29
|
+
}
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
26
32
|
async function main() {
|
|
27
33
|
console.log(pc.cyan("\nWelcome to \u03C4js (taujs)\n"));
|
|
28
34
|
const { projectName: argName } = parseArgs();
|
|
35
|
+
if (argName) {
|
|
36
|
+
const res = validateProjectName(argName);
|
|
37
|
+
if (res !== true) {
|
|
38
|
+
console.log(pc.red(`
|
|
39
|
+
\u2716 Invalid project name "${argName}": ${res}`));
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
29
43
|
const questions = [
|
|
30
44
|
{
|
|
31
45
|
type: argName ? null : "text",
|
|
32
46
|
name: "projectName",
|
|
33
47
|
message: "Project name:",
|
|
34
48
|
initial: "my-taujs-app",
|
|
35
|
-
validate:
|
|
36
|
-
if (!value) return "Project name is required";
|
|
37
|
-
if (!/^[a-z0-9-_]+$/.test(value)) {
|
|
38
|
-
return "Project name can only contain lowercase letters, numbers, hyphens, and underscores";
|
|
39
|
-
}
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
49
|
+
validate: validateProjectName
|
|
42
50
|
},
|
|
43
51
|
{
|
|
44
52
|
type: "select",
|
|
@@ -47,8 +55,7 @@ async function main() {
|
|
|
47
55
|
choices: [
|
|
48
56
|
{ title: "npm", value: "npm" },
|
|
49
57
|
{ title: "pnpm", value: "pnpm" },
|
|
50
|
-
{ title: "yarn", value: "yarn" }
|
|
51
|
-
{ title: "bun", value: "bun" }
|
|
58
|
+
{ title: "yarn", value: "yarn" }
|
|
52
59
|
],
|
|
53
60
|
initial: 0
|
|
54
61
|
},
|
|
@@ -65,8 +72,21 @@ async function main() {
|
|
|
65
72
|
process.exit(1);
|
|
66
73
|
}
|
|
67
74
|
});
|
|
75
|
+
const projectName = argName ?? answers.projectName;
|
|
76
|
+
const nameRes = validateProjectName(projectName);
|
|
77
|
+
if (nameRes !== true) {
|
|
78
|
+
console.log(
|
|
79
|
+
pc.red(`
|
|
80
|
+
\u2716 Invalid project name "${projectName}": ${nameRes}`)
|
|
81
|
+
);
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
if (!projectName) {
|
|
85
|
+
console.log(pc.red("\n\u2716 Project name is required"));
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
68
88
|
const config = {
|
|
69
|
-
projectName
|
|
89
|
+
projectName,
|
|
70
90
|
packageManager: answers.packageManager,
|
|
71
91
|
installDeps: answers.installDeps
|
|
72
92
|
};
|
|
@@ -87,6 +107,7 @@ Creating project in ${pc.bold(targetDir)}...
|
|
|
87
107
|
await createDirectoryStructure(targetDir);
|
|
88
108
|
await generateFiles(targetDir, config);
|
|
89
109
|
console.log(pc.green("Project files created"));
|
|
110
|
+
let depsInstalled = false;
|
|
90
111
|
if (installDeps) {
|
|
91
112
|
console.log(
|
|
92
113
|
pc.cyan(`
|
|
@@ -98,6 +119,7 @@ Installing dependencies with ${packageManager}...
|
|
|
98
119
|
cwd: targetDir,
|
|
99
120
|
stdio: "inherit"
|
|
100
121
|
});
|
|
122
|
+
depsInstalled = true;
|
|
101
123
|
console.log(pc.green("\nDependencies installed"));
|
|
102
124
|
} catch (error) {
|
|
103
125
|
console.log(
|
|
@@ -107,6 +129,13 @@ Installing dependencies with ${packageManager}...
|
|
|
107
129
|
);
|
|
108
130
|
}
|
|
109
131
|
}
|
|
132
|
+
if (installDeps && !depsInstalled) {
|
|
133
|
+
console.log(
|
|
134
|
+
pc.yellow(
|
|
135
|
+
"\u26A0 Dependency install failed. Run the install command before starting the dev server.\n"
|
|
136
|
+
)
|
|
137
|
+
);
|
|
138
|
+
}
|
|
110
139
|
console.log(
|
|
111
140
|
pc.green(`
|
|
112
141
|
\u2713 Project ${pc.bold(projectName)} created successfully!
|
|
@@ -114,10 +143,12 @@ Installing dependencies with ${packageManager}...
|
|
|
114
143
|
);
|
|
115
144
|
console.log(pc.cyan("Next steps:\n"));
|
|
116
145
|
console.log(` cd ${projectName}`);
|
|
117
|
-
if (!
|
|
118
|
-
console.log(
|
|
119
|
-
}
|
|
120
|
-
|
|
146
|
+
if (!depsInstalled)
|
|
147
|
+
console.log(
|
|
148
|
+
` ${PACKAGE_MANAGERS[packageManager]}${installDeps ? " # (install failed earlier)" : ""}`
|
|
149
|
+
);
|
|
150
|
+
const pmRun = packageManager === "npm" ? "npm run" : packageManager;
|
|
151
|
+
console.log(` ${pmRun} dev
|
|
121
152
|
`);
|
|
122
153
|
console.log(pc.dim("Documentation: https://taujs.dev\n"));
|
|
123
154
|
}
|
|
@@ -135,7 +166,7 @@ async function generateFiles(targetDir, config) {
|
|
|
135
166
|
const { projectName, packageManager } = config;
|
|
136
167
|
await fs.writeJSON(
|
|
137
168
|
path.join(targetDir, "package.json"),
|
|
138
|
-
generatePackageJson(projectName
|
|
169
|
+
generatePackageJson(projectName),
|
|
139
170
|
{ spaces: 2 }
|
|
140
171
|
);
|
|
141
172
|
await fs.writeFile(path.join(targetDir, "build.ts"), generateBuildTs());
|
|
@@ -203,19 +234,19 @@ async function generateFiles(targetDir, config) {
|
|
|
203
234
|
generateFavicon()
|
|
204
235
|
);
|
|
205
236
|
}
|
|
206
|
-
function generatePackageJson(projectName
|
|
237
|
+
function generatePackageJson(projectName) {
|
|
207
238
|
return {
|
|
208
239
|
name: projectName,
|
|
209
240
|
version: "0.1.0",
|
|
210
241
|
private: true,
|
|
211
242
|
type: "module",
|
|
212
243
|
scripts: {
|
|
213
|
-
dev: "NODE_ENV=development tsx watch --ignore vite.config.ts --trace-warnings --tsconfig ./src/server/tsconfig.json ./src/server/index.ts --loglevel verbose",
|
|
244
|
+
dev: "cross-env NODE_ENV=development tsx watch --ignore vite.config.ts --trace-warnings --tsconfig ./src/server/tsconfig.json ./src/server/index.ts --loglevel verbose",
|
|
214
245
|
"build:client": "tsx build.ts",
|
|
215
|
-
"build:entry-server": "BUILD_MODE=ssr tsx build.ts",
|
|
246
|
+
"build:entry-server": "cross-env BUILD_MODE=ssr tsx build.ts",
|
|
216
247
|
"build:server": "esbuild src/server/index.ts --bundle --platform=node --format=esm --outfile=dist/server/index.js --external:fastify --external:@taujs/server --external:@taujs/react",
|
|
217
|
-
build: "tsx build.ts && BUILD_MODE=ssr tsx build.ts && esbuild src/server/index.ts --bundle --platform=node --format=esm --outfile=dist/server/index.js --external:fastify --external:@taujs/server --external:@taujs/react",
|
|
218
|
-
start: "NODE_ENV=production node dist/server/index.js",
|
|
248
|
+
build: "tsx build.ts && cross-env BUILD_MODE=ssr tsx build.ts && esbuild src/server/index.ts --bundle --platform=node --format=esm --outfile=dist/server/index.js --external:fastify --external:@taujs/server --external:@taujs/react",
|
|
249
|
+
start: "cross-env NODE_ENV=production node dist/server/index.js",
|
|
219
250
|
lint: "tsc --noEmit"
|
|
220
251
|
},
|
|
221
252
|
dependencies: {
|
|
@@ -230,6 +261,7 @@ function generatePackageJson(projectName, packageManager) {
|
|
|
230
261
|
"@types/react": "^19.0.2",
|
|
231
262
|
"@types/react-dom": "^19.0.2",
|
|
232
263
|
"@vitejs/plugin-react": "^4.6.0",
|
|
264
|
+
"cross-env": "^7.0.3",
|
|
233
265
|
tsx: "^4.19.3",
|
|
234
266
|
typescript: "^5.7.3",
|
|
235
267
|
vite: "^7.1.11"
|
|
@@ -487,7 +519,7 @@ export function App() {
|
|
|
487
519
|
<header className="app-header">
|
|
488
520
|
<h1 className="app-title">\u03C4js - Composing systems, not just apps</h1>
|
|
489
521
|
<p className="app-subtitle">
|
|
490
|
-
|
|
522
|
+
Request-first application composition with explicit per-route rendering control.
|
|
491
523
|
</p>
|
|
492
524
|
</header>
|
|
493
525
|
|
|
@@ -829,12 +861,9 @@ export type ServiceRegistry = typeof serviceRegistry;
|
|
|
829
861
|
`;
|
|
830
862
|
}
|
|
831
863
|
function generateServiceTypesAugmentation() {
|
|
832
|
-
return `
|
|
833
|
-
import type { serviceRegistry } from './registry';
|
|
834
|
-
|
|
835
|
-
declare module '@taujs/server/config' {
|
|
864
|
+
return `declare module '@taujs/server/config' {
|
|
836
865
|
interface ServiceContext {
|
|
837
|
-
|
|
866
|
+
tenantId?: string;
|
|
838
867
|
}
|
|
839
868
|
}
|
|
840
869
|
`;
|