@slicemachine/manager 0.24.14-alpha.jp-update-cr-links.7 → 0.24.14-alpha.jp-update-cr-links.8

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.
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  const _commonjsHelpers = require("../../../../../../_virtual/_commonjsHelpers.cjs");
3
3
  const client = require("../../../../../../_virtual/client2.cjs");
4
- const index = require("../../../../../../_virtual/index3.cjs");
4
+ const index = require("../../../../../../_virtual/index2.cjs");
5
5
  const experimentCore_esm = require("../../../../../../_virtual/experiment-core.esm.cjs");
6
6
  require("../assignment/assignment.cjs");
7
7
  require("../assignment/assignment-filter.cjs");
@@ -1,6 +1,6 @@
1
1
  import { commonjsGlobal } from "../../../../../../_virtual/_commonjsHelpers.js";
2
2
  import { __exports as client } from "../../../../../../_virtual/client2.js";
3
- import require$$0 from "../../../../../../_virtual/index3.js";
3
+ import require$$0 from "../../../../../../_virtual/index2.js";
4
4
  import require$$1 from "../../../../../../_virtual/experiment-core.esm.js";
5
5
  import "../assignment/assignment.js";
6
6
  import "../assignment/assignment-filter.js";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  const _commonjsHelpers = require("../../_virtual/_commonjsHelpers.cjs");
3
- const index = require("../../_virtual/index2.cjs");
3
+ const index = require("../../_virtual/index3.cjs");
4
4
  const require$$0 = require("child_process");
5
5
  const parse$1 = require("./lib/parse.cjs");
6
6
  const enoent$1 = require("./lib/enoent.cjs");
@@ -1,5 +1,5 @@
1
1
  import { getDefaultExportFromCjs } from "../../_virtual/_commonjsHelpers.js";
2
- import { __module as crossSpawn$1 } from "../../_virtual/index2.js";
2
+ import { __module as crossSpawn$1 } from "../../_virtual/index3.js";
3
3
  import require$$0 from "child_process";
4
4
  import { p as parse_1 } from "./lib/parse.js";
5
5
  import { e as enoent$1 } from "./lib/enoent.js";
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- var crossSpawn = { exports: {} };
4
- exports.__module = crossSpawn;
2
+ const _commonjsHelpers = require("./_commonjsHelpers.cjs");
3
+ const index = require('./../_node_modules/@amplitude/analytics-node/lib/esm/index.cjs');
4
+ const require$$0 = /* @__PURE__ */ _commonjsHelpers.getAugmentedNamespace(index);
5
+ module.exports = require$$0;
5
6
  //# sourceMappingURL=index2.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index2.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
