create-weave-backend-app 0.8.0 → 0.9.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-ChfTZaHP.js → create-app-kBYyXgff.js} +6 -6
- package/dist/{create-app-ChfTZaHP.js.map → create-app-kBYyXgff.js.map} +1 -1
- package/dist/create-app.js +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/template/+express+azure-web-pubsub/src/images/persistence.ts +10 -11
- package/template/+express+azure-web-pubsub/src/validate.ts +5 -6
- package/template/+express+websockets/src/images/persistence.ts +10 -11
- package/template/+express+websockets/src/validate.ts +5 -6
|
@@ -76,11 +76,11 @@ function tryGitInit(root) {
|
|
|
76
76
|
//#endregion
|
|
77
77
|
//#region src/versions.js
|
|
78
78
|
const versions = {
|
|
79
|
-
"@inditextech/weave-types": "0.
|
|
80
|
-
"@inditextech/weave-sdk": "0.
|
|
81
|
-
"@inditextech/weave-store-websockets": "0.
|
|
82
|
-
"@inditextech/weave-store-azure-web-pubsub": "0.
|
|
83
|
-
"@inditextech/weave-react": "0.
|
|
79
|
+
"@inditextech/weave-types": "0.9.0",
|
|
80
|
+
"@inditextech/weave-sdk": "0.9.0",
|
|
81
|
+
"@inditextech/weave-store-websockets": "0.9.0",
|
|
82
|
+
"@inditextech/weave-store-azure-web-pubsub": "0.9.0",
|
|
83
|
+
"@inditextech/weave-react": "0.9.0"
|
|
84
84
|
};
|
|
85
85
|
|
|
86
86
|
//#endregion
|
|
@@ -323,4 +323,4 @@ function pick(obj, keys) {
|
|
|
323
323
|
|
|
324
324
|
//#endregion
|
|
325
325
|
export { create, cwd, getPackageManager };
|
|
326
|
-
//# sourceMappingURL=create-app-
|
|
326
|
+
//# sourceMappingURL=create-app-kBYyXgff.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-app-ChfTZaHP.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.8.0\",\"@inditextech/weave-sdk\":\"0.8.0\",\"@inditextech/weave-store-websockets\":\"0.8.0\",\"@inditextech/weave-store-azure-web-pubsub\":\"0.8.0\",\"@inditextech/weave-react\":\"0.8.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":"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AG,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"}
|
|
1
|
+
{"version":3,"file":"create-app-kBYyXgff.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.9.0\",\"@inditextech/weave-sdk\":\"0.9.0\",\"@inditextech/weave-store-websockets\":\"0.9.0\",\"@inditextech/weave-store-azure-web-pubsub\":\"0.9.0\",\"@inditextech/weave-react\":\"0.9.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":"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AG,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.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { create, cwd, getPackageManager } from "./create-app-
|
|
2
|
+
import { create, cwd, getPackageManager } from "./create-app-kBYyXgff.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";
|
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
|
|
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"}
|
package/package.json
CHANGED
|
@@ -29,7 +29,7 @@ export class ImagesPersistenceHandler {
|
|
|
29
29
|
|
|
30
30
|
const folderMimeTypePath = path.join(
|
|
31
31
|
process.cwd(),
|
|
32
|
-
IMAGES_MIME_TYPE_FOLDER
|
|
32
|
+
IMAGES_MIME_TYPE_FOLDER
|
|
33
33
|
);
|
|
34
34
|
|
|
35
35
|
if (!(await existsFolder(folderMimeTypePath))) {
|
|
@@ -81,14 +81,14 @@ export class ImagesPersistenceHandler {
|
|
|
81
81
|
} catch (err) {
|
|
82
82
|
this._logger.error(
|
|
83
83
|
{ imageName, error: err },
|
|
84
|
-
'File does not exist or is not accessible'
|
|
84
|
+
'File does not exist or is not accessible'
|
|
85
85
|
);
|
|
86
86
|
return false;
|
|
87
87
|
}
|
|
88
88
|
} catch (ex) {
|
|
89
89
|
this._logger.error(
|
|
90
90
|
{ imageName, error: ex },
|
|
91
|
-
'Error checking if image exists'
|
|
91
|
+
'Error checking if image exists'
|
|
92
92
|
);
|
|
93
93
|
return false;
|
|
94
94
|
}
|
|
@@ -110,7 +110,7 @@ export class ImagesPersistenceHandler {
|
|
|
110
110
|
const roomMimeTypeFolderPath = path.join(
|
|
111
111
|
process.cwd(),
|
|
112
112
|
IMAGES_MIME_TYPE_FOLDER,
|
|
113
|
-
roomFolder
|
|
113
|
+
roomFolder
|
|
114
114
|
);
|
|
115
115
|
|
|
116
116
|
if (!(await existsFolder(roomMimeTypeFolderPath))) {
|
|
@@ -129,7 +129,7 @@ export class ImagesPersistenceHandler {
|
|
|
129
129
|
const filePath = path.join(
|
|
130
130
|
process.cwd(),
|
|
131
131
|
IMAGES_MIME_TYPE_FOLDER,
|
|
132
|
-
imageName
|
|
132
|
+
imageName
|
|
133
133
|
);
|
|
134
134
|
const filePathMimeType = `${filePath}.mimeType`;
|
|
135
135
|
|
|
@@ -137,7 +137,7 @@ export class ImagesPersistenceHandler {
|
|
|
137
137
|
} catch (ex) {
|
|
138
138
|
this._logger.error(
|
|
139
139
|
{ imageName, error: ex },
|
|
140
|
-
'Error getting image MIME type'
|
|
140
|
+
'Error getting image MIME type'
|
|
141
141
|
);
|
|
142
142
|
return 'application/octet-stream';
|
|
143
143
|
}
|
|
@@ -146,7 +146,7 @@ export class ImagesPersistenceHandler {
|
|
|
146
146
|
async persist(
|
|
147
147
|
imageName: string,
|
|
148
148
|
mimeType: string,
|
|
149
|
-
content: Uint8Array
|
|
149
|
+
content: Uint8Array
|
|
150
150
|
): Promise<boolean> {
|
|
151
151
|
try {
|
|
152
152
|
if (!this._initialized) {
|
|
@@ -162,7 +162,7 @@ export class ImagesPersistenceHandler {
|
|
|
162
162
|
const fileMimeTypePath = path.join(
|
|
163
163
|
process.cwd(),
|
|
164
164
|
IMAGES_MIME_TYPE_FOLDER,
|
|
165
|
-
imageName
|
|
165
|
+
imageName
|
|
166
166
|
);
|
|
167
167
|
const filePathMimeType = `${fileMimeTypePath}.mimeType`;
|
|
168
168
|
|
|
@@ -174,7 +174,6 @@ export class ImagesPersistenceHandler {
|
|
|
174
174
|
|
|
175
175
|
return true;
|
|
176
176
|
} catch (err) {
|
|
177
|
-
console.log(err);
|
|
178
177
|
this._logger.error({ imageName, error: err }, 'Error saving the image');
|
|
179
178
|
return false;
|
|
180
179
|
}
|
|
@@ -200,7 +199,7 @@ export class ImagesPersistenceHandler {
|
|
|
200
199
|
const fileMimeTypePath = path.join(
|
|
201
200
|
process.cwd(),
|
|
202
201
|
IMAGES_MIME_TYPE_FOLDER,
|
|
203
|
-
imageName
|
|
202
|
+
imageName
|
|
204
203
|
);
|
|
205
204
|
const filePathMimeType = `${fileMimeTypePath}.mimeType`;
|
|
206
205
|
|
|
@@ -218,7 +217,7 @@ export class ImagesPersistenceHandler {
|
|
|
218
217
|
} catch (err) {
|
|
219
218
|
this._logger.error(
|
|
220
219
|
{ imageName, error: err },
|
|
221
|
-
'Error deleting the file'
|
|
220
|
+
'Error deleting the file'
|
|
222
221
|
);
|
|
223
222
|
return false;
|
|
224
223
|
}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import { ZodError } from
|
|
2
|
-
import { getServiceConfig } from
|
|
3
|
-
import { ServiceConfig } from
|
|
4
|
-
import { getLogger } from
|
|
1
|
+
import { ZodError } from 'zod';
|
|
2
|
+
import { getServiceConfig } from './config/config.js';
|
|
3
|
+
import { ServiceConfig } from './types.js';
|
|
4
|
+
import { getLogger } from './logger/logger.js';
|
|
5
5
|
|
|
6
6
|
export function validateServiceConfig() {
|
|
7
7
|
let config: ServiceConfig | null = null;
|
|
8
|
-
const logger = getLogger().child({ module:
|
|
8
|
+
const logger = getLogger().child({ module: 'validate' });
|
|
9
9
|
|
|
10
10
|
try {
|
|
11
11
|
config = getServiceConfig();
|
|
12
12
|
} catch (ex) {
|
|
13
|
-
// console.log(ex);
|
|
14
13
|
if (ex instanceof ZodError) {
|
|
15
14
|
for (const issue of ex.issues) {
|
|
16
15
|
logger.error(issue.message);
|
|
@@ -29,7 +29,7 @@ export class ImagesPersistenceHandler {
|
|
|
29
29
|
|
|
30
30
|
const folderMimeTypePath = path.join(
|
|
31
31
|
process.cwd(),
|
|
32
|
-
IMAGES_MIME_TYPE_FOLDER
|
|
32
|
+
IMAGES_MIME_TYPE_FOLDER
|
|
33
33
|
);
|
|
34
34
|
|
|
35
35
|
if (!(await existsFolder(folderMimeTypePath))) {
|
|
@@ -81,14 +81,14 @@ export class ImagesPersistenceHandler {
|
|
|
81
81
|
} catch (err) {
|
|
82
82
|
this._logger.error(
|
|
83
83
|
{ imageName, error: err },
|
|
84
|
-
'File does not exist or is not accessible'
|
|
84
|
+
'File does not exist or is not accessible'
|
|
85
85
|
);
|
|
86
86
|
return false;
|
|
87
87
|
}
|
|
88
88
|
} catch (ex) {
|
|
89
89
|
this._logger.error(
|
|
90
90
|
{ imageName, error: ex },
|
|
91
|
-
'Error checking if image exists'
|
|
91
|
+
'Error checking if image exists'
|
|
92
92
|
);
|
|
93
93
|
return false;
|
|
94
94
|
}
|
|
@@ -110,7 +110,7 @@ export class ImagesPersistenceHandler {
|
|
|
110
110
|
const roomMimeTypeFolderPath = path.join(
|
|
111
111
|
process.cwd(),
|
|
112
112
|
IMAGES_MIME_TYPE_FOLDER,
|
|
113
|
-
roomFolder
|
|
113
|
+
roomFolder
|
|
114
114
|
);
|
|
115
115
|
|
|
116
116
|
if (!(await existsFolder(roomMimeTypeFolderPath))) {
|
|
@@ -129,7 +129,7 @@ export class ImagesPersistenceHandler {
|
|
|
129
129
|
const filePath = path.join(
|
|
130
130
|
process.cwd(),
|
|
131
131
|
IMAGES_MIME_TYPE_FOLDER,
|
|
132
|
-
imageName
|
|
132
|
+
imageName
|
|
133
133
|
);
|
|
134
134
|
const filePathMimeType = `${filePath}.mimeType`;
|
|
135
135
|
|
|
@@ -137,7 +137,7 @@ export class ImagesPersistenceHandler {
|
|
|
137
137
|
} catch (ex) {
|
|
138
138
|
this._logger.error(
|
|
139
139
|
{ imageName, error: ex },
|
|
140
|
-
'Error getting image MIME type'
|
|
140
|
+
'Error getting image MIME type'
|
|
141
141
|
);
|
|
142
142
|
return 'application/octet-stream';
|
|
143
143
|
}
|
|
@@ -146,7 +146,7 @@ export class ImagesPersistenceHandler {
|
|
|
146
146
|
async persist(
|
|
147
147
|
imageName: string,
|
|
148
148
|
mimeType: string,
|
|
149
|
-
content: Uint8Array
|
|
149
|
+
content: Uint8Array
|
|
150
150
|
): Promise<boolean> {
|
|
151
151
|
try {
|
|
152
152
|
if (!this._initialized) {
|
|
@@ -162,7 +162,7 @@ export class ImagesPersistenceHandler {
|
|
|
162
162
|
const fileMimeTypePath = path.join(
|
|
163
163
|
process.cwd(),
|
|
164
164
|
IMAGES_MIME_TYPE_FOLDER,
|
|
165
|
-
imageName
|
|
165
|
+
imageName
|
|
166
166
|
);
|
|
167
167
|
const filePathMimeType = `${fileMimeTypePath}.mimeType`;
|
|
168
168
|
|
|
@@ -174,7 +174,6 @@ export class ImagesPersistenceHandler {
|
|
|
174
174
|
|
|
175
175
|
return true;
|
|
176
176
|
} catch (err) {
|
|
177
|
-
console.log(err);
|
|
178
177
|
this._logger.error({ imageName, error: err }, 'Error saving the image');
|
|
179
178
|
return false;
|
|
180
179
|
}
|
|
@@ -200,7 +199,7 @@ export class ImagesPersistenceHandler {
|
|
|
200
199
|
const fileMimeTypePath = path.join(
|
|
201
200
|
process.cwd(),
|
|
202
201
|
IMAGES_MIME_TYPE_FOLDER,
|
|
203
|
-
imageName
|
|
202
|
+
imageName
|
|
204
203
|
);
|
|
205
204
|
const filePathMimeType = `${fileMimeTypePath}.mimeType`;
|
|
206
205
|
|
|
@@ -218,7 +217,7 @@ export class ImagesPersistenceHandler {
|
|
|
218
217
|
} catch (err) {
|
|
219
218
|
this._logger.error(
|
|
220
219
|
{ imageName, error: err },
|
|
221
|
-
'Error deleting the file'
|
|
220
|
+
'Error deleting the file'
|
|
222
221
|
);
|
|
223
222
|
return false;
|
|
224
223
|
}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import { ZodError } from
|
|
2
|
-
import { getServiceConfig } from
|
|
3
|
-
import { ServiceConfig } from
|
|
4
|
-
import { getLogger } from
|
|
1
|
+
import { ZodError } from 'zod';
|
|
2
|
+
import { getServiceConfig } from './config/config.js';
|
|
3
|
+
import { ServiceConfig } from './types.js';
|
|
4
|
+
import { getLogger } from './logger/logger.js';
|
|
5
5
|
|
|
6
6
|
export function validateServiceConfig() {
|
|
7
7
|
let config: ServiceConfig | null = null;
|
|
8
|
-
const logger = getLogger().child({ module:
|
|
8
|
+
const logger = getLogger().child({ module: 'validate' });
|
|
9
9
|
|
|
10
10
|
try {
|
|
11
11
|
config = getServiceConfig();
|
|
12
12
|
} catch (ex) {
|
|
13
|
-
// console.log(ex);
|
|
14
13
|
if (ex instanceof ZodError) {
|
|
15
14
|
for (const issue of ex.issues) {
|
|
16
15
|
logger.error(issue.message);
|