@strapi/content-type-builder 5.56.0 → 5.57.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.
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js +117 -13
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs +118 -13
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.js +31 -19
- package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs +31 -19
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.js +166 -6
- package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.mjs +165 -7
- package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
- package/dist/admin/components/DataManager/RenameMigrationModal.js +285 -0
- package/dist/admin/components/DataManager/RenameMigrationModal.js.map +1 -0
- package/dist/admin/components/DataManager/RenameMigrationModal.mjs +257 -0
- package/dist/admin/components/DataManager/RenameMigrationModal.mjs.map +1 -0
- package/dist/admin/components/DataManager/reducer.js +107 -2
- package/dist/admin/components/DataManager/reducer.js.map +1 -1
- package/dist/admin/components/DataManager/reducer.mjs +106 -2
- package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.js +8 -1
- package/dist/admin/components/DataManager/utils/cleanData.js.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.mjs +8 -1
- package/dist/admin/components/DataManager/utils/cleanData.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/groupRenameChains.js +86 -0
- package/dist/admin/components/DataManager/utils/groupRenameChains.js.map +1 -0
- package/dist/admin/components/DataManager/utils/groupRenameChains.mjs +84 -0
- package/dist/admin/components/DataManager/utils/groupRenameChains.mjs.map +1 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.js +29 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.js.map +1 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.mjs +27 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.mjs.map +1 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.js +35 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.js.map +1 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.mjs +33 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.mjs.map +1 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.js +48 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.js.map +1 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.mjs +45 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.mjs.map +1 -0
- package/dist/admin/components/FormModal/FormModal.js +142 -8
- package/dist/admin/components/FormModal/FormModal.js.map +1 -1
- package/dist/admin/components/FormModal/FormModal.mjs +143 -9
- package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.js +6 -5
- package/dist/admin/components/FormModal/attributes/validation/common.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.mjs +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.mjs.map +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.js +10 -7
- package/dist/admin/components/FormModal/component/createComponentSchema.js.map +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.mjs +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.mjs.map +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.js +24 -21
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.js.map +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.mjs +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.mjs.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.js +3 -2
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.js.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.mjs +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.js +73 -0
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.js.map +1 -0
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.mjs +70 -0
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.mjs.map +1 -0
- package/dist/admin/src/components/AIChat/lib/transforms/schemas/toCTB.d.ts +4 -3
- package/dist/admin/src/components/AIChat/lib/types/schema.d.ts +6 -1
- package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +28 -2
- package/dist/admin/src/components/DataManager/RenameMigrationModal.d.ts +73 -0
- package/dist/admin/src/components/DataManager/reducer.d.ts +17 -2
- package/dist/admin/src/components/DataManager/utils/cleanData.d.ts +16 -0
- package/dist/admin/src/components/DataManager/utils/groupRenameChains.d.ts +31 -0
- package/dist/admin/src/components/DataManager/utils/isStorageCompatibleRename.d.ts +10 -0
- package/dist/admin/src/components/DataManager/utils/resolveAfterEditRenameConsent.d.ts +24 -0
- package/dist/admin/src/components/DataManager/utils/splitChainsByInheritedConsent.d.ts +26 -0
- package/dist/admin/src/components/FormModal/utils/getRenameStorageChange.d.ts +40 -0
- package/dist/admin/src/types.d.ts +23 -0
- package/dist/admin/translations/en.json.js +12 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +12 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/config.js +24 -3
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs +21 -3
- package/dist/server/config.mjs.map +1 -1
- package/dist/server/controllers/schema.js +2 -2
- package/dist/server/controllers/schema.js.map +1 -1
- package/dist/server/controllers/schema.mjs +1 -1
- package/dist/server/controllers/schema.mjs.map +1 -1
- package/dist/server/controllers/validation/content-type.js +9 -11
- package/dist/server/controllers/validation/content-type.js.map +1 -1
- package/dist/server/controllers/validation/content-type.mjs +7 -9
- package/dist/server/controllers/validation/content-type.mjs.map +1 -1
- package/dist/server/controllers/validation/model-schema.js +2 -3
- package/dist/server/controllers/validation/model-schema.js.map +1 -1
- package/dist/server/controllers/validation/model-schema.mjs +1 -2
- package/dist/server/controllers/validation/model-schema.mjs.map +1 -1
- package/dist/server/controllers/validation/relations.js +1 -2
- package/dist/server/controllers/validation/relations.js.map +1 -1
- package/dist/server/controllers/validation/relations.mjs +1 -2
- package/dist/server/controllers/validation/relations.mjs.map +1 -1
- package/dist/server/controllers/validation/schema.js +42 -23
- package/dist/server/controllers/validation/schema.js.map +1 -1
- package/dist/server/controllers/validation/schema.mjs +43 -24
- package/dist/server/controllers/validation/schema.mjs.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/services/content-types.js +1 -2
- package/dist/server/services/content-types.js.map +1 -1
- package/dist/server/services/content-types.mjs +2 -3
- package/dist/server/services/content-types.mjs.map +1 -1
- package/dist/server/services/migration-builder/index.js +580 -0
- package/dist/server/services/migration-builder/index.js.map +1 -0
- package/dist/server/services/migration-builder/index.mjs +573 -0
- package/dist/server/services/migration-builder/index.mjs.map +1 -0
- package/dist/server/services/schema-builder/content-type-builder.js +31 -1
- package/dist/server/services/schema-builder/content-type-builder.js.map +1 -1
- package/dist/server/services/schema-builder/content-type-builder.mjs +31 -1
- package/dist/server/services/schema-builder/content-type-builder.mjs.map +1 -1
- package/dist/server/services/schema-mutation.js +30 -2
- package/dist/server/services/schema-mutation.js.map +1 -1
- package/dist/server/services/schema-mutation.mjs +10 -2
- package/dist/server/services/schema-mutation.mjs.map +1 -1
- package/dist/server/services/schema.js +259 -15
- package/dist/server/services/schema.js.map +1 -1
- package/dist/server/services/schema.mjs +252 -9
- package/dist/server/services/schema.mjs.map +1 -1
- package/dist/server/src/config.d.ts +23 -2
- package/dist/server/src/config.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/content-type.d.ts +0 -1
- package/dist/server/src/controllers/validation/content-type.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/schema.d.ts +28 -0
- package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +10 -2
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/content-types.d.ts.map +1 -1
- package/dist/server/src/services/migration-builder/index.d.ts +83 -0
- package/dist/server/src/services/migration-builder/index.d.ts.map +1 -0
- package/dist/server/src/services/schema-builder/content-type-builder.d.ts.map +1 -1
- package/dist/server/src/services/schema-mutation.d.ts +4 -2
- package/dist/server/src/services/schema-mutation.d.ts.map +1 -1
- package/dist/server/src/services/schema.d.ts +19 -0
- package/dist/server/src/services/schema.d.ts.map +1 -1
- package/package.json +7 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.mjs","sources":["../../../../../../admin/src/components/FormModal/attributes/validation/common.ts"],"sourcesContent":["import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport { snakeCase } from 'lodash/fp';\nimport toNumber from 'lodash/toNumber';\nimport * as yup from 'yup';\n\nimport { getTrad } from '../../../../utils/getTrad';\n\nconst NAME_REGEX = /^[A-Za-z][_0-9A-Za-z]*$/;\n\nconst alreadyUsedAttributeNames = (\n usedNames: Array<string>\n): yup.TestConfig<string | undefined, Record<string, unknown>> => {\n return {\n name: 'attributeNameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value: string | undefined) {\n if (!value) {\n return false;\n }\n const snakeCaseKey = snakeCase(value);\n\n return !usedNames.some((existingKey) => {\n return snakeCase(existingKey) === snakeCaseKey;\n });\n },\n };\n};\n\nconst getUsedContentTypeAttributeNames = (\n ctShema: { attributes?: Record<string, unknown> },\n isEdition: boolean,\n attributeNameToEdit: string\n) => {\n const attributes = ctShema?.attributes ?? {};\n\n return Object.keys(attributes).filter((attr) => {\n if (isEdition) {\n return attr !== attributeNameToEdit;\n }\n\n return true;\n });\n};\n\nconst isNameAllowed = (\n reservedNames: Array<string>\n): yup.TestConfig<string | undefined, Record<string, unknown>> => {\n return {\n name: 'forbiddenAttributeName',\n message: getTrad('error.attributeName.reserved-name'),\n test(value: string | undefined) {\n if (!value) {\n return false;\n }\n const snakeCaseKey = snakeCase(value);\n\n return !reservedNames.some((existingKey) => {\n return snakeCase(existingKey) === snakeCaseKey;\n });\n },\n };\n};\n\nconst validators = {\n default: () => yup.string().nullable(),\n max: () => yup.number().integer().nullable(),\n min: () =>\n yup\n .number()\n .integer()\n .when('max', (max, schema) => {\n if (max) {\n return schema.max(max, getTrad('error.validation.minSupMax'));\n }\n\n return schema;\n })\n .nullable(),\n maxLength: () => yup.number().integer().positive(getTrad('error.validation.positive')).nullable(),\n maxLengthString: () =>\n yup\n .number()\n .integer()\n .positive(getTrad('error.validation.positive'))\n .max(255, 'Maximum length for short text fields is 255 characters')\n .nullable(),\n minLength: () =>\n yup\n .number()\n .integer()\n .min(1)\n .when('maxLength', (maxLength, schema) => {\n if (maxLength) {\n return schema.max(maxLength, getTrad('error.validation.minSupMax'));\n }\n\n return schema;\n })\n .nullable(),\n name(usedNames: Array<string>, reservedNames: Array<string>) {\n return yup\n .string()\n .test(alreadyUsedAttributeNames(usedNames))\n .test(isNameAllowed(reservedNames))\n .matches(NAME_REGEX, errorsTrads.regex.id)\n .required(errorsTrads.required.id);\n },\n required: () => yup.boolean(),\n type: () => yup.string().required(errorsTrads.required.id),\n unique: () => yup.boolean().nullable(),\n};\n\nconst createTextShape = (usedAttributeNames: Array<string>, reservedNames: Array<string>) => {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n default: validators.default(),\n unique: validators.unique(),\n required: validators.required(),\n maxLength: validators.maxLength(),\n minLength: validators.minLength(),\n regex: yup\n .string()\n .test({\n name: 'isValidRegExpPattern',\n message: getTrad('error.validation.regex'),\n test(value) {\n try {\n new RegExp(value || '');\n return true;\n } catch {\n return false;\n }\n },\n })\n .nullable(),\n };\n\n return shape;\n};\n\nconst createStringShape = (usedAttributeNames: Array<string>, reservedNames: Array<string>) => {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n default: validators.default(),\n unique: validators.unique(),\n required: validators.required(),\n maxLength: validators.maxLengthString(),\n minLength: validators.minLength(),\n regex: yup\n .string()\n .test({\n name: 'isValidRegExpPattern',\n message: getTrad('error.validation.regex'),\n test(value) {\n try {\n new RegExp(value || '');\n return true;\n } catch {\n return false;\n }\n },\n })\n .nullable(),\n };\n\n return shape;\n};\n\ntype GenericIsMinSuperiorThanMax<T extends (string | null) | number> = yup.TestConfig<\n T | undefined,\n Record<string, unknown>\n>;\n\nconst isMinSuperiorThanMax = <\n T extends (string | null) | number,\n>(): GenericIsMinSuperiorThanMax<T> => ({\n name: 'isMinSuperiorThanMax',\n message: getTrad('error.validation.minSupMax'),\n test(min: T | undefined) {\n if (!min) {\n return true;\n }\n\n const { max } = this.parent as { max?: T };\n\n if (!max) {\n return true;\n }\n\n if (Number.isNaN(toNumber(min))) {\n return true;\n }\n\n return toNumber(max) >= toNumber(min);\n },\n});\n\nexport {\n alreadyUsedAttributeNames,\n createStringShape,\n createTextShape,\n getUsedContentTypeAttributeNames,\n isMinSuperiorThanMax,\n isNameAllowed,\n NAME_REGEX,\n validators,\n};\n"],"names":["NAME_REGEX","alreadyUsedAttributeNames","usedNames","name","message","errorsTrads","unique","id","test","value","snakeCaseKey","snakeCase","some","existingKey","isNameAllowed","reservedNames","getTrad","validators","default","yup","string","nullable","max","number","integer","min","when","schema","maxLength","positive","maxLengthString","minLength","matches","regex","required","boolean","type","createTextShape","usedAttributeNames","shape","RegExp","createStringShape","isMinSuperiorThanMax","parent","Number","isNaN","toNumber"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"common.mjs","sources":["../../../../../../admin/src/components/FormModal/attributes/validation/common.ts"],"sourcesContent":["import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport snakeCase from 'lodash/snakeCase';\nimport toNumber from 'lodash/toNumber';\nimport * as yup from 'yup';\n\nimport { getTrad } from '../../../../utils/getTrad';\n\nconst NAME_REGEX = /^[A-Za-z][_0-9A-Za-z]*$/;\n\nconst alreadyUsedAttributeNames = (\n usedNames: Array<string>\n): yup.TestConfig<string | undefined, Record<string, unknown>> => {\n return {\n name: 'attributeNameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value: string | undefined) {\n if (!value) {\n return false;\n }\n const snakeCaseKey = snakeCase(value);\n\n return !usedNames.some((existingKey) => {\n return snakeCase(existingKey) === snakeCaseKey;\n });\n },\n };\n};\n\nconst getUsedContentTypeAttributeNames = (\n ctShema: { attributes?: Record<string, unknown> },\n isEdition: boolean,\n attributeNameToEdit: string\n) => {\n const attributes = ctShema?.attributes ?? {};\n\n return Object.keys(attributes).filter((attr) => {\n if (isEdition) {\n return attr !== attributeNameToEdit;\n }\n\n return true;\n });\n};\n\nconst isNameAllowed = (\n reservedNames: Array<string>\n): yup.TestConfig<string | undefined, Record<string, unknown>> => {\n return {\n name: 'forbiddenAttributeName',\n message: getTrad('error.attributeName.reserved-name'),\n test(value: string | undefined) {\n if (!value) {\n return false;\n }\n const snakeCaseKey = snakeCase(value);\n\n return !reservedNames.some((existingKey) => {\n return snakeCase(existingKey) === snakeCaseKey;\n });\n },\n };\n};\n\nconst validators = {\n default: () => yup.string().nullable(),\n max: () => yup.number().integer().nullable(),\n min: () =>\n yup\n .number()\n .integer()\n .when('max', (max, schema) => {\n if (max) {\n return schema.max(max, getTrad('error.validation.minSupMax'));\n }\n\n return schema;\n })\n .nullable(),\n maxLength: () => yup.number().integer().positive(getTrad('error.validation.positive')).nullable(),\n maxLengthString: () =>\n yup\n .number()\n .integer()\n .positive(getTrad('error.validation.positive'))\n .max(255, 'Maximum length for short text fields is 255 characters')\n .nullable(),\n minLength: () =>\n yup\n .number()\n .integer()\n .min(1)\n .when('maxLength', (maxLength, schema) => {\n if (maxLength) {\n return schema.max(maxLength, getTrad('error.validation.minSupMax'));\n }\n\n return schema;\n })\n .nullable(),\n name(usedNames: Array<string>, reservedNames: Array<string>) {\n return yup\n .string()\n .test(alreadyUsedAttributeNames(usedNames))\n .test(isNameAllowed(reservedNames))\n .matches(NAME_REGEX, errorsTrads.regex.id)\n .required(errorsTrads.required.id);\n },\n required: () => yup.boolean(),\n type: () => yup.string().required(errorsTrads.required.id),\n unique: () => yup.boolean().nullable(),\n};\n\nconst createTextShape = (usedAttributeNames: Array<string>, reservedNames: Array<string>) => {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n default: validators.default(),\n unique: validators.unique(),\n required: validators.required(),\n maxLength: validators.maxLength(),\n minLength: validators.minLength(),\n regex: yup\n .string()\n .test({\n name: 'isValidRegExpPattern',\n message: getTrad('error.validation.regex'),\n test(value) {\n try {\n new RegExp(value || '');\n return true;\n } catch {\n return false;\n }\n },\n })\n .nullable(),\n };\n\n return shape;\n};\n\nconst createStringShape = (usedAttributeNames: Array<string>, reservedNames: Array<string>) => {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n default: validators.default(),\n unique: validators.unique(),\n required: validators.required(),\n maxLength: validators.maxLengthString(),\n minLength: validators.minLength(),\n regex: yup\n .string()\n .test({\n name: 'isValidRegExpPattern',\n message: getTrad('error.validation.regex'),\n test(value) {\n try {\n new RegExp(value || '');\n return true;\n } catch {\n return false;\n }\n },\n })\n .nullable(),\n };\n\n return shape;\n};\n\ntype GenericIsMinSuperiorThanMax<T extends (string | null) | number> = yup.TestConfig<\n T | undefined,\n Record<string, unknown>\n>;\n\nconst isMinSuperiorThanMax = <\n T extends (string | null) | number,\n>(): GenericIsMinSuperiorThanMax<T> => ({\n name: 'isMinSuperiorThanMax',\n message: getTrad('error.validation.minSupMax'),\n test(min: T | undefined) {\n if (!min) {\n return true;\n }\n\n const { max } = this.parent as { max?: T };\n\n if (!max) {\n return true;\n }\n\n if (Number.isNaN(toNumber(min))) {\n return true;\n }\n\n return toNumber(max) >= toNumber(min);\n },\n});\n\nexport {\n alreadyUsedAttributeNames,\n createStringShape,\n createTextShape,\n getUsedContentTypeAttributeNames,\n isMinSuperiorThanMax,\n isNameAllowed,\n NAME_REGEX,\n validators,\n};\n"],"names":["NAME_REGEX","alreadyUsedAttributeNames","usedNames","name","message","errorsTrads","unique","id","test","value","snakeCaseKey","snakeCase","some","existingKey","isNameAllowed","reservedNames","getTrad","validators","default","yup","string","nullable","max","number","integer","min","when","schema","maxLength","positive","maxLengthString","minLength","matches","regex","required","boolean","type","createTextShape","usedAttributeNames","shape","RegExp","createStringShape","isMinSuperiorThanMax","parent","Number","isNaN","toNumber"],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
4
|
-
var
|
|
4
|
+
var snakeCase = require('lodash/snakeCase');
|
|
5
5
|
var yup = require('yup');
|
|
6
6
|
var getTrad = require('../../../utils/getTrad.js');
|
|
7
7
|
var createUid = require('../utils/createUid.js');
|
|
8
8
|
|
|
9
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
|
|
9
11
|
function _interopNamespace(e) {
|
|
10
12
|
if (e && e.__esModule) return e;
|
|
11
13
|
var n = Object.create(null);
|
|
@@ -24,6 +26,7 @@ function _interopNamespace(e) {
|
|
|
24
26
|
return Object.freeze(n);
|
|
25
27
|
}
|
|
26
28
|
|
|
29
|
+
var snakeCase__default = /*#__PURE__*/_interopDefault(snakeCase);
|
|
27
30
|
var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
|
|
28
31
|
|
|
29
32
|
const CATEGORY_NAME_REGEX = /^[A-Za-z][-_0-9A-Za-z]*$/;
|
|
@@ -37,11 +40,11 @@ const createComponentSchema = (usedComponentNames, reservedNames, category, take
|
|
|
37
40
|
return false;
|
|
38
41
|
}
|
|
39
42
|
const name = createUid.createComponentUid(value, category);
|
|
40
|
-
const snakeCaseKey =
|
|
41
|
-
const snakeCaseCollectionName =
|
|
43
|
+
const snakeCaseKey = snakeCase__default.default(name);
|
|
44
|
+
const snakeCaseCollectionName = snakeCase__default.default(currentCollectionName);
|
|
42
45
|
return usedComponentNames.every((reserved)=>{
|
|
43
|
-
return
|
|
44
|
-
}) && takenCollectionNames.every((collectionName)=>
|
|
46
|
+
return snakeCase__default.default(reserved) !== snakeCaseKey;
|
|
47
|
+
}) && takenCollectionNames.every((collectionName)=>snakeCase__default.default(collectionName) !== snakeCaseCollectionName);
|
|
45
48
|
}
|
|
46
49
|
}).test({
|
|
47
50
|
name: 'nameNotAllowed',
|
|
@@ -50,9 +53,9 @@ const createComponentSchema = (usedComponentNames, reservedNames, category, take
|
|
|
50
53
|
if (!value) {
|
|
51
54
|
return false;
|
|
52
55
|
}
|
|
53
|
-
const snakeCaseKey =
|
|
56
|
+
const snakeCaseKey = snakeCase__default.default(value);
|
|
54
57
|
return reservedNames.every((reserved)=>{
|
|
55
|
-
return
|
|
58
|
+
return snakeCase__default.default(reserved) !== snakeCaseKey;
|
|
56
59
|
});
|
|
57
60
|
}
|
|
58
61
|
}).required(strapiAdmin.translatedErrors.required.id),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createComponentSchema.js","sources":["../../../../../admin/src/components/FormModal/component/createComponentSchema.ts"],"sourcesContent":["import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport
|
|
1
|
+
{"version":3,"file":"createComponentSchema.js","sources":["../../../../../admin/src/components/FormModal/component/createComponentSchema.ts"],"sourcesContent":["import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport snakeCase from 'lodash/snakeCase';\nimport * as yup from 'yup';\n\nimport { getTrad } from '../../../utils/getTrad';\nimport { createComponentUid } from '../utils/createUid';\n\nconst CATEGORY_NAME_REGEX = /^[A-Za-z][-_0-9A-Za-z]*$/;\n\nexport const createComponentSchema = (\n usedComponentNames: Array<string>,\n reservedNames: Array<string>,\n category: string,\n takenCollectionNames: Array<string>,\n currentCollectionName: string\n) => {\n const shape = {\n displayName: yup\n .string()\n .test({\n name: 'nameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const name = createComponentUid(value, category);\n\n const snakeCaseKey = snakeCase(name);\n const snakeCaseCollectionName = snakeCase(currentCollectionName);\n\n return (\n usedComponentNames.every((reserved) => {\n return snakeCase(reserved) !== snakeCaseKey;\n }) &&\n takenCollectionNames.every(\n (collectionName) => snakeCase(collectionName) !== snakeCaseCollectionName\n )\n );\n },\n })\n .test({\n name: 'nameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n return reservedNames.every((reserved) => {\n return snakeCase(reserved) !== snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n category: yup\n .string()\n .matches(CATEGORY_NAME_REGEX, getTrad('error.category.format'))\n .required(errorsTrads.required.id),\n\n icon: yup.string(),\n };\n\n return yup.object(shape);\n};\n"],"names":["CATEGORY_NAME_REGEX","createComponentSchema","usedComponentNames","reservedNames","category","takenCollectionNames","currentCollectionName","shape","displayName","yup","string","test","name","message","errorsTrads","unique","id","value","createComponentUid","snakeCaseKey","snakeCase","snakeCaseCollectionName","every","reserved","collectionName","getTrad","required","matches","icon","object"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAMA,mBAAAA,GAAsB,0BAAA;MAEfC,qBAAAA,GAAwB,CACnCC,kBAAAA,EACAC,aAAAA,EACAC,UACAC,oBAAAA,EACAC,qBAAAA,GAAAA;AAEA,IAAA,MAAMC,KAAAA,GAAQ;AACZC,QAAAA,WAAAA,EAAaC,cAAAA,CACVC,MAAM,EAAA,CACNC,IAAI,CAAC;YACJC,IAAAA,EAAM,iBAAA;YACNC,OAAAA,EAASC,4BAAAA,CAAYC,MAAM,CAACC,EAAE;AAC9BL,YAAAA,IAAAA,CAAAA,CAAKM,KAAK,EAAA;AACR,gBAAA,IAAI,CAACA,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;gBAEA,MAAML,IAAAA,GAAOM,6BAAmBD,KAAAA,EAAOb,QAAAA,CAAAA;AAEvC,gBAAA,MAAMe,eAAeC,0BAAAA,CAAUR,IAAAA,CAAAA;AAC/B,gBAAA,MAAMS,0BAA0BD,0BAAAA,CAAUd,qBAAAA,CAAAA;gBAE1C,OACEJ,kBAAAA,CAAmBoB,KAAK,CAAC,CAACC,QAAAA,GAAAA;AACxB,oBAAA,OAAOH,2BAAUG,QAAAA,CAAAA,KAAcJ,YAAAA;AACjC,gBAAA,CAAA,CAAA,IACAd,qBAAqBiB,KAAK,CACxB,CAACE,cAAAA,GAAmBJ,2BAAUI,cAAAA,CAAAA,KAAoBH,uBAAAA,CAAAA;AAGxD,YAAA;AACF,SAAA,CAAA,CACCV,IAAI,CAAC;YACJC,IAAAA,EAAM,gBAAA;AACNC,YAAAA,OAAAA,EAASY,eAAAA,CAAQ,qCAAA,CAAA;AACjBd,YAAAA,IAAAA,CAAAA,CAAKM,KAAK,EAAA;AACR,gBAAA,IAAI,CAACA,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;AAEA,gBAAA,MAAME,eAAeC,0BAAAA,CAAUH,KAAAA,CAAAA;gBAC/B,OAAOd,aAAAA,CAAcmB,KAAK,CAAC,CAACC,QAAAA,GAAAA;AAC1B,oBAAA,OAAOH,2BAAUG,QAAAA,CAAAA,KAAcJ,YAAAA;AACjC,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,SAAA,CAAA,CACCO,QAAQ,CAACZ,4BAAAA,CAAYY,QAAQ,CAACV,EAAE,CAAA;AACnCZ,QAAAA,QAAAA,EAAUK,cAAAA,CACPC,MAAM,EAAA,CACNiB,OAAO,CAAC3B,mBAAAA,EAAqByB,eAAAA,CAAQ,uBAAA,CAAA,CAAA,CACrCC,QAAQ,CAACZ,4BAAAA,CAAYY,QAAQ,CAACV,EAAE,CAAA;AAEnCY,QAAAA,IAAAA,EAAMnB,eAAIC,MAAM;AAClB,KAAA;IAEA,OAAOD,cAAAA,CAAIoB,MAAM,CAACtB,KAAAA,CAAAA;AACpB;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { translatedErrors } from '@strapi/admin/strapi-admin';
|
|
2
|
-
import
|
|
2
|
+
import snakeCase from 'lodash/snakeCase';
|
|
3
3
|
import * as yup from 'yup';
|
|
4
4
|
import { getTrad } from '../../../utils/getTrad.mjs';
|
|
5
5
|
import { createComponentUid } from '../utils/createUid.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createComponentSchema.mjs","sources":["../../../../../admin/src/components/FormModal/component/createComponentSchema.ts"],"sourcesContent":["import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport
|
|
1
|
+
{"version":3,"file":"createComponentSchema.mjs","sources":["../../../../../admin/src/components/FormModal/component/createComponentSchema.ts"],"sourcesContent":["import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport snakeCase from 'lodash/snakeCase';\nimport * as yup from 'yup';\n\nimport { getTrad } from '../../../utils/getTrad';\nimport { createComponentUid } from '../utils/createUid';\n\nconst CATEGORY_NAME_REGEX = /^[A-Za-z][-_0-9A-Za-z]*$/;\n\nexport const createComponentSchema = (\n usedComponentNames: Array<string>,\n reservedNames: Array<string>,\n category: string,\n takenCollectionNames: Array<string>,\n currentCollectionName: string\n) => {\n const shape = {\n displayName: yup\n .string()\n .test({\n name: 'nameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const name = createComponentUid(value, category);\n\n const snakeCaseKey = snakeCase(name);\n const snakeCaseCollectionName = snakeCase(currentCollectionName);\n\n return (\n usedComponentNames.every((reserved) => {\n return snakeCase(reserved) !== snakeCaseKey;\n }) &&\n takenCollectionNames.every(\n (collectionName) => snakeCase(collectionName) !== snakeCaseCollectionName\n )\n );\n },\n })\n .test({\n name: 'nameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n return reservedNames.every((reserved) => {\n return snakeCase(reserved) !== snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n category: yup\n .string()\n .matches(CATEGORY_NAME_REGEX, getTrad('error.category.format'))\n .required(errorsTrads.required.id),\n\n icon: yup.string(),\n };\n\n return yup.object(shape);\n};\n"],"names":["CATEGORY_NAME_REGEX","createComponentSchema","usedComponentNames","reservedNames","category","takenCollectionNames","currentCollectionName","shape","displayName","yup","string","test","name","message","errorsTrads","unique","id","value","createComponentUid","snakeCaseKey","snakeCase","snakeCaseCollectionName","every","reserved","collectionName","getTrad","required","matches","icon","object"],"mappings":";;;;;;AAOA,MAAMA,mBAAAA,GAAsB,0BAAA;MAEfC,qBAAAA,GAAwB,CACnCC,kBAAAA,EACAC,aAAAA,EACAC,UACAC,oBAAAA,EACAC,qBAAAA,GAAAA;AAEA,IAAA,MAAMC,KAAAA,GAAQ;AACZC,QAAAA,WAAAA,EAAaC,GAAAA,CACVC,MAAM,EAAA,CACNC,IAAI,CAAC;YACJC,IAAAA,EAAM,iBAAA;YACNC,OAAAA,EAASC,gBAAAA,CAAYC,MAAM,CAACC,EAAE;AAC9BL,YAAAA,IAAAA,CAAAA,CAAKM,KAAK,EAAA;AACR,gBAAA,IAAI,CAACA,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;gBAEA,MAAML,IAAAA,GAAOM,mBAAmBD,KAAAA,EAAOb,QAAAA,CAAAA;AAEvC,gBAAA,MAAMe,eAAeC,SAAAA,CAAUR,IAAAA,CAAAA;AAC/B,gBAAA,MAAMS,0BAA0BD,SAAAA,CAAUd,qBAAAA,CAAAA;gBAE1C,OACEJ,kBAAAA,CAAmBoB,KAAK,CAAC,CAACC,QAAAA,GAAAA;AACxB,oBAAA,OAAOH,UAAUG,QAAAA,CAAAA,KAAcJ,YAAAA;AACjC,gBAAA,CAAA,CAAA,IACAd,qBAAqBiB,KAAK,CACxB,CAACE,cAAAA,GAAmBJ,UAAUI,cAAAA,CAAAA,KAAoBH,uBAAAA,CAAAA;AAGxD,YAAA;AACF,SAAA,CAAA,CACCV,IAAI,CAAC;YACJC,IAAAA,EAAM,gBAAA;AACNC,YAAAA,OAAAA,EAASY,OAAAA,CAAQ,qCAAA,CAAA;AACjBd,YAAAA,IAAAA,CAAAA,CAAKM,KAAK,EAAA;AACR,gBAAA,IAAI,CAACA,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;AAEA,gBAAA,MAAME,eAAeC,SAAAA,CAAUH,KAAAA,CAAAA;gBAC/B,OAAOd,aAAAA,CAAcmB,KAAK,CAAC,CAACC,QAAAA,GAAAA;AAC1B,oBAAA,OAAOH,UAAUG,QAAAA,CAAAA,KAAcJ,YAAAA;AACjC,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,SAAA,CAAA,CACCO,QAAQ,CAACZ,gBAAAA,CAAYY,QAAQ,CAACV,EAAE,CAAA;AACnCZ,QAAAA,QAAAA,EAAUK,GAAAA,CACPC,MAAM,EAAA,CACNiB,OAAO,CAAC3B,mBAAAA,EAAqByB,OAAAA,CAAQ,uBAAA,CAAA,CAAA,CACrCC,QAAQ,CAACZ,gBAAAA,CAAYY,QAAQ,CAACV,EAAE,CAAA;AAEnCY,QAAAA,IAAAA,EAAMnB,IAAIC,MAAM;AAClB,KAAA;IAEA,OAAOD,GAAAA,CAAIoB,MAAM,CAACtB,KAAAA,CAAAA;AACpB;;;;"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
4
|
-
var
|
|
4
|
+
var snakeCase = require('lodash/snakeCase');
|
|
5
5
|
var yup = require('yup');
|
|
6
6
|
var getTrad = require('../../../utils/getTrad.js');
|
|
7
7
|
var createUid = require('../utils/createUid.js');
|
|
8
8
|
|
|
9
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
|
|
9
11
|
function _interopNamespace(e) {
|
|
10
12
|
if (e && e.__esModule) return e;
|
|
11
13
|
var n = Object.create(null);
|
|
@@ -24,6 +26,7 @@ function _interopNamespace(e) {
|
|
|
24
26
|
return Object.freeze(n);
|
|
25
27
|
}
|
|
26
28
|
|
|
29
|
+
var snakeCase__default = /*#__PURE__*/_interopDefault(snakeCase);
|
|
27
30
|
var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
|
|
28
31
|
|
|
29
32
|
const createContentTypeSchema = ({ usedContentTypeNames = [], reservedModels = [], singularNames = [], pluralNames = [], collectionNames = [] })=>{
|
|
@@ -36,9 +39,9 @@ const createContentTypeSchema = ({ usedContentTypeNames = [], reservedModels = [
|
|
|
36
39
|
return false;
|
|
37
40
|
}
|
|
38
41
|
const name = createUid.createUid(value);
|
|
39
|
-
const snakeCaseKey =
|
|
42
|
+
const snakeCaseKey = snakeCase__default.default(name);
|
|
40
43
|
return !usedContentTypeNames.some((value)=>{
|
|
41
|
-
return
|
|
44
|
+
return snakeCase__default.default(value) === snakeCaseKey;
|
|
42
45
|
});
|
|
43
46
|
}
|
|
44
47
|
}).test({
|
|
@@ -48,9 +51,9 @@ const createContentTypeSchema = ({ usedContentTypeNames = [], reservedModels = [
|
|
|
48
51
|
if (!value) {
|
|
49
52
|
return false;
|
|
50
53
|
}
|
|
51
|
-
const snakeCaseKey =
|
|
54
|
+
const snakeCaseKey = snakeCase__default.default(value);
|
|
52
55
|
return !reservedModels.some((key)=>{
|
|
53
|
-
return
|
|
56
|
+
return snakeCase__default.default(key) === snakeCaseKey;
|
|
54
57
|
});
|
|
55
58
|
}
|
|
56
59
|
}).required(strapiAdmin.translatedErrors.required.id),
|
|
@@ -61,9 +64,9 @@ const createContentTypeSchema = ({ usedContentTypeNames = [], reservedModels = [
|
|
|
61
64
|
if (!value) {
|
|
62
65
|
return false;
|
|
63
66
|
}
|
|
64
|
-
const snakeCaseKey =
|
|
67
|
+
const snakeCaseKey = snakeCase__default.default(value);
|
|
65
68
|
return !pluralNames.some((key)=>{
|
|
66
|
-
return
|
|
69
|
+
return snakeCase__default.default(key) === snakeCaseKey;
|
|
67
70
|
});
|
|
68
71
|
}
|
|
69
72
|
}).test({
|
|
@@ -73,9 +76,9 @@ const createContentTypeSchema = ({ usedContentTypeNames = [], reservedModels = [
|
|
|
73
76
|
if (!value) {
|
|
74
77
|
return false;
|
|
75
78
|
}
|
|
76
|
-
const snakeCaseKey =
|
|
79
|
+
const snakeCaseKey = snakeCase__default.default(value);
|
|
77
80
|
return !singularNames.some((key)=>{
|
|
78
|
-
return
|
|
81
|
+
return snakeCase__default.default(key) === snakeCaseKey;
|
|
79
82
|
});
|
|
80
83
|
}
|
|
81
84
|
}).test({
|
|
@@ -85,7 +88,7 @@ const createContentTypeSchema = ({ usedContentTypeNames = [], reservedModels = [
|
|
|
85
88
|
if (!value) {
|
|
86
89
|
return false;
|
|
87
90
|
}
|
|
88
|
-
return
|
|
91
|
+
return snakeCase__default.default(context.parent.singularName) !== snakeCase__default.default(value);
|
|
89
92
|
}
|
|
90
93
|
}).test({
|
|
91
94
|
name: 'pluralNameNotAllowed',
|
|
@@ -94,9 +97,9 @@ const createContentTypeSchema = ({ usedContentTypeNames = [], reservedModels = [
|
|
|
94
97
|
if (!value) {
|
|
95
98
|
return false;
|
|
96
99
|
}
|
|
97
|
-
const snakeCaseKey =
|
|
100
|
+
const snakeCaseKey = snakeCase__default.default(value);
|
|
98
101
|
return !reservedModels.some((key)=>{
|
|
99
|
-
return
|
|
102
|
+
return snakeCase__default.default(key) === snakeCaseKey;
|
|
100
103
|
});
|
|
101
104
|
}
|
|
102
105
|
}).test({
|
|
@@ -106,9 +109,9 @@ const createContentTypeSchema = ({ usedContentTypeNames = [], reservedModels = [
|
|
|
106
109
|
if (!value) {
|
|
107
110
|
return false;
|
|
108
111
|
}
|
|
109
|
-
const snakeCaseKey =
|
|
112
|
+
const snakeCaseKey = snakeCase__default.default(value);
|
|
110
113
|
return !collectionNames.some((key)=>{
|
|
111
|
-
return
|
|
114
|
+
return snakeCase__default.default(key) === snakeCaseKey;
|
|
112
115
|
});
|
|
113
116
|
}
|
|
114
117
|
}).required(strapiAdmin.translatedErrors.required.id),
|
|
@@ -119,9 +122,9 @@ const createContentTypeSchema = ({ usedContentTypeNames = [], reservedModels = [
|
|
|
119
122
|
if (!value) {
|
|
120
123
|
return false;
|
|
121
124
|
}
|
|
122
|
-
const snakeCaseKey =
|
|
125
|
+
const snakeCaseKey = snakeCase__default.default(value);
|
|
123
126
|
return !singularNames.some((key)=>{
|
|
124
|
-
return
|
|
127
|
+
return snakeCase__default.default(key) === snakeCaseKey;
|
|
125
128
|
});
|
|
126
129
|
}
|
|
127
130
|
}).test({
|
|
@@ -131,9 +134,9 @@ const createContentTypeSchema = ({ usedContentTypeNames = [], reservedModels = [
|
|
|
131
134
|
if (!value) {
|
|
132
135
|
return false;
|
|
133
136
|
}
|
|
134
|
-
const snakeCaseKey =
|
|
137
|
+
const snakeCaseKey = snakeCase__default.default(value);
|
|
135
138
|
return !pluralNames.some((key)=>{
|
|
136
|
-
return
|
|
139
|
+
return snakeCase__default.default(key) === snakeCaseKey;
|
|
137
140
|
});
|
|
138
141
|
}
|
|
139
142
|
}).test({
|
|
@@ -143,7 +146,7 @@ const createContentTypeSchema = ({ usedContentTypeNames = [], reservedModels = [
|
|
|
143
146
|
if (!value) {
|
|
144
147
|
return false;
|
|
145
148
|
}
|
|
146
|
-
return
|
|
149
|
+
return snakeCase__default.default(context.parent.pluralName) !== snakeCase__default.default(value);
|
|
147
150
|
}
|
|
148
151
|
}).test({
|
|
149
152
|
name: 'singularNameNotAllowed',
|
|
@@ -152,9 +155,9 @@ const createContentTypeSchema = ({ usedContentTypeNames = [], reservedModels = [
|
|
|
152
155
|
if (!value) {
|
|
153
156
|
return false;
|
|
154
157
|
}
|
|
155
|
-
const snakeCaseKey =
|
|
158
|
+
const snakeCaseKey = snakeCase__default.default(value);
|
|
156
159
|
return !reservedModels.some((key)=>{
|
|
157
|
-
return
|
|
160
|
+
return snakeCase__default.default(key) === snakeCaseKey;
|
|
158
161
|
});
|
|
159
162
|
}
|
|
160
163
|
}).required(strapiAdmin.translatedErrors.required.id),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createContentTypeSchema.js","sources":["../../../../../admin/src/components/FormModal/contentType/createContentTypeSchema.ts"],"sourcesContent":["import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport { snakeCase } from 'lodash/fp';\nimport * as yup from 'yup';\n\nimport { getTrad } from '../../../utils/getTrad';\nimport { createUid } from '../utils/createUid';\n\ntype CreateContentTypeSchemaParams = {\n usedContentTypeNames: Array<string>;\n reservedModels: Array<string>;\n singularNames: Array<string>;\n pluralNames: Array<string>;\n collectionNames: Array<string>;\n};\n\nexport const createContentTypeSchema = ({\n usedContentTypeNames = [],\n reservedModels = [],\n singularNames = [],\n pluralNames = [],\n collectionNames = [],\n}: CreateContentTypeSchemaParams) => {\n const shape = {\n displayName: yup\n .string()\n .test({\n name: 'nameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const name = createUid(value);\n\n const snakeCaseKey = snakeCase(name);\n\n return !usedContentTypeNames.some((value) => {\n return snakeCase(value) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'nameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n pluralName: yup\n .string()\n .test({\n name: 'pluralNameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !pluralNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralNameAlreadyUsedAsSingular',\n message: getTrad('error.contentType.pluralName-equals-singularName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !singularNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralAndSingularAreUnique',\n message: getTrad('error.contentType.pluralName-used'),\n test(value, context) {\n if (!value) {\n return false;\n }\n\n return snakeCase(context.parent.singularName) !== snakeCase(value);\n },\n })\n .test({\n name: 'pluralNameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralNameNotAlreadyUsedInCollectionName',\n message: getTrad('error.contentType.pluralName-equals-collectionName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !collectionNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n singularName: yup\n .string()\n .test({\n name: 'singularNameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !singularNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'singularNameAlreadyUsedAsPlural',\n message: getTrad('error.contentType.singularName-equals-pluralName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !pluralNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralAndSingularAreUnique',\n message: getTrad('error.contentType.singularName-used'),\n test(value, context) {\n if (!value) {\n return false;\n }\n\n return snakeCase(context.parent.pluralName) !== snakeCase(value);\n },\n })\n .test({\n name: 'singularNameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n draftAndPublish: yup.boolean(),\n kind: yup.string().oneOf(['singleType', 'collectionType']),\n };\n\n return yup.object(shape);\n};\n"],"names":["createContentTypeSchema","usedContentTypeNames","reservedModels","singularNames","pluralNames","collectionNames","shape","displayName","yup","string","test","name","message","errorsTrads","unique","id","value","createUid","snakeCaseKey","snakeCase","some","getTrad","key","required","pluralName","context","parent","singularName","draftAndPublish","boolean","kind","oneOf","object"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createContentTypeSchema.js","sources":["../../../../../admin/src/components/FormModal/contentType/createContentTypeSchema.ts"],"sourcesContent":["import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport snakeCase from 'lodash/snakeCase';\nimport * as yup from 'yup';\n\nimport { getTrad } from '../../../utils/getTrad';\nimport { createUid } from '../utils/createUid';\n\ntype CreateContentTypeSchemaParams = {\n usedContentTypeNames: Array<string>;\n reservedModels: Array<string>;\n singularNames: Array<string>;\n pluralNames: Array<string>;\n collectionNames: Array<string>;\n};\n\nexport const createContentTypeSchema = ({\n usedContentTypeNames = [],\n reservedModels = [],\n singularNames = [],\n pluralNames = [],\n collectionNames = [],\n}: CreateContentTypeSchemaParams) => {\n const shape = {\n displayName: yup\n .string()\n .test({\n name: 'nameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const name = createUid(value);\n\n const snakeCaseKey = snakeCase(name);\n\n return !usedContentTypeNames.some((value) => {\n return snakeCase(value) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'nameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n pluralName: yup\n .string()\n .test({\n name: 'pluralNameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !pluralNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralNameAlreadyUsedAsSingular',\n message: getTrad('error.contentType.pluralName-equals-singularName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !singularNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralAndSingularAreUnique',\n message: getTrad('error.contentType.pluralName-used'),\n test(value, context) {\n if (!value) {\n return false;\n }\n\n return snakeCase(context.parent.singularName) !== snakeCase(value);\n },\n })\n .test({\n name: 'pluralNameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralNameNotAlreadyUsedInCollectionName',\n message: getTrad('error.contentType.pluralName-equals-collectionName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !collectionNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n singularName: yup\n .string()\n .test({\n name: 'singularNameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !singularNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'singularNameAlreadyUsedAsPlural',\n message: getTrad('error.contentType.singularName-equals-pluralName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !pluralNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralAndSingularAreUnique',\n message: getTrad('error.contentType.singularName-used'),\n test(value, context) {\n if (!value) {\n return false;\n }\n\n return snakeCase(context.parent.pluralName) !== snakeCase(value);\n },\n })\n .test({\n name: 'singularNameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n draftAndPublish: yup.boolean(),\n kind: yup.string().oneOf(['singleType', 'collectionType']),\n };\n\n return yup.object(shape);\n};\n"],"names":["createContentTypeSchema","usedContentTypeNames","reservedModels","singularNames","pluralNames","collectionNames","shape","displayName","yup","string","test","name","message","errorsTrads","unique","id","value","createUid","snakeCaseKey","snakeCase","some","getTrad","key","required","pluralName","context","parent","singularName","draftAndPublish","boolean","kind","oneOf","object"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { translatedErrors } from '@strapi/admin/strapi-admin';
|
|
2
|
-
import
|
|
2
|
+
import snakeCase from 'lodash/snakeCase';
|
|
3
3
|
import * as yup from 'yup';
|
|
4
4
|
import { getTrad } from '../../../utils/getTrad.mjs';
|
|
5
5
|
import { createUid } from '../utils/createUid.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createContentTypeSchema.mjs","sources":["../../../../../admin/src/components/FormModal/contentType/createContentTypeSchema.ts"],"sourcesContent":["import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport { snakeCase } from 'lodash/fp';\nimport * as yup from 'yup';\n\nimport { getTrad } from '../../../utils/getTrad';\nimport { createUid } from '../utils/createUid';\n\ntype CreateContentTypeSchemaParams = {\n usedContentTypeNames: Array<string>;\n reservedModels: Array<string>;\n singularNames: Array<string>;\n pluralNames: Array<string>;\n collectionNames: Array<string>;\n};\n\nexport const createContentTypeSchema = ({\n usedContentTypeNames = [],\n reservedModels = [],\n singularNames = [],\n pluralNames = [],\n collectionNames = [],\n}: CreateContentTypeSchemaParams) => {\n const shape = {\n displayName: yup\n .string()\n .test({\n name: 'nameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const name = createUid(value);\n\n const snakeCaseKey = snakeCase(name);\n\n return !usedContentTypeNames.some((value) => {\n return snakeCase(value) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'nameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n pluralName: yup\n .string()\n .test({\n name: 'pluralNameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !pluralNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralNameAlreadyUsedAsSingular',\n message: getTrad('error.contentType.pluralName-equals-singularName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !singularNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralAndSingularAreUnique',\n message: getTrad('error.contentType.pluralName-used'),\n test(value, context) {\n if (!value) {\n return false;\n }\n\n return snakeCase(context.parent.singularName) !== snakeCase(value);\n },\n })\n .test({\n name: 'pluralNameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralNameNotAlreadyUsedInCollectionName',\n message: getTrad('error.contentType.pluralName-equals-collectionName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !collectionNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n singularName: yup\n .string()\n .test({\n name: 'singularNameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !singularNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'singularNameAlreadyUsedAsPlural',\n message: getTrad('error.contentType.singularName-equals-pluralName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !pluralNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralAndSingularAreUnique',\n message: getTrad('error.contentType.singularName-used'),\n test(value, context) {\n if (!value) {\n return false;\n }\n\n return snakeCase(context.parent.pluralName) !== snakeCase(value);\n },\n })\n .test({\n name: 'singularNameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n draftAndPublish: yup.boolean(),\n kind: yup.string().oneOf(['singleType', 'collectionType']),\n };\n\n return yup.object(shape);\n};\n"],"names":["createContentTypeSchema","usedContentTypeNames","reservedModels","singularNames","pluralNames","collectionNames","shape","displayName","yup","string","test","name","message","errorsTrads","unique","id","value","createUid","snakeCaseKey","snakeCase","some","getTrad","key","required","pluralName","context","parent","singularName","draftAndPublish","boolean","kind","oneOf","object"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createContentTypeSchema.mjs","sources":["../../../../../admin/src/components/FormModal/contentType/createContentTypeSchema.ts"],"sourcesContent":["import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport snakeCase from 'lodash/snakeCase';\nimport * as yup from 'yup';\n\nimport { getTrad } from '../../../utils/getTrad';\nimport { createUid } from '../utils/createUid';\n\ntype CreateContentTypeSchemaParams = {\n usedContentTypeNames: Array<string>;\n reservedModels: Array<string>;\n singularNames: Array<string>;\n pluralNames: Array<string>;\n collectionNames: Array<string>;\n};\n\nexport const createContentTypeSchema = ({\n usedContentTypeNames = [],\n reservedModels = [],\n singularNames = [],\n pluralNames = [],\n collectionNames = [],\n}: CreateContentTypeSchemaParams) => {\n const shape = {\n displayName: yup\n .string()\n .test({\n name: 'nameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const name = createUid(value);\n\n const snakeCaseKey = snakeCase(name);\n\n return !usedContentTypeNames.some((value) => {\n return snakeCase(value) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'nameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n pluralName: yup\n .string()\n .test({\n name: 'pluralNameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !pluralNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralNameAlreadyUsedAsSingular',\n message: getTrad('error.contentType.pluralName-equals-singularName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !singularNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralAndSingularAreUnique',\n message: getTrad('error.contentType.pluralName-used'),\n test(value, context) {\n if (!value) {\n return false;\n }\n\n return snakeCase(context.parent.singularName) !== snakeCase(value);\n },\n })\n .test({\n name: 'pluralNameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralNameNotAlreadyUsedInCollectionName',\n message: getTrad('error.contentType.pluralName-equals-collectionName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !collectionNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n singularName: yup\n .string()\n .test({\n name: 'singularNameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !singularNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'singularNameAlreadyUsedAsPlural',\n message: getTrad('error.contentType.singularName-equals-pluralName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !pluralNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralAndSingularAreUnique',\n message: getTrad('error.contentType.singularName-used'),\n test(value, context) {\n if (!value) {\n return false;\n }\n\n return snakeCase(context.parent.pluralName) !== snakeCase(value);\n },\n })\n .test({\n name: 'singularNameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n draftAndPublish: yup.boolean(),\n kind: yup.string().oneOf(['singleType', 'collectionType']),\n };\n\n return yup.object(shape);\n};\n"],"names":["createContentTypeSchema","usedContentTypeNames","reservedModels","singularNames","pluralNames","collectionNames","shape","displayName","yup","string","test","name","message","errorsTrads","unique","id","value","createUid","snakeCaseKey","snakeCase","some","getTrad","key","required","pluralName","context","parent","singularName","draftAndPublish","boolean","kind","oneOf","object"],"mappings":";;;;;;MAeaA,uBAAAA,GAA0B,CAAC,EACtCC,oBAAAA,GAAuB,EAAE,EACzBC,cAAAA,GAAiB,EAAE,EACnBC,aAAAA,GAAgB,EAAE,EAClBC,WAAAA,GAAc,EAAE,EAChBC,eAAAA,GAAkB,EAAE,EACU,GAAA;AAC9B,IAAA,MAAMC,KAAAA,GAAQ;AACZC,QAAAA,WAAAA,EAAaC,GAAAA,CACVC,MAAM,EAAA,CACNC,IAAI,CAAC;YACJC,IAAAA,EAAM,iBAAA;YACNC,OAAAA,EAASC,gBAAAA,CAAYC,MAAM,CAACC,EAAE;AAC9BL,YAAAA,IAAAA,CAAAA,CAAKM,KAAK,EAAA;AACR,gBAAA,IAAI,CAACA,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;AAEA,gBAAA,MAAML,OAAOM,SAAAA,CAAUD,KAAAA,CAAAA;AAEvB,gBAAA,MAAME,eAAeC,SAAAA,CAAUR,IAAAA,CAAAA;AAE/B,gBAAA,OAAO,CAACV,oBAAAA,CAAqBmB,IAAI,CAAC,CAACJ,KAAAA,GAAAA;AACjC,oBAAA,OAAOG,UAAUH,KAAAA,CAAAA,KAAWE,YAAAA;AAC9B,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,SAAA,CAAA,CACCR,IAAI,CAAC;YACJC,IAAAA,EAAM,gBAAA;AACNC,YAAAA,OAAAA,EAASS,OAAAA,CAAQ,qCAAA,CAAA;AACjBX,YAAAA,IAAAA,CAAAA,CAAKM,KAAK,EAAA;AACR,gBAAA,IAAI,CAACA,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;AACA,gBAAA,MAAME,eAAeC,SAAAA,CAAUH,KAAAA,CAAAA;AAE/B,gBAAA,OAAO,CAACd,cAAAA,CAAekB,IAAI,CAAC,CAACE,GAAAA,GAAAA;AAC3B,oBAAA,OAAOH,UAAUG,GAAAA,CAAAA,KAASJ,YAAAA;AAC5B,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,SAAA,CAAA,CACCK,QAAQ,CAACV,gBAAAA,CAAYU,QAAQ,CAACR,EAAE,CAAA;AACnCS,QAAAA,UAAAA,EAAYhB,GAAAA,CACTC,MAAM,EAAA,CACNC,IAAI,CAAC;YACJC,IAAAA,EAAM,uBAAA;YACNC,OAAAA,EAASC,gBAAAA,CAAYC,MAAM,CAACC,EAAE;AAC9BL,YAAAA,IAAAA,CAAAA,CAAKM,KAAK,EAAA;AACR,gBAAA,IAAI,CAACA,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;AAEA,gBAAA,MAAME,eAAeC,SAAAA,CAAUH,KAAAA,CAAAA;AAE/B,gBAAA,OAAO,CAACZ,WAAAA,CAAYgB,IAAI,CAAC,CAACE,GAAAA,GAAAA;AACxB,oBAAA,OAAOH,UAAUG,GAAAA,CAAAA,KAASJ,YAAAA;AAC5B,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,SAAA,CAAA,CACCR,IAAI,CAAC;YACJC,IAAAA,EAAM,iCAAA;AACNC,YAAAA,OAAAA,EAASS,OAAAA,CAAQ,kDAAA,CAAA;AACjBX,YAAAA,IAAAA,CAAAA,CAAKM,KAAK,EAAA;AACR,gBAAA,IAAI,CAACA,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;AAEA,gBAAA,MAAME,eAAeC,SAAAA,CAAUH,KAAAA,CAAAA;AAE/B,gBAAA,OAAO,CAACb,aAAAA,CAAciB,IAAI,CAAC,CAACE,GAAAA,GAAAA;AAC1B,oBAAA,OAAOH,UAAUG,GAAAA,CAAAA,KAASJ,YAAAA;AAC5B,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,SAAA,CAAA,CACCR,IAAI,CAAC;YACJC,IAAAA,EAAM,4BAAA;AACNC,YAAAA,OAAAA,EAASS,OAAAA,CAAQ,mCAAA,CAAA;YACjBX,IAAAA,CAAAA,CAAKM,KAAK,EAAES,OAAO,EAAA;AACjB,gBAAA,IAAI,CAACT,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;AAEA,gBAAA,OAAOG,UAAUM,OAAAA,CAAQC,MAAM,CAACC,YAAY,MAAMR,SAAAA,CAAUH,KAAAA,CAAAA;AAC9D,YAAA;AACF,SAAA,CAAA,CACCN,IAAI,CAAC;YACJC,IAAAA,EAAM,sBAAA;AACNC,YAAAA,OAAAA,EAASS,OAAAA,CAAQ,qCAAA,CAAA;AACjBX,YAAAA,IAAAA,CAAAA,CAAKM,KAAK,EAAA;AACR,gBAAA,IAAI,CAACA,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;AAEA,gBAAA,MAAME,eAAeC,SAAAA,CAAUH,KAAAA,CAAAA;AAE/B,gBAAA,OAAO,CAACd,cAAAA,CAAekB,IAAI,CAAC,CAACE,GAAAA,GAAAA;AAC3B,oBAAA,OAAOH,UAAUG,GAAAA,CAAAA,KAASJ,YAAAA;AAC5B,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,SAAA,CAAA,CACCR,IAAI,CAAC;YACJC,IAAAA,EAAM,0CAAA;AACNC,YAAAA,OAAAA,EAASS,OAAAA,CAAQ,oDAAA,CAAA;AACjBX,YAAAA,IAAAA,CAAAA,CAAKM,KAAK,EAAA;AACR,gBAAA,IAAI,CAACA,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;AAEA,gBAAA,MAAME,eAAeC,SAAAA,CAAUH,KAAAA,CAAAA;AAE/B,gBAAA,OAAO,CAACX,eAAAA,CAAgBe,IAAI,CAAC,CAACE,GAAAA,GAAAA;AAC5B,oBAAA,OAAOH,UAAUG,GAAAA,CAAAA,KAASJ,YAAAA;AAC5B,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,SAAA,CAAA,CACCK,QAAQ,CAACV,gBAAAA,CAAYU,QAAQ,CAACR,EAAE,CAAA;AACnCY,QAAAA,YAAAA,EAAcnB,GAAAA,CACXC,MAAM,EAAA,CACNC,IAAI,CAAC;YACJC,IAAAA,EAAM,yBAAA;YACNC,OAAAA,EAASC,gBAAAA,CAAYC,MAAM,CAACC,EAAE;AAC9BL,YAAAA,IAAAA,CAAAA,CAAKM,KAAK,EAAA;AACR,gBAAA,IAAI,CAACA,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;AAEA,gBAAA,MAAME,eAAeC,SAAAA,CAAUH,KAAAA,CAAAA;AAE/B,gBAAA,OAAO,CAACb,aAAAA,CAAciB,IAAI,CAAC,CAACE,GAAAA,GAAAA;AAC1B,oBAAA,OAAOH,UAAUG,GAAAA,CAAAA,KAASJ,YAAAA;AAC5B,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,SAAA,CAAA,CACCR,IAAI,CAAC;YACJC,IAAAA,EAAM,iCAAA;AACNC,YAAAA,OAAAA,EAASS,OAAAA,CAAQ,kDAAA,CAAA;AACjBX,YAAAA,IAAAA,CAAAA,CAAKM,KAAK,EAAA;AACR,gBAAA,IAAI,CAACA,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;AAEA,gBAAA,MAAME,eAAeC,SAAAA,CAAUH,KAAAA,CAAAA;AAE/B,gBAAA,OAAO,CAACZ,WAAAA,CAAYgB,IAAI,CAAC,CAACE,GAAAA,GAAAA;AACxB,oBAAA,OAAOH,UAAUG,GAAAA,CAAAA,KAASJ,YAAAA;AAC5B,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,SAAA,CAAA,CACCR,IAAI,CAAC;YACJC,IAAAA,EAAM,4BAAA;AACNC,YAAAA,OAAAA,EAASS,OAAAA,CAAQ,qCAAA,CAAA;YACjBX,IAAAA,CAAAA,CAAKM,KAAK,EAAES,OAAO,EAAA;AACjB,gBAAA,IAAI,CAACT,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;AAEA,gBAAA,OAAOG,UAAUM,OAAAA,CAAQC,MAAM,CAACF,UAAU,MAAML,SAAAA,CAAUH,KAAAA,CAAAA;AAC5D,YAAA;AACF,SAAA,CAAA,CACCN,IAAI,CAAC;YACJC,IAAAA,EAAM,wBAAA;AACNC,YAAAA,OAAAA,EAASS,OAAAA,CAAQ,qCAAA,CAAA;AACjBX,YAAAA,IAAAA,CAAAA,CAAKM,KAAK,EAAA;AACR,gBAAA,IAAI,CAACA,KAAAA,EAAO;oBACV,OAAO,KAAA;AACT,gBAAA;AAEA,gBAAA,MAAME,eAAeC,SAAAA,CAAUH,KAAAA,CAAAA;AAE/B,gBAAA,OAAO,CAACd,cAAAA,CAAekB,IAAI,CAAC,CAACE,GAAAA,GAAAA;AAC3B,oBAAA,OAAOH,UAAUG,GAAAA,CAAAA,KAASJ,YAAAA;AAC5B,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,SAAA,CAAA,CACCK,QAAQ,CAACV,gBAAAA,CAAYU,QAAQ,CAACR,EAAE,CAAA;AACnCa,QAAAA,eAAAA,EAAiBpB,IAAIqB,OAAO,EAAA;AAC5BC,QAAAA,IAAAA,EAAMtB,GAAAA,CAAIC,MAAM,EAAA,CAAGsB,KAAK,CAAC;AAAC,YAAA,YAAA;AAAc,YAAA;AAAiB,SAAA;AAC3D,KAAA;IAEA,OAAOvB,GAAAA,CAAIwB,MAAM,CAAC1B,KAAAA,CAAAA;AACpB;;;;"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var snakeCase = require('lodash/snakeCase');
|
|
4
4
|
var pluralize = require('pluralize');
|
|
5
5
|
|
|
6
6
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
7
|
|
|
8
|
+
var snakeCase__default = /*#__PURE__*/_interopDefault(snakeCase);
|
|
8
9
|
var pluralize__default = /*#__PURE__*/_interopDefault(pluralize);
|
|
9
10
|
|
|
10
11
|
// TODO: create a utility for this
|
|
11
12
|
// Duplicate in server/src/services/schema-builder/component-builder.ts
|
|
12
13
|
const createComponentCollectionName = (name, category)=>{
|
|
13
|
-
return `components_${
|
|
14
|
+
return `components_${snakeCase__default.default(category)}_${pluralize__default.default(snakeCase__default.default(name))}`;
|
|
14
15
|
};
|
|
15
16
|
|
|
16
17
|
exports.createComponentCollectionName = createComponentCollectionName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createCollectionName.js","sources":["../../../../../../admin/src/components/FormModal/forms/utils/createCollectionName.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"createCollectionName.js","sources":["../../../../../../admin/src/components/FormModal/forms/utils/createCollectionName.ts"],"sourcesContent":["import snakeCase from 'lodash/snakeCase';\nimport pluralize from 'pluralize';\n\n// TODO: create a utility for this\n// Duplicate in server/src/services/schema-builder/component-builder.ts\nconst createComponentCollectionName = (name: string, category: string) => {\n return `components_${snakeCase(category)}_${pluralize(snakeCase(name))}`;\n};\n\nexport { createComponentCollectionName };\n"],"names":["createComponentCollectionName","name","category","snakeCase","pluralize"],"mappings":";;;;;;;;;;AAGA;AACA;AACA,MAAMA,6BAAAA,GAAgC,CAACC,IAAAA,EAAcC,QAAAA,GAAAA;IACnD,OAAO,CAAC,WAAW,EAAEC,0BAAAA,CAAUD,UAAU,CAAC,EAAEE,0BAAAA,CAAUD,0BAAAA,CAAUF,IAAAA,CAAAA,CAAAA,CAAAA,CAAQ;AAC1E;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createCollectionName.mjs","sources":["../../../../../../admin/src/components/FormModal/forms/utils/createCollectionName.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"createCollectionName.mjs","sources":["../../../../../../admin/src/components/FormModal/forms/utils/createCollectionName.ts"],"sourcesContent":["import snakeCase from 'lodash/snakeCase';\nimport pluralize from 'pluralize';\n\n// TODO: create a utility for this\n// Duplicate in server/src/services/schema-builder/component-builder.ts\nconst createComponentCollectionName = (name: string, category: string) => {\n return `components_${snakeCase(category)}_${pluralize(snakeCase(name))}`;\n};\n\nexport { createComponentCollectionName };\n"],"names":["createComponentCollectionName","name","category","snakeCase","pluralize"],"mappings":";;;AAGA;AACA;AACA,MAAMA,6BAAAA,GAAgC,CAACC,IAAAA,EAAcC,QAAAA,GAAAA;IACnD,OAAO,CAAC,WAAW,EAAEC,SAAAA,CAAUD,UAAU,CAAC,EAAEE,SAAAA,CAAUD,SAAAA,CAAUF,IAAAA,CAAAA,CAAAA,CAAAA,CAAQ;AAC1E;;;;"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var isStorageCompatibleRename = require('../../DataManager/utils/isStorageCompatibleRename.js');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Human label for what defines an attribute's storage: the type, plus the
|
|
7
|
+
* relation kind/target for relations and the component uid (+ repeatable) for
|
|
8
|
+
* components, so a warning can say what changed.
|
|
9
|
+
*/ const describeAttributeStorage = (attribute)=>{
|
|
10
|
+
const type = attribute.type ?? 'unknown';
|
|
11
|
+
if (type === 'relation') {
|
|
12
|
+
const details = [
|
|
13
|
+
attribute.relation,
|
|
14
|
+
attribute.target ? `to ${attribute.target}` : undefined
|
|
15
|
+
].filter(Boolean).join(' ');
|
|
16
|
+
return details ? `${type} (${details})` : type;
|
|
17
|
+
}
|
|
18
|
+
if (type === 'component') {
|
|
19
|
+
const details = [
|
|
20
|
+
attribute.component,
|
|
21
|
+
attribute.repeatable ? 'repeatable' : undefined
|
|
22
|
+
].filter(Boolean).join(', ');
|
|
23
|
+
return details ? `${type} (${details})` : type;
|
|
24
|
+
}
|
|
25
|
+
return type;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Detects an attribute edit that renames an existing field *and* changes its
|
|
29
|
+
* storage (type, relation kind/target, component uid/repeatable). Such a rename
|
|
30
|
+
* cannot be replayed as a data-preserving migration, so the field is dropped
|
|
31
|
+
* and recreated empty — the user should be warned before saving.
|
|
32
|
+
*
|
|
33
|
+
* For a relation, renaming the other side (`targetAttribute`) counts as well:
|
|
34
|
+
* the warning then names that field.
|
|
35
|
+
*
|
|
36
|
+
* Returns `null` when there is nothing to warn about: rename migrations are
|
|
37
|
+
* disabled, the field is brand new (no data yet), no name changed, or the
|
|
38
|
+
* storage is unchanged.
|
|
39
|
+
*/ const getRenameStorageChange = (initial, modified, mode)=>{
|
|
40
|
+
if (mode === 'never' || initial.status === 'NEW') {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const isRenamed = (oldName, newName)=>Boolean(oldName) && Boolean(newName) && oldName !== newName;
|
|
44
|
+
const renamed = [
|
|
45
|
+
[
|
|
46
|
+
initial.name,
|
|
47
|
+
modified.name
|
|
48
|
+
],
|
|
49
|
+
...initial.type === 'relation' ? [
|
|
50
|
+
[
|
|
51
|
+
initial.targetAttribute,
|
|
52
|
+
modified.targetAttribute
|
|
53
|
+
]
|
|
54
|
+
] : []
|
|
55
|
+
].find(([oldName, newName])=>isRenamed(oldName, newName));
|
|
56
|
+
if (!renamed) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
const [oldName, newName] = renamed;
|
|
60
|
+
if (isStorageCompatibleRename.isStorageCompatibleRename(initial, modified)) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
oldName,
|
|
65
|
+
newName,
|
|
66
|
+
oldType: describeAttributeStorage(initial),
|
|
67
|
+
newType: describeAttributeStorage(modified)
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
exports.describeAttributeStorage = describeAttributeStorage;
|
|
72
|
+
exports.getRenameStorageChange = getRenameStorageChange;
|
|
73
|
+
//# sourceMappingURL=getRenameStorageChange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getRenameStorageChange.js","sources":["../../../../../admin/src/components/FormModal/utils/getRenameStorageChange.ts"],"sourcesContent":["import { isStorageCompatibleRename } from '../../DataManager/utils/isStorageCompatibleRename';\n\nimport type { AnyAttribute, Status } from '../../../types';\nimport type { AttributeRenameMigrationMode } from '../../DataManager/RenameMigrationModal';\n\n/** The loosely typed attribute data held by the form reducer (`FormModalData`). */\nexport type AttributeFormData = Record<string, unknown> & {\n name?: string;\n status?: Status;\n type?: string;\n relation?: string;\n target?: string | null;\n component?: string;\n repeatable?: boolean;\n};\n\nexport interface RenameStorageChange {\n oldName: string;\n newName: string;\n /** Human label of the field's storage before the edit (e.g. `relation (oneToMany to api::tag.tag)`). */\n oldType: string;\n /** Human label of the field's storage after the edit. */\n newType: string;\n}\n\n/**\n * Human label for what defines an attribute's storage: the type, plus the\n * relation kind/target for relations and the component uid (+ repeatable) for\n * components, so a warning can say what changed.\n */\nexport const describeAttributeStorage = (attribute: AttributeFormData): string => {\n const type = attribute.type ?? 'unknown';\n\n if (type === 'relation') {\n const details = [attribute.relation, attribute.target ? `to ${attribute.target}` : undefined]\n .filter(Boolean)\n .join(' ');\n return details ? `${type} (${details})` : type;\n }\n\n if (type === 'component') {\n const details = [attribute.component, attribute.repeatable ? 'repeatable' : undefined]\n .filter(Boolean)\n .join(', ');\n return details ? `${type} (${details})` : type;\n }\n\n return type;\n};\n\n/**\n * Detects an attribute edit that renames an existing field *and* changes its\n * storage (type, relation kind/target, component uid/repeatable). Such a rename\n * cannot be replayed as a data-preserving migration, so the field is dropped\n * and recreated empty — the user should be warned before saving.\n *\n * For a relation, renaming the other side (`targetAttribute`) counts as well:\n * the warning then names that field.\n *\n * Returns `null` when there is nothing to warn about: rename migrations are\n * disabled, the field is brand new (no data yet), no name changed, or the\n * storage is unchanged.\n */\nexport const getRenameStorageChange = (\n initial: AttributeFormData,\n modified: AttributeFormData,\n mode: AttributeRenameMigrationMode\n): RenameStorageChange | null => {\n if (mode === 'never' || initial.status === 'NEW') {\n return null;\n }\n\n const isRenamed = (oldName: unknown, newName: unknown) =>\n Boolean(oldName) && Boolean(newName) && oldName !== newName;\n\n const renamed = [\n [initial.name, modified.name],\n ...(initial.type === 'relation' ? [[initial.targetAttribute, modified.targetAttribute]] : []),\n ].find(([oldName, newName]) => isRenamed(oldName, newName));\n if (!renamed) {\n return null;\n }\n\n const [oldName, newName] = renamed as [string, string];\n\n if (\n isStorageCompatibleRename(\n initial as unknown as AnyAttribute,\n modified as unknown as AnyAttribute\n )\n ) {\n return null;\n }\n\n return {\n oldName,\n newName,\n oldType: describeAttributeStorage(initial),\n newType: describeAttributeStorage(modified),\n };\n};\n"],"names":["describeAttributeStorage","attribute","type","details","relation","target","undefined","filter","Boolean","join","component","repeatable","getRenameStorageChange","initial","modified","mode","status","isRenamed","oldName","newName","renamed","name","targetAttribute","find","isStorageCompatibleRename","oldType","newType"],"mappings":";;;;AAyBA;;;;IAKO,MAAMA,wBAAAA,GAA2B,CAACC,SAAAA,GAAAA;IACvC,MAAMC,IAAAA,GAAOD,SAAAA,CAAUC,IAAI,IAAI,SAAA;AAE/B,IAAA,IAAIA,SAAS,UAAA,EAAY;AACvB,QAAA,MAAMC,OAAAA,GAAU;AAACF,YAAAA,SAAAA,CAAUG,QAAQ;YAAEH,SAAAA,CAAUI,MAAM,GAAG,CAAC,GAAG,EAAEJ,SAAAA,CAAUI,MAAM,EAAE,GAAGC;AAAU,SAAA,CAC1FC,MAAM,CAACC,OAAAA,CAAAA,CACPC,IAAI,CAAC,GAAA,CAAA;QACR,OAAON,OAAAA,GAAU,GAAGD,IAAAA,CAAK,EAAE,EAAEC,OAAAA,CAAQ,CAAC,CAAC,GAAGD,IAAAA;AAC5C,IAAA;AAEA,IAAA,IAAIA,SAAS,WAAA,EAAa;AACxB,QAAA,MAAMC,OAAAA,GAAU;AAACF,YAAAA,SAAAA,CAAUS,SAAS;YAAET,SAAAA,CAAUU,UAAU,GAAG,YAAA,GAAeL;AAAU,SAAA,CACnFC,MAAM,CAACC,OAAAA,CAAAA,CACPC,IAAI,CAAC,IAAA,CAAA;QACR,OAAON,OAAAA,GAAU,GAAGD,IAAAA,CAAK,EAAE,EAAEC,OAAAA,CAAQ,CAAC,CAAC,GAAGD,IAAAA;AAC5C,IAAA;IAEA,OAAOA,IAAAA;AACT;AAEA;;;;;;;;;;;;AAYC,IACM,MAAMU,sBAAAA,GAAyB,CACpCC,SACAC,QAAAA,EACAC,IAAAA,GAAAA;AAEA,IAAA,IAAIA,IAAAA,KAAS,OAAA,IAAWF,OAAAA,CAAQG,MAAM,KAAK,KAAA,EAAO;QAChD,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,SAAAA,GAAY,CAACC,OAAAA,EAAkBC,OAAAA,GACnCX,QAAQU,OAAAA,CAAAA,IAAYV,OAAAA,CAAQW,YAAYD,OAAAA,KAAYC,OAAAA;AAEtD,IAAA,MAAMC,OAAAA,GAAU;AACd,QAAA;AAACP,YAAAA,OAAAA,CAAQQ,IAAI;AAAEP,YAAAA,QAAAA,CAASO;AAAK,SAAA;WACzBR,OAAAA,CAAQX,IAAI,KAAK,UAAA,GAAa;AAAC,YAAA;AAACW,gBAAAA,OAAAA,CAAQS,eAAe;AAAER,gBAAAA,QAAAA,CAASQ;AAAgB;AAAC,SAAA,GAAG;KAC3F,CAACC,IAAI,CAAC,CAAC,CAACL,SAASC,OAAAA,CAAQ,GAAKF,UAAUC,OAAAA,EAASC,OAAAA,CAAAA,CAAAA;AAClD,IAAA,IAAI,CAACC,OAAAA,EAAS;QACZ,OAAO,IAAA;AACT,IAAA;IAEA,MAAM,CAACF,OAAAA,EAASC,OAAAA,CAAQ,GAAGC,OAAAA;IAE3B,IACEI,mDAAAA,CACEX,SACAC,QAAAA,CAAAA,EAEF;QACA,OAAO,IAAA;AACT,IAAA;IAEA,OAAO;AACLI,QAAAA,OAAAA;AACAC,QAAAA,OAAAA;AACAM,QAAAA,OAAAA,EAASzB,wBAAAA,CAAyBa,OAAAA,CAAAA;AAClCa,QAAAA,OAAAA,EAAS1B,wBAAAA,CAAyBc,QAAAA;AACpC,KAAA;AACF;;;;;"}
|