@strapi/data-transfer
Version:
Data transfer capabilities for Strapi
1 lines • 4.01 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../src/engine/validation/schemas/index.ts"],"sourcesContent":["import type { Struct } from '@strapi/types';\nimport { isArray, isObject, reject } from 'lodash/fp';\nimport type { Diff } from '../../../utils/json';\nimport * as utils from '../../../utils';\n\nconst OPTIONAL_CONTENT_TYPES = ['audit-log'] as const;\n\nconst isAttributeIgnorable = (diff: Diff) => {\n return (\n diff.path.length === 3 &&\n // Root property must be attributes\n diff.path[0] === 'attributes' &&\n // Need a valid string attribute name\n typeof diff.path[1] === 'string' &&\n // The diff must be on ignorable attribute properties\n ['private', 'required', 'configurable', 'default'].includes(diff.path[2])\n );\n};\n\n// TODO: clean up the type checking, which will require cleaning up the typings in utils/json.ts\n// exclude admin tables that are not transferable and are optionally available (such as audit logs which are only available in EE)\nconst isOptionalAdminType = (diff: Diff) => {\n // added/deleted\n if ('value' in diff && isObject(diff.value)) {\n const name = (diff?.value as Struct.ContentTypeSchema)?.info?.singularName;\n return (OPTIONAL_CONTENT_TYPES as ReadonlyArray<string | undefined>).includes(name);\n }\n\n // modified\n if ('values' in diff && isArray(diff.values) && isObject(diff.values[0])) {\n const name = (diff?.values[0] as Struct.ContentTypeSchema)?.info?.singularName;\n return (OPTIONAL_CONTENT_TYPES as ReadonlyArray<string | undefined>).includes(name);\n }\n\n return false;\n};\n\nconst isIgnorableStrict = (diff: Diff) => isAttributeIgnorable(diff) || isOptionalAdminType(diff);\n\nconst strategies = {\n // No diffs\n exact(diffs: Diff[]) {\n return diffs;\n },\n\n // Strict: all content types must match except:\n // - the property within a content type is an ignorable one\n // - those that are (not transferrable and optionally available), for example EE features such as audit logs\n strict(diffs: Diff[]) {\n return reject(isIgnorableStrict, diffs);\n },\n};\n\nconst compareSchemas = <T, P>(a: T, b: P, strategy: keyof typeof strategies) => {\n const diffs = utils.json.diff(a, b);\n return strategies[strategy](diffs);\n};\n\nexport { compareSchemas };\n"],"names":["OPTIONAL_CONTENT_TYPES","isAttributeIgnorable","diff","path","length","includes","isOptionalAdminType","isObject","value","name","info","singularName","isArray","values","isIgnorableStrict","strategies","exact","diffs","strict","reject","compareSchemas","a","b","strategy","utils"],"mappings":";;;;;;;;AAKA,MAAMA,sBAAAA,GAAyB;AAAC,IAAA;AAAY,CAAA;AAE5C,MAAMC,uBAAuB,CAACC,IAAAA,GAAAA;AAC5B,IAAA,OACEA,KAAKC,IAAI,CAACC,MAAM,KAAK;AAErBF,IAAAA,IAAAA,CAAKC,IAAI,CAAC,CAAA,CAAE,KAAK;AAEjB,IAAA,OAAOD,KAAKC,IAAI,CAAC,CAAA,CAAE,KAAK;AAExB,IAAA;AAAC,QAAA,SAAA;AAAW,QAAA,UAAA;AAAY,QAAA,cAAA;AAAgB,QAAA;AAAU,KAAA,CAACE,QAAQ,CAACH,IAAAA,CAAKC,IAAI,CAAC,CAAA,CAAE,CAAA;AAE5E,CAAA;AAEA;AACA;AACA,MAAMG,sBAAsB,CAACJ,IAAAA,GAAAA;;AAE3B,IAAA,IAAI,OAAA,IAAWA,IAAAA,IAAQK,QAAAA,CAASL,IAAAA,CAAKM,KAAK,CAAA,EAAG;QAC3C,MAAMC,IAAAA,GAAQP,IAAAA,EAAMM,KAAAA,EAAoCE,IAAAA,EAAMC,YAAAA;QAC9D,OAAQX,sBAAAA,CAA6DK,QAAQ,CAACI,IAAAA,CAAAA;AAChF,IAAA;;IAGA,IAAI,QAAA,IAAYP,IAAAA,IAAQU,OAAAA,CAAQV,IAAAA,CAAKW,MAAM,CAAA,IAAKN,QAAAA,CAASL,IAAAA,CAAKW,MAAM,CAAC,CAAA,CAAE,CAAA,EAAG;AACxE,QAAA,MAAMJ,OAAQP,IAAAA,EAAMW,MAAM,CAAC,CAAA,CAAE,EAA+BH,IAAAA,EAAMC,YAAAA;QAClE,OAAQX,sBAAAA,CAA6DK,QAAQ,CAACI,IAAAA,CAAAA;AAChF,IAAA;IAEA,OAAO,KAAA;AACT,CAAA;AAEA,MAAMK,iBAAAA,GAAoB,CAACZ,IAAAA,GAAeD,oBAAAA,CAAqBC,SAASI,mBAAAA,CAAoBJ,IAAAA,CAAAA;AAE5F,MAAMa,UAAAA,GAAa;;AAEjBC,IAAAA,KAAAA,CAAAA,CAAMC,KAAa,EAAA;QACjB,OAAOA,KAAAA;AACT,IAAA,CAAA;;;;AAKAC,IAAAA,MAAAA,CAAAA,CAAOD,KAAa,EAAA;AAClB,QAAA,OAAOE,OAAOL,iBAAAA,EAAmBG,KAAAA,CAAAA;AACnC,IAAA;AACF,CAAA;AAEA,MAAMG,cAAAA,GAAiB,CAAOC,CAAAA,EAAMC,CAAAA,EAAMC,QAAAA,GAAAA;AACxC,IAAA,MAAMN,QAAQO,IAAe,CAACH,CAAAA,EAAGC,CAAAA,CAAAA;IACjC,OAAOP,UAAU,CAACQ,QAAAA,CAAS,CAACN,KAAAA,CAAAA;AAC9B;;;;"}