@medusajs/file 0.0.1 → 0.0.2-next-20240430121402

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/index.d.ts CHANGED
@@ -1,4 +1,7 @@
1
- import { moduleDefinition, revertMigration, runMigrations } from "./module-definition";
2
- export default moduleDefinition;
3
- export { revertMigration, runMigrations };
1
+ import { moduleDefinition } from "./module-definition";
2
+ export * from "./types";
4
3
  export * from "./services";
4
+ export declare const initialize: (options?: import("@medusajs/modules-sdk").ModuleServiceInitializeOptions | import("@medusajs/modules-sdk").ModuleServiceInitializeCustomDataLayerOptions | import("@medusajs/modules-sdk").InternalModuleDeclaration | import("@medusajs/modules-sdk").ExternalModuleDeclaration | undefined, injectedDependencies?: any) => Promise<unknown>;
5
+ export declare const runMigrations: ((options: import("@medusajs/modules-sdk").LoaderOptions<any>, moduleDeclaration?: import("@medusajs/modules-sdk").InternalModuleDeclaration | undefined) => Promise<void>) | undefined;
6
+ export declare const revertMigration: ((options: import("@medusajs/modules-sdk").LoaderOptions<any>, moduleDeclaration?: import("@medusajs/modules-sdk").InternalModuleDeclaration | undefined) => Promise<void>) | undefined;
7
+ export default moduleDefinition;
package/dist/index.js CHANGED
@@ -14,9 +14,15 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.runMigrations = exports.revertMigration = void 0;
17
+ exports.revertMigration = exports.runMigrations = exports.initialize = void 0;
18
18
  const module_definition_1 = require("./module-definition");
19
- Object.defineProperty(exports, "revertMigration", { enumerable: true, get: function () { return module_definition_1.revertMigration; } });
20
- Object.defineProperty(exports, "runMigrations", { enumerable: true, get: function () { return module_definition_1.runMigrations; } });
21
- exports.default = module_definition_1.moduleDefinition;
19
+ const modules_sdk_1 = require("@medusajs/modules-sdk");
20
+ __exportStar(require("./types"), exports);
22
21
  __exportStar(require("./services"), exports);
22
+ exports.initialize = (0, modules_sdk_1.initializeFactory)({
23
+ moduleName: modules_sdk_1.Modules.FILE,
24
+ moduleDefinition: module_definition_1.moduleDefinition,
25
+ });
26
+ exports.runMigrations = module_definition_1.moduleDefinition.runMigrations;
27
+ exports.revertMigration = module_definition_1.moduleDefinition.revertMigration;
28
+ exports.default = module_definition_1.moduleDefinition;
@@ -0,0 +1,5 @@
1
+ import { LoaderOptions, ModuleProvider, ModulesSdkTypes } from "@medusajs/types";
2
+ declare const _default: ({ container, options, }: LoaderOptions<(ModulesSdkTypes.ModuleServiceInitializeOptions | ModulesSdkTypes.ModuleServiceInitializeCustomDataLayerOptions) & {
3
+ providers: ModuleProvider[];
4
+ }>) => Promise<void>;
5
+ export default _default;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const modules_sdk_1 = require("@medusajs/modules-sdk");
4
+ const _services_1 = require("../services");
5
+ const _types_1 = require("../types");
6
+ const awilix_1 = require("awilix");
7
+ const registrationFn = async (klass, container, pluginOptions) => {
8
+ Object.entries(pluginOptions.config || []).map(([name, config]) => {
9
+ const key = _services_1.FileProviderService.getRegistrationIdentifier(klass, name);
10
+ container.register({
11
+ [_types_1.FileProviderRegistrationPrefix + key]: (0, awilix_1.asFunction)((cradle) => new klass(cradle, config), {
12
+ lifetime: klass.LIFE_TIME || awilix_1.Lifetime.SINGLETON,
13
+ }),
14
+ });
15
+ container.registerAdd(_types_1.FileProviderIdentifierRegistrationName, (0, awilix_1.asValue)(key));
16
+ });
17
+ };
18
+ exports.default = async ({ container, options, }) => {
19
+ await (0, modules_sdk_1.moduleProviderLoader)({
20
+ container,
21
+ providers: options?.providers || [],
22
+ registerServiceFn: registrationFn,
23
+ });
24
+ };
@@ -1,7 +1,36 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
2
28
  Object.defineProperty(exports, "__esModule", { value: true });
3
29
  exports.moduleDefinition = exports.revertMigration = exports.runMigrations = void 0;
4
30
  const _services_1 = require("./services");
31
+ const providers_1 = __importDefault(require("./loaders/providers"));
32
+ const ModuleServices = __importStar(require("./services"));
33
+ const utils_1 = require("@medusajs/utils");
5
34
  const runMigrations = () => {
6
35
  return Promise.resolve();
7
36
  };
@@ -10,8 +39,13 @@ const revertMigration = () => {
10
39
  return Promise.resolve();
11
40
  };
12
41
  exports.revertMigration = revertMigration;
