quik-cli 1.0.0 → 1.0.1
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.impl.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/impl/init.impl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.impl.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/impl/init.impl.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AA6D9D,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiIxE"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import enquirer from "enquirer";
|
|
2
|
-
import {
|
|
3
|
-
import { writeFile, mkdir, rm, readFile } from "node:fs/promises";
|
|
2
|
+
import { writeFile, mkdir, rm } from "node:fs/promises";
|
|
4
3
|
import { join } from "node:path";
|
|
5
4
|
import { randomBytes } from "node:crypto";
|
|
6
5
|
import { QuikError, ErrorCode } from "../../../core/QuikError.js";
|
|
@@ -18,8 +17,11 @@ function generateSecretKey() {
|
|
|
18
17
|
}
|
|
19
18
|
/**
|
|
20
19
|
* Fetches a GitHub token from an external API using the user's API key.
|
|
20
|
+
* The external API validates the key and returns a GitHub access token
|
|
21
|
+
* that can be used to install private GitHub packages.
|
|
21
22
|
*/
|
|
22
23
|
async function fetchGitHubToken(apiKey) {
|
|
24
|
+
// TODO: Replace with actual production API endpoint
|
|
23
25
|
let response;
|
|
24
26
|
try {
|
|
25
27
|
response = await fetch("http://localhost:3000/github-token", {
|
|
@@ -37,57 +39,18 @@ async function fetchGitHubToken(apiKey) {
|
|
|
37
39
|
const data = (await response.json());
|
|
38
40
|
return data.token;
|
|
39
41
|
}
|
|
40
|
-
function runNpmInstall(cwd) {
|
|
41
|
-
return new Promise((resolve, reject) => {
|
|
42
|
-
const npmCmd = process.platform === "win32" ? "npm.cmd" : "npm";
|
|
43
|
-
const child = spawn(npmCmd, ["install"], {
|
|
44
|
-
cwd,
|
|
45
|
-
stdio: "inherit",
|
|
46
|
-
shell: process.platform === "win32",
|
|
47
|
-
windowsHide: true,
|
|
48
|
-
});
|
|
49
|
-
child.on("error", (err) => reject(err));
|
|
50
|
-
child.on("close", (code) => {
|
|
51
|
-
if (code === 0)
|
|
52
|
-
resolve();
|
|
53
|
-
else
|
|
54
|
-
reject(new Error(`npm install exited with code ${code}`));
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
42
|
export async function executeInit(context) {
|
|
59
43
|
const useDefaults = Boolean(context.options.yes);
|
|
60
|
-
const
|
|
61
|
-
// Determine if in-place mode (no project name given)
|
|
62
|
-
const inPlace = !projectNameArg;
|
|
63
|
-
// In-place mode requires cwd to already be a project with package.json
|
|
64
|
-
if (inPlace) {
|
|
65
|
-
try {
|
|
66
|
-
await readFile(join(context.cwd, "package.json"), "utf-8");
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
throw new QuikError(ErrorCode.INIT_001, "init", "No package.json found. Run 'quik init <project-name>' to create a new project.");
|
|
70
|
-
}
|
|
71
|
-
}
|
|
44
|
+
const projectName = context.args[0];
|
|
72
45
|
const answers = useDefaults
|
|
73
|
-
? {
|
|
74
|
-
projectName: projectNameArg ?? "my-quik-app",
|
|
75
|
-
tenantSlug: "",
|
|
76
|
-
tenantApiKey: "",
|
|
77
|
-
apiBaseUrl: "",
|
|
78
|
-
framework: "nextjs",
|
|
79
|
-
}
|
|
46
|
+
? { projectName: projectName ?? "my-quik-app", tenantSlug: "", tenantApiKey: "", apiBaseUrl: "", framework: "nextjs" }
|
|
80
47
|
: await prompt([
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
:
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
message: "What is your project name?",
|
|
88
|
-
initial: projectNameArg ?? "my-quik-app",
|
|
89
|
-
},
|
|
90
|
-
]),
|
|
48
|
+
{
|
|
49
|
+
type: "input",
|
|
50
|
+
name: "projectName",
|
|
51
|
+
message: "What is your project name?",
|
|
52
|
+
initial: projectName ?? "my-quik-app",
|
|
53
|
+
},
|
|
91
54
|
{
|
|
92
55
|
type: "input",
|
|
93
56
|
name: "tenantSlug",
|
|
@@ -111,43 +74,34 @@ export async function executeInit(context) {
|
|
|
111
74
|
initial: 0,
|
|
112
75
|
},
|
|
113
76
|
]);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
// Create project folder only for new (non-in-place) projects
|
|
118
|
-
if (!inPlace) {
|
|
119
|
-
await mkdir(projectPath, { recursive: true });
|
|
120
|
-
}
|
|
77
|
+
const projectPath = join(context.cwd, answers.projectName);
|
|
78
|
+
// Create project folder
|
|
79
|
+
await mkdir(projectPath, { recursive: true });
|
|
121
80
|
const minDisplayMs = 1500;
|
|
122
81
|
const startTime = Date.now();
|
|
123
82
|
try {
|
|
124
83
|
loader.start("Creating project files", "creating");
|
|
84
|
+
// Generate secret key for AES-256 encryption
|
|
125
85
|
const secretKey = generateSecretKey();
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
await writeFile(join(projectPath, "package.json"), JSON.stringify(packageJson, null, 2), "utf-8");
|
|
142
|
-
}
|
|
86
|
+
// Create package.json
|
|
87
|
+
const packageJson = {
|
|
88
|
+
name: answers.projectName,
|
|
89
|
+
version: "0.1.0",
|
|
90
|
+
type: "module",
|
|
91
|
+
scripts: {
|
|
92
|
+
dev: "quik dev",
|
|
93
|
+
build: "quik build",
|
|
94
|
+
},
|
|
95
|
+
dependencies: {
|
|
96
|
+
[GITHUB_PACKAGE]: "^1.0.29",
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
await loader.stepFor("Configuring package.json", "creating");
|
|
100
|
+
await writeFile(join(projectPath, "package.json"), JSON.stringify(packageJson, null, 2), "utf-8");
|
|
143
101
|
// Fetch GitHub token and install private package
|
|
144
102
|
await loader.stepFor("Authenticating with GitHub registry", "webrequest");
|
|
145
103
|
const githubToken = await fetchGitHubToken(answers.tenantApiKey);
|
|
146
104
|
await loader.stepFor("Installing quik-engine", "installing", 2000, () => installGitHubPackage("@quikcr/quik-engine", "1.0.29", githubToken, projectPath));
|
|
147
|
-
if (!inPlace) {
|
|
148
|
-
// Run npm install only for new projects (existing projects already have node_modules)
|
|
149
|
-
await loader.stepFor("Installing dependencies", "installing", 2000, () => runNpmInstall(projectPath));
|
|
150
|
-
}
|
|
151
105
|
// Framework-specific scaffolding
|
|
152
106
|
if (answers.framework === "nextjs") {
|
|
153
107
|
await loader.stepFor("Scaffolding Next.js files", "creating");
|
|
@@ -172,29 +126,19 @@ export async function executeInit(context) {
|
|
|
172
126
|
if (elapsed < minDisplayMs) {
|
|
173
127
|
await new Promise((resolve) => setTimeout(resolve, minDisplayMs - elapsed));
|
|
174
128
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
loader.done(`Project ${projectName} initialized successfully!`);
|
|
183
|
-
context.logger.success(`Created ${projectName}/`);
|
|
184
|
-
context.logger.success(`Created ${projectName}/.env`);
|
|
185
|
-
context.logger.success(`Created ${projectName}/.npmrc`);
|
|
186
|
-
context.logger.success(`Created ${projectName}/package.json`);
|
|
187
|
-
context.logger.info(`Framework: ${answers.framework}`);
|
|
188
|
-
}
|
|
129
|
+
loader.done(`Project ${answers.projectName} initialized successfully!`);
|
|
130
|
+
context.logger.success(`Created ${answers.projectName}/`);
|
|
131
|
+
context.logger.success(`Created ${answers.projectName}/.env`);
|
|
132
|
+
context.logger.success(`Created ${answers.projectName}/.npmrc`);
|
|
133
|
+
context.logger.success(`Created ${answers.projectName}/package.json`);
|
|
134
|
+
context.logger.info(`Framework: ${answers.framework}`);
|
|
189
135
|
}
|
|
190
136
|
catch (error) {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
await
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
}
|
|
197
|
-
loader.fail("Failed to initialize project");
|
|
137
|
+
// Rollback: remove the project folder on failure
|
|
138
|
+
await loader.stepFor("Cleaning up...", "deleting", 2000, async () => {
|
|
139
|
+
await rm(projectPath, { recursive: true, force: true });
|
|
140
|
+
});
|
|
141
|
+
loader.fail(`Failed to initialize project`);
|
|
198
142
|
throw error;
|
|
199
143
|
}
|
|
200
144
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.impl.js","sourceRoot":"","sources":["../../../../src/commands/init/impl/init.impl.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"init.impl.js","sourceRoot":"","sources":["../../../../src/commands/init/impl/init.impl.ts"],"names":[],"mappings":"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"}
|