From c4aae6b976d1983e89a3a133d0a73f073fa65cdb Mon Sep 17 00:00:00 2001 From: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com> Date: Mon, 22 May 2023 11:11:38 +0200 Subject: [PATCH] feat(medusa-file-local): Local file storage plugin (#4118) Simple local file storage to eliminate/reduce friction related to file services when developers are trying out Medusa for the first time --- .changeset/tiny-eagles-nail.md | 5 + packages/medusa-file-local/.gitignore | 16 + packages/medusa-file-local/README.md | 49 +++ packages/medusa-file-local/package.json | 36 ++ packages/medusa-file-local/src/api/index.ts | 11 + .../src/services/local-file-service.ts | 69 ++++ packages/medusa-file-local/tsconfig.json | 30 ++ yarn.lock | 369 +++++++++++++++++- 8 files changed, 578 insertions(+), 7 deletions(-) create mode 100644 .changeset/tiny-eagles-nail.md create mode 100644 packages/medusa-file-local/.gitignore create mode 100644 packages/medusa-file-local/README.md create mode 100644 packages/medusa-file-local/package.json create mode 100644 packages/medusa-file-local/src/api/index.ts create mode 100644 packages/medusa-file-local/src/services/local-file-service.ts create mode 100644 packages/medusa-file-local/tsconfig.json diff --git a/.changeset/tiny-eagles-nail.md b/.changeset/tiny-eagles-nail.md new file mode 100644 index 0000000000..4c2366b5fd --- /dev/null +++ b/.changeset/tiny-eagles-nail.md @@ -0,0 +1,5 @@ +--- +"medusa-file-local": patch +--- + +feat(medusa-file-local): Add plugin for local file storage diff --git a/packages/medusa-file-local/.gitignore b/packages/medusa-file-local/.gitignore new file mode 100644 index 0000000000..2ca7f03256 --- /dev/null +++ b/packages/medusa-file-local/.gitignore @@ -0,0 +1,16 @@ +/lib +node_modules +.DS_store +.env* +/*.js +!index.js +yarn.lock + +/dist + +/api +/services +/models +/subscribers +/__mocks__ + diff --git a/packages/medusa-file-local/README.md b/packages/medusa-file-local/README.md new file mode 100644 index 0000000000..fa31a30989 --- /dev/null +++ b/packages/medusa-file-local/README.md @@ -0,0 +1,49 @@ +# Local file storage + +Store uploaded files to your Medusa backend locally. + +> Not suited for production environments + +[Plugin Documentation](https://docs.medusajs.com/plugins/file-service/local) | [Medusa Website](https://medusajs.com) | [Medusa Repository](https://github.com/medusajs/medusa) + +## Features + +- Store product images locally + +--- + +## Prerequisites + +- [Medusa backend](https://docs.medusajs.com/development/backend/install) + +--- + +## How to Install + +1\. Run the following command in the directory of the Medusa backend: + +```bash +npm install medusa-file-local +``` + +2 \. In `medusa-config.js` add the following at the end of the `plugins` array: + +```js +const plugins = [ + // ... + `medusa-file-local` +] +``` + +--- + +## Test the Plugin + +1\. Run the following command in the directory of the Medusa backend to run the backend: + +```bash +npm run start +``` + +2\. Upload an image for a product using the admin dashboard or using [the Admin APIs](https://docs.medusajs.com/api/admin#tag/Upload). + diff --git a/packages/medusa-file-local/package.json b/packages/medusa-file-local/package.json new file mode 100644 index 0000000000..b0c6f74b59 --- /dev/null +++ b/packages/medusa-file-local/package.json @@ -0,0 +1,36 @@ +{ + "name": "medusa-file-local", + "version": "1.0.0", + "description": "Local file plugin", + "main": "dist/index.js", + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "https://github.com/medusajs/medusa", + "directory": "packages/medusa-file-local" + }, + "author": "Medusa", + "license": "MIT", + "devDependencies": { + "@medusajs/medusa": "1.10.1", + "cross-env": "^5.2.1", + "jest": "^25.5.4", + "typescript": "^4.9.5" + }, + "scripts": { + "prepare": "cross-env NODE_ENV=production yarn run build", + "test": "jest --passWithNoTests src", + "build": "tsc", + "watch": "tsc --watch" + }, + "peerDependencies": { + "medusa-interfaces": "1.3.7" + }, + "gitHead": "81a7ff73d012fda722f6e9ef0bd9ba0232d37808", + "keywords": [ + "medusa-plugin", + "medusa-plugin-file" + ] +} diff --git a/packages/medusa-file-local/src/api/index.ts b/packages/medusa-file-local/src/api/index.ts new file mode 100644 index 0000000000..abb8a76813 --- /dev/null +++ b/packages/medusa-file-local/src/api/index.ts @@ -0,0 +1,11 @@ +import express from "express" + +export default (rootDirectory, pluginOptions) => { + const app = express.Router() + + const uploadDir = pluginOptions.upload_dir ?? "uploads/images" + + app.use(`/${uploadDir}`, express.static(uploadDir)) + + return app +} diff --git a/packages/medusa-file-local/src/services/local-file-service.ts b/packages/medusa-file-local/src/services/local-file-service.ts new file mode 100644 index 0000000000..3b9ca44c8d --- /dev/null +++ b/packages/medusa-file-local/src/services/local-file-service.ts @@ -0,0 +1,69 @@ +import { + AbstractFileService, + FileServiceGetUploadStreamResult, + FileServiceUploadResult, + IFileService, +} from "@medusajs/medusa" +import fs from "fs" +import { parse } from "path" + +class LocalService extends AbstractFileService implements IFileService { + protected uploadDir_: string + protected backendUrl_: string + + constructor({}, options) { + super({}, options) + + this.uploadDir_ = options.upload_dir || "uploads/images" + this.backendUrl_ = options.backend_url || "http://localhost:9000" + } + + async upload(file: Express.Multer.File): Promise { + return await this.uploadFile(file) + } + + async uploadProtected(file: Express.Multer.File) { + return await this.uploadFile(file, {}) + } + + async uploadFile( + file: Express.Multer.File, + options = {} + ): Promise<{ url: string }> { + const parsedFilename = parse(file.originalname) + + const fileKey = `${parsedFilename.name}-${Date.now()}${parsedFilename.ext}` + + return new Promise((resolve, reject) => { + fs.copyFile(file.path, `${this.uploadDir_}/${fileKey}`, (err) => { + if (err) { + throw err + } + + const fileUrl = `${this.backendUrl_}/${this.uploadDir_}/${fileKey}` + + resolve({ url: fileUrl }) + }) + }) + } + + async delete(file): Promise { + throw Error("Not implemented") + } + + async getUploadStreamDescriptor( + fileData + ): Promise { + throw Error("Not implemented") + } + + async getDownloadStream(fileData): Promise { + throw Error("Not implemented") + } + + async getPresignedDownloadUrl(fileData): Promise { + throw Error("Not implemented") + } +} + +export default LocalService diff --git a/packages/medusa-file-local/tsconfig.json b/packages/medusa-file-local/tsconfig.json new file mode 100644 index 0000000000..862daa96b3 --- /dev/null +++ b/packages/medusa-file-local/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "lib": ["es5", "es6", "es2019"], + "target": "es5", + "outDir": "./dist", + "rootDir": "src", + "esModuleInterop": true, + "declaration": true, + "module": "commonjs", + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "sourceMap": true, + "noImplicitReturns": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "noImplicitThis": true, + "allowJs": true, + "skipLibCheck": true, + "downlevelIteration": true // to use ES5 specific tooling + }, + "include": ["src"], + "exclude": [ + "dist", + "src/**/__tests__", + "src/**/__mocks__", + "src/**/__fixtures__", + "node_modules" + ] +} diff --git a/yarn.lock b/yarn.lock index 379a0ee7eb..b4b9a8d569 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5781,6 +5781,25 @@ __metadata: languageName: node linkType: hard +"@mapbox/node-pre-gyp@npm:^1.0.0": + version: 1.0.10 + resolution: "@mapbox/node-pre-gyp@npm:1.0.10" + dependencies: + detect-libc: ^2.0.0 + https-proxy-agent: ^5.0.0 + make-dir: ^3.1.0 + node-fetch: ^2.6.7 + nopt: ^5.0.0 + npmlog: ^5.0.1 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.11 + bin: + node-pre-gyp: bin/node-pre-gyp + checksum: 469f3bc00778c76e0a7ffaf40742482462e05fec31b53c55ad6d6a892894046c0db7bb8543ed49b2cf1926dfcd9af1289985c367c5d20076939f8a889f686e45 + languageName: node + linkType: hard + "@mdx-js/mdx@npm:^1.6.22": version: 1.6.22 resolution: "@mdx-js/mdx@npm:1.6.22" @@ -6048,6 +6067,44 @@ __metadata: languageName: unknown linkType: soft +"@medusajs/medusa-cli@npm:1.3.13": + version: 1.3.13 + resolution: "@medusajs/medusa-cli@npm:1.3.13" + dependencies: + "@medusajs/utils": 1.8.4 + axios: ^0.21.4 + chalk: ^4.0.0 + configstore: 5.0.1 + core-js: ^3.6.5 + dotenv: ^8.2.0 + execa: ^5.1.1 + fs-exists-cached: ^1.0.0 + fs-extra: ^10.0.0 + hosted-git-info: ^4.0.2 + inquirer: ^8.0.0 + is-valid-path: ^0.1.1 + meant: ^1.0.3 + medusa-core-utils: ^1.2.0 + medusa-telemetry: 0.0.16 + open: ^8.0.6 + ora: ^5.4.1 + pg-god: ^1.0.12 + prompts: ^2.4.2 + regenerator-runtime: ^0.13.11 + resolve-cwd: ^3.0.0 + semver: ^7.3.8 + sqlite3: ^5.0.2 + stack-trace: ^0.0.10 + ulid: ^2.3.0 + url: ^0.11.0 + winston: ^3.8.2 + yargs: ^15.3.1 + bin: + medusa: cli.js + checksum: 13161f3c0b75b2e80d030abde23401113eb6caacbdeeda53483e1a9fd86fc31202334816384a2cf5b9416c7aefb92869a12c18495868c3816bf307d6c9a77a95 + languageName: node + linkType: hard + "@medusajs/medusa-js@5.0.0, @medusajs/medusa-js@workspace:packages/medusa-js": version: 0.0.0-use.local resolution: "@medusajs/medusa-js@workspace:packages/medusa-js" @@ -6164,6 +6221,68 @@ __metadata: languageName: unknown linkType: soft +"@medusajs/medusa@npm:1.10.1": + version: 1.10.1 + resolution: "@medusajs/medusa@npm:1.10.1" + dependencies: + "@medusajs/medusa-cli": 1.3.13 + "@medusajs/modules-sdk": 1.8.5 + "@medusajs/utils": 1.8.4 + "@types/ioredis": ^4.28.10 + "@types/lodash": ^4.14.191 + awilix: ^8.0.0 + body-parser: ^1.19.0 + boxen: ^5.0.1 + bullmq: ^3.5.6 + chokidar: ^3.4.2 + class-transformer: ^0.5.1 + class-validator: ^0.14.0 + compression: ^1.7.4 + connect-redis: ^5.0.0 + cookie-parser: ^1.4.6 + core-js: ^3.6.5 + cors: ^2.8.5 + cross-spawn: ^7.0.3 + dotenv: ^16.0.3 + express: ^4.18.2 + express-session: ^1.17.3 + fs-exists-cached: ^1.0.0 + glob: ^7.1.6 + ioredis: ^5.2.5 + ioredis-mock: 8.4.0 + iso8601-duration: ^1.3.0 + jsonwebtoken: ^9.0.0 + lodash: ^4.17.21 + medusa-core-utils: ^1.2.0 + medusa-telemetry: ^0.0.16 + medusa-test-utils: ^1.1.40 + morgan: ^1.9.1 + multer: ^1.4.5-lts.1 + node-schedule: ^2.1.1 + papaparse: ^5.3.2 + passport: ^0.6.0 + passport-http-bearer: ^1.0.1 + passport-jwt: ^4.0.1 + passport-local: ^1.0.0 + randomatic: ^3.1.1 + redis: ^3.0.2 + reflect-metadata: ^0.1.13 + regenerator-runtime: ^0.13.11 + request-ip: ^2.1.3 + scrypt-kdf: ^2.0.1 + ulid: ^2.3.0 + uuid: ^9.0.0 + winston: ^3.8.2 + peerDependencies: + "@medusajs/types": 1.8.5 + medusa-interfaces: 1.3.7 + typeorm: "*" + bin: + medusa: cli.js + checksum: d6981042f25c5294806e3034a84ac1ea2907b9001142338d407fe90677677e634212b5010afd0b7914a7e492fe0831413a68b5ce6ba29f2543607c9112da0ee4 + languageName: node + linkType: hard + "@medusajs/modules-sdk@1.8.6, @medusajs/modules-sdk@workspace:packages/modules-sdk": version: 0.0.0-use.local resolution: "@medusajs/modules-sdk@workspace:packages/modules-sdk" @@ -6181,6 +6300,20 @@ __metadata: languageName: unknown linkType: soft +"@medusajs/modules-sdk@npm:1.8.5": + version: 1.8.5 + resolution: "@medusajs/modules-sdk@npm:1.8.5" + dependencies: + "@medusajs/types": 1.8.5 + "@medusajs/utils": 1.8.4 + awilix: ^8.0.0 + glob: 7.1.6 + medusa-telemetry: ^0.0.16 + resolve-cwd: ^3.0.0 + checksum: b92f65dd68c43415be7e0db2af5ef44c421443f13a2223cfd17a6e5121be76df1035ee882297e33a741816af6fdc7ed01e35b83246ebaf774d4d19f158b8b76e + languageName: node + linkType: hard + "@medusajs/oas-github-ci@workspace:packages/oas/oas-github-ci": version: 0.0.0-use.local resolution: "@medusajs/oas-github-ci@workspace:packages/oas/oas-github-ci" @@ -6255,6 +6388,13 @@ __metadata: languageName: unknown linkType: soft +"@medusajs/types@npm:1.8.5": + version: 1.8.5 + resolution: "@medusajs/types@npm:1.8.5" + checksum: 857c36d81aa06eabb202dff10120a03eb4c1c9c3ea4811071b7f8e801a5a443de8db50656f017721effd542624cac0e0e6894fc98da37b0fa71e794d34c7309e + languageName: node + linkType: hard + "@medusajs/utils@1.8.5, @medusajs/utils@workspace:packages/utils": version: 0.0.0-use.local resolution: "@medusajs/utils@workspace:packages/utils" @@ -6273,6 +6413,19 @@ __metadata: languageName: unknown linkType: soft +"@medusajs/utils@npm:1.8.4": + version: 1.8.4 + resolution: "@medusajs/utils@npm:1.8.4" + dependencies: + awilix: ^8.0.0 + class-transformer: ^0.5.1 + class-validator: ^0.14.0 + typeorm: "npm:@medusajs/typeorm@0.3.16-next.0" + ulid: ^2.3.0 + checksum: c20ee23dcf604d57ac7a65c67a5b7d959f4cf585d30239a506bfd1db1c22feb81ba6043b507359f116f2e1992b0e5562933b95acbf1fbdbc1dcab656a95b1af2 + languageName: node + linkType: hard + "@microsoft/fetch-event-source@npm:2.0.1": version: 2.0.1 resolution: "@microsoft/fetch-event-source@npm:2.0.1" @@ -13037,6 +13190,17 @@ __metadata: languageName: node linkType: hard +"agentkeepalive@npm:^4.1.3": + version: 4.3.0 + resolution: "agentkeepalive@npm:4.3.0" + dependencies: + debug: ^4.1.0 + depd: ^2.0.0 + humanize-ms: ^1.2.1 + checksum: 61cbdab12d45e82e9ae515b0aa8d09617b66f72409e541a646dd7be4b7260d335d7f56a38079ad305bf0ffb8405592a459faf1294111289107f48352a20c2799 + languageName: node + linkType: hard + "agentkeepalive@npm:^4.2.1": version: 4.2.1 resolution: "agentkeepalive@npm:4.2.1" @@ -15443,7 +15607,7 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^15.0.5": +"cacache@npm:^15.0.5, cacache@npm:^15.2.0": version: 15.3.0 resolution: "cacache@npm:15.3.0" dependencies: @@ -17947,7 +18111,7 @@ __metadata: languageName: node linkType: hard -"depd@npm:2.0.0, depd@npm:~2.0.0": +"depd@npm:2.0.0, depd@npm:^2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" checksum: 58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c @@ -18635,7 +18799,7 @@ __metadata: languageName: node linkType: hard -"encoding@npm:^0.1.11, encoding@npm:^0.1.13": +"encoding@npm:^0.1.11, encoding@npm:^0.1.12, encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" dependencies: @@ -28766,6 +28930,30 @@ __metadata: languageName: node linkType: hard +"make-fetch-happen@npm:^9.1.0": + version: 9.1.0 + resolution: "make-fetch-happen@npm:9.1.0" + dependencies: + agentkeepalive: ^4.1.3 + cacache: ^15.2.0 + http-cache-semantics: ^4.1.0 + http-proxy-agent: ^4.0.1 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^6.0.0 + minipass: ^3.1.3 + minipass-collect: ^1.0.2 + minipass-fetch: ^1.3.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.2 + promise-retry: ^2.0.1 + socks-proxy-agent: ^6.0.0 + ssri: ^8.0.0 + checksum: 2c737faf6a7f67077679da548b5bfeeef890595bf8c4323a1f76eae355d27ebb33dcf9cf1a673f944cf2f2a7cbf4e2b09f0a0a62931737728f210d902c6be966 + languageName: node + linkType: hard + "makeerror@npm:1.0.12": version: 1.0.12 resolution: "makeerror@npm:1.0.12" @@ -29056,6 +29244,19 @@ __metadata: languageName: unknown linkType: soft +"medusa-file-local@workspace:packages/medusa-file-local": + version: 0.0.0-use.local + resolution: "medusa-file-local@workspace:packages/medusa-file-local" + dependencies: + "@medusajs/medusa": 1.10.1 + cross-env: ^5.2.1 + jest: ^25.5.4 + typescript: ^4.9.5 + peerDependencies: + medusa-interfaces: 1.3.7 + languageName: unknown + linkType: soft + "medusa-file-minio@workspace:packages/medusa-file-minio": version: 0.0.0-use.local resolution: "medusa-file-minio@workspace:packages/medusa-file-minio" @@ -30245,6 +30446,21 @@ __metadata: languageName: node linkType: hard +"minipass-fetch@npm:^1.3.2": + version: 1.4.1 + resolution: "minipass-fetch@npm:1.4.1" + dependencies: + encoding: ^0.1.12 + minipass: ^3.1.0 + minipass-sized: ^1.0.3 + minizlib: ^2.0.0 + dependenciesMeta: + encoding: + optional: true + checksum: a43da7401cd7c4f24b993887d41bd37d097356083b0bb836fd655916467463a1e6e9e553b2da4fcbe8745bf23d40c8b884eab20745562199663b3e9060cd8e7a + languageName: node + linkType: hard + "minipass-fetch@npm:^2.0.3": version: 2.1.0 resolution: "minipass-fetch@npm:2.1.0" @@ -30306,6 +30522,15 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^3.1.0, minipass@npm:^3.1.3": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + "minizlib@npm:^1.3.3": version: 1.3.3 resolution: "minizlib@npm:1.3.3" @@ -30315,7 +30540,7 @@ __metadata: languageName: node linkType: hard -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": +"minizlib@npm:^2.0.0, minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" dependencies: @@ -30822,7 +31047,7 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:0.6.3, negotiator@npm:^0.6.3, negotiator@npm:~0.6.2": +"negotiator@npm:0.6.3, negotiator@npm:^0.6.2, negotiator@npm:^0.6.3, negotiator@npm:~0.6.2": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: 3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 @@ -30894,7 +31119,7 @@ __metadata: languageName: node linkType: hard -"node-addon-api@npm:^4.3.0": +"node-addon-api@npm:^4.2.0, node-addon-api@npm:^4.3.0": version: 4.3.0 resolution: "node-addon-api@npm:4.3.0" dependencies: @@ -31047,6 +31272,26 @@ __metadata: languageName: node linkType: hard +"node-gyp@npm:8.x": + version: 8.4.1 + resolution: "node-gyp@npm:8.4.1" + dependencies: + env-paths: ^2.2.0 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^9.1.0 + nopt: ^5.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: 80ef333b3a882eb6a2695a8e08f31d618f4533eff192864e4a3a16b67ff0abc9d8c1d5fac0395550ec699326b9248c5e2b3be178492f7f4d1ccf97d2cf948021 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 9.0.0 resolution: "node-gyp@npm:9.0.0" @@ -37107,6 +37352,17 @@ __metadata: languageName: node linkType: hard +"socks-proxy-agent@npm:^6.0.0": + version: 6.2.1 + resolution: "socks-proxy-agent@npm:6.2.1" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: d75c1cf1fdd7f8309a43a77f84409b793fc0f540742ef915154e70ac09a08b0490576fe85d4f8d68bbf80e604a62957a17ab5ef50d312fe1442b0ab6f8f6e6f6 + languageName: node + linkType: hard + "socks-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "socks-proxy-agent@npm:7.0.0" @@ -37346,6 +37602,26 @@ __metadata: languageName: node linkType: hard +"sqlite3@npm:^5.0.2": + version: 5.1.6 + resolution: "sqlite3@npm:5.1.6" + dependencies: + "@mapbox/node-pre-gyp": ^1.0.0 + node-addon-api: ^4.2.0 + node-gyp: 8.x + tar: ^6.1.11 + peerDependencies: + node-gyp: 8.x + dependenciesMeta: + node-gyp: + optional: true + peerDependenciesMeta: + node-gyp: + optional: true + checksum: 85f1dd1f4b9fa906578330e7badc1116c61ef4e7c64a09897268923f5c9ff4ae1e0a447dd4594c0f8c3b20a410fcc5d8d00d1056225a5186c57ea7f7c9b18974 + languageName: node + linkType: hard + "sshpk@npm:^1.7.0": version: 1.17.0 resolution: "sshpk@npm:1.17.0" @@ -37376,7 +37652,7 @@ __metadata: languageName: node linkType: hard -"ssri@npm:^8.0.1": +"ssri@npm:^8.0.0, ssri@npm:^8.0.1": version: 8.0.1 resolution: "ssri@npm:8.0.1" dependencies: @@ -39685,6 +39961,85 @@ __metadata: languageName: node linkType: hard +"typeorm@npm:@medusajs/typeorm@0.3.16-next.0": + version: 0.3.16-next.0 + resolution: "@medusajs/typeorm@npm:0.3.16-next.0" + dependencies: + "@sqltools/formatter": ^1.2.5 + app-root-path: ^3.1.0 + buffer: ^6.0.3 + chalk: ^4.1.2 + cli-highlight: ^2.1.11 + debug: ^4.3.4 + dotenv: ^16.0.3 + glob: ^8.1.0 + mkdirp: ^2.1.3 + reflect-metadata: ^0.1.13 + sha.js: ^2.4.11 + tslib: ^2.5.0 + uuid: ^9.0.0 + yargs: ^17.6.2 + peerDependencies: + "@google-cloud/spanner": ^5.18.0 + "@sap/hana-client": ^2.12.25 + better-sqlite3: ^7.1.2 || ^8.0.0 + hdb-pool: ^0.1.6 + ioredis: ^5.0.4 + mongodb: ^5.2.0 + mssql: ^9.1.1 + mysql2: ^2.2.5 || ^3.0.1 + oracledb: ^5.1.0 + pg: ^8.5.1 + pg-native: ^3.0.0 + pg-query-stream: ^4.0.0 + redis: ^3.1.1 || ^4.0.0 + sql.js: ^1.4.0 + sqlite3: ^5.0.3 + ts-node: ^10.7.0 + typeorm-aurora-data-api-driver: ^2.0.0 + peerDependenciesMeta: + "@google-cloud/spanner": + optional: true + "@sap/hana-client": + optional: true + better-sqlite3: + optional: true + hdb-pool: + optional: true + ioredis: + optional: true + mongodb: + optional: true + mssql: + optional: true + mysql2: + optional: true + oracledb: + optional: true + pg: + optional: true + pg-native: + optional: true + pg-query-stream: + optional: true + redis: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + ts-node: + optional: true + typeorm-aurora-data-api-driver: + optional: true + bin: + typeorm: cli.js + typeorm-ts-node-commonjs: cli-ts-node-commonjs.js + typeorm-ts-node-esm: cli-ts-node-esm.js + checksum: b81794a0bc5ca3195f6a57ad313bd85b2b8f6a0a8dcb00ac42c3594f908b89fcd51f9b10ea62c836504d7196e6330a4b67602b90ea6485bc956ed4dace665737 + languageName: node + linkType: hard + "typeorm@npm:^0.3.16": version: 0.3.16 resolution: "typeorm@npm:0.3.16"