42
+ const containerLoader = utils_1.ModulesSdkUtils.moduleContainerLoaderFactory({
43
+ moduleModels: {},
44
+ moduleRepositories: {},
45
+ moduleServices: ModuleServices,
46
+ });
47
+ const loaders = [containerLoader, providers_1.default];
13
48
  const service = _services_1.FileModuleService;
14
- const loaders = [];
15
49
  exports.moduleDefinition = {
16
50
  service,
17
51
  loaders,
@@ -1,10 +1,18 @@
1
- import { Context, CreateFileDTO, FileDTO, ModuleJoinerConfig } from "@medusajs/types";
2
- export default class FileModuleService {
3
- constructor();
1
+ import { Context, CreateFileDTO, FileDTO, ModuleJoinerConfig, FileTypes, FilterableFileProps, FindConfig } from "@medusajs/types";
2
+ import FileProviderService from "./file-provider-service";
3
+ type InjectedDependencies = {
4
+ fileProviderService: FileProviderService;
5
+ };
6
+ export default class FileModuleService implements FileTypes.IFileModuleService {
7
+ protected readonly fileProviderService_: FileProviderService;
8
+ constructor({ fileProviderService }: InjectedDependencies);
4
9
  __joinerConfig(): ModuleJoinerConfig;
5
10
  create(data: CreateFileDTO[], sharedContext?: Context): Promise<FileDTO[]>;
6
11
  create(data: CreateFileDTO, sharedContext?: Context): Promise<FileDTO>;
7
12
  delete(ids: string[], sharedContext?: Context): Promise<void>;
8
13
  delete(id: string, sharedContext?: Context): Promise<void>;
9
14
  retrieve(id: string): Promise<FileDTO>;
15
+ list(filters?: FilterableFileProps, config?: FindConfig<FileDTO>, sharedContext?: Context): Promise<FileDTO[]>;
16
+ listAndCount(filters?: FilterableFileProps, config?: FindConfig<FileDTO>, sharedContext?: Context): Promise<[FileDTO[], number]>;
10
17
  }
18
+ export {};
@@ -1,25 +1,76 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const joiner_config_1 = require("../joiner-config");
4
+ const medusa_core_utils_1 = require("medusa-core-utils");
4
5
  class FileModuleService {
5
- constructor() {
6
- // @ts-ignore
7
- // eslint-disable-next-line prefer-rest-params
8
- super(...arguments);
6
+ constructor({ fileProviderService }) {
7
+ this.fileProviderService_ = fileProviderService;
9
8
  }
10
9
  __joinerConfig() {
11
10
  return joiner_config_1.joinerConfig;
12
11
  }
13
12
  async create(data) {
14
13
  const input = Array.isArray(data) ? data : [data];
15
- const files = [];
16
- return Array.isArray(data) ? files : files[0];
14
+ // TODO: Validate file mime type, have config for allowed types
15
+ const files = await Promise.all(input.map((file) => this.fileProviderService_.upload(file)));
16
+ const result = files.map((file) => ({
17
+ id: file.key,
18
+ url: file.url,
19
+ }));
20
+ return Array.isArray(data) ? result : result[0];
17
21
  }
18
22
  async delete(ids) {
23
+ const input = Array.isArray(ids) ? ids : [ids];
24
+ await Promise.all(input.map((id) => this.fileProviderService_.delete({ fileKey: id })));
19
25
  return;
20
26
  }
21
27
  async retrieve(id) {
22
- return {};
28
+ const res = await this.fileProviderService_.getPresignedDownloadUrl({
29
+ fileKey: id,
30
+ });
31
+ return {
32
+ id,
33
+ url: res,
34
+ };
35
+ }
36
+ async list(filters, config, sharedContext) {
37
+ const id = Array.isArray(filters?.id) ? filters?.id?.[0] : filters?.id;
38
+ if (!id) {
39
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, "Listing of files is only supported when filtering by ID.");
40
+ }
41
+ const res = await this.fileProviderService_.getPresignedDownloadUrl({
42
+ fileKey: id,
43
+ });
44
+ if (!res) {
45
+ return [];
46
+ }
47
+ return [
48
+ {
49
+ id,
50
+ url: res,
51
+ },
52
+ ];
53
+ }
54
+ async listAndCount(filters, config, sharedContext) {
55
+ const id = Array.isArray(filters?.id) ? filters?.id?.[0] : filters?.id;
56
+ if (!id) {
57
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, "Listing and counting of files is only supported when filtering by ID.");
58
+ }
59
+ const res = await this.fileProviderService_.getPresignedDownloadUrl({
60
+ fileKey: id,
61
+ });
62
+ if (!res) {
63
+ return [[], 0];
64
+ }
65
+ return [
66
+ [
67
+ {
68
+ id,
69
+ url: res,
70
+ },
71
+ ],
72
+ 1,
73
+ ];
23
74
  }
24
75
  }
25
76
  exports.default = FileModuleService;
@@ -0,0 +1,14 @@
1
+ import { Constructor, FileTypes } from "@medusajs/types";
2
+ import { FileProviderRegistrationPrefix } from "../types";
3
+ type InjectedDependencies = {
4
+ [key: `${typeof FileProviderRegistrationPrefix}${string}`]: FileTypes.IFileProvider;
5
+ };
6
+ export default class FileProviderService {
7
+ protected readonly fileProvider_: FileTypes.IFileProvider;
8
+ constructor(container: InjectedDependencies);
9
+ static getRegistrationIdentifier(providerClass: Constructor<FileTypes.IFileProvider>, optionName?: string): string;
10
+ upload(file: FileTypes.ProviderUploadFileDTO): Promise<FileTypes.ProviderFileResultDTO>;
11
+ delete(fileData: FileTypes.ProviderDeleteFileDTO): Promise<void>;
12
+ getPresignedDownloadUrl(fileData: FileTypes.ProviderGetFileDTO): Promise<string>;
13
+ }
14
+ export {};
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const medusa_core_utils_1 = require("medusa-core-utils");
4
+ const _types_1 = require("../types");
5
+ class FileProviderService {
6
+ constructor(container) {
7
+ const fileProviderKeys = Object.keys(container).filter((k) => k.startsWith(_types_1.FileProviderRegistrationPrefix));
8
+ if (fileProviderKeys.length !== 1) {
9
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, `File module should be initialized with exactly one provider`);
10
+ }
11
+ this.fileProvider_ = container[fileProviderKeys[0]];
12
+ }
13
+ static getRegistrationIdentifier(providerClass, optionName) {
14
+ return `${providerClass.identifier}_${optionName}`;
15
+ }
16
+ upload(file) {
17
+ return this.fileProvider_.upload(file);
18
+ }
19
+ delete(fileData) {
20
+ return this.fileProvider_.delete(fileData);
21
+ }
22
+ getPresignedDownloadUrl(fileData) {
23
+ return this.fileProvider_.getPresignedDownloadUrl(fileData);
24
+ }
25
+ }
26
+ exports.default = FileProviderService;
@@ -1 +1,2 @@
1
1
  export { default as FileModuleService } from "./file-module-service";
