create-weave-backend-app 0.2.0 → 0.3.0
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/create-app-Cl7oNIU_.js +326 -0
- package/dist/create-app-Cl7oNIU_.js.map +1 -0
- package/dist/create-app.d.ts +14 -7
- package/dist/create-app.d.ts.map +1 -0
- package/dist/create-app.js +3 -6
- package/dist/index.d.ts +1 -1
- package/dist/index.js +74 -113
- package/dist/index.js.map +1 -0
- package/package.json +5 -5
- package/template/package.json +0 -8
- package/dist/chunk-5NMEWJSO.js +0 -366
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import path, { join } from "node:path";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import { execSync } from "node:child_process";
|
|
4
|
+
import { rmSync } from "node:fs";
|
|
5
|
+
import { spawn } from "cross-spawn";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
|
|
8
|
+
//#region src/git.ts
|
|
9
|
+
function isInGitRepository(cwd$1) {
|
|
10
|
+
try {
|
|
11
|
+
execSync("git rev-parse --is-inside-work-tree", {
|
|
12
|
+
stdio: "ignore",
|
|
13
|
+
cwd: cwd$1
|
|
14
|
+
});
|
|
15
|
+
return true;
|
|
16
|
+
} catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function isInMercurialRepository(cwd$1) {
|
|
21
|
+
try {
|
|
22
|
+
execSync("hg --cwd . root", {
|
|
23
|
+
stdio: "ignore",
|
|
24
|
+
cwd: cwd$1
|
|
25
|
+
});
|
|
26
|
+
return true;
|
|
27
|
+
} catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function isDefaultBranchSet(cwd$1) {
|
|
32
|
+
try {
|
|
33
|
+
execSync("git config init.defaultBranch", {
|
|
34
|
+
stdio: "ignore",
|
|
35
|
+
cwd: cwd$1
|
|
36
|
+
});
|
|
37
|
+
return true;
|
|
38
|
+
} catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function tryGitInit(root) {
|
|
43
|
+
let didInit = false;
|
|
44
|
+
try {
|
|
45
|
+
execSync("git --version", { stdio: "ignore" });
|
|
46
|
+
if (isInGitRepository(root) || isInMercurialRepository(root)) return false;
|
|
47
|
+
execSync("git init", {
|
|
48
|
+
stdio: "ignore",
|
|
49
|
+
cwd: root
|
|
50
|
+
});
|
|
51
|
+
didInit = true;
|
|
52
|
+
if (!isDefaultBranchSet(root)) execSync("git checkout -b main", {
|
|
53
|
+
stdio: "ignore",
|
|
54
|
+
cwd: root
|
|
55
|
+
});
|
|
56
|
+
execSync("git add -A", {
|
|
57
|
+
stdio: "ignore",
|
|
58
|
+
cwd: root
|
|
59
|
+
});
|
|
60
|
+
execSync("git commit -m \"Initial commit from Create Fumadocs App\"", {
|
|
61
|
+
stdio: "ignore",
|
|
62
|
+
cwd: root
|
|
63
|
+
});
|
|
64
|
+
return true;
|
|
65
|
+
} catch {
|
|
66
|
+
if (didInit) try {
|
|
67
|
+
rmSync(join(root, ".git"), {
|
|
68
|
+
recursive: true,
|
|
69
|
+
force: true
|
|
70
|
+
});
|
|
71
|
+
} catch {}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
//#endregion
|
|
77
|
+
//#region src/versions.js
|
|
78
|
+
const versions = {
|
|
79
|
+
"@inditextech/weave-types": "0.3.0",
|
|
80
|
+
"@inditextech/weave-sdk": "0.3.0",
|
|
81
|
+
"@inditextech/weave-store-websockets": "0.3.0",
|
|
82
|
+
"@inditextech/weave-store-azure-web-pubsub": "0.3.0",
|
|
83
|
+
"@inditextech/weave-react": "0.3.0"
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
//#endregion
|
|
87
|
+
//#region template/package.json
|
|
88
|
+
var name = "example-versions";
|
|
89
|
+
var version = "0.0.0";
|
|
90
|
+
var private$1 = true;
|
|
91
|
+
var description = "Used to track dependency versions in create-*-app";
|
|
92
|
+
var license = "MIT";
|
|
93
|
+
var dependencies = {
|
|
94
|
+
"@azure/storage-blob": "^12.26.0",
|
|
95
|
+
"@imgly/background-removal-node": "^1.4.5",
|
|
96
|
+
"@inditextech/weave-sdk": "0.0.0",
|
|
97
|
+
"@inditextech/weave-store-websockets": "0.0.0",
|
|
98
|
+
"@inditextech/weave-store-azure-web-pubsub": "0.0.0",
|
|
99
|
+
"cors": "^2.8.5",
|
|
100
|
+
"dotenv": "^16.4.7",
|
|
101
|
+
"express": "^4.21.2",
|
|
102
|
+
"helmet": "^8.0.0",
|
|
103
|
+
"morgan": "^1.10.0",
|
|
104
|
+
"multer": "^1.4.5-lts.1",
|
|
105
|
+
"pino": "^9.6.0",
|
|
106
|
+
"pino-http": "^10.4.0",
|
|
107
|
+
"pino-pretty": "^13.0.0",
|
|
108
|
+
"ts-node": "^10.9.2",
|
|
109
|
+
"uuid": "^11.1.0",
|
|
110
|
+
"zod": "^3.24.2"
|
|
111
|
+
};
|
|
112
|
+
var devDependencies = {
|
|
113
|
+
"@eslint/js": "^9.21.0",
|
|
114
|
+
"@types/cors": "^2.8.17",
|
|
115
|
+
"@types/express": "^5.0.0",
|
|
116
|
+
"@types/helmet": "^4.0.0",
|
|
117
|
+
"@types/morgan": "^1.9.9",
|
|
118
|
+
"@types/multer": "^1.4.12",
|
|
119
|
+
"@types/node": "^22.13.5",
|
|
120
|
+
"@typescript-eslint/eslint-plugin": "^8.25.0",
|
|
121
|
+
"@typescript-eslint/parser": "^8.25.0",
|
|
122
|
+
"commitlint": "^19.7.1",
|
|
123
|
+
"eslint": "^9.21.0",
|
|
124
|
+
"globals": "^16.0.0",
|
|
125
|
+
"nodemon": "^3.1.9",
|
|
126
|
+
"prettier": "^3.5.2",
|
|
127
|
+
"prettier-eslint": "^16.3.0",
|
|
128
|
+
"tsconfig-paths": "^4.2.0",
|
|
129
|
+
"tsx": "^4.19.3",
|
|
130
|
+
"typescript": "^5.7.3",
|
|
131
|
+
"typescript-eslint": "^8.25.0"
|
|
132
|
+
};
|
|
133
|
+
var package_default = {
|
|
134
|
+
name,
|
|
135
|
+
version,
|
|
136
|
+
private: private$1,
|
|
137
|
+
description,
|
|
138
|
+
license,
|
|
139
|
+
dependencies,
|
|
140
|
+
devDependencies
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
//#endregion
|
|
144
|
+
//#region src/auto-install.ts
|
|
145
|
+
function getPackageManager() {
|
|
146
|
+
const userAgent = process.env.npm_config_user_agent ?? "";
|
|
147
|
+
if (userAgent.startsWith("yarn")) return "yarn";
|
|
148
|
+
if (userAgent.startsWith("pnpm")) return "pnpm";
|
|
149
|
+
if (userAgent.startsWith("bun")) return "bun";
|
|
150
|
+
return "npm";
|
|
151
|
+
}
|
|
152
|
+
function autoInstall(manager, dest) {
|
|
153
|
+
return new Promise((res, reject) => {
|
|
154
|
+
const installProcess = spawn(manager, ["install"], {
|
|
155
|
+
stdio: "ignore",
|
|
156
|
+
env: {
|
|
157
|
+
...process.env,
|
|
158
|
+
NODE_ENV: "development",
|
|
159
|
+
DISABLE_OPENCOLLECTIVE: "1"
|
|
160
|
+
},
|
|
161
|
+
cwd: dest
|
|
162
|
+
});
|
|
163
|
+
installProcess.on("close", (code) => {
|
|
164
|
+
if (code !== 0) reject(new Error("Install failed"));
|
|
165
|
+
else res();
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
//#endregion
|
|
171
|
+
//#region src/constants.ts
|
|
172
|
+
const sourceDir = fileURLToPath(new URL(`../`, import.meta.url).href);
|
|
173
|
+
const cwd = process.cwd();
|
|
174
|
+
|
|
175
|
+
//#endregion
|
|
176
|
+
//#region src/create-app.ts
|
|
177
|
+
async function create(options) {
|
|
178
|
+
const { installDeps = true, initializeGit = true, log = console.log } = options;
|
|
179
|
+
const projectName = path.basename(options.outputDir);
|
|
180
|
+
const dest = path.resolve(cwd, options.outputDir);
|
|
181
|
+
function defaultRename(file) {
|
|
182
|
+
file = file.replace("example.gitignore", ".gitignore");
|
|
183
|
+
file = file.replace("example.env", ".env");
|
|
184
|
+
return file;
|
|
185
|
+
}
|
|
186
|
+
await copy(path.join(sourceDir, `template/${options.template}`), dest, defaultRename);
|
|
187
|
+
const tsconfigPath = path.join(dest, "tsconfig.json");
|
|
188
|
+
const content = (await fs.readFile(tsconfigPath)).toString();
|
|
189
|
+
const config = JSON.parse(content);
|
|
190
|
+
if (config.compilerOptions?.paths) Object.assign(config.compilerOptions.paths, { "@/*": ["./src/*"] });
|
|
191
|
+
await fs.writeFile(tsconfigPath, JSON.stringify(config, null, 2));
|
|
192
|
+
const packageJson = createPackageJson(projectName, options);
|
|
193
|
+
await fs.writeFile(path.join(dest, "package.json"), JSON.stringify(packageJson, null, 2));
|
|
194
|
+
const readMe = await getReadme(dest, projectName);
|
|
195
|
+
await fs.writeFile(path.join(dest, "README.md"), readMe);
|
|
196
|
+
if (installDeps) {
|
|
197
|
+
await autoInstall(options.packageManager, dest);
|
|
198
|
+
log("Installed dependencies");
|
|
199
|
+
}
|
|
200
|
+
if (initializeGit && tryGitInit(dest)) log("Initialized Git repository");
|
|
201
|
+
}
|
|
202
|
+
async function getReadme(dest, projectName) {
|
|
203
|
+
const template = await fs.readFile(path.join(dest, "README.md")).then((res) => res.toString());
|
|
204
|
+
return `# ${projectName}\n\n${template}`;
|
|
205
|
+
}
|
|
206
|
+
async function copy(from, to, rename = (s) => s) {
|
|
207
|
+
const stats = await fs.stat(from);
|
|
208
|
+
if (stats.isDirectory()) {
|
|
209
|
+
const files = await fs.readdir(from);
|
|
210
|
+
await Promise.all(files.map((file) => copy(path.join(from, file), rename(path.join(to, file)))));
|
|
211
|
+
} else {
|
|
212
|
+
await fs.mkdir(path.dirname(to), { recursive: true });
|
|
213
|
+
await fs.copyFile(from, to);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
function createPackageJson(projectName, options) {
|
|
217
|
+
if (options.template === "+express+azure-web-pubsub") return {
|
|
218
|
+
name: projectName,
|
|
219
|
+
type: "module",
|
|
220
|
+
scripts: {
|
|
221
|
+
build: "tsc && mkdir -p ./dist/public && mkdir -p ./dist/temp && cp -r ./public ./dist",
|
|
222
|
+
copyAssets: "mkdir -p ./public && cp -r node_modules/@imgly/background-removal-node/dist/. public",
|
|
223
|
+
dev: "nodemon --exec \"tsx --env-file=.env src/server.ts\"",
|
|
224
|
+
postinstall: "npm run copyAssets",
|
|
225
|
+
start: "node --experimental-specifier-resolution=node --env-file=.env --loader ts-node/esm dist/server.js"
|
|
226
|
+
},
|
|
227
|
+
private: true,
|
|
228
|
+
dependencies: {
|
|
229
|
+
...pick(versions, ["@inditextech/weave-sdk", "@inditextech/weave-store-azure-web-pubsub"]),
|
|
230
|
+
...pick(package_default.dependencies, [
|
|
231
|
+
"@imgly/background-removal-node",
|
|
232
|
+
"cors",
|
|
233
|
+
"dotenv",
|
|
234
|
+
"express",
|
|
235
|
+
"helmet",
|
|
236
|
+
"morgan",
|
|
237
|
+
"multer",
|
|
238
|
+
"pino",
|
|
239
|
+
"pino-http",
|
|
240
|
+
"pino-pretty",
|
|
241
|
+
"ts-node",
|
|
242
|
+
"uuid",
|
|
243
|
+
"zod"
|
|
244
|
+
])
|
|
245
|
+
},
|
|
246
|
+
devDependencies: pick(package_default.devDependencies, [
|
|
247
|
+
"@eslint/js",
|
|
248
|
+
"@types/cors",
|
|
249
|
+
"@types/express",
|
|
250
|
+
"@types/helmet",
|
|
251
|
+
"@types/morgan",
|
|
252
|
+
"@types/multer",
|
|
253
|
+
"@types/node",
|
|
254
|
+
"@typescript-eslint/eslint-plugin",
|
|
255
|
+
"@typescript-eslint/parser",
|
|
256
|
+
"eslint",
|
|
257
|
+
"globals",
|
|
258
|
+
"nodemon",
|
|
259
|
+
"prettier",
|
|
260
|
+
"prettier-eslint",
|
|
261
|
+
"tsconfig-paths",
|
|
262
|
+
"tsx",
|
|
263
|
+
"typescript",
|
|
264
|
+
"typescript-eslint"
|
|
265
|
+
])
|
|
266
|
+
};
|
|
267
|
+
return {
|
|
268
|
+
name: projectName,
|
|
269
|
+
version: "0.0.0",
|
|
270
|
+
private: true,
|
|
271
|
+
scripts: {
|
|
272
|
+
build: "tsc && mkdir -p ./dist/public && mkdir -p ./dist/temp && cp -r ./public ./dist",
|
|
273
|
+
copyAssets: "mkdir -p ./public && cp -r node_modules/@imgly/background-removal-node/dist/. public",
|
|
274
|
+
dev: "nodemon --exec \"tsx --env-file=.env src/server.ts\"",
|
|
275
|
+
postinstall: "npm run copyAssets",
|
|
276
|
+
start: "node --experimental-specifier-resolution=node --env-file=.env --loader ts-node/esm dist/server.js"
|
|
277
|
+
},
|
|
278
|
+
dependencies: {
|
|
279
|
+
...pick(package_default.dependencies, [
|
|
280
|
+
"@imgly/background-removal-node",
|
|
281
|
+
"cors",
|
|
282
|
+
"dotenv",
|
|
283
|
+
"express",
|
|
284
|
+
"helmet",
|
|
285
|
+
"morgan",
|
|
286
|
+
"multer",
|
|
287
|
+
"pino",
|
|
288
|
+
"pino-http",
|
|
289
|
+
"pino-pretty",
|
|
290
|
+
"ts-node",
|
|
291
|
+
"uuid",
|
|
292
|
+
"zod"
|
|
293
|
+
]),
|
|
294
|
+
...pick(versions, ["@inditextech/weave-sdk", "@inditextech/weave-store-websockets"])
|
|
295
|
+
},
|
|
296
|
+
devDependencies: { ...pick(package_default.devDependencies, [
|
|
297
|
+
"@eslint/js",
|
|
298
|
+
"@types/cors",
|
|
299
|
+
"@types/express",
|
|
300
|
+
"@types/helmet",
|
|
301
|
+
"@types/morgan",
|
|
302
|
+
"@types/multer",
|
|
303
|
+
"@types/node",
|
|
304
|
+
"@typescript-eslint/eslint-plugin",
|
|
305
|
+
"@typescript-eslint/parser",
|
|
306
|
+
"eslint",
|
|
307
|
+
"globals",
|
|
308
|
+
"nodemon",
|
|
309
|
+
"prettier",
|
|
310
|
+
"prettier-eslint",
|
|
311
|
+
"tsconfig-paths",
|
|
312
|
+
"tsx",
|
|
313
|
+
"typescript",
|
|
314
|
+
"typescript-eslint"
|
|
315
|
+
]) }
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
function pick(obj, keys) {
|
|
319
|
+
const result = {};
|
|
320
|
+
for (const key of keys) if (key in obj) result[key] = obj[key];
|
|
321
|
+
return result;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
//#endregion
|
|
325
|
+
export { create, cwd, getPackageManager };
|
|
326
|
+
//# sourceMappingURL=create-app-Cl7oNIU_.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-app-Cl7oNIU_.js","names":["cwd: string","root: string","manager: PackageManager","dest: string","options: Options","file: string","dest: string","projectName: string","from: string","to: string","rename: (s: string) => string","obj: T","keys: K[]","result: Partial<T>"],"sources":["../src/git.ts","../src/versions.js","../template/package.json","../src/auto-install.ts","../src/constants.ts","../src/create-app.ts"],"sourcesContent":["import { execSync } from 'node:child_process';\nimport { rmSync } from 'node:fs';\nimport { join } from 'node:path';\n\n/*\nInitialize a Git repo on the project.\n\nBased on https://github.com/vercel/next.js/blob/canary/packages/create-next-app/helpers/git.ts\n*/\n\nfunction isInGitRepository(cwd: string): boolean {\n try {\n execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore', cwd });\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isInMercurialRepository(cwd: string): boolean {\n try {\n execSync('hg --cwd . root', { stdio: 'ignore', cwd });\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isDefaultBranchSet(cwd: string): boolean {\n try {\n execSync('git config init.defaultBranch', { stdio: 'ignore', cwd });\n return true;\n } catch {\n return false;\n }\n}\n\nexport function tryGitInit(root: string): boolean {\n let didInit = false;\n\n try {\n execSync('git --version', { stdio: 'ignore' });\n if (isInGitRepository(root) || isInMercurialRepository(root)) {\n return false;\n }\n\n execSync('git init', { stdio: 'ignore', cwd: root });\n didInit = true;\n\n if (!isDefaultBranchSet(root)) {\n execSync('git checkout -b main', { stdio: 'ignore', cwd: root });\n }\n\n execSync('git add -A', { stdio: 'ignore', cwd: root });\n execSync('git commit -m \"Initial commit from Create Fumadocs App\"', {\n stdio: 'ignore',\n cwd: root,\n });\n return true;\n } catch {\n if (didInit) {\n try {\n rmSync(join(root, '.git'), { recursive: true, force: true });\n } catch {\n // do nothing\n }\n }\n\n return false;\n }\n}\n","export const versions = {\"@inditextech/weave-types\":\"0.3.0\",\"@inditextech/weave-sdk\":\"0.3.0\",\"@inditextech/weave-store-websockets\":\"0.3.0\",\"@inditextech/weave-store-azure-web-pubsub\":\"0.3.0\",\"@inditextech/weave-react\":\"0.3.0\"}","{\n \"name\": \"example-versions\",\n \"version\": \"0.0.0\",\n \"private\": true,\n \"description\": \"Used to track dependency versions in create-*-app\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@azure/storage-blob\": \"^12.26.0\",\n \"@imgly/background-removal-node\": \"^1.4.5\",\n \"@inditextech/weave-sdk\": \"0.0.0\",\n \"@inditextech/weave-store-websockets\": \"0.0.0\",\n \"@inditextech/weave-store-azure-web-pubsub\": \"0.0.0\",\n \"cors\": \"^2.8.5\",\n \"dotenv\": \"^16.4.7\",\n \"express\": \"^4.21.2\",\n \"helmet\": \"^8.0.0\",\n \"morgan\": \"^1.10.0\",\n \"multer\": \"^1.4.5-lts.1\",\n \"pino\": \"^9.6.0\",\n \"pino-http\": \"^10.4.0\",\n \"pino-pretty\": \"^13.0.0\",\n \"ts-node\": \"^10.9.2\",\n \"uuid\": \"^11.1.0\",\n \"zod\": \"^3.24.2\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.21.0\",\n \"@types/cors\": \"^2.8.17\",\n \"@types/express\": \"^5.0.0\",\n \"@types/helmet\": \"^4.0.0\",\n \"@types/morgan\": \"^1.9.9\",\n \"@types/multer\": \"^1.4.12\",\n \"@types/node\": \"^22.13.5\",\n \"@typescript-eslint/eslint-plugin\": \"^8.25.0\",\n \"@typescript-eslint/parser\": \"^8.25.0\",\n \"commitlint\": \"^19.7.1\",\n \"eslint\": \"^9.21.0\",\n \"globals\": \"^16.0.0\",\n \"nodemon\": \"^3.1.9\",\n \"prettier\": \"^3.5.2\",\n \"prettier-eslint\": \"^16.3.0\",\n \"tsconfig-paths\": \"^4.2.0\",\n \"tsx\": \"^4.19.3\",\n \"typescript\": \"^5.7.3\",\n \"typescript-eslint\": \"^8.25.0\"\n }\n}\n","import { spawn } from 'cross-spawn';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nexport function getPackageManager(): PackageManager {\n const userAgent = process.env.npm_config_user_agent ?? '';\n\n if (userAgent.startsWith('yarn')) {\n return 'yarn';\n }\n\n if (userAgent.startsWith('pnpm')) {\n return 'pnpm';\n }\n\n if (userAgent.startsWith('bun')) {\n return 'bun';\n }\n\n return 'npm';\n}\n\nexport function autoInstall(\n manager: PackageManager,\n dest: string,\n): Promise<void> {\n return new Promise((res, reject) => {\n const installProcess = spawn(manager, ['install'], {\n stdio: 'ignore',\n env: {\n ...process.env,\n NODE_ENV: 'development',\n DISABLE_OPENCOLLECTIVE: '1',\n },\n cwd: dest,\n });\n\n installProcess.on('close', (code) => {\n if (code !== 0) {\n reject(new Error('Install failed'));\n } else {\n res();\n }\n });\n });\n}\n","import { fileURLToPath } from 'node:url';\n\nexport const sourceDir = fileURLToPath(new URL(`../`, import.meta.url).href);\nexport const cwd = process.cwd();\n","import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { tryGitInit } from '@/git';\nimport { versions as localVersions } from '@/versions';\nimport versionPkg from './../template/package.json';\nimport type { PackageManager } from './auto-install';\nimport { autoInstall } from './auto-install';\nimport { cwd, sourceDir } from './constants';\n\nexport type Template = '+express+websockets' | '+express+azure-web-pubsub';\n\nexport interface Options {\n outputDir: string;\n template: Template;\n packageManager: PackageManager;\n installDeps?: boolean;\n initializeGit?: boolean;\n log?: (message: string) => void;\n}\n\nexport async function create(options: Options): Promise<void> {\n const {\n installDeps = true,\n initializeGit = true,\n log = console.log,\n } = options;\n const projectName = path.basename(options.outputDir);\n const dest = path.resolve(cwd, options.outputDir);\n\n function defaultRename(file: string): string {\n file = file.replace('example.gitignore', '.gitignore');\n file = file.replace('example.env', '.env');\n\n return file;\n }\n\n await copy(\n path.join(sourceDir, `template/${options.template}`),\n dest,\n defaultRename\n );\n\n // update tsconfig.json for src dir\n // if (isNext && options.useSrcDir) {\n const tsconfigPath = path.join(dest, 'tsconfig.json');\n const content = (await fs.readFile(tsconfigPath)).toString();\n\n const config = JSON.parse(content);\n\n if (config.compilerOptions?.paths) {\n Object.assign(config.compilerOptions.paths, {\n '@/*': ['./src/*'],\n });\n }\n\n await fs.writeFile(tsconfigPath, JSON.stringify(config, null, 2));\n // }\n\n const packageJson = createPackageJson(projectName, options);\n await fs.writeFile(\n path.join(dest, 'package.json'),\n JSON.stringify(packageJson, null, 2)\n );\n\n const readMe = await getReadme(dest, projectName);\n await fs.writeFile(path.join(dest, 'README.md'), readMe);\n\n if (installDeps) {\n await autoInstall(options.packageManager, dest);\n log('Installed dependencies');\n }\n\n if (initializeGit && tryGitInit(dest)) {\n log('Initialized Git repository');\n }\n}\n\nasync function getReadme(dest: string, projectName: string): Promise<string> {\n const template = await fs\n .readFile(path.join(dest, 'README.md'))\n .then((res) => res.toString());\n\n return `# ${projectName}\\n\\n${template}`;\n}\n\nasync function copy(\n from: string,\n to: string,\n rename: (s: string) => string = (s) => s\n): Promise<void> {\n const stats = await fs.stat(from);\n\n if (stats.isDirectory()) {\n const files = await fs.readdir(from);\n\n await Promise.all(\n files.map((file) =>\n copy(path.join(from, file), rename(path.join(to, file)))\n )\n );\n } else {\n await fs.mkdir(path.dirname(to), { recursive: true });\n await fs.copyFile(from, to);\n }\n}\n\nfunction createPackageJson(projectName: string, options: Options): object {\n if (options.template === '+express+azure-web-pubsub') {\n return {\n name: projectName,\n type: 'module',\n scripts: {\n build:\n 'tsc && mkdir -p ./dist/public && mkdir -p ./dist/temp && cp -r ./public ./dist',\n copyAssets:\n 'mkdir -p ./public && cp -r node_modules/@imgly/background-removal-node/dist/. public',\n dev: 'nodemon --exec \"tsx --env-file=.env src/server.ts\"',\n postinstall: 'npm run copyAssets',\n start:\n 'node --experimental-specifier-resolution=node --env-file=.env --loader ts-node/esm dist/server.js',\n },\n private: true,\n dependencies: {\n ...pick(localVersions, [\n '@inditextech/weave-sdk',\n '@inditextech/weave-store-azure-web-pubsub',\n ]),\n ...pick(versionPkg.dependencies, [\n '@imgly/background-removal-node',\n 'cors',\n 'dotenv',\n 'express',\n 'helmet',\n 'morgan',\n 'multer',\n 'pino',\n 'pino-http',\n 'pino-pretty',\n 'ts-node',\n 'uuid',\n 'zod',\n ]),\n },\n devDependencies: pick(versionPkg.devDependencies, [\n '@eslint/js',\n '@types/cors',\n '@types/express',\n '@types/helmet',\n '@types/morgan',\n '@types/multer',\n '@types/node',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'eslint',\n 'globals',\n 'nodemon',\n 'prettier',\n 'prettier-eslint',\n 'tsconfig-paths',\n 'tsx',\n 'typescript',\n 'typescript-eslint',\n ]),\n };\n }\n\n return {\n name: projectName,\n version: '0.0.0',\n private: true,\n scripts: {\n build:\n 'tsc && mkdir -p ./dist/public && mkdir -p ./dist/temp && cp -r ./public ./dist',\n copyAssets:\n 'mkdir -p ./public && cp -r node_modules/@imgly/background-removal-node/dist/. public',\n dev: 'nodemon --exec \"tsx --env-file=.env src/server.ts\"',\n postinstall: 'npm run copyAssets',\n start:\n 'node --experimental-specifier-resolution=node --env-file=.env --loader ts-node/esm dist/server.js',\n },\n dependencies: {\n ...pick(versionPkg.dependencies, [\n '@imgly/background-removal-node',\n 'cors',\n 'dotenv',\n 'express',\n 'helmet',\n 'morgan',\n 'multer',\n 'pino',\n 'pino-http',\n 'pino-pretty',\n 'ts-node',\n 'uuid',\n 'zod',\n ]),\n ...pick(localVersions, [\n '@inditextech/weave-sdk',\n '@inditextech/weave-store-websockets',\n ]),\n },\n devDependencies: {\n ...pick(versionPkg.devDependencies, [\n '@eslint/js',\n '@types/cors',\n '@types/express',\n '@types/helmet',\n '@types/morgan',\n '@types/multer',\n '@types/node',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'eslint',\n 'globals',\n 'nodemon',\n 'prettier',\n 'prettier-eslint',\n 'tsconfig-paths',\n 'tsx',\n 'typescript',\n 'typescript-eslint',\n ]),\n },\n };\n}\n\nfunction pick<T extends object, K extends keyof T>(\n obj: T,\n keys: K[]\n): Pick<T, K> {\n const result: Partial<T> = {};\n\n for (const key of keys) {\n if (key in obj) {\n result[key] = obj[key];\n }\n }\n\n return result as Pick<T, K>;\n}\n"],"mappings":";;;;;;;;AAUA,SAAS,kBAAkBA,OAAsB;AAC/C,KAAI;AACF,WAAS,uCAAuC;GAAE,OAAO;GAAU;EAAK,EAAC;AACzE,SAAO;CACR,QAAO;AACN,SAAO;CACR;AACF;AAED,SAAS,wBAAwBA,OAAsB;AACrD,KAAI;AACF,WAAS,mBAAmB;GAAE,OAAO;GAAU;EAAK,EAAC;AACrD,SAAO;CACR,QAAO;AACN,SAAO;CACR;AACF;AAED,SAAS,mBAAmBA,OAAsB;AAChD,KAAI;AACF,WAAS,iCAAiC;GAAE,OAAO;GAAU;EAAK,EAAC;AACnE,SAAO;CACR,QAAO;AACN,SAAO;CACR;AACF;AAED,SAAgB,WAAWC,MAAuB;CAChD,IAAI,UAAU;AAEd,KAAI;AACF,WAAS,iBAAiB,EAAE,OAAO,SAAU,EAAC;AAC9C,MAAI,kBAAkB,KAAK,IAAI,wBAAwB,KAAK,CAC1D,QAAO;AAGT,WAAS,YAAY;GAAE,OAAO;GAAU,KAAK;EAAM,EAAC;AACpD,YAAU;AAEV,OAAK,mBAAmB,KAAK,CAC3B,UAAS,wBAAwB;GAAE,OAAO;GAAU,KAAK;EAAM,EAAC;AAGlE,WAAS,cAAc;GAAE,OAAO;GAAU,KAAK;EAAM,EAAC;AACtD,WAAS,6DAA2D;GAClE,OAAO;GACP,KAAK;EACN,EAAC;AACF,SAAO;CACR,QAAO;AACN,MAAI,QACF,KAAI;AACF,UAAO,KAAK,MAAM,OAAO,EAAE;IAAE,WAAW;IAAM,OAAO;GAAM,EAAC;EAC7D,QAAO,CAEP;AAGH,SAAO;CACR;AACF;;;;ACtED,MAAa,WAAW;CAAC,4BAA2B;CAAQ,0BAAyB;CAAQ,uCAAsC;CAAQ,6CAA4C;CAAQ,4BAA2B;AAAQ;;;;WCCxN;cACG;gBACA;kBACI;cACJ;mBACK;CACd,uBAAuB;CACvB,kCAAkC;CAClC,0BAA0B;CAC1B,uCAAuC;CACvC,6CAA6C;CAC7C,QAAQ;CACR,UAAU;CACV,WAAW;CACX,UAAU;CACV,UAAU;CACV,UAAU;CACV,QAAQ;CACR,aAAa;CACb,eAAe;CACf,WAAW;CACX,QAAQ;CACR,OAAO;AACR;sBACkB;CACjB,cAAc;CACd,eAAe;CACf,kBAAkB;CAClB,iBAAiB;CACjB,iBAAiB;CACjB,iBAAiB;CACjB,eAAe;CACf,oCAAoC;CACpC,6BAA6B;CAC7B,cAAc;CACd,UAAU;CACV,WAAW;CACX,WAAW;CACX,YAAY;CACZ,mBAAmB;CACnB,kBAAkB;CAClB,OAAO;CACP,cAAc;CACd,qBAAqB;AACtB;sBA7CH;;;;;;;;AA8CC;;;;AC1CD,SAAgB,oBAAoC;CAClD,MAAM,YAAY,QAAQ,IAAI,yBAAyB;AAEvD,KAAI,UAAU,WAAW,OAAO,CAC9B,QAAO;AAGT,KAAI,UAAU,WAAW,OAAO,CAC9B,QAAO;AAGT,KAAI,UAAU,WAAW,MAAM,CAC7B,QAAO;AAGT,QAAO;AACR;AAED,SAAgB,YACdC,SACAC,MACe;AACf,QAAO,IAAI,QAAQ,CAAC,KAAK,WAAW;EAClC,MAAM,iBAAiB,MAAM,SAAS,CAAC,SAAU,GAAE;GACjD,OAAO;GACP,KAAK;IACH,GAAG,QAAQ;IACX,UAAU;IACV,wBAAwB;GACzB;GACD,KAAK;EACN,EAAC;AAEF,iBAAe,GAAG,SAAS,CAAC,SAAS;AACnC,OAAI,SAAS,EACX,QAAO,IAAI,MAAM,kBAAkB;OAEnC,MAAK;EAER,EAAC;CACH;AACF;;;;AC3CD,MAAa,YAAY,cAAc,IAAI,KAAK,MAAM,OAAO,KAAK,KAAK,KAAK;AAC5E,MAAa,MAAM,QAAQ,KAAK;;;;ACiBhC,eAAsB,OAAOC,SAAiC;CAC5D,MAAM,EACJ,cAAc,MACd,gBAAgB,MAChB,MAAM,QAAQ,KACf,GAAG;CACJ,MAAM,cAAc,KAAK,SAAS,QAAQ,UAAU;CACpD,MAAM,OAAO,KAAK,QAAQ,KAAK,QAAQ,UAAU;CAEjD,SAAS,cAAcC,MAAsB;AAC3C,SAAO,KAAK,QAAQ,qBAAqB,aAAa;AACtD,SAAO,KAAK,QAAQ,eAAe,OAAO;AAE1C,SAAO;CACR;AAED,OAAM,KACJ,KAAK,KAAK,YAAY,WAAW,QAAQ,SAAS,EAAE,EACpD,MACA,cACD;CAID,MAAM,eAAe,KAAK,KAAK,MAAM,gBAAgB;CACrD,MAAM,UAAU,CAAC,MAAM,GAAG,SAAS,aAAa,EAAE,UAAU;CAE5D,MAAM,SAAS,KAAK,MAAM,QAAQ;AAElC,KAAI,OAAO,iBAAiB,MAC1B,QAAO,OAAO,OAAO,gBAAgB,OAAO,EAC1C,OAAO,CAAC,SAAU,EACnB,EAAC;AAGJ,OAAM,GAAG,UAAU,cAAc,KAAK,UAAU,QAAQ,MAAM,EAAE,CAAC;CAGjE,MAAM,cAAc,kBAAkB,aAAa,QAAQ;AAC3D,OAAM,GAAG,UACP,KAAK,KAAK,MAAM,eAAe,EAC/B,KAAK,UAAU,aAAa,MAAM,EAAE,CACrC;CAED,MAAM,SAAS,MAAM,UAAU,MAAM,YAAY;AACjD,OAAM,GAAG,UAAU,KAAK,KAAK,MAAM,YAAY,EAAE,OAAO;AAExD,KAAI,aAAa;AACf,QAAM,YAAY,QAAQ,gBAAgB,KAAK;AAC/C,MAAI,yBAAyB;CAC9B;AAED,KAAI,iBAAiB,WAAW,KAAK,CACnC,KAAI,6BAA6B;AAEpC;AAED,eAAe,UAAUC,MAAcC,aAAsC;CAC3E,MAAM,WAAW,MAAM,GACpB,SAAS,KAAK,KAAK,MAAM,YAAY,CAAC,CACtC,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC;AAEhC,SAAQ,IAAI,YAAY,MAAM,SAAS;AACxC;AAED,eAAe,KACbC,MACAC,IACAC,SAAgC,CAAC,MAAM,GACxB;CACf,MAAM,QAAQ,MAAM,GAAG,KAAK,KAAK;AAEjC,KAAI,MAAM,aAAa,EAAE;EACvB,MAAM,QAAQ,MAAM,GAAG,QAAQ,KAAK;AAEpC,QAAM,QAAQ,IACZ,MAAM,IAAI,CAAC,SACT,KAAK,KAAK,KAAK,MAAM,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,CAAC,CACzD,CACF;CACF,OAAM;AACL,QAAM,GAAG,MAAM,KAAK,QAAQ,GAAG,EAAE,EAAE,WAAW,KAAM,EAAC;AACrD,QAAM,GAAG,SAAS,MAAM,GAAG;CAC5B;AACF;AAED,SAAS,kBAAkBH,aAAqBH,SAA0B;AACxE,KAAI,QAAQ,aAAa,4BACvB,QAAO;EACL,MAAM;EACN,MAAM;EACN,SAAS;GACP,OACE;GACF,YACE;GACF,KAAK;GACL,aAAa;GACb,OACE;EACH;EACD,SAAS;EACT,cAAc;GACZ,GAAG,KAAK,UAAe,CACrB,0BACA,2CACD,EAAC;GACF,GAAG,KAAK,gBAAW,cAAc;IAC/B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD,EAAC;EACH;EACD,iBAAiB,KAAK,gBAAW,iBAAiB;GAChD;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD,EAAC;CACH;AAGH,QAAO;EACL,MAAM;EACN,SAAS;EACT,SAAS;EACT,SAAS;GACP,OACE;GACF,YACE;GACF,KAAK;GACL,aAAa;GACb,OACE;EACH;EACD,cAAc;GACZ,GAAG,KAAK,gBAAW,cAAc;IAC/B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD,EAAC;GACF,GAAG,KAAK,UAAe,CACrB,0BACA,qCACD,EAAC;EACH;EACD,iBAAiB,EACf,GAAG,KAAK,gBAAW,iBAAiB;GAClC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD,EAAC,CACH;CACF;AACF;AAED,SAAS,KACPO,KACAC,MACY;CACZ,MAAMC,SAAqB,CAAE;AAE7B,MAAK,MAAM,OAAO,KAChB,KAAI,OAAO,IACT,QAAO,OAAO,IAAI;AAItB,QAAO;AACR"}
|
package/dist/create-app.d.ts
CHANGED
|
@@ -1,14 +1,21 @@
|
|
|
1
|
+
//#region src/auto-install.d.ts
|
|
1
2
|
type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';
|
|
2
3
|
|
|
4
|
+
//#endregion
|
|
5
|
+
//#region src/create-app.d.ts
|
|
3
6
|
type Template = '+express+websockets' | '+express+azure-web-pubsub';
|
|
4
7
|
interface Options {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
outputDir: string;
|
|
9
|
+
template: Template;
|
|
10
|
+
packageManager: PackageManager;
|
|
11
|
+
installDeps?: boolean;
|
|
12
|
+
initializeGit?: boolean;
|
|
13
|
+
log?: (message: string) => void;
|
|
11
14
|
}
|
|
12
15
|
declare function create(options: Options): Promise<void>;
|
|
13
16
|
|
|
14
|
-
|
|
17
|
+
//#endregion
|
|
18
|
+
//# sourceMappingURL=create-app.d.ts.map
|
|
19
|
+
|
|
20
|
+
export { Options, Template, create };
|
|
21
|
+
//# sourceMappingURL=create-app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-app.d.ts","names":[],"sources":["../src/auto-install.ts","../src/create-app.ts"],"sourcesContent":null,"mappings":";KAEY,cAAA;;;;AAAA,KCOA,QAAA,GDPc,qBAAA,GAAA,2BAAA;UCST,OAAA;;YAEL;EAJA,cAAQ,EAKF,cALE;EAEH,WAAO,CAAA,EAAA,OAAA;EAAA,aAAA,CAAA,EAAA,OAAA;EAAA,GAEZ,CAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA;;AACoB,iBAMV,MAAA,CANU,OAAA,EAMM,OANN,CAAA,EAMgB,OANhB,CAAA,IAAA,CAAA;;;AAMhC"}
|
package/dist/create-app.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export { };
|
package/dist/index.js
CHANGED
|
@@ -1,120 +1,81 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
create,
|
|
4
|
-
cwd,
|
|
5
|
-
getPackageManager
|
|
6
|
-
} from "./chunk-5NMEWJSO.js";
|
|
7
|
-
|
|
8
|
-
// src/index.ts
|
|
9
|
-
import fs from "node:fs/promises";
|
|
2
|
+
import { create, cwd, getPackageManager } from "./create-app-Cl7oNIU_.js";
|
|
10
3
|
import path from "node:path";
|
|
11
|
-
import
|
|
12
|
-
|
|
13
|
-
confirm,
|
|
14
|
-
group,
|
|
15
|
-
intro,
|
|
16
|
-
isCancel,
|
|
17
|
-
outro,
|
|
18
|
-
select,
|
|
19
|
-
spinner,
|
|
20
|
-
text
|
|
21
|
-
} from "@clack/prompts";
|
|
4
|
+
import fs from "node:fs/promises";
|
|
5
|
+
import { cancel, confirm, group, intro, isCancel, outro, select, spinner, text } from "@clack/prompts";
|
|
22
6
|
import pc from "picocolors";
|
|
23
|
-
|
|
7
|
+
|
|
8
|
+
//#region src/index.ts
|
|
9
|
+
const manager = getPackageManager();
|
|
24
10
|
async function main() {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
destDir.map((item) => {
|
|
89
|
-
return fs.rm(path.join(dest, item), {
|
|
90
|
-
recursive: true,
|
|
91
|
-
force: true
|
|
92
|
-
});
|
|
93
|
-
})
|
|
94
|
-
);
|
|
95
|
-
info2.stop(`Deleted files in ${projectName}`);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
const info = spinner();
|
|
99
|
-
info.start(`Generating Project`);
|
|
100
|
-
await create({
|
|
101
|
-
packageManager: manager,
|
|
102
|
-
template: options.template,
|
|
103
|
-
outputDir: dest,
|
|
104
|
-
installDeps: options.installDeps,
|
|
105
|
-
log: (message) => {
|
|
106
|
-
info.message(message);
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
info.stop("Project Generated");
|
|
110
|
-
outro(pc.bgGreen(pc.bold("Done")));
|
|
111
|
-
console.log(pc.bold("\nOpen the project"));
|
|
112
|
-
console.log(pc.cyan(`cd ${projectName}`));
|
|
113
|
-
console.log(pc.bold("\nRun Development Server"));
|
|
114
|
-
console.log(pc.cyan("npm run dev | pnpm run dev | yarn dev"));
|
|
115
|
-
process.exit(0);
|
|
11
|
+
intro(pc.bgCyan(pc.bold("Create Weave.js Backend Service")));
|
|
12
|
+
const options = await group({
|
|
13
|
+
name: () => text({
|
|
14
|
+
message: "Project name",
|
|
15
|
+
placeholder: "my-service",
|
|
16
|
+
defaultValue: "my-service"
|
|
17
|
+
}),
|
|
18
|
+
template: () => select({
|
|
19
|
+
message: "Choose a template",
|
|
20
|
+
initialValue: "+express+websockets",
|
|
21
|
+
options: [{
|
|
22
|
+
value: "+express+websockets",
|
|
23
|
+
label: "Express.js: Weave.js Websockets Store",
|
|
24
|
+
hint: "recommended"
|
|
25
|
+
}, {
|
|
26
|
+
value: "+express+azure-web-pubsub",
|
|
27
|
+
label: "Express.js: Weave.js Azure Web PubSub Store"
|
|
28
|
+
}]
|
|
29
|
+
}),
|
|
30
|
+
installDeps: () => confirm({ message: `Do you want to install packages automatically? (detected as ${manager})` })
|
|
31
|
+
}, { onCancel: () => {
|
|
32
|
+
cancel("Installation Stopped.");
|
|
33
|
+
process.exit(0);
|
|
34
|
+
} });
|
|
35
|
+
const projectName = options.name.toLowerCase().replace(/\s/, "-");
|
|
36
|
+
const dest = path.resolve(cwd, projectName);
|
|
37
|
+
const destDir = await fs.readdir(dest).catch(() => null);
|
|
38
|
+
if (destDir && destDir.length > 0) {
|
|
39
|
+
const del = await confirm({ message: `directory ${projectName} already exists, do you want to delete its files?` });
|
|
40
|
+
if (isCancel(del)) {
|
|
41
|
+
cancel();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (del) {
|
|
45
|
+
const info$1 = spinner();
|
|
46
|
+
info$1.start(`Deleting files in ${projectName}`);
|
|
47
|
+
await Promise.all(destDir.map((item) => {
|
|
48
|
+
return fs.rm(path.join(dest, item), {
|
|
49
|
+
recursive: true,
|
|
50
|
+
force: true
|
|
51
|
+
});
|
|
52
|
+
}));
|
|
53
|
+
info$1.stop(`Deleted files in ${projectName}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const info = spinner();
|
|
57
|
+
info.start(`Generating Project`);
|
|
58
|
+
await create({
|
|
59
|
+
packageManager: manager,
|
|
60
|
+
template: options.template,
|
|
61
|
+
outputDir: dest,
|
|
62
|
+
installDeps: options.installDeps,
|
|
63
|
+
log: (message) => {
|
|
64
|
+
info.message(message);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
info.stop("Project Generated");
|
|
68
|
+
outro(pc.bgGreen(pc.bold("Done")));
|
|
69
|
+
console.log(pc.bold("\nOpen the project"));
|
|
70
|
+
console.log(pc.cyan(`cd ${projectName}`));
|
|
71
|
+
console.log(pc.bold("\nRun Development Server"));
|
|
72
|
+
console.log(pc.cyan("npm run dev | pnpm run dev | yarn dev"));
|
|
73
|
+
process.exit(0);
|
|
116
74
|
}
|
|
117
75
|
main().catch((e) => {
|
|
118
|
-
|
|
119
|
-
|
|
76
|
+
console.error(e);
|
|
77
|
+
throw e;
|
|
120
78
|
});
|
|
79
|
+
|
|
80
|
+
//#endregion
|
|
81
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["e: unknown"],"sources":["../src/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport {\n cancel,\n confirm,\n group,\n intro,\n isCancel,\n outro,\n select,\n spinner,\n text,\n} from '@clack/prompts';\nimport pc from 'picocolors';\nimport { getPackageManager } from './auto-install';\nimport { type Template, create } from './create-app';\nimport { cwd } from './constants';\n\nconst manager = getPackageManager();\n\nasync function main(): Promise<void> {\n intro(pc.bgCyan(pc.bold('Create Weave.js Backend Service')));\n\n const options = await group(\n {\n name: () =>\n text({\n message: 'Project name',\n placeholder: 'my-service',\n defaultValue: 'my-service',\n }),\n template: () =>\n select({\n message: 'Choose a template',\n initialValue: '+express+websockets' as Template,\n options: [\n {\n value: '+express+websockets',\n label: 'Express.js: Weave.js Websockets Store',\n hint: 'recommended',\n },\n {\n value: '+express+azure-web-pubsub',\n label: 'Express.js: Weave.js Azure Web PubSub Store',\n },\n ],\n }),\n // src: (v) => {\n // if (!v.results.template?.startsWith('+next')) return;\n\n // return confirm({\n // message: 'Use `/src` directory?',\n // initialValue: false,\n // });\n // },\n // eslint: (v) => {\n // if (!v.results.template?.startsWith('+next')) return;\n\n // return confirm({\n // message: 'Add default ESLint configuration?',\n // initialValue: false,\n // });\n // },\n installDeps: () =>\n confirm({\n message: `Do you want to install packages automatically? (detected as ${manager})`,\n }),\n },\n {\n onCancel: () => {\n cancel('Installation Stopped.');\n process.exit(0);\n },\n }\n );\n\n const projectName = options.name.toLowerCase().replace(/\\s/, '-');\n const dest = path.resolve(cwd, projectName);\n\n const destDir = await fs.readdir(dest).catch(() => null);\n if (destDir && destDir.length > 0) {\n const del = await confirm({\n message: `directory ${projectName} already exists, do you want to delete its files?`,\n });\n\n if (isCancel(del)) {\n cancel();\n return;\n }\n\n if (del) {\n const info = spinner();\n info.start(`Deleting files in ${projectName}`);\n\n await Promise.all(\n destDir.map((item) => {\n return fs.rm(path.join(dest, item), {\n recursive: true,\n force: true,\n });\n })\n );\n\n info.stop(`Deleted files in ${projectName}`);\n }\n }\n\n const info = spinner();\n info.start(`Generating Project`);\n\n await create({\n packageManager: manager,\n template: options.template,\n outputDir: dest,\n installDeps: options.installDeps,\n log: (message) => {\n info.message(message);\n },\n });\n\n info.stop('Project Generated');\n\n outro(pc.bgGreen(pc.bold('Done')));\n\n console.log(pc.bold('\\nOpen the project'));\n console.log(pc.cyan(`cd ${projectName}`));\n\n console.log(pc.bold('\\nRun Development Server'));\n console.log(pc.cyan('npm run dev | pnpm run dev | yarn dev'));\n\n // console.log(\n // pc.bold('\\nYou can now open the project and start writing documents')\n // );\n\n process.exit(0);\n}\n\nmain().catch((e: unknown) => {\n console.error(e);\n throw e;\n});\n"],"mappings":";;;;;;;;AAmBA,MAAM,UAAU,mBAAmB;AAEnC,eAAe,OAAsB;AACnC,OAAM,GAAG,OAAO,GAAG,KAAK,kCAAkC,CAAC,CAAC;CAE5D,MAAM,UAAU,MAAM,MACpB;EACE,MAAM,MACJ,KAAK;GACH,SAAS;GACT,aAAa;GACb,cAAc;EACf,EAAC;EACJ,UAAU,MACR,OAAO;GACL,SAAS;GACT,cAAc;GACd,SAAS,CACP;IACE,OAAO;IACP,OAAO;IACP,MAAM;GACP,GACD;IACE,OAAO;IACP,OAAO;GAEV,CAAA;EACF,EAAC;EAiBJ,aAAa,MACX,QAAQ,EACN,UAAU,8DAA8D,QAAQ,GACjF,EAAC;CACL,GACD,EACE,UAAU,MAAM;AACd,SAAO,wBAAwB;AAC/B,UAAQ,KAAK,EAAE;CAChB,EACF,EACF;CAED,MAAM,cAAc,QAAQ,KAAK,aAAa,CAAC,QAAQ,MAAM,IAAI;CACjE,MAAM,OAAO,KAAK,QAAQ,KAAK,YAAY;CAE3C,MAAM,UAAU,MAAM,GAAG,QAAQ,KAAK,CAAC,MAAM,MAAM,KAAK;AACxD,KAAI,WAAW,QAAQ,SAAS,GAAG;EACjC,MAAM,MAAM,MAAM,QAAQ,EACxB,UAAU,YAAY,YAAY,mDACnC,EAAC;AAEF,MAAI,SAAS,IAAI,EAAE;AACjB,WAAQ;AACR;EACD;AAED,MAAI,KAAK;GACP,MAAM,SAAO,SAAS;AACtB,UAAK,OAAO,oBAAoB,YAAY,EAAE;AAE9C,SAAM,QAAQ,IACZ,QAAQ,IAAI,CAAC,SAAS;AACpB,WAAO,GAAG,GAAG,KAAK,KAAK,MAAM,KAAK,EAAE;KAClC,WAAW;KACX,OAAO;IACR,EAAC;GACH,EAAC,CACH;AAED,UAAK,MAAM,mBAAmB,YAAY,EAAE;EAC7C;CACF;CAED,MAAM,OAAO,SAAS;AACtB,MAAK,OAAO,oBAAoB;AAEhC,OAAM,OAAO;EACX,gBAAgB;EAChB,UAAU,QAAQ;EAClB,WAAW;EACX,aAAa,QAAQ;EACrB,KAAK,CAAC,YAAY;AAChB,QAAK,QAAQ,QAAQ;EACtB;CACF,EAAC;AAEF,MAAK,KAAK,oBAAoB;AAE9B,OAAM,GAAG,QAAQ,GAAG,KAAK,OAAO,CAAC,CAAC;AAElC,SAAQ,IAAI,GAAG,KAAK,qBAAqB,CAAC;AAC1C,SAAQ,IAAI,GAAG,MAAM,KAAK,YAAY,EAAE,CAAC;AAEzC,SAAQ,IAAI,GAAG,KAAK,2BAA2B,CAAC;AAChD,SAAQ,IAAI,GAAG,KAAK,wCAAwC,CAAC;AAM7D,SAAQ,KAAK,EAAE;AAChB;AAED,MAAM,CAAC,MAAM,CAACA,MAAe;AAC3B,SAAQ,MAAM,EAAE;AAChB,OAAM;AACP,EAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-weave-backend-app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Create a new backend artifact for site with Weave.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"NextJs",
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
"dist/*"
|
|
22
22
|
],
|
|
23
23
|
"scripts": {
|
|
24
|
-
"
|
|
25
|
-
"
|
|
24
|
+
"bump:snapshot": "tsc --noEmit && tsdown --sourcemap",
|
|
25
|
+
"build": "tsc --noEmit && tsdown",
|
|
26
26
|
"clean": "rimraf dist",
|
|
27
|
-
"dev": "
|
|
27
|
+
"dev": "tsdown --watch",
|
|
28
28
|
"link": "npm link",
|
|
29
29
|
"lint:fix": "npm run lint -- --fix",
|
|
30
30
|
"lint": "eslint ./src",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@types/cross-spawn": "^6.0.6",
|
|
47
47
|
"@types/node": "22.14.1",
|
|
48
48
|
"fast-glob": "^3.3.3",
|
|
49
|
-
"
|
|
49
|
+
"tsdown": "^0.10.2"
|
|
50
50
|
},
|
|
51
51
|
"engines": {
|
|
52
52
|
"node": "^18.12 || ^20.11 || ^22.11"
|
package/template/package.json
CHANGED
|
@@ -6,14 +6,10 @@
|
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@azure/storage-blob": "^12.26.0",
|
|
9
|
-
"@azure/web-pubsub": "^1.1.4",
|
|
10
|
-
"@azure/web-pubsub-express": "^1.0.6",
|
|
11
9
|
"@imgly/background-removal-node": "^1.4.5",
|
|
12
10
|
"@inditextech/weave-sdk": "0.0.0",
|
|
13
11
|
"@inditextech/weave-store-websockets": "0.0.0",
|
|
14
12
|
"@inditextech/weave-store-azure-web-pubsub": "0.0.0",
|
|
15
|
-
"@inditextech/weave-types": "0.0.0",
|
|
16
|
-
"canvas": "^3.1.0",
|
|
17
13
|
"cors": "^2.8.5",
|
|
18
14
|
"dotenv": "^16.4.7",
|
|
19
15
|
"express": "^4.21.2",
|
|
@@ -25,9 +21,6 @@
|
|
|
25
21
|
"pino-pretty": "^13.0.0",
|
|
26
22
|
"ts-node": "^10.9.2",
|
|
27
23
|
"uuid": "^11.1.0",
|
|
28
|
-
"ws": "^8.18.1",
|
|
29
|
-
"y-protocols": "^1.0.6",
|
|
30
|
-
"yjs": "^13.6.24",
|
|
31
24
|
"zod": "^3.24.2"
|
|
32
25
|
},
|
|
33
26
|
"devDependencies": {
|
|
@@ -38,7 +31,6 @@
|
|
|
38
31
|
"@types/morgan": "^1.9.9",
|
|
39
32
|
"@types/multer": "^1.4.12",
|
|
40
33
|
"@types/node": "^22.13.5",
|
|
41
|
-
"@types/ws": "^8.18.0",
|
|
42
34
|
"@typescript-eslint/eslint-plugin": "^8.25.0",
|
|
43
35
|
"@typescript-eslint/parser": "^8.25.0",
|
|
44
36
|
"commitlint": "^19.7.1",
|
package/dist/chunk-5NMEWJSO.js
DELETED
|
@@ -1,366 +0,0 @@
|
|
|
1
|
-
// src/create-app.ts
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import fs from "node:fs/promises";
|
|
4
|
-
|
|
5
|
-
// src/git.ts
|
|
6
|
-
import { execSync } from "node:child_process";
|
|
7
|
-
import { rmSync } from "node:fs";
|
|
8
|
-
import { join } from "node:path";
|
|
9
|
-
function isInGitRepository(cwd2) {
|
|
10
|
-
try {
|
|
11
|
-
execSync("git rev-parse --is-inside-work-tree", { stdio: "ignore", cwd: cwd2 });
|
|
12
|
-
return true;
|
|
13
|
-
} catch {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
function isInMercurialRepository(cwd2) {
|
|
18
|
-
try {
|
|
19
|
-
execSync("hg --cwd . root", { stdio: "ignore", cwd: cwd2 });
|
|
20
|
-
return true;
|
|
21
|
-
} catch {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
function isDefaultBranchSet(cwd2) {
|
|
26
|
-
try {
|
|
27
|
-
execSync("git config init.defaultBranch", { stdio: "ignore", cwd: cwd2 });
|
|
28
|
-
return true;
|
|
29
|
-
} catch {
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
function tryGitInit(root) {
|
|
34
|
-
let didInit = false;
|
|
35
|
-
try {
|
|
36
|
-
execSync("git --version", { stdio: "ignore" });
|
|
37
|
-
if (isInGitRepository(root) || isInMercurialRepository(root)) {
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
execSync("git init", { stdio: "ignore", cwd: root });
|
|
41
|
-
didInit = true;
|
|
42
|
-
if (!isDefaultBranchSet(root)) {
|
|
43
|
-
execSync("git checkout -b main", { stdio: "ignore", cwd: root });
|
|
44
|
-
}
|
|
45
|
-
execSync("git add -A", { stdio: "ignore", cwd: root });
|
|
46
|
-
execSync('git commit -m "Initial commit from Create Fumadocs App"', {
|
|
47
|
-
stdio: "ignore",
|
|
48
|
-
cwd: root
|
|
49
|
-
});
|
|
50
|
-
return true;
|
|
51
|
-
} catch {
|
|
52
|
-
if (didInit) {
|
|
53
|
-
try {
|
|
54
|
-
rmSync(join(root, ".git"), { recursive: true, force: true });
|
|
55
|
-
} catch {
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// src/versions.js
|
|
63
|
-
var versions = { "@inditextech/weave-types": "0.2.0", "@inditextech/weave-sdk": "0.2.0", "@inditextech/weave-store-websockets": "0.2.0", "@inditextech/weave-store-azure-web-pubsub": "0.2.0", "@inditextech/weave-react": "0.2.0" };
|
|
64
|
-
|
|
65
|
-
// template/package.json
|
|
66
|
-
var package_default = {
|
|
67
|
-
name: "example-versions",
|
|
68
|
-
version: "0.0.0",
|
|
69
|
-
private: true,
|
|
70
|
-
description: "Used to track dependency versions in create-*-app",
|
|
71
|
-
license: "MIT",
|
|
72
|
-
dependencies: {
|
|
73
|
-
"@azure/storage-blob": "^12.26.0",
|
|
74
|
-
"@azure/web-pubsub": "^1.1.4",
|
|
75
|
-
"@azure/web-pubsub-express": "^1.0.6",
|
|
76
|
-
"@imgly/background-removal-node": "^1.4.5",
|
|
77
|
-
"@inditextech/weave-sdk": "0.0.0",
|
|
78
|
-
"@inditextech/weave-store-websockets": "0.0.0",
|
|
79
|
-
"@inditextech/weave-store-azure-web-pubsub": "0.0.0",
|
|
80
|
-
"@inditextech/weave-types": "0.0.0",
|
|
81
|
-
canvas: "^3.1.0",
|
|
82
|
-
cors: "^2.8.5",
|
|
83
|
-
dotenv: "^16.4.7",
|
|
84
|
-
express: "^4.21.2",
|
|
85
|
-
helmet: "^8.0.0",
|
|
86
|
-
morgan: "^1.10.0",
|
|
87
|
-
multer: "^1.4.5-lts.1",
|
|
88
|
-
pino: "^9.6.0",
|
|
89
|
-
"pino-http": "^10.4.0",
|
|
90
|
-
"pino-pretty": "^13.0.0",
|
|
91
|
-
"ts-node": "^10.9.2",
|
|
92
|
-
uuid: "^11.1.0",
|
|
93
|
-
ws: "^8.18.1",
|
|
94
|
-
"y-protocols": "^1.0.6",
|
|
95
|
-
yjs: "^13.6.24",
|
|
96
|
-
zod: "^3.24.2"
|
|
97
|
-
},
|
|
98
|
-
devDependencies: {
|
|
99
|
-
"@eslint/js": "^9.21.0",
|
|
100
|
-
"@types/cors": "^2.8.17",
|
|
101
|
-
"@types/express": "^5.0.0",
|
|
102
|
-
"@types/helmet": "^4.0.0",
|
|
103
|
-
"@types/morgan": "^1.9.9",
|
|
104
|
-
"@types/multer": "^1.4.12",
|
|
105
|
-
"@types/node": "^22.13.5",
|
|
106
|
-
"@types/ws": "^8.18.0",
|
|
107
|
-
"@typescript-eslint/eslint-plugin": "^8.25.0",
|
|
108
|
-
"@typescript-eslint/parser": "^8.25.0",
|
|
109
|
-
commitlint: "^19.7.1",
|
|
110
|
-
eslint: "^9.21.0",
|
|
111
|
-
globals: "^16.0.0",
|
|
112
|
-
nodemon: "^3.1.9",
|
|
113
|
-
prettier: "^3.5.2",
|
|
114
|
-
"prettier-eslint": "^16.3.0",
|
|
115
|
-
"tsconfig-paths": "^4.2.0",
|
|
116
|
-
tsx: "^4.19.3",
|
|
117
|
-
typescript: "^5.7.3",
|
|
118
|
-
"typescript-eslint": "^8.25.0"
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
// src/auto-install.ts
|
|
123
|
-
import { spawn } from "cross-spawn";
|
|
124
|
-
function getPackageManager() {
|
|
125
|
-
const userAgent = process.env.npm_config_user_agent ?? "";
|
|
126
|
-
if (userAgent.startsWith("yarn")) {
|
|
127
|
-
return "yarn";
|
|
128
|
-
}
|
|
129
|
-
if (userAgent.startsWith("pnpm")) {
|
|
130
|
-
return "pnpm";
|
|
131
|
-
}
|
|
132
|
-
if (userAgent.startsWith("bun")) {
|
|
133
|
-
return "bun";
|
|
134
|
-
}
|
|
135
|
-
return "npm";
|
|
136
|
-
}
|
|
137
|
-
function autoInstall(manager, dest) {
|
|
138
|
-
return new Promise((res, reject) => {
|
|
139
|
-
const installProcess = spawn(manager, ["install"], {
|
|
140
|
-
stdio: "ignore",
|
|
141
|
-
env: {
|
|
142
|
-
...process.env,
|
|
143
|
-
NODE_ENV: "development",
|
|
144
|
-
DISABLE_OPENCOLLECTIVE: "1"
|
|
145
|
-
},
|
|
146
|
-
cwd: dest
|
|
147
|
-
});
|
|
148
|
-
installProcess.on("close", (code) => {
|
|
149
|
-
if (code !== 0) {
|
|
150
|
-
reject(new Error("Install failed"));
|
|
151
|
-
} else {
|
|
152
|
-
res();
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// src/constants.ts
|
|
159
|
-
import { fileURLToPath } from "node:url";
|
|
160
|
-
var sourceDir = fileURLToPath(new URL(`../`, import.meta.url).href);
|
|
161
|
-
var cwd = process.cwd();
|
|
162
|
-
|
|
163
|
-
// src/create-app.ts
|
|
164
|
-
async function create(options) {
|
|
165
|
-
const {
|
|
166
|
-
installDeps = true,
|
|
167
|
-
initializeGit = true,
|
|
168
|
-
log = console.log
|
|
169
|
-
} = options;
|
|
170
|
-
const projectName = path.basename(options.outputDir);
|
|
171
|
-
const dest = path.resolve(cwd, options.outputDir);
|
|
172
|
-
function defaultRename(file) {
|
|
173
|
-
file = file.replace("example.gitignore", ".gitignore");
|
|
174
|
-
file = file.replace("example.env", ".env");
|
|
175
|
-
return file;
|
|
176
|
-
}
|
|
177
|
-
await copy(
|
|
178
|
-
path.join(sourceDir, `template/${options.template}`),
|
|
179
|
-
dest,
|
|
180
|
-
defaultRename
|
|
181
|
-
);
|
|
182
|
-
const tsconfigPath = path.join(dest, "tsconfig.json");
|
|
183
|
-
const content = (await fs.readFile(tsconfigPath)).toString();
|
|
184
|
-
const config = JSON.parse(content);
|
|
185
|
-
if (config.compilerOptions?.paths) {
|
|
186
|
-
Object.assign(config.compilerOptions.paths, {
|
|
187
|
-
"@/*": ["./src/*"]
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
await fs.writeFile(tsconfigPath, JSON.stringify(config, null, 2));
|
|
191
|
-
const packageJson = createPackageJson(projectName, options);
|
|
192
|
-
await fs.writeFile(
|
|
193
|
-
path.join(dest, "package.json"),
|
|
194
|
-
JSON.stringify(packageJson, null, 2)
|
|
195
|
-
);
|
|
196
|
-
const readMe = await getReadme(dest, projectName);
|
|
197
|
-
await fs.writeFile(path.join(dest, "README.md"), readMe);
|
|
198
|
-
if (installDeps) {
|
|
199
|
-
await autoInstall(options.packageManager, dest);
|
|
200
|
-
log("Installed dependencies");
|
|
201
|
-
}
|
|
202
|
-
if (initializeGit && tryGitInit(dest)) {
|
|
203
|
-
log("Initialized Git repository");
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
async function getReadme(dest, projectName) {
|
|
207
|
-
const template = await fs.readFile(path.join(dest, "README.md")).then((res) => res.toString());
|
|
208
|
-
return `# ${projectName}
|
|
209
|
-
|
|
210
|
-
${template}`;
|
|
211
|
-
}
|
|
212
|
-
async function copy(from, to, rename = (s) => s) {
|
|
213
|
-
const stats = await fs.stat(from);
|
|
214
|
-
if (stats.isDirectory()) {
|
|
215
|
-
const files = await fs.readdir(from);
|
|
216
|
-
await Promise.all(
|
|
217
|
-
files.map(
|
|
218
|
-
(file) => copy(path.join(from, file), rename(path.join(to, file)))
|
|
219
|
-
)
|
|
220
|
-
);
|
|
221
|
-
} else {
|
|
222
|
-
await fs.mkdir(path.dirname(to), { recursive: true });
|
|
223
|
-
await fs.copyFile(from, to);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
function createPackageJson(projectName, options) {
|
|
227
|
-
if (options.template === "+express+azure-web-pubsub") {
|
|
228
|
-
return {
|
|
229
|
-
name: projectName,
|
|
230
|
-
type: "module",
|
|
231
|
-
scripts: {
|
|
232
|
-
build: "tsc && mkdir -p ./dist/public && mkdir -p ./dist/temp && cp -r ./public ./dist",
|
|
233
|
-
copyAssets: "mkdir -p ./public && cp -r node_modules/@imgly/background-removal-node/dist/. public",
|
|
234
|
-
dev: 'nodemon --exec "tsx --env-file=.env src/server.ts"',
|
|
235
|
-
postinstall: "npm run copyAssets",
|
|
236
|
-
start: "node --experimental-specifier-resolution=node --env-file=.env --loader ts-node/esm dist/server.js"
|
|
237
|
-
},
|
|
238
|
-
private: true,
|
|
239
|
-
dependencies: {
|
|
240
|
-
...pick(versions, [
|
|
241
|
-
"@inditextech/weave-types",
|
|
242
|
-
"@inditextech/weave-sdk",
|
|
243
|
-
"@inditextech/weave-store-azure-web-pubsub"
|
|
244
|
-
]),
|
|
245
|
-
...pick(package_default.dependencies, [
|
|
246
|
-
"@imgly/background-removal-node",
|
|
247
|
-
"canvas",
|
|
248
|
-
"cors",
|
|
249
|
-
"dotenv",
|
|
250
|
-
"express",
|
|
251
|
-
"helmet",
|
|
252
|
-
"morgan",
|
|
253
|
-
"multer",
|
|
254
|
-
"pino",
|
|
255
|
-
"pino-http",
|
|
256
|
-
"pino-pretty",
|
|
257
|
-
"ts-node",
|
|
258
|
-
"uuid",
|
|
259
|
-
"ws",
|
|
260
|
-
"y-protocols",
|
|
261
|
-
"yjs",
|
|
262
|
-
"zod"
|
|
263
|
-
])
|
|
264
|
-
},
|
|
265
|
-
devDependencies: pick(package_default.devDependencies, [
|
|
266
|
-
"@eslint/js",
|
|
267
|
-
"@types/cors",
|
|
268
|
-
"@types/express",
|
|
269
|
-
"@types/helmet",
|
|
270
|
-
"@types/morgan",
|
|
271
|
-
"@types/multer",
|
|
272
|
-
"@types/node",
|
|
273
|
-
"@types/ws",
|
|
274
|
-
"@typescript-eslint/eslint-plugin",
|
|
275
|
-
"@typescript-eslint/parser",
|
|
276
|
-
"eslint",
|
|
277
|
-
"globals",
|
|
278
|
-
"nodemon",
|
|
279
|
-
"prettier",
|
|
280
|
-
"prettier-eslint",
|
|
281
|
-
"tsconfig-paths",
|
|
282
|
-
"tsx",
|
|
283
|
-
"typescript",
|
|
284
|
-
"typescript-eslint"
|
|
285
|
-
])
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
return {
|
|
289
|
-
name: projectName,
|
|
290
|
-
version: "0.0.0",
|
|
291
|
-
private: true,
|
|
292
|
-
scripts: {
|
|
293
|
-
build: "tsc && mkdir -p ./dist/public && mkdir -p ./dist/temp && cp -r ./public ./dist",
|
|
294
|
-
copyAssets: "mkdir -p ./public && cp -r node_modules/@imgly/background-removal-node/dist/. public",
|
|
295
|
-
dev: 'nodemon --exec "tsx --env-file=.env src/server.ts"',
|
|
296
|
-
postinstall: "npm run copyAssets",
|
|
297
|
-
start: "node --experimental-specifier-resolution=node --env-file=.env --loader ts-node/esm dist/server.js"
|
|
298
|
-
},
|
|
299
|
-
dependencies: {
|
|
300
|
-
...pick(package_default.dependencies, [
|
|
301
|
-
"@azure/web-pubsub",
|
|
302
|
-
"@azure/web-pubsub-express",
|
|
303
|
-
"@imgly/background-removal-node",
|
|
304
|
-
"canvas",
|
|
305
|
-
"cors",
|
|
306
|
-
"dotenv",
|
|
307
|
-
"express",
|
|
308
|
-
"helmet",
|
|
309
|
-
"morgan",
|
|
310
|
-
"multer",
|
|
311
|
-
"pino",
|
|
312
|
-
"pino-http",
|
|
313
|
-
"pino-pretty",
|
|
314
|
-
"ts-node",
|
|
315
|
-
"uuid",
|
|
316
|
-
"ws",
|
|
317
|
-
"y-protocols",
|
|
318
|
-
"yjs",
|
|
319
|
-
"zod"
|
|
320
|
-
]),
|
|
321
|
-
...pick(versions, [
|
|
322
|
-
"@inditextech/weave-types",
|
|
323
|
-
"@inditextech/weave-sdk",
|
|
324
|
-
"@inditextech/weave-store-websockets"
|
|
325
|
-
])
|
|
326
|
-
},
|
|
327
|
-
devDependencies: {
|
|
328
|
-
...pick(package_default.devDependencies, [
|
|
329
|
-
"@eslint/js",
|
|
330
|
-
"@types/cors",
|
|
331
|
-
"@types/express",
|
|
332
|
-
"@types/helmet",
|
|
333
|
-
"@types/morgan",
|
|
334
|
-
"@types/multer",
|
|
335
|
-
"@types/node",
|
|
336
|
-
"@types/ws",
|
|
337
|
-
"@typescript-eslint/eslint-plugin",
|
|
338
|
-
"@typescript-eslint/parser",
|
|
339
|
-
"eslint",
|
|
340
|
-
"globals",
|
|
341
|
-
"nodemon",
|
|
342
|
-
"prettier",
|
|
343
|
-
"prettier-eslint",
|
|
344
|
-
"tsconfig-paths",
|
|
345
|
-
"tsx",
|
|
346
|
-
"typescript",
|
|
347
|
-
"typescript-eslint"
|
|
348
|
-
])
|
|
349
|
-
}
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
function pick(obj, keys) {
|
|
353
|
-
const result = {};
|
|
354
|
-
for (const key of keys) {
|
|
355
|
-
if (key in obj) {
|
|
356
|
-
result[key] = obj[key];
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
return result;
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
export {
|
|
363
|
-
getPackageManager,
|
|
364
|
-
cwd,
|
|
365
|
-
create
|
|
366
|
-
};
|