@nestm/storage 0.1.0-alpha.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/CHANGELOG.md +21 -0
- package/CONTRIBUTING.md +83 -0
- package/LICENSE +21 -0
- package/README.md +386 -0
- package/SECURITY.md +25 -0
- package/dist/files-sdk/files-sdk.driver.d.ts +36 -0
- package/dist/files-sdk/files-sdk.driver.d.ts.map +1 -0
- package/dist/files-sdk/files-sdk.driver.js +352 -0
- package/dist/files-sdk/files-sdk.driver.js.map +1 -0
- package/dist/files-sdk/index.d.ts +3 -0
- package/dist/files-sdk/index.d.ts.map +1 -0
- package/dist/files-sdk/index.js +2 -0
- package/dist/files-sdk/index.js.map +1 -0
- package/dist/gateway/index.d.ts +3 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +3 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/storage-gateway-fastify-parser.d.ts +9 -0
- package/dist/gateway/storage-gateway-fastify-parser.d.ts.map +1 -0
- package/dist/gateway/storage-gateway-fastify-parser.js +50 -0
- package/dist/gateway/storage-gateway-fastify-parser.js.map +1 -0
- package/dist/gateway/storage-gateway.controller.d.ts +31 -0
- package/dist/gateway/storage-gateway.controller.d.ts.map +1 -0
- package/dist/gateway/storage-gateway.controller.js +601 -0
- package/dist/gateway/storage-gateway.controller.js.map +1 -0
- package/dist/gateway/storage-gateway.guard.d.ts +7 -0
- package/dist/gateway/storage-gateway.guard.d.ts.map +1 -0
- package/dist/gateway/storage-gateway.guard.js +40 -0
- package/dist/gateway/storage-gateway.guard.js.map +1 -0
- package/dist/gateway/storage-gateway.module.d.ts +6 -0
- package/dist/gateway/storage-gateway.module.d.ts.map +1 -0
- package/dist/gateway/storage-gateway.module.js +98 -0
- package/dist/gateway/storage-gateway.module.js.map +1 -0
- package/dist/gateway/storage-gateway.tokens.d.ts +3 -0
- package/dist/gateway/storage-gateway.tokens.d.ts.map +1 -0
- package/dist/gateway/storage-gateway.tokens.js +3 -0
- package/dist/gateway/storage-gateway.tokens.js.map +1 -0
- package/dist/gateway/storage-gateway.types.d.ts +65 -0
- package/dist/gateway/storage-gateway.types.d.ts.map +1 -0
- package/dist/gateway/storage-gateway.types.js +13 -0
- package/dist/gateway/storage-gateway.types.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/inject-storage.decorator.d.ts +2 -0
- package/dist/inject-storage.decorator.d.ts.map +1 -0
- package/dist/inject-storage.decorator.js +6 -0
- package/dist/inject-storage.decorator.js.map +1 -0
- package/dist/internal/settle-many.d.ts +7 -0
- package/dist/internal/settle-many.d.ts.map +1 -0
- package/dist/internal/settle-many.js +62 -0
- package/dist/internal/settle-many.js.map +1 -0
- package/dist/storage-module.options.d.ts +62 -0
- package/dist/storage-module.options.d.ts.map +1 -0
- package/dist/storage-module.options.js +2 -0
- package/dist/storage-module.options.js.map +1 -0
- package/dist/storage-upload-control.d.ts +22 -0
- package/dist/storage-upload-control.d.ts.map +1 -0
- package/dist/storage-upload-control.js +139 -0
- package/dist/storage-upload-control.js.map +1 -0
- package/dist/storage.client.d.ts +51 -0
- package/dist/storage.client.d.ts.map +1 -0
- package/dist/storage.client.js +395 -0
- package/dist/storage.client.js.map +1 -0
- package/dist/storage.driver.d.ts +18 -0
- package/dist/storage.driver.d.ts.map +1 -0
- package/dist/storage.driver.js +2 -0
- package/dist/storage.driver.js.map +1 -0
- package/dist/storage.error.d.ts +39 -0
- package/dist/storage.error.d.ts.map +1 -0
- package/dist/storage.error.js +49 -0
- package/dist/storage.error.js.map +1 -0
- package/dist/storage.module.d.ts +11 -0
- package/dist/storage.module.d.ts.map +1 -0
- package/dist/storage.module.js +170 -0
- package/dist/storage.module.js.map +1 -0
- package/dist/storage.service.d.ts +12 -0
- package/dist/storage.service.d.ts.map +1 -0
- package/dist/storage.service.js +246 -0
- package/dist/storage.service.js.map +1 -0
- package/dist/storage.tokens.d.ts +6 -0
- package/dist/storage.tokens.d.ts.map +1 -0
- package/dist/storage.tokens.js +13 -0
- package/dist/storage.tokens.js.map +1 -0
- package/dist/storage.types.d.ts +244 -0
- package/dist/storage.types.d.ts.map +1 -0
- package/dist/storage.types.js +2 -0
- package/dist/storage.types.js.map +1 -0
- package/dist/testing/index.d.ts +9 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +10 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.client.js","sourceRoot":"","sources":["../src/storage.client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { OnApplicationShutdown } from '@nestjs/common';\n\nimport { settleMany } from './internal/settle-many.js';\nimport {\n StorageError,\n StorageErrorCode,\n normalizeStorageError,\n} from './storage.error.js';\nimport type { StorageDriver } from './storage.driver.js';\nimport type {\n StorageBody,\n StorageBufferedDownloadOptions,\n StorageBulkOptions,\n StorageCapabilities,\n StorageDeleteManyResult,\n StorageDownloadManyResult,\n StorageDownloadOptions,\n StorageExistsManyResult,\n StorageHeadManyResult,\n StorageListOptions,\n StorageListResult,\n StorageObject,\n StorageObjectMetadata,\n StorageOperationContext,\n StorageOperationOptions,\n StoragePlugin,\n StorageSearchOptions,\n StorageSignedDownloadOptions,\n StorageSignedUpload,\n StorageSignedUploadOptions,\n StorageUploadManyItem,\n StorageUploadManyOptions,\n StorageUploadManyResult,\n StorageUploadOptions,\n StorageUploadResult,\n} from './storage.types.js';\n\nexport const DEFAULT_BUFFER_LIMIT = 10 * 1024 * 1024;\n\ntype BulkOperationOptions = StorageBulkOptions & StorageOperationOptions;\ntype DownloadManyOptions = StorageBulkOptions & StorageDownloadOptions;\n\nfunction assertKey(key: string, label = 'key'): void {\n if (typeof key !== 'string' || key.length === 0) {\n throw new StorageError(`${label} must be a non-empty string.`, {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n });\n }\n}\n\nfunction invalidArgument(message: string): never {\n throw new StorageError(message, {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n });\n}\n\nfunction assertPositiveSafeInteger(\n value: number | undefined,\n label: string,\n): void {\n if (value !== undefined && (!Number.isSafeInteger(value) || value <= 0)) {\n invalidArgument(`${label} must be a positive safe integer.`);\n }\n}\n\nfunction assertDownloadOptions(options?: StorageDownloadOptions): void {\n const range = options?.range;\n if (range === undefined) {\n return;\n }\n if (!Number.isSafeInteger(range.start) || range.start < 0) {\n invalidArgument('range.start must be a non-negative safe integer.');\n }\n if (\n range.end !== undefined &&\n (!Number.isSafeInteger(range.end) || range.end < range.start)\n ) {\n invalidArgument(\n 'range.end must be a safe integer greater than or equal to range.start.',\n );\n }\n}\n\nfunction assertListOptions(options?: StorageListOptions): void {\n if (options?.delimiter !== undefined && options.delimiter.length === 0) {\n invalidArgument('delimiter must be a non-empty string.');\n }\n assertPositiveSafeInteger(options?.limit, 'limit');\n}\n\nfunction assertSearchOptions(options?: StorageSearchOptions): void {\n assertPositiveSafeInteger(options?.limit, 'limit');\n assertPositiveSafeInteger(options?.maxResults, 'maxResults');\n}\n\nfunction assertSignedUploadOptions(options: StorageSignedUploadOptions): void {\n assertPositiveSafeInteger(options.expiresIn, 'expiresIn');\n assertPositiveSafeInteger(options.maxSize, 'maxSize');\n if (\n options.minSize !== undefined &&\n (!Number.isSafeInteger(options.minSize) || options.minSize < 0)\n ) {\n invalidArgument('minSize must be a non-negative safe integer.');\n }\n if (\n options.minSize !== undefined &&\n options.maxSize !== undefined &&\n options.minSize > options.maxSize\n ) {\n invalidArgument('minSize cannot be greater than maxSize.');\n }\n}\n\nfunction operationOptions(\n options?: BulkOperationOptions,\n): StorageOperationOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return {\n ...(options.retries !== undefined && { retries: options.retries }),\n ...(options.signal !== undefined && { signal: options.signal }),\n ...(options.timeout !== undefined && { timeout: options.timeout }),\n };\n}\n\nfunction downloadOptions(\n options?: DownloadManyOptions,\n): StorageDownloadOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return {\n ...operationOptions(options),\n ...(options.range !== undefined && { range: options.range }),\n };\n}\n\nasync function collectBody(\n object: StorageObject,\n maxBytes: number,\n): Promise<Uint8Array> {\n if (maxBytes !== Infinity && (!Number.isFinite(maxBytes) || maxBytes < 0)) {\n await object.body.cancel().catch(() => undefined);\n throw new StorageError(\n 'maxBytes must be a non-negative finite number or Infinity.',\n {\n code: StorageErrorCode.INVALID_ARGUMENT,\n key: object.key,\n permanent: true,\n },\n );\n }\n\n if (maxBytes !== Infinity && object.size > maxBytes) {\n await object.body.cancel().catch(() => undefined);\n throw new StorageError(\n `Object \"${object.key}\" is ${object.size} bytes, exceeding the ${maxBytes}-byte buffer limit.`,\n {\n code: StorageErrorCode.LIMIT_EXCEEDED,\n key: object.key,\n permanent: true,\n },\n );\n }\n\n const chunks: Uint8Array[] = [];\n let total = 0;\n const reader = object.body.getReader();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n total += value.byteLength;\n if (maxBytes !== Infinity && total > maxBytes) {\n await reader.cancel().catch(() => undefined);\n throw new StorageError(\n `Object \"${object.key}\" exceeded the ${maxBytes}-byte buffer limit while downloading.`,\n {\n code: StorageErrorCode.LIMIT_EXCEEDED,\n key: object.key,\n permanent: true,\n },\n );\n }\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n\n const bytes = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n}\n\nexport interface StorageFileHandle {\n readonly key: string;\n upload(\n body: StorageBody,\n options?: StorageUploadOptions,\n ): Promise<StorageUploadResult>;\n download(options?: StorageDownloadOptions): Promise<StorageObject>;\n bytes(options?: StorageBufferedDownloadOptions): Promise<Uint8Array>;\n text(options?: StorageBufferedDownloadOptions): Promise<string>;\n head(options?: StorageOperationOptions): Promise<StorageObjectMetadata>;\n exists(options?: StorageOperationOptions): Promise<boolean>;\n delete(options?: StorageOperationOptions): Promise<void>;\n signDownload(options?: StorageSignedDownloadOptions): Promise<string>;\n signUpload(options: StorageSignedUploadOptions): Promise<StorageSignedUpload>;\n copyTo(\n destinationKey: string,\n options?: StorageOperationOptions,\n ): Promise<void>;\n moveTo(\n destinationKey: string,\n options?: StorageOperationOptions,\n ): Promise<void>;\n}\n\nexport class StorageClient implements OnApplicationShutdown {\n readonly #driver: StorageDriver;\n readonly #plugins: readonly StoragePlugin[];\n #closed = false;\n\n constructor(\n readonly name: string,\n driver: StorageDriver,\n plugins: readonly StoragePlugin[] = [],\n ) {\n assertKey(name, 'store name');\n this.#driver = driver;\n this.#plugins = [...plugins];\n }\n\n get driverName(): string {\n return this.#driver.name;\n }\n\n get capabilities(): Readonly<StorageCapabilities> {\n return this.#driver.capabilities;\n }\n\n file(key: string): StorageFileHandle {\n assertKey(key);\n return {\n copyTo: (destinationKey, options) =>\n this.copy(key, destinationKey, options),\n delete: (options) => this.delete(key, options),\n download: (options) => this.downloadStream(key, options),\n exists: (options) => this.exists(key, options),\n head: (options) => this.head(key, options),\n key,\n moveTo: (destinationKey, options) =>\n this.move(key, destinationKey, options),\n signDownload: (options) => this.signDownload(key, options),\n signUpload: (options) => this.signUpload(key, options),\n bytes: (options) => this.downloadBytes(key, options),\n text: (options) => this.downloadText(key, options),\n upload: (body, options) => this.upload(key, body, options),\n };\n }\n\n upload(\n key: string,\n body: StorageBody,\n options?: StorageUploadOptions,\n ): Promise<StorageUploadResult> {\n assertKey(key);\n return this.#execute({ key, operation: 'upload', store: this.name }, () =>\n this.#driver.upload(key, body, options),\n );\n }\n\n downloadStream(\n key: string,\n options?: StorageDownloadOptions,\n ): Promise<StorageObject> {\n assertKey(key);\n assertDownloadOptions(options);\n return this.#execute({ key, operation: 'download', store: this.name }, () =>\n this.#driver.download(key, options),\n );\n }\n\n async downloadBytes(\n key: string,\n options?: StorageBufferedDownloadOptions,\n ): Promise<Uint8Array> {\n const { maxBytes = DEFAULT_BUFFER_LIMIT, ...download } = options ?? {};\n const object = await this.downloadStream(key, download);\n return collectBody(object, maxBytes);\n }\n\n async downloadText(\n key: string,\n options?: StorageBufferedDownloadOptions,\n ): Promise<string> {\n return new TextDecoder().decode(await this.downloadBytes(key, options));\n }\n\n async downloadJson<Result = unknown>(\n key: string,\n options?: StorageBufferedDownloadOptions,\n ): Promise<Result> {\n const text = await this.downloadText(key, options);\n try {\n return JSON.parse(text) as Result;\n } catch (error) {\n throw new StorageError(`Object \"${key}\" does not contain valid JSON.`, {\n cause: error,\n code: StorageErrorCode.INVALID_ARGUMENT,\n key,\n operation: 'download',\n permanent: true,\n store: this.name,\n });\n }\n }\n\n head(\n key: string,\n options?: StorageOperationOptions,\n ): Promise<StorageObjectMetadata> {\n assertKey(key);\n return this.#execute({ key, operation: 'head', store: this.name }, () =>\n this.#driver.head(key, options),\n );\n }\n\n exists(key: string, options?: StorageOperationOptions): Promise<boolean> {\n assertKey(key);\n return this.#execute({ key, operation: 'exists', store: this.name }, () =>\n this.#driver.exists(key, options),\n );\n }\n\n delete(key: string, options?: StorageOperationOptions): Promise<void> {\n assertKey(key);\n return this.#execute({ key, operation: 'delete', store: this.name }, () =>\n this.#driver.delete(key, options),\n );\n }\n\n copy(\n sourceKey: string,\n destinationKey: string,\n options?: StorageOperationOptions,\n ): Promise<void> {\n assertKey(sourceKey, 'source key');\n assertKey(destinationKey, 'destination key');\n return this.#execute(\n {\n from: sourceKey,\n operation: 'copy',\n store: this.name,\n to: destinationKey,\n },\n () => this.#driver.copy(sourceKey, destinationKey, options),\n );\n }\n\n move(\n sourceKey: string,\n destinationKey: string,\n options?: StorageOperationOptions,\n ): Promise<void> {\n assertKey(sourceKey, 'source key');\n assertKey(destinationKey, 'destination key');\n return this.#execute(\n {\n from: sourceKey,\n operation: 'move',\n store: this.name,\n to: destinationKey,\n },\n () => this.#driver.move(sourceKey, destinationKey, options),\n );\n }\n\n list(options?: StorageListOptions): Promise<StorageListResult> {\n assertListOptions(options);\n return this.#execute({ operation: 'list', store: this.name }, () =>\n this.#driver.list(options),\n );\n }\n\n async *listAll(\n options?: StorageListOptions,\n ): AsyncGenerator<StorageObjectMetadata, void> {\n const { delimiter: _delimiter, ...walkOptions } = options ?? {};\n void _delimiter;\n let cursor = walkOptions.cursor;\n const seen = new Set<string>();\n\n do {\n const page = await this.list({\n ...walkOptions,\n ...(cursor !== undefined && { cursor }),\n });\n yield* page.items;\n cursor = page.cursor;\n if (cursor !== undefined) {\n if (seen.has(cursor)) {\n throw new StorageError(\n `Store \"${this.name}\" returned a repeated pagination cursor.`,\n {\n code: StorageErrorCode.PROVIDER,\n operation: 'list',\n permanent: true,\n store: this.name,\n },\n );\n }\n seen.add(cursor);\n }\n } while (cursor !== undefined);\n }\n\n search(\n pattern: string | RegExp,\n options?: StorageSearchOptions,\n ): AsyncIterable<StorageObjectMetadata> {\n assertSearchOptions(options);\n return this.#search(pattern, options);\n }\n\n async *#search(\n pattern: string | RegExp,\n options?: StorageSearchOptions,\n ): AsyncGenerator<StorageObjectMetadata, void> {\n const context: StorageOperationContext = {\n operation: 'search',\n store: this.name,\n };\n try {\n for (const plugin of this.#plugins) {\n await plugin.beforeOperation?.(context);\n }\n for await (const object of this.#driver.search(pattern, options)) {\n yield object;\n }\n for (const plugin of this.#plugins) {\n await plugin.afterOperation?.(context, undefined);\n }\n } catch (error) {\n const normalized = normalizeStorageError(error, {\n operation: 'search',\n store: this.name,\n });\n for (const plugin of this.#plugins) {\n try {\n await plugin.onError?.(context, normalized);\n } catch {\n // Preserve the original storage error.\n }\n }\n throw normalized;\n }\n }\n\n signDownload(\n key: string,\n options?: StorageSignedDownloadOptions,\n ): Promise<string> {\n assertKey(key);\n return this.#execute(\n { key, operation: 'signDownload', store: this.name },\n () => this.#driver.signDownload(key, options),\n );\n }\n\n signUpload(\n key: string,\n options: StorageSignedUploadOptions,\n ): Promise<StorageSignedUpload> {\n assertKey(key);\n assertSignedUploadOptions(options);\n return this.#execute(\n { key, operation: 'signUpload', store: this.name },\n () => this.#driver.signUpload(key, options),\n );\n }\n\n async uploadMany(\n items: readonly StorageUploadManyItem[],\n options?: StorageUploadManyOptions,\n ): Promise<StorageUploadManyResult> {\n const settled = await settleMany(\n items,\n (item) => item.key,\n (item) =>\n this.upload(item.key, item.body, {\n ...operationOptions(options),\n ...(item.cacheControl !== undefined && {\n cacheControl: item.cacheControl,\n }),\n ...(item.contentType !== undefined && {\n contentType: item.contentType,\n }),\n ...(item.metadata !== undefined && { metadata: item.metadata }),\n ...(item.multipart !== undefined && {\n multipart: item.multipart,\n }),\n ...(options?.onProgress !== undefined && {\n onProgress: (progress) =>\n options.onProgress?.({ ...progress, key: item.key }),\n }),\n }),\n options,\n );\n\n return {\n uploaded: settled.results,\n ...(settled.errors.length > 0 && { errors: settled.errors }),\n };\n }\n\n async downloadMany(\n keys: readonly string[],\n options?: DownloadManyOptions,\n ): Promise<StorageDownloadManyResult> {\n const settled = await settleMany(\n keys,\n (key) => key,\n (key) => this.downloadStream(key, downloadOptions(options)),\n options,\n );\n return {\n downloaded: settled.results,\n ...(settled.errors.length > 0 && { errors: settled.errors }),\n };\n }\n\n async headMany(\n keys: readonly string[],\n options?: BulkOperationOptions,\n ): Promise<StorageHeadManyResult> {\n const settled = await settleMany(\n keys,\n (key) => key,\n (key) => this.head(key, operationOptions(options)),\n options,\n );\n return {\n objects: settled.results,\n ...(settled.errors.length > 0 && { errors: settled.errors }),\n };\n }\n\n async existsMany(\n keys: readonly string[],\n options?: BulkOperationOptions,\n ): Promise<StorageExistsManyResult> {\n const settled = await settleMany(\n keys,\n (key) => key,\n async (key) => ({ exists: await this.exists(key, options), key }),\n options,\n );\n const existing: string[] = [];\n const missing: string[] = [];\n for (const result of settled.results) {\n (result.exists ? existing : missing).push(result.key);\n }\n return {\n existing,\n missing,\n ...(settled.errors.length > 0 && { errors: settled.errors }),\n };\n }\n\n async deleteMany(\n keys: readonly string[],\n options?: BulkOperationOptions,\n ): Promise<StorageDeleteManyResult> {\n const settled = await settleMany(\n keys,\n (key) => key,\n async (key) => {\n await this.delete(key, operationOptions(options));\n return key;\n },\n options,\n );\n return {\n deleted: settled.results,\n ...(settled.errors.length > 0 && { errors: settled.errors }),\n };\n }\n\n async onApplicationShutdown(): Promise<void> {\n if (this.#closed) {\n return;\n }\n this.#closed = true;\n await this.#driver.close?.();\n }\n\n async #execute<Result>(\n context: StorageOperationContext,\n operation: () => Promise<Result>,\n ): Promise<Result> {\n try {\n for (const plugin of this.#plugins) {\n await plugin.beforeOperation?.(context);\n }\n const result = await operation();\n for (const plugin of this.#plugins) {\n await plugin.afterOperation?.(context, result);\n }\n return result;\n } catch (error) {\n const normalized = normalizeStorageError(error, {\n ...(context.key !== undefined && { key: context.key }),\n operation: context.operation,\n store: this.name,\n });\n for (const plugin of this.#plugins) {\n try {\n await plugin.onError?.(context, normalized);\n } catch {\n // Preserve the original storage error.\n }\n }\n throw normalized;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { StorageBody, StorageCapabilities, StorageDownloadOptions, StorageListOptions, StorageListResult, StorageObject, StorageObjectMetadata, StorageOperationOptions, StorageSearchOptions, StorageSignedDownloadOptions, StorageSignedUpload, StorageSignedUploadOptions, StorageUploadOptions, StorageUploadResult } from './storage.types.js';
|
|
2
|
+
export interface StorageDriver {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly capabilities: StorageCapabilities;
|
|
5
|
+
upload(key: string, body: StorageBody, options?: StorageUploadOptions): Promise<StorageUploadResult>;
|
|
6
|
+
download(key: string, options?: StorageDownloadOptions): Promise<StorageObject>;
|
|
7
|
+
head(key: string, options?: StorageOperationOptions): Promise<StorageObjectMetadata>;
|
|
8
|
+
exists(key: string, options?: StorageOperationOptions): Promise<boolean>;
|
|
9
|
+
delete(key: string, options?: StorageOperationOptions): Promise<void>;
|
|
10
|
+
copy(sourceKey: string, destinationKey: string, options?: StorageOperationOptions): Promise<void>;
|
|
11
|
+
move(sourceKey: string, destinationKey: string, options?: StorageOperationOptions): Promise<void>;
|
|
12
|
+
list(options?: StorageListOptions): Promise<StorageListResult>;
|
|
13
|
+
search(pattern: string | RegExp, options?: StorageSearchOptions): AsyncIterable<StorageObjectMetadata>;
|
|
14
|
+
signDownload(key: string, options?: StorageSignedDownloadOptions): Promise<string>;
|
|
15
|
+
signUpload(key: string, options: StorageSignedUploadOptions): Promise<StorageSignedUpload>;
|
|
16
|
+
close?(): void | Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=storage.driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.driver.d.ts","sourceRoot":"","sources":["../src/storage.driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,EAC5B,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAE3C,MAAM,CACJ,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChC,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B,IAAI,CACF,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,IAAI,CACF,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,IAAI,CACF,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC/D,MAAM,CACJ,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACxC,YAAY,CACV,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,4BAA4B,GACrC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,UAAU,CACR,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.driver.js","sourceRoot":"","sources":["../src/storage.driver.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n StorageBody,\n StorageCapabilities,\n StorageDownloadOptions,\n StorageListOptions,\n StorageListResult,\n StorageObject,\n StorageObjectMetadata,\n StorageOperationOptions,\n StorageSearchOptions,\n StorageSignedDownloadOptions,\n StorageSignedUpload,\n StorageSignedUploadOptions,\n StorageUploadOptions,\n StorageUploadResult,\n} from './storage.types.js';\n\nexport interface StorageDriver {\n readonly name: string;\n readonly capabilities: StorageCapabilities;\n\n upload(\n key: string,\n body: StorageBody,\n options?: StorageUploadOptions,\n ): Promise<StorageUploadResult>;\n download(\n key: string,\n options?: StorageDownloadOptions,\n ): Promise<StorageObject>;\n head(\n key: string,\n options?: StorageOperationOptions,\n ): Promise<StorageObjectMetadata>;\n exists(key: string, options?: StorageOperationOptions): Promise<boolean>;\n delete(key: string, options?: StorageOperationOptions): Promise<void>;\n copy(\n sourceKey: string,\n destinationKey: string,\n options?: StorageOperationOptions,\n ): Promise<void>;\n move(\n sourceKey: string,\n destinationKey: string,\n options?: StorageOperationOptions,\n ): Promise<void>;\n list(options?: StorageListOptions): Promise<StorageListResult>;\n search(\n pattern: string | RegExp,\n options?: StorageSearchOptions,\n ): AsyncIterable<StorageObjectMetadata>;\n signDownload(\n key: string,\n options?: StorageSignedDownloadOptions,\n ): Promise<string>;\n signUpload(\n key: string,\n options: StorageSignedUploadOptions,\n ): Promise<StorageSignedUpload>;\n close?(): void | Promise<void>;\n}\n"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export declare const StorageErrorCode: {
|
|
2
|
+
readonly NOT_FOUND: "NOT_FOUND";
|
|
3
|
+
readonly UNAUTHORIZED: "UNAUTHORIZED";
|
|
4
|
+
readonly CONFLICT: "CONFLICT";
|
|
5
|
+
readonly READ_ONLY: "READ_ONLY";
|
|
6
|
+
readonly INVALID_ARGUMENT: "INVALID_ARGUMENT";
|
|
7
|
+
readonly NOT_SUPPORTED: "NOT_SUPPORTED";
|
|
8
|
+
readonly ABORTED: "ABORTED";
|
|
9
|
+
readonly TIMEOUT: "TIMEOUT";
|
|
10
|
+
readonly LIMIT_EXCEEDED: "LIMIT_EXCEEDED";
|
|
11
|
+
readonly PROVIDER: "PROVIDER";
|
|
12
|
+
};
|
|
13
|
+
export type StorageErrorCode = (typeof StorageErrorCode)[keyof typeof StorageErrorCode];
|
|
14
|
+
export interface StorageErrorOptions {
|
|
15
|
+
code: StorageErrorCode;
|
|
16
|
+
store?: string;
|
|
17
|
+
operation?: string;
|
|
18
|
+
key?: string;
|
|
19
|
+
aborted?: boolean;
|
|
20
|
+
timedOut?: boolean;
|
|
21
|
+
permanent?: boolean;
|
|
22
|
+
cause?: unknown;
|
|
23
|
+
}
|
|
24
|
+
export declare class StorageError extends Error {
|
|
25
|
+
readonly code: StorageErrorCode;
|
|
26
|
+
readonly store: string | undefined;
|
|
27
|
+
readonly operation: string | undefined;
|
|
28
|
+
readonly key: string | undefined;
|
|
29
|
+
readonly aborted: boolean;
|
|
30
|
+
readonly timedOut: boolean;
|
|
31
|
+
readonly permanent: boolean;
|
|
32
|
+
readonly cause?: unknown;
|
|
33
|
+
constructor(message: string, options: StorageErrorOptions);
|
|
34
|
+
}
|
|
35
|
+
export declare function isStorageError(error: unknown): error is StorageError;
|
|
36
|
+
export declare function normalizeStorageError(error: unknown, options?: Omit<StorageErrorOptions, 'code' | 'cause'> & {
|
|
37
|
+
code?: StorageErrorCode;
|
|
38
|
+
}): StorageError;
|
|
39
|
+
//# sourceMappingURL=storage.error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.error.d.ts","sourceRoot":"","sources":["../src/storage.error.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB;;;;;;;;;;;CAWnB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAC1B,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAE3D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,SAAkB,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEtB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB;CAY1D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG;IACrD,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACpB,GACL,YAAY,CAYd"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export const StorageErrorCode = {
|
|
2
|
+
NOT_FOUND: 'NOT_FOUND',
|
|
3
|
+
UNAUTHORIZED: 'UNAUTHORIZED',
|
|
4
|
+
CONFLICT: 'CONFLICT',
|
|
5
|
+
READ_ONLY: 'READ_ONLY',
|
|
6
|
+
INVALID_ARGUMENT: 'INVALID_ARGUMENT',
|
|
7
|
+
NOT_SUPPORTED: 'NOT_SUPPORTED',
|
|
8
|
+
ABORTED: 'ABORTED',
|
|
9
|
+
TIMEOUT: 'TIMEOUT',
|
|
10
|
+
LIMIT_EXCEEDED: 'LIMIT_EXCEEDED',
|
|
11
|
+
PROVIDER: 'PROVIDER',
|
|
12
|
+
};
|
|
13
|
+
export class StorageError extends Error {
|
|
14
|
+
code;
|
|
15
|
+
store;
|
|
16
|
+
operation;
|
|
17
|
+
key;
|
|
18
|
+
aborted;
|
|
19
|
+
timedOut;
|
|
20
|
+
permanent;
|
|
21
|
+
cause;
|
|
22
|
+
constructor(message, options) {
|
|
23
|
+
super(message, { cause: options.cause });
|
|
24
|
+
this.name = 'StorageError';
|
|
25
|
+
this.code = options.code;
|
|
26
|
+
this.store = options.store;
|
|
27
|
+
this.operation = options.operation;
|
|
28
|
+
this.key = options.key;
|
|
29
|
+
this.aborted = options.aborted === true;
|
|
30
|
+
this.timedOut = options.timedOut === true;
|
|
31
|
+
this.permanent = options.permanent === true;
|
|
32
|
+
this.cause = options.cause;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function isStorageError(error) {
|
|
36
|
+
return error instanceof StorageError;
|
|
37
|
+
}
|
|
38
|
+
export function normalizeStorageError(error, options = {}) {
|
|
39
|
+
if (isStorageError(error)) {
|
|
40
|
+
return error;
|
|
41
|
+
}
|
|
42
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
43
|
+
return new StorageError(message, {
|
|
44
|
+
...options,
|
|
45
|
+
cause: error,
|
|
46
|
+
code: options.code ?? StorageErrorCode.PROVIDER,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=storage.error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.error.js","sourceRoot":"","sources":["../src/storage.error.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,SAAS,EAAE,WAAW;IACtB,YAAY,EAAE,cAAc;IAC5B,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,gBAAgB,EAAE,kBAAkB;IACpC,aAAa,EAAE,eAAe;IAC9B,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,cAAc,EAAE,gBAAgB;IAChC,QAAQ,EAAE,UAAU;CACZ,CAAC;AAgBX,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,IAAI,CAAmB;IACvB,KAAK,CAAqB;IAC1B,SAAS,CAAqB;IAC9B,GAAG,CAAqB;IACxB,OAAO,CAAU;IACjB,QAAQ,CAAU;IAClB,SAAS,CAAU;IACV,KAAK,CAAW;IAElC,YAAY,OAAe,EAAE,OAA4B;QACvD,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,KAAK,YAAY,YAAY,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAc,EACd,UAEI,EAAE;IAEN,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEvE,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE;QAC/B,GAAG,OAAO;QACV,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,gBAAgB,CAAC,QAAQ;KAChD,CAAC,CAAC;AACL,CAAC","sourcesContent":["export const StorageErrorCode = {\n NOT_FOUND: 'NOT_FOUND',\n UNAUTHORIZED: 'UNAUTHORIZED',\n CONFLICT: 'CONFLICT',\n READ_ONLY: 'READ_ONLY',\n INVALID_ARGUMENT: 'INVALID_ARGUMENT',\n NOT_SUPPORTED: 'NOT_SUPPORTED',\n ABORTED: 'ABORTED',\n TIMEOUT: 'TIMEOUT',\n LIMIT_EXCEEDED: 'LIMIT_EXCEEDED',\n PROVIDER: 'PROVIDER',\n} as const;\n\nexport type StorageErrorCode =\n (typeof StorageErrorCode)[keyof typeof StorageErrorCode];\n\nexport interface StorageErrorOptions {\n code: StorageErrorCode;\n store?: string;\n operation?: string;\n key?: string;\n aborted?: boolean;\n timedOut?: boolean;\n permanent?: boolean;\n cause?: unknown;\n}\n\nexport class StorageError extends Error {\n readonly code: StorageErrorCode;\n readonly store: string | undefined;\n readonly operation: string | undefined;\n readonly key: string | undefined;\n readonly aborted: boolean;\n readonly timedOut: boolean;\n readonly permanent: boolean;\n override readonly cause?: unknown;\n\n constructor(message: string, options: StorageErrorOptions) {\n super(message, { cause: options.cause });\n this.name = 'StorageError';\n this.code = options.code;\n this.store = options.store;\n this.operation = options.operation;\n this.key = options.key;\n this.aborted = options.aborted === true;\n this.timedOut = options.timedOut === true;\n this.permanent = options.permanent === true;\n this.cause = options.cause;\n }\n}\n\nexport function isStorageError(error: unknown): error is StorageError {\n return error instanceof StorageError;\n}\n\nexport function normalizeStorageError(\n error: unknown,\n options: Omit<StorageErrorOptions, 'code' | 'cause'> & {\n code?: StorageErrorCode;\n } = {},\n): StorageError {\n if (isStorageError(error)) {\n return error;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n\n return new StorageError(message, {\n ...options,\n cause: error,\n code: options.code ?? StorageErrorCode.PROVIDER,\n });\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type DynamicModule } from '@nestjs/common';
|
|
2
|
+
import type { StorageFeatureAsyncOptions, StorageFeatureOptions, StorageModuleAsyncOptions, StorageModuleOptions } from './storage-module.options.js';
|
|
3
|
+
export declare class StorageFeatureModule {
|
|
4
|
+
}
|
|
5
|
+
export declare class StorageModule {
|
|
6
|
+
static forRoot(options: StorageModuleOptions): DynamicModule;
|
|
7
|
+
static forRootAsync(options: StorageModuleAsyncOptions): DynamicModule;
|
|
8
|
+
static forFeature(options: StorageFeatureOptions): DynamicModule;
|
|
9
|
+
static forFeatureAsync(options: StorageFeatureAsyncOptions): DynamicModule;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=storage.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.module.d.ts","sourceRoot":"","sources":["../src/storage.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAInB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,KAAK,EAEV,0BAA0B,EAC1B,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EAErB,MAAM,6BAA6B,CAAC;AAsBrC,qBACa,oBAAoB;CAAG;AAmNpC,qBACa,aAAa;IACxB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa;IAc5D,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,yBAAyB,GAAG,aAAa;IAetE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa;IAYhE,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,0BAA0B,GAAG,aAAa;CAW3E"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var StorageModule_1;
|
|
8
|
+
import { Module, } from '@nestjs/common';
|
|
9
|
+
import { StorageClient } from './storage.client.js';
|
|
10
|
+
import { StorageService } from './storage.service.js';
|
|
11
|
+
import { DEFAULT_STORAGE_NAME, STORAGE_DEFAULT_NAME, getStorageToken, normalizeStorageName, } from './storage.tokens.js';
|
|
12
|
+
let StorageFeatureModule = class StorageFeatureModule {
|
|
13
|
+
};
|
|
14
|
+
StorageFeatureModule = __decorate([
|
|
15
|
+
Module({})
|
|
16
|
+
], StorageFeatureModule);
|
|
17
|
+
export { StorageFeatureModule };
|
|
18
|
+
function assertStores(names) {
|
|
19
|
+
if (names.length === 0) {
|
|
20
|
+
throw new TypeError('At least one storage store must be configured.');
|
|
21
|
+
}
|
|
22
|
+
const duplicates = names.filter((name, index) => names.indexOf(name) !== index);
|
|
23
|
+
if (duplicates.length > 0) {
|
|
24
|
+
throw new TypeError(`Duplicate storage store names: ${[...new Set(duplicates)].join(', ')}.`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function resolveDefaultName(names, requested) {
|
|
28
|
+
if (requested !== undefined) {
|
|
29
|
+
const normalized = normalizeStorageName(requested);
|
|
30
|
+
if (!names.includes(normalized)) {
|
|
31
|
+
throw new TypeError(`Default storage store "${normalized}" is not present in this registration.`);
|
|
32
|
+
}
|
|
33
|
+
return normalized;
|
|
34
|
+
}
|
|
35
|
+
if (names.length === 1) {
|
|
36
|
+
return names[0] ?? null;
|
|
37
|
+
}
|
|
38
|
+
return names.includes(DEFAULT_STORAGE_NAME) ? DEFAULT_STORAGE_NAME : null;
|
|
39
|
+
}
|
|
40
|
+
function prepareStores(stores, plugins = []) {
|
|
41
|
+
const prepared = stores.map((store) => ({
|
|
42
|
+
driver: store.driver,
|
|
43
|
+
name: normalizeStorageName(store.name),
|
|
44
|
+
plugins: [...plugins, ...(store.plugins ?? [])],
|
|
45
|
+
}));
|
|
46
|
+
assertStores(prepared.map((store) => store.name));
|
|
47
|
+
return prepared;
|
|
48
|
+
}
|
|
49
|
+
function prepareAsyncStores(stores, plugins = []) {
|
|
50
|
+
const prepared = stores.map((definition) => ({
|
|
51
|
+
definition,
|
|
52
|
+
name: normalizeStorageName(definition.name),
|
|
53
|
+
plugins: [...plugins, ...(definition.plugins ?? [])],
|
|
54
|
+
}));
|
|
55
|
+
assertStores(prepared.map((store) => store.name));
|
|
56
|
+
return prepared;
|
|
57
|
+
}
|
|
58
|
+
function uniqueImports(root = [], stores = []) {
|
|
59
|
+
return [
|
|
60
|
+
...new Set([
|
|
61
|
+
...root,
|
|
62
|
+
...stores.flatMap((store) => store.definition.imports ?? []),
|
|
63
|
+
]),
|
|
64
|
+
];
|
|
65
|
+
}
|
|
66
|
+
function serviceProvider(defaultName, names) {
|
|
67
|
+
const storeTokens = names.map((name) => getStorageToken(name));
|
|
68
|
+
return [
|
|
69
|
+
{ provide: STORAGE_DEFAULT_NAME, useValue: defaultName },
|
|
70
|
+
{
|
|
71
|
+
provide: StorageService,
|
|
72
|
+
inject: [STORAGE_DEFAULT_NAME, ...storeTokens],
|
|
73
|
+
useFactory: (configuredDefault, ...clients) => {
|
|
74
|
+
return new StorageService(new Map(names.map((name, index) => [name, clients[index]])), configuredDefault);
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
}
|
|
79
|
+
function syncDynamicModule(module, stores, defaultName, global, includeService, imports = []) {
|
|
80
|
+
const clientProviders = stores.map((store) => ({
|
|
81
|
+
provide: getStorageToken(store.name),
|
|
82
|
+
useFactory: () => new StorageClient(store.name, store.driver, store.plugins),
|
|
83
|
+
}));
|
|
84
|
+
const storeTokens = stores.map((store) => getStorageToken(store.name));
|
|
85
|
+
const names = stores.map((store) => store.name);
|
|
86
|
+
return {
|
|
87
|
+
module,
|
|
88
|
+
global,
|
|
89
|
+
imports: uniqueImports(imports),
|
|
90
|
+
providers: [
|
|
91
|
+
...clientProviders,
|
|
92
|
+
...(includeService ? serviceProvider(defaultName, names) : []),
|
|
93
|
+
],
|
|
94
|
+
exports: [...storeTokens, ...(includeService ? [StorageService] : [])],
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function asyncClientProvider(store) {
|
|
98
|
+
const token = getStorageToken(store.name);
|
|
99
|
+
const definition = store.definition;
|
|
100
|
+
if (definition.useFactory !== undefined) {
|
|
101
|
+
const factory = definition.useFactory;
|
|
102
|
+
return {
|
|
103
|
+
client: {
|
|
104
|
+
provide: token,
|
|
105
|
+
inject: definition.inject ?? [],
|
|
106
|
+
useFactory: async (...dependencies) => new StorageClient(store.name, await factory(...dependencies), store.plugins),
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
if (definition.useClass !== undefined) {
|
|
111
|
+
return {
|
|
112
|
+
client: {
|
|
113
|
+
provide: token,
|
|
114
|
+
inject: [definition.useClass],
|
|
115
|
+
useFactory: async (factory) => new StorageClient(store.name, await factory.createStorageDriver(store.name), store.plugins),
|
|
116
|
+
},
|
|
117
|
+
extra: definition.useClass,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
client: {
|
|
122
|
+
provide: token,
|
|
123
|
+
inject: [definition.useExisting],
|
|
124
|
+
useFactory: async (factory) => new StorageClient(store.name, await factory.createStorageDriver(store.name), store.plugins),
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function asyncDynamicModule(module, stores, defaultName, global, includeService, imports = []) {
|
|
129
|
+
const clients = stores.map(asyncClientProvider);
|
|
130
|
+
const extras = clients
|
|
131
|
+
.map(({ extra }) => extra)
|
|
132
|
+
.filter((provider) => provider !== undefined);
|
|
133
|
+
const storeTokens = stores.map((store) => getStorageToken(store.name));
|
|
134
|
+
return {
|
|
135
|
+
module,
|
|
136
|
+
global,
|
|
137
|
+
imports: uniqueImports(imports, stores),
|
|
138
|
+
providers: [
|
|
139
|
+
...new Set(extras),
|
|
140
|
+
...clients.map(({ client }) => client),
|
|
141
|
+
...(includeService
|
|
142
|
+
? serviceProvider(defaultName, stores.map((store) => store.name))
|
|
143
|
+
: []),
|
|
144
|
+
],
|
|
145
|
+
exports: [...storeTokens, ...(includeService ? [StorageService] : [])],
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
let StorageModule = StorageModule_1 = class StorageModule {
|
|
149
|
+
static forRoot(options) {
|
|
150
|
+
const stores = prepareStores(options.stores, options.plugins);
|
|
151
|
+
return syncDynamicModule(StorageModule_1, stores, resolveDefaultName(stores.map((store) => store.name), options.default), options.isGlobal === true, true);
|
|
152
|
+
}
|
|
153
|
+
static forRootAsync(options) {
|
|
154
|
+
const stores = prepareAsyncStores(options.stores, options.plugins);
|
|
155
|
+
return asyncDynamicModule(StorageModule_1, stores, resolveDefaultName(stores.map((store) => store.name), options.default), options.isGlobal === true, true, options.imports);
|
|
156
|
+
}
|
|
157
|
+
static forFeature(options) {
|
|
158
|
+
const stores = prepareStores(options.stores, options.plugins);
|
|
159
|
+
return syncDynamicModule(StorageFeatureModule, stores, null, false, false, options.imports);
|
|
160
|
+
}
|
|
161
|
+
static forFeatureAsync(options) {
|
|
162
|
+
const stores = prepareAsyncStores(options.stores, options.plugins);
|
|
163
|
+
return asyncDynamicModule(StorageFeatureModule, stores, null, false, false, options.imports);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
StorageModule = StorageModule_1 = __decorate([
|
|
167
|
+
Module({})
|
|
168
|
+
], StorageModule);
|
|
169
|
+
export { StorageModule };
|
|
170
|
+
//# sourceMappingURL=storage.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.module.js","sourceRoot":"","sources":["../src/storage.module.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Module,\n type DynamicModule,\n type FactoryProvider,\n type ModuleMetadata,\n type Provider,\n} from '@nestjs/common';\n\nimport { StorageClient } from './storage.client.js';\nimport type { StorageDriver } from './storage.driver.js';\nimport type {\n StorageAsyncStoreDefinition,\n StorageFeatureAsyncOptions,\n StorageFeatureOptions,\n StorageModuleAsyncOptions,\n StorageModuleOptions,\n StorageStoreDefinition,\n} from './storage-module.options.js';\nimport { StorageService } from './storage.service.js';\nimport {\n DEFAULT_STORAGE_NAME,\n STORAGE_DEFAULT_NAME,\n getStorageToken,\n normalizeStorageName,\n} from './storage.tokens.js';\nimport type { StoragePlugin } from './storage.types.js';\n\ninterface PreparedStore {\n name: string;\n driver: StorageDriver;\n plugins: readonly StoragePlugin[];\n}\n\ninterface PreparedAsyncStore {\n name: string;\n definition: StorageAsyncStoreDefinition;\n plugins: readonly StoragePlugin[];\n}\n\n@Module({})\nexport class StorageFeatureModule {}\n\nfunction assertStores(names: readonly string[]): void {\n if (names.length === 0) {\n throw new TypeError('At least one storage store must be configured.');\n }\n const duplicates = names.filter(\n (name, index) => names.indexOf(name) !== index,\n );\n if (duplicates.length > 0) {\n throw new TypeError(\n `Duplicate storage store names: ${[...new Set(duplicates)].join(', ')}.`,\n );\n }\n}\n\nfunction resolveDefaultName(\n names: readonly string[],\n requested?: string,\n): string | null {\n if (requested !== undefined) {\n const normalized = normalizeStorageName(requested);\n if (!names.includes(normalized)) {\n throw new TypeError(\n `Default storage store \"${normalized}\" is not present in this registration.`,\n );\n }\n return normalized;\n }\n if (names.length === 1) {\n return names[0] ?? null;\n }\n return names.includes(DEFAULT_STORAGE_NAME) ? DEFAULT_STORAGE_NAME : null;\n}\n\nfunction prepareStores(\n stores: readonly StorageStoreDefinition[],\n plugins: readonly StoragePlugin[] = [],\n): PreparedStore[] {\n const prepared = stores.map((store) => ({\n driver: store.driver,\n name: normalizeStorageName(store.name),\n plugins: [...plugins, ...(store.plugins ?? [])],\n }));\n assertStores(prepared.map((store) => store.name));\n return prepared;\n}\n\nfunction prepareAsyncStores(\n stores: readonly StorageAsyncStoreDefinition[],\n plugins: readonly StoragePlugin[] = [],\n): PreparedAsyncStore[] {\n const prepared = stores.map((definition) => ({\n definition,\n name: normalizeStorageName(definition.name),\n plugins: [...plugins, ...(definition.plugins ?? [])],\n }));\n assertStores(prepared.map((store) => store.name));\n return prepared;\n}\n\nfunction uniqueImports(\n root: ModuleMetadata['imports'] = [],\n stores: readonly PreparedAsyncStore[] = [],\n): NonNullable<ModuleMetadata['imports']> {\n return [\n ...new Set([\n ...root,\n ...stores.flatMap((store) => store.definition.imports ?? []),\n ]),\n ];\n}\n\nfunction serviceProvider(\n defaultName: string | null,\n names: readonly string[],\n): Provider[] {\n const storeTokens = names.map((name) => getStorageToken(name));\n return [\n { provide: STORAGE_DEFAULT_NAME, useValue: defaultName },\n {\n provide: StorageService,\n inject: [STORAGE_DEFAULT_NAME, ...storeTokens],\n useFactory: (\n configuredDefault: string | null,\n ...clients: StorageClient[]\n ): StorageService => {\n return new StorageService(\n new Map(names.map((name, index) => [name, clients[index]!])),\n configuredDefault,\n );\n },\n },\n ];\n}\n\nfunction syncDynamicModule(\n module: typeof StorageModule | typeof StorageFeatureModule,\n stores: readonly PreparedStore[],\n defaultName: string | null,\n global: boolean,\n includeService: boolean,\n imports: ModuleMetadata['imports'] = [],\n): DynamicModule {\n const clientProviders: Provider[] = stores.map((store) => ({\n provide: getStorageToken(store.name),\n useFactory: () =>\n new StorageClient(store.name, store.driver, store.plugins),\n }));\n const storeTokens = stores.map((store) => getStorageToken(store.name));\n const names = stores.map((store) => store.name);\n\n return {\n module,\n global,\n imports: uniqueImports(imports),\n providers: [\n ...clientProviders,\n ...(includeService ? serviceProvider(defaultName, names) : []),\n ],\n exports: [...storeTokens, ...(includeService ? [StorageService] : [])],\n };\n}\n\nfunction asyncClientProvider(store: PreparedAsyncStore): {\n client: FactoryProvider;\n extra?: Provider;\n} {\n const token = getStorageToken(store.name);\n const definition = store.definition;\n\n if (definition.useFactory !== undefined) {\n const factory = definition.useFactory as unknown as (\n ...dependencies: unknown[]\n ) => StorageDriver | Promise<StorageDriver>;\n return {\n client: {\n provide: token,\n inject: definition.inject ?? [],\n useFactory: async (...dependencies: unknown[]) =>\n new StorageClient(\n store.name,\n await factory(...dependencies),\n store.plugins,\n ),\n },\n };\n }\n\n if (definition.useClass !== undefined) {\n return {\n client: {\n provide: token,\n inject: [definition.useClass],\n useFactory: async (factory) =>\n new StorageClient(\n store.name,\n await factory.createStorageDriver(store.name),\n store.plugins,\n ),\n },\n extra: definition.useClass,\n };\n }\n\n return {\n client: {\n provide: token,\n inject: [definition.useExisting],\n useFactory: async (factory) =>\n new StorageClient(\n store.name,\n await factory.createStorageDriver(store.name),\n store.plugins,\n ),\n },\n };\n}\n\nfunction asyncDynamicModule(\n module: typeof StorageModule | typeof StorageFeatureModule,\n stores: readonly PreparedAsyncStore[],\n defaultName: string | null,\n global: boolean,\n includeService: boolean,\n imports: ModuleMetadata['imports'] = [],\n): DynamicModule {\n const clients = stores.map(asyncClientProvider);\n const extras = clients\n .map(({ extra }) => extra)\n .filter((provider): provider is Provider => provider !== undefined);\n const storeTokens = stores.map((store) => getStorageToken(store.name));\n\n return {\n module,\n global,\n imports: uniqueImports(imports, stores),\n providers: [\n ...new Set(extras),\n ...clients.map(({ client }) => client),\n ...(includeService\n ? serviceProvider(\n defaultName,\n stores.map((store) => store.name),\n )\n : []),\n ],\n exports: [...storeTokens, ...(includeService ? [StorageService] : [])],\n };\n}\n\n@Module({})\nexport class StorageModule {\n static forRoot(options: StorageModuleOptions): DynamicModule {\n const stores = prepareStores(options.stores, options.plugins);\n return syncDynamicModule(\n StorageModule,\n stores,\n resolveDefaultName(\n stores.map((store) => store.name),\n options.default,\n ),\n options.isGlobal === true,\n true,\n );\n }\n\n static forRootAsync(options: StorageModuleAsyncOptions): DynamicModule {\n const stores = prepareAsyncStores(options.stores, options.plugins);\n return asyncDynamicModule(\n StorageModule,\n stores,\n resolveDefaultName(\n stores.map((store) => store.name),\n options.default,\n ),\n options.isGlobal === true,\n true,\n options.imports,\n );\n }\n\n static forFeature(options: StorageFeatureOptions): DynamicModule {\n const stores = prepareStores(options.stores, options.plugins);\n return syncDynamicModule(\n StorageFeatureModule,\n stores,\n null,\n false,\n false,\n options.imports,\n );\n }\n\n static forFeatureAsync(options: StorageFeatureAsyncOptions): DynamicModule {\n const stores = prepareAsyncStores(options.stores, options.plugins);\n return asyncDynamicModule(\n StorageFeatureModule,\n stores,\n null,\n false,\n false,\n options.imports,\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { StorageClient } from './storage.client.js';
|
|
2
|
+
import type { StorageSyncOptions, StorageSyncResult, StorageTransferOptions, StorageTransferResult } from './storage.types.js';
|
|
3
|
+
export declare class StorageService {
|
|
4
|
+
#private;
|
|
5
|
+
private readonly defaultName;
|
|
6
|
+
constructor(clients: ReadonlyMap<string, StorageClient>, defaultName: string | null);
|
|
7
|
+
get names(): readonly string[];
|
|
8
|
+
use(name?: string): StorageClient;
|
|
9
|
+
transfer(options: StorageTransferOptions): Promise<StorageTransferResult>;
|
|
10
|
+
sync(options: StorageSyncOptions): Promise<StorageSyncResult>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=storage.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.service.d.ts","sourceRoot":"","sources":["../src/storage.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,KAAK,EAIV,kBAAkB,EAElB,iBAAiB,EACjB,sBAAsB,EAEtB,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAuD5B,qBAAa,cAAc;;IAKvB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAD5B,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAC1B,WAAW,EAAE,MAAM,GAAG,IAAI;IAK7C,IAAI,KAAK,IAAI,SAAS,MAAM,EAAE,CAE7B;IAED,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa;IA+B3B,QAAQ,CACZ,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC;IA+E3B,IAAI,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAsIpE"}
|