@webiny/api-file-manager-ddb 0.0.0-unstable.496cf268ac → 0.0.0-unstable.606fc9c866

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.
@@ -17,7 +17,7 @@ export declare class FilesStorageOperations implements FileManagerFilesStorageOp
17
17
  delete(params: FileManagerFilesStorageOperationsDeleteParams): Promise<void>;
18
18
  createBatch(params: FileManagerFilesStorageOperationsCreateBatchParams): Promise<File[]>;
19
19
  list(params: FileManagerFilesStorageOperationsListParams): Promise<FileManagerFilesStorageOperationsListResponse>;
20
- tags(params: FileManagerFilesStorageOperationsTagsParams): Promise<FileManagerFilesStorageOperationsTagsResponse>;
20
+ tags(params: FileManagerFilesStorageOperationsTagsParams): Promise<FileManagerFilesStorageOperationsTagsResponse[]>;
21
21
  private createQueryAllOptions;
22
22
  private createPartitionKey;
23
23
  private createGSI1PartitionKey;
@@ -327,29 +327,22 @@ class FilesStorageOperations {
327
327
  where,
328
328
  fields
329
329
  });
330
-
331
- /**
332
- * Aggregate all the tags from all the filtered items.
333
- */
334
- const tagsObject = filteredItems.reduce((collection, item) => {
330
+ const tags = filteredItems.reduce((collection, item) => {
335
331
  const tags = Array.isArray(item.tags) ? item.tags : [];
336
332
  for (const tag of tags) {
337
- if (!collection[tag]) {
338
- collection[tag] = [];
339
- }
340
- collection[tag].push(item.id);
333
+ var _collection$tag;
334
+ collection[tag] = {
335
+ tag,
336
+ count: (((_collection$tag = collection[tag]) === null || _collection$tag === void 0 ? void 0 : _collection$tag.count) || 0) + 1
337
+ };
341
338
  }
342
339
  return collection;
343
340
  }, {});
344
- const tags = Object.keys(tagsObject);
345
- const hasMoreItems = false;
346
- const totalCount = tags.length;
347
- const meta = {
348
- hasMoreItems,
349
- totalCount,
350
- cursor: null
351
- };
352
- return [tags, meta];
341
+ return Object.values(tags).sort((a, b) => {
342
+ return a.tag < b.tag ? -1 : 1;
343
+ }).sort((a, b) => {
344
+ return a.count > b.count ? -1 : 1;
345
+ });
353
346
  }
354
347
  createQueryAllOptions({
355
348
  where
@@ -1 +1 @@
1
- {"version":3,"names":["FilesStorageOperations","constructor","documentClient","plugins","table","createTable","fileEntity","createStandardEntity","aliasEntity","get","params","where","keys","PK","createPartitionKey","SK","file","getEntityItem","entity","data","ex","WebinyError","message","code","error","create","items","item","GSI1_PK","createGSI1PartitionKey","GSI1_SK","id","TYPE","push","putBatch","createNewAliasesRecords","forEach","alias","batchWriteAll","update","existingAliases","queryAll","partitionKey","tenant","locale","options","beginsWith","newAliases","map","aliases","some","deleteBatch","delete","aliasItems","createBatch","files","list","initialWhere","limit","after","sort","createQueryAllOptions","queryAllParams","dbItems","queryParams","name","search","contains","fields","value","byType","FileDynamoDbFieldPlugin","type","filteredFiles","filterItems","totalCount","length","sortedFiles","sortItems","start","parseInt","decodeCursor","hasMoreItems","end","undefined","slice","cursor","encodeCursor","meta","tags","index","gte","reverse","results","query","filteredItems","tagsObject","reduce","collection","Array","isArray","tag","Object","eq","gt","find","fileId","key","filter","Boolean"],"sources":["FilesStorageOperations.ts"],"sourcesContent":["import {\n File,\n FileAlias,\n FileManagerFilesStorageOperations,\n FileManagerFilesStorageOperationsCreateBatchParams,\n FileManagerFilesStorageOperationsCreateParams,\n FileManagerFilesStorageOperationsDeleteParams,\n FileManagerFilesStorageOperationsGetParams,\n FileManagerFilesStorageOperationsListParams,\n FileManagerFilesStorageOperationsListParamsWhere,\n FileManagerFilesStorageOperationsListResponse,\n FileManagerFilesStorageOperationsListResponseMeta,\n FileManagerFilesStorageOperationsTagsParams,\n FileManagerFilesStorageOperationsTagsParamsWhere,\n FileManagerFilesStorageOperationsTagsResponse,\n FileManagerFilesStorageOperationsUpdateParams\n} from \"@webiny/api-file-manager/types\";\nimport { Entity, Table } from \"dynamodb-toolbox\";\nimport WebinyError from \"@webiny/error\";\nimport { createTable } from \"~/definitions/table\";\nimport { queryOptions as DynamoDBToolboxQueryOptions } from \"dynamodb-toolbox/dist/classes/Table\";\nimport { queryAll } from \"@webiny/db-dynamodb/utils/query\";\nimport { decodeCursor, encodeCursor } from \"@webiny/db-dynamodb/utils/cursor\";\nimport { filterItems } from \"@webiny/db-dynamodb/utils/filter\";\nimport { sortItems } from \"@webiny/db-dynamodb/utils/sort\";\nimport { FileDynamoDbFieldPlugin } from \"~/plugins/FileDynamoDbFieldPlugin\";\nimport { batchWriteAll } from \"@webiny/db-dynamodb/utils/batchWrite\";\nimport { get as getEntityItem } from \"@webiny/db-dynamodb/utils/get\";\nimport { createStandardEntity, DbItem } from \"@webiny/db-dynamodb\";\nimport { DocumentClient } from \"aws-sdk/clients/dynamodb\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ntype FileItem = DbItem<File>;\ntype FileAliasItem = DbItem<FileAlias>;\n\ninterface ConstructorParams {\n documentClient: DocumentClient;\n plugins: PluginsContainer;\n}\n\ninterface QueryAllOptionsParams {\n where: FileManagerFilesStorageOperationsListParamsWhere;\n}\n\ninterface CreatePartitionKeyParams {\n locale: string;\n tenant: string;\n id: string;\n}\n\ntype CreateGSI1PartitionKeyParams = Pick<CreatePartitionKeyParams, \"tenant\" | \"locale\">;\n\nexport class FilesStorageOperations implements FileManagerFilesStorageOperations {\n private readonly plugins: PluginsContainer;\n private readonly table: Table;\n private readonly fileEntity: Entity<any>;\n private readonly aliasEntity: Entity<any>;\n\n public constructor({ documentClient, plugins }: ConstructorParams) {\n this.plugins = plugins;\n this.table = createTable({ documentClient });\n this.fileEntity = createStandardEntity(this.table, \"FM.File\");\n this.aliasEntity = createStandardEntity(this.table, \"FM.FileAlias\");\n }\n\n public async get(params: FileManagerFilesStorageOperationsGetParams): Promise<File | null> {\n const { where } = params;\n const keys = {\n PK: this.createPartitionKey(where),\n SK: \"A\"\n };\n try {\n const file = await getEntityItem<{ data: File }>({\n entity: this.fileEntity,\n keys\n });\n\n return file ? file.data : null;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not fetch requested file.\",\n ex.code || \"GET_FILE_ERROR\",\n {\n error: ex,\n where\n }\n );\n }\n }\n\n public async create(params: FileManagerFilesStorageOperationsCreateParams): Promise<File> {\n const { file } = params;\n\n const items: any[] = [];\n\n const item: FileItem = {\n PK: this.createPartitionKey(file),\n SK: \"A\",\n GSI1_PK: this.createGSI1PartitionKey(file),\n GSI1_SK: file.id,\n TYPE: \"fm.file\",\n data: file\n };\n\n items.push(this.fileEntity.putBatch(item));\n\n this.createNewAliasesRecords(file).forEach(alias => {\n items.push(this.aliasEntity.putBatch(alias));\n });\n\n try {\n await batchWriteAll({\n table: this.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create a new file in the DynamoDB.\",\n ex.code || \"CREATE_FILE_ERROR\",\n {\n error: ex,\n items\n }\n );\n }\n\n return file;\n }\n\n public async update(params: FileManagerFilesStorageOperationsUpdateParams): Promise<File> {\n const { file } = params;\n\n const items: any[] = [];\n\n const item: FileItem = {\n PK: this.createPartitionKey(file),\n SK: \"A\",\n GSI1_PK: this.createGSI1PartitionKey(file),\n GSI1_SK: file.id,\n TYPE: \"fm.file\",\n data: file\n };\n\n items.push(this.fileEntity.putBatch(item));\n\n const existingAliases = await queryAll<FileAliasItem>({\n entity: this.aliasEntity,\n partitionKey: `T#${file.tenant}#L#${file.locale}#FM#FILE#${file.id}`,\n options: {\n beginsWith: `ALIAS#`\n }\n });\n\n const newAliases = this.createNewAliasesRecords(\n file,\n existingAliases.map(alias => alias.data)\n );\n\n newAliases.forEach(alias => {\n items.push(this.aliasEntity.putBatch(alias));\n });\n\n // Delete aliases that are in the DB but are NOT in the file.\n for (const { data } of existingAliases) {\n if (!file.aliases.some(alias => data.alias === alias)) {\n items.push(\n this.aliasEntity.deleteBatch({\n PK: this.createPartitionKey(file),\n SK: `ALIAS#${data.alias}`\n })\n );\n }\n }\n\n try {\n await batchWriteAll({\n table: this.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update a file in the DynamoDB.\",\n ex.code || \"UPDATE_FILE_ERROR\",\n {\n items\n }\n );\n }\n return params.file;\n }\n\n public async delete(params: FileManagerFilesStorageOperationsDeleteParams): Promise<void> {\n const { file } = params;\n const keys = {\n PK: this.createPartitionKey(file),\n SK: \"A\"\n };\n\n const aliasItems = await queryAll({\n entity: this.aliasEntity,\n partitionKey: keys.PK,\n options: {\n beginsWith: \"ALIAS#\"\n }\n });\n\n // All items to delete in batch\n const items: any[] = [];\n\n try {\n // Delete the main file item\n items.push(this.fileEntity.deleteBatch(keys));\n\n // Delete file alias items\n aliasItems.forEach(item => {\n items.push(\n this.aliasEntity.deleteBatch({\n PK: item.PK,\n SK: item.SK\n })\n );\n });\n\n await batchWriteAll({ table: this.table, items });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete file from the DynamoDB.\",\n ex.code || \"DELETE_FILE_ERROR\",\n {\n error: ex,\n file,\n keys,\n aliasItems\n }\n );\n }\n }\n\n public async createBatch(\n params: FileManagerFilesStorageOperationsCreateBatchParams\n ): Promise<File[]> {\n const { files } = params;\n\n // Items to be written in batch\n const items: any[] = [];\n\n files.forEach(file => {\n items.push(\n this.fileEntity.putBatch({\n PK: this.createPartitionKey(file),\n SK: \"A\",\n GSI1_PK: this.createGSI1PartitionKey(file),\n GSI1_SK: file.id,\n TYPE: \"fm.file\",\n data: file\n })\n );\n\n this.createNewAliasesRecords(file).forEach(alias => {\n items.push(this.aliasEntity.putBatch(alias));\n });\n });\n\n try {\n await batchWriteAll({\n table: this.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not batch insert a list of files.\",\n ex.code || \"BATCH_CREATE_FILES_ERROR\",\n {\n error: ex,\n files\n }\n );\n }\n return files;\n }\n\n public async list(\n params: FileManagerFilesStorageOperationsListParams\n ): Promise<FileManagerFilesStorageOperationsListResponse> {\n const { where: initialWhere, limit, after, sort } = params;\n\n const options = this.createQueryAllOptions({\n where: initialWhere\n });\n const queryAllParams = {\n entity: this.fileEntity,\n partitionKey: this.createGSI1PartitionKey(initialWhere),\n options\n };\n let items = [];\n try {\n const dbItems = await queryAll<{ data: File }>(queryAllParams);\n items = dbItems.map(item => item.data);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not query for the files.\",\n ex.code || \"FILE_LIST_ERROR\",\n {\n error: ex,\n where: initialWhere,\n limit,\n after,\n sort,\n queryParams: {\n options,\n partitionKey: queryAllParams.partitionKey,\n entity: queryAllParams.entity.name,\n table: queryAllParams.entity.table.name\n }\n }\n );\n }\n\n const where: Partial<FileManagerFilesStorageOperationsListParamsWhere> & {\n contains?: { fields: string[]; value: string };\n } = {\n ...initialWhere\n };\n if (where.search) {\n where.contains = {\n fields: [\"name\", \"tags\"],\n value: where.search\n };\n }\n delete where[\"tenant\"];\n delete where[\"locale\"];\n delete where[\"search\"];\n\n const fields = this.plugins.byType<FileDynamoDbFieldPlugin>(FileDynamoDbFieldPlugin.type);\n /**\n * Filter the read items via the code.\n * It will build the filters out of the where input and transform the values it is using.\n */\n const filteredFiles = filterItems({\n plugins: this.plugins,\n items,\n where,\n fields\n });\n\n const totalCount = filteredFiles.length;\n /**\n * Sorting is also done via the code.\n * It takes the sort input and sorts by it via the lodash sortBy method.\n */\n const sortedFiles = sortItems({\n items: filteredFiles,\n sort,\n fields\n });\n\n const start = parseInt(decodeCursor(after) || \"0\") || 0;\n const hasMoreItems = totalCount > start + limit;\n const end = limit > totalCount + start + limit ? undefined : start + limit;\n const files = sortedFiles.slice(start, end);\n /**\n * Although we do not need a cursor here, we will use it as such to keep it standardized.\n * Number is simply encoded.\n */\n const cursor = files.length > 0 ? encodeCursor(start + limit) : null;\n\n const meta = {\n hasMoreItems,\n totalCount: totalCount,\n cursor\n };\n\n return [files, meta];\n }\n\n public async tags(\n params: FileManagerFilesStorageOperationsTagsParams\n ): Promise<FileManagerFilesStorageOperationsTagsResponse> {\n const { where: initialWhere } = params;\n\n const queryAllParams = {\n entity: this.fileEntity,\n partitionKey: this.createGSI1PartitionKey(initialWhere),\n options: {\n index: \"GSI1\",\n gte: \" \",\n reverse: false\n }\n };\n let results = [];\n try {\n const dbItems = await queryAll<{ data: File }>(queryAllParams);\n results = dbItems.map(item => item.data);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Error in the DynamoDB query.\",\n ex.code || \"DYNAMODB_ERROR\",\n {\n error: ex,\n query: queryAllParams\n }\n );\n }\n\n const fields = this.plugins.byType<FileDynamoDbFieldPlugin>(FileDynamoDbFieldPlugin.type);\n\n const where: Partial<FileManagerFilesStorageOperationsTagsParamsWhere> = {\n ...initialWhere\n };\n\n delete where[\"tenant\"];\n delete where[\"locale\"];\n\n /**\n * Filter the read items via the code.\n * It will build the filters out of the where input and transform the values it is using.\n */\n const filteredItems = filterItems({\n plugins: this.plugins,\n items: results,\n where,\n fields\n });\n\n /**\n * Aggregate all the tags from all the filtered items.\n */\n const tagsObject = filteredItems.reduce((collection, item) => {\n const tags = Array.isArray(item.tags) ? item.tags : [];\n for (const tag of tags) {\n if (!collection[tag]) {\n collection[tag] = [];\n }\n collection[tag].push(item.id);\n }\n return collection;\n }, {} as Record<string, string[]>);\n\n const tags: string[] = Object.keys(tagsObject);\n\n const hasMoreItems = false;\n const totalCount = tags.length;\n\n const meta: FileManagerFilesStorageOperationsListResponseMeta = {\n hasMoreItems,\n totalCount,\n cursor: null\n };\n\n return [tags, meta];\n }\n\n private createQueryAllOptions({ where }: QueryAllOptionsParams): DynamoDBToolboxQueryOptions {\n const options: DynamoDBToolboxQueryOptions = { index: \"GSI1\" };\n if (where.id) {\n options.eq = where.id;\n } else {\n options.gt = \" \";\n }\n return options;\n }\n\n private createPartitionKey(params: CreatePartitionKeyParams): string {\n const { tenant, locale, id } = params;\n return `T#${tenant}#L#${locale}#FM#FILE#${id}`;\n }\n private createGSI1PartitionKey(params: CreateGSI1PartitionKeyParams): string {\n const { tenant, locale } = params;\n return `T#${tenant}#L#${locale}#FM#FILES`;\n }\n\n private createNewAliasesRecords(\n file: File,\n existingAliases: FileAlias[] = []\n ): FileAliasItem[] {\n return (file.aliases || [])\n .map(alias => {\n // If alias is already in the DB, skip it.\n if (existingAliases.find(item => item.alias === alias)) {\n return null;\n }\n\n // Add a new alias.\n return {\n PK: this.createPartitionKey(file),\n SK: `ALIAS#${alias}`,\n GSI1_PK: `T#${file.tenant}#FM#FILE_ALIASES`,\n GSI1_SK: alias,\n TYPE: \"fm.fileAlias\",\n data: {\n alias,\n tenant: file.tenant,\n locale: file.locale,\n fileId: file.id,\n key: file.key\n }\n };\n })\n .filter(Boolean) as FileAliasItem[];\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["FilesStorageOperations","constructor","documentClient","plugins","table","createTable","fileEntity","createStandardEntity","aliasEntity","get","params","where","keys","PK","createPartitionKey","SK","file","getEntityItem","entity","data","ex","WebinyError","message","code","error","create","items","item","GSI1_PK","createGSI1PartitionKey","GSI1_SK","id","TYPE","push","putBatch","createNewAliasesRecords","forEach","alias","batchWriteAll","update","existingAliases","queryAll","partitionKey","tenant","locale","options","beginsWith","newAliases","map","aliases","some","deleteBatch","delete","aliasItems","createBatch","files","list","initialWhere","limit","after","sort","createQueryAllOptions","queryAllParams","dbItems","queryParams","name","search","contains","fields","value","byType","FileDynamoDbFieldPlugin","type","filteredFiles","filterItems","totalCount","length","sortedFiles","sortItems","start","parseInt","decodeCursor","hasMoreItems","end","undefined","slice","cursor","encodeCursor","meta","tags","index","gte","reverse","results","query","filteredItems","reduce","collection","Array","isArray","tag","count","Object","values","a","b","eq","gt","find","fileId","key","filter","Boolean"],"sources":["FilesStorageOperations.ts"],"sourcesContent":["import {\n File,\n FileAlias,\n FileManagerFilesStorageOperations,\n FileManagerFilesStorageOperationsCreateBatchParams,\n FileManagerFilesStorageOperationsCreateParams,\n FileManagerFilesStorageOperationsDeleteParams,\n FileManagerFilesStorageOperationsGetParams,\n FileManagerFilesStorageOperationsListParams,\n FileManagerFilesStorageOperationsListParamsWhere,\n FileManagerFilesStorageOperationsListResponse,\n FileManagerFilesStorageOperationsTagsParams,\n FileManagerFilesStorageOperationsTagsParamsWhere,\n FileManagerFilesStorageOperationsTagsResponse,\n FileManagerFilesStorageOperationsUpdateParams\n} from \"@webiny/api-file-manager/types\";\nimport { Entity, Table } from \"dynamodb-toolbox\";\nimport WebinyError from \"@webiny/error\";\nimport { createTable } from \"~/definitions/table\";\nimport { queryOptions as DynamoDBToolboxQueryOptions } from \"dynamodb-toolbox/dist/classes/Table\";\nimport { queryAll } from \"@webiny/db-dynamodb/utils/query\";\nimport { decodeCursor, encodeCursor } from \"@webiny/db-dynamodb/utils/cursor\";\nimport { filterItems } from \"@webiny/db-dynamodb/utils/filter\";\nimport { sortItems } from \"@webiny/db-dynamodb/utils/sort\";\nimport { FileDynamoDbFieldPlugin } from \"~/plugins/FileDynamoDbFieldPlugin\";\nimport { batchWriteAll } from \"@webiny/db-dynamodb/utils/batchWrite\";\nimport { get as getEntityItem } from \"@webiny/db-dynamodb/utils/get\";\nimport { createStandardEntity, DbItem } from \"@webiny/db-dynamodb\";\nimport { DocumentClient } from \"aws-sdk/clients/dynamodb\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ntype FileItem = DbItem<File>;\ntype FileAliasItem = DbItem<FileAlias>;\n\ninterface ConstructorParams {\n documentClient: DocumentClient;\n plugins: PluginsContainer;\n}\n\ninterface QueryAllOptionsParams {\n where: FileManagerFilesStorageOperationsListParamsWhere;\n}\n\ninterface CreatePartitionKeyParams {\n locale: string;\n tenant: string;\n id: string;\n}\n\ntype CreateGSI1PartitionKeyParams = Pick<CreatePartitionKeyParams, \"tenant\" | \"locale\">;\n\nexport class FilesStorageOperations implements FileManagerFilesStorageOperations {\n private readonly plugins: PluginsContainer;\n private readonly table: Table;\n private readonly fileEntity: Entity<any>;\n private readonly aliasEntity: Entity<any>;\n\n public constructor({ documentClient, plugins }: ConstructorParams) {\n this.plugins = plugins;\n this.table = createTable({ documentClient });\n this.fileEntity = createStandardEntity(this.table, \"FM.File\");\n this.aliasEntity = createStandardEntity(this.table, \"FM.FileAlias\");\n }\n\n public async get(params: FileManagerFilesStorageOperationsGetParams): Promise<File | null> {\n const { where } = params;\n const keys = {\n PK: this.createPartitionKey(where),\n SK: \"A\"\n };\n try {\n const file = await getEntityItem<{ data: File }>({\n entity: this.fileEntity,\n keys\n });\n\n return file ? file.data : null;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not fetch requested file.\",\n ex.code || \"GET_FILE_ERROR\",\n {\n error: ex,\n where\n }\n );\n }\n }\n\n public async create(params: FileManagerFilesStorageOperationsCreateParams): Promise<File> {\n const { file } = params;\n\n const items: any[] = [];\n\n const item: FileItem = {\n PK: this.createPartitionKey(file),\n SK: \"A\",\n GSI1_PK: this.createGSI1PartitionKey(file),\n GSI1_SK: file.id,\n TYPE: \"fm.file\",\n data: file\n };\n\n items.push(this.fileEntity.putBatch(item));\n\n this.createNewAliasesRecords(file).forEach(alias => {\n items.push(this.aliasEntity.putBatch(alias));\n });\n\n try {\n await batchWriteAll({\n table: this.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create a new file in the DynamoDB.\",\n ex.code || \"CREATE_FILE_ERROR\",\n {\n error: ex,\n items\n }\n );\n }\n\n return file;\n }\n\n public async update(params: FileManagerFilesStorageOperationsUpdateParams): Promise<File> {\n const { file } = params;\n\n const items: any[] = [];\n\n const item: FileItem = {\n PK: this.createPartitionKey(file),\n SK: \"A\",\n GSI1_PK: this.createGSI1PartitionKey(file),\n GSI1_SK: file.id,\n TYPE: \"fm.file\",\n data: file\n };\n\n items.push(this.fileEntity.putBatch(item));\n\n const existingAliases = await queryAll<FileAliasItem>({\n entity: this.aliasEntity,\n partitionKey: `T#${file.tenant}#L#${file.locale}#FM#FILE#${file.id}`,\n options: {\n beginsWith: `ALIAS#`\n }\n });\n\n const newAliases = this.createNewAliasesRecords(\n file,\n existingAliases.map(alias => alias.data)\n );\n\n newAliases.forEach(alias => {\n items.push(this.aliasEntity.putBatch(alias));\n });\n\n // Delete aliases that are in the DB but are NOT in the file.\n for (const { data } of existingAliases) {\n if (!file.aliases.some(alias => data.alias === alias)) {\n items.push(\n this.aliasEntity.deleteBatch({\n PK: this.createPartitionKey(file),\n SK: `ALIAS#${data.alias}`\n })\n );\n }\n }\n\n try {\n await batchWriteAll({\n table: this.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update a file in the DynamoDB.\",\n ex.code || \"UPDATE_FILE_ERROR\",\n {\n items\n }\n );\n }\n return params.file;\n }\n\n public async delete(params: FileManagerFilesStorageOperationsDeleteParams): Promise<void> {\n const { file } = params;\n const keys = {\n PK: this.createPartitionKey(file),\n SK: \"A\"\n };\n\n const aliasItems = await queryAll({\n entity: this.aliasEntity,\n partitionKey: keys.PK,\n options: {\n beginsWith: \"ALIAS#\"\n }\n });\n\n // All items to delete in batch\n const items: any[] = [];\n\n try {\n // Delete the main file item\n items.push(this.fileEntity.deleteBatch(keys));\n\n // Delete file alias items\n aliasItems.forEach(item => {\n items.push(\n this.aliasEntity.deleteBatch({\n PK: item.PK,\n SK: item.SK\n })\n );\n });\n\n await batchWriteAll({ table: this.table, items });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete file from the DynamoDB.\",\n ex.code || \"DELETE_FILE_ERROR\",\n {\n error: ex,\n file,\n keys,\n aliasItems\n }\n );\n }\n }\n\n public async createBatch(\n params: FileManagerFilesStorageOperationsCreateBatchParams\n ): Promise<File[]> {\n const { files } = params;\n\n // Items to be written in batch\n const items: any[] = [];\n\n files.forEach(file => {\n items.push(\n this.fileEntity.putBatch({\n PK: this.createPartitionKey(file),\n SK: \"A\",\n GSI1_PK: this.createGSI1PartitionKey(file),\n GSI1_SK: file.id,\n TYPE: \"fm.file\",\n data: file\n })\n );\n\n this.createNewAliasesRecords(file).forEach(alias => {\n items.push(this.aliasEntity.putBatch(alias));\n });\n });\n\n try {\n await batchWriteAll({\n table: this.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not batch insert a list of files.\",\n ex.code || \"BATCH_CREATE_FILES_ERROR\",\n {\n error: ex,\n files\n }\n );\n }\n return files;\n }\n\n public async list(\n params: FileManagerFilesStorageOperationsListParams\n ): Promise<FileManagerFilesStorageOperationsListResponse> {\n const { where: initialWhere, limit, after, sort } = params;\n\n const options = this.createQueryAllOptions({\n where: initialWhere\n });\n const queryAllParams = {\n entity: this.fileEntity,\n partitionKey: this.createGSI1PartitionKey(initialWhere),\n options\n };\n let items = [];\n try {\n const dbItems = await queryAll<{ data: File }>(queryAllParams);\n items = dbItems.map(item => item.data);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not query for the files.\",\n ex.code || \"FILE_LIST_ERROR\",\n {\n error: ex,\n where: initialWhere,\n limit,\n after,\n sort,\n queryParams: {\n options,\n partitionKey: queryAllParams.partitionKey,\n entity: queryAllParams.entity.name,\n table: queryAllParams.entity.table.name\n }\n }\n );\n }\n\n const where: Partial<FileManagerFilesStorageOperationsListParamsWhere> & {\n contains?: { fields: string[]; value: string };\n } = {\n ...initialWhere\n };\n if (where.search) {\n where.contains = {\n fields: [\"name\", \"tags\"],\n value: where.search\n };\n }\n delete where[\"tenant\"];\n delete where[\"locale\"];\n delete where[\"search\"];\n\n const fields = this.plugins.byType<FileDynamoDbFieldPlugin>(FileDynamoDbFieldPlugin.type);\n /**\n * Filter the read items via the code.\n * It will build the filters out of the where input and transform the values it is using.\n */\n const filteredFiles = filterItems({\n plugins: this.plugins,\n items,\n where,\n fields\n });\n\n const totalCount = filteredFiles.length;\n /**\n * Sorting is also done via the code.\n * It takes the sort input and sorts by it via the lodash sortBy method.\n */\n const sortedFiles = sortItems({\n items: filteredFiles,\n sort,\n fields\n });\n\n const start = parseInt(decodeCursor(after) || \"0\") || 0;\n const hasMoreItems = totalCount > start + limit;\n const end = limit > totalCount + start + limit ? undefined : start + limit;\n const files = sortedFiles.slice(start, end);\n /**\n * Although we do not need a cursor here, we will use it as such to keep it standardized.\n * Number is simply encoded.\n */\n const cursor = files.length > 0 ? encodeCursor(start + limit) : null;\n\n const meta = {\n hasMoreItems,\n totalCount: totalCount,\n cursor\n };\n\n return [files, meta];\n }\n\n public async tags(\n params: FileManagerFilesStorageOperationsTagsParams\n ): Promise<FileManagerFilesStorageOperationsTagsResponse[]> {\n const { where: initialWhere } = params;\n\n const queryAllParams = {\n entity: this.fileEntity,\n partitionKey: this.createGSI1PartitionKey(initialWhere),\n options: {\n index: \"GSI1\",\n gte: \" \",\n reverse: false\n }\n };\n let results = [];\n try {\n const dbItems = await queryAll<{ data: File }>(queryAllParams);\n results = dbItems.map(item => item.data);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Error in the DynamoDB query.\",\n ex.code || \"DYNAMODB_ERROR\",\n {\n error: ex,\n query: queryAllParams\n }\n );\n }\n\n const fields = this.plugins.byType<FileDynamoDbFieldPlugin>(FileDynamoDbFieldPlugin.type);\n\n const where: Partial<FileManagerFilesStorageOperationsTagsParamsWhere> = {\n ...initialWhere\n };\n\n delete where[\"tenant\"];\n delete where[\"locale\"];\n\n /**\n * Filter the read items via the code.\n * It will build the filters out of the where input and transform the values it is using.\n */\n const filteredItems = filterItems({\n plugins: this.plugins,\n items: results,\n where,\n fields\n });\n\n const tags = filteredItems.reduce<\n Record<string, FileManagerFilesStorageOperationsTagsResponse>\n >((collection, item) => {\n const tags = Array.isArray(item.tags) ? item.tags : [];\n\n for (const tag of tags) {\n collection[tag] = {\n tag,\n count: (collection[tag]?.count || 0) + 1\n };\n }\n\n return collection;\n }, {});\n\n return Object.values(tags)\n .sort((a, b) => {\n return a.tag < b.tag ? -1 : 1;\n })\n .sort((a, b) => {\n return a.count > b.count ? -1 : 1;\n });\n }\n\n private createQueryAllOptions({ where }: QueryAllOptionsParams): DynamoDBToolboxQueryOptions {\n const options: DynamoDBToolboxQueryOptions = { index: \"GSI1\" };\n if (where.id) {\n options.eq = where.id;\n } else {\n options.gt = \" \";\n }\n return options;\n }\n\n private createPartitionKey(params: CreatePartitionKeyParams): string {\n const { tenant, locale, id } = params;\n return `T#${tenant}#L#${locale}#FM#FILE#${id}`;\n }\n private createGSI1PartitionKey(params: CreateGSI1PartitionKeyParams): string {\n const { tenant, locale } = params;\n return `T#${tenant}#L#${locale}#FM#FILES`;\n }\n\n private createNewAliasesRecords(\n file: File,\n existingAliases: FileAlias[] = []\n ): FileAliasItem[] {\n return (file.aliases || [])\n .map(alias => {\n // If alias is already in the DB, skip it.\n if (existingAliases.find(item => item.alias === alias)) {\n return null;\n }\n\n // Add a new alias.\n return {\n PK: this.createPartitionKey(file),\n SK: `ALIAS#${alias}`,\n GSI1_PK: `T#${file.tenant}#FM#FILE_ALIASES`,\n GSI1_SK: alias,\n TYPE: \"fm.fileAlias\",\n data: {\n alias,\n tenant: file.tenant,\n locale: file.locale,\n fileId: file.id,\n key: file.key\n }\n };\n })\n .filter(Boolean) as FileAliasItem[];\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-file-manager-ddb",
3
- "version": "0.0.0-unstable.496cf268ac",
3
+ "version": "0.0.0-unstable.606fc9c866",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "@webiny/api-file-manager",
@@ -22,11 +22,11 @@
22
22
  "license": "MIT",
23
23
  "dependencies": {
24
24
  "@babel/runtime": "7.20.13",
25
- "@webiny/api-file-manager": "0.0.0-unstable.496cf268ac",
26
- "@webiny/db-dynamodb": "0.0.0-unstable.496cf268ac",
27
- "@webiny/error": "0.0.0-unstable.496cf268ac",
28
- "@webiny/plugins": "0.0.0-unstable.496cf268ac",
29
- "@webiny/project-utils": "0.0.0-unstable.496cf268ac",
25
+ "@webiny/api-file-manager": "0.0.0-unstable.606fc9c866",
26
+ "@webiny/db-dynamodb": "0.0.0-unstable.606fc9c866",
27
+ "@webiny/error": "0.0.0-unstable.606fc9c866",
28
+ "@webiny/plugins": "0.0.0-unstable.606fc9c866",
29
+ "@webiny/project-utils": "0.0.0-unstable.606fc9c866",
30
30
  "aws-sdk": "2.1310.0",
31
31
  "dynamodb-toolbox": "0.3.5"
32
32
  },
@@ -37,7 +37,7 @@
37
37
  "@babel/plugin-transform-runtime": "^7.16.4",
38
38
  "@babel/preset-env": "^7.19.4",
39
39
  "@babel/preset-typescript": "^7.18.6",
40
- "@webiny/cli": "^0.0.0-unstable.496cf268ac",
40
+ "@webiny/cli": "^0.0.0-unstable.606fc9c866",
41
41
  "jest": "^28.1.0",
42
42
  "jest-dynalite": "^3.2.0",
43
43
  "jsonpack": "^1.1.5",
@@ -64,5 +64,5 @@
64
64
  ]
65
65
  }
66
66
  },
67
- "gitHead": "496cf268acd5b092c860b62d75c7d765c9472043"
67
+ "gitHead": "606fc9c866aec436f24983abc9bdaf02af2b8746"
68
68
  }
@@ -1,8 +0,0 @@
1
- import { Entity, Table } from "dynamodb-toolbox";
2
- import { FileManagerContext } from "@webiny/api-file-manager/types";
3
- export interface FilesEntityParams {
4
- context: FileManagerContext;
5
- table: Table;
6
- }
7
- declare const _default: (params: FilesEntityParams) => Entity<any>;
8
- export default _default;
@@ -1,76 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
-
12
- var _dynamodbToolbox = require("dynamodb-toolbox");
13
-
14
- var _attributes = require("@webiny/db-dynamodb/utils/attributes");
15
-
16
- var _default = params => {
17
- const {
18
- context,
19
- table
20
- } = params;
21
- const entityName = "Files";
22
- const attributes = (0, _attributes.getExtraAttributes)(context, entityName);
23
- return new _dynamodbToolbox.Entity({
24
- name: entityName,
25
- table,
26
- attributes: (0, _objectSpread2.default)({
27
- PK: {
28
- partitionKey: true
29
- },
30
- SK: {
31
- sortKey: true
32
- },
33
- TYPE: {
34
- type: "string"
35
- },
36
- id: {
37
- type: "string"
38
- },
39
- key: {
40
- type: "string"
41
- },
42
- size: {
43
- type: "number"
44
- },
45
- type: {
46
- type: "string"
47
- },
48
- name: {
49
- type: "string"
50
- },
51
- meta: {
52
- type: "map"
53
- },
54
- tags: {
55
- type: "list"
56
- },
57
- createdOn: {
58
- type: "string"
59
- },
60
- createdBy: {
61
- type: "map"
62
- },
63
- tenant: {
64
- type: "string"
65
- },
66
- locale: {
67
- type: "string"
68
- },
69
- webinyVersion: {
70
- type: "string"
71
- }
72
- }, attributes)
73
- });
74
- };
75
-
76
- exports.default = _default;
@@ -1 +0,0 @@
1
- {"version":3,"names":["params","context","table","entityName","attributes","getExtraAttributes","Entity","name","PK","partitionKey","SK","sortKey","TYPE","type","id","key","size","meta","tags","createdOn","createdBy","tenant","locale","webinyVersion"],"sources":["filesEntity.ts"],"sourcesContent":["import { Entity, Table } from \"dynamodb-toolbox\";\nimport { FileManagerContext } from \"@webiny/api-file-manager/types\";\nimport { getExtraAttributes } from \"@webiny/db-dynamodb/utils/attributes\";\n\nexport interface FilesEntityParams {\n context: FileManagerContext;\n table: Table;\n}\nexport default (params: FilesEntityParams): Entity<any> => {\n const { context, table } = params;\n const entityName = \"Files\";\n const attributes = getExtraAttributes(context, entityName);\n return new Entity({\n name: entityName,\n table,\n attributes: {\n PK: {\n partitionKey: true\n },\n SK: {\n sortKey: true\n },\n TYPE: {\n type: \"string\"\n },\n id: {\n type: \"string\"\n },\n key: {\n type: \"string\"\n },\n size: {\n type: \"number\"\n },\n type: {\n type: \"string\"\n },\n name: {\n type: \"string\"\n },\n meta: {\n type: \"map\"\n },\n tags: {\n type: \"list\"\n },\n createdOn: {\n type: \"string\"\n },\n createdBy: {\n type: \"map\"\n },\n tenant: {\n type: \"string\"\n },\n locale: {\n type: \"string\"\n },\n webinyVersion: {\n type: \"string\"\n },\n ...attributes\n }\n });\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AAEA;;eAMgBA,MAAD,IAA4C;EACvD,MAAM;IAAEC,OAAF;IAAWC;EAAX,IAAqBF,MAA3B;EACA,MAAMG,UAAU,GAAG,OAAnB;EACA,MAAMC,UAAU,GAAG,IAAAC,8BAAA,EAAmBJ,OAAnB,EAA4BE,UAA5B,CAAnB;EACA,OAAO,IAAIG,uBAAJ,CAAW;IACdC,IAAI,EAAEJ,UADQ;IAEdD,KAFc;IAGdE,UAAU;MACNI,EAAE,EAAE;QACAC,YAAY,EAAE;MADd,CADE;MAINC,EAAE,EAAE;QACAC,OAAO,EAAE;MADT,CAJE;MAONC,IAAI,EAAE;QACFC,IAAI,EAAE;MADJ,CAPA;MAUNC,EAAE,EAAE;QACAD,IAAI,EAAE;MADN,CAVE;MAaNE,GAAG,EAAE;QACDF,IAAI,EAAE;MADL,CAbC;MAgBNG,IAAI,EAAE;QACFH,IAAI,EAAE;MADJ,CAhBA;MAmBNA,IAAI,EAAE;QACFA,IAAI,EAAE;MADJ,CAnBA;MAsBNN,IAAI,EAAE;QACFM,IAAI,EAAE;MADJ,CAtBA;MAyBNI,IAAI,EAAE;QACFJ,IAAI,EAAE;MADJ,CAzBA;MA4BNK,IAAI,EAAE;QACFL,IAAI,EAAE;MADJ,CA5BA;MA+BNM,SAAS,EAAE;QACPN,IAAI,EAAE;MADC,CA/BL;MAkCNO,SAAS,EAAE;QACPP,IAAI,EAAE;MADC,CAlCL;MAqCNQ,MAAM,EAAE;QACJR,IAAI,EAAE;MADF,CArCF;MAwCNS,MAAM,EAAE;QACJT,IAAI,EAAE;MADF,CAxCF;MA2CNU,aAAa,EAAE;QACXV,IAAI,EAAE;MADK;IA3CT,GA8CHT,UA9CG;EAHI,CAAX,CAAP;AAoDH,C"}
@@ -1,6 +0,0 @@
1
- import { FilesStorageOperationsProviderPlugin, FilesStorageOperationsProviderPluginParams } from "@webiny/api-file-manager/plugins/definitions/FilesStorageOperationsProviderPlugin";
2
- import { FilesStorageOperations } from "./FilesStorageOperations";
3
- export declare class FilesStorageOperationsProviderDdb extends FilesStorageOperationsProviderPlugin {
4
- name: string;
5
- provide({ context }: FilesStorageOperationsProviderPluginParams): Promise<FilesStorageOperations>;
6
- }
@@ -1,35 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.FilesStorageOperationsProviderDdb = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _FilesStorageOperationsProviderPlugin = require("@webiny/api-file-manager/plugins/definitions/FilesStorageOperationsProviderPlugin");
13
-
14
- var _FilesStorageOperations = require("./FilesStorageOperations");
15
-
16
- var _fields = _interopRequireDefault(require("./fields"));
17
-
18
- class FilesStorageOperationsProviderDdb extends _FilesStorageOperationsProviderPlugin.FilesStorageOperationsProviderPlugin {
19
- constructor(...args) {
20
- super(...args);
21
- (0, _defineProperty2.default)(this, "name", "fm.storageOperationsProvider.files.ddb");
22
- }
23
-
24
- async provide({
25
- context
26
- }) {
27
- context.plugins.register((0, _fields.default)());
28
- return new _FilesStorageOperations.FilesStorageOperations({
29
- context
30
- });
31
- }
32
-
33
- }
34
-
35
- exports.FilesStorageOperationsProviderDdb = FilesStorageOperationsProviderDdb;
@@ -1 +0,0 @@
1
- {"version":3,"names":["FilesStorageOperationsProviderDdb","FilesStorageOperationsProviderPlugin","provide","context","plugins","register","fields","FilesStorageOperations"],"sources":["index.ts"],"sourcesContent":["import {\n FilesStorageOperationsProviderPlugin,\n FilesStorageOperationsProviderPluginParams\n} from \"@webiny/api-file-manager/plugins/definitions/FilesStorageOperationsProviderPlugin\";\nimport { FilesStorageOperations } from \"./FilesStorageOperations\";\nimport fields from \"./fields\";\n\nexport class FilesStorageOperationsProviderDdb extends FilesStorageOperationsProviderPlugin {\n public override name = \"fm.storageOperationsProvider.files.ddb\";\n async provide({ context }: FilesStorageOperationsProviderPluginParams) {\n context.plugins.register(fields());\n return new FilesStorageOperations({\n context\n });\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA;;AAIA;;AACA;;AAEO,MAAMA,iCAAN,SAAgDC,0EAAhD,CAAqF;EAAA;IAAA;IAAA,4CACjE,wCADiE;EAAA;;EAE3E,MAAPC,OAAO,CAAC;IAAEC;EAAF,CAAD,EAA0D;IACnEA,OAAO,CAACC,OAAR,CAAgBC,QAAhB,CAAyB,IAAAC,eAAA,GAAzB;IACA,OAAO,IAAIC,8CAAJ,CAA2B;MAC9BJ;IAD8B,CAA3B,CAAP;EAGH;;AAPuF"}
@@ -1,6 +0,0 @@
1
- import { SettingsStorageOperations } from "./SettingsStorageOperations";
2
- import { SettingsStorageOperationsProviderPlugin, SettingsStorageOperationsProviderPluginParams } from "@webiny/api-file-manager/plugins/definitions/SettingsStorageOperationsProviderPlugin";
3
- export declare class SettingsStorageOperationsProviderDdbPlugin extends SettingsStorageOperationsProviderPlugin {
4
- name: string;
5
- provide({ context }: SettingsStorageOperationsProviderPluginParams): Promise<SettingsStorageOperations>;
6
- }
@@ -1,32 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.SettingsStorageOperationsProviderDdbPlugin = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _SettingsStorageOperations = require("./SettingsStorageOperations");
13
-
14
- var _SettingsStorageOperationsProviderPlugin = require("@webiny/api-file-manager/plugins/definitions/SettingsStorageOperationsProviderPlugin");
15
-
16
- class SettingsStorageOperationsProviderDdbPlugin extends _SettingsStorageOperationsProviderPlugin.SettingsStorageOperationsProviderPlugin {
17
- constructor(...args) {
18
- super(...args);
19
- (0, _defineProperty2.default)(this, "name", "fm.storageOperationsProvider.settings.ddb");
20
- }
21
-
22
- async provide({
23
- context
24
- }) {
25
- return new _SettingsStorageOperations.SettingsStorageOperations({
26
- context
27
- });
28
- }
29
-
30
- }
31
-
32
- exports.SettingsStorageOperationsProviderDdbPlugin = SettingsStorageOperationsProviderDdbPlugin;
@@ -1 +0,0 @@
1
- {"version":3,"names":["SettingsStorageOperationsProviderDdbPlugin","SettingsStorageOperationsProviderPlugin","provide","context","SettingsStorageOperations"],"sources":["index.ts"],"sourcesContent":["import { SettingsStorageOperations } from \"./SettingsStorageOperations\";\nimport {\n SettingsStorageOperationsProviderPlugin,\n SettingsStorageOperationsProviderPluginParams\n} from \"@webiny/api-file-manager/plugins/definitions/SettingsStorageOperationsProviderPlugin\";\n\nexport class SettingsStorageOperationsProviderDdbPlugin extends SettingsStorageOperationsProviderPlugin {\n public override name = \"fm.storageOperationsProvider.settings.ddb\";\n\n public async provide({ context }: SettingsStorageOperationsProviderPluginParams) {\n return new SettingsStorageOperations({\n context\n });\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAKO,MAAMA,0CAAN,SAAyDC,gFAAzD,CAAiG;EAAA;IAAA;IAAA,4CAC7E,2CAD6E;EAAA;;EAGhF,MAAPC,OAAO,CAAC;IAAEC;EAAF,CAAD,EAA6D;IAC7E,OAAO,IAAIC,oDAAJ,CAA8B;MACjCD;IADiC,CAA9B,CAAP;EAGH;;AAPmG"}
@@ -1,6 +0,0 @@
1
- import { SystemStorageOperations } from "./SystemStorageOperations";
2
- import { SystemStorageOperationsProviderPlugin, SystemStorageOperationsProviderPluginParams } from "@webiny/api-file-manager/plugins/definitions/SystemStorageOperationsProviderPlugin";
3
- export declare class SystemStorageOperationsProviderDdbPlugin extends SystemStorageOperationsProviderPlugin {
4
- name: string;
5
- provide({ context }: SystemStorageOperationsProviderPluginParams): Promise<SystemStorageOperations>;
6
- }
@@ -1,32 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.SystemStorageOperationsProviderDdbPlugin = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _SystemStorageOperations = require("./SystemStorageOperations");
13
-
14
- var _SystemStorageOperationsProviderPlugin = require("@webiny/api-file-manager/plugins/definitions/SystemStorageOperationsProviderPlugin");
15
-
16
- class SystemStorageOperationsProviderDdbPlugin extends _SystemStorageOperationsProviderPlugin.SystemStorageOperationsProviderPlugin {
17
- constructor(...args) {
18
- super(...args);
19
- (0, _defineProperty2.default)(this, "name", "fm.storageOperationsProvider.system.ddb");
20
- }
21
-
22
- async provide({
23
- context
24
- }) {
25
- return new _SystemStorageOperations.SystemStorageOperations({
26
- context
27
- });
28
- }
29
-
30
- }
31
-
32
- exports.SystemStorageOperationsProviderDdbPlugin = SystemStorageOperationsProviderDdbPlugin;
@@ -1 +0,0 @@
1
- {"version":3,"names":["SystemStorageOperationsProviderDdbPlugin","SystemStorageOperationsProviderPlugin","provide","context","SystemStorageOperations"],"sources":["index.ts"],"sourcesContent":["import { SystemStorageOperations } from \"./SystemStorageOperations\";\nimport {\n SystemStorageOperationsProviderPlugin,\n SystemStorageOperationsProviderPluginParams\n} from \"@webiny/api-file-manager/plugins/definitions/SystemStorageOperationsProviderPlugin\";\n\nexport class SystemStorageOperationsProviderDdbPlugin extends SystemStorageOperationsProviderPlugin {\n public override name = \"fm.storageOperationsProvider.system.ddb\";\n public async provide({ context }: SystemStorageOperationsProviderPluginParams) {\n return new SystemStorageOperations({\n context\n });\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAKO,MAAMA,wCAAN,SAAuDC,4EAAvD,CAA6F;EAAA;IAAA;IAAA,4CACzE,yCADyE;EAAA;;EAE5E,MAAPC,OAAO,CAAC;IAAEC;EAAF,CAAD,EAA2D;IAC3E,OAAO,IAAIC,gDAAJ,CAA4B;MAC/BD;IAD+B,CAA5B,CAAP;EAGH;;AAN+F"}