create-weave-backend-app 2.6.0 → 2.7.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.
Files changed (65) hide show
  1. package/dist/{create-app-viPT34gS.js → create-app-d0GGTvpm.js} +49 -23
  2. package/dist/create-app-d0GGTvpm.js.map +1 -0
  3. package/dist/create-app.js +1 -1
  4. package/dist/index.js +87 -2
  5. package/dist/index.js.map +1 -1
  6. package/package.json +4 -1
  7. package/template/+express+azure-web-pubsub/fonts/Impact.ttf +0 -0
  8. package/template/+express+azure-web-pubsub/fonts/Verdana-Bold.ttf +0 -0
  9. package/template/+express+azure-web-pubsub/fonts/Verdana-BoldItalic.ttf +0 -0
  10. package/template/+express+azure-web-pubsub/fonts/Verdana-Italic.ttf +0 -0
  11. package/template/+express+azure-web-pubsub/fonts/Verdana.ttf +0 -0
  12. package/template/+express+azure-web-pubsub/fonts/inter-bold.ttf +0 -0
  13. package/template/+express+azure-web-pubsub/fonts/inter-italic-bold.ttf +0 -0
  14. package/template/+express+azure-web-pubsub/fonts/inter-italic.ttf +0 -0
  15. package/template/+express+azure-web-pubsub/fonts/inter-regular.ttf +0 -0
  16. package/template/+express+azure-web-pubsub/fonts/sansita-bold.ttf +0 -0
  17. package/template/+express+azure-web-pubsub/fonts/sansita-regular.ttf +0 -0
  18. package/template/+express+azure-web-pubsub/nodemon.json +6 -0
  19. package/template/+express+azure-web-pubsub/src/api/v1/controllers/getImage.ts +2 -2
  20. package/template/+express+azure-web-pubsub/src/api/v1/controllers/getRoom.ts +33 -0
  21. package/template/+express+azure-web-pubsub/src/api/v1/controllers/getRoomConnect.ts +1 -1
  22. package/template/+express+azure-web-pubsub/src/api/v1/controllers/postExportToImage.ts +98 -0
  23. package/template/+express+azure-web-pubsub/src/api/v1/controllers/postRemoveBackground.ts +1 -2
  24. package/template/+express+azure-web-pubsub/src/api/v1/controllers/workers/exportToImage.ts +52 -0
  25. package/template/+express+azure-web-pubsub/src/api/v1/controllers/workers/types.ts +5 -0
  26. package/template/+express+azure-web-pubsub/src/api/v1/router.ts +6 -2
  27. package/template/+express+azure-web-pubsub/src/canvas/fonts.ts +167 -0
  28. package/template/+express+azure-web-pubsub/src/canvas/nodes/color-token/color-token.ts +155 -0
  29. package/template/+express+azure-web-pubsub/src/canvas/types.ts +13 -0
  30. package/template/+express+azure-web-pubsub/src/canvas/weave.ts +207 -0
  31. package/template/+express+azure-web-pubsub/src/store.ts +9 -3
  32. package/template/+express+azure-web-pubsub/src/utils.ts +23 -0
  33. package/template/+express+azure-web-pubsub/src/workers/workers.ts +40 -0
  34. package/template/+express+azure-web-pubsub/tsconfig.json +1 -1
  35. package/template/+express+websockets/example.gitignore +5 -5
  36. package/template/+express+websockets/fonts/Impact.ttf +0 -0
  37. package/template/+express+websockets/fonts/Verdana-Bold.ttf +0 -0
  38. package/template/+express+websockets/fonts/Verdana-BoldItalic.ttf +0 -0
  39. package/template/+express+websockets/fonts/Verdana-Italic.ttf +0 -0
  40. package/template/+express+websockets/fonts/Verdana.ttf +0 -0
  41. package/template/+express+websockets/fonts/inter-bold.ttf +0 -0
  42. package/template/+express+websockets/fonts/inter-italic-bold.ttf +0 -0
  43. package/template/+express+websockets/fonts/inter-italic.ttf +0 -0
  44. package/template/+express+websockets/fonts/inter-regular.ttf +0 -0
  45. package/template/+express+websockets/fonts/sansita-bold.ttf +0 -0
  46. package/template/+express+websockets/fonts/sansita-regular.ttf +0 -0
  47. package/template/+express+websockets/nodemon.json +6 -0
  48. package/template/+express+websockets/src/api/v1/controllers/getImage.ts +2 -2
  49. package/template/+express+websockets/src/api/v1/controllers/getRoom.ts +33 -0
  50. package/template/+express+websockets/src/api/v1/controllers/postExportToImage.ts +96 -0
  51. package/template/+express+websockets/src/api/v1/controllers/postRemoveBackground.ts +1 -2
  52. package/template/+express+websockets/src/api/v1/controllers/workers/exportToImage.ts +48 -0
  53. package/template/+express+websockets/src/api/v1/controllers/workers/types.ts +1 -0
  54. package/template/+express+websockets/src/api/v1/router.ts +7 -1
  55. package/template/+express+websockets/src/canvas/fonts.ts +163 -0
  56. package/template/+express+websockets/src/canvas/nodes/color-token/color-token.ts +151 -0
  57. package/template/+express+websockets/src/canvas/types.ts +13 -0
  58. package/template/+express+websockets/src/canvas/weave.ts +203 -0
  59. package/template/+express+websockets/src/server.ts +4 -0
  60. package/template/+express+websockets/src/store.ts +2 -2
  61. package/template/+express+websockets/src/utils.ts +23 -0
  62. package/template/+express+websockets/src/workers/workers.ts +36 -0
  63. package/template/+express+websockets/tsconfig.json +1 -1
  64. package/template/package.json +7 -1
  65. package/dist/create-app-viPT34gS.js.map +0 -1
