@prismicio/custom-types-client
Version:
JavaScript client to interact with the Prismic Custom Types API
1 lines • 6.81 kB
Source Map (JSON)
{"version":3,"file":"bulkUpdate.cjs","sources":["../../src/bulkUpdate.ts"],"sourcesContent":["import * as prismic from \"@prismicio/client\";\n\n/**\n * The type of a bulk operation.\n */\nexport const BulkUpdateOperationType = {\n\tCustomTypeInsert: \"CUSTOM_TYPE_INSERT\",\n\tCustomTypeUpdate: \"CUSTOM_TYPE_UPDATE\",\n\tCustomTypeDelete: \"CUSTOM_TYPE_DELETE\",\n\tSliceInsert: \"SLICE_INSERT\",\n\tSliceUpdate: \"SLICE_UPDATE\",\n\tSliceDelete: \"SLICE_DELETE\",\n} as const;\nexport type BulkUpdateOperationType =\n\t(typeof BulkUpdateOperationType)[keyof typeof BulkUpdateOperationType];\n\n/**\n * An object describing a bulk update operation.\n */\nexport type BulkUpdateOperation =\n\t| {\n\t\t\ttype: typeof BulkUpdateOperationType.CustomTypeInsert;\n\t\t\tid: string;\n\t\t\tpayload: prismic.CustomTypeModel;\n\t }\n\t| {\n\t\t\ttype: typeof BulkUpdateOperationType.CustomTypeUpdate;\n\t\t\tid: string;\n\t\t\tpayload: prismic.CustomTypeModel;\n\t }\n\t| {\n\t\t\ttype: typeof BulkUpdateOperationType.CustomTypeDelete;\n\t\t\tid: string;\n\t\t\tpayload: Pick<prismic.CustomTypeModel, \"id\">;\n\t }\n\t| {\n\t\t\ttype: typeof BulkUpdateOperationType.SliceInsert;\n\t\t\tid: string;\n\t\t\tpayload: prismic.SharedSliceModel;\n\t }\n\t| {\n\t\t\ttype: typeof BulkUpdateOperationType.SliceUpdate;\n\t\t\tid: string;\n\t\t\tpayload: prismic.SharedSliceModel;\n\t }\n\t| {\n\t\t\ttype: typeof BulkUpdateOperationType.SliceDelete;\n\t\t\tid: string;\n\t\t\tpayload: Pick<prismic.SharedSliceModel, \"id\">;\n\t };\n\nexport type BulkUpdateTransactionModels = {\n\tcustomTypes?: prismic.CustomTypeModel[];\n\tslices?: prismic.SharedSliceModel[];\n};\n\nconst processDiff = <\n\tTModel extends prismic.CustomTypeModel | prismic.SharedSliceModel,\n>(\n\tbefore: TModel[],\n\tafter: TModel[],\n\tcallbacks: {\n\t\tonInsert: (model: TModel) => void;\n\t\tonUpdate: (model: TModel) => void;\n\t\tonDelete: (model: TModel) => void;\n\t},\n): void => {\n\tfor (const afterModel of after) {\n\t\tconst beforeModel = before.find((model) => model.id === afterModel.id);\n\n\t\tif (beforeModel) {\n\t\t\tif (JSON.stringify(beforeModel) !== JSON.stringify(afterModel)) {\n\t\t\t\tcallbacks.onUpdate(afterModel);\n\t\t\t}\n\n\t\t\tbefore = before.filter((model) => model !== beforeModel);\n\t\t} else {\n\t\t\tcallbacks.onInsert(afterModel);\n\t\t}\n\t}\n\n\tfor (const beforeModel of before) {\n\t\tcallbacks.onDelete(beforeModel);\n\t}\n};\n\n/**\n * Create a bulk update transaction instance to pass to a Custom Types Client\n * `bulkUpdate()` method.\n */\nexport const createBulkUpdateTransaction = (\n\t...args: ConstructorParameters<typeof BulkUpdateTransaction>\n): BulkUpdateTransaction => new BulkUpdateTransaction(...args);\n\nexport class BulkUpdateTransaction {\n\toperations: BulkUpdateOperation[];\n\n\tconstructor(\n\t\tinitialOperations: BulkUpdateTransaction | BulkUpdateOperation[] = [],\n\t) {\n\t\tthis.operations =\n\t\t\tinitialOperations instanceof BulkUpdateTransaction\n\t\t\t\t? initialOperations.operations\n\t\t\t\t: initialOperations;\n\t}\n\n\tfromDiff(\n\t\tbefore: BulkUpdateTransactionModels,\n\t\tafter: BulkUpdateTransactionModels,\n\t): void {\n\t\tprocessDiff(before.customTypes ?? [], after.customTypes ?? [], {\n\t\t\tonInsert: (model) => this.insertCustomType(model),\n\t\t\tonUpdate: (model) => this.updateCustomType(model),\n\t\t\tonDelete: (model) => this.deleteCustomType(model),\n\t\t});\n\t\tprocessDiff(before.slices ?? [], after.slices ?? [], {\n\t\t\tonInsert: (model) => this.insertSlice(model),\n\t\t\tonUpdate: (model) => this.updateSlice(model),\n\t\t\tonDelete: (model) => this.deleteSlice(model),\n\t\t});\n\t}\n\n\tinsertCustomType(customType: prismic.CustomTypeModel): void {\n\t\tthis.operations.push({\n\t\t\ttype: BulkUpdateOperationType.CustomTypeInsert,\n\t\t\tid: customType.id,\n\t\t\tpayload: customType,\n\t\t});\n\t}\n\n\tupdateCustomType(customType: prismic.CustomTypeModel): void {\n\t\tthis.operations.push({\n\t\t\ttype: BulkUpdateOperationType.CustomTypeUpdate,\n\t\t\tid: customType.id,\n\t\t\tpayload: customType,\n\t\t});\n\t}\n\n\tdeleteCustomType(customType: prismic.CustomTypeModel): void {\n\t\tthis.operations.push({\n\t\t\ttype: BulkUpdateOperationType.CustomTypeDelete,\n\t\t\tid: customType.id,\n\t\t\tpayload: { id: customType.id },\n\t\t});\n\t}\n\n\tinsertSlice(slice: prismic.SharedSliceModel): void {\n\t\tthis.operations.push({\n\t\t\ttype: BulkUpdateOperationType.SliceInsert,\n\t\t\tid: slice.id,\n\t\t\tpayload: slice,\n\t\t});\n\t}\n\n\tupdateSlice(slice: prismic.SharedSliceModel): void {\n\t\tthis.operations.push({\n\t\t\ttype: BulkUpdateOperationType.SliceUpdate,\n\t\t\tid: slice.id,\n\t\t\tpayload: slice,\n\t\t});\n\t}\n\n\tdeleteSlice(slice: prismic.SharedSliceModel): void {\n\t\tthis.operations.push({\n\t\t\ttype: BulkUpdateOperationType.SliceDelete,\n\t\t\tid: slice.id,\n\t\t\tpayload: { id: slice.id },\n\t\t});\n\t}\n}\n"],"names":[],"mappings":";;;;;;;;AAKO,MAAM,0BAA0B;AAAA,EACtC,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;;AA6Cd,MAAM,cAAc,CAGnB,QACA,OACA,cAKS;AACT,aAAW,cAAc,OAAO;AACzB,UAAA,cAAc,OAAO,KAAK,CAAC,UAAU,MAAM,OAAO,WAAW,EAAE;AAErE,QAAI,aAAa;AAChB,UAAI,KAAK,UAAU,WAAW,MAAM,KAAK,UAAU,UAAU,GAAG;AAC/D,kBAAU,SAAS,UAAU;AAAA,MAC9B;AAEA,eAAS,OAAO,OAAO,CAAC,UAAU,UAAU,WAAW;AAAA,IAAA,OACjD;AACN,gBAAU,SAAS,UAAU;AAAA,IAC9B;AAAA,EACD;AAEA,aAAW,eAAe,QAAQ;AACjC,cAAU,SAAS,WAAW;AAAA,EAC/B;AACD;AAMO,MAAM,8BAA8B,IACvC,SACwB,IAAI,sBAAsB,GAAG,IAAI;MAEhD,sBAAqB;AAAA,EAGjC,YACC,oBAAmE,IAAE;AAHtE;AAKC,SAAK,aACJ,6BAA6B,wBAC1B,kBAAkB,aAClB;AAAA,EACL;AAAA,EAEA,SACC,QACA,OAAkC;AAElC,gBAAY,OAAO,eAAe,IAAI,MAAM,eAAe,IAAI;AAAA,MAC9D,UAAU,CAAC,UAAU,KAAK,iBAAiB,KAAK;AAAA,MAChD,UAAU,CAAC,UAAU,KAAK,iBAAiB,KAAK;AAAA,MAChD,UAAU,CAAC,UAAU,KAAK,iBAAiB,KAAK;AAAA,IAAA,CAChD;AACD,gBAAY,OAAO,UAAU,IAAI,MAAM,UAAU,IAAI;AAAA,MACpD,UAAU,CAAC,UAAU,KAAK,YAAY,KAAK;AAAA,MAC3C,UAAU,CAAC,UAAU,KAAK,YAAY,KAAK;AAAA,MAC3C,UAAU,CAAC,UAAU,KAAK,YAAY,KAAK;AAAA,IAAA,CAC3C;AAAA,EACF;AAAA,EAEA,iBAAiB,YAAmC;AACnD,SAAK,WAAW,KAAK;AAAA,MACpB,MAAM,wBAAwB;AAAA,MAC9B,IAAI,WAAW;AAAA,MACf,SAAS;AAAA,IAAA,CACT;AAAA,EACF;AAAA,EAEA,iBAAiB,YAAmC;AACnD,SAAK,WAAW,KAAK;AAAA,MACpB,MAAM,wBAAwB;AAAA,MAC9B,IAAI,WAAW;AAAA,MACf,SAAS;AAAA,IAAA,CACT;AAAA,EACF;AAAA,EAEA,iBAAiB,YAAmC;AACnD,SAAK,WAAW,KAAK;AAAA,MACpB,MAAM,wBAAwB;AAAA,MAC9B,IAAI,WAAW;AAAA,MACf,SAAS,EAAE,IAAI,WAAW,GAAI;AAAA,IAAA,CAC9B;AAAA,EACF;AAAA,EAEA,YAAY,OAA+B;AAC1C,SAAK,WAAW,KAAK;AAAA,MACpB,MAAM,wBAAwB;AAAA,MAC9B,IAAI,MAAM;AAAA,MACV,SAAS;AAAA,IAAA,CACT;AAAA,EACF;AAAA,EAEA,YAAY,OAA+B;AAC1C,SAAK,WAAW,KAAK;AAAA,MACpB,MAAM,wBAAwB;AAAA,MAC9B,IAAI,MAAM;AAAA,MACV,SAAS;AAAA,IAAA,CACT;AAAA,EACF;AAAA,EAEA,YAAY,OAA+B;AAC1C,SAAK,WAAW,KAAK;AAAA,MACpB,MAAM,wBAAwB;AAAA,MAC9B,IAAI,MAAM;AAAA,MACV,SAAS,EAAE,IAAI,MAAM,GAAI;AAAA,IAAA,CACzB;AAAA,EACF;AACA;;;;"}