cognite-create 0.2.32 → 0.2.33
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/bin/index.js +81 -20
- package/bin/index.test.js +129 -5
- package/package.json +1 -1
- package/templates/vite.config.ts +14 -0
- /package/templates/{app/globals.css → src/index.css} +0 -0
package/bin/index.js
CHANGED
|
@@ -19,6 +19,12 @@ const REQUIRED_DEPENDENCIES = [
|
|
|
19
19
|
{ name: "clsx", version: "^2.1.1" },
|
|
20
20
|
];
|
|
21
21
|
|
|
22
|
+
const REQUIRED_DEV_DEPENDENCIES = [
|
|
23
|
+
{ name: "tailwindcss", version: "^4.0.0" },
|
|
24
|
+
{ name: "@tailwindcss/vite", version: "^4.0.0" },
|
|
25
|
+
{ name: "@types/node", version: "^22.10.2" },
|
|
26
|
+
];
|
|
27
|
+
|
|
22
28
|
function promptForInput(question) {
|
|
23
29
|
const rl = readline.createInterface({
|
|
24
30
|
input: process.stdin,
|
|
@@ -56,6 +62,14 @@ async function main() {
|
|
|
56
62
|
additionalArgs = args.slice(1);
|
|
57
63
|
}
|
|
58
64
|
|
|
65
|
+
// Add default template if not specified
|
|
66
|
+
const hasTemplate = additionalArgs.some(
|
|
67
|
+
(arg) => arg === "--template" || arg === "-t"
|
|
68
|
+
);
|
|
69
|
+
if (!hasTemplate) {
|
|
70
|
+
additionalArgs.push("--template", "react-ts");
|
|
71
|
+
}
|
|
72
|
+
|
|
59
73
|
const createArgs = ["create-vite@latest", projectDir, ...additionalArgs];
|
|
60
74
|
await runCreateVite(createArgs);
|
|
61
75
|
await addCogniteTemplates(projectDir);
|
|
@@ -206,7 +220,7 @@ async function ensureDependenciesInstalled(targetRoot) {
|
|
|
206
220
|
`\nUnable to read or parse ${path.relative(
|
|
207
221
|
process.cwd(),
|
|
208
222
|
packageJsonPath
|
|
209
|
-
)}. Install
|
|
223
|
+
)}. Install dependencies manually.`
|
|
210
224
|
);
|
|
211
225
|
return false;
|
|
212
226
|
}
|
|
@@ -221,25 +235,49 @@ async function ensureDependenciesInstalled(targetRoot) {
|
|
|
221
235
|
)
|
|
222
236
|
);
|
|
223
237
|
|
|
224
|
-
|
|
238
|
+
const missingDevDependencies = REQUIRED_DEV_DEPENDENCIES.filter(
|
|
239
|
+
(dependency) =>
|
|
240
|
+
!(
|
|
241
|
+
(packageJson.dependencies &&
|
|
242
|
+
packageJson.dependencies[dependency.name]) ||
|
|
243
|
+
(packageJson.devDependencies &&
|
|
244
|
+
packageJson.devDependencies[dependency.name])
|
|
245
|
+
)
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
if (missingDependencies.length === 0 && missingDevDependencies.length === 0) {
|
|
225
249
|
return false;
|
|
226
250
|
}
|
|
227
251
|
|
|
228
252
|
const packageManager = await detectPackageManager(packageJson, targetRoot);
|
|
229
253
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
254
|
+
// Install regular dependencies
|
|
255
|
+
if (missingDependencies.length > 0) {
|
|
256
|
+
const dependencySummary = formatDependencySummary(missingDependencies);
|
|
257
|
+
console.log(`\nInstalling ${dependencySummary} using ${packageManager}...`);
|
|
258
|
+
await installDependencies(
|
|
259
|
+
packageManager,
|
|
260
|
+
targetRoot,
|
|
261
|
+
missingDependencies,
|
|
262
|
+
false
|
|
236
263
|
);
|
|
237
|
-
return false;
|
|
238
264
|
}
|
|
239
265
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
266
|
+
// Install dev dependencies
|
|
267
|
+
if (missingDevDependencies.length > 0) {
|
|
268
|
+
const devDependencySummary = formatDependencySummary(
|
|
269
|
+
missingDevDependencies
|
|
270
|
+
);
|
|
271
|
+
console.log(
|
|
272
|
+
`\nInstalling dev dependencies ${devDependencySummary} using ${packageManager}...`
|
|
273
|
+
);
|
|
274
|
+
await installDependencies(
|
|
275
|
+
packageManager,
|
|
276
|
+
targetRoot,
|
|
277
|
+
missingDevDependencies,
|
|
278
|
+
true
|
|
279
|
+
);
|
|
280
|
+
}
|
|
243
281
|
|
|
244
282
|
return true;
|
|
245
283
|
}
|
|
@@ -271,16 +309,26 @@ async function detectPackageManager(packageJson, targetRoot) {
|
|
|
271
309
|
}
|
|
272
310
|
}
|
|
273
311
|
|
|
274
|
-
|
|
312
|
+
// Default to npm if no lock file is found
|
|
313
|
+
return "npm";
|
|
275
314
|
}
|
|
276
315
|
|
|
277
|
-
async function installDependencies(
|
|
316
|
+
async function installDependencies(
|
|
317
|
+
packageManager,
|
|
318
|
+
cwd,
|
|
319
|
+
dependencies,
|
|
320
|
+
isDev = false
|
|
321
|
+
) {
|
|
278
322
|
const dependencySpecs = dependencies.map((dependency) =>
|
|
279
323
|
dependency.version
|
|
280
324
|
? `${dependency.name}@${dependency.version}`
|
|
281
325
|
: dependency.name
|
|
282
326
|
);
|
|
283
|
-
const { command, args } = getInstallCommand(
|
|
327
|
+
const { command, args } = getInstallCommand(
|
|
328
|
+
packageManager,
|
|
329
|
+
dependencySpecs,
|
|
330
|
+
isDev
|
|
331
|
+
);
|
|
284
332
|
|
|
285
333
|
if (!command) {
|
|
286
334
|
throw new Error(`Unsupported package manager: ${packageManager}`);
|
|
@@ -306,18 +354,31 @@ async function installDependencies(packageManager, cwd, dependencies) {
|
|
|
306
354
|
});
|
|
307
355
|
}
|
|
308
356
|
|
|
309
|
-
function getInstallCommand(packageManager, dependencySpecs) {
|
|
357
|
+
function getInstallCommand(packageManager, dependencySpecs, isDev = false) {
|
|
310
358
|
const normalized = normalizeCommand(packageManager);
|
|
359
|
+
const devFlag = isDev ? ["-D"] : [];
|
|
311
360
|
|
|
312
361
|
switch (packageManager) {
|
|
313
362
|
case "npm":
|
|
314
|
-
return {
|
|
363
|
+
return {
|
|
364
|
+
command: normalized,
|
|
365
|
+
args: ["install", ...devFlag, ...dependencySpecs],
|
|
366
|
+
};
|
|
315
367
|
case "pnpm":
|
|
316
|
-
return {
|
|
368
|
+
return {
|
|
369
|
+
command: normalized,
|
|
370
|
+
args: ["add", ...devFlag, ...dependencySpecs],
|
|
371
|
+
};
|
|
317
372
|
case "yarn":
|
|
318
|
-
return {
|
|
373
|
+
return {
|
|
374
|
+
command: normalized,
|
|
375
|
+
args: ["add", ...devFlag, ...dependencySpecs],
|
|
376
|
+
};
|
|
319
377
|
case "bun":
|
|
320
|
-
return {
|
|
378
|
+
return {
|
|
379
|
+
command: normalized,
|
|
380
|
+
args: ["add", ...devFlag, ...dependencySpecs],
|
|
381
|
+
};
|
|
321
382
|
default:
|
|
322
383
|
return { command: null, args: [] };
|
|
323
384
|
}
|
package/bin/index.test.js
CHANGED
|
@@ -39,6 +39,102 @@ describe("CLI Command Tests", () => {
|
|
|
39
39
|
]);
|
|
40
40
|
});
|
|
41
41
|
|
|
42
|
+
it("should add default react-ts template when no template is specified", () => {
|
|
43
|
+
const args = ["my-project"];
|
|
44
|
+
let projectDir;
|
|
45
|
+
let additionalArgs = [];
|
|
46
|
+
|
|
47
|
+
if (args.length === 0 || args[0].startsWith("-")) {
|
|
48
|
+
additionalArgs = args;
|
|
49
|
+
} else {
|
|
50
|
+
projectDir = args[0];
|
|
51
|
+
additionalArgs = args.slice(1);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Add default template if not specified
|
|
55
|
+
const hasTemplate = additionalArgs.some(
|
|
56
|
+
(arg) => arg === "--template" || arg === "-t"
|
|
57
|
+
);
|
|
58
|
+
if (!hasTemplate) {
|
|
59
|
+
additionalArgs.push("--template", "react-ts");
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const createArgs = ["create-vite@latest", projectDir, ...additionalArgs];
|
|
63
|
+
|
|
64
|
+
expect(projectDir).toBe("my-project");
|
|
65
|
+
expect(additionalArgs).toEqual(["--template", "react-ts"]);
|
|
66
|
+
expect(createArgs).toEqual([
|
|
67
|
+
"create-vite@latest",
|
|
68
|
+
"my-project",
|
|
69
|
+
"--template",
|
|
70
|
+
"react-ts",
|
|
71
|
+
]);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("should not add default template if --template is already specified", () => {
|
|
75
|
+
const args = ["my-project", "--template", "vue"];
|
|
76
|
+
let projectDir;
|
|
77
|
+
let additionalArgs = [];
|
|
78
|
+
|
|
79
|
+
if (args.length === 0 || args[0].startsWith("-")) {
|
|
80
|
+
additionalArgs = args;
|
|
81
|
+
} else {
|
|
82
|
+
projectDir = args[0];
|
|
83
|
+
additionalArgs = args.slice(1);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Add default template if not specified
|
|
87
|
+
const hasTemplate = additionalArgs.some(
|
|
88
|
+
(arg) => arg === "--template" || arg === "-t"
|
|
89
|
+
);
|
|
90
|
+
if (!hasTemplate) {
|
|
91
|
+
additionalArgs.push("--template", "react-ts");
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const createArgs = ["create-vite@latest", projectDir, ...additionalArgs];
|
|
95
|
+
|
|
96
|
+
expect(projectDir).toBe("my-project");
|
|
97
|
+
expect(additionalArgs).toEqual(["--template", "vue"]);
|
|
98
|
+
expect(createArgs).toEqual([
|
|
99
|
+
"create-vite@latest",
|
|
100
|
+
"my-project",
|
|
101
|
+
"--template",
|
|
102
|
+
"vue",
|
|
103
|
+
]);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("should not add default template if -t is already specified", () => {
|
|
107
|
+
const args = ["my-project", "-t", "vue-ts"];
|
|
108
|
+
let projectDir;
|
|
109
|
+
let additionalArgs = [];
|
|
110
|
+
|
|
111
|
+
if (args.length === 0 || args[0].startsWith("-")) {
|
|
112
|
+
additionalArgs = args;
|
|
113
|
+
} else {
|
|
114
|
+
projectDir = args[0];
|
|
115
|
+
additionalArgs = args.slice(1);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Add default template if not specified
|
|
119
|
+
const hasTemplate = additionalArgs.some(
|
|
120
|
+
(arg) => arg === "--template" || arg === "-t"
|
|
121
|
+
);
|
|
122
|
+
if (!hasTemplate) {
|
|
123
|
+
additionalArgs.push("--template", "react-ts");
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const createArgs = ["create-vite@latest", projectDir, ...additionalArgs];
|
|
127
|
+
|
|
128
|
+
expect(projectDir).toBe("my-project");
|
|
129
|
+
expect(additionalArgs).toEqual(["-t", "vue-ts"]);
|
|
130
|
+
expect(createArgs).toEqual([
|
|
131
|
+
"create-vite@latest",
|
|
132
|
+
"my-project",
|
|
133
|
+
"-t",
|
|
134
|
+
"vue-ts",
|
|
135
|
+
]);
|
|
136
|
+
});
|
|
137
|
+
|
|
42
138
|
it("should handle flags-only arguments (requires prompt)", () => {
|
|
43
139
|
const args = ["--template", "react-ts"];
|
|
44
140
|
let projectDir;
|
|
@@ -131,10 +227,17 @@ describe("CLI Command Tests", () => {
|
|
|
131
227
|
expect(name).toBe(expected);
|
|
132
228
|
});
|
|
133
229
|
});
|
|
230
|
+
|
|
231
|
+
it("should default to npm when no package manager is detected", () => {
|
|
232
|
+
// When no packageManager field exists and no lock files are found
|
|
233
|
+
// the function should default to 'npm' instead of returning null
|
|
234
|
+
const defaultPackageManager = "npm";
|
|
235
|
+
expect(defaultPackageManager).toBe("npm");
|
|
236
|
+
});
|
|
134
237
|
});
|
|
135
238
|
|
|
136
239
|
describe("Install Command Generation", () => {
|
|
137
|
-
function getInstallCommand(packageManager, dependencySpecs) {
|
|
240
|
+
function getInstallCommand(packageManager, dependencySpecs, isDev = false) {
|
|
138
241
|
const normalizeCommand = (cmd) => {
|
|
139
242
|
if (process.platform === "win32" && cmd !== "bun") {
|
|
140
243
|
return `${cmd}.cmd`;
|
|
@@ -143,16 +246,17 @@ describe("CLI Command Tests", () => {
|
|
|
143
246
|
};
|
|
144
247
|
|
|
145
248
|
const normalized = normalizeCommand(packageManager);
|
|
249
|
+
const devFlag = isDev ? ["-D"] : [];
|
|
146
250
|
|
|
147
251
|
switch (packageManager) {
|
|
148
252
|
case "npm":
|
|
149
|
-
return { command: normalized, args: ["install", ...dependencySpecs] };
|
|
253
|
+
return { command: normalized, args: ["install", ...devFlag, ...dependencySpecs] };
|
|
150
254
|
case "pnpm":
|
|
151
|
-
return { command: normalized, args: ["add", ...dependencySpecs] };
|
|
255
|
+
return { command: normalized, args: ["add", ...devFlag, ...dependencySpecs] };
|
|
152
256
|
case "yarn":
|
|
153
|
-
return { command: normalized, args: ["add", ...dependencySpecs] };
|
|
257
|
+
return { command: normalized, args: ["add", ...devFlag, ...dependencySpecs] };
|
|
154
258
|
case "bun":
|
|
155
|
-
return { command: normalized, args: ["add", ...dependencySpecs] };
|
|
259
|
+
return { command: normalized, args: ["add", ...devFlag, ...dependencySpecs] };
|
|
156
260
|
default:
|
|
157
261
|
return { command: null, args: [] };
|
|
158
262
|
}
|
|
@@ -163,21 +267,41 @@ describe("CLI Command Tests", () => {
|
|
|
163
267
|
expect(result.args).toEqual(["install", "package-a@1.0.0", "package-b"]);
|
|
164
268
|
});
|
|
165
269
|
|
|
270
|
+
it("should generate correct npm install command for dev dependencies", () => {
|
|
271
|
+
const result = getInstallCommand("npm", ["package-a@1.0.0", "package-b"], true);
|
|
272
|
+
expect(result.args).toEqual(["install", "-D", "package-a@1.0.0", "package-b"]);
|
|
273
|
+
});
|
|
274
|
+
|
|
166
275
|
it("should generate correct pnpm add command", () => {
|
|
167
276
|
const result = getInstallCommand("pnpm", ["package-a@1.0.0"]);
|
|
168
277
|
expect(result.args).toEqual(["add", "package-a@1.0.0"]);
|
|
169
278
|
});
|
|
170
279
|
|
|
280
|
+
it("should generate correct pnpm add command for dev dependencies", () => {
|
|
281
|
+
const result = getInstallCommand("pnpm", ["package-a@1.0.0"], true);
|
|
282
|
+
expect(result.args).toEqual(["add", "-D", "package-a@1.0.0"]);
|
|
283
|
+
});
|
|
284
|
+
|
|
171
285
|
it("should generate correct yarn add command", () => {
|
|
172
286
|
const result = getInstallCommand("yarn", ["package-a"]);
|
|
173
287
|
expect(result.args).toEqual(["add", "package-a"]);
|
|
174
288
|
});
|
|
175
289
|
|
|
290
|
+
it("should generate correct yarn add command for dev dependencies", () => {
|
|
291
|
+
const result = getInstallCommand("yarn", ["package-a"], true);
|
|
292
|
+
expect(result.args).toEqual(["add", "-D", "package-a"]);
|
|
293
|
+
});
|
|
294
|
+
|
|
176
295
|
it("should generate correct bun add command", () => {
|
|
177
296
|
const result = getInstallCommand("bun", ["package-a"]);
|
|
178
297
|
expect(result.args).toEqual(["add", "package-a"]);
|
|
179
298
|
});
|
|
180
299
|
|
|
300
|
+
it("should generate correct bun add command for dev dependencies", () => {
|
|
301
|
+
const result = getInstallCommand("bun", ["package-a"], true);
|
|
302
|
+
expect(result.args).toEqual(["add", "-D", "package-a"]);
|
|
303
|
+
});
|
|
304
|
+
|
|
181
305
|
it("should return null command for unsupported package manager", () => {
|
|
182
306
|
const result = getInstallCommand("unknown", ["package-a"]);
|
|
183
307
|
expect(result.command).toBeNull();
|
package/package.json
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import path from "path"
|
|
2
|
+
import tailwindcss from "@tailwindcss/vite"
|
|
3
|
+
import react from "@vitejs/plugin-react"
|
|
4
|
+
import { defineConfig } from "vite"
|
|
5
|
+
|
|
6
|
+
// https://vite.dev/config/
|
|
7
|
+
export default defineConfig({
|
|
8
|
+
plugins: [react(), tailwindcss()],
|
|
9
|
+
resolve: {
|
|
10
|
+
alias: {
|
|
11
|
+
"@": path.resolve(__dirname, "./src"),
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
})
|
|
File without changes
|