@@ -76,11 +76,12 @@ function tryGitInit(root) {
76
76
  //#endregion
77
77
  //#region src/versions.js
78
78
  const versions = {
79
- "@inditextech/weave-types": "2.6.0",
80
- "@inditextech/weave-sdk": "2.6.0",
81
- "@inditextech/weave-store-websockets": "2.6.0",
82
- "@inditextech/weave-store-azure-web-pubsub": "2.6.0",
83
- "@inditextech/weave-react": "2.6.0"
79
+ "@inditextech/weave-react": "2.7.0",
80
+ "@inditextech/weave-sdk": "2.7.0",
81
+ "@inditextech/weave-store-azure-web-pubsub": "2.7.0",
82
+ "@inditextech/weave-store-standalone": "2.7.0",
83
+ "@inditextech/weave-store-websockets": "2.7.0",
84
+ "@inditextech/weave-types": "2.7.0"
84
85
  };
85
86
 
86
87
  //#endregion
@@ -88,20 +89,24 @@ const versions = {
88
89
  var name = "example-versions";
89
90
  var version = "0.0.0";
90
91
  var private$1 = true;
92
+ var type = "module";
91
93
  var description = "Used to track dependency versions in create-*-app";
92
94
  var license = "MIT";
93
95
  var dependencies = {
94
96
  "@dotenvx/dotenvx": "^1.44.0",
95
97
  "@imgly/background-removal-node": "^1.4.5",
96
98
  "@inditextech/weave-sdk": "0.0.0",
97
- "@inditextech/weave-store-websockets": "0.0.0",
98
99
  "@inditextech/weave-store-azure-web-pubsub": "0.0.0",
100
+ "@inditextech/weave-store-standalone": "0.0.0",
101
+ "@inditextech/weave-store-websockets": "0.0.0",
102
+ "archiver": "^7.0.1",
99
103
  "cors": "^2.8.5",
100
104
  "dotenv": "^16.4.7",
101
105
  "express": "^4.21.2",
102
106
  "helmet": "^8.0.0",
103
107
  "morgan": "^1.10.0",
104
108
  "multer": "^2.0.2",
109
+ "p-queue": "^9.0.1",
105
110
  "pino": "^9.6.0",
106
111
  "pino-http": "^10.4.0",
107
112
  "pino-pretty": "^13.0.0",
@@ -112,6 +117,7 @@ var dependencies = {
112
117
  };
113
118
  var devDependencies = {
114
119
  "@eslint/js": "^9.26.0",
120
+ "@types/archiver": "^7.0.0",
115
121
  "@types/cors": "^2.8.17",
116
122
  "@types/express": "^5.0.0",
117
123
  "@types/morgan": "^1.9.9",
@@ -123,6 +129,7 @@ var devDependencies = {
123
129
  "eslint": "^9.26.0",
124
130
  "eslint-config-prettier": "^10.1.5",
125
131
  "globals": "^16.0.0",
132
+ "make-dir-cli": "^4.0.0",
126
133
  "nodemon": "^3.1.9",
127
134
  "prettier": "^3.5.2",
128
135
  "tsc-alias": "^1.8.16",
@@ -134,6 +141,7 @@ var package_default = {
134
141
  name,
135
142
  version,
136
143
  private: private$1,
144
+ type,
137
145
  description,
138
146
  license,
139
147
  dependencies,
@@ -216,16 +224,22 @@ async function copy(from, to, rename = (s) => s) {
216
224
  function createPackageJson(projectName, options) {
217
225
  if (options.template === "+express+azure-web-pubsub") {
218
226
  const dependencies$2 = {
219
- ...pick(versions, ["@inditextech/weave-sdk", "@inditextech/weave-store-azure-web-pubsub"]),
227
+ ...pick(versions, [
228
+ "@inditextech/weave-sdk",
229
+ "@inditextech/weave-store-azure-web-pubsub",
230
+ "@inditextech/weave-store-standalone"
231
+ ]),
220
232
  ...pick(package_default.dependencies, [
221
233
  "@dotenvx/dotenvx",
222
234
  "@imgly/background-removal-node",
235
+ "archiver",
223
236
  "cors",
224
237
  "dotenv",
225
238
  "express",
226
239
  "helmet",
227
240
  "morgan",
228
241
  "multer",
242
+ "p-queue",
229
243
  "pino",
230
244
  "pino-http",
231
245
  "pino-pretty",
@@ -237,6 +251,7 @@ function createPackageJson(projectName, options) {
237
251
  };
238
252
  const devDependencies$2 = { ...pick(package_default.devDependencies, [
239
253
  "@eslint/js",
254
+ "@types/archiver",
240
255
  "@types/cors",
241
256
  "@types/express",
242
257
  "@types/morgan",
@@ -248,6 +263,7 @@ function createPackageJson(projectName, options) {
248
263
  "eslint",
249
264
  "eslint-config-prettier",
250
265
  "globals",
266
+ "make-dir-cli",
251
267
  "nodemon",
252
268
  "prettier",
253
269
  "tsc-alias",
@@ -256,18 +272,19 @@ function createPackageJson(projectName, options) {
256
272
  "typescript-eslint"
257
273
  ]) };
258
274
  return {
275
+ ...package_default,
259
276
  name: projectName,
260
- type: "module",
261
277
  scripts: {
262
- build: "tsc && tsc-alias -p tsconfig.json && mkdir -p ./dist/public && mkdir -p ./dist/temp && cp-cli ./public ./dist/public && cp-cli ./package.json ./dist/package.json",
263
- copyAssets: "mkdir -p ./public && cp-cli node_modules/@imgly/background-removal-node/dist/. public",
264
- dev: "nodemon --exec \"dotenvx run -- tsx src/server.ts\"",
278
+ build: "tsc && tsc-alias -p tsconfig.json && make-dir ./dist/public && make-dir ./dist/temp && cp-cli ./public ./dist/public && cp-cli ./package.json ./dist/package.json",
279
+ ["copy:assets"]: "make-dir ./public && cp-cli node_modules/@imgly/background-removal-node/dist/. public",
280
+ ["copy:fonts"]: "cp-cli fonts/. dist/fonts",
281
+ dev: "nodemon",
265
282
  format: "prettier --write \"src/**/*.{ts,tsx}\"",
266
283
  lint: "eslint ./src",
267
- postinstall: "npm run copyAssets",
268
- start: "dotenvx run -- tsx server.js"
284
+ postinstall: "npm run copy:assets",
285
+ start: "node --experimental-specifier-resolution=node --loader --env-file=.env ts-node/esm dist/server.js",
286
+ ["start:dev"]: "cp-cli .env ./dist/.env && cd dist && NODE_ENV=development NODE_OPTIONS=\"--max-old-space-size=4096\" node --env-file=.env ./server.js"
269
287
  },
270
- private: true,
271
288
  dependencies: sortObjectKeys(dependencies$2),
272
289
  devDependencies: sortObjectKeys(devDependencies$2)
273
290
  };
@@ -276,12 +293,14 @@ function createPackageJson(projectName, options) {
276
293
  ...pick(package_default.dependencies, [
277
294
  "@dotenvx/dotenvx",
278
295
  "@imgly/background-removal-node",
296
+ "archiver",
279
297
  "cors",
280
298
  "dotenv",
281
299
  "express",
282
300
  "helmet",
283
301
  "morgan",
284
302
  "multer",
303
+ "p-queue",
285
304
  "pino",
286
305
  "pino-http",
287
306
  "pino-pretty",
@@ -290,10 +309,15 @@ function createPackageJson(projectName, options) {
290
309
  "uuid",
291
310
  "zod"
292
311
  ]),
293
- ...pick(versions, ["@inditextech/weave-sdk", "@inditextech/weave-store-websockets"])
312
+ ...pick(versions, [
313
+ "@inditextech/weave-sdk",
314
+ "@inditextech/weave-store-websockets",
315
+ "@inditextech/weave-store-standalone"
316
+ ])
294
317
  };
295
318
  const devDependencies$1 = { ...pick(package_default.devDependencies, [
296
319
  "@eslint/js",
320
+ "@types/archiver",
297
321
  "@types/cors",
298
322
  "@types/express",
299
323
  "@types/morgan",
@@ -305,6 +329,7 @@ function createPackageJson(projectName, options) {
305
329
  "eslint",
306
330
  "eslint-config-prettier",
307
331
  "globals",
332
+ "make-dir-cli",
308
333
  "nodemon",
309
334
  "prettier",
310
335
  "tsc-alias",
@@ -313,17 +338,18 @@ function createPackageJson(projectName, options) {
313
338
  "typescript-eslint"
314
339
  ]) };
315
340
  return {
341
+ ...package_default,
316
342
  name: projectName,
317
- version: "0.0.0",
318
- private: true,
319
343
  scripts: {
320
- build: "tsc && tsc-alias -p tsconfig.json && mkdir -p ./dist/public && mkdir -p ./dist/temp && cp-cli ./public ./dist/public && cp-cli ./package.json ./dist/package.json",
321
- copyAssets: "mkdir -p ./public && cp-cli node_modules/@imgly/background-removal-node/dist/. public",
322
- dev: "nodemon --exec \"dotenvx run -- tsx src/server.ts\"",
344
+ build: "tsc && tsc-alias -p tsconfig.json && make-dir ./dist/public && make-dir ./dist/temp && cp-cli ./public ./dist/public && cp-cli ./package.json ./dist/package.json",
345
+ ["copy:assets"]: "make-dir ./public && cp-cli node_modules/@imgly/background-removal-node/dist/. public",
346
+ ["copy:fonts"]: "cp-cli fonts/. dist/fonts",
347
+ dev: "nodemon",
323
348
  format: "prettier --write \"src/**/*.{ts,tsx}\"",
324
349
  lint: "eslint ./src",
325
- postinstall: "npm run copyAssets",
326
- start: "dotenvx run -- tsx server.js"
350
+ postinstall: "npm run copy:assets",
351
+ start: "node --experimental-specifier-resolution=node --loader --env-file=.env ts-node/esm dist/server.js",
352
+ ["start:dev"]: "cp-cli .env ./dist/.env && cd dist && NODE_ENV=development NODE_OPTIONS=\"--max-old-space-size=4096\" node --env-file=.env ./server.js"
327
353
  },
328
354
  dependencies: sortObjectKeys(dependencies$1),
329
355
  devDependencies: sortObjectKeys(devDependencies$1)
@@ -341,4 +367,4 @@ function pick(obj, keys) {
341
367
 
342
368
  //#endregion
343
369
  export { create, cwd, getPackageManager };
344
- //# sourceMappingURL=create-app-viPT34gS.js.map
370
+ //# sourceMappingURL=create-app-d0GGTvpm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-app-d0GGTvpm.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-react\":\"2.7.0\",\"@inditextech/weave-sdk\":\"2.7.0\",\"@inditextech/weave-store-azure-web-pubsub\":\"2.7.0\",\"@inditextech/weave-store-standalone\":\"2.7.0\",\"@inditextech/weave-store-websockets\":\"2.7.0\",\"@inditextech/weave-types\":\"2.7.0\"}","{\n \"name\": \"example-versions\",\n \"version\": \"0.0.0\",\n \"private\": true,\n \"type\": \"module\",\n \"description\": \"Used to track dependency versions in create-*-app\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@dotenvx/dotenvx\": \"^1.44.0\",\n \"@imgly/background-removal-node\": \"^1.4.5\",\n \"@inditextech/weave-sdk\": \"0.0.0\",\n \"@inditextech/weave-store-azure-web-pubsub\": \"0.0.0\",\n \"@inditextech/weave-store-standalone\": \"0.0.0\",\n \"@inditextech/weave-store-websockets\": \"0.0.0\",\n \"archiver\": \"^7.0.1\",\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\": \"^2.0.2\",\n \"p-queue\": \"^9.0.1\",\n \"pino\": \"^9.6.0\",\n \"pino-http\": \"^10.4.0\",\n \"pino-pretty\": \"^13.0.0\",\n \"tslib\": \"^2.8.1\",\n \"tsx\": \"^4.19.3\",\n \"uuid\": \"^11.1.0\",\n \"zod\": \"^3.24.2\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.26.0\",\n \"@types/archiver\": \"^7.0.0\",\n \"@types/cors\": \"^2.8.17\",\n \"@types/express\": \"^5.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 \"cp-cli\": \"^2.0.0\",\n \"eslint\": \"^9.26.0\",\n \"eslint-config-prettier\": \"^10.1.5\",\n \"globals\": \"^16.0.0\",\n \"make-dir-cli\": \"^4.0.0\",\n \"nodemon\": \"^3.1.9\",\n \"prettier\": \"^3.5.2\",\n \"tsc-alias\": \"^1.8.16\",\n \"tsconfig-paths\": \"^4.2.0\",\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 const dependencies = {\n ...pick(localVersions, [\n '@inditextech/weave-sdk',\n '@inditextech/weave-store-azure-web-pubsub',\n '@inditextech/weave-store-standalone',\n ]),\n ...pick(versionPkg.dependencies, [\n '@dotenvx/dotenvx',\n '@imgly/background-removal-node',\n 'archiver',\n 'cors',\n 'dotenv',\n 'express',\n 'helmet',\n 'morgan',\n 'multer',\n 'p-queue',\n 'pino',\n 'pino-http',\n 'pino-pretty',\n 'tslib',\n 'tsx',\n 'uuid',\n 'zod',\n ]),\n };\n\n const devDependencies = {\n ...pick(versionPkg.devDependencies, [\n '@eslint/js',\n '@types/archiver',\n '@types/cors',\n '@types/express',\n '@types/morgan',\n '@types/multer',\n '@types/node',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'cp-cli',\n 'eslint',\n 'eslint-config-prettier',\n 'globals',\n 'make-dir-cli',\n 'nodemon',\n 'prettier',\n 'tsc-alias',\n 'tsconfig-paths',\n 'typescript',\n 'typescript-eslint',\n ]),\n };\n\n return {\n ...versionPkg,\n name: projectName,\n scripts: {\n build:\n 'tsc && tsc-alias -p tsconfig.json && make-dir ./dist/public && make-dir ./dist/temp && cp-cli ./public ./dist/public && cp-cli ./package.json ./dist/package.json',\n ['copy:assets']:\n 'make-dir ./public && cp-cli node_modules/@imgly/background-removal-node/dist/. public',\n ['copy:fonts']: 'cp-cli fonts/. dist/fonts',\n dev: 'nodemon',\n format: 'prettier --write \"src/**/*.{ts,tsx}\"',\n lint: 'eslint ./src',\n postinstall: 'npm run copy:assets',\n start:\n 'node --experimental-specifier-resolution=node --loader --env-file=.env ts-node/esm dist/server.js',\n ['start:dev']:\n 'cp-cli .env ./dist/.env && cd dist && NODE_ENV=development NODE_OPTIONS=\"--max-old-space-size=4096\" node --env-file=.env ./server.js',\n },\n dependencies: sortObjectKeys(dependencies),\n devDependencies: sortObjectKeys(devDependencies),\n };\n }\n\n const dependencies = {\n ...pick(versionPkg.dependencies, [\n '@dotenvx/dotenvx',\n '@imgly/background-removal-node',\n 'archiver',\n 'cors',\n 'dotenv',\n 'express',\n 'helmet',\n 'morgan',\n 'multer',\n 'p-queue',\n 'pino',\n 'pino-http',\n 'pino-pretty',\n 'tslib',\n 'tsx',\n 'uuid',\n 'zod',\n ]),\n ...pick(localVersions, [\n '@inditextech/weave-sdk',\n '@inditextech/weave-store-websockets',\n '@inditextech/weave-store-standalone',\n ]),\n };\n\n const devDependencies = {\n ...pick(versionPkg.devDependencies, [\n '@eslint/js',\n '@types/archiver',\n '@types/cors',\n '@types/express',\n '@types/morgan',\n '@types/multer',\n '@types/node',\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'cp-cli',\n 'eslint',\n 'eslint-config-prettier',\n 'globals',\n 'make-dir-cli',\n 'nodemon',\n 'prettier',\n 'tsc-alias',\n 'tsconfig-paths',\n 'typescript',\n 'typescript-eslint',\n ]),\n };\n\n return {\n ...versionPkg,\n name: projectName,\n scripts: {\n build:\n 'tsc && tsc-alias -p tsconfig.json && make-dir ./dist/public && make-dir ./dist/temp && cp-cli ./public ./dist/public && cp-cli ./package.json ./dist/package.json',\n ['copy:assets']:\n 'make-dir ./public && cp-cli node_modules/@imgly/background-removal-node/dist/. public',\n ['copy:fonts']: 'cp-cli fonts/. dist/fonts',\n dev: 'nodemon',\n format: 'prettier --write \"src/**/*.{ts,tsx}\"',\n lint: 'eslint ./src',\n postinstall: 'npm run copy:assets',\n start:\n 'node --experimental-specifier-resolution=node --loader --env-file=.env ts-node/esm dist/server.js',\n ['start:dev']:\n 'cp-cli .env ./dist/.env && cd dist && NODE_ENV=development NODE_OPTIONS=\"--max-old-space-size=4096\" node --env-file=.env ./server.js',\n },\n dependencies: sortObjectKeys(dependencies),\n devDependencies: sortObjectKeys(devDependencies),\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction sortObjectKeys<T extends Record<string, any>>(obj: T): T {\n const sortedEntries = Object.keys(obj)\n .sort()\n .map((key) => [key, obj[key]] as [keyof T, T[keyof T]]);\n\n return Object.fromEntries(sortedEntries) as T;\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":"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;IACA;IACA;GACD,EAAC;GACF,GAAG,KAAK,gBAAW,cAAc;IAC/B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD,EAAC;EACH;EAED,MAAM,oBAAkB,EACtB,GAAG,KAAK,gBAAW,iBAAiB;GAClC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD,EAAC,CACH;AAED,SAAO;GACL,GAAG;GACH,MAAM;GACN,SAAS;IACP,OACE;KACD,gBACC;KACD,eAAe;IAChB,KAAK;IACL,QAAQ;IACR,MAAM;IACN,aAAa;IACb,OACE;KACD,cACC;GACH;GACD,cAAc,eAAe,eAAa;GAC1C,iBAAiB,eAAe,kBAAgB;EACjD;CACF;CAED,MAAM,iBAAe;EACnB,GAAG,KAAK,gBAAW,cAAc;GAC/B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD,EAAC;EACF,GAAG,KAAK,UAAe;GACrB;GACA;GACA;EACD,EAAC;CACH;CAED,MAAM,oBAAkB,EACtB,GAAG,KAAK,gBAAW,iBAAiB;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,EAAC,CACH;AAED,QAAO;EACL,GAAG;EACH,MAAM;EACN,SAAS;GACP,OACE;IACD,gBACC;IACD,eAAe;GAChB,KAAK;GACL,QAAQ;GACR,MAAM;GACN,aAAa;GACb,OACE;IACD,cACC;EACH;EACD,cAAc,eAAe,eAAa;EAC1C,iBAAiB,eAAe,kBAAgB;CACjD;AACF;AAGD,SAAS,eAA8CO,KAAW;CAChE,MAAM,gBAAgB,OAAO,KAAK,IAAI,CACnC,MAAM,CACN,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAK,EAA0B;AAEzD,QAAO,OAAO,YAAY,cAAc;AACzC;AAED,SAAS,KACPA,KACAC,MACY;CACZ,MAAMC,SAAqB,CAAE;AAE7B,MAAK,MAAM,OAAO,KAChB,KAAI,OAAO,IACT,QAAO,OAAO,IAAI;AAItB,QAAO;AACR"}
@@ -1,3 +1,3 @@
1
- import { create } from "./create-app-viPT34gS.js";
1
+ import { create } from "./create-app-d0GGTvpm.js";
2
2
 
3
3
  export { create };
package/dist/index.js CHANGED
@@ -1,14 +1,99 @@
1
1
  #!/usr/bin/env node
2
- import { create, cwd, getPackageManager } from "./create-app-viPT34gS.js";
2
+ import { create, cwd, getPackageManager } from "./create-app-d0GGTvpm.js";
3
3
  import path from "node:path";
4
4
  import fs from "node:fs/promises";
5
5
  import { cancel, confirm, group, intro, isCancel, outro, select, spinner, text } from "@clack/prompts";
6
6
  import pc from "picocolors";
7
7
 
8
+ //#region package.json
9
+ var name = "create-weave-backend-app";
10
+ var version = "2.7.0";
11
+ var description = "Create a new backend artifact for site with Weave.js";
12
+ var keywords = [
13
+ "NextJs",
14
+ "next",
15
+ "react",
16
+ "Weave.js"
17
+ ];
18
+ var homepage = "https://inditextech.github.io/weavejs";
19
+ var repository = "github:InditexTech/weavejs";
20
+ var license = "Apache-2.0";
21
+ var author = "Jesus Manuel Piñeiro Cid <jesusmpc@inditex.com>";
22
+ var type = "module";
23
+ var bin = "./dist/index.js";
24
+ var module = "./dist/create-app.js";
25
+ var types = "./dist/create-app.d.ts";
26
+ var files = ["template/*", "dist/*"];
27
+ var scripts = {
28
+ "bump:snapshot": "tsc --noEmit && tsdown --sourcemap",
29
+ "build": "tsc --noEmit && tsdown",
30
+ "clean": "rimraf dist",
31
+ "dev": "tsdown --watch",
32
+ "format": "prettier --write ./src ./template",
33
+ "link": "npm link",
34
+ "lint:fix": "npm run lint -- --fix",
35
+ "lint": "eslint ./src",
36
+ "pack": "npm pack",
37
+ "publish:snapshot": "npm publish",
38
+ "release:perform": "npm publish --access public",
39
+ "release:prepare": "npm run verify",
40
+ "test": "echo \"No tests defined\" && exit 0",
41
+ "types:check": "tsc --noEmit",
42
+ "unpublish": "npm unpublish --force",
43
+ "verify": "npm run lint && npm run test && npm run build",
44
+ "version:development": "npm version $(npm version minor)-SNAPSHOT",
45
+ "version:release": "npm version $RELEASE_VERSION -m \"[npm-scripts] prepare release $RELEASE_VERSION\" --tag-version-prefix \"\""
46
+ };
47
+ var dependencies = {
48
+ "@clack/prompts": "^0.10.1",
49
+ "cross-spawn": "^7.0.6",
50
+ "picocolors": "^1.1.1"
51
+ };
52
+ var devDependencies = {
53
+ "@types/cross-spawn": "^6.0.6",
54
+ "@types/node": "22.14.1",
55
+ "fast-glob": "^3.3.3",
56
+ "eslint": "8.57.1",
57
+ "eslint-config-eslint": "11.0.0",
58
+ "tsdown": "^0.10.2"
59
+ };
60
+ var engines = { "node": "^18.12 || ^20.11 || ^22.11" };
61
+ var publishConfig = { "access": "public" };
62
+ var nx = { "implicitDependencies": [
63
+ "@inditextech/weave-react",
64
+ "@inditextech/weave-sdk",
65
+ "@inditextech/weave-store-azure-web-pubsub",
66
+ "@inditextech/weave-store-standalone",
67
+ "@inditextech/weave-store-websockets",
68
+ "@inditextech/weave-types"
69
+ ] };
70
+ var package_default = {
71
+ name,
72
+ version,
73
+ description,
74
+ keywords,
75
+ homepage,
76
+ repository,
77
+ license,
78
+ author,
79
+ type,
80
+ bin,
81
+ module,
82
+ types,
83
+ files,
84
+ scripts,
85
+ dependencies,
86
+ devDependencies,
87
+ engines,
88
+ publishConfig,
89
+ nx
90
+ };
91
+
92
+ //#endregion
8
93
  //#region src/index.ts
9
94
  const manager = getPackageManager();
10
95
  async function main() {
11
- intro(pc.bgCyan(pc.bold("Create Weave.js Backend Service")));
96
+ intro(pc.bgCyan(pc.bold(`Create Weave.js Backend Service [${package_default.version}]`)));
12
97
  const options = await group({
13
98
  name: () => text({
14
99
  message: "Project name",
package/dist/index.js.map CHANGED
@@ -1 +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 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;AAE7D,SAAQ,KAAK,EAAE;AAChB;AAED,MAAM,CAAC,MAAM,CAACA,MAAe;AAC3B,SAAQ,MAAM,EAAE;AAChB,OAAM;AACP,EAAC"}
1
+ {"version":3,"file":"index.js","names":["e: unknown"],"sources":["../package.json","../src/index.ts"],"sourcesContent":["{\n \"name\": \"create-weave-backend-app\",\n \"version\": \"2.7.0\",\n \"description\": \"Create a new backend artifact for site with Weave.js\",\n \"keywords\": [\n \"NextJs\",\n \"next\",\n \"react\",\n \"Weave.js\"\n ],\n \"homepage\": \"https://inditextech.github.io/weavejs\",\n \"repository\": \"github:InditexTech/weavejs\",\n \"license\": \"Apache-2.0\",\n \"author\": \"Jesus Manuel Piñeiro Cid <jesusmpc@inditex.com>\",\n \"type\": \"module\",\n \"bin\": \"./dist/index.js\",\n \"module\": \"./dist/create-app.js\",\n \"types\": \"./dist/create-app.d.ts\",\n \"files\": [\n \"template/*\",\n \"dist/*\"\n ],\n \"scripts\": {\n \"bump:snapshot\": \"tsc --noEmit && tsdown --sourcemap\",\n \"build\": \"tsc --noEmit && tsdown\",\n \"clean\": \"rimraf dist\",\n \"dev\": \"tsdown --watch\",\n \"format\": \"prettier --write ./src ./template\",\n \"link\": \"npm link\",\n \"lint:fix\": \"npm run lint -- --fix\",\n \"lint\": \"eslint ./src\",\n \"pack\": \"npm pack\",\n \"publish:snapshot\": \"npm publish\",\n \"release:perform\": \"npm publish --access public\",\n \"release:prepare\": \"npm run verify\",\n \"test\": \"echo \\\"No tests defined\\\" && exit 0\",\n \"types:check\": \"tsc --noEmit\",\n \"unpublish\": \"npm unpublish --force\",\n \"verify\": \"npm run lint && npm run test && npm run build\",\n \"version:development\": \"npm version $(npm version minor)-SNAPSHOT\",\n \"version:release\": \"npm version $RELEASE_VERSION -m \\\"[npm-scripts] prepare release $RELEASE_VERSION\\\" --tag-version-prefix \\\"\\\"\"\n },\n \"dependencies\": {\n \"@clack/prompts\": \"^0.10.1\",\n \"cross-spawn\": \"^7.0.6\",\n \"picocolors\": \"^1.1.1\"\n },\n \"devDependencies\": {\n \"@types/cross-spawn\": \"^6.0.6\",\n \"@types/node\": \"22.14.1\",\n \"fast-glob\": \"^3.3.3\",\n \"eslint\": \"8.57.1\",\n \"eslint-config-eslint\": \"11.0.0\",\n \"tsdown\": \"^0.10.2\"\n },\n \"engines\": {\n \"node\": \"^18.12 || ^20.11 || ^22.11\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"nx\": {\n \"implicitDependencies\": [\n \"@inditextech/weave-react\",\n \"@inditextech/weave-sdk\",\n \"@inditextech/weave-store-azure-web-pubsub\",\n \"@inditextech/weave-store-standalone\",\n \"@inditextech/weave-store-websockets\",\n \"@inditextech/weave-types\"\n ]\n }\n}\n","#!/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';\nimport packageJson from '../package.json' assert { type: 'json' };\n\nconst manager = getPackageManager();\n\nasync function main(): Promise<void> {\n intro(\n pc.bgCyan(\n pc.bold(`Create Weave.js Backend Service [${packageJson.version}]`)\n )\n );\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 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 as 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 process.exit(0);\n}\n\nmain().catch((e: unknown) => {\n console.error(e);\n throw e;\n});\n"],"mappings":";;;;;;;;WACU;cACG;kBACI;eACH;CACV;CACA;CACA;CACA;AACD;eACW;iBACE;cACH;aACD;WACF;UACD;aACG;YACD;YACA,CACP,cACA,QACD;cACU;CACT,iBAAiB;CACjB,SAAS;CACT,SAAS;CACT,OAAO;CACP,UAAU;CACV,QAAQ;CACR,YAAY;CACZ,QAAQ;CACR,QAAQ;CACR,oBAAoB;CACpB,mBAAmB;CACnB,mBAAmB;CACnB,QAAQ;CACR,eAAe;CACf,aAAa;CACb,UAAU;CACV,uBAAuB;CACvB,mBAAmB;AACpB;mBACe;CACd,kBAAkB;CAClB,eAAe;CACf,cAAc;AACf;sBACkB;CACjB,sBAAsB;CACtB,eAAe;CACf,aAAa;CACb,UAAU;CACV,wBAAwB;CACxB,UAAU;AACX;cACU,EACT,QAAQ,6BACT;oBACgB,EACf,UAAU,SACX;SACK,EACJ,wBAAwB;CACtB;CACA;CACA;CACA;CACA;CACA;AACD,EACF;sBAtEH;;;;;;;;;;;;;;;;;;;;AAuEC;;;;ACnDD,MAAM,UAAU,mBAAmB;AAEnC,eAAe,OAAsB;AACnC,OACE,GAAG,OACD,GAAG,MAAM,mCAAmC,gBAAY,QAAQ,GAAG,CACpE,CACF;CAED,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;EACJ,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;AAE7D,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": "2.6.0",
3
+ "version": "2.7.0",
4
4
  "description": "Create a new backend artifact for site with Weave.js",
5
5
  "keywords": [
6
6
  "NextJs",
@@ -49,6 +49,8 @@
49
49
  "@types/cross-spawn": "^6.0.6",
50
50
  "@types/node": "22.14.1",
51
51
  "fast-glob": "^3.3.3",
52
+ "eslint": "8.57.1",
53
+ "eslint-config-eslint": "11.0.0",
52
54
  "tsdown": "^0.10.2"
53
55
  },
54
56
  "engines": {
@@ -62,6 +64,7 @@
62
64
  "@inditextech/weave-react",
63
65
  "@inditextech/weave-sdk",
64
66
  "@inditextech/weave-store-azure-web-pubsub",
67
+ "@inditextech/weave-store-standalone",
65
68
  "@inditextech/weave-store-websockets",
66
69
  "@inditextech/weave-types"
67
70
  ]
@@ -0,0 +1,6 @@
1
+ {
2
+ "watch": ["src"],
3
+ "ext": "ts,js,json",
4
+ "ignore": ["dist"],
5
+ "exec": "npm run build && npm run copy:assets && npm run copy:fonts && npm run start:dev"
6
+ }
@@ -18,8 +18,8 @@ export const getImageController = () => {
18
18
  const filePath = await persistenceHandler.getFilePath(fileName)
19
19
 
20
20
  if (filePath) {
21
- const mimeType = await persistenceHandler.getMimeType(fileName)
22
- res.setHeader('Content-Type', mimeType)
21
+ // const mimeType = await persistenceHandler.getMimeType(fileName)
22
+ // res.setHeader('Content-Type', mimeType)
23
23
  res.sendFile(filePath, (err) => {
24
24
  if (err) {
25
25
  console.error('File not found or error sending file:', err.message)
@@ -0,0 +1,33 @@
1
+ import path from 'path'
2
+ import { fileURLToPath } from 'node:url'
3
+ import { Request, Response } from 'express'
4
+ import { createFolder, existsFolder, existFile } from '@/utils.js'
5
+
6
+ const __filename = fileURLToPath(import.meta.url)
7
+ const __dirname = path.dirname(__filename)
8
+
9
+ export const getRoomController =
10
+ () =>
11
+ async (req: Request, res: Response): Promise<void> => {
12
+ const roomId = req.params.roomId
13
+
14
+ try {
15
+ const roomsFolder = path.join(__dirname, '..', '..', '..', 'rooms')
16
+
17
+ if (!(await existsFolder(roomsFolder))) {
18
+ await createFolder(roomsFolder)
19
+ }
20
+
21
+ const roomsFile = path.join(roomsFolder, roomId)
22
+
23
+ if (!(await existFile(roomsFile))) {
24
+ res.status(404).json({ status: 'KO', message: 'Room not found' })
25
+ return
26
+ }
27
+
28
+ res.download(roomsFile)
29
+ } catch (error) {
30
+ console.log(error)
31
+ res.status(500).json({ status: 'KO', message: 'Error fetching the room' })
32
+ }
33
+ }
@@ -1,5 +1,5 @@
1
1
  import { Request, Response } from 'express'
2
- import { getAzureWebPubsubServer } from '@/store'
2
+ import { getAzureWebPubsubServer } from '@/store.js'
3
3
 
4
4
  export const getRoomConnectController =
5
5
  () =>
@@ -0,0 +1,98 @@
1
+ // SPDX-FileCopyrightText: 2025 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.)
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+
5
+ import path from 'node:path'
6
+ import { fileURLToPath } from 'node:url'
7
+ import { z } from 'zod'
8
+ import { Request, Response } from 'express'
9
+ import archiver from 'archiver'
10
+ import { WeaveExportFormats } from '@inditextech/weave-types'
11
+ import { getServiceConfig } from '../../../config/config.js'
12
+ import { runWorker } from '../../../workers/workers.js'
13
+ import { ExportToImageWorkerResult } from './workers/types.js'
14
+
15
+ const __filename = fileURLToPath(import.meta.url)
16
+ const __dirname = path.dirname(__filename)
17
+
18
+ const WeaveExportFormatsSchema: z.ZodType<WeaveExportFormats> = z.enum([
19
+ 'image/png',
20
+ 'image/jpeg'
21
+ ])
22
+
23
+ const payloadSchema = z.object({
24
+ roomData: z.string().base64(),
25
+ nodes: z.array(z.string()).optional().default([]),
26
+ options: z.object({
27
+ format: WeaveExportFormatsSchema.optional().default('image/png'),
28
+ backgroundColor: z.string().optional().default('transparent'),
29
+ padding: z.number().min(0).optional().default(20),
30
+ pixelRatio: z.number().min(1).optional().default(1),
31
+ quality: z.number().min(0).max(1).optional().default(1)
32
+ }),
33
+ responseType: z.enum(['base64', 'blob', 'zip']).optional().default('blob')
34
+ })
35
+
36
+ export const postExportToImageController = () => {
37
+ const config = getServiceConfig()
38
+
39
+ return async (req: Request, res: Response): Promise<void> => {
40
+ const parsedBody = payloadSchema.safeParse(req.body)
41
+
42
+ if (!parsedBody.success) {
43
+ res.status(400).json({ errors: parsedBody.error.errors })
44
+ return
45
+ }
46
+
47
+ try {
48
+ console.log(__dirname)
49
+ const result = await runWorker<ExportToImageWorkerResult>(
50
+ path.join(__dirname, './workers/exportToImage.js'),
51
+ {
52
+ ...parsedBody.data,
53
+ config
54
+ }
55
+ )
56
+
57
+ const finalBuffer = result as Buffer
58
+
59
+ // success
60
+ const fileExtension =
61
+ parsedBody.data.options.format.split('/')[1] === 'png' ? '.png' : '.jpg'
62
+
63
+ if (parsedBody.data.responseType === 'zip') {
64
+ res.setHeader('Content-Type', 'application/zip')
65
+ res.setHeader('Content-Disposition', 'attachment; filename=export.zip')
66
+
67
+ const archive = archiver('zip', { zlib: { level: 9 } })
68
+ archive.pipe(res)
69
+
70
+ archive.append(Buffer.from(finalBuffer), {
71
+ name: `render${fileExtension}`
72
+ })
73
+
74
+ // Finalize ZIP
75
+ archive.finalize()
76
+ return
77
+ }
78
+
79
+ if (parsedBody.data.responseType === 'blob') {
80
+ res.setHeader('Content-Type', 'application/octet-stream')
81
+ res.setHeader(
82
+ 'Content-Disposition',
83
+ `attachment; filename="render${fileExtension}"`
84
+ )
85
+
86
+ res.status(200).send(Buffer.from(finalBuffer))
87
+ return
88
+ }
89
+
90
+ res.status(200).json({
91
+ url: `data:${parsedBody.data.options.format};base64,${Buffer.from(finalBuffer).toString('base64')}`
92
+ })
93
+ } catch (error) {
94
+ console.log(error)
95
+ res.status(500).json({ error: 'Error processing image' })
96
+ }
97
+ }
98
+ }
@@ -1,4 +1,3 @@
1
- import fs from 'node:fs'
2
1
  import path from 'node:path'
3
2
  import { Request, Response } from 'express'
4
3
  import { removeBackground } from '@imgly/background-removal-node'
@@ -36,7 +35,7 @@ export const postRemoveBackgroundController = () => {
36
35
  const data = await myBlobToUIntDemo(blob)
37
36
  const fileNameRemoved = `${fileName}-removed`
38
37
  await persistenceHandler.persist(fileNameRemoved, 'image/png', data)
39
- fs.rmSync(filePathDownload)
38
+ // fs.rmSync(filePathDownload)
40
39
 
41
40
  res.status(201).json({
42
41
  status: 'Image created OK',