@ackplus/nest-file-storage 1.1.23 → 2.0.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 (86) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/MIGRATION.md +220 -0
  3. package/README.md +311 -557
  4. package/dist/index.d.ts +1 -4
  5. package/dist/index.js +1 -4
  6. package/dist/index.js.map +1 -1
  7. package/dist/lib/constants.d.ts +3 -1
  8. package/dist/lib/constants.js +4 -2
  9. package/dist/lib/constants.js.map +1 -1
  10. package/dist/lib/driver-registry.d.ts +34 -0
  11. package/dist/lib/driver-registry.js +118 -0
  12. package/dist/lib/driver-registry.js.map +1 -0
  13. package/dist/lib/drivers/azure.driver.d.ts +21 -0
  14. package/dist/lib/drivers/azure.driver.js +91 -0
  15. package/dist/lib/drivers/azure.driver.js.map +1 -0
  16. package/dist/lib/drivers/driver.interface.d.ts +40 -0
  17. package/dist/lib/drivers/driver.interface.js +3 -0
  18. package/dist/lib/drivers/driver.interface.js.map +1 -0
  19. package/dist/lib/drivers/driver.util.d.ts +2 -0
  20. package/dist/lib/drivers/driver.util.js +15 -0
  21. package/dist/lib/drivers/driver.util.js.map +1 -0
  22. package/dist/lib/drivers/index.d.ts +7 -0
  23. package/dist/lib/drivers/index.js +39 -0
  24. package/dist/lib/drivers/index.js.map +1 -0
  25. package/dist/lib/drivers/local.driver.d.ts +15 -0
  26. package/dist/lib/drivers/local.driver.js +110 -0
  27. package/dist/lib/drivers/local.driver.js.map +1 -0
  28. package/dist/lib/drivers/s3.driver.d.ts +22 -0
  29. package/dist/lib/drivers/s3.driver.js +103 -0
  30. package/dist/lib/drivers/s3.driver.js.map +1 -0
  31. package/dist/lib/file-storage.service.d.ts +16 -5
  32. package/dist/lib/file-storage.service.js +60 -22
  33. package/dist/lib/file-storage.service.js.map +1 -1
  34. package/dist/lib/index.d.ts +9 -2
  35. package/dist/lib/index.js +15 -2
  36. package/dist/lib/index.js.map +1 -1
  37. package/dist/lib/interceptor/file-storage.interceptor.d.ts +7 -10
  38. package/dist/lib/interceptor/file-storage.interceptor.js +117 -112
  39. package/dist/lib/interceptor/file-storage.interceptor.js.map +1 -1
  40. package/dist/lib/multer/driver-multer-engine.d.ts +18 -0
  41. package/dist/lib/multer/driver-multer-engine.js +91 -0
  42. package/dist/lib/multer/driver-multer-engine.js.map +1 -0
  43. package/dist/lib/nest-file-storage.module.d.ts +3 -3
  44. package/dist/lib/nest-file-storage.module.js +81 -44
  45. package/dist/lib/nest-file-storage.module.js.map +1 -1
  46. package/dist/lib/registry-holder.d.ts +6 -0
  47. package/dist/lib/registry-holder.js +26 -0
  48. package/dist/lib/registry-holder.js.map +1 -0
  49. package/dist/lib/tenant/tenant-from.d.ts +14 -0
  50. package/dist/lib/tenant/tenant-from.js +71 -0
  51. package/dist/lib/tenant/tenant-from.js.map +1 -0
  52. package/dist/lib/tenant/tenant.types.d.ts +20 -0
  53. package/dist/lib/tenant/tenant.types.js +3 -0
  54. package/dist/lib/tenant/tenant.types.js.map +1 -0
  55. package/dist/lib/types.d.ts +45 -35
  56. package/dist/lib/types.js.map +1 -1
  57. package/dist/lib/validation.d.ts +22 -0
  58. package/dist/lib/validation.js +98 -0
  59. package/dist/lib/validation.js.map +1 -0
  60. package/dist/tsconfig.build.tsbuildinfo +1 -1
  61. package/examples/1-basic-local-storage.example.ts +11 -7
  62. package/examples/10-testing.example.ts +60 -196
  63. package/examples/11-custom-driver.example.ts +82 -0
  64. package/examples/12-multi-tenant.example.ts +93 -0
  65. package/examples/2-s3-storage.example.ts +18 -16
  66. package/examples/3-azure-storage.example.ts +14 -12
  67. package/examples/4-upload-controller.example.ts +20 -55
  68. package/examples/5-custom-configuration.example.ts +37 -57
  69. package/examples/6-file-service.example.ts +34 -91
  70. package/examples/7-user-avatar.example.ts +37 -92
  71. package/examples/8-document-management.example.ts +45 -196
  72. package/examples/9-dynamic-storage.example.ts +29 -147
  73. package/examples/README.md +25 -107
  74. package/package.json +17 -4
  75. package/dist/lib/storage/azure.storage.d.ts +0 -18
  76. package/dist/lib/storage/azure.storage.js +0 -210
  77. package/dist/lib/storage/azure.storage.js.map +0 -1
  78. package/dist/lib/storage/local.storage.d.ts +0 -20
  79. package/dist/lib/storage/local.storage.js +0 -212
  80. package/dist/lib/storage/local.storage.js.map +0 -1
  81. package/dist/lib/storage/s3.storage.d.ts +0 -19
  82. package/dist/lib/storage/s3.storage.js +0 -241
  83. package/dist/lib/storage/s3.storage.js.map +0 -1
  84. package/dist/lib/storage.factory.d.ts +0 -8
  85. package/dist/lib/storage.factory.js +0 -46
  86. package/dist/lib/storage.factory.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"file-storage.interceptor.js","sourceRoot":"","sources":["../../../src/lib/interceptor/file-storage.interceptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-storage.interceptor.js","sourceRoot":"","sources":["../../../src/lib/interceptor/file-storage.interceptor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Request } from 'express';
2
+ import { StorageEngine } from 'multer';
3
+ import type { FileKeyResolver, StorageDriver } from '../drivers/driver.interface';
4
+ export interface EngineKeyOptions {
5
+ fileName?: FileKeyResolver;
6
+ fileDist?: FileKeyResolver;
7
+ prefix?: string;
8
+ }
9
+ export declare function joinKey(...parts: Array<string | undefined>): string;
10
+ export declare class DriverMulterEngine implements StorageEngine {
11
+ private readonly driver;
12
+ private readonly options;
13
+ constructor(driver: StorageDriver, options?: EngineKeyOptions);
14
+ _handleFile(req: Request, file: Express.Multer.File, cb: (error?: unknown, info?: Partial<Express.Multer.File>) => void): void;
15
+ _removeFile(_req: Request, file: Express.Multer.File & {
16
+ key?: string;
17
+ }, cb: (error: Error | null) => void): void;
18
+ }
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DriverMulterEngine = void 0;
7
+ exports.joinKey = joinKey;
8
+ const concat_stream_1 = __importDefault(require("concat-stream"));
9
+ const multer_1 = require("multer");
10
+ const uuid_1 = require("uuid");
11
+ function pad(n) {
12
+ return String(n).padStart(2, '0');
13
+ }
14
+ function defaultDist() {
15
+ const d = new Date();
16
+ return `${d.getFullYear()}/${pad(d.getMonth() + 1)}/${pad(d.getDate())}`;
17
+ }
18
+ function defaultName(file) {
19
+ return `${(0, uuid_1.v4)()}-${file.originalname}`;
20
+ }
21
+ function joinKey(...parts) {
22
+ return parts
23
+ .filter((p) => !!p && p.length > 0)
24
+ .join('/')
25
+ .replace(/\\/g, '/')
26
+ .replace(/\/{2,}/g, '/')
27
+ .replace(/^\/+/, '')
28
+ .replace(/\/+$/, '');
29
+ }
30
+ class DriverMulterEngine {
31
+ driver;
32
+ options;
33
+ constructor(driver, options = {}) {
34
+ this.driver = driver;
35
+ this.options = options;
36
+ }
37
+ _handleFile(req, file, cb) {
38
+ const defaults = this.driver.keyDefaults ?? {};
39
+ const nameFn = this.options.fileName ?? defaults.fileName;
40
+ const distFn = this.options.fileDist ?? defaults.fileDist;
41
+ const prefix = this.options.prefix ?? defaults.prefix;
42
+ let aborted = false;
43
+ const fail = (err) => {
44
+ if (aborted)
45
+ return;
46
+ aborted = true;
47
+ cb(err);
48
+ };
49
+ file.stream.on('limit', () => fail(new multer_1.MulterError('LIMIT_FILE_SIZE', file.fieldname)));
50
+ file.stream.on('error', (err) => fail(err));
51
+ file.stream.pipe((0, concat_stream_1.default)({ encoding: 'buffer' }, (buffer) => {
52
+ if (aborted)
53
+ return;
54
+ void (async () => {
55
+ try {
56
+ const dist = distFn ? await distFn(file, req) : defaultDist();
57
+ const name = nameFn ? await nameFn(file, req) : defaultName(file);
58
+ const key = joinKey(prefix, dist, name);
59
+ const uploaded = await this.driver.putFile(buffer, key, {
60
+ contentType: file.mimetype,
61
+ });
62
+ if (aborted)
63
+ return;
64
+ const info = {
65
+ ...uploaded,
66
+ fieldName: file.fieldname,
67
+ originalName: file.originalname,
68
+ mimetype: file.mimetype,
69
+ encoding: file.encoding,
70
+ };
71
+ cb(null, info);
72
+ }
73
+ catch (err) {
74
+ fail(err);
75
+ }
76
+ })();
77
+ }));
78
+ }
79
+ _removeFile(_req, file, cb) {
80
+ const key = file.key;
81
+ if (!key) {
82
+ cb(null);
83
+ return;
84
+ }
85
+ Promise.resolve(this.driver.deleteFile(key))
86
+ .then(() => cb(null))
87
+ .catch((err) => cb(err));
88
+ }
89
+ }
90
+ exports.DriverMulterEngine = DriverMulterEngine;
91
+ //# sourceMappingURL=driver-multer-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver-multer-engine.js","sourceRoot":"","sources":["../../../src/lib/multer/driver-multer-engine.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { DynamicModule } from '@nestjs/common';
2
- import { FileStorageAsyncOptions, FileStorageModuleOptions } from './types';
2
+ import { FileStorageAsyncOptions, FileStorageModuleOptionsInput } from './types';
3
3
  export declare class NestFileStorageModule {
4
- static forRoot(options: FileStorageModuleOptions): DynamicModule;
4
+ static forRoot(options: FileStorageModuleOptionsInput): DynamicModule;
5
5
  static forRootAsync(options: FileStorageAsyncOptions): DynamicModule;
6
+ private static build;
6
7
  private static createAsyncProviders;
7
- private static createAsyncOptionsProvider;
8
8
  }
@@ -10,71 +10,108 @@ Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.NestFileStorageModule = void 0;
11
11
  const common_1 = require("@nestjs/common");
12
12
  const constants_1 = require("./constants");
13
+ const driver_registry_1 = require("./driver-registry");
14
+ const drivers_1 = require("./drivers");
13
15
  const file_storage_service_1 = require("./file-storage.service");
16
+ const registry_holder_1 = require("./registry-holder");
17
+ const types_1 = require("./types");
18
+ const logger = new common_1.Logger('NestFileStorage');
14
19
  let NestFileStorageModule = NestFileStorageModule_1 = class NestFileStorageModule {
15
20
  static forRoot(options) {
16
- return {
17
- module: NestFileStorageModule_1,
18
- providers: [
19
- {
20
- provide: constants_1.FILE_STORAGE_OPTIONS,
21
- useFactory: async () => {
22
- file_storage_service_1.FileStorageService.setOptions(options);
23
- return options;
24
- },
25
- inject: [],
26
- },
27
- file_storage_service_1.FileStorageService,
28
- ],
29
- exports: [],
21
+ const optionsProvider = {
22
+ provide: constants_1.FILE_STORAGE_OPTIONS,
23
+ useValue: normalizeOptions(options),
30
24
  };
25
+ return this.build([optionsProvider]);
31
26
  }
32
27
  static forRootAsync(options) {
33
- const asyncProviders = this.createAsyncProviders(options);
28
+ return this.build(this.createAsyncProviders(options), options.imports);
29
+ }
30
+ static build(optionProviders, imports = []) {
31
+ const registryProvider = {
32
+ provide: constants_1.FILE_STORAGE_REGISTRY,
33
+ useFactory: (opts) => {
34
+ const registry = new driver_registry_1.DriverRegistry(opts);
35
+ registry_holder_1.FileStorageRegistryHolder.set(registry);
36
+ return registry;
37
+ },
38
+ inject: [constants_1.FILE_STORAGE_OPTIONS],
39
+ };
34
40
  return {
35
41
  module: NestFileStorageModule_1,
36
- imports: options.imports || [],
37
- providers: [...asyncProviders, file_storage_service_1.FileStorageService],
38
- exports: [],
42
+ global: true,
43
+ imports,
44
+ providers: [...optionProviders, registryProvider, file_storage_service_1.FileStorageService],
45
+ exports: [file_storage_service_1.FileStorageService, constants_1.FILE_STORAGE_REGISTRY, constants_1.FILE_STORAGE_OPTIONS],
39
46
  };
40
47
  }
41
48
  static createAsyncProviders(options) {
42
- if (options.useExisting || options.useFactory) {
43
- return [this.createAsyncOptionsProvider(options)];
44
- }
45
- return [
46
- this.createAsyncOptionsProvider(options),
47
- {
48
- provide: options.useClass,
49
- useClass: options.useClass,
50
- },
51
- ];
52
- }
53
- static createAsyncOptionsProvider(options) {
54
49
  if (options.useFactory) {
55
- return {
56
- provide: constants_1.FILE_STORAGE_OPTIONS,
57
- useFactory: async (...args) => {
58
- const fileStorageOptions = await options.useFactory(...args);
59
- file_storage_service_1.FileStorageService.setOptions(fileStorageOptions);
60
- return fileStorageOptions;
50
+ return [
51
+ {
52
+ provide: constants_1.FILE_STORAGE_OPTIONS,
53
+ useFactory: async (...args) => normalizeOptions(await options.useFactory(...args)),
54
+ inject: options.inject || [],
61
55
  },
62
- inject: options.inject || [],
63
- };
56
+ ];
64
57
  }
65
- return {
58
+ const optionsProvider = {
66
59
  provide: constants_1.FILE_STORAGE_OPTIONS,
67
- useFactory: async (optionsFactory) => {
68
- const fileStorageOptions = await optionsFactory.createFileStorageOptions();
69
- file_storage_service_1.FileStorageService.setOptions(fileStorageOptions);
70
- return fileStorageOptions;
71
- },
60
+ useFactory: async (factory) => normalizeOptions(await factory.createFileStorageOptions()),
72
61
  inject: [options.useExisting || options.useClass],
73
62
  };
63
+ if (options.useClass) {
64
+ return [optionsProvider, { provide: options.useClass, useClass: options.useClass }];
65
+ }
66
+ return [optionsProvider];
74
67
  }
75
68
  };
76
69
  exports.NestFileStorageModule = NestFileStorageModule;
77
70
  exports.NestFileStorageModule = NestFileStorageModule = NestFileStorageModule_1 = __decorate([
78
71
  (0, common_1.Module)({})
79
72
  ], NestFileStorageModule);
73
+ function normalizeOptions(input) {
74
+ if (input && typeof input === 'object' && 'storage' in input) {
75
+ return translateV1Options(input);
76
+ }
77
+ return input;
78
+ }
79
+ function translateV1Options(v1) {
80
+ logger.warn('Received a deprecated v1 configuration ({ storage, *Config }). It was translated to the v2 ' +
81
+ '{ default, drivers } shape automatically. Please migrate (see MIGRATION.md); the v1 shape is removed in v3.');
82
+ switch (v1.storage) {
83
+ case types_1.FileStorageEnum.S3: {
84
+ warnTransform(v1.s3Config);
85
+ return {
86
+ default: 's3',
87
+ drivers: { s3: (0, drivers_1.s3Driver)(stripTransform(v1.s3Config)) },
88
+ };
89
+ }
90
+ case types_1.FileStorageEnum.AZURE: {
91
+ warnTransform(v1.azureConfig);
92
+ return {
93
+ default: 'azure',
94
+ drivers: { azure: (0, drivers_1.azureDriver)(stripTransform(v1.azureConfig)) },
95
+ };
96
+ }
97
+ case types_1.FileStorageEnum.LOCAL:
98
+ default: {
99
+ warnTransform(v1.localConfig);
100
+ return {
101
+ default: 'local',
102
+ drivers: { local: (0, drivers_1.localDriver)(stripTransform(v1.localConfig)) },
103
+ };
104
+ }
105
+ }
106
+ }
107
+ function stripTransform(config) {
108
+ const { transformUploadedFileObject, ...rest } = config;
109
+ return rest;
110
+ }
111
+ function warnTransform(config) {
112
+ if (config?.transformUploadedFileObject) {
113
+ logger.warn('`transformUploadedFileObject` was removed in v2 and is ignored. Shape upload results with ' +
114
+ "the interceptor's `mapToRequestBody` instead.");
115
+ }
116
+ }
80
117
  //# sourceMappingURL=nest-file-storage.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nest-file-storage.module.js","sourceRoot":"","sources":["../../src/lib/nest-file-storage.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAiE;AAEjE,2CAAmD;AACnD,iEAA4D;AAKrD,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAE9B,MAAM,CAAC,OAAO,CAAC,OAAiC;QAC5C,OAAO;YACH,MAAM,EAAE,uBAAqB;YAC7B,SAAS,EAAE;gBACP;oBACI,OAAO,EAAE,gCAAoB;oBAC7B,UAAU,EAAE,KAAK,IAAI,EAAE;wBACnB,yCAAkB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;wBACvC,OAAO,OAAO,CAAC;oBACnB,CAAC;oBACD,MAAM,EAAE,EAAE;iBACb;gBACD,yCAAkB;aACrB;YACD,OAAO,EAAE,EAAE;SACd,CAAC;IACN,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAgC;QAChD,MAAM,cAAc,GAAe,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEtE,OAAO;YACH,MAAM,EAAE,uBAAqB;YAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,SAAS,EAAE,CAAC,GAAG,cAAc,EAAE,yCAAkB,CAAC;YAClD,OAAO,EAAE,EAAE;SACd,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAAC,OAAgC;QAChE,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO;YACH,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;YACxC;gBACI,OAAO,EAAE,OAAO,CAAC,QAAS;gBAC1B,QAAQ,EAAE,OAAO,CAAC,QAAS;aAC9B;SACJ,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,0BAA0B,CAAC,OAAgC;QACtE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO;gBACH,OAAO,EAAE,gCAAoB;gBAC7B,UAAU,EAAE,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;oBACjC,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,UAAW,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC9D,yCAAkB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;oBAClD,OAAO,kBAAkB,CAAC;gBAC9B,CAAC;gBACD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;aAC/B,CAAC;QACN,CAAC;QAED,OAAO;YACH,OAAO,EAAE,gCAAoB;YAC7B,UAAU,EAAE,KAAK,EAAE,cAAyC,EAAE,EAAE;gBAC5D,MAAM,kBAAkB,GAAG,MAAM,cAAc,CAAC,wBAAwB,EAAE,CAAC;gBAC3E,yCAAkB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;gBAClD,OAAO,kBAAkB,CAAC;YAC9B,CAAC;YACD,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAS,CAAC;SACrD,CAAC;IACN,CAAC;CAEJ,CAAA;AArEY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,qBAAqB,CAqEjC"}
1
+ {"version":3,"file":"nest-file-storage.module.js","sourceRoot":"","sources":["../../src/lib/nest-file-storage.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAyE;AAEzE,2CAA0E;AAC1E,uDAAmD;AACnD,uCAA+D;AAC/D,iEAA4D;AAC5D,uDAA8D;AAC9D,mCAUiB;AAEjB,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,iBAAiB,CAAC,CAAC;AAGtC,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAK9B,MAAM,CAAC,OAAO,CAAC,OAAsC;QACjD,MAAM,eAAe,GAAa;YAC9B,OAAO,EAAE,gCAAoB;YAC7B,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC;SACtC,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,CAAC;IAGD,MAAM,CAAC,YAAY,CAAC,OAAgC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3E,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,eAA2B,EAAE,UAAoC,EAAE;QACpF,MAAM,gBAAgB,GAAa;YAC/B,OAAO,EAAE,iCAAqB;YAC9B,UAAU,EAAE,CAAC,IAA8B,EAAE,EAAE;gBAC3C,MAAM,QAAQ,GAAG,IAAI,gCAAc,CAAC,IAAI,CAAC,CAAC;gBAC1C,2CAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACxC,OAAO,QAAQ,CAAC;YACpB,CAAC;YACD,MAAM,EAAE,CAAC,gCAAoB,CAAC;SACjC,CAAC;QAEF,OAAO;YACH,MAAM,EAAE,uBAAqB;YAC7B,MAAM,EAAE,IAAI;YACZ,OAAO;YACP,SAAS,EAAE,CAAC,GAAG,eAAe,EAAE,gBAAgB,EAAE,yCAAkB,CAAC;YACrE,OAAO,EAAE,CAAC,yCAAkB,EAAE,iCAAqB,EAAE,gCAAoB,CAAC;SAC7E,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAAC,OAAgC;QAChE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO;gBACH;oBACI,OAAO,EAAE,gCAAoB;oBAC7B,UAAU,EAAE,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE,CACrC,gBAAgB,CAAC,MAAM,OAAO,CAAC,UAAW,CAAC,GAAG,IAAI,CAAC,CAAC;oBACxD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;iBAC/B;aACJ,CAAC;QACN,CAAC;QAED,MAAM,eAAe,GAAa;YAC9B,OAAO,EAAE,gCAAoB;YAC7B,UAAU,EAAE,KAAK,EAAE,OAAkC,EAAE,EAAE,CACrD,gBAAgB,CAAC,MAAM,OAAO,CAAC,wBAAwB,EAAE,CAAC;YAC9D,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAS,CAAC;SACrD,CAAC;QAEF,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7B,CAAC;CACJ,CAAA;AA9DY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,qBAAqB,CA8DjC;AAGD,SAAS,gBAAgB,CAAC,KAAoC;IAC1D,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC3D,OAAO,kBAAkB,CAAC,KAAmC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,KAAiC,CAAC;AAC7C,CAAC;AAED,SAAS,kBAAkB,CAAC,EAA8B;IACtD,MAAM,CAAC,IAAI,CACP,6FAA6F;QACzF,6GAA6G,CACpH,CAAC;IAEF,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;QACjB,KAAK,uBAAe,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;YAC3B,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,EAAE,EAAE,EAAE,IAAA,kBAAQ,EAAC,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAoB,CAAC,EAAE;aAC5E,CAAC;QACN,CAAC;QACD,KAAK,uBAAe,CAAC,KAAK,CAAC,CAAC,CAAC;YACzB,aAAa,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YAC9B,OAAO;gBACH,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,EAAE,KAAK,EAAE,IAAA,qBAAW,EAAC,cAAc,CAAC,EAAE,CAAC,WAAW,CAAuB,CAAC,EAAE;aACxF,CAAC;QACN,CAAC;QACD,KAAK,uBAAe,CAAC,KAAK,CAAC;QAC3B,OAAO,CAAC,CAAC,CAAC;YACN,aAAa,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YAC9B,OAAO;gBACH,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,EAAE,KAAK,EAAE,IAAA,qBAAW,EAAC,cAAc,CAAC,EAAE,CAAC,WAAW,CAAuB,CAAC,EAAE;aACxF,CAAC;QACN,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAsD,MAAS;IAClF,MAAM,EAAE,2BAA2B,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IACxD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,MAAiD;IACpE,IAAI,MAAM,EAAE,2BAA2B,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CACP,4FAA4F;YACxF,+CAA+C,CACtD,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { DriverRegistry } from './driver-registry';
2
+ export declare const FileStorageRegistryHolder: {
3
+ set(registry: DriverRegistry): void;
4
+ get(): DriverRegistry;
5
+ reset(): void;
6
+ };
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileStorageRegistryHolder = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ let current;
6
+ const logger = new common_1.Logger('NestFileStorage');
7
+ exports.FileStorageRegistryHolder = {
8
+ set(registry) {
9
+ if (current && current !== registry) {
10
+ logger.warn('NestFileStorageModule was initialized more than once in this process; the most ' +
11
+ 'recent configuration is now active for interceptor uploads and the static API.');
12
+ }
13
+ current = registry;
14
+ },
15
+ get() {
16
+ if (!current) {
17
+ throw new Error('NestFileStorageModule is not initialized. Import NestFileStorageModule.forRoot() or ' +
18
+ 'forRootAsync() before using FileStorageInterceptor or the static FileStorageService API.');
19
+ }
20
+ return current;
21
+ },
22
+ reset() {
23
+ current = undefined;
24
+ },
25
+ };
26
+ //# sourceMappingURL=registry-holder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-holder.js","sourceRoot":"","sources":["../../src/lib/registry-holder.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAIxC,IAAI,OAAmC,CAAC;AACxC,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,iBAAiB,CAAC,CAAC;AAQhC,QAAA,yBAAyB,GAAG;IACrC,GAAG,CAAC,QAAwB;QACxB,IAAI,OAAO,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CACP,iFAAiF;gBAC7E,gFAAgF,CACvF,CAAC;QACN,CAAC;QACD,OAAO,GAAG,QAAQ,CAAC;IACvB,CAAC;IAED,GAAG;QACC,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACX,sFAAsF;gBAClF,0FAA0F,CACjG,CAAC;QACN,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAGD,KAAK;QACD,OAAO,GAAG,SAAS,CAAC;IACxB,CAAC;CACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Request } from 'express';
2
+ import type { MaybePromise } from './tenant.types';
3
+ export type TenantResolveFn = (req: Request) => MaybePromise<string | undefined>;
4
+ export declare const tenantFrom: {
5
+ jwt(path?: string): TenantResolveFn;
6
+ header(name: string): TenantResolveFn;
7
+ subdomain(options?: {
8
+ rootDomain?: string;
9
+ ignore?: string[];
10
+ }): TenantResolveFn;
11
+ param(name: string): TenantResolveFn;
12
+ query(name: string): TenantResolveFn;
13
+ first(...resolvers: TenantResolveFn[]): TenantResolveFn;
14
+ };
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tenantFrom = void 0;
4
+ function getByPath(obj, path) {
5
+ return path.split('.').reduce((acc, key) => {
6
+ if (acc == null || typeof acc !== 'object')
7
+ return undefined;
8
+ return acc[key];
9
+ }, obj);
10
+ }
11
+ exports.tenantFrom = {
12
+ jwt(path = 'tenantId') {
13
+ return (req) => {
14
+ const user = req.user;
15
+ const value = user != null ? getByPath(user, path) : undefined;
16
+ return value != null ? String(value) : undefined;
17
+ };
18
+ },
19
+ header(name) {
20
+ const lower = name.toLowerCase();
21
+ return (req) => {
22
+ const value = req.headers?.[lower];
23
+ const single = Array.isArray(value) ? value[0] : value;
24
+ return single ? String(single) : undefined;
25
+ };
26
+ },
27
+ subdomain(options = {}) {
28
+ const ignore = new Set((options.ignore ?? ['www']).map((s) => s.toLowerCase()));
29
+ return (req) => {
30
+ const host = String(req.headers?.host ?? '').split(':')[0].toLowerCase();
31
+ if (!host)
32
+ return undefined;
33
+ if (options.rootDomain) {
34
+ const root = options.rootDomain.toLowerCase();
35
+ if (host === root || !host.endsWith(`.${root}`))
36
+ return undefined;
37
+ const sub = host.slice(0, -(root.length + 1)).split('.')[0];
38
+ return sub && !ignore.has(sub) ? sub : undefined;
39
+ }
40
+ const parts = host.split('.');
41
+ if (parts.length < 3)
42
+ return undefined;
43
+ const sub = parts[0];
44
+ return sub && !ignore.has(sub) ? sub : undefined;
45
+ };
46
+ },
47
+ param(name) {
48
+ return (req) => {
49
+ const value = req.params?.[name];
50
+ return value != null ? String(value) : undefined;
51
+ };
52
+ },
53
+ query(name) {
54
+ return (req) => {
55
+ const value = req.query?.[name];
56
+ const single = Array.isArray(value) ? value[0] : value;
57
+ return single != null ? String(single) : undefined;
58
+ };
59
+ },
60
+ first(...resolvers) {
61
+ return async (req) => {
62
+ for (const resolve of resolvers) {
63
+ const value = await resolve(req);
64
+ if (value != null && value !== '')
65
+ return value;
66
+ }
67
+ return undefined;
68
+ };
69
+ },
70
+ };
71
+ //# sourceMappingURL=tenant-from.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-from.js","sourceRoot":"","sources":["../../../src/lib/tenant/tenant-from.ts"],"names":[],"mappings":";;;AAOA,SAAS,SAAS,CAAC,GAAY,EAAE,IAAY;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAU,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAChD,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAC7D,OAAQ,GAA+B,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC,EAAE,GAAG,CAAC,CAAC;AACZ,CAAC;AAOY,QAAA,UAAU,GAAG;IAEtB,GAAG,CAAC,IAAI,GAAG,UAAU;QACjB,OAAO,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,IAAI,GAAI,GAAoC,CAAC,IAAI,CAAC;YACxD,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/D,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,CAAC,CAAC;IACN,CAAC;IAGD,MAAM,CAAC,IAAY;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACvD,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/C,CAAC,CAAC;IACN,CAAC;IAOD,SAAS,CAAC,UAAsD,EAAE;QAC9D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACzE,IAAI,CAAC,IAAI;gBAAE,OAAO,SAAS,CAAC;YAE5B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;gBAC9C,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;oBAAE,OAAO,SAAS,CAAC;gBAClE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5D,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YACrD,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC;YACvC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACrB,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,CAAC,CAAC;IACN,CAAC;IAGD,KAAK,CAAC,IAAY;QACd,OAAO,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,KAAK,GAAI,GAAG,CAAC,MAA8C,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1E,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,CAAC,CAAC;IACN,CAAC;IAGD,KAAK,CAAC,IAAY;QACd,OAAO,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,KAAK,GAAI,GAAG,CAAC,KAA6C,EAAE,CAAC,IAAI,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACvD,OAAO,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,CAAC,CAAC;IACN,CAAC;IAGD,KAAK,CAAC,GAAG,SAA4B;QACjC,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;YACjB,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;oBAAE,OAAO,KAAK,CAAC;YACpD,CAAC;YACD,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC;IACN,CAAC;CACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Request } from 'express';
2
+ import type { DriverFactory } from '../drivers/driver.interface';
3
+ export type MaybePromise<T> = T | Promise<T>;
4
+ export type TenantDriverSpec = string | {
5
+ use: string;
6
+ prefix?: string;
7
+ } | {
8
+ factory: DriverFactory;
9
+ prefix?: string;
10
+ };
11
+ export interface TenantCacheOptions {
12
+ ttlMs?: number;
13
+ max?: number;
14
+ }
15
+ export interface TenantOptions {
16
+ resolve: (req: Request) => MaybePromise<string | undefined>;
17
+ driver: (tenantId: string) => MaybePromise<TenantDriverSpec>;
18
+ cache?: TenantCacheOptions;
19
+ fallback?: 'default' | 'error';
20
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=tenant.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.types.js","sourceRoot":"","sources":["../../../src/lib/tenant/tenant.types.ts"],"names":[],"mappings":""}
@@ -1,5 +1,46 @@
1
1
  import { ModuleMetadata, Type } from '@nestjs/common';
2
- import { Request } from 'express';
2
+ import type { Request } from 'express';
3
+ import type { DriverFactory, DriverOptions, StorageDriver } from './drivers/driver.interface';
4
+ import type { TenantOptions } from './tenant/tenant.types';
5
+ import type { UploadValidation } from './validation';
6
+ export type Storage = StorageDriver;
7
+ export type { StorageDriver, DriverFactory, DriverOptions, KeyOptions, FileKeyResolver, PutFileMeta, SignedUrlOptions, UploadedFile, } from './drivers/driver.interface';
8
+ export type { TenantOptions, TenantDriverSpec, TenantCacheOptions, MaybePromise } from './tenant/tenant.types';
9
+ export interface LocalDriverOptions extends DriverOptions {
10
+ rootPath: string;
11
+ baseUrl: string;
12
+ }
13
+ export interface S3DriverOptions extends DriverOptions {
14
+ accessKeyId: string;
15
+ secretAccessKey: string;
16
+ region: string;
17
+ bucket: string;
18
+ endpoint?: string;
19
+ cloudFrontUrl?: string;
20
+ clientOptions?: Record<string, unknown>;
21
+ }
22
+ export interface AzureDriverOptions extends DriverOptions {
23
+ account: string;
24
+ accountKey: string;
25
+ container: string;
26
+ cdnUrl?: string;
27
+ }
28
+ export interface FileStorageModuleOptions {
29
+ default: string;
30
+ drivers: Record<string, DriverFactory>;
31
+ validation?: UploadValidation;
32
+ tenant?: TenantOptions;
33
+ }
34
+ export interface FileStorageOptionsFactory {
35
+ createFileStorageOptions(): Promise<FileStorageModuleOptions> | FileStorageModuleOptions;
36
+ }
37
+ export interface FileStorageAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
38
+ useExisting?: Type<FileStorageOptionsFactory>;
39
+ useClass?: Type<FileStorageOptionsFactory>;
40
+ useFactory?: (...args: any[]) => Promise<FileStorageModuleOptions> | FileStorageModuleOptions;
41
+ inject?: any[];
42
+ }
43
+ export type FileStorageModuleOptionsInput = FileStorageModuleOptions | V1FileStorageModuleOptions;
3
44
  export declare enum FileStorageEnum {
4
45
  LOCAL = "local",
5
46
  S3 = "s3",
@@ -29,7 +70,7 @@ export interface AzureStorageOptions extends FileStorageOptions {
29
70
  container: string;
30
71
  }
31
72
  export type StorageOptions = S3StorageOptions | AzureStorageOptions | LocalStorageOptions;
32
- export type FileStorageConfigOptions = {
73
+ export type V1FileStorageModuleOptions = {
33
74
  storage: FileStorageEnum.LOCAL;
34
75
  localConfig: LocalStorageOptions;
35
76
  } | {
@@ -39,39 +80,8 @@ export type FileStorageConfigOptions = {
39
80
  storage: FileStorageEnum.AZURE;
40
81
  azureConfig: AzureStorageOptions;
41
82
  };
83
+ export type FileStorageConfigOptions = V1FileStorageModuleOptions;
42
84
  export interface FileStorageClassOptions {
43
- storageFactory: () => Promise<new (...args: any[]) => Storage> | (new (...args: any[]) => Storage);
85
+ storageFactory: () => Promise<new (...args: any[]) => unknown> | (new (...args: any[]) => unknown);
44
86
  options?: any;
45
87
  }
46
- export type FileStorageModuleOptions = FileStorageConfigOptions | FileStorageClassOptions;
47
- export interface FileStorageAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
48
- useExisting?: Type<FileStorageOptionsFactory>;
49
- useClass?: Type<FileStorageOptionsFactory>;
50
- useFactory?: (...args: any[]) => Promise<FileStorageModuleOptions> | FileStorageModuleOptions;
51
- inject?: any[];
52
- }
53
- export interface FileStorageOptionsFactory {
54
- createFileStorageOptions(): Promise<FileStorageModuleOptions> | FileStorageModuleOptions;
55
- }
56
- export interface UploadedFile {
57
- fieldName?: string;
58
- fieldname?: string;
59
- fileName: string;
60
- originalName: string;
61
- size: number;
62
- mimetype?: string;
63
- buffer?: Buffer;
64
- key: string;
65
- url: string;
66
- fullPath: string;
67
- encoding?: string;
68
- }
69
- export interface Storage {
70
- getFile(key: string): Promise<Buffer> | Buffer;
71
- deleteFile(key: string): Promise<void> | void;
72
- putFile(fileContent: Buffer, key: string, options?: any): Promise<UploadedFile> | UploadedFile;
73
- path?(filePath: string): Promise<string> | string;
74
- getUrl(key: string): Promise<string> | string;
75
- getSignedUrl?(key: string, options: any): Promise<string> | string;
76
- copyFile(oldKey: string, newKey: string): Promise<UploadedFile>;
77
- }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":";;;AAIA,IAAY,eAIX;AAJD,WAAY,eAAe;IACvB,kCAAe,CAAA;IACf,4BAAS,CAAA;IACT,kCAAe,CAAA;AACnB,CAAC,EAJW,eAAe,+BAAf,eAAe,QAI1B"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":";;;AA2GA,IAAY,eAIX;AAJD,WAAY,eAAe;IACvB,kCAAe,CAAA;IACf,4BAAS,CAAA;IACT,kCAAe,CAAA;AACnB,CAAC,EAJW,eAAe,+BAAf,eAAe,QAI1B"}