2
+ export { default as FileProviderService } from "./file-provider-service";
@@ -3,6 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.FileModuleService = void 0;
6
+ exports.FileProviderService = exports.FileModuleService = void 0;
7
7
  var file_module_service_1 = require("./file-module-service");
8
8
  Object.defineProperty(exports, "FileModuleService", { enumerable: true, get: function () { return __importDefault(file_module_service_1).default; } });
9
+ var file_provider_service_1 = require("./file-provider-service");
10
+ Object.defineProperty(exports, "FileProviderService", { enumerable: true, get: function () { return __importDefault(file_provider_service_1).default; } });
@@ -0,0 +1,20 @@
1
+ import { ModuleProviderExports, ModuleServiceInitializeOptions } from "@medusajs/types";
2
+ export declare const FileProviderIdentifierRegistrationName = "file_providers_identifier";
3
+ export declare const FileProviderRegistrationPrefix = "fs_";
4
+ export type FileModuleOptions = Partial<ModuleServiceInitializeOptions> & {
5
+ /**
6
+ * Providers to be registered
7
+ */
8
+ provider?: {
9
+ /**
10
+ * The module provider to be registered
11
+ */
12
+ resolve: string | ModuleProviderExports;
13
+ options: {
14
+ /**
15
+ * key value pair of the provider name and the configuration to be passed to the provider constructor
16
+ */
17
+ config: Record<string, unknown>;
18
+ };
19
+ };
20
+ };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileProviderRegistrationPrefix = exports.FileProviderIdentifierRegistrationName = void 0;
4
+ exports.FileProviderIdentifierRegistrationName = "file_providers_identifier";
5
+ exports.FileProviderRegistrationPrefix = "fs_";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medusajs/file",
3
- "version": "0.0.1",
3
+ "version": "0.0.2-next-20240430121402",
4
4
  "description": "Medusa File module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -38,7 +38,7 @@
38
38
  "cross-env": "^5.2.1",
39
39
  "faker": "^6.6.6",
40
40
  "jest": "^29.6.3",
41
- "medusa-test-utils": "^1.1.43",
41
+ "medusa-test-utils": "1.1.44-next-20240430121402",
42
42
  "pg-god": "^1.0.12",
43
43
  "rimraf": "^3.0.2",
44
44
  "ts-jest": "^29.1.1",
@@ -47,9 +47,9 @@
47
47
  "typescript": "^5.1.6"
48
48
  },
49
49
  "dependencies": {
50
- "@medusajs/modules-sdk": "^1.12.10",
51
- "@medusajs/types": "^1.11.15",
52
- "@medusajs/utils": "^1.11.8",
50
+ "@medusajs/modules-sdk": "1.12.11-next-20240430121402",
51
+ "@medusajs/types": "1.11.16-next-20240430121402",
52
+ "@medusajs/utils": "1.11.9-next-20240430121402",
53
53
  "@mikro-orm/core": "5.9.7",
54
54
  "@mikro-orm/migrations": "5.9.7",
55
55
  "@mikro-orm/postgresql": "5.9.7",
File without changes
File without changes