@strapi/content-type-builder 5.53.0 → 5.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -201,7 +201,9 @@ function createSchemaHandler(infos) {
201
201
  options: state.schema.options,
202
202
  pluginOptions: state.schema.pluginOptions,
203
203
  attributes: state.schema.attributes,
204
- config: state.schema.config
204
+ config: state.schema.config,
205
+ indexes: state.schema.indexes,
206
+ foreignKeys: state.schema.foreignKeys
205
207
  }, {
206
208
  spaces: 2
207
209
  });
@@ -1 +1 @@
1
- {"version":3,"file":"schema-handler.js","sources":["../../../../server/src/services/schema-builder/schema-handler.ts"],"sourcesContent":["import path from 'path';\nimport type { Internal, Struct } from '@strapi/types';\nimport fse from 'fs-extra';\nimport _ from 'lodash';\n\nimport { isConfigurable } from '../../utils/attributes';\n\nexport type Infos = {\n category?: string;\n modelName?: string;\n plugin?: string;\n uid?: Internal.UID.ContentType;\n dir: string;\n filename: string;\n schema?: Struct.ContentTypeSchema;\n};\n\nexport type SchemaHandler = ReturnType<typeof createSchemaHandler>;\n\nexport default function createSchemaHandler(infos: Infos) {\n const { category, modelName, plugin, uid, dir, filename, schema } = infos;\n\n const initialState = {\n modelName,\n plugin,\n category,\n uid,\n dir,\n filename,\n schema:\n schema ||\n ({\n info: {},\n options: {},\n attributes: {},\n } as Struct.ContentTypeSchema),\n };\n\n const state = _.cloneDeep(initialState);\n\n // always keep it the same to rollback\n Object.freeze(initialState.schema);\n\n let modified = false;\n let deleted = false;\n\n return {\n get modelName() {\n return initialState.modelName;\n },\n\n get plugin() {\n return initialState.plugin;\n },\n\n get category() {\n return initialState.category;\n },\n\n get kind() {\n return _.get(state.schema, 'kind', 'collectionType');\n },\n\n get uid() {\n return state.uid;\n },\n\n get writable() {\n return _.get(state, 'plugin') !== 'admin';\n },\n\n setUID(val: Internal.UID.ContentType) {\n modified = true;\n\n state.uid = val;\n return this;\n },\n\n setDir(val: string) {\n modified = true;\n\n state.dir = val;\n return this;\n },\n\n get schema() {\n return _.cloneDeep(state.schema);\n },\n\n setSchema(val: Struct.ContentTypeSchema) {\n modified = true;\n\n state.schema = _.cloneDeep(val);\n return this;\n },\n\n // get a particular path inside the schema\n get(path: string[]) {\n return _.get(state.schema, path);\n },\n\n // set a particular path inside the schema\n set(path: string[] | string, val: unknown) {\n if (!state.schema) return this;\n\n modified = true;\n\n const value = _.defaultTo(val, _.get(state.schema, path));\n _.set(state.schema, path, value);\n\n return this;\n },\n\n // delete a particular path inside the schema\n unset(path: string[]) {\n modified = true;\n\n _.unset(state.schema, path);\n\n return this;\n },\n\n delete() {\n deleted = true;\n return this;\n },\n\n getAttribute(key: string) {\n return this.get(['attributes', key]);\n },\n\n setAttribute(key: string, attribute: any) {\n return this.set(['attributes', key], attribute);\n },\n\n deleteAttribute(key: string) {\n return this.unset(['attributes', key]);\n },\n\n setAttributes(newAttributes: Struct.SchemaAttributes) {\n if (!this.schema) return this;\n\n // delete old configurable attributes\n for (const key in this.schema.attributes) {\n if (isConfigurable((this.schema.attributes as any)[key])) {\n this.deleteAttribute(key);\n }\n }\n\n // set new Attributes\n for (const key of Object.keys(newAttributes)) {\n this.setAttribute(key, newAttributes[key as keyof Struct.SchemaAttributes]);\n }\n\n return this;\n },\n\n removeContentType(uid: Internal.UID.ContentType) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attribute = attributes[key];\n\n if (attribute.target === uid) {\n this.deleteAttribute(key);\n }\n });\n\n return this;\n },\n\n // utils\n removeComponent(uid: Internal.UID.Component) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attr = attributes[key];\n\n if (attr.type === 'component' && attr.component === uid) {\n this.deleteAttribute(key);\n }\n\n if (\n attr.type === 'dynamiczone' &&\n Array.isArray(attr.components) &&\n attr.components.includes(uid)\n ) {\n const updatedComponentList = attributes[key].components.filter(\n (val: string) => val !== uid\n );\n this.set(['attributes', key, 'components'], updatedComponentList);\n }\n });\n\n return this;\n },\n\n updateComponent(uid: Internal.UID.Component, newUID: Internal.UID.Component) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attr = attributes[key];\n\n if (attr.type === 'component' && attr.component === uid) {\n this.set(['attributes', key, 'component'], newUID);\n }\n\n if (\n attr.type === 'dynamiczone' &&\n Array.isArray(attr.components) &&\n attr.components.includes(uid)\n ) {\n const updatedComponentList = attr.components.map((val: string) =>\n val === uid ? newUID : val\n );\n\n this.set(['attributes', key, 'components'], updatedComponentList);\n }\n });\n\n return this;\n },\n\n // save the schema to disk\n async flush() {\n if (!this.writable) {\n return;\n }\n\n const initialPath = path.join(initialState.dir, initialState.filename);\n const filePath = path.join(state.dir, state.filename);\n\n if (deleted) {\n await fse.remove(initialPath);\n\n const list = await fse.readdir(initialState.dir);\n if (list.length === 0) {\n await fse.remove(initialState.dir);\n }\n\n return;\n }\n\n if (modified) {\n if (!state.schema) return Promise.resolve();\n\n await fse.ensureFile(filePath);\n\n await fse.writeJSON(\n filePath,\n {\n kind: state.schema.kind,\n collectionName: state.schema.collectionName,\n info: state.schema.info,\n options: state.schema.options,\n pluginOptions: state.schema.pluginOptions,\n attributes: state.schema.attributes,\n config: (state.schema as any).config,\n },\n { spaces: 2 }\n );\n\n // remove from oldPath\n if (initialPath !== filePath) {\n await fse.remove(initialPath);\n\n const list = await fse.readdir(initialState.dir);\n if (list.length === 0) {\n await fse.remove(initialState.dir);\n }\n }\n\n return;\n }\n\n return Promise.resolve();\n },\n\n // reset the schema to its initial value\n async rollback() {\n if (!this.writable) {\n return;\n }\n\n const initialPath = path.join(initialState.dir, initialState.filename);\n const filePath = path.join(state.dir, state.filename);\n\n // it was a creation so it needs to be deleted\n if (!initialState.uid) {\n await fse.remove(filePath);\n\n const list = await fse.readdir(state.dir);\n if (list.length === 0) {\n await fse.remove(state.dir);\n }\n return;\n }\n\n if (modified || deleted) {\n await fse.ensureFile(initialPath);\n await fse.writeJSON(initialPath, initialState.schema, { spaces: 2 });\n\n // remove\n if (initialPath !== filePath) {\n await fse.remove(filePath);\n\n const list = await fse.readdir(state.dir);\n if (list.length === 0) {\n await fse.remove(state.dir);\n }\n }\n }\n\n return Promise.resolve();\n },\n };\n}\n"],"names":["createSchemaHandler","infos","category","modelName","plugin","uid","dir","filename","schema","initialState","info","options","attributes","state","_","cloneDeep","Object","freeze","modified","deleted","kind","get","writable","setUID","val","setDir","setSchema","path","set","value","defaultTo","unset","delete","getAttribute","key","setAttribute","attribute","deleteAttribute","setAttributes","newAttributes","isConfigurable","keys","removeContentType","forEach","target","removeComponent","attr","type","component","Array","isArray","components","includes","updatedComponentList","filter","updateComponent","newUID","map","flush","initialPath","join","filePath","fse","remove","list","readdir","length","Promise","resolve","ensureFile","writeJSON","collectionName","pluginOptions","config","spaces","rollback"],"mappings":"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"}
1
+ {"version":3,"file":"schema-handler.js","sources":["../../../../server/src/services/schema-builder/schema-handler.ts"],"sourcesContent":["import path from 'path';\nimport type { Internal, Struct } from '@strapi/types';\nimport fse from 'fs-extra';\nimport _ from 'lodash';\n\nimport { isConfigurable } from '../../utils/attributes';\n\nexport type Infos = {\n category?: string;\n modelName?: string;\n plugin?: string;\n uid?: Internal.UID.ContentType;\n dir: string;\n filename: string;\n schema?: Struct.ContentTypeSchema;\n};\n\nexport type SchemaHandler = ReturnType<typeof createSchemaHandler>;\n\nexport default function createSchemaHandler(infos: Infos) {\n const { category, modelName, plugin, uid, dir, filename, schema } = infos;\n\n const initialState = {\n modelName,\n plugin,\n category,\n uid,\n dir,\n filename,\n schema:\n schema ||\n ({\n info: {},\n options: {},\n attributes: {},\n } as Struct.ContentTypeSchema),\n };\n\n const state = _.cloneDeep(initialState);\n\n // always keep it the same to rollback\n Object.freeze(initialState.schema);\n\n let modified = false;\n let deleted = false;\n\n return {\n get modelName() {\n return initialState.modelName;\n },\n\n get plugin() {\n return initialState.plugin;\n },\n\n get category() {\n return initialState.category;\n },\n\n get kind() {\n return _.get(state.schema, 'kind', 'collectionType');\n },\n\n get uid() {\n return state.uid;\n },\n\n get writable() {\n return _.get(state, 'plugin') !== 'admin';\n },\n\n setUID(val: Internal.UID.ContentType) {\n modified = true;\n\n state.uid = val;\n return this;\n },\n\n setDir(val: string) {\n modified = true;\n\n state.dir = val;\n return this;\n },\n\n get schema() {\n return _.cloneDeep(state.schema);\n },\n\n setSchema(val: Struct.ContentTypeSchema) {\n modified = true;\n\n state.schema = _.cloneDeep(val);\n return this;\n },\n\n // get a particular path inside the schema\n get(path: string[]) {\n return _.get(state.schema, path);\n },\n\n // set a particular path inside the schema\n set(path: string[] | string, val: unknown) {\n if (!state.schema) return this;\n\n modified = true;\n\n const value = _.defaultTo(val, _.get(state.schema, path));\n _.set(state.schema, path, value);\n\n return this;\n },\n\n // delete a particular path inside the schema\n unset(path: string[]) {\n modified = true;\n\n _.unset(state.schema, path);\n\n return this;\n },\n\n delete() {\n deleted = true;\n return this;\n },\n\n getAttribute(key: string) {\n return this.get(['attributes', key]);\n },\n\n setAttribute(key: string, attribute: any) {\n return this.set(['attributes', key], attribute);\n },\n\n deleteAttribute(key: string) {\n return this.unset(['attributes', key]);\n },\n\n setAttributes(newAttributes: Struct.SchemaAttributes) {\n if (!this.schema) return this;\n\n // delete old configurable attributes\n for (const key in this.schema.attributes) {\n if (isConfigurable((this.schema.attributes as any)[key])) {\n this.deleteAttribute(key);\n }\n }\n\n // set new Attributes\n for (const key of Object.keys(newAttributes)) {\n this.setAttribute(key, newAttributes[key as keyof Struct.SchemaAttributes]);\n }\n\n return this;\n },\n\n removeContentType(uid: Internal.UID.ContentType) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attribute = attributes[key];\n\n if (attribute.target === uid) {\n this.deleteAttribute(key);\n }\n });\n\n return this;\n },\n\n // utils\n removeComponent(uid: Internal.UID.Component) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attr = attributes[key];\n\n if (attr.type === 'component' && attr.component === uid) {\n this.deleteAttribute(key);\n }\n\n if (\n attr.type === 'dynamiczone' &&\n Array.isArray(attr.components) &&\n attr.components.includes(uid)\n ) {\n const updatedComponentList = attributes[key].components.filter(\n (val: string) => val !== uid\n );\n this.set(['attributes', key, 'components'], updatedComponentList);\n }\n });\n\n return this;\n },\n\n updateComponent(uid: Internal.UID.Component, newUID: Internal.UID.Component) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attr = attributes[key];\n\n if (attr.type === 'component' && attr.component === uid) {\n this.set(['attributes', key, 'component'], newUID);\n }\n\n if (\n attr.type === 'dynamiczone' &&\n Array.isArray(attr.components) &&\n attr.components.includes(uid)\n ) {\n const updatedComponentList = attr.components.map((val: string) =>\n val === uid ? newUID : val\n );\n\n this.set(['attributes', key, 'components'], updatedComponentList);\n }\n });\n\n return this;\n },\n\n // save the schema to disk\n async flush() {\n if (!this.writable) {\n return;\n }\n\n const initialPath = path.join(initialState.dir, initialState.filename);\n const filePath = path.join(state.dir, state.filename);\n\n if (deleted) {\n await fse.remove(initialPath);\n\n const list = await fse.readdir(initialState.dir);\n if (list.length === 0) {\n await fse.remove(initialState.dir);\n }\n\n return;\n }\n\n if (modified) {\n if (!state.schema) return Promise.resolve();\n\n await fse.ensureFile(filePath);\n\n await fse.writeJSON(\n filePath,\n {\n kind: state.schema.kind,\n collectionName: state.schema.collectionName,\n info: state.schema.info,\n options: state.schema.options,\n pluginOptions: state.schema.pluginOptions,\n attributes: state.schema.attributes,\n config: (state.schema as any).config,\n indexes: (state.schema as Struct.ContentTypeSchema).indexes,\n foreignKeys: (state.schema as Struct.ContentTypeSchema).foreignKeys,\n },\n { spaces: 2 }\n );\n\n // remove from oldPath\n if (initialPath !== filePath) {\n await fse.remove(initialPath);\n\n const list = await fse.readdir(initialState.dir);\n if (list.length === 0) {\n await fse.remove(initialState.dir);\n }\n }\n\n return;\n }\n\n return Promise.resolve();\n },\n\n // reset the schema to its initial value\n async rollback() {\n if (!this.writable) {\n return;\n }\n\n const initialPath = path.join(initialState.dir, initialState.filename);\n const filePath = path.join(state.dir, state.filename);\n\n // it was a creation so it needs to be deleted\n if (!initialState.uid) {\n await fse.remove(filePath);\n\n const list = await fse.readdir(state.dir);\n if (list.length === 0) {\n await fse.remove(state.dir);\n }\n return;\n }\n\n if (modified || deleted) {\n await fse.ensureFile(initialPath);\n await fse.writeJSON(initialPath, initialState.schema, { spaces: 2 });\n\n // remove\n if (initialPath !== filePath) {\n await fse.remove(filePath);\n\n const list = await fse.readdir(state.dir);\n if (list.length === 0) {\n await fse.remove(state.dir);\n }\n }\n }\n\n return Promise.resolve();\n },\n };\n}\n"],"names":["createSchemaHandler","infos","category","modelName","plugin","uid","dir","filename","schema","initialState","info","options","attributes","state","_","cloneDeep","Object","freeze","modified","deleted","kind","get","writable","setUID","val","setDir","setSchema","path","set","value","defaultTo","unset","delete","getAttribute","key","setAttribute","attribute","deleteAttribute","setAttributes","newAttributes","isConfigurable","keys","removeContentType","forEach","target","removeComponent","attr","type","component","Array","isArray","components","includes","updatedComponentList","filter","updateComponent","newUID","map","flush","initialPath","join","filePath","fse","remove","list","readdir","length","Promise","resolve","ensureFile","writeJSON","collectionName","pluginOptions","config","indexes","foreignKeys","spaces","rollback"],"mappings":"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"}
@@ -193,7 +193,9 @@ function createSchemaHandler(infos) {
193
193
  options: state.schema.options,
194
194
  pluginOptions: state.schema.pluginOptions,
195
195
  attributes: state.schema.attributes,
196
- config: state.schema.config
196
+ config: state.schema.config,
197
+ indexes: state.schema.indexes,
198
+ foreignKeys: state.schema.foreignKeys
197
199
  }, {
198
200
  spaces: 2
199
201
  });