1
+ {"version":3,"file":"index2.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
@@ -1,5 +1,7 @@
1
- var crossSpawn = { exports: {} };
1
+ import { getAugmentedNamespace } from "./_commonjsHelpers.js";
2
+ import * as index from './../_node_modules/@amplitude/analytics-node/lib/esm/index.js';
3
+ const require$$0 = /* @__PURE__ */ getAugmentedNamespace(index);
2
4
  export {
3
- crossSpawn as __module
5
+ require$$0 as default
4
6
  };
5
7
  //# sourceMappingURL=index2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
- const _commonjsHelpers = require("./_commonjsHelpers.cjs");
3
- const index = require('./../_node_modules/@amplitude/analytics-node/lib/esm/index.cjs');
4
- const require$$0 = /* @__PURE__ */ _commonjsHelpers.getAugmentedNamespace(index);
5
- module.exports = require$$0;
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ var crossSpawn = { exports: {} };
4
+ exports.__module = crossSpawn;
6
5
  //# sourceMappingURL=index3.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index3.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
1
+ {"version":3,"file":"index3.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,7 +1,5 @@
1
- import { getAugmentedNamespace } from "./_commonjsHelpers.js";
2
- import * as index from './../_node_modules/@amplitude/analytics-node/lib/esm/index.js';
3
- const require$$0 = /* @__PURE__ */ getAugmentedNamespace(index);
1
+ var crossSpawn = { exports: {} };
4
2
  export {
5
- require$$0 as default
3
+ crossSpawn as __module
6
4
  };
7
5
  //# sourceMappingURL=index3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
1
+ {"version":3,"file":"index3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -181,7 +181,6 @@ class CustomTypesManager extends BaseManager.BaseManager {
181
181
  if (previousPath.join(".") !== newPath.join(".")) {
182
182
  previousPath = [model.id, ...previousPath];
183
183
  newPath = [model.id, ...newPath];
184
- const crUpdatesPromises = [];
185
184
  const crUpdates = [];
186
185
  const customTypes = await this.readAllCustomTypes();
187
186
  for (const customType of customTypes.models) {
@@ -232,10 +231,10 @@ class CustomTypesManager extends BaseManager.BaseManager {
232
231
  }
233
232
  }
234
233
  }
235
- const crUpdatesResults = await Promise.all(crUpdatesPromises);
236
- if (crUpdatesResults.some((result) => result.errors.length > 0)) {
234
+ const crUpdatesResult = await Promise.all(crUpdates);
235
+ if (crUpdatesResult.some((result) => result.errors.length > 0)) {
237
236
  return {
238
- errors: crUpdatesResults.flatMap((result) => result.errors)
237
+ errors: crUpdatesResult.flatMap((result) => result.errors)
239
238
  };
240
239
  }
241
240
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CustomTypesManager.cjs","sources":["../../../../src/managers/customTypes/CustomTypesManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport * as prismicCustomTypesClient from \"@prismicio/custom-types-client\";\nimport {\n\tCustomType,\n\tGroup,\n\tNestableWidget,\n\tNestedGroup,\n\tSharedSlice,\n\tUID,\n\ttraverseCustomType,\n\ttraverseSharedSlice,\n} from \"@prismicio/types-internal/lib/customtypes\";\nimport {\n\tCallHookReturnType,\n\tCustomTypeCreateHook,\n\tCustomTypeCreateHookData,\n\tCustomTypeReadHookData,\n\tCustomTypeRenameHook,\n\tCustomTypeRenameHookData,\n\tCustomTypeUpdateHook,\n\tCustomTypeUpdateHookData,\n\tHookError,\n} from \"@slicemachine/plugin-kit\";\nimport { z } from \"zod\";\n\nimport { DecodeError } from \"../../lib/DecodeError\";\nimport { assertPluginsInitialized } from \"../../lib/assertPluginsInitialized\";\nimport { decodeHookResult } from \"../../lib/decodeHookResult\";\nimport fetch from \"../../lib/fetch\";\n\nimport { OnlyHookErrors } from \"../../types\";\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\nimport { SLICE_MACHINE_USER_AGENT } from \"../../constants/SLICE_MACHINE_USER_AGENT\";\nimport { UnauthorizedError } from \"../../errors\";\n\nimport { BaseManager } from \"../BaseManager\";\nimport { CustomTypeFormat } from \"./types\";\n\ntype SliceMachineManagerReadCustomTypeLibraryReturnType = {\n\tids: string[];\n\terrors: (DecodeError | HookError)[];\n};\n\ntype CustomTypesManagerReadAllCustomTypesArgs = {\n\tformat: CustomTypeFormat;\n};\n\ntype SliceMachineManagerReadAllCustomTypeReturnType = {\n\tmodels: { model: CustomType }[];\n\terrors: (DecodeError | HookError)[];\n};\n\ntype SliceMachineManagerReadCustomTypeReturnType = {\n\tmodel: CustomType | undefined;\n\terrors: (DecodeError | HookError)[];\n};\n\ntype SliceMachineManagerPushCustomTypeArgs = {\n\tid: string;\n\tuserAgent?: string;\n};\n\ntype SliceMachineManagerReadCustomTypeMocksConfigArgs = {\n\tcustomTypeID: string;\n};\n\ntype SliceMachineManagerReadCustomTypeMocksConfigArgsReturnType = {\n\t// TODO\n\tmocksConfig?: Record<string, unknown>;\n\terrors: HookError[];\n};\n\ntype SliceMachineManagerUpdateCustomTypeMocksConfigArgs = {\n\tcustomTypeID: string;\n\t// TODO\n\tmocksConfig: Record<string, unknown>;\n};\n\ntype SliceMachineManagerUpdateCustomTypeMocksConfigArgsReturnType = {\n\terrors: HookError[];\n};\n\ntype CustomTypesMachineManagerDeleteCustomTypeArgs = {\n\tid: string;\n};\n\ntype CustomTypesMachineManagerDeleteCustomTypeReturnType = {\n\terrors: (DecodeError | HookError)[];\n};\n\ntype CustomTypeFieldIdChangedMeta = NonNullable<\n\tNonNullable<CustomTypeUpdateHookData[\"updateMeta\"]>[\"fieldIdChanged\"]\n>;\n\ntype CrCustomType =\n\t| string\n\t| {\n\t\t\tid: string;\n\t\t\tfields?: readonly (string | CrCustomTypeNestedCr)[];\n\t };\ntype CrCustomTypeNestedCr =\n\t| string\n\t| {\n\t\t\tid: string;\n\t\t\tcustomtypes: readonly (string | CrCustomTypeFieldLeaf)[];\n\t };\ntype CrCustomTypeFieldLeaf =\n\t| string\n\t| {\n\t\t\tid: string;\n\t\t\tfields?: readonly string[];\n\t };\n\nexport class CustomTypesManager extends BaseManager {\n\tasync readCustomTypeLibrary(): Promise<SliceMachineManagerReadCustomTypeLibraryReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type-library:read\",\n\t\t\tundefined,\n\t\t);\n\t\tconst { data, errors } = decodeHookResult(\n\t\t\tt.type({\n\t\t\t\tids: t.array(t.string),\n\t\t\t}),\n\t\t\thookResult,\n\t\t);\n\n\t\treturn {\n\t\t\tids: data[0]?.ids || [],\n\t\t\terrors,\n\t\t};\n\t}\n\n\tasync readAllCustomTypes(\n\t\targs?: CustomTypesManagerReadAllCustomTypesArgs,\n\t): Promise<SliceMachineManagerReadAllCustomTypeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst res: SliceMachineManagerReadAllCustomTypeReturnType = {\n\t\t\tmodels: [],\n\t\t\terrors: [],\n\t\t};\n\n\t\tconst { ids, errors } = await this.readCustomTypeLibrary();\n\t\tres.errors = [...res.errors, ...errors];\n\n\t\tif (ids) {\n\t\t\tfor (const id of ids) {\n\t\t\t\tconst { model, errors } = await this.readCustomType({ id });\n\t\t\t\tres.errors = [...res.errors, ...errors];\n\n\t\t\t\tif (model && (!args || args.format === model.format)) {\n\t\t\t\t\tres.models.push({ model });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tasync createCustomType(\n\t\targs: CustomTypeCreateHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeCreateHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:create\",\n\t\t\targs,\n\t\t);\n\n\t\treturn {\n\t\t\terrors: hookResult.errors,\n\t\t};\n\t}\n\n\tasync readCustomType(\n\t\targs: CustomTypeReadHookData,\n\t): Promise<SliceMachineManagerReadCustomTypeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:read\",\n\t\t\targs,\n\t\t);\n\t\tconst { data, errors } = decodeHookResult(\n\t\t\tt.type({\n\t\t\t\tmodel: CustomType,\n\t\t\t}),\n\t\t\thookResult,\n\t\t);\n\n\t\treturn {\n\t\t\tmodel: data[0]?.model,\n\t\t\terrors,\n\t\t};\n\t}\n\n\tprivate updateCRCustomType<T extends CrCustomType | CrCustomTypeFieldLeaf>(\n\t\targs: {\n\t\t\tcustomType: T;\n\t\t} & CustomTypeFieldIdChangedMeta,\n\t): {\n\t\tcustomType: T;\n\t\tchanged: boolean;\n\t} {\n\t\tconst { previousPath, newPath } = args;\n\n\t\tlet changed = false;\n\n\t\tconst customType = shallowClone(args.customType);\n\n\t\tconst [previousId] = previousPath;\n\t\tconst [newId] = newPath;\n\n\t\tif (!previousId || !newId || typeof customType === \"string\") {\n\t\t\treturn { changed, customType };\n\t\t}\n\n\t\tif (customType.fields) {\n\t\t\tconst newFields = customType.fields.map((fieldArg) => {\n\t\t\t\tconst field = shallowClone(fieldArg);\n\n\t\t\t\tconst previousId = previousPath[1];\n\t\t\t\tconst newId = newPath[1];\n\n\t\t\t\tif (!previousId || !newId) {\n\t\t\t\t\treturn field;\n\t\t\t\t}\n\n\t\t\t\tif (typeof field === \"string\") {\n\t\t\t\t\tif (field === previousId && field !== newId) {\n\t\t\t\t\t\t// We have reached a field id that matches the id that was renamed,\n\t\t\t\t\t\t// so we update it new one. The field is a string, so return the new\n\t\t\t\t\t\t// id.\n\t\t\t\t\t\tchanged = true;\n\n\t\t\t\t\t\treturn newId;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn field;\n\t\t\t\t}\n\n\t\t\t\tif (field.id === previousId && field.id !== newId) {\n\t\t\t\t\t// We have reached a field id that matches the id that was renamed,\n\t\t\t\t\t// so we update it new one.\n\t\t\t\t\t// Since field is not a string, we don't exit, as we might have\n\t\t\t\t\t// something to update further down in customtypes.\n\t\t\t\t\tchanged = true;\n\n\t\t\t\t\tfield.id = newId;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\t...field,\n\t\t\t\t\tcustomtypes: field.customtypes.map((customType) => {\n\t\t\t\t\t\tconst result = this.updateCRCustomType({\n\t\t\t\t\t\t\tcustomType,\n\t\t\t\t\t\t\tpreviousPath,\n\t\t\t\t\t\t\tnewPath,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tchanged ||= result.changed;\n\n\t\t\t\t\t\treturn result.customType;\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tchanged,\n\t\t\t\t// @ts-expect-error We know that at this level we are returning the\n\t\t\t\t// right properties, but TypeScript will not trust it because it might\n\t\t\t\t// also have customtypes. This is because the type is not fully\n\t\t\t\t// recursive, it just has two levels of depth.\n\t\t\t\tcustomType: { id: customType.id, fields: newFields },\n\t\t\t};\n\t\t}\n\n\t\treturn { changed, customType };\n\t}\n\n\t/**\n\t * Map over the custom types of a Content Relationship Link and update the API\n\t * IDs that were changed during the custom type update.\n\t */\n\tprivate updateCRCustomTypes(\n\t\targs: { customTypes: CrCustomType[] } & CustomTypeFieldIdChangedMeta,\n\t): { customTypes: CrCustomType[]; changed: boolean } {\n\t\tconst { customTypes, ...updateMeta } = args;\n\n\t\tlet changed = false;\n\n\t\tconst newCustomTypes = customTypes.map((customType) => {\n\t\t\tconst result = this.updateCRCustomType({ customType, ...updateMeta });\n\t\t\tchanged ||= result.changed;\n\n\t\t\treturn result.customType;\n\t\t});\n\n\t\treturn { customTypes: newCustomTypes, changed };\n\t}\n\n\t/**\n\t * Update the Content Relationship API IDs of a single field. The change is\n\t * determined by the `previousPath` and `newPath` properties.\n\t */\n\tprivate updateFieldContentRelationships<\n\t\tT extends UID | NestableWidget | Group | NestedGroup,\n\t>(\n\t\targs: { field: T } & CustomTypeFieldIdChangedMeta,\n\t): { field: T; changed: boolean } {\n\t\tconst { field, ...updateMeta } = args;\n\t\tif (\n\t\t\tfield.type !== \"Link\" ||\n\t\t\tfield.config?.select !== \"document\" ||\n\t\t\t!field.config?.customtypes\n\t\t) {\n\t\t\t// not a content relationship field\n\t\t\treturn { field, changed: false };\n\t\t}\n\n\t\tconst result = this.updateCRCustomTypes({\n\t\t\t...updateMeta,\n\t\t\tcustomTypes: field.config.customtypes,\n\t\t});\n\n\t\treturn {\n\t\t\tfield: {\n\t\t\t\t...field,\n\t\t\t\tconfig: { ...field.config, customtypes: result.customTypes },\n\t\t\t},\n\t\t\tchanged: result.changed,\n\t\t};\n\t}\n\n\t/**\n\t * Update the Content Relationship API IDs for all existing custom types and\n\t * slices. The change is determined by properties inside the `updateMeta`\n\t * property.\n\t */\n\tprivate async updateContentRelationships(\n\t\targs: CustomTypeUpdateHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeUpdateHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst { model, updateMeta } = args;\n\n\t\tif (updateMeta?.fieldIdChanged) {\n\t\t\tlet { previousPath, newPath } = updateMeta.fieldIdChanged;\n\n\t\t\tif (previousPath.join(\".\") !== newPath.join(\".\")) {\n\t\t\t\tpreviousPath = [model.id, ...previousPath];\n\t\t\t\tnewPath = [model.id, ...newPath];\n\n\t\t\t\tconst crUpdatesPromises: Promise<{ errors: HookError[] }>[] = [];\n\n\t\t\t\tconst crUpdates: Promise<{ errors: HookError[] }>[] = [];\n\n\t\t\t\t// Find existing content relationships that link to the renamed field id in\n\t\t\t\t// any custom type and update them to use the new one.\n\t\t\t\tconst customTypes = await this.readAllCustomTypes();\n\n\t\t\t\tfor (const customType of customTypes.models) {\n\t\t\t\t\t// keep track of whether the custom type has changed to avoid calling\n\t\t\t\t\t// the update hook if nothing has changed\n\t\t\t\t\tlet customTypeChanged = false;\n\n\t\t\t\t\tconst updatedCustomTypeModel = traverseCustomType({\n\t\t\t\t\t\tcustomType: customType.model,\n\t\t\t\t\t\tonField: ({ field }) => {\n\t\t\t\t\t\t\tconst result = this.updateFieldContentRelationships({\n\t\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\t\tpreviousPath,\n\t\t\t\t\t\t\t\tnewPath,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcustomTypeChanged ||= result.changed;\n\n\t\t\t\t\t\t\treturn result.field;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tif (customTypeChanged) {\n\t\t\t\t\t\tcrUpdates.push(\n\t\t\t\t\t\t\tthis.sliceMachinePluginRunner.callHook(\"custom-type:update\", {\n\t\t\t\t\t\t\t\tmodel: updatedCustomTypeModel,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Find existing slice with content relationships that link to the renamed\n\t\t\t\t// field id in all libraries and update them to use the new one.\n\t\t\t\tconst { libraries } = await this.slices.readAllSliceLibraries();\n\n\t\t\t\tfor (const library of libraries) {\n\t\t\t\t\tconst slices = await this.slices.readAllSlicesForLibrary({\n\t\t\t\t\t\tlibraryID: library.libraryID,\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (const slice of slices.models) {\n\t\t\t\t\t\t// keep track of whether the custom type has changed to avoid calling\n\t\t\t\t\t\t// the update hook if nothing has changed\n\t\t\t\t\t\tlet sliceChanged = false;\n\n\t\t\t\t\t\tconst updatedSliceModel = traverseSharedSlice({\n\t\t\t\t\t\t\tpath: [\".\"],\n\t\t\t\t\t\t\tslice: slice.model,\n\t\t\t\t\t\t\tonField: ({ field }) => {\n\t\t\t\t\t\t\t\tconst result = this.updateFieldContentRelationships({\n\t\t\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\t\t\tpreviousPath,\n\t\t\t\t\t\t\t\t\tnewPath,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tsliceChanged ||= result.changed;\n\n\t\t\t\t\t\t\t\treturn result.field;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (sliceChanged) {\n\t\t\t\t\t\t\tcrUpdates.push(\n\t\t\t\t\t\t\t\tthis.sliceMachinePluginRunner.callHook(\"slice:update\", {\n\t\t\t\t\t\t\t\t\tlibraryID: library.libraryID,\n\t\t\t\t\t\t\t\t\tmodel: updatedSliceModel,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Process all the Content Relationship updates at once.\n\t\t\t\tconst crUpdatesResults = await Promise.all(crUpdatesPromises);\n\n\t\t\t\tif (crUpdatesResults.some((result) => result.errors.length > 0)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\terrors: crUpdatesResults.flatMap((result) => result.errors),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { errors: [] };\n\t}\n\n\tasync updateCustomType(\n\t\targs: CustomTypeUpdateHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeUpdateHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:update\",\n\t\t\targs,\n\t\t);\n\n\t\tif (args.updateMeta?.fieldIdChanged) {\n\t\t\tawait this.updateContentRelationships(args);\n\t\t}\n\n\t\treturn { errors: hookResult.errors };\n\t}\n\n\tasync renameCustomType(\n\t\targs: CustomTypeRenameHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeRenameHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:rename\",\n\t\t\targs,\n\t\t);\n\n\t\treturn {\n\t\t\terrors: hookResult.errors,\n\t\t};\n\t}\n\n\tasync deleteCustomType(\n\t\targs: CustomTypesMachineManagerDeleteCustomTypeArgs,\n\t): Promise<CustomTypesMachineManagerDeleteCustomTypeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst { model, errors: readCustomTypeErrors } = await this.readCustomType({\n\t\t\tid: args.id,\n\t\t});\n\n\t\tif (model) {\n\t\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\t\"custom-type:delete\",\n\t\t\t\t{ model },\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\terrors: hookResult.errors,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\terrors: readCustomTypeErrors,\n\t\t\t};\n\t\t}\n\t}\n\n\tasync pushCustomType(\n\t\targs: SliceMachineManagerPushCustomTypeArgs,\n\t): Promise<void> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\t\tconst repositoryName = await this.project.getResolvedRepositoryName();\n\n\t\t// TODO: Handle errors\n\t\tconst { model } = await this.readCustomType({ id: args.id });\n\n\t\tif (model) {\n\t\t\t// TODO: Create a single shared client.\n\t\t\tconst client = prismicCustomTypesClient.createClient({\n\t\t\t\tendpoint: API_ENDPOINTS.PrismicModels,\n\t\t\t\trepositoryName,\n\t\t\t\ttoken: authenticationToken,\n\t\t\t\tfetch,\n\t\t\t\tfetchOptions: {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"User-Agent\": args.userAgent || SLICE_MACHINE_USER_AGENT,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\t// Check if Custom Type already exists on the repository.\n\t\t\t\tawait client.getCustomTypeByID(args.id);\n\n\t\t\t\t// If it exists on the repository, update it.\n\t\t\t\tawait client.updateCustomType(model);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof prismicCustomTypesClient.NotFoundError) {\n\t\t\t\t\t// If it doesn't exist on the repository, insert it.\n\t\t\t\t\tawait client.insertCustomType(model);\n\t\t\t\t} else if (error instanceof prismicCustomTypesClient.ForbiddenError) {\n\t\t\t\t\tthrow new UnauthorizedError(\n\t\t\t\t\t\t\"You do not have access to push types to this Prismic repository.\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO: Remove\n\tasync readCustomTypeMocksConfig(\n\t\targs: SliceMachineManagerReadCustomTypeMocksConfigArgs,\n\t): Promise<SliceMachineManagerReadCustomTypeMocksConfigArgsReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:asset:read\",\n\t\t\t{\n\t\t\t\tcustomTypeID: args.customTypeID,\n\t\t\t\tassetID: \"mocks.config.json\",\n\t\t\t},\n\t\t);\n\t\tconst data = hookResult.data[0]?.data;\n\n\t\t// TODO: Validate the returned data.\n\n\t\tif (data) {\n\t\t\treturn {\n\t\t\t\tmocksConfig: JSON.parse(data.toString()),\n\t\t\t\terrors: hookResult.errors,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tmocksConfig: undefined,\n\t\t\t\terrors: hookResult.errors,\n\t\t\t};\n\t\t}\n\t}\n\n\t// TODO: Remove\n\tasync updateCustomTypeMocksConfig(\n\t\targs: SliceMachineManagerUpdateCustomTypeMocksConfigArgs,\n\t): Promise<SliceMachineManagerUpdateCustomTypeMocksConfigArgsReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:asset:update\",\n\t\t\t{\n\t\t\t\tcustomTypeID: args.customTypeID,\n\t\t\t\tasset: {\n\t\t\t\t\tid: \"mocks.config.json\",\n\t\t\t\t\tdata: Buffer.from(JSON.stringify(args.mocksConfig, null, \"\\t\")),\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\treturn {\n\t\t\terrors: hookResult.errors,\n\t\t};\n\t}\n\n\tasync fetchRemoteCustomTypes(): Promise<CustomType[]> {\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\t\tconst repositoryName = await this.project.getResolvedRepositoryName();\n\n\t\tconst client = prismicCustomTypesClient.createClient({\n\t\t\tendpoint: API_ENDPOINTS.PrismicModels,\n\t\t\trepositoryName,\n\t\t\ttoken: authenticationToken,\n\t\t\tfetch,\n\t\t\tfetchOptions: {\n\t\t\t\theaders: {\n\t\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\treturn await client.getAllCustomTypes();\n\t}\n\n\tasync inferSlice({\n\t\timageUrl,\n\t}: {\n\t\timageUrl: string;\n\t}): Promise<InferSliceResponse> {\n\t\tconst authToken = await this.user.getAuthenticationToken();\n\t\tconst headers = {\n\t\t\tAuthorization: `Bearer ${authToken}`,\n\t\t};\n\n\t\tconst repository = await this.project.getResolvedRepositoryName();\n\t\tconst searchParams = new URLSearchParams({\n\t\t\trepository,\n\t\t});\n\n\t\tconst url = new URL(\"./slices/infer\", API_ENDPOINTS.CustomTypeService);\n\t\turl.search = searchParams.toString();\n\n\t\tconst response = await fetch(url.toString(), {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: headers,\n\t\t\tbody: JSON.stringify({ imageUrl }),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to infer slice: ${response.statusText}`);\n\t\t}\n\n\t\tconst json = await response.json();\n\n\t\treturn InferSliceResponse.parse(json);\n\t}\n}\n\ntype InferSliceResponse = z.infer<typeof InferSliceResponse>;\n\nconst InferSliceResponse = z.object({\n\tslice: z.custom().transform((value, ctx) => {\n\t\tconst result = SharedSlice.decode(value);\n\t\tif (result._tag === \"Right\") {\n\t\t\treturn result.right;\n\t\t}\n\t\tctx.addIssue({\n\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\tmessage: `Invalid shared slice: ${JSON.stringify(value, null, 2)}`,\n\t\t});\n\n\t\treturn z.NEVER;\n\t}),\n\tlangSmithUrl: z.string().url().optional(),\n});\n\nfunction shallowClone<T>(value: T): T {\n\tif (typeof value === \"object\") {\n\t\treturn { ...value };\n\t}\n\n\treturn value;\n}\n"],"names":["BaseManager","assertPluginsInitialized","errors","decodeHookResult","t","CustomType","previousId","newId","customType","traverseCustomType","traverseSharedSlice","prismicCustomTypesClient","API_ENDPOINTS","fetch","SLICE_MACHINE_USER_AGENT","UnauthorizedError","z","SharedSlice"],"mappings":"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"}
1
+ {"version":3,"file":"CustomTypesManager.cjs","sources":["../../../../src/managers/customTypes/CustomTypesManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport * as prismicCustomTypesClient from \"@prismicio/custom-types-client\";\nimport {\n\tCustomType,\n\tGroup,\n\tNestableWidget,\n\tNestedGroup,\n\tSharedSlice,\n\tUID,\n\ttraverseCustomType,\n\ttraverseSharedSlice,\n} from \"@prismicio/types-internal/lib/customtypes\";\nimport {\n\tCallHookReturnType,\n\tCustomTypeCreateHook,\n\tCustomTypeCreateHookData,\n\tCustomTypeReadHookData,\n\tCustomTypeRenameHook,\n\tCustomTypeRenameHookData,\n\tCustomTypeUpdateHook,\n\tCustomTypeUpdateHookData,\n\tHookError,\n} from \"@slicemachine/plugin-kit\";\nimport { z } from \"zod\";\n\nimport { DecodeError } from \"../../lib/DecodeError\";\nimport { assertPluginsInitialized } from \"../../lib/assertPluginsInitialized\";\nimport { decodeHookResult } from \"../../lib/decodeHookResult\";\nimport fetch from \"../../lib/fetch\";\n\nimport { OnlyHookErrors } from \"../../types\";\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\nimport { SLICE_MACHINE_USER_AGENT } from \"../../constants/SLICE_MACHINE_USER_AGENT\";\nimport { UnauthorizedError } from \"../../errors\";\n\nimport { BaseManager } from \"../BaseManager\";\nimport { CustomTypeFormat } from \"./types\";\n\ntype SliceMachineManagerReadCustomTypeLibraryReturnType = {\n\tids: string[];\n\terrors: (DecodeError | HookError)[];\n};\n\ntype CustomTypesManagerReadAllCustomTypesArgs = {\n\tformat: CustomTypeFormat;\n};\n\ntype SliceMachineManagerReadAllCustomTypeReturnType = {\n\tmodels: { model: CustomType }[];\n\terrors: (DecodeError | HookError)[];\n};\n\ntype SliceMachineManagerReadCustomTypeReturnType = {\n\tmodel: CustomType | undefined;\n\terrors: (DecodeError | HookError)[];\n};\n\ntype SliceMachineManagerPushCustomTypeArgs = {\n\tid: string;\n\tuserAgent?: string;\n};\n\ntype SliceMachineManagerReadCustomTypeMocksConfigArgs = {\n\tcustomTypeID: string;\n};\n\ntype SliceMachineManagerReadCustomTypeMocksConfigArgsReturnType = {\n\t// TODO\n\tmocksConfig?: Record<string, unknown>;\n\terrors: HookError[];\n};\n\ntype SliceMachineManagerUpdateCustomTypeMocksConfigArgs = {\n\tcustomTypeID: string;\n\t// TODO\n\tmocksConfig: Record<string, unknown>;\n};\n\ntype SliceMachineManagerUpdateCustomTypeMocksConfigArgsReturnType = {\n\terrors: HookError[];\n};\n\ntype CustomTypesMachineManagerDeleteCustomTypeArgs = {\n\tid: string;\n};\n\ntype CustomTypesMachineManagerDeleteCustomTypeReturnType = {\n\terrors: (DecodeError | HookError)[];\n};\n\ntype CustomTypeFieldIdChangedMeta = NonNullable<\n\tNonNullable<CustomTypeUpdateHookData[\"updateMeta\"]>[\"fieldIdChanged\"]\n>;\n\ntype CrCustomType =\n\t| string\n\t| {\n\t\t\tid: string;\n\t\t\tfields?: readonly (string | CrCustomTypeNestedCr)[];\n\t };\ntype CrCustomTypeNestedCr =\n\t| string\n\t| {\n\t\t\tid: string;\n\t\t\tcustomtypes: readonly (string | CrCustomTypeFieldLeaf)[];\n\t };\ntype CrCustomTypeFieldLeaf =\n\t| string\n\t| {\n\t\t\tid: string;\n\t\t\tfields?: readonly string[];\n\t };\n\nexport class CustomTypesManager extends BaseManager {\n\tasync readCustomTypeLibrary(): Promise<SliceMachineManagerReadCustomTypeLibraryReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type-library:read\",\n\t\t\tundefined,\n\t\t);\n\t\tconst { data, errors } = decodeHookResult(\n\t\t\tt.type({\n\t\t\t\tids: t.array(t.string),\n\t\t\t}),\n\t\t\thookResult,\n\t\t);\n\n\t\treturn {\n\t\t\tids: data[0]?.ids || [],\n\t\t\terrors,\n\t\t};\n\t}\n\n\tasync readAllCustomTypes(\n\t\targs?: CustomTypesManagerReadAllCustomTypesArgs,\n\t): Promise<SliceMachineManagerReadAllCustomTypeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst res: SliceMachineManagerReadAllCustomTypeReturnType = {\n\t\t\tmodels: [],\n\t\t\terrors: [],\n\t\t};\n\n\t\tconst { ids, errors } = await this.readCustomTypeLibrary();\n\t\tres.errors = [...res.errors, ...errors];\n\n\t\tif (ids) {\n\t\t\tfor (const id of ids) {\n\t\t\t\tconst { model, errors } = await this.readCustomType({ id });\n\t\t\t\tres.errors = [...res.errors, ...errors];\n\n\t\t\t\tif (model && (!args || args.format === model.format)) {\n\t\t\t\t\tres.models.push({ model });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tasync createCustomType(\n\t\targs: CustomTypeCreateHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeCreateHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:create\",\n\t\t\targs,\n\t\t);\n\n\t\treturn {\n\t\t\terrors: hookResult.errors,\n\t\t};\n\t}\n\n\tasync readCustomType(\n\t\targs: CustomTypeReadHookData,\n\t): Promise<SliceMachineManagerReadCustomTypeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:read\",\n\t\t\targs,\n\t\t);\n\t\tconst { data, errors } = decodeHookResult(\n\t\t\tt.type({\n\t\t\t\tmodel: CustomType,\n\t\t\t}),\n\t\t\thookResult,\n\t\t);\n\n\t\treturn {\n\t\t\tmodel: data[0]?.model,\n\t\t\terrors,\n\t\t};\n\t}\n\n\tprivate updateCRCustomType<T extends CrCustomType | CrCustomTypeFieldLeaf>(\n\t\targs: {\n\t\t\tcustomType: T;\n\t\t} & CustomTypeFieldIdChangedMeta,\n\t): {\n\t\tcustomType: T;\n\t\tchanged: boolean;\n\t} {\n\t\tconst { previousPath, newPath } = args;\n\n\t\tlet changed = false;\n\n\t\tconst customType = shallowClone(args.customType);\n\n\t\tconst [previousId] = previousPath;\n\t\tconst [newId] = newPath;\n\n\t\tif (!previousId || !newId || typeof customType === \"string\") {\n\t\t\treturn { changed, customType };\n\t\t}\n\n\t\tif (customType.fields) {\n\t\t\tconst newFields = customType.fields.map((fieldArg) => {\n\t\t\t\tconst field = shallowClone(fieldArg);\n\n\t\t\t\tconst previousId = previousPath[1];\n\t\t\t\tconst newId = newPath[1];\n\n\t\t\t\tif (!previousId || !newId) {\n\t\t\t\t\treturn field;\n\t\t\t\t}\n\n\t\t\t\tif (typeof field === \"string\") {\n\t\t\t\t\tif (field === previousId && field !== newId) {\n\t\t\t\t\t\t// We have reached a field id that matches the id that was renamed,\n\t\t\t\t\t\t// so we update it new one. The field is a string, so return the new\n\t\t\t\t\t\t// id.\n\t\t\t\t\t\tchanged = true;\n\n\t\t\t\t\t\treturn newId;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn field;\n\t\t\t\t}\n\n\t\t\t\tif (field.id === previousId && field.id !== newId) {\n\t\t\t\t\t// We have reached a field id that matches the id that was renamed,\n\t\t\t\t\t// so we update it new one.\n\t\t\t\t\t// Since field is not a string, we don't exit, as we might have\n\t\t\t\t\t// something to update further down in customtypes.\n\t\t\t\t\tchanged = true;\n\n\t\t\t\t\tfield.id = newId;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\t...field,\n\t\t\t\t\tcustomtypes: field.customtypes.map((customType) => {\n\t\t\t\t\t\tconst result = this.updateCRCustomType({\n\t\t\t\t\t\t\tcustomType,\n\t\t\t\t\t\t\tpreviousPath,\n\t\t\t\t\t\t\tnewPath,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tchanged ||= result.changed;\n\n\t\t\t\t\t\treturn result.customType;\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tchanged,\n\t\t\t\t// @ts-expect-error We know that at this level we are returning the\n\t\t\t\t// right properties, but TypeScript will not trust it because it might\n\t\t\t\t// also have customtypes. This is because the type is not fully\n\t\t\t\t// recursive, it just has two levels of depth.\n\t\t\t\tcustomType: { id: customType.id, fields: newFields },\n\t\t\t};\n\t\t}\n\n\t\treturn { changed, customType };\n\t}\n\n\t/**\n\t * Map over the custom types of a Content Relationship Link and update the API\n\t * IDs that were changed during the custom type update.\n\t */\n\tprivate updateCRCustomTypes(\n\t\targs: { customTypes: CrCustomType[] } & CustomTypeFieldIdChangedMeta,\n\t): { customTypes: CrCustomType[]; changed: boolean } {\n\t\tconst { customTypes, ...updateMeta } = args;\n\n\t\tlet changed = false;\n\n\t\tconst newCustomTypes = customTypes.map((customType) => {\n\t\t\tconst result = this.updateCRCustomType({ customType, ...updateMeta });\n\t\t\tchanged ||= result.changed;\n\n\t\t\treturn result.customType;\n\t\t});\n\n\t\treturn { customTypes: newCustomTypes, changed };\n\t}\n\n\t/**\n\t * Update the Content Relationship API IDs of a single field. The change is\n\t * determined by the `previousPath` and `newPath` properties.\n\t */\n\tprivate updateFieldContentRelationships<\n\t\tT extends UID | NestableWidget | Group | NestedGroup,\n\t>(\n\t\targs: { field: T } & CustomTypeFieldIdChangedMeta,\n\t): { field: T; changed: boolean } {\n\t\tconst { field, ...updateMeta } = args;\n\t\tif (\n\t\t\tfield.type !== \"Link\" ||\n\t\t\tfield.config?.select !== \"document\" ||\n\t\t\t!field.config?.customtypes\n\t\t) {\n\t\t\t// not a content relationship field\n\t\t\treturn { field, changed: false };\n\t\t}\n\n\t\tconst result = this.updateCRCustomTypes({\n\t\t\t...updateMeta,\n\t\t\tcustomTypes: field.config.customtypes,\n\t\t});\n\n\t\treturn {\n\t\t\tfield: {\n\t\t\t\t...field,\n\t\t\t\tconfig: { ...field.config, customtypes: result.customTypes },\n\t\t\t},\n\t\t\tchanged: result.changed,\n\t\t};\n\t}\n\n\t/**\n\t * Update the Content Relationship API IDs for all existing custom types and\n\t * slices. The change is determined by properties inside the `updateMeta`\n\t * property.\n\t */\n\tprivate async updateContentRelationships(\n\t\targs: CustomTypeUpdateHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeUpdateHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst { model, updateMeta } = args;\n\n\t\tif (updateMeta?.fieldIdChanged) {\n\t\t\tlet { previousPath, newPath } = updateMeta.fieldIdChanged;\n\n\t\t\tif (previousPath.join(\".\") !== newPath.join(\".\")) {\n\t\t\t\tpreviousPath = [model.id, ...previousPath];\n\t\t\t\tnewPath = [model.id, ...newPath];\n\n\t\t\t\tconst crUpdates: Promise<{ errors: HookError[] }>[] = [];\n\n\t\t\t\t// Find existing content relationships that link to the renamed field id in\n\t\t\t\t// any custom type and update them to use the new one.\n\t\t\t\tconst customTypes = await this.readAllCustomTypes();\n\n\t\t\t\tfor (const customType of customTypes.models) {\n\t\t\t\t\t// keep track of whether the custom type has changed to avoid calling\n\t\t\t\t\t// the update hook if nothing has changed\n\t\t\t\t\tlet customTypeChanged = false;\n\n\t\t\t\t\tconst updatedCustomTypeModel = traverseCustomType({\n\t\t\t\t\t\tcustomType: customType.model,\n\t\t\t\t\t\tonField: ({ field }) => {\n\t\t\t\t\t\t\tconst result = this.updateFieldContentRelationships({\n\t\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\t\tpreviousPath,\n\t\t\t\t\t\t\t\tnewPath,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcustomTypeChanged ||= result.changed;\n\n\t\t\t\t\t\t\treturn result.field;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tif (customTypeChanged) {\n\t\t\t\t\t\tcrUpdates.push(\n\t\t\t\t\t\t\tthis.sliceMachinePluginRunner.callHook(\"custom-type:update\", {\n\t\t\t\t\t\t\t\tmodel: updatedCustomTypeModel,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Find existing slice with content relationships that link to the renamed\n\t\t\t\t// field id in all libraries and update them to use the new one.\n\t\t\t\tconst { libraries } = await this.slices.readAllSliceLibraries();\n\n\t\t\t\tfor (const library of libraries) {\n\t\t\t\t\tconst slices = await this.slices.readAllSlicesForLibrary({\n\t\t\t\t\t\tlibraryID: library.libraryID,\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (const slice of slices.models) {\n\t\t\t\t\t\t// keep track of whether the custom type has changed to avoid calling\n\t\t\t\t\t\t// the update hook if nothing has changed\n\t\t\t\t\t\tlet sliceChanged = false;\n\n\t\t\t\t\t\tconst updatedSliceModel = traverseSharedSlice({\n\t\t\t\t\t\t\tpath: [\".\"],\n\t\t\t\t\t\t\tslice: slice.model,\n\t\t\t\t\t\t\tonField: ({ field }) => {\n\t\t\t\t\t\t\t\tconst result = this.updateFieldContentRelationships({\n\t\t\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\t\t\tpreviousPath,\n\t\t\t\t\t\t\t\t\tnewPath,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tsliceChanged ||= result.changed;\n\n\t\t\t\t\t\t\t\treturn result.field;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (sliceChanged) {\n\t\t\t\t\t\t\tcrUpdates.push(\n\t\t\t\t\t\t\t\tthis.sliceMachinePluginRunner.callHook(\"slice:update\", {\n\t\t\t\t\t\t\t\t\tlibraryID: library.libraryID,\n\t\t\t\t\t\t\t\t\tmodel: updatedSliceModel,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Process all the Content Relationship updates at once.\n\t\t\t\tconst crUpdatesResult = await Promise.all(crUpdates);\n\n\t\t\t\tif (crUpdatesResult.some((result) => result.errors.length > 0)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\terrors: crUpdatesResult.flatMap((result) => result.errors),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { errors: [] };\n\t}\n\n\tasync updateCustomType(\n\t\targs: CustomTypeUpdateHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeUpdateHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:update\",\n\t\t\targs,\n\t\t);\n\n\t\tif (args.updateMeta?.fieldIdChanged) {\n\t\t\tawait this.updateContentRelationships(args);\n\t\t}\n\n\t\treturn { errors: hookResult.errors };\n\t}\n\n\tasync renameCustomType(\n\t\targs: CustomTypeRenameHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeRenameHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:rename\",\n\t\t\targs,\n\t\t);\n\n\t\treturn {\n\t\t\terrors: hookResult.errors,\n\t\t};\n\t}\n\n\tasync deleteCustomType(\n\t\targs: CustomTypesMachineManagerDeleteCustomTypeArgs,\n\t): Promise<CustomTypesMachineManagerDeleteCustomTypeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst { model, errors: readCustomTypeErrors } = await this.readCustomType({\n\t\t\tid: args.id,\n\t\t});\n\n\t\tif (model) {\n\t\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\t\"custom-type:delete\",\n\t\t\t\t{ model },\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\terrors: hookResult.errors,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\terrors: readCustomTypeErrors,\n\t\t\t};\n\t\t}\n\t}\n\n\tasync pushCustomType(\n\t\targs: SliceMachineManagerPushCustomTypeArgs,\n\t): Promise<void> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\t\tconst repositoryName = await this.project.getResolvedRepositoryName();\n\n\t\t// TODO: Handle errors\n\t\tconst { model } = await this.readCustomType({ id: args.id });\n\n\t\tif (model) {\n\t\t\t// TODO: Create a single shared client.\n\t\t\tconst client = prismicCustomTypesClient.createClient({\n\t\t\t\tendpoint: API_ENDPOINTS.PrismicModels,\n\t\t\t\trepositoryName,\n\t\t\t\ttoken: authenticationToken,\n\t\t\t\tfetch,\n\t\t\t\tfetchOptions: {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"User-Agent\": args.userAgent || SLICE_MACHINE_USER_AGENT,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\t// Check if Custom Type already exists on the repository.\n\t\t\t\tawait client.getCustomTypeByID(args.id);\n\n\t\t\t\t// If it exists on the repository, update it.\n\t\t\t\tawait client.updateCustomType(model);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof prismicCustomTypesClient.NotFoundError) {\n\t\t\t\t\t// If it doesn't exist on the repository, insert it.\n\t\t\t\t\tawait client.insertCustomType(model);\n\t\t\t\t} else if (error instanceof prismicCustomTypesClient.ForbiddenError) {\n\t\t\t\t\tthrow new UnauthorizedError(\n\t\t\t\t\t\t\"You do not have access to push types to this Prismic repository.\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO: Remove\n\tasync readCustomTypeMocksConfig(\n\t\targs: SliceMachineManagerReadCustomTypeMocksConfigArgs,\n\t): Promise<SliceMachineManagerReadCustomTypeMocksConfigArgsReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:asset:read\",\n\t\t\t{\n\t\t\t\tcustomTypeID: args.customTypeID,\n\t\t\t\tassetID: \"mocks.config.json\",\n\t\t\t},\n\t\t);\n\t\tconst data = hookResult.data[0]?.data;\n\n\t\t// TODO: Validate the returned data.\n\n\t\tif (data) {\n\t\t\treturn {\n\t\t\t\tmocksConfig: JSON.parse(data.toString()),\n\t\t\t\terrors: hookResult.errors,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tmocksConfig: undefined,\n\t\t\t\terrors: hookResult.errors,\n\t\t\t};\n\t\t}\n\t}\n\n\t// TODO: Remove\n\tasync updateCustomTypeMocksConfig(\n\t\targs: SliceMachineManagerUpdateCustomTypeMocksConfigArgs,\n\t): Promise<SliceMachineManagerUpdateCustomTypeMocksConfigArgsReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:asset:update\",\n\t\t\t{\n\t\t\t\tcustomTypeID: args.customTypeID,\n\t\t\t\tasset: {\n\t\t\t\t\tid: \"mocks.config.json\",\n\t\t\t\t\tdata: Buffer.from(JSON.stringify(args.mocksConfig, null, \"\\t\")),\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\treturn {\n\t\t\terrors: hookResult.errors,\n\t\t};\n\t}\n\n\tasync fetchRemoteCustomTypes(): Promise<CustomType[]> {\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\t\tconst repositoryName = await this.project.getResolvedRepositoryName();\n\n\t\tconst client = prismicCustomTypesClient.createClient({\n\t\t\tendpoint: API_ENDPOINTS.PrismicModels,\n\t\t\trepositoryName,\n\t\t\ttoken: authenticationToken,\n\t\t\tfetch,\n\t\t\tfetchOptions: {\n\t\t\t\theaders: {\n\t\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\treturn await client.getAllCustomTypes();\n\t}\n\n\tasync inferSlice({\n\t\timageUrl,\n\t}: {\n\t\timageUrl: string;\n\t}): Promise<InferSliceResponse> {\n\t\tconst authToken = await this.user.getAuthenticationToken();\n\t\tconst headers = {\n\t\t\tAuthorization: `Bearer ${authToken}`,\n\t\t};\n\n\t\tconst repository = await this.project.getResolvedRepositoryName();\n\t\tconst searchParams = new URLSearchParams({\n\t\t\trepository,\n\t\t});\n\n\t\tconst url = new URL(\"./slices/infer\", API_ENDPOINTS.CustomTypeService);\n\t\turl.search = searchParams.toString();\n\n\t\tconst response = await fetch(url.toString(), {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: headers,\n\t\t\tbody: JSON.stringify({ imageUrl }),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to infer slice: ${response.statusText}`);\n\t\t}\n\n\t\tconst json = await response.json();\n\n\t\treturn InferSliceResponse.parse(json);\n\t}\n}\n\ntype InferSliceResponse = z.infer<typeof InferSliceResponse>;\n\nconst InferSliceResponse = z.object({\n\tslice: z.custom().transform((value, ctx) => {\n\t\tconst result = SharedSlice.decode(value);\n\t\tif (result._tag === \"Right\") {\n\t\t\treturn result.right;\n\t\t}\n\t\tctx.addIssue({\n\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\tmessage: `Invalid shared slice: ${JSON.stringify(value, null, 2)}`,\n\t\t});\n\n\t\treturn z.NEVER;\n\t}),\n\tlangSmithUrl: z.string().url().optional(),\n});\n\nfunction shallowClone<T>(value: T): T {\n\tif (typeof value === \"object\") {\n\t\treturn { ...value };\n\t}\n\n\treturn value;\n}\n"],"names":["BaseManager","assertPluginsInitialized","errors","decodeHookResult","t","CustomType","previousId","newId","customType","traverseCustomType","traverseSharedSlice","prismicCustomTypesClient","API_ENDPOINTS","fetch","SLICE_MACHINE_USER_AGENT","UnauthorizedError","z","SharedSlice"],"mappings":"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"}
@@ -161,7 +161,6 @@ class CustomTypesManager extends BaseManager {
161
161
  if (previousPath.join(".") !== newPath.join(".")) {
162
162
  previousPath = [model.id, ...previousPath];
163
163
  newPath = [model.id, ...newPath];
164
- const crUpdatesPromises = [];
165
164
  const crUpdates = [];
166
165
  const customTypes = await this.readAllCustomTypes();
167
166
  for (const customType of customTypes.models) {
@@ -212,10 +211,10 @@ class CustomTypesManager extends BaseManager {
212
211
  }
213
212
  }
214
213
  }
215
- const crUpdatesResults = await Promise.all(crUpdatesPromises);
216
- if (crUpdatesResults.some((result) => result.errors.length > 0)) {
214
+ const crUpdatesResult = await Promise.all(crUpdates);
215
+ if (crUpdatesResult.some((result) => result.errors.length > 0)) {
217
216
  return {
218
- errors: crUpdatesResults.flatMap((result) => result.errors)
217
+ errors: crUpdatesResult.flatMap((result) => result.errors)
219
218
  };
220
219
  }
221
220
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CustomTypesManager.js","sources":["../../../../src/managers/customTypes/CustomTypesManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport * as prismicCustomTypesClient from \"@prismicio/custom-types-client\";\nimport {\n\tCustomType,\n\tGroup,\n\tNestableWidget,\n\tNestedGroup,\n\tSharedSlice,\n\tUID,\n\ttraverseCustomType,\n\ttraverseSharedSlice,\n} from \"@prismicio/types-internal/lib/customtypes\";\nimport {\n\tCallHookReturnType,\n\tCustomTypeCreateHook,\n\tCustomTypeCreateHookData,\n\tCustomTypeReadHookData,\n\tCustomTypeRenameHook,\n\tCustomTypeRenameHookData,\n\tCustomTypeUpdateHook,\n\tCustomTypeUpdateHookData,\n\tHookError,\n} from \"@slicemachine/plugin-kit\";\nimport { z } from \"zod\";\n\nimport { DecodeError } from \"../../lib/DecodeError\";\nimport { assertPluginsInitialized } from \"../../lib/assertPluginsInitialized\";\nimport { decodeHookResult } from \"../../lib/decodeHookResult\";\nimport fetch from \"../../lib/fetch\";\n\nimport { OnlyHookErrors } from \"../../types\";\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\nimport { SLICE_MACHINE_USER_AGENT } from \"../../constants/SLICE_MACHINE_USER_AGENT\";\nimport { UnauthorizedError } from \"../../errors\";\n\nimport { BaseManager } from \"../BaseManager\";\nimport { CustomTypeFormat } from \"./types\";\n\ntype SliceMachineManagerReadCustomTypeLibraryReturnType = {\n\tids: string[];\n\terrors: (DecodeError | HookError)[];\n};\n\ntype CustomTypesManagerReadAllCustomTypesArgs = {\n\tformat: CustomTypeFormat;\n};\n\ntype SliceMachineManagerReadAllCustomTypeReturnType = {\n\tmodels: { model: CustomType }[];\n\terrors: (DecodeError | HookError)[];\n};\n\ntype SliceMachineManagerReadCustomTypeReturnType = {\n\tmodel: CustomType | undefined;\n\terrors: (DecodeError | HookError)[];\n};\n\ntype SliceMachineManagerPushCustomTypeArgs = {\n\tid: string;\n\tuserAgent?: string;\n};\n\ntype SliceMachineManagerReadCustomTypeMocksConfigArgs = {\n\tcustomTypeID: string;\n};\n\ntype SliceMachineManagerReadCustomTypeMocksConfigArgsReturnType = {\n\t// TODO\n\tmocksConfig?: Record<string, unknown>;\n\terrors: HookError[];\n};\n\ntype SliceMachineManagerUpdateCustomTypeMocksConfigArgs = {\n\tcustomTypeID: string;\n\t// TODO\n\tmocksConfig: Record<string, unknown>;\n};\n\ntype SliceMachineManagerUpdateCustomTypeMocksConfigArgsReturnType = {\n\terrors: HookError[];\n};\n\ntype CustomTypesMachineManagerDeleteCustomTypeArgs = {\n\tid: string;\n};\n\ntype CustomTypesMachineManagerDeleteCustomTypeReturnType = {\n\terrors: (DecodeError | HookError)[];\n};\n\ntype CustomTypeFieldIdChangedMeta = NonNullable<\n\tNonNullable<CustomTypeUpdateHookData[\"updateMeta\"]>[\"fieldIdChanged\"]\n>;\n\ntype CrCustomType =\n\t| string\n\t| {\n\t\t\tid: string;\n\t\t\tfields?: readonly (string | CrCustomTypeNestedCr)[];\n\t };\ntype CrCustomTypeNestedCr =\n\t| string\n\t| {\n\t\t\tid: string;\n\t\t\tcustomtypes: readonly (string | CrCustomTypeFieldLeaf)[];\n\t };\ntype CrCustomTypeFieldLeaf =\n\t| string\n\t| {\n\t\t\tid: string;\n\t\t\tfields?: readonly string[];\n\t };\n\nexport class CustomTypesManager extends BaseManager {\n\tasync readCustomTypeLibrary(): Promise<SliceMachineManagerReadCustomTypeLibraryReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type-library:read\",\n\t\t\tundefined,\n\t\t);\n\t\tconst { data, errors } = decodeHookResult(\n\t\t\tt.type({\n\t\t\t\tids: t.array(t.string),\n\t\t\t}),\n\t\t\thookResult,\n\t\t);\n\n\t\treturn {\n\t\t\tids: data[0]?.ids || [],\n\t\t\terrors,\n\t\t};\n\t}\n\n\tasync readAllCustomTypes(\n\t\targs?: CustomTypesManagerReadAllCustomTypesArgs,\n\t): Promise<SliceMachineManagerReadAllCustomTypeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst res: SliceMachineManagerReadAllCustomTypeReturnType = {\n\t\t\tmodels: [],\n\t\t\terrors: [],\n\t\t};\n\n\t\tconst { ids, errors } = await this.readCustomTypeLibrary();\n\t\tres.errors = [...res.errors, ...errors];\n\n\t\tif (ids) {\n\t\t\tfor (const id of ids) {\n\t\t\t\tconst { model, errors } = await this.readCustomType({ id });\n\t\t\t\tres.errors = [...res.errors, ...errors];\n\n\t\t\t\tif (model && (!args || args.format === model.format)) {\n\t\t\t\t\tres.models.push({ model });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tasync createCustomType(\n\t\targs: CustomTypeCreateHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeCreateHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:create\",\n\t\t\targs,\n\t\t);\n\n\t\treturn {\n\t\t\terrors: hookResult.errors,\n\t\t};\n\t}\n\n\tasync readCustomType(\n\t\targs: CustomTypeReadHookData,\n\t): Promise<SliceMachineManagerReadCustomTypeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:read\",\n\t\t\targs,\n\t\t);\n\t\tconst { data, errors } = decodeHookResult(\n\t\t\tt.type({\n\t\t\t\tmodel: CustomType,\n\t\t\t}),\n\t\t\thookResult,\n\t\t);\n\n\t\treturn {\n\t\t\tmodel: data[0]?.model,\n\t\t\terrors,\n\t\t};\n\t}\n\n\tprivate updateCRCustomType<T extends CrCustomType | CrCustomTypeFieldLeaf>(\n\t\targs: {\n\t\t\tcustomType: T;\n\t\t} & CustomTypeFieldIdChangedMeta,\n\t): {\n\t\tcustomType: T;\n\t\tchanged: boolean;\n\t} {\n\t\tconst { previousPath, newPath } = args;\n\n\t\tlet changed = false;\n\n\t\tconst customType = shallowClone(args.customType);\n\n\t\tconst [previousId] = previousPath;\n\t\tconst [newId] = newPath;\n\n\t\tif (!previousId || !newId || typeof customType === \"string\") {\n\t\t\treturn { changed, customType };\n\t\t}\n\n\t\tif (customType.fields) {\n\t\t\tconst newFields = customType.fields.map((fieldArg) => {\n\t\t\t\tconst field = shallowClone(fieldArg);\n\n\t\t\t\tconst previousId = previousPath[1];\n\t\t\t\tconst newId = newPath[1];\n\n\t\t\t\tif (!previousId || !newId) {\n\t\t\t\t\treturn field;\n\t\t\t\t}\n\n\t\t\t\tif (typeof field === \"string\") {\n\t\t\t\t\tif (field === previousId && field !== newId) {\n\t\t\t\t\t\t// We have reached a field id that matches the id that was renamed,\n\t\t\t\t\t\t// so we update it new one. The field is a string, so return the new\n\t\t\t\t\t\t// id.\n\t\t\t\t\t\tchanged = true;\n\n\t\t\t\t\t\treturn newId;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn field;\n\t\t\t\t}\n\n\t\t\t\tif (field.id === previousId && field.id !== newId) {\n\t\t\t\t\t// We have reached a field id that matches the id that was renamed,\n\t\t\t\t\t// so we update it new one.\n\t\t\t\t\t// Since field is not a string, we don't exit, as we might have\n\t\t\t\t\t// something to update further down in customtypes.\n\t\t\t\t\tchanged = true;\n\n\t\t\t\t\tfield.id = newId;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\t...field,\n\t\t\t\t\tcustomtypes: field.customtypes.map((customType) => {\n\t\t\t\t\t\tconst result = this.updateCRCustomType({\n\t\t\t\t\t\t\tcustomType,\n\t\t\t\t\t\t\tpreviousPath,\n\t\t\t\t\t\t\tnewPath,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tchanged ||= result.changed;\n\n\t\t\t\t\t\treturn result.customType;\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tchanged,\n\t\t\t\t// @ts-expect-error We know that at this level we are returning the\n\t\t\t\t// right properties, but TypeScript will not trust it because it might\n\t\t\t\t// also have customtypes. This is because the type is not fully\n\t\t\t\t// recursive, it just has two levels of depth.\n\t\t\t\tcustomType: { id: customType.id, fields: newFields },\n\t\t\t};\n\t\t}\n\n\t\treturn { changed, customType };\n\t}\n\n\t/**\n\t * Map over the custom types of a Content Relationship Link and update the API\n\t * IDs that were changed during the custom type update.\n\t */\n\tprivate updateCRCustomTypes(\n\t\targs: { customTypes: CrCustomType[] } & CustomTypeFieldIdChangedMeta,\n\t): { customTypes: CrCustomType[]; changed: boolean } {\n\t\tconst { customTypes, ...updateMeta } = args;\n\n\t\tlet changed = false;\n\n\t\tconst newCustomTypes = customTypes.map((customType) => {\n\t\t\tconst result = this.updateCRCustomType({ customType, ...updateMeta });\n\t\t\tchanged ||= result.changed;\n\n\t\t\treturn result.customType;\n\t\t});\n\n\t\treturn { customTypes: newCustomTypes, changed };\n\t}\n\n\t/**\n\t * Update the Content Relationship API IDs of a single field. The change is\n\t * determined by the `previousPath` and `newPath` properties.\n\t */\n\tprivate updateFieldContentRelationships<\n\t\tT extends UID | NestableWidget | Group | NestedGroup,\n\t>(\n\t\targs: { field: T } & CustomTypeFieldIdChangedMeta,\n\t): { field: T; changed: boolean } {\n\t\tconst { field, ...updateMeta } = args;\n\t\tif (\n\t\t\tfield.type !== \"Link\" ||\n\t\t\tfield.config?.select !== \"document\" ||\n\t\t\t!field.config?.customtypes\n\t\t) {\n\t\t\t// not a content relationship field\n\t\t\treturn { field, changed: false };\n\t\t}\n\n\t\tconst result = this.updateCRCustomTypes({\n\t\t\t...updateMeta,\n\t\t\tcustomTypes: field.config.customtypes,\n\t\t});\n\n\t\treturn {\n\t\t\tfield: {\n\t\t\t\t...field,\n\t\t\t\tconfig: { ...field.config, customtypes: result.customTypes },\n\t\t\t},\n\t\t\tchanged: result.changed,\n\t\t};\n\t}\n\n\t/**\n\t * Update the Content Relationship API IDs for all existing custom types and\n\t * slices. The change is determined by properties inside the `updateMeta`\n\t * property.\n\t */\n\tprivate async updateContentRelationships(\n\t\targs: CustomTypeUpdateHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeUpdateHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst { model, updateMeta } = args;\n\n\t\tif (updateMeta?.fieldIdChanged) {\n\t\t\tlet { previousPath, newPath } = updateMeta.fieldIdChanged;\n\n\t\t\tif (previousPath.join(\".\") !== newPath.join(\".\")) {\n\t\t\t\tpreviousPath = [model.id, ...previousPath];\n\t\t\t\tnewPath = [model.id, ...newPath];\n\n\t\t\t\tconst crUpdatesPromises: Promise<{ errors: HookError[] }>[] = [];\n\n\t\t\t\tconst crUpdates: Promise<{ errors: HookError[] }>[] = [];\n\n\t\t\t\t// Find existing content relationships that link to the renamed field id in\n\t\t\t\t// any custom type and update them to use the new one.\n\t\t\t\tconst customTypes = await this.readAllCustomTypes();\n\n\t\t\t\tfor (const customType of customTypes.models) {\n\t\t\t\t\t// keep track of whether the custom type has changed to avoid calling\n\t\t\t\t\t// the update hook if nothing has changed\n\t\t\t\t\tlet customTypeChanged = false;\n\n\t\t\t\t\tconst updatedCustomTypeModel = traverseCustomType({\n\t\t\t\t\t\tcustomType: customType.model,\n\t\t\t\t\t\tonField: ({ field }) => {\n\t\t\t\t\t\t\tconst result = this.updateFieldContentRelationships({\n\t\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\t\tpreviousPath,\n\t\t\t\t\t\t\t\tnewPath,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcustomTypeChanged ||= result.changed;\n\n\t\t\t\t\t\t\treturn result.field;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tif (customTypeChanged) {\n\t\t\t\t\t\tcrUpdates.push(\n\t\t\t\t\t\t\tthis.sliceMachinePluginRunner.callHook(\"custom-type:update\", {\n\t\t\t\t\t\t\t\tmodel: updatedCustomTypeModel,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Find existing slice with content relationships that link to the renamed\n\t\t\t\t// field id in all libraries and update them to use the new one.\n\t\t\t\tconst { libraries } = await this.slices.readAllSliceLibraries();\n\n\t\t\t\tfor (const library of libraries) {\n\t\t\t\t\tconst slices = await this.slices.readAllSlicesForLibrary({\n\t\t\t\t\t\tlibraryID: library.libraryID,\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (const slice of slices.models) {\n\t\t\t\t\t\t// keep track of whether the custom type has changed to avoid calling\n\t\t\t\t\t\t// the update hook if nothing has changed\n\t\t\t\t\t\tlet sliceChanged = false;\n\n\t\t\t\t\t\tconst updatedSliceModel = traverseSharedSlice({\n\t\t\t\t\t\t\tpath: [\".\"],\n\t\t\t\t\t\t\tslice: slice.model,\n\t\t\t\t\t\t\tonField: ({ field }) => {\n\t\t\t\t\t\t\t\tconst result = this.updateFieldContentRelationships({\n\t\t\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\t\t\tpreviousPath,\n\t\t\t\t\t\t\t\t\tnewPath,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tsliceChanged ||= result.changed;\n\n\t\t\t\t\t\t\t\treturn result.field;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (sliceChanged) {\n\t\t\t\t\t\t\tcrUpdates.push(\n\t\t\t\t\t\t\t\tthis.sliceMachinePluginRunner.callHook(\"slice:update\", {\n\t\t\t\t\t\t\t\t\tlibraryID: library.libraryID,\n\t\t\t\t\t\t\t\t\tmodel: updatedSliceModel,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Process all the Content Relationship updates at once.\n\t\t\t\tconst crUpdatesResults = await Promise.all(crUpdatesPromises);\n\n\t\t\t\tif (crUpdatesResults.some((result) => result.errors.length > 0)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\terrors: crUpdatesResults.flatMap((result) => result.errors),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { errors: [] };\n\t}\n\n\tasync updateCustomType(\n\t\targs: CustomTypeUpdateHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeUpdateHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:update\",\n\t\t\targs,\n\t\t);\n\n\t\tif (args.updateMeta?.fieldIdChanged) {\n\t\t\tawait this.updateContentRelationships(args);\n\t\t}\n\n\t\treturn { errors: hookResult.errors };\n\t}\n\n\tasync renameCustomType(\n\t\targs: CustomTypeRenameHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeRenameHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:rename\",\n\t\t\targs,\n\t\t);\n\n\t\treturn {\n\t\t\terrors: hookResult.errors,\n\t\t};\n\t}\n\n\tasync deleteCustomType(\n\t\targs: CustomTypesMachineManagerDeleteCustomTypeArgs,\n\t): Promise<CustomTypesMachineManagerDeleteCustomTypeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst { model, errors: readCustomTypeErrors } = await this.readCustomType({\n\t\t\tid: args.id,\n\t\t});\n\n\t\tif (model) {\n\t\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\t\"custom-type:delete\",\n\t\t\t\t{ model },\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\terrors: hookResult.errors,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\terrors: readCustomTypeErrors,\n\t\t\t};\n\t\t}\n\t}\n\n\tasync pushCustomType(\n\t\targs: SliceMachineManagerPushCustomTypeArgs,\n\t): Promise<void> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\t\tconst repositoryName = await this.project.getResolvedRepositoryName();\n\n\t\t// TODO: Handle errors\n\t\tconst { model } = await this.readCustomType({ id: args.id });\n\n\t\tif (model) {\n\t\t\t// TODO: Create a single shared client.\n\t\t\tconst client = prismicCustomTypesClient.createClient({\n\t\t\t\tendpoint: API_ENDPOINTS.PrismicModels,\n\t\t\t\trepositoryName,\n\t\t\t\ttoken: authenticationToken,\n\t\t\t\tfetch,\n\t\t\t\tfetchOptions: {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"User-Agent\": args.userAgent || SLICE_MACHINE_USER_AGENT,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\t// Check if Custom Type already exists on the repository.\n\t\t\t\tawait client.getCustomTypeByID(args.id);\n\n\t\t\t\t// If it exists on the repository, update it.\n\t\t\t\tawait client.updateCustomType(model);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof prismicCustomTypesClient.NotFoundError) {\n\t\t\t\t\t// If it doesn't exist on the repository, insert it.\n\t\t\t\t\tawait client.insertCustomType(model);\n\t\t\t\t} else if (error instanceof prismicCustomTypesClient.ForbiddenError) {\n\t\t\t\t\tthrow new UnauthorizedError(\n\t\t\t\t\t\t\"You do not have access to push types to this Prismic repository.\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO: Remove\n\tasync readCustomTypeMocksConfig(\n\t\targs: SliceMachineManagerReadCustomTypeMocksConfigArgs,\n\t): Promise<SliceMachineManagerReadCustomTypeMocksConfigArgsReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:asset:read\",\n\t\t\t{\n\t\t\t\tcustomTypeID: args.customTypeID,\n\t\t\t\tassetID: \"mocks.config.json\",\n\t\t\t},\n\t\t);\n\t\tconst data = hookResult.data[0]?.data;\n\n\t\t// TODO: Validate the returned data.\n\n\t\tif (data) {\n\t\t\treturn {\n\t\t\t\tmocksConfig: JSON.parse(data.toString()),\n\t\t\t\terrors: hookResult.errors,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tmocksConfig: undefined,\n\t\t\t\terrors: hookResult.errors,\n\t\t\t};\n\t\t}\n\t}\n\n\t// TODO: Remove\n\tasync updateCustomTypeMocksConfig(\n\t\targs: SliceMachineManagerUpdateCustomTypeMocksConfigArgs,\n\t): Promise<SliceMachineManagerUpdateCustomTypeMocksConfigArgsReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:asset:update\",\n\t\t\t{\n\t\t\t\tcustomTypeID: args.customTypeID,\n\t\t\t\tasset: {\n\t\t\t\t\tid: \"mocks.config.json\",\n\t\t\t\t\tdata: Buffer.from(JSON.stringify(args.mocksConfig, null, \"\\t\")),\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\treturn {\n\t\t\terrors: hookResult.errors,\n\t\t};\n\t}\n\n\tasync fetchRemoteCustomTypes(): Promise<CustomType[]> {\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\t\tconst repositoryName = await this.project.getResolvedRepositoryName();\n\n\t\tconst client = prismicCustomTypesClient.createClient({\n\t\t\tendpoint: API_ENDPOINTS.PrismicModels,\n\t\t\trepositoryName,\n\t\t\ttoken: authenticationToken,\n\t\t\tfetch,\n\t\t\tfetchOptions: {\n\t\t\t\theaders: {\n\t\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\treturn await client.getAllCustomTypes();\n\t}\n\n\tasync inferSlice({\n\t\timageUrl,\n\t}: {\n\t\timageUrl: string;\n\t}): Promise<InferSliceResponse> {\n\t\tconst authToken = await this.user.getAuthenticationToken();\n\t\tconst headers = {\n\t\t\tAuthorization: `Bearer ${authToken}`,\n\t\t};\n\n\t\tconst repository = await this.project.getResolvedRepositoryName();\n\t\tconst searchParams = new URLSearchParams({\n\t\t\trepository,\n\t\t});\n\n\t\tconst url = new URL(\"./slices/infer\", API_ENDPOINTS.CustomTypeService);\n\t\turl.search = searchParams.toString();\n\n\t\tconst response = await fetch(url.toString(), {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: headers,\n\t\t\tbody: JSON.stringify({ imageUrl }),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to infer slice: ${response.statusText}`);\n\t\t}\n\n\t\tconst json = await response.json();\n\n\t\treturn InferSliceResponse.parse(json);\n\t}\n}\n\ntype InferSliceResponse = z.infer<typeof InferSliceResponse>;\n\nconst InferSliceResponse = z.object({\n\tslice: z.custom().transform((value, ctx) => {\n\t\tconst result = SharedSlice.decode(value);\n\t\tif (result._tag === \"Right\") {\n\t\t\treturn result.right;\n\t\t}\n\t\tctx.addIssue({\n\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\tmessage: `Invalid shared slice: ${JSON.stringify(value, null, 2)}`,\n\t\t});\n\n\t\treturn z.NEVER;\n\t}),\n\tlangSmithUrl: z.string().url().optional(),\n});\n\nfunction shallowClone<T>(value: T): T {\n\tif (typeof value === \"object\") {\n\t\treturn { ...value };\n\t}\n\n\treturn value;\n}\n"],"names":["errors","previousId","newId","customType"],"mappings":"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"}
1
+ {"version":3,"file":"CustomTypesManager.js","sources":["../../../../src/managers/customTypes/CustomTypesManager.ts"],"sourcesContent":["import * as t from \"io-ts\";\nimport * as prismicCustomTypesClient from \"@prismicio/custom-types-client\";\nimport {\n\tCustomType,\n\tGroup,\n\tNestableWidget,\n\tNestedGroup,\n\tSharedSlice,\n\tUID,\n\ttraverseCustomType,\n\ttraverseSharedSlice,\n} from \"@prismicio/types-internal/lib/customtypes\";\nimport {\n\tCallHookReturnType,\n\tCustomTypeCreateHook,\n\tCustomTypeCreateHookData,\n\tCustomTypeReadHookData,\n\tCustomTypeRenameHook,\n\tCustomTypeRenameHookData,\n\tCustomTypeUpdateHook,\n\tCustomTypeUpdateHookData,\n\tHookError,\n} from \"@slicemachine/plugin-kit\";\nimport { z } from \"zod\";\n\nimport { DecodeError } from \"../../lib/DecodeError\";\nimport { assertPluginsInitialized } from \"../../lib/assertPluginsInitialized\";\nimport { decodeHookResult } from \"../../lib/decodeHookResult\";\nimport fetch from \"../../lib/fetch\";\n\nimport { OnlyHookErrors } from \"../../types\";\nimport { API_ENDPOINTS } from \"../../constants/API_ENDPOINTS\";\nimport { SLICE_MACHINE_USER_AGENT } from \"../../constants/SLICE_MACHINE_USER_AGENT\";\nimport { UnauthorizedError } from \"../../errors\";\n\nimport { BaseManager } from \"../BaseManager\";\nimport { CustomTypeFormat } from \"./types\";\n\ntype SliceMachineManagerReadCustomTypeLibraryReturnType = {\n\tids: string[];\n\terrors: (DecodeError | HookError)[];\n};\n\ntype CustomTypesManagerReadAllCustomTypesArgs = {\n\tformat: CustomTypeFormat;\n};\n\ntype SliceMachineManagerReadAllCustomTypeReturnType = {\n\tmodels: { model: CustomType }[];\n\terrors: (DecodeError | HookError)[];\n};\n\ntype SliceMachineManagerReadCustomTypeReturnType = {\n\tmodel: CustomType | undefined;\n\terrors: (DecodeError | HookError)[];\n};\n\ntype SliceMachineManagerPushCustomTypeArgs = {\n\tid: string;\n\tuserAgent?: string;\n};\n\ntype SliceMachineManagerReadCustomTypeMocksConfigArgs = {\n\tcustomTypeID: string;\n};\n\ntype SliceMachineManagerReadCustomTypeMocksConfigArgsReturnType = {\n\t// TODO\n\tmocksConfig?: Record<string, unknown>;\n\terrors: HookError[];\n};\n\ntype SliceMachineManagerUpdateCustomTypeMocksConfigArgs = {\n\tcustomTypeID: string;\n\t// TODO\n\tmocksConfig: Record<string, unknown>;\n};\n\ntype SliceMachineManagerUpdateCustomTypeMocksConfigArgsReturnType = {\n\terrors: HookError[];\n};\n\ntype CustomTypesMachineManagerDeleteCustomTypeArgs = {\n\tid: string;\n};\n\ntype CustomTypesMachineManagerDeleteCustomTypeReturnType = {\n\terrors: (DecodeError | HookError)[];\n};\n\ntype CustomTypeFieldIdChangedMeta = NonNullable<\n\tNonNullable<CustomTypeUpdateHookData[\"updateMeta\"]>[\"fieldIdChanged\"]\n>;\n\ntype CrCustomType =\n\t| string\n\t| {\n\t\t\tid: string;\n\t\t\tfields?: readonly (string | CrCustomTypeNestedCr)[];\n\t };\ntype CrCustomTypeNestedCr =\n\t| string\n\t| {\n\t\t\tid: string;\n\t\t\tcustomtypes: readonly (string | CrCustomTypeFieldLeaf)[];\n\t };\ntype CrCustomTypeFieldLeaf =\n\t| string\n\t| {\n\t\t\tid: string;\n\t\t\tfields?: readonly string[];\n\t };\n\nexport class CustomTypesManager extends BaseManager {\n\tasync readCustomTypeLibrary(): Promise<SliceMachineManagerReadCustomTypeLibraryReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type-library:read\",\n\t\t\tundefined,\n\t\t);\n\t\tconst { data, errors } = decodeHookResult(\n\t\t\tt.type({\n\t\t\t\tids: t.array(t.string),\n\t\t\t}),\n\t\t\thookResult,\n\t\t);\n\n\t\treturn {\n\t\t\tids: data[0]?.ids || [],\n\t\t\terrors,\n\t\t};\n\t}\n\n\tasync readAllCustomTypes(\n\t\targs?: CustomTypesManagerReadAllCustomTypesArgs,\n\t): Promise<SliceMachineManagerReadAllCustomTypeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst res: SliceMachineManagerReadAllCustomTypeReturnType = {\n\t\t\tmodels: [],\n\t\t\terrors: [],\n\t\t};\n\n\t\tconst { ids, errors } = await this.readCustomTypeLibrary();\n\t\tres.errors = [...res.errors, ...errors];\n\n\t\tif (ids) {\n\t\t\tfor (const id of ids) {\n\t\t\t\tconst { model, errors } = await this.readCustomType({ id });\n\t\t\t\tres.errors = [...res.errors, ...errors];\n\n\t\t\t\tif (model && (!args || args.format === model.format)) {\n\t\t\t\t\tres.models.push({ model });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tasync createCustomType(\n\t\targs: CustomTypeCreateHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeCreateHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:create\",\n\t\t\targs,\n\t\t);\n\n\t\treturn {\n\t\t\terrors: hookResult.errors,\n\t\t};\n\t}\n\n\tasync readCustomType(\n\t\targs: CustomTypeReadHookData,\n\t): Promise<SliceMachineManagerReadCustomTypeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:read\",\n\t\t\targs,\n\t\t);\n\t\tconst { data, errors } = decodeHookResult(\n\t\t\tt.type({\n\t\t\t\tmodel: CustomType,\n\t\t\t}),\n\t\t\thookResult,\n\t\t);\n\n\t\treturn {\n\t\t\tmodel: data[0]?.model,\n\t\t\terrors,\n\t\t};\n\t}\n\n\tprivate updateCRCustomType<T extends CrCustomType | CrCustomTypeFieldLeaf>(\n\t\targs: {\n\t\t\tcustomType: T;\n\t\t} & CustomTypeFieldIdChangedMeta,\n\t): {\n\t\tcustomType: T;\n\t\tchanged: boolean;\n\t} {\n\t\tconst { previousPath, newPath } = args;\n\n\t\tlet changed = false;\n\n\t\tconst customType = shallowClone(args.customType);\n\n\t\tconst [previousId] = previousPath;\n\t\tconst [newId] = newPath;\n\n\t\tif (!previousId || !newId || typeof customType === \"string\") {\n\t\t\treturn { changed, customType };\n\t\t}\n\n\t\tif (customType.fields) {\n\t\t\tconst newFields = customType.fields.map((fieldArg) => {\n\t\t\t\tconst field = shallowClone(fieldArg);\n\n\t\t\t\tconst previousId = previousPath[1];\n\t\t\t\tconst newId = newPath[1];\n\n\t\t\t\tif (!previousId || !newId) {\n\t\t\t\t\treturn field;\n\t\t\t\t}\n\n\t\t\t\tif (typeof field === \"string\") {\n\t\t\t\t\tif (field === previousId && field !== newId) {\n\t\t\t\t\t\t// We have reached a field id that matches the id that was renamed,\n\t\t\t\t\t\t// so we update it new one. The field is a string, so return the new\n\t\t\t\t\t\t// id.\n\t\t\t\t\t\tchanged = true;\n\n\t\t\t\t\t\treturn newId;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn field;\n\t\t\t\t}\n\n\t\t\t\tif (field.id === previousId && field.id !== newId) {\n\t\t\t\t\t// We have reached a field id that matches the id that was renamed,\n\t\t\t\t\t// so we update it new one.\n\t\t\t\t\t// Since field is not a string, we don't exit, as we might have\n\t\t\t\t\t// something to update further down in customtypes.\n\t\t\t\t\tchanged = true;\n\n\t\t\t\t\tfield.id = newId;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\t...field,\n\t\t\t\t\tcustomtypes: field.customtypes.map((customType) => {\n\t\t\t\t\t\tconst result = this.updateCRCustomType({\n\t\t\t\t\t\t\tcustomType,\n\t\t\t\t\t\t\tpreviousPath,\n\t\t\t\t\t\t\tnewPath,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tchanged ||= result.changed;\n\n\t\t\t\t\t\treturn result.customType;\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tchanged,\n\t\t\t\t// @ts-expect-error We know that at this level we are returning the\n\t\t\t\t// right properties, but TypeScript will not trust it because it might\n\t\t\t\t// also have customtypes. This is because the type is not fully\n\t\t\t\t// recursive, it just has two levels of depth.\n\t\t\t\tcustomType: { id: customType.id, fields: newFields },\n\t\t\t};\n\t\t}\n\n\t\treturn { changed, customType };\n\t}\n\n\t/**\n\t * Map over the custom types of a Content Relationship Link and update the API\n\t * IDs that were changed during the custom type update.\n\t */\n\tprivate updateCRCustomTypes(\n\t\targs: { customTypes: CrCustomType[] } & CustomTypeFieldIdChangedMeta,\n\t): { customTypes: CrCustomType[]; changed: boolean } {\n\t\tconst { customTypes, ...updateMeta } = args;\n\n\t\tlet changed = false;\n\n\t\tconst newCustomTypes = customTypes.map((customType) => {\n\t\t\tconst result = this.updateCRCustomType({ customType, ...updateMeta });\n\t\t\tchanged ||= result.changed;\n\n\t\t\treturn result.customType;\n\t\t});\n\n\t\treturn { customTypes: newCustomTypes, changed };\n\t}\n\n\t/**\n\t * Update the Content Relationship API IDs of a single field. The change is\n\t * determined by the `previousPath` and `newPath` properties.\n\t */\n\tprivate updateFieldContentRelationships<\n\t\tT extends UID | NestableWidget | Group | NestedGroup,\n\t>(\n\t\targs: { field: T } & CustomTypeFieldIdChangedMeta,\n\t): { field: T; changed: boolean } {\n\t\tconst { field, ...updateMeta } = args;\n\t\tif (\n\t\t\tfield.type !== \"Link\" ||\n\t\t\tfield.config?.select !== \"document\" ||\n\t\t\t!field.config?.customtypes\n\t\t) {\n\t\t\t// not a content relationship field\n\t\t\treturn { field, changed: false };\n\t\t}\n\n\t\tconst result = this.updateCRCustomTypes({\n\t\t\t...updateMeta,\n\t\t\tcustomTypes: field.config.customtypes,\n\t\t});\n\n\t\treturn {\n\t\t\tfield: {\n\t\t\t\t...field,\n\t\t\t\tconfig: { ...field.config, customtypes: result.customTypes },\n\t\t\t},\n\t\t\tchanged: result.changed,\n\t\t};\n\t}\n\n\t/**\n\t * Update the Content Relationship API IDs for all existing custom types and\n\t * slices. The change is determined by properties inside the `updateMeta`\n\t * property.\n\t */\n\tprivate async updateContentRelationships(\n\t\targs: CustomTypeUpdateHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeUpdateHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst { model, updateMeta } = args;\n\n\t\tif (updateMeta?.fieldIdChanged) {\n\t\t\tlet { previousPath, newPath } = updateMeta.fieldIdChanged;\n\n\t\t\tif (previousPath.join(\".\") !== newPath.join(\".\")) {\n\t\t\t\tpreviousPath = [model.id, ...previousPath];\n\t\t\t\tnewPath = [model.id, ...newPath];\n\n\t\t\t\tconst crUpdates: Promise<{ errors: HookError[] }>[] = [];\n\n\t\t\t\t// Find existing content relationships that link to the renamed field id in\n\t\t\t\t// any custom type and update them to use the new one.\n\t\t\t\tconst customTypes = await this.readAllCustomTypes();\n\n\t\t\t\tfor (const customType of customTypes.models) {\n\t\t\t\t\t// keep track of whether the custom type has changed to avoid calling\n\t\t\t\t\t// the update hook if nothing has changed\n\t\t\t\t\tlet customTypeChanged = false;\n\n\t\t\t\t\tconst updatedCustomTypeModel = traverseCustomType({\n\t\t\t\t\t\tcustomType: customType.model,\n\t\t\t\t\t\tonField: ({ field }) => {\n\t\t\t\t\t\t\tconst result = this.updateFieldContentRelationships({\n\t\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\t\tpreviousPath,\n\t\t\t\t\t\t\t\tnewPath,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcustomTypeChanged ||= result.changed;\n\n\t\t\t\t\t\t\treturn result.field;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tif (customTypeChanged) {\n\t\t\t\t\t\tcrUpdates.push(\n\t\t\t\t\t\t\tthis.sliceMachinePluginRunner.callHook(\"custom-type:update\", {\n\t\t\t\t\t\t\t\tmodel: updatedCustomTypeModel,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Find existing slice with content relationships that link to the renamed\n\t\t\t\t// field id in all libraries and update them to use the new one.\n\t\t\t\tconst { libraries } = await this.slices.readAllSliceLibraries();\n\n\t\t\t\tfor (const library of libraries) {\n\t\t\t\t\tconst slices = await this.slices.readAllSlicesForLibrary({\n\t\t\t\t\t\tlibraryID: library.libraryID,\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (const slice of slices.models) {\n\t\t\t\t\t\t// keep track of whether the custom type has changed to avoid calling\n\t\t\t\t\t\t// the update hook if nothing has changed\n\t\t\t\t\t\tlet sliceChanged = false;\n\n\t\t\t\t\t\tconst updatedSliceModel = traverseSharedSlice({\n\t\t\t\t\t\t\tpath: [\".\"],\n\t\t\t\t\t\t\tslice: slice.model,\n\t\t\t\t\t\t\tonField: ({ field }) => {\n\t\t\t\t\t\t\t\tconst result = this.updateFieldContentRelationships({\n\t\t\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\t\t\tpreviousPath,\n\t\t\t\t\t\t\t\t\tnewPath,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tsliceChanged ||= result.changed;\n\n\t\t\t\t\t\t\t\treturn result.field;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (sliceChanged) {\n\t\t\t\t\t\t\tcrUpdates.push(\n\t\t\t\t\t\t\t\tthis.sliceMachinePluginRunner.callHook(\"slice:update\", {\n\t\t\t\t\t\t\t\t\tlibraryID: library.libraryID,\n\t\t\t\t\t\t\t\t\tmodel: updatedSliceModel,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Process all the Content Relationship updates at once.\n\t\t\t\tconst crUpdatesResult = await Promise.all(crUpdates);\n\n\t\t\t\tif (crUpdatesResult.some((result) => result.errors.length > 0)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\terrors: crUpdatesResult.flatMap((result) => result.errors),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { errors: [] };\n\t}\n\n\tasync updateCustomType(\n\t\targs: CustomTypeUpdateHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeUpdateHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:update\",\n\t\t\targs,\n\t\t);\n\n\t\tif (args.updateMeta?.fieldIdChanged) {\n\t\t\tawait this.updateContentRelationships(args);\n\t\t}\n\n\t\treturn { errors: hookResult.errors };\n\t}\n\n\tasync renameCustomType(\n\t\targs: CustomTypeRenameHookData,\n\t): Promise<OnlyHookErrors<CallHookReturnType<CustomTypeRenameHook>>> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:rename\",\n\t\t\targs,\n\t\t);\n\n\t\treturn {\n\t\t\terrors: hookResult.errors,\n\t\t};\n\t}\n\n\tasync deleteCustomType(\n\t\targs: CustomTypesMachineManagerDeleteCustomTypeArgs,\n\t): Promise<CustomTypesMachineManagerDeleteCustomTypeReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst { model, errors: readCustomTypeErrors } = await this.readCustomType({\n\t\t\tid: args.id,\n\t\t});\n\n\t\tif (model) {\n\t\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\t\"custom-type:delete\",\n\t\t\t\t{ model },\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\terrors: hookResult.errors,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\terrors: readCustomTypeErrors,\n\t\t\t};\n\t\t}\n\t}\n\n\tasync pushCustomType(\n\t\targs: SliceMachineManagerPushCustomTypeArgs,\n\t): Promise<void> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\t\tconst repositoryName = await this.project.getResolvedRepositoryName();\n\n\t\t// TODO: Handle errors\n\t\tconst { model } = await this.readCustomType({ id: args.id });\n\n\t\tif (model) {\n\t\t\t// TODO: Create a single shared client.\n\t\t\tconst client = prismicCustomTypesClient.createClient({\n\t\t\t\tendpoint: API_ENDPOINTS.PrismicModels,\n\t\t\t\trepositoryName,\n\t\t\t\ttoken: authenticationToken,\n\t\t\t\tfetch,\n\t\t\t\tfetchOptions: {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"User-Agent\": args.userAgent || SLICE_MACHINE_USER_AGENT,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\t// Check if Custom Type already exists on the repository.\n\t\t\t\tawait client.getCustomTypeByID(args.id);\n\n\t\t\t\t// If it exists on the repository, update it.\n\t\t\t\tawait client.updateCustomType(model);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof prismicCustomTypesClient.NotFoundError) {\n\t\t\t\t\t// If it doesn't exist on the repository, insert it.\n\t\t\t\t\tawait client.insertCustomType(model);\n\t\t\t\t} else if (error instanceof prismicCustomTypesClient.ForbiddenError) {\n\t\t\t\t\tthrow new UnauthorizedError(\n\t\t\t\t\t\t\"You do not have access to push types to this Prismic repository.\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO: Remove\n\tasync readCustomTypeMocksConfig(\n\t\targs: SliceMachineManagerReadCustomTypeMocksConfigArgs,\n\t): Promise<SliceMachineManagerReadCustomTypeMocksConfigArgsReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:asset:read\",\n\t\t\t{\n\t\t\t\tcustomTypeID: args.customTypeID,\n\t\t\t\tassetID: \"mocks.config.json\",\n\t\t\t},\n\t\t);\n\t\tconst data = hookResult.data[0]?.data;\n\n\t\t// TODO: Validate the returned data.\n\n\t\tif (data) {\n\t\t\treturn {\n\t\t\t\tmocksConfig: JSON.parse(data.toString()),\n\t\t\t\terrors: hookResult.errors,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tmocksConfig: undefined,\n\t\t\t\terrors: hookResult.errors,\n\t\t\t};\n\t\t}\n\t}\n\n\t// TODO: Remove\n\tasync updateCustomTypeMocksConfig(\n\t\targs: SliceMachineManagerUpdateCustomTypeMocksConfigArgs,\n\t): Promise<SliceMachineManagerUpdateCustomTypeMocksConfigArgsReturnType> {\n\t\tassertPluginsInitialized(this.sliceMachinePluginRunner);\n\n\t\tconst hookResult = await this.sliceMachinePluginRunner.callHook(\n\t\t\t\"custom-type:asset:update\",\n\t\t\t{\n\t\t\t\tcustomTypeID: args.customTypeID,\n\t\t\t\tasset: {\n\t\t\t\t\tid: \"mocks.config.json\",\n\t\t\t\t\tdata: Buffer.from(JSON.stringify(args.mocksConfig, null, \"\\t\")),\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\treturn {\n\t\t\terrors: hookResult.errors,\n\t\t};\n\t}\n\n\tasync fetchRemoteCustomTypes(): Promise<CustomType[]> {\n\t\tconst authenticationToken = await this.user.getAuthenticationToken();\n\t\tconst repositoryName = await this.project.getResolvedRepositoryName();\n\n\t\tconst client = prismicCustomTypesClient.createClient({\n\t\t\tendpoint: API_ENDPOINTS.PrismicModels,\n\t\t\trepositoryName,\n\t\t\ttoken: authenticationToken,\n\t\t\tfetch,\n\t\t\tfetchOptions: {\n\t\t\t\theaders: {\n\t\t\t\t\t\"User-Agent\": SLICE_MACHINE_USER_AGENT,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\treturn await client.getAllCustomTypes();\n\t}\n\n\tasync inferSlice({\n\t\timageUrl,\n\t}: {\n\t\timageUrl: string;\n\t}): Promise<InferSliceResponse> {\n\t\tconst authToken = await this.user.getAuthenticationToken();\n\t\tconst headers = {\n\t\t\tAuthorization: `Bearer ${authToken}`,\n\t\t};\n\n\t\tconst repository = await this.project.getResolvedRepositoryName();\n\t\tconst searchParams = new URLSearchParams({\n\t\t\trepository,\n\t\t});\n\n\t\tconst url = new URL(\"./slices/infer\", API_ENDPOINTS.CustomTypeService);\n\t\turl.search = searchParams.toString();\n\n\t\tconst response = await fetch(url.toString(), {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: headers,\n\t\t\tbody: JSON.stringify({ imageUrl }),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to infer slice: ${response.statusText}`);\n\t\t}\n\n\t\tconst json = await response.json();\n\n\t\treturn InferSliceResponse.parse(json);\n\t}\n}\n\ntype InferSliceResponse = z.infer<typeof InferSliceResponse>;\n\nconst InferSliceResponse = z.object({\n\tslice: z.custom().transform((value, ctx) => {\n\t\tconst result = SharedSlice.decode(value);\n\t\tif (result._tag === \"Right\") {\n\t\t\treturn result.right;\n\t\t}\n\t\tctx.addIssue({\n\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\tmessage: `Invalid shared slice: ${JSON.stringify(value, null, 2)}`,\n\t\t});\n\n\t\treturn z.NEVER;\n\t}),\n\tlangSmithUrl: z.string().url().optional(),\n});\n\nfunction shallowClone<T>(value: T): T {\n\tif (typeof value === \"object\") {\n\t\treturn { ...value };\n\t}\n\n\treturn value;\n}\n"],"names":["errors","previousId","newId","customType"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slicemachine/manager",
3
- "version": "0.24.14-alpha.jp-update-cr-links.7",
3
+ "version": "0.24.14-alpha.jp-update-cr-links.8",
4
4
  "description": "Manage all aspects of a Slice Machine project.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -70,7 +70,7 @@
70
70
  "@prismicio/mocks": "2.13.0",
71
71
  "@prismicio/types-internal": "3.10.0-alpha.0",
72
72
  "@segment/analytics-node": "^2.1.2",
73
- "@slicemachine/plugin-kit": "0.4.76-alpha.jp-update-cr-links.7",
73
+ "@slicemachine/plugin-kit": "0.4.76-alpha.jp-update-cr-links.8",
74
74
  "cookie": "^1.0.1",
75
75
  "cors": "^2.8.5",
76
76
  "execa": "^7.1.1",
@@ -353,8 +353,6 @@ export class CustomTypesManager extends BaseManager {
353
353
  previousPath = [model.id, ...previousPath];
354
354
  newPath = [model.id, ...newPath];
355
355
 
356
- const crUpdatesPromises: Promise<{ errors: HookError[] }>[] = [];
357
-
358
356
  const crUpdates: Promise<{ errors: HookError[] }>[] = [];
359
357
 
360
358
  // Find existing content relationships that link to the renamed field id in
@@ -432,11 +430,11 @@ export class CustomTypesManager extends BaseManager {
432
430
  }
433
431
 
434
432
  // Process all the Content Relationship updates at once.
435
- const crUpdatesResults = await Promise.all(crUpdatesPromises);
433
+ const crUpdatesResult = await Promise.all(crUpdates);
436
434
 
437
- if (crUpdatesResults.some((result) => result.errors.length > 0)) {
435
+ if (crUpdatesResult.some((result) => result.errors.length > 0)) {
438
436
  return {
439
- errors: crUpdatesResults.flatMap((result) => result.errors),
437
+ errors: crUpdatesResult.flatMap((result) => result.errors),
440
438
  };
441
439
  }
442
440
  }