@webiny/api-file-manager-ddb 5.15.0-beta.3 → 5.16.0-beta.2
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.
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _default = {
|
|
8
8
|
db: () => ({
|
|
9
|
-
table: process.env.DB_TABLE_FILE_MANGER,
|
|
9
|
+
table: process.env.DB_TABLE_FILE_MANGER || process.env.DB_TABLE,
|
|
10
10
|
keys: [{
|
|
11
11
|
primary: true,
|
|
12
12
|
unique: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/operations/configurations.ts"],"names":["db","table","process","env","DB_TABLE_FILE_MANGER","keys","primary","unique","name","fields"],"mappings":";;;;;;eAAe;AACXA,EAAAA,EAAE,EAAE,OAAO;AACPC,IAAAA,KAAK,EAAEC,OAAO,CAACC,GAAR,CAAYC,
|
|
1
|
+
{"version":3,"sources":["../../src/operations/configurations.ts"],"names":["db","table","process","env","DB_TABLE_FILE_MANGER","DB_TABLE","keys","primary","unique","name","fields"],"mappings":";;;;;;eAAe;AACXA,EAAAA,EAAE,EAAE,OAAO;AACPC,IAAAA,KAAK,EAAEC,OAAO,CAACC,GAAR,CAAYC,oBAAZ,IAAoCF,OAAO,CAACC,GAAR,CAAYE,QADhD;AAEPC,IAAAA,IAAI,EAAE,CACF;AACIC,MAAAA,OAAO,EAAE,IADb;AAEIC,MAAAA,MAAM,EAAE,IAFZ;AAGIC,MAAAA,IAAI,EAAE,SAHV;AAIIC,MAAAA,MAAM,EAAE,CAAC;AAAED,QAAAA,IAAI,EAAE;AAAR,OAAD,EAAiB;AAAEA,QAAAA,IAAI,EAAE;AAAR,OAAjB;AAJZ,KADE;AAFC,GAAP;AADO,C","sourcesContent":["export default {\n db: () => ({\n table: process.env.DB_TABLE_FILE_MANGER || process.env.DB_TABLE,\n keys: [\n {\n primary: true,\n unique: true,\n name: \"primary\",\n fields: [{ name: \"PK\" }, { name: \"SK\" }]\n }\n ]\n })\n};\n"],"file":"configurations.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/operations/files/FilesStorageOperations.ts"],"names":["cleanStorageFile","file","FilesStorageOperations","context","_context","partitionKey","tenant","tenancy","getCurrentTenant","locale","i18nContent","getLocale","WebinyError","Error","id","code","constructor","_table","_entity","table","get","PK","SK","getSortKey","Item","ex","message","create","params","keys","item","TYPE","put","update","delete","createBatch","files","fileChunks","fileChunk","batches","push","putBatch","batchWrite","items","list","where","limit","after","sort","options","createQueryAllOptions","queryAllParams","entity","queryParams","name","fields","plugins","byType","FileDynamoDbFieldPlugin","type","filteredFiles","totalCount","length","sortedFiles","start","hasMoreItems","end","undefined","slice","cursor","meta","tags","filters","attr","eq","reverse","query","tagsObject","reduce","collection","tag","Object","match"],"mappings":";;;;;;;;;;;AAaA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAgBA;AACA;AACA;AACA,MAAMA,gBAAgB,GAAIC,IAAD,IAA4C;AACjE,SAAO,qBAAWA,IAAX,EAAiB,CAAC,IAAD,EAAO,IAAP,EAAa,MAAb,EAAqB,SAArB,EAAgC,UAAhC,EAA4C,QAA5C,CAAjB,CAAP;AACH,CAFD;;AAIO,MAAMC,sBAAN,CAA0E;AAK1D,MAAPC,OAAO,GAAuB;AACtC,WAAO,KAAKC,QAAZ;AACH;;AAEuB,MAAZC,YAAY,GAAW;AAC/B,UAAMC,MAAM,GAAG,KAAKH,OAAL,CAAaI,OAAb,CAAqBC,gBAArB,EAAf;AACA,UAAMC,MAAM,GAAG,KAAKN,OAAL,CAAaO,WAAb,CAAyBC,SAAzB,EAAf;;AACA,QAAI,CAACL,MAAL,EAAa;AACT,YAAM,IAAIM,cAAJ,CAAgB,iBAAhB,EAAmC,kBAAnC,CAAN;AACH;;AACD,QAAI,CAACH,MAAL,EAAa;AACT,YAAM,IAAII,KAAJ,CAAU,iBAAV,CAAN;AACH;;AACD,WAAQ,KAAIP,MAAM,CAACQ,EAAG,MAAKL,MAAM,CAACM,IAAK,OAAvC;AACH;;AAEMC,EAAAA,WAAW,CAAC;AAAEb,IAAAA;AAAF,GAAD,EAAiC;AAAA;AAAA;AAAA;AAC/C,SAAKC,QAAL,GAAgBD,OAAhB;AACA,SAAKc,MAAL,GAAc,oBAAY;AACtBd,MAAAA;AADsB,KAAZ,CAAd;AAIA,SAAKe,OAAL,GAAe,0BAAkB;AAC7Bf,MAAAA,OAD6B;AAE7BgB,MAAAA,KAAK,EAAE,KAAKF;AAFiB,KAAlB,CAAf;AAIH;;AAEe,QAAHG,GAAG,CAACN,EAAD,EAAmC;AAC/C,QAAI;AACA,YAAMb,IAAI,GAAG,MAAM,KAAKiB,OAAL,CAAaE,GAAb,CAAiB;AAChCC,QAAAA,EAAE,EAAE,KAAKhB,YADuB;AAEhCiB,QAAAA,EAAE,EAAE,KAAKC,UAAL,CAAgBT,EAAhB;AAF4B,OAAjB,CAAnB;;AAIA,UAAI,CAACb,IAAD,IAAS,CAACA,IAAI,CAACuB,IAAnB,EAAyB;AACrB,eAAO,IAAP;AACH;;AACD,aAAOxB,gBAAgB,CAACC,IAAI,CAACuB,IAAN,CAAvB;AACH,KATD,CASE,OAAOC,EAAP,EAAW;AACT,YAAM,IAAIb,cAAJ,CACFa,EAAE,CAACC,OAAH,IAAc,iCADZ,EAEFD,EAAE,CAACV,IAAH,IAAW,gBAFT,EAGF;AACID,QAAAA;AADJ,OAHE,CAAN;AAOH;AACJ;;AAEkB,QAANa,MAAM,CAACC,MAAD,EAAuE;AACtF,UAAM;AAAE3B,MAAAA;AAAF,QAAW2B,MAAjB;AAEA,UAAMC,IAAI,GAAG;AACTR,MAAAA,EAAE,EAAE,KAAKhB,YADA;AAETiB,MAAAA,EAAE,EAAE,KAAKC,UAAL,CAAgBtB,IAAI,CAACa,EAArB;AAFK,KAAb;;AAIA,UAAMgB,IAAc,mCACbD,IADa;AAEhBE,MAAAA,IAAI,EAAE;AAFU,OAGb9B,IAHa,CAApB;;AAKA,QAAI;AACA,YAAM,KAAKiB,OAAL,CAAac,GAAb,CAAiBF,IAAjB,CAAN;AACH,KAFD,CAEE,OAAOL,EAAP,EAAW;AACT,YAAM,IAAIb,cAAJ,CACFa,EAAE,CAACC,OAAH,IAAc,8CADZ,EAEFD,EAAE,CAACV,IAAH,IAAW,mBAFT,EAGF;AACIe,QAAAA;AADJ,OAHE,CAAN;AAOH;;AAED,WAAO7B,IAAP;AACH;;AAEkB,QAANgC,MAAM,CAAC;AAAEhC,IAAAA;AAAF,GAAD,EAAyE;AACxF,UAAM4B,IAAI,GAAG;AACTR,MAAAA,EAAE,EAAE,KAAKhB,YADA;AAETiB,MAAAA,EAAE,EAAE,KAAKC,UAAL,CAAgBtB,IAAI,CAACa,EAArB;AAFK,KAAb;;AAKA,UAAMgB,IAAc,mCACbD,IADa;AAEhBE,MAAAA,IAAI,EAAE;AAFU,OAGb9B,IAHa,CAApB;;AAKA,QAAI;AACA,YAAM,KAAKiB,OAAL,CAAac,GAAb,CAAiBF,IAAjB,CAAN;AACH,KAFD,CAEE,OAAOL,EAAP,EAAW;AACT,YAAM,IAAIb,cAAJ,CACFa,EAAE,CAACC,OAAH,IAAc,0CADZ,EAEFD,EAAE,CAACV,IAAH,IAAW,mBAFT,EAGF;AACIe,QAAAA;AADJ,OAHE,CAAN;AAOH;;AACD,WAAO7B,IAAP;AACH;;AAEkB,QAANiC,MAAM,CAACpB,EAAD,EAA4B;AAC3C,UAAMe,IAAI,GAAG;AACTR,MAAAA,EAAE,EAAE,KAAKhB,YADA;AAETiB,MAAAA,EAAE,EAAE,KAAKC,UAAL,CAAgBT,EAAhB;AAFK,KAAb;;AAKA,QAAI;AACA,YAAM,KAAKI,OAAL,CAAagB,MAAb,CAAoBL,IAApB,CAAN;AACH,KAFD,CAEE,OAAOJ,EAAP,EAAW;AACT,YAAM,IAAIb,cAAJ,CACFa,EAAE,CAACC,OAAH,IAAc,0CADZ,EAEFD,EAAE,CAACV,IAAH,IAAW,mBAFT,EAGF;AACID,QAAAA,EADJ;AAEIe,QAAAA;AAFJ,OAHE,CAAN;AAQH;AACJ;;AAEuB,QAAXM,WAAW,CAAC;AAAEC,IAAAA;AAAF,GAAD,EAA6B;AACjD,UAAMC,UAAU,GAAG,sBAAYD,KAAZ,EAAmB,EAAnB,CAAnB;;AAEA,SAAK,MAAME,SAAX,IAAwBD,UAAxB,EAAoC;AAChC,YAAME,OAAO,GAAG,EAAhB;;AACA,WAAK,MAAMtC,IAAX,IAAmBqC,SAAnB,EAA8B;AAC1B,cAAMT,IAAI,GAAG;AACTR,UAAAA,EAAE,EAAE,KAAKhB,YADA;AAETiB,UAAAA,EAAE,EAAE,KAAKC,UAAL,CAAgBtB,IAAI,CAACa,EAArB;AAFK,SAAb;AAIAyB,QAAAA,OAAO,CAACC,IAAR,CACI,KAAKtB,OAAL,CAAauB,QAAb,iCACOZ,IADP;AAEIE,UAAAA,IAAI,EAAE;AAFV,WAGO9B,IAHP,EADJ;AAOH;;AACD,UAAI;AACA,cAAM,KAAKgB,MAAL,CAAYyB,UAAZ,CAAuBH,OAAvB,CAAN;AACH,OAFD,CAEE,OAAOd,EAAP,EAAW;AACT,cAAM,IAAIb,cAAJ,CACFa,EAAE,CAACC,OAAH,IAAc,yCADZ,EAEFD,EAAE,CAACV,IAAH,IAAW,0BAFT,EAGF;AACIqB,UAAAA,KAAK,EAAEE,SADX;AAEIK,UAAAA,KAAK,EAAEJ;AAFX,SAHE,CAAN;AAQH;AACJ;;AACD,WAAOH,KAAP;AACH;;AAEgB,QAAJQ,IAAI,CACbhB,MADa,EAEyC;AACtD,UAAM;AAAEiB,MAAAA,KAAF;AAASC,MAAAA,KAAT;AAAgBC,MAAAA,KAAhB;AAAuBC,MAAAA;AAAvB,QAAgCpB,MAAtC;AAEA,UAAMqB,OAAO,GAAG,KAAKC,qBAAL,CAA2B;AACvCL,MAAAA;AADuC,KAA3B,CAAhB;AAGA,UAAMM,cAAc,GAAG;AACnBC,MAAAA,MAAM,EAAE,KAAKlC,OADM;AAEnBb,MAAAA,YAAY,EAAE,KAAKA,YAFA;AAGnB4C,MAAAA;AAHmB,KAAvB;AAKA,QAAIN,KAAiB,GAAG,EAAxB;;AACA,QAAI;AACAA,MAAAA,KAAK,GAAG,MAAM,qBAASQ,cAAT,CAAd;AACH,KAFD,CAEE,OAAO1B,EAAP,EAAW;AACT,YAAM,IAAIb,cAAJ,CACFa,EAAE,CAACC,OAAH,IAAc,gCADZ,EAEFD,EAAE,CAACV,IAAH,IAAW,iBAFT,EAGF;AACI8B,QAAAA,KADJ;AAEIC,QAAAA,KAFJ;AAGIC,QAAAA,KAHJ;AAIIC,QAAAA,IAJJ;AAKIK,QAAAA,WAAW,EAAE;AACTJ,UAAAA,OADS;AAET5C,UAAAA,YAAY,EAAE8C,cAAc,CAAC9C,YAFpB;AAGT+C,UAAAA,MAAM,EAAED,cAAc,CAACC,MAAf,CAAsBE,IAHrB;AAITnC,UAAAA,KAAK,EAAEgC,cAAc,CAACC,MAAf,CAAsBjC,KAAtB,CAA4BmC;AAJ1B;AALjB,OAHE,CAAN;AAgBH;;AAED,UAAMC,MAAM,GAAG,KAAKpD,OAAL,CAAaqD,OAAb,CAAqBC,MAArB,CACXC,iDAAwBC,IADb,CAAf;AAGA;AACR;AACA;AACA;;AACQ,UAAMC,aAAa,GAAG,yBAAY;AAC9BjB,MAAAA,KAD8B;AAE9BE,MAAAA,KAF8B;AAG9B1C,MAAAA,OAAO,EAAE,KAAKA,OAHgB;AAI9BoD,MAAAA;AAJ8B,KAAZ,CAAtB;AAOA,UAAMM,UAAU,GAAGD,aAAa,CAACE,MAAjC;AACA;AACR;AACA;AACA;;AACQ,UAAMC,WAAW,GAAG,qBAAU;AAC1BpB,MAAAA,KAAK,EAAEiB,aADmB;AAE1BZ,MAAAA,IAF0B;AAG1BO,MAAAA;AAH0B,KAAV,CAApB;AAMA,UAAMS,KAAK,GAAG,0BAAajB,KAAb,KAAuB,CAArC;AACA,UAAMkB,YAAY,GAAGJ,UAAU,GAAGG,KAAK,GAAGlB,KAA1C;AACA,UAAMoB,GAAG,GAAGpB,KAAK,GAAGe,UAAU,GAAGG,KAAb,GAAqBlB,KAA7B,GAAqCqB,SAArC,GAAiDH,KAAK,GAAGlB,KAArE;AACA,UAAMV,KAAK,GAAG2B,WAAW,CAACK,KAAZ,CAAkBJ,KAAlB,EAAyBE,GAAzB,CAAd;AACA;AACR;AACA;AACA;;AACQ,UAAMG,MAAM,GAAGjC,KAAK,CAAC0B,MAAN,GAAe,CAAf,GAAmB,0BAAaE,KAAK,GAAGlB,KAArB,CAAnB,GAAiD,IAAhE;AAEA,UAAMwB,IAAI,GAAG;AACTL,MAAAA,YADS;AAETJ,MAAAA,UAAU,EAAEA,UAFH;AAGTQ,MAAAA;AAHS,KAAb;AAMA,WAAO,CAACjC,KAAD,EAAQkC,IAAR,CAAP;AACH;;AACgB,QAAJC,IAAI,CACb3C,MADa,EAEyC;AACtD,UAAM;AAAEiB,MAAAA;AAAF,QAAYjB,MAAlB;AAEA,UAAM4C,OAA0B,GAAG,EAAnC;;AACA,QAAI3B,KAAK,CAACpC,MAAV,EAAkB;AACd+D,MAAAA,OAAO,CAAChC,IAAR,CAAa;AACTiC,QAAAA,IAAI,EAAE,QADG;AAETC,QAAAA,EAAE,EAAE7B,KAAK,CAACpC;AAFD,OAAb;AAIA,aAAOoC,KAAK,CAACpC,MAAb;AACH;;AACD,QAAIoC,KAAK,CAACvC,MAAV,EAAkB;AACdkE,MAAAA,OAAO,CAAChC,IAAR,CAAa;AACTiC,QAAAA,IAAI,EAAE,QADG;AAETC,QAAAA,EAAE,EAAE7B,KAAK,CAACvC;AAFD,OAAb;AAIA,aAAOuC,KAAK,CAACvC,MAAb;AACH;;AAED,UAAM2C,OAAoC,GAAG;AACzCuB,MAAAA,OADyC;AAEzCG,MAAAA,OAAO,EAAE;AAFgC,KAA7C;AAKA,QAAIhC,KAAiB,GAAG,EAAxB;AAEA,UAAMQ,cAAc,GAAG;AACnBC,MAAAA,MAAM,EAAE,KAAKlC,OADM;AAEnBb,MAAAA,YAAY,EAAE,KAAKA,YAFA;AAGnB4C,MAAAA;AAHmB,KAAvB;;AAKA,QAAI;AACAN,MAAAA,KAAK,GAAG,MAAM,qBAASQ,cAAT,CAAd;AACH,KAFD,CAEE,OAAO1B,EAAP,EAAW;AACT,YAAM,IAAIb,cAAJ,CACFa,EAAE,CAACC,OAAH,IAAc,8BADZ,EAEFD,EAAE,CAACV,IAAH,IAAW,gBAFT,EAGF;AACI6D,QAAAA,KAAK,EAAEzB;AADX,OAHE,CAAN;AAOH;AACD;AACR;AACA;;;AACQ,UAAM0B,UAAU,GAAGlC,KAAK,CAACmC,MAAN,CAAa,CAACC,UAAD,EAAajD,IAAb,KAAsB;AAClD,WAAK,MAAMkD,GAAX,IAAkBlD,IAAI,CAACyC,IAAvB,EAA6B;AACzB,YAAI,CAACQ,UAAU,CAACC,GAAD,CAAf,EAAsB;AAClBD,UAAAA,UAAU,CAACC,GAAD,CAAV,GAAkB,EAAlB;AACH;;AACDD,QAAAA,UAAU,CAACC,GAAD,CAAV,CAAgBxC,IAAhB,CAAqBV,IAAI,CAAChB,EAA1B;AACH;;AACD,aAAOiE,UAAP;AACH,KARkB,EAQhB,EARgB,CAAnB;AAUA,UAAMR,IAAc,GAAGU,MAAM,CAACpD,IAAP,CAAYgD,UAAZ,CAAvB;AAEA,UAAMZ,YAAY,GAAG,KAArB;AACA,UAAMJ,UAAU,GAAGU,IAAI,CAACT,MAAxB;AAEA,UAAMQ,IAAI,GAAG;AACTL,MAAAA,YADS;AAETJ,MAAAA,UAFS;AAGTQ,MAAAA,MAAM,EAAE;AAHC,KAAb;AAMA,WAAO,CAACE,IAAD,EAAOD,IAAP,CAAP;AACH;AACD;AACJ;AACA;AACA;;;AACY/C,EAAAA,UAAU,CAACT,EAAD,EAAa;AAC3B,QAAI,CAACA,EAAD,IAAO,CAACA,EAAE,CAACoE,KAAH,CAAS,kBAAT,CAAZ,EAA0C;AACtC,YAAM,IAAItE,cAAJ,CAAgB,wCAAhB,EAA0D,qBAA1D,EAAiF;AACnFE,QAAAA;AADmF,OAAjF,CAAN;AAGH;;AACD,WAAOA,EAAP;AACH;;AAEOoC,EAAAA,qBAAqB,CAAC;AAAEL,IAAAA;AAAF,GAAD,EAAgE;AACzF,UAAMI,OAAoC,GAAG,EAA7C;;AACA,QAAIJ,KAAK,CAAC/B,EAAV,EAAc;AACVmC,MAAAA,OAAO,CAACyB,EAAR,GAAa7B,KAAK,CAAC/B,EAAnB;AACH;;AACD,WAAOmC,OAAP;AACH;;AAvU4E","sourcesContent":["import {\n File,\n FileManagerContext,\n FileManagerFilesStorageOperations,\n FileManagerFilesStorageOperationsCreateParams,\n FileManagerFilesStorageOperationsListParams,\n FileManagerFilesStorageOperationsListParamsWhere,\n FileManagerFilesStorageOperationsListResponse,\n FileManagerFilesStorageOperationsTagsParams,\n FileManagerFilesStorageOperationsTagsResponse,\n FileManagerFilesStorageOperationsUpdateParams\n} from \"@webiny/api-file-manager/types\";\nimport { Entity, Table } from \"dynamodb-toolbox\";\nimport WebinyError from \"@webiny/error\";\nimport defineTable from \"~/definitions/table\";\nimport defineFilesEntity from \"~/definitions/filesEntity\";\nimport lodashOmit from \"lodash.omit\";\nimport lodashChunk from \"lodash.chunk\";\nimport { queryOptions as DynamoDBToolboxQueryOptions } from \"dynamodb-toolbox/dist/classes/Table\";\nimport { queryAll } from \"@webiny/db-dynamodb/utils/query\";\nimport { FilterExpressions } from \"dynamodb-toolbox/dist/lib/expressionBuilder\";\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\";\n\ninterface FileItem extends File {\n PK: string;\n SK: string;\n TYPE: string;\n}\n\ninterface ConstructorParams {\n context: FileManagerContext;\n}\n\ninterface QueryAllOptionsParams {\n where: FileManagerFilesStorageOperationsListParamsWhere;\n}\n\n/**\n * This is required due to sometimes file data sent is from the DynamoDB and we want to remove the unnecessary stuff.\n */\nconst cleanStorageFile = (file: File & Record<string, any>): File => {\n return lodashOmit(file, [\"PK\", \"SK\", \"TYPE\", \"created\", \"modified\", \"entity\"]);\n};\n\nexport class FilesStorageOperations implements FileManagerFilesStorageOperations {\n private readonly _context: any;\n private readonly _table: Table;\n private readonly _entity: Entity<any>;\n\n private get context(): FileManagerContext {\n return this._context;\n }\n\n private get partitionKey(): string {\n const tenant = this.context.tenancy.getCurrentTenant();\n const locale = this.context.i18nContent.getLocale();\n if (!tenant) {\n throw new WebinyError(\"Tenant missing.\", \"TENANT_NOT_FOUND\");\n }\n if (!locale) {\n throw new Error(\"Locale missing.\");\n }\n return `T#${tenant.id}#L#${locale.code}#FM#F`;\n }\n\n public constructor({ context }: ConstructorParams) {\n this._context = context;\n this._table = defineTable({\n context\n });\n\n this._entity = defineFilesEntity({\n context,\n table: this._table\n });\n }\n\n public async get(id: string): Promise<File | null> {\n try {\n const file = await this._entity.get({\n PK: this.partitionKey,\n SK: this.getSortKey(id)\n });\n if (!file || !file.Item) {\n return null;\n }\n return cleanStorageFile(file.Item);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not fetch requested file.\",\n ex.code || \"GET_FILE_ERROR\",\n {\n id\n }\n );\n }\n }\n\n public async create(params: FileManagerFilesStorageOperationsCreateParams): Promise<File> {\n const { file } = params;\n\n const keys = {\n PK: this.partitionKey,\n SK: this.getSortKey(file.id)\n };\n const item: FileItem = {\n ...keys,\n TYPE: \"fm.file\",\n ...file\n };\n try {\n await this._entity.put(item);\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 item\n }\n );\n }\n\n return file;\n }\n\n public async update({ file }: FileManagerFilesStorageOperationsUpdateParams): Promise<File> {\n const keys = {\n PK: this.partitionKey,\n SK: this.getSortKey(file.id)\n };\n\n const item: FileItem = {\n ...keys,\n TYPE: \"fm.file\",\n ...file\n };\n try {\n await this._entity.put(item);\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 item\n }\n );\n }\n return file;\n }\n\n public async delete(id: string): Promise<void> {\n const keys = {\n PK: this.partitionKey,\n SK: this.getSortKey(id)\n };\n\n try {\n await this._entity.delete(keys);\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 id,\n keys\n }\n );\n }\n }\n\n public async createBatch({ files }): Promise<File[]> {\n const fileChunks = lodashChunk(files, 25);\n\n for (const fileChunk of fileChunks) {\n const batches = [];\n for (const file of fileChunk) {\n const keys = {\n PK: this.partitionKey,\n SK: this.getSortKey(file.id)\n };\n batches.push(\n this._entity.putBatch({\n ...keys,\n TYPE: \"fm.file\",\n ...file\n })\n );\n }\n try {\n await this._table.batchWrite(batches);\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 files: fileChunk,\n items: batches\n }\n );\n }\n }\n return files;\n }\n\n public async list(\n params: FileManagerFilesStorageOperationsListParams\n ): Promise<FileManagerFilesStorageOperationsListResponse> {\n const { where, limit, after, sort } = params;\n\n const options = this.createQueryAllOptions({\n where\n });\n const queryAllParams = {\n entity: this._entity,\n partitionKey: this.partitionKey,\n options\n };\n let items: FileItem[] = [];\n try {\n items = await queryAll(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not query for the files.\",\n ex.code || \"FILE_LIST_ERROR\",\n {\n where,\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 fields = this.context.plugins.byType<FileDynamoDbFieldPlugin>(\n FileDynamoDbFieldPlugin.type\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 filteredFiles = filterItems({\n items,\n where,\n context: this.context,\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 = decodeCursor(after) || 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 public async tags(\n params: FileManagerFilesStorageOperationsTagsParams\n ): Promise<FileManagerFilesStorageOperationsTagsResponse> {\n const { where } = params;\n\n const filters: FilterExpressions = [];\n if (where.locale) {\n filters.push({\n attr: \"locale\",\n eq: where.locale\n });\n delete where.locale;\n }\n if (where.tenant) {\n filters.push({\n attr: \"tenant\",\n eq: where.tenant\n });\n delete where.tenant;\n }\n\n const options: DynamoDBToolboxQueryOptions = {\n filters,\n reverse: false\n };\n\n let items: FileItem[] = [];\n\n const queryAllParams = {\n entity: this._entity,\n partitionKey: this.partitionKey,\n options\n };\n try {\n items = await queryAll(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Error in the DynamoDB query.\",\n ex.code || \"DYNAMODB_ERROR\",\n {\n query: queryAllParams\n }\n );\n }\n /**\n * Aggregate all the tags from all the items in the database.\n */\n const tagsObject = items.reduce((collection, item) => {\n for (const tag of item.tags) {\n if (!collection[tag]) {\n collection[tag] = [];\n }\n collection[tag].push(item.id);\n }\n return collection;\n }, {});\n\n const tags: string[] = Object.keys(tagsObject);\n\n const hasMoreItems = false;\n const totalCount = tags.length;\n\n const meta = {\n hasMoreItems,\n totalCount,\n cursor: null\n };\n\n return [tags, meta];\n }\n /**\n * Create the sort key for the file.\n * Actually those are just some checks.\n */\n private getSortKey(id: string) {\n if (!id || !id.match(/^([a-zA-Z0-9]+)$/)) {\n throw new WebinyError(\"Could not determine the file sort key.\", \"FILE_SORT_KEY_ERROR\", {\n id\n });\n }\n return id;\n }\n\n private createQueryAllOptions({ where }: QueryAllOptionsParams): DynamoDBToolboxQueryOptions {\n const options: DynamoDBToolboxQueryOptions = {};\n if (where.id) {\n options.eq = where.id;\n }\n return options;\n }\n}\n"],"file":"FilesStorageOperations.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/operations/files/FilesStorageOperations.ts"],"names":["cleanStorageFile","file","FilesStorageOperations","context","_context","partitionKey","tenant","tenancy","getCurrentTenant","locale","i18nContent","getLocale","WebinyError","Error","id","code","constructor","_table","_entity","table","get","PK","SK","getSortKey","Item","ex","message","create","params","keys","item","TYPE","put","update","delete","createBatch","files","fileChunks","fileChunk","batches","push","putBatch","batchWrite","items","list","where","limit","after","sort","options","createQueryAllOptions","queryAllParams","entity","queryParams","name","fields","plugins","byType","FileDynamoDbFieldPlugin","type","filteredFiles","totalCount","length","sortedFiles","start","hasMoreItems","end","undefined","slice","cursor","meta","tags","filters","attr","eq","reverse","query","tagsObject","reduce","collection","tag","Object","match"],"mappings":"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","sourcesContent":["import {\n File,\n FileManagerContext,\n FileManagerFilesStorageOperations,\n FileManagerFilesStorageOperationsCreateParams,\n FileManagerFilesStorageOperationsListParams,\n FileManagerFilesStorageOperationsListParamsWhere,\n FileManagerFilesStorageOperationsListResponse,\n FileManagerFilesStorageOperationsTagsParams,\n FileManagerFilesStorageOperationsTagsResponse,\n FileManagerFilesStorageOperationsUpdateParams\n} from \"@webiny/api-file-manager/types\";\nimport { Entity, Table } from \"dynamodb-toolbox\";\nimport WebinyError from \"@webiny/error\";\nimport defineTable from \"~/definitions/table\";\nimport defineFilesEntity from \"~/definitions/filesEntity\";\nimport lodashOmit from \"lodash.omit\";\nimport lodashChunk from \"lodash.chunk\";\nimport { queryOptions as DynamoDBToolboxQueryOptions } from \"dynamodb-toolbox/dist/classes/Table\";\nimport { queryAll } from \"@webiny/db-dynamodb/utils/query\";\nimport { FilterExpressions } from \"dynamodb-toolbox/dist/lib/expressionBuilder\";\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\";\n\ninterface FileItem extends File {\n PK: string;\n SK: string;\n TYPE: string;\n}\n\ninterface ConstructorParams {\n context: FileManagerContext;\n}\n\ninterface QueryAllOptionsParams {\n where: FileManagerFilesStorageOperationsListParamsWhere;\n}\n\n/**\n * This is required due to sometimes file data sent is from the DynamoDB and we want to remove the unnecessary stuff.\n */\nconst cleanStorageFile = (file: File & Record<string, any>): File => {\n return lodashOmit(file, [\"PK\", \"SK\", \"TYPE\", \"created\", \"modified\", \"entity\"]);\n};\n\nexport class FilesStorageOperations implements FileManagerFilesStorageOperations {\n private readonly _context: any;\n private readonly _table: Table;\n private readonly _entity: Entity<any>;\n\n private get context(): FileManagerContext {\n return this._context;\n }\n\n private get partitionKey(): string {\n const tenant = this.context.tenancy.getCurrentTenant();\n const locale = this.context.i18nContent.getLocale();\n if (!tenant) {\n throw new WebinyError(\"Tenant missing.\", \"TENANT_NOT_FOUND\");\n }\n if (!locale) {\n throw new Error(\"Locale missing.\");\n }\n return `T#${tenant.id}#L#${locale.code}#FM#F`;\n }\n\n public constructor({ context }: ConstructorParams) {\n this._context = context;\n this._table = defineTable({\n context\n });\n\n this._entity = defineFilesEntity({\n context,\n table: this._table\n });\n }\n\n public async get(id: string): Promise<File | null> {\n try {\n const file = await this._entity.get({\n PK: this.partitionKey,\n SK: this.getSortKey(id)\n });\n if (!file || !file.Item) {\n return null;\n }\n return cleanStorageFile(file.Item);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not fetch requested file.\",\n ex.code || \"GET_FILE_ERROR\",\n {\n id\n }\n );\n }\n }\n\n public async create(params: FileManagerFilesStorageOperationsCreateParams): Promise<File> {\n const { file } = params;\n\n const keys = {\n PK: this.partitionKey,\n SK: this.getSortKey(file.id)\n };\n const item: FileItem = {\n ...keys,\n TYPE: \"fm.file\",\n ...file\n };\n try {\n await this._entity.put(item);\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 item\n }\n );\n }\n\n return file;\n }\n\n public async update({ file }: FileManagerFilesStorageOperationsUpdateParams): Promise<File> {\n const keys = {\n PK: this.partitionKey,\n SK: this.getSortKey(file.id)\n };\n\n const item: FileItem = {\n ...keys,\n TYPE: \"fm.file\",\n ...file\n };\n try {\n await this._entity.put(item);\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 item\n }\n );\n }\n return file;\n }\n\n public async delete(id: string): Promise<void> {\n const keys = {\n PK: this.partitionKey,\n SK: this.getSortKey(id)\n };\n\n try {\n await this._entity.delete(keys);\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 id,\n keys\n }\n );\n }\n }\n\n public async createBatch({ files }): Promise<File[]> {\n const fileChunks = lodashChunk(files, 25);\n\n for (const fileChunk of fileChunks) {\n const batches = [];\n for (const file of fileChunk) {\n const keys = {\n PK: this.partitionKey,\n SK: this.getSortKey(file.id)\n };\n batches.push(\n this._entity.putBatch({\n ...keys,\n TYPE: \"fm.file\",\n ...file\n })\n );\n }\n try {\n await this._table.batchWrite(batches);\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 files: fileChunk,\n items: batches\n }\n );\n }\n }\n return files;\n }\n\n public async list(\n params: FileManagerFilesStorageOperationsListParams\n ): Promise<FileManagerFilesStorageOperationsListResponse> {\n const { where, limit, after, sort } = params;\n\n const options = this.createQueryAllOptions({\n where\n });\n const queryAllParams = {\n entity: this._entity,\n partitionKey: this.partitionKey,\n options\n };\n let items: FileItem[] = [];\n try {\n items = await queryAll(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not query for the files.\",\n ex.code || \"FILE_LIST_ERROR\",\n {\n where,\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 fields = this.context.plugins.byType<FileDynamoDbFieldPlugin>(\n FileDynamoDbFieldPlugin.type\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 filteredFiles = filterItems({\n plugins: this.context.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 = decodeCursor(after) || 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 public async tags(\n params: FileManagerFilesStorageOperationsTagsParams\n ): Promise<FileManagerFilesStorageOperationsTagsResponse> {\n const { where } = params;\n\n const filters: FilterExpressions = [];\n if (where.locale) {\n filters.push({\n attr: \"locale\",\n eq: where.locale\n });\n delete where.locale;\n }\n if (where.tenant) {\n filters.push({\n attr: \"tenant\",\n eq: where.tenant\n });\n delete where.tenant;\n }\n\n const options: DynamoDBToolboxQueryOptions = {\n filters,\n reverse: false\n };\n\n let items: FileItem[] = [];\n\n const queryAllParams = {\n entity: this._entity,\n partitionKey: this.partitionKey,\n options\n };\n try {\n items = await queryAll(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Error in the DynamoDB query.\",\n ex.code || \"DYNAMODB_ERROR\",\n {\n query: queryAllParams\n }\n );\n }\n /**\n * Aggregate all the tags from all the items in the database.\n */\n const tagsObject = items.reduce((collection, item) => {\n for (const tag of item.tags) {\n if (!collection[tag]) {\n collection[tag] = [];\n }\n collection[tag].push(item.id);\n }\n return collection;\n }, {});\n\n const tags: string[] = Object.keys(tagsObject);\n\n const hasMoreItems = false;\n const totalCount = tags.length;\n\n const meta = {\n hasMoreItems,\n totalCount,\n cursor: null\n };\n\n return [tags, meta];\n }\n /**\n * Create the sort key for the file.\n * Actually those are just some checks.\n */\n private getSortKey(id: string) {\n if (!id || !id.match(/^([a-zA-Z0-9]+)$/)) {\n throw new WebinyError(\"Could not determine the file sort key.\", \"FILE_SORT_KEY_ERROR\", {\n id\n });\n }\n return id;\n }\n\n private createQueryAllOptions({ where }: QueryAllOptionsParams): DynamoDBToolboxQueryOptions {\n const options: DynamoDBToolboxQueryOptions = {};\n if (where.id) {\n options.eq = where.id;\n }\n return options;\n }\n}\n"],"file":"FilesStorageOperations.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-file-manager-ddb",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.16.0-beta.2",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"@webiny/api-file-manager",
|
|
@@ -22,10 +22,10 @@
|
|
|
22
22
|
"license": "MIT",
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@babel/runtime": "7.15.3",
|
|
25
|
-
"@webiny/api-file-manager": "5.
|
|
26
|
-
"@webiny/db-dynamodb": "5.
|
|
27
|
-
"@webiny/error": "5.
|
|
28
|
-
"@webiny/project-utils": "5.
|
|
25
|
+
"@webiny/api-file-manager": "5.16.0-beta.2",
|
|
26
|
+
"@webiny/db-dynamodb": "5.16.0-beta.2",
|
|
27
|
+
"@webiny/error": "5.16.0-beta.2",
|
|
28
|
+
"@webiny/project-utils": "5.16.0-beta.2",
|
|
29
29
|
"aws-sdk": "2.968.0",
|
|
30
30
|
"dynamodb-toolbox": "0.3.4",
|
|
31
31
|
"lodash.chunk": "4.2.0",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"@babel/plugin-transform-runtime": "^7.5.5",
|
|
39
39
|
"@babel/preset-env": "^7.5.5",
|
|
40
40
|
"@babel/preset-typescript": "^7.0.0",
|
|
41
|
-
"@webiny/cli": "^5.
|
|
41
|
+
"@webiny/cli": "^5.16.0-beta.2",
|
|
42
42
|
"jest": "^26.6.3",
|
|
43
43
|
"jest-dynalite": "^3.2.0",
|
|
44
44
|
"jsonpack": "^1.1.5",
|
|
@@ -65,5 +65,5 @@
|
|
|
65
65
|
]
|
|
66
66
|
}
|
|
67
67
|
},
|
|
68
|
-
"gitHead": "
|
|
68
|
+
"gitHead": "f8ca0ffc49737da9d2f797382c4df9c701d6f037"
|
|
69
69
|
}
|