@@ -1 +1 @@
1
- {"version":3,"file":"schema-handler.mjs","sources":["../../../../server/src/services/schema-builder/schema-handler.ts"],"sourcesContent":["import path from 'path';\nimport type { Internal, Struct } from '@strapi/types';\nimport fse from 'fs-extra';\nimport _ from 'lodash';\n\nimport { isConfigurable } from '../../utils/attributes';\n\nexport type Infos = {\n category?: string;\n modelName?: string;\n plugin?: string;\n uid?: Internal.UID.ContentType;\n dir: string;\n filename: string;\n schema?: Struct.ContentTypeSchema;\n};\n\nexport type SchemaHandler = ReturnType<typeof createSchemaHandler>;\n\nexport default function createSchemaHandler(infos: Infos) {\n const { category, modelName, plugin, uid, dir, filename, schema } = infos;\n\n const initialState = {\n modelName,\n plugin,\n category,\n uid,\n dir,\n filename,\n schema:\n schema ||\n ({\n info: {},\n options: {},\n attributes: {},\n } as Struct.ContentTypeSchema),\n };\n\n const state = _.cloneDeep(initialState);\n\n // always keep it the same to rollback\n Object.freeze(initialState.schema);\n\n let modified = false;\n let deleted = false;\n\n return {\n get modelName() {\n return initialState.modelName;\n },\n\n get plugin() {\n return initialState.plugin;\n },\n\n get category() {\n return initialState.category;\n },\n\n get kind() {\n return _.get(state.schema, 'kind', 'collectionType');\n },\n\n get uid() {\n return state.uid;\n },\n\n get writable() {\n return _.get(state, 'plugin') !== 'admin';\n },\n\n setUID(val: Internal.UID.ContentType) {\n modified = true;\n\n state.uid = val;\n return this;\n },\n\n setDir(val: string) {\n modified = true;\n\n state.dir = val;\n return this;\n },\n\n get schema() {\n return _.cloneDeep(state.schema);\n },\n\n setSchema(val: Struct.ContentTypeSchema) {\n modified = true;\n\n state.schema = _.cloneDeep(val);\n return this;\n },\n\n // get a particular path inside the schema\n get(path: string[]) {\n return _.get(state.schema, path);\n },\n\n // set a particular path inside the schema\n set(path: string[] | string, val: unknown) {\n if (!state.schema) return this;\n\n modified = true;\n\n const value = _.defaultTo(val, _.get(state.schema, path));\n _.set(state.schema, path, value);\n\n return this;\n },\n\n // delete a particular path inside the schema\n unset(path: string[]) {\n modified = true;\n\n _.unset(state.schema, path);\n\n return this;\n },\n\n delete() {\n deleted = true;\n return this;\n },\n\n getAttribute(key: string) {\n return this.get(['attributes', key]);\n },\n\n setAttribute(key: string, attribute: any) {\n return this.set(['attributes', key], attribute);\n },\n\n deleteAttribute(key: string) {\n return this.unset(['attributes', key]);\n },\n\n setAttributes(newAttributes: Struct.SchemaAttributes) {\n if (!this.schema) return this;\n\n // delete old configurable attributes\n for (const key in this.schema.attributes) {\n if (isConfigurable((this.schema.attributes as any)[key])) {\n this.deleteAttribute(key);\n }\n }\n\n // set new Attributes\n for (const key of Object.keys(newAttributes)) {\n this.setAttribute(key, newAttributes[key as keyof Struct.SchemaAttributes]);\n }\n\n return this;\n },\n\n removeContentType(uid: Internal.UID.ContentType) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attribute = attributes[key];\n\n if (attribute.target === uid) {\n this.deleteAttribute(key);\n }\n });\n\n return this;\n },\n\n // utils\n removeComponent(uid: Internal.UID.Component) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attr = attributes[key];\n\n if (attr.type === 'component' && attr.component === uid) {\n this.deleteAttribute(key);\n }\n\n if (\n attr.type === 'dynamiczone' &&\n Array.isArray(attr.components) &&\n attr.components.includes(uid)\n ) {\n const updatedComponentList = attributes[key].components.filter(\n (val: string) => val !== uid\n );\n this.set(['attributes', key, 'components'], updatedComponentList);\n }\n });\n\n return this;\n },\n\n updateComponent(uid: Internal.UID.Component, newUID: Internal.UID.Component) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attr = attributes[key];\n\n if (attr.type === 'component' && attr.component === uid) {\n this.set(['attributes', key, 'component'], newUID);\n }\n\n if (\n attr.type === 'dynamiczone' &&\n Array.isArray(attr.components) &&\n attr.components.includes(uid)\n ) {\n const updatedComponentList = attr.components.map((val: string) =>\n val === uid ? newUID : val\n );\n\n this.set(['attributes', key, 'components'], updatedComponentList);\n }\n });\n\n return this;\n },\n\n // save the schema to disk\n async flush() {\n if (!this.writable) {\n return;\n }\n\n const initialPath = path.join(initialState.dir, initialState.filename);\n const filePath = path.join(state.dir, state.filename);\n\n if (deleted) {\n await fse.remove(initialPath);\n\n const list = await fse.readdir(initialState.dir);\n if (list.length === 0) {\n await fse.remove(initialState.dir);\n }\n\n return;\n }\n\n if (modified) {\n if (!state.schema) return Promise.resolve();\n\n await fse.ensureFile(filePath);\n\n await fse.writeJSON(\n filePath,\n {\n kind: state.schema.kind,\n collectionName: state.schema.collectionName,\n info: state.schema.info,\n options: state.schema.options,\n pluginOptions: state.schema.pluginOptions,\n attributes: state.schema.attributes,\n config: (state.schema as any).config,\n },\n { spaces: 2 }\n );\n\n // remove from oldPath\n if (initialPath !== filePath) {\n await fse.remove(initialPath);\n\n const list = await fse.readdir(initialState.dir);\n if (list.length === 0) {\n await fse.remove(initialState.dir);\n }\n }\n\n return;\n }\n\n return Promise.resolve();\n },\n\n // reset the schema to its initial value\n async rollback() {\n if (!this.writable) {\n return;\n }\n\n const initialPath = path.join(initialState.dir, initialState.filename);\n const filePath = path.join(state.dir, state.filename);\n\n // it was a creation so it needs to be deleted\n if (!initialState.uid) {\n await fse.remove(filePath);\n\n const list = await fse.readdir(state.dir);\n if (list.length === 0) {\n await fse.remove(state.dir);\n }\n return;\n }\n\n if (modified || deleted) {\n await fse.ensureFile(initialPath);\n await fse.writeJSON(initialPath, initialState.schema, { spaces: 2 });\n\n // remove\n if (initialPath !== filePath) {\n await fse.remove(filePath);\n\n const list = await fse.readdir(state.dir);\n if (list.length === 0) {\n await fse.remove(state.dir);\n }\n }\n }\n\n return Promise.resolve();\n },\n };\n}\n"],"names":["createSchemaHandler","infos","category","modelName","plugin","uid","dir","filename","schema","initialState","info","options","attributes","state","_","cloneDeep","Object","freeze","modified","deleted","kind","get","writable","setUID","val","setDir","setSchema","path","set","value","defaultTo","unset","delete","getAttribute","key","setAttribute","attribute","deleteAttribute","setAttributes","newAttributes","isConfigurable","keys","removeContentType","forEach","target","removeComponent","attr","type","component","Array","isArray","components","includes","updatedComponentList","filter","updateComponent","newUID","map","flush","initialPath","join","filePath","fse","remove","list","readdir","length","Promise","resolve","ensureFile","writeJSON","collectionName","pluginOptions","config","spaces","rollback"],"mappings":"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"}
1
+ {"version":3,"file":"schema-handler.mjs","sources":["../../../../server/src/services/schema-builder/schema-handler.ts"],"sourcesContent":["import path from 'path';\nimport type { Internal, Struct } from '@strapi/types';\nimport fse from 'fs-extra';\nimport _ from 'lodash';\n\nimport { isConfigurable } from '../../utils/attributes';\n\nexport type Infos = {\n category?: string;\n modelName?: string;\n plugin?: string;\n uid?: Internal.UID.ContentType;\n dir: string;\n filename: string;\n schema?: Struct.ContentTypeSchema;\n};\n\nexport type SchemaHandler = ReturnType<typeof createSchemaHandler>;\n\nexport default function createSchemaHandler(infos: Infos) {\n const { category, modelName, plugin, uid, dir, filename, schema } = infos;\n\n const initialState = {\n modelName,\n plugin,\n category,\n uid,\n dir,\n filename,\n schema:\n schema ||\n ({\n info: {},\n options: {},\n attributes: {},\n } as Struct.ContentTypeSchema),\n };\n\n const state = _.cloneDeep(initialState);\n\n // always keep it the same to rollback\n Object.freeze(initialState.schema);\n\n let modified = false;\n let deleted = false;\n\n return {\n get modelName() {\n return initialState.modelName;\n },\n\n get plugin() {\n return initialState.plugin;\n },\n\n get category() {\n return initialState.category;\n },\n\n get kind() {\n return _.get(state.schema, 'kind', 'collectionType');\n },\n\n get uid() {\n return state.uid;\n },\n\n get writable() {\n return _.get(state, 'plugin') !== 'admin';\n },\n\n setUID(val: Internal.UID.ContentType) {\n modified = true;\n\n state.uid = val;\n return this;\n },\n\n setDir(val: string) {\n modified = true;\n\n state.dir = val;\n return this;\n },\n\n get schema() {\n return _.cloneDeep(state.schema);\n },\n\n setSchema(val: Struct.ContentTypeSchema) {\n modified = true;\n\n state.schema = _.cloneDeep(val);\n return this;\n },\n\n // get a particular path inside the schema\n get(path: string[]) {\n return _.get(state.schema, path);\n },\n\n // set a particular path inside the schema\n set(path: string[] | string, val: unknown) {\n if (!state.schema) return this;\n\n modified = true;\n\n const value = _.defaultTo(val, _.get(state.schema, path));\n _.set(state.schema, path, value);\n\n return this;\n },\n\n // delete a particular path inside the schema\n unset(path: string[]) {\n modified = true;\n\n _.unset(state.schema, path);\n\n return this;\n },\n\n delete() {\n deleted = true;\n return this;\n },\n\n getAttribute(key: string) {\n return this.get(['attributes', key]);\n },\n\n setAttribute(key: string, attribute: any) {\n return this.set(['attributes', key], attribute);\n },\n\n deleteAttribute(key: string) {\n return this.unset(['attributes', key]);\n },\n\n setAttributes(newAttributes: Struct.SchemaAttributes) {\n if (!this.schema) return this;\n\n // delete old configurable attributes\n for (const key in this.schema.attributes) {\n if (isConfigurable((this.schema.attributes as any)[key])) {\n this.deleteAttribute(key);\n }\n }\n\n // set new Attributes\n for (const key of Object.keys(newAttributes)) {\n this.setAttribute(key, newAttributes[key as keyof Struct.SchemaAttributes]);\n }\n\n return this;\n },\n\n removeContentType(uid: Internal.UID.ContentType) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attribute = attributes[key];\n\n if (attribute.target === uid) {\n this.deleteAttribute(key);\n }\n });\n\n return this;\n },\n\n // utils\n removeComponent(uid: Internal.UID.Component) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attr = attributes[key];\n\n if (attr.type === 'component' && attr.component === uid) {\n this.deleteAttribute(key);\n }\n\n if (\n attr.type === 'dynamiczone' &&\n Array.isArray(attr.components) &&\n attr.components.includes(uid)\n ) {\n const updatedComponentList = attributes[key].components.filter(\n (val: string) => val !== uid\n );\n this.set(['attributes', key, 'components'], updatedComponentList);\n }\n });\n\n return this;\n },\n\n updateComponent(uid: Internal.UID.Component, newUID: Internal.UID.Component) {\n if (!state.schema) return this;\n\n const attributes = state.schema.attributes as Record<string, any>;\n\n Object.keys(attributes).forEach((key) => {\n const attr = attributes[key];\n\n if (attr.type === 'component' && attr.component === uid) {\n this.set(['attributes', key, 'component'], newUID);\n }\n\n if (\n attr.type === 'dynamiczone' &&\n Array.isArray(attr.components) &&\n attr.components.includes(uid)\n ) {\n const updatedComponentList = attr.components.map((val: string) =>\n val === uid ? newUID : val\n );\n\n this.set(['attributes', key, 'components'], updatedComponentList);\n }\n });\n\n return this;\n },\n\n // save the schema to disk\n async flush() {\n if (!this.writable) {\n return;\n }\n\n const initialPath = path.join(initialState.dir, initialState.filename);\n const filePath = path.join(state.dir, state.filename);\n\n if (deleted) {\n await fse.remove(initialPath);\n\n const list = await fse.readdir(initialState.dir);\n if (list.length === 0) {\n await fse.remove(initialState.dir);\n }\n\n return;\n }\n\n if (modified) {\n if (!state.schema) return Promise.resolve();\n\n await fse.ensureFile(filePath);\n\n await fse.writeJSON(\n filePath,\n {\n kind: state.schema.kind,\n collectionName: state.schema.collectionName,\n info: state.schema.info,\n options: state.schema.options,\n pluginOptions: state.schema.pluginOptions,\n attributes: state.schema.attributes,\n config: (state.schema as any).config,\n indexes: (state.schema as Struct.ContentTypeSchema).indexes,\n foreignKeys: (state.schema as Struct.ContentTypeSchema).foreignKeys,\n },\n { spaces: 2 }\n );\n\n // remove from oldPath\n if (initialPath !== filePath) {\n await fse.remove(initialPath);\n\n const list = await fse.readdir(initialState.dir);\n if (list.length === 0) {\n await fse.remove(initialState.dir);\n }\n }\n\n return;\n }\n\n return Promise.resolve();\n },\n\n // reset the schema to its initial value\n async rollback() {\n if (!this.writable) {\n return;\n }\n\n const initialPath = path.join(initialState.dir, initialState.filename);\n const filePath = path.join(state.dir, state.filename);\n\n // it was a creation so it needs to be deleted\n if (!initialState.uid) {\n await fse.remove(filePath);\n\n const list = await fse.readdir(state.dir);\n if (list.length === 0) {\n await fse.remove(state.dir);\n }\n return;\n }\n\n if (modified || deleted) {\n await fse.ensureFile(initialPath);\n await fse.writeJSON(initialPath, initialState.schema, { spaces: 2 });\n\n // remove\n if (initialPath !== filePath) {\n await fse.remove(filePath);\n\n const list = await fse.readdir(state.dir);\n if (list.length === 0) {\n await fse.remove(state.dir);\n }\n }\n }\n\n return Promise.resolve();\n },\n };\n}\n"],"names":["createSchemaHandler","infos","category","modelName","plugin","uid","dir","filename","schema","initialState","info","options","attributes","state","_","cloneDeep","Object","freeze","modified","deleted","kind","get","writable","setUID","val","setDir","setSchema","path","set","value","defaultTo","unset","delete","getAttribute","key","setAttribute","attribute","deleteAttribute","setAttributes","newAttributes","isConfigurable","keys","removeContentType","forEach","target","removeComponent","attr","type","component","Array","isArray","components","includes","updatedComponentList","filter","updateComponent","newUID","map","flush","initialPath","join","filePath","fse","remove","list","readdir","length","Promise","resolve","ensureFile","writeJSON","collectionName","pluginOptions","config","indexes","foreignKeys","spaces","rollback"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-handler.d.ts","sourceRoot":"","sources":["../../../../../server/src/services/schema-builder/schema-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAMtD,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,iBAAiB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEnE,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,KAAK,EAAE,KAAK;;;;;;;gBAoDxC,QAAQ,CAAC,GAAG,CAAC,WAAW;gBAOxB,MAAM;;mBAWH,MAAM,CAAC,iBAAiB;cAQ7B,MAAM,EAAE;cAKR,MAAM,EAAE,GAAG,MAAM,OAAO,OAAO;gBAY7B,MAAM,EAAE;;sBAaF,MAAM;sBAIN,MAAM,aAAa,GAAG;yBAInB,MAAM;iCAIE,MAAM,CAAC,gBAAgB;2BAkB7B,QAAQ,CAAC,GAAG,CAAC,WAAW;yBAiB1B,QAAQ,CAAC,GAAG,CAAC,SAAS;yBA2BtB,QAAQ,CAAC,GAAG,CAAC,SAAS,UAAU,QAAQ,CAAC,GAAG,CAAC,SAAS;;;EAyH9E"}
1
+ {"version":3,"file":"schema-handler.d.ts","sourceRoot":"","sources":["../../../../../server/src/services/schema-builder/schema-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAMtD,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,iBAAiB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEnE,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,KAAK,EAAE,KAAK;;;;;;;gBAoDxC,QAAQ,CAAC,GAAG,CAAC,WAAW;gBAOxB,MAAM;;mBAWH,MAAM,CAAC,iBAAiB;cAQ7B,MAAM,EAAE;cAKR,MAAM,EAAE,GAAG,MAAM,OAAO,OAAO;gBAY7B,MAAM,EAAE;;sBAaF,MAAM;sBAIN,MAAM,aAAa,GAAG;yBAInB,MAAM;iCAIE,MAAM,CAAC,gBAAgB;2BAkB7B,QAAQ,CAAC,GAAG,CAAC,WAAW;yBAiB1B,QAAQ,CAAC,GAAG,CAAC,SAAS;yBA2BtB,QAAQ,CAAC,GAAG,CAAC,SAAS,UAAU,QAAQ,CAAC,GAAG,CAAC,SAAS;;;EA2H9E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/content-type-builder",
3
- "version": "5.53.0",
3
+ "version": "5.54.0",
4
4
  "description": "Create and manage content types",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -66,7 +66,7 @@
66
66
  "watch": "run -T rollup -c -w"
67
67
  },
68
68
  "dependencies": {
69
- "@ai-sdk/react": "2.0.212",
69
+ "@ai-sdk/react": "3.0.280",
70
70
  "@dnd-kit/core": "6.3.1",
71
71
  "@dnd-kit/modifiers": "9.0.0",
72
72
  "@dnd-kit/sortable": "10.0.0",
@@ -74,10 +74,10 @@
74
74
  "@reduxjs/toolkit": "1.9.7",
75
75
  "@sindresorhus/slugify": "1.1.0",
76
76
  "@strapi/design-system": "2.2.4",
77
- "@strapi/generators": "5.53.0",
77
+ "@strapi/generators": "5.54.0",
78
78
  "@strapi/icons": "2.2.4",
79
- "@strapi/utils": "5.53.0",
80
- "ai": "5.0.210",
79
+ "@strapi/utils": "5.54.0",
80
+ "ai": "6.0.277",
81
81
  "date-fns": "2.30.0",
82
82
  "fs-extra": "11.3.4",
83
83
  "immer": "9.0.21",
@@ -94,8 +94,8 @@
94
94
  "zod": "4.4.3"
95
95
  },
96
96
  "devDependencies": {
97
- "@strapi/admin": "5.53.0",
98
- "@strapi/types": "5.53.0",
97
+ "@strapi/admin": "5.54.0",
98
+ "@strapi/types": "5.54.0",
99
99
  "@testing-library/dom": "10.4.1",
100
100
  "@testing-library/jest-dom": "6.9.1",
101
101
  "@testing-library/react": "16.3.2",
@@ -115,7 +115,7 @@
115
115
  "react-router-dom": "6.30.4",
116
116
  "styled-components": "6.4.1",
117
117
  "vitest": "catalog:",
118
- "vitest-config": "5.53.0"
118
+ "vitest-config": "5.54.0"
119
119
  },
120
120
  "peerDependencies": {
121
121
  "@strapi/admin": "^5.0.0",