fixdog 0.1.1 → 0.1.2
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/cli/index.js +112 -98
- package/dist/cli/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -18,6 +18,9 @@ const NEXT_SCRIPT_SNIPPET = (projectId) => `{process.env.NODE_ENV === "developme
|
|
|
18
18
|
src="${SCRIPT_URL}?projectId=${projectId}"
|
|
19
19
|
/>
|
|
20
20
|
)}`;
|
|
21
|
+
// ============================================
|
|
22
|
+
// Framework Detection
|
|
23
|
+
// ============================================
|
|
21
24
|
function detectFramework() {
|
|
22
25
|
if (!fs.existsSync("package.json"))
|
|
23
26
|
return null;
|
|
@@ -51,90 +54,72 @@ function detectNextRouter() {
|
|
|
51
54
|
function findFile(paths) {
|
|
52
55
|
return paths.find((p) => fs.existsSync(p)) || null;
|
|
53
56
|
}
|
|
54
|
-
|
|
55
|
-
|
|
57
|
+
// ============================================
|
|
58
|
+
// Vite Injections
|
|
59
|
+
// ============================================
|
|
60
|
+
function injectViteHtml(projectId) {
|
|
61
|
+
const file = findFile(["index.html", "public/index.html"]);
|
|
62
|
+
if (!file)
|
|
63
|
+
return null;
|
|
64
|
+
const before = fs.readFileSync(file, "utf-8");
|
|
65
|
+
if (before.includes("fixdog"))
|
|
66
|
+
return null;
|
|
67
|
+
const after = before.replace("</head>", ` ${VITE_SNIPPET(projectId)}\n </head>`);
|
|
68
|
+
if (after === before)
|
|
69
|
+
return null;
|
|
70
|
+
return { file, before, after };
|
|
71
|
+
}
|
|
72
|
+
function injectViteConfig(projectId) {
|
|
73
|
+
const file = findFile([
|
|
56
74
|
"vite.config.ts",
|
|
57
75
|
"vite.config.js",
|
|
58
76
|
"vite.config.mjs",
|
|
59
77
|
]);
|
|
60
|
-
if (!
|
|
78
|
+
if (!file)
|
|
61
79
|
return null;
|
|
62
|
-
const before = fs.readFileSync(
|
|
80
|
+
const before = fs.readFileSync(file, "utf-8");
|
|
63
81
|
const allowedHost = `${projectId}.fix.dog`;
|
|
64
|
-
//
|
|
82
|
+
// Already has this host
|
|
65
83
|
if (before.includes(allowedHost))
|
|
66
84
|
return null;
|
|
67
85
|
let after = before;
|
|
68
|
-
//
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
// Case 1: allowedHosts array exists - add to it
|
|
87
|
+
if (/allowedHosts:\s*\[/.test(before)) {
|
|
88
|
+
after = before.replace(/allowedHosts:\s*\[([^\]]*)\]/, (_, hosts) => {
|
|
89
|
+
const trimmed = hosts.trim();
|
|
90
|
+
if (trimmed) {
|
|
91
|
+
return `allowedHosts: [${trimmed}, "${allowedHost}"]`;
|
|
92
|
+
}
|
|
93
|
+
return `allowedHosts: ["${allowedHost}"]`;
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// Case 2: server block exists - add allowedHosts to it
|
|
97
|
+
else if (/server:\s*\{/.test(before)) {
|
|
98
|
+
after = before.replace(/server:\s*\{/, `server: {\n allowedHosts: ["${allowedHost}"],`);
|
|
99
|
+
}
|
|
100
|
+
// Case 3: plugins array exists - add server after it
|
|
101
|
+
else if (/plugins:\s*\[/.test(before)) {
|
|
102
|
+
after = before.replace(/(plugins:\s*\[[^\]]*\]),?/, `$1,\n server: {\n allowedHosts: ["${allowedHost}"],\n },`);
|
|
103
|
+
}
|
|
104
|
+
// Case 4: defineConfig exists - add server at the start
|
|
105
|
+
else if (/defineConfig\s*\(\s*\{/.test(before)) {
|
|
106
|
+
after = before.replace(/defineConfig\s*\(\s*\{/, `defineConfig({\n server: {\n allowedHosts: ["${allowedHost}"],\n },`);
|
|
88
107
|
}
|
|
108
|
+
// Case 5: export default { - add server at the start
|
|
109
|
+
else if (/export\s+default\s*\{/.test(before)) {
|
|
110
|
+
after = before.replace(/export\s+default\s*\{/, `export default {\n server: {\n allowedHosts: ["${allowedHost}"],\n },`);
|
|
111
|
+
}
|
|
112
|
+
// Can't parse - skip
|
|
89
113
|
else {
|
|
90
|
-
|
|
91
|
-
// Try to find server: { ... } block
|
|
92
|
-
const serverBlockRegex = /server:\s*\{([^}]*)\}/;
|
|
93
|
-
const serverMatch = before.match(serverBlockRegex);
|
|
94
|
-
if (serverMatch) {
|
|
95
|
-
// server exists, add allowedHosts to it
|
|
96
|
-
const serverContent = serverMatch[1];
|
|
97
|
-
const trimmed = serverContent.trim();
|
|
98
|
-
const needsComma = trimmed && !trimmed.endsWith(",");
|
|
99
|
-
after = before.replace(serverBlockRegex, `server: {${trimmed}${needsComma ? "," : ""}\n allowedHosts: ["${allowedHost}"],\n }`);
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
// No server config, add it
|
|
103
|
-
// Try to find plugins array and add server after it
|
|
104
|
-
const pluginsRegex = /(plugins:\s*\[[^\]]*\],?)/;
|
|
105
|
-
const pluginsMatch = before.match(pluginsRegex);
|
|
106
|
-
if (pluginsMatch) {
|
|
107
|
-
after = before.replace(pluginsMatch[0], `${pluginsMatch[0]}\n server: {\n allowedHosts: ["${allowedHost}"],\n },`);
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
// Fallback: add server config before closing brace of defineConfig
|
|
111
|
-
// Find the last property before the closing brace
|
|
112
|
-
const lastPropertyRegex = /(\w+:\s*[^,}]+),?\s*(\n\s*\}\);?|\n\s*\})/;
|
|
113
|
-
const lastMatch = before.match(lastPropertyRegex);
|
|
114
|
-
if (lastMatch) {
|
|
115
|
-
after = before.replace(lastMatch[0], `${lastMatch[1]},\n server: {\n allowedHosts: ["${allowedHost}"],\n }${lastMatch[2]}`);
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
// Last resort: add before the closing brace
|
|
119
|
-
after = before.replace(/(\}\s*\);?)$/, ` server: {\n allowedHosts: ["${allowedHost}"],\n },\n$1`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
114
|
+
return null;
|
|
123
115
|
}
|
|
124
116
|
if (after === before)
|
|
125
117
|
return null;
|
|
126
|
-
return { file: configFile, before, after };
|
|
127
|
-
}
|
|
128
|
-
function injectVite(projectId) {
|
|
129
|
-
const file = findFile(["index.html", "public/index.html"]);
|
|
130
|
-
if (!file)
|
|
131
|
-
return null;
|
|
132
|
-
const before = fs.readFileSync(file, "utf-8");
|
|
133
|
-
if (before.includes("fixdog"))
|
|
134
|
-
return null;
|
|
135
|
-
const after = before.replace("</head>", ` ${VITE_SNIPPET(projectId)}\n </head>`);
|
|
136
118
|
return { file, before, after };
|
|
137
119
|
}
|
|
120
|
+
// ============================================
|
|
121
|
+
// Next.js Injections
|
|
122
|
+
// ============================================
|
|
138
123
|
function injectNextApp(projectId) {
|
|
139
124
|
const file = findFile([
|
|
140
125
|
"app/layout.tsx",
|
|
@@ -148,12 +133,24 @@ function injectNextApp(projectId) {
|
|
|
148
133
|
if (before.includes("fixdog"))
|
|
149
134
|
return null;
|
|
150
135
|
let after = before;
|
|
151
|
-
|
|
152
|
-
|
|
136
|
+
// Case 1: <head> exists - inject inside it
|
|
137
|
+
if (/<head[^>]*>/.test(before)) {
|
|
138
|
+
after = before.replace(/<head([^>]*)>/, `<head$1>\n ${NEXT_SCRIPT_SNIPPET(projectId)}`);
|
|
153
139
|
}
|
|
154
|
-
|
|
140
|
+
// Case 2: <Head> (capital) exists - inject inside it
|
|
141
|
+
else if (/<Head[^>]*>/.test(before)) {
|
|
142
|
+
after = before.replace(/<Head([^>]*)>/, `<Head$1>\n ${NEXT_SCRIPT_SNIPPET(projectId)}`);
|
|
143
|
+
}
|
|
144
|
+
// Case 3: No head - add after <html>
|
|
145
|
+
else if (/<html[^>]*>/.test(before)) {
|
|
155
146
|
after = before.replace(/<html([^>]*)>/, `<html$1>\n <head>\n ${NEXT_SCRIPT_SNIPPET(projectId)}\n </head>`);
|
|
156
147
|
}
|
|
148
|
+
// Can't find injection point
|
|
149
|
+
else {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
if (after === before)
|
|
153
|
+
return null;
|
|
157
154
|
return { file, before, after };
|
|
158
155
|
}
|
|
159
156
|
function injectNextPages(projectId) {
|
|
@@ -168,16 +165,31 @@ function injectNextPages(projectId) {
|
|
|
168
165
|
const before = fs.readFileSync(file, "utf-8");
|
|
169
166
|
if (before.includes("fixdog"))
|
|
170
167
|
return null;
|
|
171
|
-
|
|
168
|
+
let after = before;
|
|
169
|
+
// Case 1: <Head> exists - inject inside it
|
|
170
|
+
if (/<Head[^>]*>/.test(before)) {
|
|
171
|
+
after = before.replace(/<Head([^>]*)>/, `<Head$1>\n ${NEXT_SCRIPT_SNIPPET(projectId)}`);
|
|
172
|
+
}
|
|
173
|
+
// Can't find injection point
|
|
174
|
+
else {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
if (after === before)
|
|
178
|
+
return null;
|
|
172
179
|
return { file, before, after };
|
|
173
180
|
}
|
|
181
|
+
// ============================================
|
|
182
|
+
// Diff Display
|
|
183
|
+
// ============================================
|
|
174
184
|
function showDiff(before, after) {
|
|
175
185
|
const changes = diffLines(before, after);
|
|
176
186
|
changes.forEach((part) => {
|
|
177
|
-
if (part.added)
|
|
187
|
+
if (part.added) {
|
|
178
188
|
process.stdout.write(color.green(`+ ${part.value}`));
|
|
179
|
-
|
|
189
|
+
}
|
|
190
|
+
else if (part.removed) {
|
|
180
191
|
process.stdout.write(color.red(`- ${part.value}`));
|
|
192
|
+
}
|
|
181
193
|
});
|
|
182
194
|
}
|
|
183
195
|
function parseArgs() {
|
|
@@ -188,36 +200,39 @@ function parseArgs() {
|
|
|
188
200
|
if (arg === "--projectId" || arg === "--project-id" || arg === "-p") {
|
|
189
201
|
options.projectId = args[++i];
|
|
190
202
|
}
|
|
203
|
+
else if (arg.startsWith("--projectId=") ||
|
|
204
|
+
arg.startsWith("--project-id=")) {
|
|
205
|
+
options.projectId = arg.split("=")[1];
|
|
206
|
+
}
|
|
191
207
|
else if (arg === "--yes" || arg === "-y") {
|
|
192
208
|
options.yes = true;
|
|
193
209
|
}
|
|
194
210
|
else if (arg === "--silent" || arg === "-s") {
|
|
195
211
|
options.silent = true;
|
|
196
212
|
}
|
|
197
|
-
else if (arg.startsWith("--projectId=") ||
|
|
198
|
-
arg.startsWith("--project-id=")) {
|
|
199
|
-
options.projectId = arg.split("=")[1];
|
|
200
|
-
}
|
|
201
213
|
}
|
|
202
214
|
return options;
|
|
203
215
|
}
|
|
204
216
|
async function main(options) {
|
|
205
217
|
const cliOptions = options || parseArgs();
|
|
206
|
-
|
|
218
|
+
const log = !cliOptions.silent;
|
|
219
|
+
if (log) {
|
|
207
220
|
intro(color.bgCyan(color.black(" 🐕 Fixdog Setup ")));
|
|
208
221
|
}
|
|
222
|
+
// Detect framework
|
|
209
223
|
const s = spinner();
|
|
210
224
|
s.start("Detecting framework");
|
|
211
225
|
const framework = detectFramework();
|
|
212
226
|
if (!framework) {
|
|
213
227
|
s.stop("Not detected");
|
|
214
|
-
if (
|
|
228
|
+
if (log) {
|
|
215
229
|
outro(color.red("Could not detect framework. Supported: Next.js, Vite"));
|
|
216
230
|
}
|
|
217
231
|
process.exit(1);
|
|
218
232
|
}
|
|
219
233
|
const router = framework === "next" ? detectNextRouter() : null;
|
|
220
234
|
s.stop(`Found ${framework === "next" ? "Next.js" : "Vite"}${router ? ` (${router} router)` : ""}`);
|
|
235
|
+
// Get project ID
|
|
221
236
|
let projectId;
|
|
222
237
|
if (cliOptions.projectId) {
|
|
223
238
|
projectId = cliOptions.projectId;
|
|
@@ -229,45 +244,45 @@ async function main(options) {
|
|
|
229
244
|
validate: (v) => (!v ? "Required" : undefined),
|
|
230
245
|
});
|
|
231
246
|
if (typeof input !== "string") {
|
|
232
|
-
if (
|
|
247
|
+
if (log)
|
|
233
248
|
outro(color.red("Cancelled"));
|
|
234
|
-
}
|
|
235
249
|
process.exit(1);
|
|
236
250
|
}
|
|
237
251
|
projectId = input;
|
|
238
252
|
}
|
|
239
|
-
|
|
253
|
+
// Collect all injections
|
|
254
|
+
const results = [];
|
|
240
255
|
if (framework === "vite") {
|
|
241
|
-
const htmlResult =
|
|
256
|
+
const htmlResult = injectViteHtml(projectId);
|
|
242
257
|
if (htmlResult)
|
|
243
258
|
results.push(htmlResult);
|
|
244
|
-
const configResult =
|
|
259
|
+
const configResult = injectViteConfig(projectId);
|
|
245
260
|
if (configResult)
|
|
246
261
|
results.push(configResult);
|
|
247
262
|
}
|
|
248
|
-
else {
|
|
263
|
+
else if (framework === "next") {
|
|
249
264
|
const result = router === "app" ? injectNextApp(projectId) : injectNextPages(projectId);
|
|
250
265
|
if (result)
|
|
251
266
|
results.push(result);
|
|
252
267
|
}
|
|
268
|
+
// No changes to make
|
|
253
269
|
if (results.length === 0) {
|
|
254
|
-
if (
|
|
255
|
-
outro(color.yellow("Already installed or target
|
|
270
|
+
if (log) {
|
|
271
|
+
outro(color.yellow("Already installed or target files not found"));
|
|
256
272
|
}
|
|
257
273
|
process.exit(0);
|
|
258
274
|
}
|
|
259
|
-
|
|
275
|
+
// Show diffs
|
|
276
|
+
if (log) {
|
|
260
277
|
for (const result of results) {
|
|
261
278
|
console.log(color.dim(`\nChanges to ${result.file}:\n`));
|
|
262
279
|
showDiff(result.before, result.after);
|
|
263
280
|
console.log();
|
|
264
281
|
}
|
|
265
282
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
283
|
+
// Confirm and apply
|
|
284
|
+
let apply = cliOptions.yes || cliOptions.silent;
|
|
285
|
+
if (!apply && log) {
|
|
271
286
|
const confirmed = await confirm({ message: "Apply changes?" });
|
|
272
287
|
apply = confirmed === true;
|
|
273
288
|
}
|
|
@@ -275,14 +290,13 @@ async function main(options) {
|
|
|
275
290
|
for (const result of results) {
|
|
276
291
|
fs.writeFileSync(result.file, result.after);
|
|
277
292
|
}
|
|
278
|
-
if (
|
|
279
|
-
outro(color.green("
|
|
293
|
+
if (log) {
|
|
294
|
+
outro(color.green("Done! Run your dev server."));
|
|
280
295
|
}
|
|
281
296
|
}
|
|
282
297
|
else {
|
|
283
|
-
if (
|
|
298
|
+
if (log)
|
|
284
299
|
outro(color.yellow("Cancelled"));
|
|
285
|
-
}
|
|
286
300
|
process.exit(1);
|
|
287
301
|
}
|
|
288
302
|
}
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/cli/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAKA,MAAM,UAAU,GAAG,6CAA6C;AAEhE,MAAM,YAAY,GAAG,CAAC,SAAiB,KACrC,CAAA;;;;AAIW,WAAA,EAAA,UAAU,cAAc,SAAS,CAAA;;;cAGhC;AAEd,MAAM,mBAAmB,GAAG,CAAC,SAAiB,KAC5C,CAAA;;;AAGiB,iBAAA,EAAA,UAAU,cAAc,SAAS,CAAA;;WAEzC;AAEX,SAAS,eAAe,GAAA;AACtB,IAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;AAAE,QAAA,OAAO,IAAI;AAC/C,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAChE,IAAA,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE;IAC5D,IAAI,IAAI,CAAC,MAAM,CAAC;AAAE,QAAA,OAAO,MAAM;IAC/B,IAAI,IAAI,CAAC,MAAM,CAAC;AAAE,QAAA,OAAO,MAAM;AAC/B,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,gBAAgB,GAAA;AACvB,IAAA,MAAM,QAAQ,GAAG;QACf,gBAAgB;QAChB,eAAe;QACf,oBAAoB;QACpB,mBAAmB;KACpB;AACD,IAAA,MAAM,UAAU,GAAG;QACjB,qBAAqB;QACrB,oBAAoB;QACpB,yBAAyB;QACzB,wBAAwB;KACzB;AACD,IAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,KAAK;AACxD,IAAA,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,OAAO;AAC5D,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,QAAQ,CAAC,KAAe,EAAA;AAC/B,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;AACpD;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/cli/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|