@taujs/create-taujs 0.1.6 → 0.1.7

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 (2) hide show
  1. package/dist/index.js +55 -23
  2. 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: (value) => {
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: argName || answers.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 (!installDeps) {
118
- console.log(` ${PACKAGE_MANAGERS[packageManager]}`);
119
- }
120
- console.log(` ${packageManager} run dev
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, packageManager),
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, packageManager) {
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
- Server-first application composition with explicit per-route rendering control.
522
+ Request-first application composition with explicit per-route rendering control.
491
523
  </p>
492
524
  </header>
493
525
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taujs/create-taujs",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "Scaffold a new τjs application",
5
5
  "author": "Aoede <taujs@aoede.uk.net> (https://www.aoede.uk.net)",
6
6
  "homepage": "https://taujs.dev/",