@strapi/core 0.0.0-experimental.fc1ac2acd58c8a5a858679956b6d102ac5ee4011 → 5.0.0-alpha.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/Strapi.d.ts +5 -3
- package/dist/Strapi.d.ts.map +1 -1
- package/dist/Strapi.js +23 -11
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +23 -11
- package/dist/Strapi.mjs.map +1 -1
- package/dist/ee/index.js.map +1 -1
- package/dist/ee/index.mjs.map +1 -1
- package/dist/middlewares/security.d.ts.map +1 -1
- package/dist/middlewares/security.js +2 -2
- package/dist/middlewares/security.js.map +1 -1
- package/dist/middlewares/security.mjs +2 -2
- package/dist/middlewares/security.mjs.map +1 -1
- package/dist/migrations/draft-publish.d.ts.map +1 -1
- package/dist/migrations/draft-publish.js +1 -1
- package/dist/migrations/draft-publish.js.map +1 -1
- package/dist/migrations/draft-publish.mjs +1 -1
- package/dist/migrations/draft-publish.mjs.map +1 -1
- package/dist/services/document-service/index.d.ts.map +1 -1
- package/dist/services/document-service/index.js +6 -4
- package/dist/services/document-service/index.js.map +1 -1
- package/dist/services/document-service/index.mjs +3 -1
- package/dist/services/document-service/index.mjs.map +1 -1
- package/dist/services/document-service/middlewares/errors.d.ts +6 -0
- package/dist/services/document-service/middlewares/errors.d.ts.map +1 -0
- package/dist/services/document-service/middlewares/errors.js +25 -0
- package/dist/services/document-service/middlewares/errors.js.map +1 -0
- package/dist/services/document-service/middlewares/errors.mjs +25 -0
- package/dist/services/document-service/middlewares/errors.mjs.map +1 -0
- package/dist/services/document-service/middlewares/index.d.ts +3 -0
- package/dist/services/document-service/middlewares/index.d.ts.map +1 -0
- package/dist/services/document-service/{middlewares.d.ts → middlewares/middleware-manager.d.ts} +3 -4
- package/dist/services/document-service/middlewares/middleware-manager.d.ts.map +1 -0
- package/dist/services/document-service/{middlewares.js → middlewares/middleware-manager.js} +1 -1
- package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -0
- package/dist/services/document-service/{middlewares.mjs → middlewares/middleware-manager.mjs} +1 -1
- package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -0
- package/dist/services/document-service/repository.d.ts.map +1 -1
- package/dist/services/document-service/repository.js +28 -37
- package/dist/services/document-service/repository.js.map +1 -1
- package/dist/services/document-service/repository.mjs +28 -37
- package/dist/services/document-service/repository.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/utils/dp.js +9 -4
- package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
- package/dist/services/document-service/transform/relations/utils/dp.mjs +9 -4
- package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.d.ts +2 -2
- package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.js +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.mjs +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
- package/dist/services/document-service/utils/populate.d.ts +8 -1
- package/dist/services/document-service/utils/populate.d.ts.map +1 -1
- package/dist/services/document-service/utils/populate.js +4 -4
- package/dist/services/document-service/utils/populate.js.map +1 -1
- package/dist/services/document-service/utils/populate.mjs +4 -4
- package/dist/services/document-service/utils/populate.mjs.map +1 -1
- package/dist/services/entity-service/components.d.ts +1 -4
- package/dist/services/entity-service/components.d.ts.map +1 -1
- package/dist/services/entity-service/components.js +7 -93
- package/dist/services/entity-service/components.js.map +1 -1
- package/dist/services/entity-service/components.mjs +7 -93
- package/dist/services/entity-service/components.mjs.map +1 -1
- package/dist/services/entity-service/index.d.ts +1 -3
- package/dist/services/entity-service/index.d.ts.map +1 -1
- package/dist/services/entity-service/index.js +34 -199
- package/dist/services/entity-service/index.js.map +1 -1
- package/dist/services/entity-service/index.mjs +27 -192
- package/dist/services/entity-service/index.mjs.map +1 -1
- package/dist/services/entity-validator/index.js +1 -1
- package/dist/services/entity-validator/index.js.map +1 -1
- package/dist/services/entity-validator/index.mjs +1 -1
- package/dist/services/entity-validator/index.mjs.map +1 -1
- package/dist/utils/is-initialized.js +1 -1
- package/dist/utils/is-initialized.js.map +1 -1
- package/dist/utils/is-initialized.mjs +1 -1
- package/dist/utils/is-initialized.mjs.map +1 -1
- package/package.json +15 -15
- package/dist/services/document-service/middlewares.d.ts.map +0 -1
- package/dist/services/document-service/middlewares.js.map +0 -1
- package/dist/services/document-service/middlewares.mjs.map +0 -1
- package/dist/services/document-service/transform/filters.d.ts +0 -3
- package/dist/services/document-service/transform/filters.d.ts.map +0 -1
- package/dist/services/document-service/transform/relations/transform/output-ids.d.ts +0 -4
- package/dist/services/document-service/transform/relations/transform/output-ids.d.ts.map +0 -1
- package/dist/services/document-service/transform/sort.d.ts +0 -5
- package/dist/services/document-service/transform/sort.d.ts.map +0 -1
- package/dist/services/document-service/transform/utils.d.ts +0 -9
- package/dist/services/document-service/transform/utils.d.ts.map +0 -1
- package/dist/services/utils/upload-files.d.ts +0 -8
- package/dist/services/utils/upload-files.d.ts.map +0 -1
- package/dist/services/utils/upload-files.js +0 -64
- package/dist/services/utils/upload-files.js.map +0 -1
- package/dist/services/utils/upload-files.mjs +0 -63
- package/dist/services/utils/upload-files.mjs.map +0 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"security.js","sources":["../../src/middlewares/security.ts"],"sourcesContent":["import { defaultsDeep, merge } from 'lodash/fp';\nimport helmet, { KoaHelmet } from 'koa-helmet';\n\nimport type { Common } from '@strapi/types';\n\nexport type Config = NonNullable<Parameters<KoaHelmet>[0]>;\n\nconst defaults: Config = {\n crossOriginEmbedderPolicy: false,\n crossOriginOpenerPolicy: false,\n crossOriginResourcePolicy: false,\n originAgentCluster: false,\n contentSecurityPolicy: {\n useDefaults: true,\n directives: {\n 'connect-src': [\"'self'\", 'https:'],\n 'img-src': [\"'self'\", 'data:', 'blob:', 'https://market-assets.strapi.io'],\n 'media-src': [\"'self'\", 'data:', 'blob:'],\n upgradeInsecureRequests: null,\n },\n },\n xssFilter: false,\n hsts: {\n maxAge: 31536000,\n includeSubDomains: true,\n },\n frameguard: {\n action: 'sameorigin',\n },\n};\n\nexport const security: Common.MiddlewareFactory<Config> =\n (config, { strapi }) =>\n (ctx, next) => {\n let helmetConfig: Config = defaultsDeep(defaults, config);\n\n const specialPaths = ['/documentation'];\n\n const directives: {\n 'script-src': string[];\n 'img-src': string[];\n 'manifest-src': string[];\n 'frame-src': string[];\n } = {\n 'script-src': [\"'self'\", \"'unsafe-inline'\", 'cdn.jsdelivr.net'],\n 'img-src': [\"'self'\", 'data:', 'cdn.jsdelivr.net', 'strapi.io'],\n 'manifest-src': [],\n 'frame-src': [],\n };\n\n // if apollo graphql playground is enabled, add exceptions for it\n if (strapi.plugin('graphql')?.service('utils').playground.isEnabled()) {\n const { config: gqlConfig } = strapi.plugin('graphql');\n specialPaths.push(gqlConfig('endpoint'));\n\n directives['script-src'].push(`https: 'unsafe-inline'`);\n directives['img-src'].push(`'apollo-server-landing-page.cdn.apollographql.com'`);\n directives['manifest-src'].push(`'self'`);\n directives['manifest-src'].push('apollo-server-landing-page.cdn.apollographql.com');\n directives['frame-src'].push(`'self'`);\n directives['frame-src'].push('sandbox.embed.apollographql.com');\n }\n\n // TODO: we shouldn't combine playground exceptions with documentation for all routes, we should first check the path and then return exceptions specific to that\n if (ctx.method === 'GET' && specialPaths.some((str) => ctx.path.startsWith(str))) {\n helmetConfig = merge(helmetConfig, {\n crossOriginEmbedderPolicy: false, // TODO: only use this for graphql playground\n contentSecurityPolicy: {\n directives,\n },\n });\n }\n\n if (ctx.method === 'GET'
|
1
|
+
{"version":3,"file":"security.js","sources":["../../src/middlewares/security.ts"],"sourcesContent":["import { defaultsDeep, merge } from 'lodash/fp';\nimport helmet, { KoaHelmet } from 'koa-helmet';\n\nimport type { Common } from '@strapi/types';\n\nexport type Config = NonNullable<Parameters<KoaHelmet>[0]>;\n\nconst defaults: Config = {\n crossOriginEmbedderPolicy: false,\n crossOriginOpenerPolicy: false,\n crossOriginResourcePolicy: false,\n originAgentCluster: false,\n contentSecurityPolicy: {\n useDefaults: true,\n directives: {\n 'connect-src': [\"'self'\", 'https:'],\n 'img-src': [\"'self'\", 'data:', 'blob:', 'https://market-assets.strapi.io'],\n 'media-src': [\"'self'\", 'data:', 'blob:'],\n upgradeInsecureRequests: null,\n },\n },\n xssFilter: false,\n hsts: {\n maxAge: 31536000,\n includeSubDomains: true,\n },\n frameguard: {\n action: 'sameorigin',\n },\n};\n\nexport const security: Common.MiddlewareFactory<Config> =\n (config, { strapi }) =>\n (ctx, next) => {\n let helmetConfig: Config = defaultsDeep(defaults, config);\n\n const specialPaths = ['/documentation'];\n\n const directives: {\n 'script-src': string[];\n 'img-src': string[];\n 'manifest-src': string[];\n 'frame-src': string[];\n } = {\n 'script-src': [\"'self'\", \"'unsafe-inline'\", 'cdn.jsdelivr.net'],\n 'img-src': [\"'self'\", 'data:', 'cdn.jsdelivr.net', 'strapi.io'],\n 'manifest-src': [],\n 'frame-src': [],\n };\n\n // if apollo graphql playground is enabled, add exceptions for it\n if (strapi.plugin('graphql')?.service('utils').playground.isEnabled()) {\n const { config: gqlConfig } = strapi.plugin('graphql');\n specialPaths.push(gqlConfig('endpoint'));\n\n directives['script-src'].push(`https: 'unsafe-inline'`);\n directives['img-src'].push(`'apollo-server-landing-page.cdn.apollographql.com'`);\n directives['manifest-src'].push(`'self'`);\n directives['manifest-src'].push('apollo-server-landing-page.cdn.apollographql.com');\n directives['frame-src'].push(`'self'`);\n directives['frame-src'].push('sandbox.embed.apollographql.com');\n }\n\n // TODO: we shouldn't combine playground exceptions with documentation for all routes, we should first check the path and then return exceptions specific to that\n if (ctx.method === 'GET' && specialPaths.some((str) => ctx.path.startsWith(str))) {\n helmetConfig = merge(helmetConfig, {\n crossOriginEmbedderPolicy: false, // TODO: only use this for graphql playground\n contentSecurityPolicy: {\n directives,\n },\n });\n }\n\n /**\n * These are for vite's watch mode so it can accurately\n * connect to the HMR websocket & reconnect on failure\n * or when the server restarts.\n *\n * It only applies in development, and only on GET requests\n * that are part of the admin route.\n */\n if (\n process.env.NODE_ENV === 'development' &&\n ctx.method === 'GET' &&\n ['/admin'].some((str) => ctx.path.startsWith(str))\n ) {\n helmetConfig = merge(helmetConfig, {\n contentSecurityPolicy: {\n directives: {\n 'script-src': [\"'self'\", \"'unsafe-inline'\"],\n 'connect-src': [\"'self'\", 'http:', 'https:', 'ws:'],\n },\n },\n });\n }\n\n return helmet(helmetConfig)(ctx, next);\n };\n"],"names":["defaultsDeep","merge","helmet"],"mappings":";;;;;;AAOA,MAAM,WAAmB;AAAA,EACvB,2BAA2B;AAAA,EAC3B,yBAAyB;AAAA,EACzB,2BAA2B;AAAA,EAC3B,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,YAAY;AAAA,MACV,eAAe,CAAC,UAAU,QAAQ;AAAA,MAClC,WAAW,CAAC,UAAU,SAAS,SAAS,iCAAiC;AAAA,MACzE,aAAa,CAAC,UAAU,SAAS,OAAO;AAAA,MACxC,yBAAyB;AAAA,IAC3B;AAAA,EACF;AAAA,EACA,WAAW;AAAA,EACX,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,mBAAmB;AAAA,EACrB;AAAA,EACA,YAAY;AAAA,IACV,QAAQ;AAAA,EACV;AACF;AAEa,MAAA,WACX,CAAC,QAAQ,EAAE,aACX,CAAC,KAAK,SAAS;AACT,MAAA,eAAuBA,EAAAA,aAAa,UAAU,MAAM;AAElD,QAAA,eAAe,CAAC,gBAAgB;AAEtC,QAAM,aAKF;AAAA,IACF,cAAc,CAAC,UAAU,mBAAmB,kBAAkB;AAAA,IAC9D,WAAW,CAAC,UAAU,SAAS,oBAAoB,WAAW;AAAA,IAC9D,gBAAgB,CAAC;AAAA,IACjB,aAAa,CAAC;AAAA,EAAA;AAIZ,MAAA,OAAO,OAAO,SAAS,GAAG,QAAQ,OAAO,EAAE,WAAW,aAAa;AACrE,UAAM,EAAE,QAAQ,UAAA,IAAc,OAAO,OAAO,SAAS;AACxC,iBAAA,KAAK,UAAU,UAAU,CAAC;AAE5B,eAAA,YAAY,EAAE,KAAK,wBAAwB;AAC3C,eAAA,SAAS,EAAE,KAAK,oDAAoD;AACpE,eAAA,cAAc,EAAE,KAAK,QAAQ;AAC7B,eAAA,cAAc,EAAE,KAAK,kDAAkD;AACvE,eAAA,WAAW,EAAE,KAAK,QAAQ;AAC1B,eAAA,WAAW,EAAE,KAAK,iCAAiC;AAAA,EAChE;AAGA,MAAI,IAAI,WAAW,SAAS,aAAa,KAAK,CAAC,QAAQ,IAAI,KAAK,WAAW,GAAG,CAAC,GAAG;AAChF,mBAAeC,QAAM,cAAc;AAAA,MACjC,2BAA2B;AAAA;AAAA,MAC3B,uBAAuB;AAAA,QACrB;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EACH;AAUA,MACE,QAAQ,IAAI,aAAa,iBACzB,IAAI,WAAW,SACf,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,WAAW,GAAG,CAAC,GACjD;AACA,mBAAeA,QAAM,cAAc;AAAA,MACjC,uBAAuB;AAAA,QACrB,YAAY;AAAA,UACV,cAAc,CAAC,UAAU,iBAAiB;AAAA,UAC1C,eAAe,CAAC,UAAU,SAAS,UAAU,KAAK;AAAA,QACpD;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EACH;AAEA,SAAOC,gBAAO,QAAA,YAAY,EAAE,KAAK,IAAI;AACvC;;"}
|
@@ -51,12 +51,12 @@ const security = (config, { strapi }) => (ctx, next) => {
|
|
51
51
|
}
|
52
52
|
});
|
53
53
|
}
|
54
|
-
if (ctx.method === "GET" && ["/admin"].some((str) => ctx.path.startsWith(str))) {
|
54
|
+
if (process.env.NODE_ENV === "development" && ctx.method === "GET" && ["/admin"].some((str) => ctx.path.startsWith(str))) {
|
55
55
|
helmetConfig = merge(helmetConfig, {
|
56
56
|
contentSecurityPolicy: {
|
57
57
|
directives: {
|
58
58
|
"script-src": ["'self'", "'unsafe-inline'"],
|
59
|
-
"connect-src": ["'self'", "https:", "ws:"]
|
59
|
+
"connect-src": ["'self'", "http:", "https:", "ws:"]
|
60
60
|
}
|
61
61
|
}
|
62
62
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"security.mjs","sources":["../../src/middlewares/security.ts"],"sourcesContent":["import { defaultsDeep, merge } from 'lodash/fp';\nimport helmet, { KoaHelmet } from 'koa-helmet';\n\nimport type { Common } from '@strapi/types';\n\nexport type Config = NonNullable<Parameters<KoaHelmet>[0]>;\n\nconst defaults: Config = {\n crossOriginEmbedderPolicy: false,\n crossOriginOpenerPolicy: false,\n crossOriginResourcePolicy: false,\n originAgentCluster: false,\n contentSecurityPolicy: {\n useDefaults: true,\n directives: {\n 'connect-src': [\"'self'\", 'https:'],\n 'img-src': [\"'self'\", 'data:', 'blob:', 'https://market-assets.strapi.io'],\n 'media-src': [\"'self'\", 'data:', 'blob:'],\n upgradeInsecureRequests: null,\n },\n },\n xssFilter: false,\n hsts: {\n maxAge: 31536000,\n includeSubDomains: true,\n },\n frameguard: {\n action: 'sameorigin',\n },\n};\n\nexport const security: Common.MiddlewareFactory<Config> =\n (config, { strapi }) =>\n (ctx, next) => {\n let helmetConfig: Config = defaultsDeep(defaults, config);\n\n const specialPaths = ['/documentation'];\n\n const directives: {\n 'script-src': string[];\n 'img-src': string[];\n 'manifest-src': string[];\n 'frame-src': string[];\n } = {\n 'script-src': [\"'self'\", \"'unsafe-inline'\", 'cdn.jsdelivr.net'],\n 'img-src': [\"'self'\", 'data:', 'cdn.jsdelivr.net', 'strapi.io'],\n 'manifest-src': [],\n 'frame-src': [],\n };\n\n // if apollo graphql playground is enabled, add exceptions for it\n if (strapi.plugin('graphql')?.service('utils').playground.isEnabled()) {\n const { config: gqlConfig } = strapi.plugin('graphql');\n specialPaths.push(gqlConfig('endpoint'));\n\n directives['script-src'].push(`https: 'unsafe-inline'`);\n directives['img-src'].push(`'apollo-server-landing-page.cdn.apollographql.com'`);\n directives['manifest-src'].push(`'self'`);\n directives['manifest-src'].push('apollo-server-landing-page.cdn.apollographql.com');\n directives['frame-src'].push(`'self'`);\n directives['frame-src'].push('sandbox.embed.apollographql.com');\n }\n\n // TODO: we shouldn't combine playground exceptions with documentation for all routes, we should first check the path and then return exceptions specific to that\n if (ctx.method === 'GET' && specialPaths.some((str) => ctx.path.startsWith(str))) {\n helmetConfig = merge(helmetConfig, {\n crossOriginEmbedderPolicy: false, // TODO: only use this for graphql playground\n contentSecurityPolicy: {\n directives,\n },\n });\n }\n\n if (ctx.method === 'GET'
|
1
|
+
{"version":3,"file":"security.mjs","sources":["../../src/middlewares/security.ts"],"sourcesContent":["import { defaultsDeep, merge } from 'lodash/fp';\nimport helmet, { KoaHelmet } from 'koa-helmet';\n\nimport type { Common } from '@strapi/types';\n\nexport type Config = NonNullable<Parameters<KoaHelmet>[0]>;\n\nconst defaults: Config = {\n crossOriginEmbedderPolicy: false,\n crossOriginOpenerPolicy: false,\n crossOriginResourcePolicy: false,\n originAgentCluster: false,\n contentSecurityPolicy: {\n useDefaults: true,\n directives: {\n 'connect-src': [\"'self'\", 'https:'],\n 'img-src': [\"'self'\", 'data:', 'blob:', 'https://market-assets.strapi.io'],\n 'media-src': [\"'self'\", 'data:', 'blob:'],\n upgradeInsecureRequests: null,\n },\n },\n xssFilter: false,\n hsts: {\n maxAge: 31536000,\n includeSubDomains: true,\n },\n frameguard: {\n action: 'sameorigin',\n },\n};\n\nexport const security: Common.MiddlewareFactory<Config> =\n (config, { strapi }) =>\n (ctx, next) => {\n let helmetConfig: Config = defaultsDeep(defaults, config);\n\n const specialPaths = ['/documentation'];\n\n const directives: {\n 'script-src': string[];\n 'img-src': string[];\n 'manifest-src': string[];\n 'frame-src': string[];\n } = {\n 'script-src': [\"'self'\", \"'unsafe-inline'\", 'cdn.jsdelivr.net'],\n 'img-src': [\"'self'\", 'data:', 'cdn.jsdelivr.net', 'strapi.io'],\n 'manifest-src': [],\n 'frame-src': [],\n };\n\n // if apollo graphql playground is enabled, add exceptions for it\n if (strapi.plugin('graphql')?.service('utils').playground.isEnabled()) {\n const { config: gqlConfig } = strapi.plugin('graphql');\n specialPaths.push(gqlConfig('endpoint'));\n\n directives['script-src'].push(`https: 'unsafe-inline'`);\n directives['img-src'].push(`'apollo-server-landing-page.cdn.apollographql.com'`);\n directives['manifest-src'].push(`'self'`);\n directives['manifest-src'].push('apollo-server-landing-page.cdn.apollographql.com');\n directives['frame-src'].push(`'self'`);\n directives['frame-src'].push('sandbox.embed.apollographql.com');\n }\n\n // TODO: we shouldn't combine playground exceptions with documentation for all routes, we should first check the path and then return exceptions specific to that\n if (ctx.method === 'GET' && specialPaths.some((str) => ctx.path.startsWith(str))) {\n helmetConfig = merge(helmetConfig, {\n crossOriginEmbedderPolicy: false, // TODO: only use this for graphql playground\n contentSecurityPolicy: {\n directives,\n },\n });\n }\n\n /**\n * These are for vite's watch mode so it can accurately\n * connect to the HMR websocket & reconnect on failure\n * or when the server restarts.\n *\n * It only applies in development, and only on GET requests\n * that are part of the admin route.\n */\n if (\n process.env.NODE_ENV === 'development' &&\n ctx.method === 'GET' &&\n ['/admin'].some((str) => ctx.path.startsWith(str))\n ) {\n helmetConfig = merge(helmetConfig, {\n contentSecurityPolicy: {\n directives: {\n 'script-src': [\"'self'\", \"'unsafe-inline'\"],\n 'connect-src': [\"'self'\", 'http:', 'https:', 'ws:'],\n },\n },\n });\n }\n\n return helmet(helmetConfig)(ctx, next);\n };\n"],"names":[],"mappings":";;AAOA,MAAM,WAAmB;AAAA,EACvB,2BAA2B;AAAA,EAC3B,yBAAyB;AAAA,EACzB,2BAA2B;AAAA,EAC3B,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,IACrB,aAAa;AAAA,IACb,YAAY;AAAA,MACV,eAAe,CAAC,UAAU,QAAQ;AAAA,MAClC,WAAW,CAAC,UAAU,SAAS,SAAS,iCAAiC;AAAA,MACzE,aAAa,CAAC,UAAU,SAAS,OAAO;AAAA,MACxC,yBAAyB;AAAA,IAC3B;AAAA,EACF;AAAA,EACA,WAAW;AAAA,EACX,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,mBAAmB;AAAA,EACrB;AAAA,EACA,YAAY;AAAA,IACV,QAAQ;AAAA,EACV;AACF;AAEa,MAAA,WACX,CAAC,QAAQ,EAAE,aACX,CAAC,KAAK,SAAS;AACT,MAAA,eAAuB,aAAa,UAAU,MAAM;AAElD,QAAA,eAAe,CAAC,gBAAgB;AAEtC,QAAM,aAKF;AAAA,IACF,cAAc,CAAC,UAAU,mBAAmB,kBAAkB;AAAA,IAC9D,WAAW,CAAC,UAAU,SAAS,oBAAoB,WAAW;AAAA,IAC9D,gBAAgB,CAAC;AAAA,IACjB,aAAa,CAAC;AAAA,EAAA;AAIZ,MAAA,OAAO,OAAO,SAAS,GAAG,QAAQ,OAAO,EAAE,WAAW,aAAa;AACrE,UAAM,EAAE,QAAQ,UAAA,IAAc,OAAO,OAAO,SAAS;AACxC,iBAAA,KAAK,UAAU,UAAU,CAAC;AAE5B,eAAA,YAAY,EAAE,KAAK,wBAAwB;AAC3C,eAAA,SAAS,EAAE,KAAK,oDAAoD;AACpE,eAAA,cAAc,EAAE,KAAK,QAAQ;AAC7B,eAAA,cAAc,EAAE,KAAK,kDAAkD;AACvE,eAAA,WAAW,EAAE,KAAK,QAAQ;AAC1B,eAAA,WAAW,EAAE,KAAK,iCAAiC;AAAA,EAChE;AAGA,MAAI,IAAI,WAAW,SAAS,aAAa,KAAK,CAAC,QAAQ,IAAI,KAAK,WAAW,GAAG,CAAC,GAAG;AAChF,mBAAe,MAAM,cAAc;AAAA,MACjC,2BAA2B;AAAA;AAAA,MAC3B,uBAAuB;AAAA,QACrB;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EACH;AAUA,MACE,QAAQ,IAAI,aAAa,iBACzB,IAAI,WAAW,SACf,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,WAAW,GAAG,CAAC,GACjD;AACA,mBAAe,MAAM,cAAc;AAAA,MACjC,uBAAuB;AAAA,QACrB,YAAY;AAAA,UACV,cAAc,CAAC,UAAU,iBAAiB;AAAA,UAC1C,eAAe,CAAC,UAAU,SAAS,UAAU,KAAK;AAAA,QACpD;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EACH;AAEA,SAAO,OAAO,YAAY,EAAE,KAAK,IAAI;AACvC;"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"draft-publish.d.ts","sourceRoot":"","sources":["../../src/migrations/draft-publish.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,UAAU,KAAK;IACb,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACpD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;CAClD;AAED;;;;;;;GAOG;AACH,QAAA,MAAM,qBAAqB,sCAA6C,KAAK,
|
1
|
+
{"version":3,"file":"draft-publish.d.ts","sourceRoot":"","sources":["../../src/migrations/draft-publish.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,UAAU,KAAK;IACb,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACpD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;CAClD;AAED;;;;;;;GAOG;AACH,QAAA,MAAM,qBAAqB,sCAA6C,KAAK,kBAkE5E,CAAC;AAEF,QAAA,MAAM,sBAAsB,sCAA6C,KAAK,kBAqB7E,CAAC;AAEF,OAAO,EAAE,qBAAqB,IAAI,MAAM,EAAE,sBAAsB,IAAI,OAAO,EAAE,CAAC"}
|
@@ -30,7 +30,7 @@ const enableDraftAndPublish = async ({ oldContentTypes, contentTypes }) => {
|
|
30
30
|
return qb.raw("NULL as published_at");
|
31
31
|
}
|
32
32
|
if (att === "updated_at") {
|
33
|
-
return qb.raw(
|
33
|
+
return qb.raw(`? as updated_at`, [/* @__PURE__ */ new Date()]);
|
34
34
|
}
|
35
35
|
return att;
|
36
36
|
})
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"draft-publish.js","sources":["../../src/migrations/draft-publish.ts"],"sourcesContent":["import { contentTypes as contentTypesUtils } from '@strapi/utils';\nimport { Schema } from '@strapi/types';\n\ninterface Input {\n oldContentTypes: Record<string, Schema.ContentType>;\n contentTypes: Record<string, Schema.ContentType>;\n}\n\n/**\n * Enable draft and publish for content types.\n *\n * Draft and publish disabled content types will have their entries published,\n * this migration clones those entries as drafts.\n *\n * TODO: Clone components, dynamic zones and relations\n */\nconst enableDraftAndPublish = async ({ oldContentTypes, contentTypes }: Input) => {\n if (!oldContentTypes) {\n return;\n }\n\n // run the after content types migrations\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n // if d&p was enabled set publishedAt to eq createdAt\n if (\n !contentTypesUtils.hasDraftAndPublish(oldContentType) &&\n contentTypesUtils.hasDraftAndPublish(contentType)\n ) {\n const metadata = strapi.db.metadata.get(uid);\n\n // Extract all scalar attributes to use in the insert query\n const attributes = Object.values(metadata.attributes).reduce((acc, attribute: any) => {\n if (['id'].includes(attribute.columnName)) {\n return acc;\n }\n\n if (contentTypesUtils.isScalarAttribute(attribute)) {\n acc.push(attribute.columnName);\n }\n\n return acc;\n }, [] as string[]);\n\n /**\n * INSERT INTO tableName (columnName1, columnName2, columnName3, ...)\n * SELECT columnName1, columnName2, columnName3, ...\n * FROM tableName\n */\n const qb = strapi.db?.getConnection();\n await qb\n // INSERT INTO tableName (columnName1, columnName2, columnName3, ...)\n .into(qb.raw(`${metadata.tableName} (${attributes.join(', ')})`))\n .insert((subQb: typeof qb) => {\n // SELECT columnName1, columnName2, columnName3, ...\n subQb\n .select(\n ...attributes.map((att) => {\n // Override 'publishedAt' and 'updatedAt' attributes\n if (att === 'published_at') {\n return qb.raw('NULL as published_at');\n }\n\n
|
1
|
+
{"version":3,"file":"draft-publish.js","sources":["../../src/migrations/draft-publish.ts"],"sourcesContent":["import { contentTypes as contentTypesUtils } from '@strapi/utils';\nimport { Schema } from '@strapi/types';\n\ninterface Input {\n oldContentTypes: Record<string, Schema.ContentType>;\n contentTypes: Record<string, Schema.ContentType>;\n}\n\n/**\n * Enable draft and publish for content types.\n *\n * Draft and publish disabled content types will have their entries published,\n * this migration clones those entries as drafts.\n *\n * TODO: Clone components, dynamic zones and relations\n */\nconst enableDraftAndPublish = async ({ oldContentTypes, contentTypes }: Input) => {\n if (!oldContentTypes) {\n return;\n }\n\n // run the after content types migrations\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n // if d&p was enabled set publishedAt to eq createdAt\n if (\n !contentTypesUtils.hasDraftAndPublish(oldContentType) &&\n contentTypesUtils.hasDraftAndPublish(contentType)\n ) {\n const metadata = strapi.db.metadata.get(uid);\n\n // Extract all scalar attributes to use in the insert query\n const attributes = Object.values(metadata.attributes).reduce((acc, attribute: any) => {\n if (['id'].includes(attribute.columnName)) {\n return acc;\n }\n\n if (contentTypesUtils.isScalarAttribute(attribute)) {\n acc.push(attribute.columnName);\n }\n\n return acc;\n }, [] as string[]);\n\n /**\n * INSERT INTO tableName (columnName1, columnName2, columnName3, ...)\n * SELECT columnName1, columnName2, columnName3, ...\n * FROM tableName\n */\n const qb = strapi.db?.getConnection();\n await qb\n // INSERT INTO tableName (columnName1, columnName2, columnName3, ...)\n .into(qb.raw(`${metadata.tableName} (${attributes.join(', ')})`))\n .insert((subQb: typeof qb) => {\n // SELECT columnName1, columnName2, columnName3, ...\n subQb\n .select(\n ...attributes.map((att) => {\n // Override 'publishedAt' and 'updatedAt' attributes\n if (att === 'published_at') {\n return qb.raw('NULL as published_at');\n }\n\n if (att === 'updated_at') {\n return qb.raw(`? as updated_at`, [new Date()]);\n }\n\n return att;\n })\n )\n .from(metadata.tableName)\n .whereNotNull('published_at');\n });\n }\n }\n};\n\nconst disableDraftAndPublish = async ({ oldContentTypes, contentTypes }: Input) => {\n if (!oldContentTypes) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n // if d&p was disabled remove unpublish content before sync\n if (\n contentTypesUtils.hasDraftAndPublish(oldContentType) &&\n !contentTypesUtils.hasDraftAndPublish(contentType)\n ) {\n await strapi.db?.queryBuilder(uid).delete().where({ published_at: null }).execute();\n }\n }\n};\n\nexport { enableDraftAndPublish as enable, disableDraftAndPublish as disable };\n"],"names":["contentTypesUtils"],"mappings":";;;AAgBA,MAAM,wBAAwB,OAAO,EAAE,iBAAiB,mBAA0B;AAChF,MAAI,CAAC,iBAAiB;AACpB;AAAA,EACF;AAIA,aAAW,OAAO,cAAc;AAC1B,QAAA,CAAC,gBAAgB,GAAG,GAAG;AACzB;AAAA,IACF;AAEM,UAAA,iBAAiB,gBAAgB,GAAG;AACpC,UAAA,cAAc,aAAa,GAAG;AAIlC,QAAA,CAACA,yBAAkB,mBAAmB,cAAc,KACpDA,yBAAkB,mBAAmB,WAAW,GAChD;AACA,YAAM,WAAW,OAAO,GAAG,SAAS,IAAI,GAAG;AAGrC,YAAA,aAAa,OAAO,OAAO,SAAS,UAAU,EAAE,OAAO,CAAC,KAAK,cAAmB;AACpF,YAAI,CAAC,IAAI,EAAE,SAAS,UAAU,UAAU,GAAG;AAClC,iBAAA;AAAA,QACT;AAEI,YAAAA,YAAA,aAAkB,kBAAkB,SAAS,GAAG;AAC9C,cAAA,KAAK,UAAU,UAAU;AAAA,QAC/B;AAEO,eAAA;AAAA,MACT,GAAG,CAAc,CAAA;AAOX,YAAA,KAAK,OAAO,IAAI,cAAc;AACpC,YAAM,GAEH,KAAK,GAAG,IAAI,GAAG,SAAS,SAAS,KAAK,WAAW,KAAK,IAAI,CAAC,GAAG,CAAC,EAC/D,OAAO,CAAC,UAAqB;AAGzB,cAAA;AAAA,UACC,GAAG,WAAW,IAAI,CAAC,QAAQ;AAEzB,gBAAI,QAAQ,gBAAgB;AACnB,qBAAA,GAAG,IAAI,sBAAsB;AAAA,YACtC;AAEA,gBAAI,QAAQ,cAAc;AACxB,qBAAO,GAAG,IAAI,mBAAmB,CAAK,oBAAA,KAAM,CAAA,CAAC;AAAA,YAC/C;AAEO,mBAAA;AAAA,UAAA,CACR;AAAA,QAAA,EAEF,KAAK,SAAS,SAAS,EACvB,aAAa,cAAc;AAAA,MAAA,CAC/B;AAAA,IACL;AAAA,EACF;AACF;AAEA,MAAM,yBAAyB,OAAO,EAAE,iBAAiB,mBAA0B;AACjF,MAAI,CAAC,iBAAiB;AACpB;AAAA,EACF;AAEA,aAAW,OAAO,cAAc;AAC1B,QAAA,CAAC,gBAAgB,GAAG,GAAG;AACzB;AAAA,IACF;AAEM,UAAA,iBAAiB,gBAAgB,GAAG;AACpC,UAAA,cAAc,aAAa,GAAG;AAIlC,QAAAA,YAAAA,aAAkB,mBAAmB,cAAc,KACnD,CAACA,yBAAkB,mBAAmB,WAAW,GACjD;AACA,YAAM,OAAO,IAAI,aAAa,GAAG,EAAE,OAAA,EAAS,MAAM,EAAE,cAAc,MAAM,EAAE,QAAQ;AAAA,IACpF;AAAA,EACF;AACF;;;"}
|
@@ -28,7 +28,7 @@ const enableDraftAndPublish = async ({ oldContentTypes, contentTypes: contentTyp
|
|
28
28
|
return qb.raw("NULL as published_at");
|
29
29
|
}
|
30
30
|
if (att === "updated_at") {
|
31
|
-
return qb.raw(
|
31
|
+
return qb.raw(`? as updated_at`, [/* @__PURE__ */ new Date()]);
|
32
32
|
}
|
33
33
|
return att;
|
34
34
|
})
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"draft-publish.mjs","sources":["../../src/migrations/draft-publish.ts"],"sourcesContent":["import { contentTypes as contentTypesUtils } from '@strapi/utils';\nimport { Schema } from '@strapi/types';\n\ninterface Input {\n oldContentTypes: Record<string, Schema.ContentType>;\n contentTypes: Record<string, Schema.ContentType>;\n}\n\n/**\n * Enable draft and publish for content types.\n *\n * Draft and publish disabled content types will have their entries published,\n * this migration clones those entries as drafts.\n *\n * TODO: Clone components, dynamic zones and relations\n */\nconst enableDraftAndPublish = async ({ oldContentTypes, contentTypes }: Input) => {\n if (!oldContentTypes) {\n return;\n }\n\n // run the after content types migrations\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n // if d&p was enabled set publishedAt to eq createdAt\n if (\n !contentTypesUtils.hasDraftAndPublish(oldContentType) &&\n contentTypesUtils.hasDraftAndPublish(contentType)\n ) {\n const metadata = strapi.db.metadata.get(uid);\n\n // Extract all scalar attributes to use in the insert query\n const attributes = Object.values(metadata.attributes).reduce((acc, attribute: any) => {\n if (['id'].includes(attribute.columnName)) {\n return acc;\n }\n\n if (contentTypesUtils.isScalarAttribute(attribute)) {\n acc.push(attribute.columnName);\n }\n\n return acc;\n }, [] as string[]);\n\n /**\n * INSERT INTO tableName (columnName1, columnName2, columnName3, ...)\n * SELECT columnName1, columnName2, columnName3, ...\n * FROM tableName\n */\n const qb = strapi.db?.getConnection();\n await qb\n // INSERT INTO tableName (columnName1, columnName2, columnName3, ...)\n .into(qb.raw(`${metadata.tableName} (${attributes.join(', ')})`))\n .insert((subQb: typeof qb) => {\n // SELECT columnName1, columnName2, columnName3, ...\n subQb\n .select(\n ...attributes.map((att) => {\n // Override 'publishedAt' and 'updatedAt' attributes\n if (att === 'published_at') {\n return qb.raw('NULL as published_at');\n }\n\n
|
1
|
+
{"version":3,"file":"draft-publish.mjs","sources":["../../src/migrations/draft-publish.ts"],"sourcesContent":["import { contentTypes as contentTypesUtils } from '@strapi/utils';\nimport { Schema } from '@strapi/types';\n\ninterface Input {\n oldContentTypes: Record<string, Schema.ContentType>;\n contentTypes: Record<string, Schema.ContentType>;\n}\n\n/**\n * Enable draft and publish for content types.\n *\n * Draft and publish disabled content types will have their entries published,\n * this migration clones those entries as drafts.\n *\n * TODO: Clone components, dynamic zones and relations\n */\nconst enableDraftAndPublish = async ({ oldContentTypes, contentTypes }: Input) => {\n if (!oldContentTypes) {\n return;\n }\n\n // run the after content types migrations\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n // if d&p was enabled set publishedAt to eq createdAt\n if (\n !contentTypesUtils.hasDraftAndPublish(oldContentType) &&\n contentTypesUtils.hasDraftAndPublish(contentType)\n ) {\n const metadata = strapi.db.metadata.get(uid);\n\n // Extract all scalar attributes to use in the insert query\n const attributes = Object.values(metadata.attributes).reduce((acc, attribute: any) => {\n if (['id'].includes(attribute.columnName)) {\n return acc;\n }\n\n if (contentTypesUtils.isScalarAttribute(attribute)) {\n acc.push(attribute.columnName);\n }\n\n return acc;\n }, [] as string[]);\n\n /**\n * INSERT INTO tableName (columnName1, columnName2, columnName3, ...)\n * SELECT columnName1, columnName2, columnName3, ...\n * FROM tableName\n */\n const qb = strapi.db?.getConnection();\n await qb\n // INSERT INTO tableName (columnName1, columnName2, columnName3, ...)\n .into(qb.raw(`${metadata.tableName} (${attributes.join(', ')})`))\n .insert((subQb: typeof qb) => {\n // SELECT columnName1, columnName2, columnName3, ...\n subQb\n .select(\n ...attributes.map((att) => {\n // Override 'publishedAt' and 'updatedAt' attributes\n if (att === 'published_at') {\n return qb.raw('NULL as published_at');\n }\n\n if (att === 'updated_at') {\n return qb.raw(`? as updated_at`, [new Date()]);\n }\n\n return att;\n })\n )\n .from(metadata.tableName)\n .whereNotNull('published_at');\n });\n }\n }\n};\n\nconst disableDraftAndPublish = async ({ oldContentTypes, contentTypes }: Input) => {\n if (!oldContentTypes) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n // if d&p was disabled remove unpublish content before sync\n if (\n contentTypesUtils.hasDraftAndPublish(oldContentType) &&\n !contentTypesUtils.hasDraftAndPublish(contentType)\n ) {\n await strapi.db?.queryBuilder(uid).delete().where({ published_at: null }).execute();\n }\n }\n};\n\nexport { enableDraftAndPublish as enable, disableDraftAndPublish as disable };\n"],"names":["contentTypes","contentTypesUtils"],"mappings":";AAgBA,MAAM,wBAAwB,OAAO,EAAE,iBAAiBA,cAAAA,qBAA0B;AAChF,MAAI,CAAC,iBAAiB;AACpB;AAAA,EACF;AAIA,aAAW,OAAOA,gBAAc;AAC1B,QAAA,CAAC,gBAAgB,GAAG,GAAG;AACzB;AAAA,IACF;AAEM,UAAA,iBAAiB,gBAAgB,GAAG;AACpC,UAAA,cAAcA,eAAa,GAAG;AAIlC,QAAA,CAACC,aAAkB,mBAAmB,cAAc,KACpDA,aAAkB,mBAAmB,WAAW,GAChD;AACA,YAAM,WAAW,OAAO,GAAG,SAAS,IAAI,GAAG;AAGrC,YAAA,aAAa,OAAO,OAAO,SAAS,UAAU,EAAE,OAAO,CAAC,KAAK,cAAmB;AACpF,YAAI,CAAC,IAAI,EAAE,SAAS,UAAU,UAAU,GAAG;AAClC,iBAAA;AAAA,QACT;AAEI,YAAAA,aAAkB,kBAAkB,SAAS,GAAG;AAC9C,cAAA,KAAK,UAAU,UAAU;AAAA,QAC/B;AAEO,eAAA;AAAA,MACT,GAAG,CAAc,CAAA;AAOX,YAAA,KAAK,OAAO,IAAI,cAAc;AACpC,YAAM,GAEH,KAAK,GAAG,IAAI,GAAG,SAAS,SAAS,KAAK,WAAW,KAAK,IAAI,CAAC,GAAG,CAAC,EAC/D,OAAO,CAAC,UAAqB;AAGzB,cAAA;AAAA,UACC,GAAG,WAAW,IAAI,CAAC,QAAQ;AAEzB,gBAAI,QAAQ,gBAAgB;AACnB,qBAAA,GAAG,IAAI,sBAAsB;AAAA,YACtC;AAEA,gBAAI,QAAQ,cAAc;AACxB,qBAAO,GAAG,IAAI,mBAAmB,CAAK,oBAAA,KAAM,CAAA,CAAC;AAAA,YAC/C;AAEO,mBAAA;AAAA,UAAA,CACR;AAAA,QAAA,EAEF,KAAK,SAAS,SAAS,EACvB,aAAa,cAAc;AAAA,MAAA,CAC/B;AAAA,IACL;AAAA,EACF;AACF;AAEA,MAAM,yBAAyB,OAAO,EAAE,iBAAiBD,cAAAA,qBAA0B;AACjF,MAAI,CAAC,iBAAiB;AACpB;AAAA,EACF;AAEA,aAAW,OAAOA,gBAAc;AAC1B,QAAA,CAAC,gBAAgB,GAAG,GAAG;AACzB;AAAA,IACF;AAEM,UAAA,iBAAiB,gBAAgB,GAAG;AACpC,UAAA,cAAcA,eAAa,GAAG;AAIlC,QAAAC,aAAkB,mBAAmB,cAAc,KACnD,CAACA,aAAkB,mBAAmB,WAAW,GACjD;AACA,YAAM,OAAO,IAAI,aAAa,GAAG,EAAE,OAAA,EAAS,MAAM,EAAE,cAAc,MAAM,EAAE,QAAQ;AAAA,IACpF;AAAA,EACF;AACF;"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAKlD;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,qBAAqB,WAAY,MAAM,KAAG,UAAU,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAKlD;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,qBAAqB,WAAY,MAAM,KAAG,UAAU,OAsBhE,CAAC"}
|
@@ -1,21 +1,23 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
3
|
-
const
|
3
|
+
const errors = require("./middlewares/errors.js");
|
4
|
+
const middlewareManager = require("./middlewares/middleware-manager.js");
|
4
5
|
const repository = require("./repository.js");
|
5
6
|
const createDocumentService = (strapi) => {
|
6
7
|
const repositories = /* @__PURE__ */ new Map();
|
7
|
-
const middlewares
|
8
|
+
const middlewares = middlewareManager.createMiddlewareManager();
|
9
|
+
middlewares.use(errors.databaseErrorsMiddleware);
|
8
10
|
const factory = function factory2(uid) {
|
9
11
|
if (repositories.has(uid)) {
|
10
12
|
return repositories.get(uid);
|
11
13
|
}
|
12
14
|
const contentType = strapi.contentType(uid);
|
13
15
|
const repository$1 = repository.createContentTypeRepository(uid);
|
14
|
-
repositories.set(uid, middlewares
|
16
|
+
repositories.set(uid, middlewares.wrapObject(repository$1, { contentType }));
|
15
17
|
return repository$1;
|
16
18
|
};
|
17
19
|
return Object.assign(factory, {
|
18
|
-
use: middlewares
|
20
|
+
use: middlewares.use.bind(middlewares)
|
19
21
|
});
|
20
22
|
};
|
21
23
|
exports.createDocumentService = createDocumentService;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/services/document-service/index.ts"],"sourcesContent":["import { Strapi, Documents } from '@strapi/types';\n\nimport { createMiddlewareManager } from './middlewares';\nimport { createContentTypeRepository } from './repository';\n\n/**\n * Repository to :\n * - Access documents via actions (findMany, findOne, create, update, delete, ...)\n * - Execute middlewares on document actions\n * - Apply default parameters to document actions\n *\n * @param strapi\n * @param options.defaults - Default parameters to apply to all actions\n * @param options.parent - Parent repository, used when creating a new repository with .with()\n * @returns DocumentService\n *\n * @example Access documents\n * const article = strapi.documents('api::article.article').create(params)\n * const allArticles = strapi.documents('api::article.article').findMany(params)\n *\n */\n// TODO: support global document service middleware & per repo middlewares\nexport const createDocumentService = (strapi: Strapi): Documents.Service => {\n const repositories = new Map<string, Documents.ServiceInstance>();\n const middlewares = createMiddlewareManager();\n\n const factory = function factory(uid) {\n if (repositories.has(uid)) {\n return repositories.get(uid)!;\n }\n\n const contentType = strapi.contentType(uid);\n const repository = createContentTypeRepository(uid);\n\n repositories.set(uid, middlewares.wrapObject(repository, { contentType }));\n\n return repository;\n } as Documents.Service;\n\n return Object.assign(factory, {\n use: middlewares.use.bind(middlewares),\n });\n};\n"],"names":["
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/services/document-service/index.ts"],"sourcesContent":["import { Strapi, Documents } from '@strapi/types';\n\nimport { createMiddlewareManager, databaseErrorsMiddleware } from './middlewares';\nimport { createContentTypeRepository } from './repository';\n\n/**\n * Repository to :\n * - Access documents via actions (findMany, findOne, create, update, delete, ...)\n * - Execute middlewares on document actions\n * - Apply default parameters to document actions\n *\n * @param strapi\n * @param options.defaults - Default parameters to apply to all actions\n * @param options.parent - Parent repository, used when creating a new repository with .with()\n * @returns DocumentService\n *\n * @example Access documents\n * const article = strapi.documents('api::article.article').create(params)\n * const allArticles = strapi.documents('api::article.article').findMany(params)\n *\n */\n// TODO: support global document service middleware & per repo middlewares\nexport const createDocumentService = (strapi: Strapi): Documents.Service => {\n const repositories = new Map<string, Documents.ServiceInstance>();\n const middlewares = createMiddlewareManager();\n\n middlewares.use(databaseErrorsMiddleware);\n\n const factory = function factory(uid) {\n if (repositories.has(uid)) {\n return repositories.get(uid)!;\n }\n\n const contentType = strapi.contentType(uid);\n const repository = createContentTypeRepository(uid);\n\n repositories.set(uid, middlewares.wrapObject(repository, { contentType }));\n\n return repository;\n } as Documents.Service;\n\n return Object.assign(factory, {\n use: middlewares.use.bind(middlewares),\n });\n};\n"],"names":["createMiddlewareManager","databaseErrorsMiddleware","factory","repository","createContentTypeRepository"],"mappings":";;;;;AAsBa,MAAA,wBAAwB,CAAC,WAAsC;AACpE,QAAA,mCAAmB;AACzB,QAAM,cAAcA,kBAAAA;AAEpB,cAAY,IAAIC,OAAAA,wBAAwB;AAElC,QAAA,UAAU,SAASC,SAAQ,KAAK;AAChC,QAAA,aAAa,IAAI,GAAG,GAAG;AAClB,aAAA,aAAa,IAAI,GAAG;AAAA,IAC7B;AAEM,UAAA,cAAc,OAAO,YAAY,GAAG;AACpC,UAAAC,eAAaC,uCAA4B,GAAG;AAErC,iBAAA,IAAI,KAAK,YAAY,WAAWD,cAAY,EAAE,YAAa,CAAA,CAAC;AAElE,WAAAA;AAAAA,EAAA;AAGF,SAAA,OAAO,OAAO,SAAS;AAAA,IAC5B,KAAK,YAAY,IAAI,KAAK,WAAW;AAAA,EAAA,CACtC;AACH;;"}
|
@@ -1,8 +1,10 @@
|
|
1
|
-
import {
|
1
|
+
import { databaseErrorsMiddleware } from "./middlewares/errors.mjs";
|
2
|
+
import { createMiddlewareManager } from "./middlewares/middleware-manager.mjs";
|
2
3
|
import { createContentTypeRepository } from "./repository.mjs";
|
3
4
|
const createDocumentService = (strapi) => {
|
4
5
|
const repositories = /* @__PURE__ */ new Map();
|
5
6
|
const middlewares = createMiddlewareManager();
|
7
|
+
middlewares.use(databaseErrorsMiddleware);
|
6
8
|
const factory = function factory2(uid) {
|
7
9
|
if (repositories.has(uid)) {
|
8
10
|
return repositories.get(uid);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../src/services/document-service/index.ts"],"sourcesContent":["import { Strapi, Documents } from '@strapi/types';\n\nimport { createMiddlewareManager } from './middlewares';\nimport { createContentTypeRepository } from './repository';\n\n/**\n * Repository to :\n * - Access documents via actions (findMany, findOne, create, update, delete, ...)\n * - Execute middlewares on document actions\n * - Apply default parameters to document actions\n *\n * @param strapi\n * @param options.defaults - Default parameters to apply to all actions\n * @param options.parent - Parent repository, used when creating a new repository with .with()\n * @returns DocumentService\n *\n * @example Access documents\n * const article = strapi.documents('api::article.article').create(params)\n * const allArticles = strapi.documents('api::article.article').findMany(params)\n *\n */\n// TODO: support global document service middleware & per repo middlewares\nexport const createDocumentService = (strapi: Strapi): Documents.Service => {\n const repositories = new Map<string, Documents.ServiceInstance>();\n const middlewares = createMiddlewareManager();\n\n const factory = function factory(uid) {\n if (repositories.has(uid)) {\n return repositories.get(uid)!;\n }\n\n const contentType = strapi.contentType(uid);\n const repository = createContentTypeRepository(uid);\n\n repositories.set(uid, middlewares.wrapObject(repository, { contentType }));\n\n return repository;\n } as Documents.Service;\n\n return Object.assign(factory, {\n use: middlewares.use.bind(middlewares),\n });\n};\n"],"names":["factory"],"mappings":"
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/services/document-service/index.ts"],"sourcesContent":["import { Strapi, Documents } from '@strapi/types';\n\nimport { createMiddlewareManager, databaseErrorsMiddleware } from './middlewares';\nimport { createContentTypeRepository } from './repository';\n\n/**\n * Repository to :\n * - Access documents via actions (findMany, findOne, create, update, delete, ...)\n * - Execute middlewares on document actions\n * - Apply default parameters to document actions\n *\n * @param strapi\n * @param options.defaults - Default parameters to apply to all actions\n * @param options.parent - Parent repository, used when creating a new repository with .with()\n * @returns DocumentService\n *\n * @example Access documents\n * const article = strapi.documents('api::article.article').create(params)\n * const allArticles = strapi.documents('api::article.article').findMany(params)\n *\n */\n// TODO: support global document service middleware & per repo middlewares\nexport const createDocumentService = (strapi: Strapi): Documents.Service => {\n const repositories = new Map<string, Documents.ServiceInstance>();\n const middlewares = createMiddlewareManager();\n\n middlewares.use(databaseErrorsMiddleware);\n\n const factory = function factory(uid) {\n if (repositories.has(uid)) {\n return repositories.get(uid)!;\n }\n\n const contentType = strapi.contentType(uid);\n const repository = createContentTypeRepository(uid);\n\n repositories.set(uid, middlewares.wrapObject(repository, { contentType }));\n\n return repository;\n } as Documents.Service;\n\n return Object.assign(factory, {\n use: middlewares.use.bind(middlewares),\n });\n};\n"],"names":["factory"],"mappings":";;;AAsBa,MAAA,wBAAwB,CAAC,WAAsC;AACpE,QAAA,mCAAmB;AACzB,QAAM,cAAc;AAEpB,cAAY,IAAI,wBAAwB;AAElC,QAAA,UAAU,SAASA,SAAQ,KAAK;AAChC,QAAA,aAAa,IAAI,GAAG,GAAG;AAClB,aAAA,aAAa,IAAI,GAAG;AAAA,IAC7B;AAEM,UAAA,cAAc,OAAO,YAAY,GAAG;AACpC,UAAA,aAAa,4BAA4B,GAAG;AAErC,iBAAA,IAAI,KAAK,YAAY,WAAW,YAAY,EAAE,YAAa,CAAA,CAAC;AAElE,WAAA;AAAA,EAAA;AAGF,SAAA,OAAO,OAAO,SAAS;AAAA,IAC5B,KAAK,YAAY,IAAI,KAAK,WAAW;AAAA,EAAA,CACtC;AACH;"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/middlewares/errors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AASvD;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,UAatC,CAAC"}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
3
|
+
const database = require("@strapi/database");
|
4
|
+
const strapiUtils = require("@strapi/utils");
|
5
|
+
const databaseErrorsToTransform = [
|
6
|
+
database.errors.InvalidTimeError,
|
7
|
+
database.errors.InvalidDateTimeError,
|
8
|
+
database.errors.InvalidDateError,
|
9
|
+
database.errors.InvalidRelationError
|
10
|
+
];
|
11
|
+
const databaseErrorsMiddleware = async (ctx, next) => {
|
12
|
+
try {
|
13
|
+
return await next();
|
14
|
+
} catch (error) {
|
15
|
+
if (databaseErrorsToTransform.some((errorToTransform) => error instanceof errorToTransform)) {
|
16
|
+
if (error instanceof Error) {
|
17
|
+
throw new strapiUtils.errors.ValidationError(error.message);
|
18
|
+
}
|
19
|
+
throw error;
|
20
|
+
}
|
21
|
+
throw error;
|
22
|
+
}
|
23
|
+
};
|
24
|
+
exports.databaseErrorsMiddleware = databaseErrorsMiddleware;
|
25
|
+
//# sourceMappingURL=errors.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"errors.js","sources":["../../../../src/services/document-service/middlewares/errors.ts"],"sourcesContent":["import { errors as databaseErrors } from '@strapi/database';\nimport { errors } from '@strapi/utils';\n\nimport type { Middleware } from './middleware-manager';\n\nconst databaseErrorsToTransform = [\n databaseErrors.InvalidTimeError,\n databaseErrors.InvalidDateTimeError,\n databaseErrors.InvalidDateError,\n databaseErrors.InvalidRelationError,\n];\n\n/**\n * Handle database errors\n */\nexport const databaseErrorsMiddleware: Middleware = async (ctx, next) => {\n try {\n return await next();\n } catch (error) {\n if (databaseErrorsToTransform.some((errorToTransform) => error instanceof errorToTransform)) {\n if (error instanceof Error) {\n throw new errors.ValidationError(error.message);\n }\n\n throw error;\n }\n throw error;\n }\n};\n"],"names":["databaseErrors","errors"],"mappings":";;;;AAKA,MAAM,4BAA4B;AAAA,EAChCA,SAAAA,OAAe;AAAA,EACfA,SAAAA,OAAe;AAAA,EACfA,SAAAA,OAAe;AAAA,EACfA,SAAAA,OAAe;AACjB;AAKa,MAAA,2BAAuC,OAAO,KAAK,SAAS;AACnE,MAAA;AACF,WAAO,MAAM,KAAK;AAAA,WACX,OAAO;AACd,QAAI,0BAA0B,KAAK,CAAC,qBAAqB,iBAAiB,gBAAgB,GAAG;AAC3F,UAAI,iBAAiB,OAAO;AAC1B,cAAM,IAAIC,YAAAA,OAAO,gBAAgB,MAAM,OAAO;AAAA,MAChD;AAEM,YAAA;AAAA,IACR;AACM,UAAA;AAAA,EACR;AACF;;"}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import { errors } from "@strapi/database";
|
2
|
+
import { errors as errors$1 } from "@strapi/utils";
|
3
|
+
const databaseErrorsToTransform = [
|
4
|
+
errors.InvalidTimeError,
|
5
|
+
errors.InvalidDateTimeError,
|
6
|
+
errors.InvalidDateError,
|
7
|
+
errors.InvalidRelationError
|
8
|
+
];
|
9
|
+
const databaseErrorsMiddleware = async (ctx, next) => {
|
10
|
+
try {
|
11
|
+
return await next();
|
12
|
+
} catch (error) {
|
13
|
+
if (databaseErrorsToTransform.some((errorToTransform) => error instanceof errorToTransform)) {
|
14
|
+
if (error instanceof Error) {
|
15
|
+
throw new errors$1.ValidationError(error.message);
|
16
|
+
}
|
17
|
+
throw error;
|
18
|
+
}
|
19
|
+
throw error;
|
20
|
+
}
|
21
|
+
};
|
22
|
+
export {
|
23
|
+
databaseErrorsMiddleware
|
24
|
+
};
|
25
|
+
//# sourceMappingURL=errors.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"errors.mjs","sources":["../../../../src/services/document-service/middlewares/errors.ts"],"sourcesContent":["import { errors as databaseErrors } from '@strapi/database';\nimport { errors } from '@strapi/utils';\n\nimport type { Middleware } from './middleware-manager';\n\nconst databaseErrorsToTransform = [\n databaseErrors.InvalidTimeError,\n databaseErrors.InvalidDateTimeError,\n databaseErrors.InvalidDateError,\n databaseErrors.InvalidRelationError,\n];\n\n/**\n * Handle database errors\n */\nexport const databaseErrorsMiddleware: Middleware = async (ctx, next) => {\n try {\n return await next();\n } catch (error) {\n if (databaseErrorsToTransform.some((errorToTransform) => error instanceof errorToTransform)) {\n if (error instanceof Error) {\n throw new errors.ValidationError(error.message);\n }\n\n throw error;\n }\n throw error;\n }\n};\n"],"names":["databaseErrors","errors"],"mappings":";;AAKA,MAAM,4BAA4B;AAAA,EAChCA,OAAe;AAAA,EACfA,OAAe;AAAA,EACfA,OAAe;AAAA,EACfA,OAAe;AACjB;AAKa,MAAA,2BAAuC,OAAO,KAAK,SAAS;AACnE,MAAA;AACF,WAAO,MAAM,KAAK;AAAA,WACX,OAAO;AACd,QAAI,0BAA0B,KAAK,CAAC,qBAAqB,iBAAiB,gBAAgB,GAAG;AAC3F,UAAI,iBAAiB,OAAO;AAC1B,cAAM,IAAIC,SAAO,gBAAgB,MAAM,OAAO;AAAA,MAChD;AAEM,YAAA;AAAA,IACR;AACM,UAAA;AAAA,EACR;AACF;"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/middlewares/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/services/document-service/{middlewares.d.ts → middlewares/middleware-manager.d.ts}
RENAMED
@@ -1,8 +1,7 @@
|
|
1
|
-
type Middleware = (ctx: any, next: () => Promise<void>) => Promise<void>;
|
1
|
+
export type Middleware = (ctx: any, next: () => Promise<void>) => Promise<void>;
|
2
2
|
export declare const createMiddlewareManager: () => {
|
3
|
-
use(middleware:
|
3
|
+
use(middleware: Middleware): () => Middleware[];
|
4
4
|
run(ctx: any, cb: () => void): Promise<void>;
|
5
5
|
wrapObject<TSource extends Record<string, any>>(source: TSource, ctxDefaults?: {}): TSource;
|
6
6
|
};
|
7
|
-
|
8
|
-
//# sourceMappingURL=middlewares.d.ts.map
|
7
|
+
//# sourceMappingURL=middleware-manager.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"middleware-manager.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/middlewares/middleware-manager.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEhF,eAAO,MAAM,uBAAuB;oBAIhB,UAAU;aAMX,GAAG,MAAM,MAAM,IAAI;;CA4CrC,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"middleware-manager.js","sources":["../../../../src/services/document-service/middlewares/middleware-manager.ts"],"sourcesContent":["export type Middleware = (ctx: any, next: () => Promise<void>) => Promise<void>;\n\nexport const createMiddlewareManager = () => {\n const middlewares: Middleware[] = [];\n\n const manager = {\n use(middleware: Middleware) {\n middlewares.push(middleware);\n\n return () => middlewares.splice(middlewares.indexOf(middleware), 1);\n },\n\n async run(ctx: any, cb: () => void) {\n let index = 0;\n const next = async () => {\n if (index < middlewares.length) {\n // eslint-disable-next-line no-plusplus\n return middlewares[index++](ctx, next);\n }\n\n return cb();\n };\n\n return next();\n },\n\n wrapObject<TSource extends Record<string, any>>(source: TSource, ctxDefaults = {}): TSource {\n const facade: TSource = {} as TSource;\n\n for (const key in source) {\n if (Object.hasOwnProperty.call(source, key)) {\n const prop = source[key];\n\n if (typeof prop === 'function') {\n const newMethod = async (...args: any[]) => {\n const ctx = {\n ...ctxDefaults,\n action: key,\n args,\n };\n\n return manager.run(ctx, () => prop(...ctx.args));\n };\n\n facade[key] = newMethod as typeof prop;\n } else {\n facade[key] = prop;\n }\n }\n }\n\n return facade;\n },\n };\n\n return manager;\n};\n"],"names":[],"mappings":";;AAEO,MAAM,0BAA0B,MAAM;AAC3C,QAAM,cAA4B,CAAA;AAElC,QAAM,UAAU;AAAA,IACd,IAAI,YAAwB;AAC1B,kBAAY,KAAK,UAAU;AAE3B,aAAO,MAAM,YAAY,OAAO,YAAY,QAAQ,UAAU,GAAG,CAAC;AAAA,IACpE;AAAA,IAEA,MAAM,IAAI,KAAU,IAAgB;AAClC,UAAI,QAAQ;AACZ,YAAM,OAAO,YAAY;AACnB,YAAA,QAAQ,YAAY,QAAQ;AAE9B,iBAAO,YAAY,OAAO,EAAE,KAAK,IAAI;AAAA,QACvC;AAEA,eAAO,GAAG;AAAA,MAAA;AAGZ,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,WAAgD,QAAiB,cAAc,IAAa;AAC1F,YAAM,SAAkB,CAAA;AAExB,iBAAW,OAAO,QAAQ;AACxB,YAAI,OAAO,eAAe,KAAK,QAAQ,GAAG,GAAG;AACrC,gBAAA,OAAO,OAAO,GAAG;AAEnB,cAAA,OAAO,SAAS,YAAY;AACxB,kBAAA,YAAY,UAAU,SAAgB;AAC1C,oBAAM,MAAM;AAAA,gBACV,GAAG;AAAA,gBACH,QAAQ;AAAA,gBACR;AAAA,cAAA;AAGK,qBAAA,QAAQ,IAAI,KAAK,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC;AAAA,YAAA;AAGjD,mBAAO,GAAG,IAAI;AAAA,UAAA,OACT;AACL,mBAAO,GAAG,IAAI;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAEO,aAAA;AAAA,IACT;AAAA,EAAA;AAGK,SAAA;AACT;;"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"middleware-manager.mjs","sources":["../../../../src/services/document-service/middlewares/middleware-manager.ts"],"sourcesContent":["export type Middleware = (ctx: any, next: () => Promise<void>) => Promise<void>;\n\nexport const createMiddlewareManager = () => {\n const middlewares: Middleware[] = [];\n\n const manager = {\n use(middleware: Middleware) {\n middlewares.push(middleware);\n\n return () => middlewares.splice(middlewares.indexOf(middleware), 1);\n },\n\n async run(ctx: any, cb: () => void) {\n let index = 0;\n const next = async () => {\n if (index < middlewares.length) {\n // eslint-disable-next-line no-plusplus\n return middlewares[index++](ctx, next);\n }\n\n return cb();\n };\n\n return next();\n },\n\n wrapObject<TSource extends Record<string, any>>(source: TSource, ctxDefaults = {}): TSource {\n const facade: TSource = {} as TSource;\n\n for (const key in source) {\n if (Object.hasOwnProperty.call(source, key)) {\n const prop = source[key];\n\n if (typeof prop === 'function') {\n const newMethod = async (...args: any[]) => {\n const ctx = {\n ...ctxDefaults,\n action: key,\n args,\n };\n\n return manager.run(ctx, () => prop(...ctx.args));\n };\n\n facade[key] = newMethod as typeof prop;\n } else {\n facade[key] = prop;\n }\n }\n }\n\n return facade;\n },\n };\n\n return manager;\n};\n"],"names":[],"mappings":"AAEO,MAAM,0BAA0B,MAAM;AAC3C,QAAM,cAA4B,CAAA;AAElC,QAAM,UAAU;AAAA,IACd,IAAI,YAAwB;AAC1B,kBAAY,KAAK,UAAU;AAE3B,aAAO,MAAM,YAAY,OAAO,YAAY,QAAQ,UAAU,GAAG,CAAC;AAAA,IACpE;AAAA,IAEA,MAAM,IAAI,KAAU,IAAgB;AAClC,UAAI,QAAQ;AACZ,YAAM,OAAO,YAAY;AACnB,YAAA,QAAQ,YAAY,QAAQ;AAE9B,iBAAO,YAAY,OAAO,EAAE,KAAK,IAAI;AAAA,QACvC;AAEA,eAAO,GAAG;AAAA,MAAA;AAGZ,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,WAAgD,QAAiB,cAAc,IAAa;AAC1F,YAAM,SAAkB,CAAA;AAExB,iBAAW,OAAO,QAAQ;AACxB,YAAI,OAAO,eAAe,KAAK,QAAQ,GAAG,GAAG;AACrC,gBAAA,OAAO,OAAO,GAAG;AAEnB,cAAA,OAAO,SAAS,YAAY;AACxB,kBAAA,YAAY,UAAU,SAAgB;AAC1C,oBAAM,MAAM;AAAA,gBACV,GAAG;AAAA,gBACH,QAAQ;AAAA,gBACR;AAAA,cAAA;AAGK,qBAAA,QAAQ,IAAI,KAAK,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC;AAAA,YAAA;AAGjD,mBAAO,GAAG,IAAI;AAAA,UAAA,OACT;AACL,mBAAO,GAAG,IAAI;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAEO,aAAA;AAAA,IACT;AAAA,EAAA;AAGK,SAAA;AACT;"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/repository.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/repository.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AA0B3E,eAAO,MAAM,2BAA2B,EAAE,uBAyVzC,CAAC"}
|
@@ -72,7 +72,7 @@ const createContentTypeRepository = (uid) => {
|
|
72
72
|
}
|
73
73
|
const entriesToDelete = await strapi.db.query(uid).findMany(query);
|
74
74
|
await strapiUtils.async.map(entriesToDelete, (entryToDelete) => deleteEntry(entryToDelete.id));
|
75
|
-
return { deletedEntries: entriesToDelete
|
75
|
+
return { deletedEntries: entriesToDelete };
|
76
76
|
}
|
77
77
|
async function createEntry(params$1 = {}) {
|
78
78
|
const { data: data2, ...restParams } = await idTransform.transformParamsDocumentId(uid, params$1);
|
@@ -107,43 +107,34 @@ const createContentTypeRepository = (uid) => {
|
|
107
107
|
}
|
108
108
|
return doc;
|
109
109
|
}
|
110
|
-
async function clone(documentId,
|
110
|
+
async function clone(documentId, params2 = {}) {
|
111
111
|
const queryParams = await strapiUtils.async.pipe(
|
112
112
|
draftAndPublish.filterDataPublishedAt,
|
113
|
-
internationalization.
|
114
|
-
|
115
|
-
|
116
|
-
const
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
const newDocumentId = transformContentTypesToModels.createDocumentId();
|
126
|
-
const versions = await strapiUtils.async.map(entries, async (entryToClone) => {
|
127
|
-
const isDraft = strapiUtils.contentTypes.isDraft(data2, model);
|
128
|
-
const validData = await index.validateEntityUpdate(
|
129
|
-
model,
|
130
|
-
// Omit id fields, the cloned entity id will be generated by the database
|
131
|
-
_.omit(["id"], data2),
|
132
|
-
{ isDraft, ...queryParams?.lookup },
|
133
|
-
entryToClone
|
134
|
-
);
|
135
|
-
const componentData = await components.cloneComponents(uid, entryToClone, validData);
|
136
|
-
const entityData = index$1.applyTransforms(
|
137
|
-
Object.assign(components.omitComponentData(model, validData), componentData),
|
138
|
-
{ contentType: model }
|
139
|
-
);
|
140
|
-
return strapi.db.query(uid).clone(entryToClone.id, {
|
141
|
-
...query,
|
142
|
-
// Allows entityData to override the documentId (e.g. when publishing)
|
143
|
-
data: { documentId: newDocumentId, ...entityData, locale: entryToClone.locale }
|
144
|
-
});
|
113
|
+
internationalization.defaultLocale(contentType),
|
114
|
+
internationalization.multiLocaleToLookup(contentType)
|
115
|
+
)(params2);
|
116
|
+
const entriesToClone = await strapi.db?.query(uid).findMany({
|
117
|
+
where: {
|
118
|
+
...queryParams?.lookup,
|
119
|
+
documentId,
|
120
|
+
// DP Enabled: Clone drafts
|
121
|
+
// DP Disabled: Clone only the existing version (published)
|
122
|
+
publishedAt: { $null: hasDraftAndPublish }
|
123
|
+
},
|
124
|
+
populate: populate.getDeepPopulate(uid, { relationalFields: ["id"] })
|
145
125
|
});
|
146
|
-
|
126
|
+
const clonedEntries = await strapiUtils.async.map(
|
127
|
+
entriesToClone,
|
128
|
+
strapiUtils.async.pipe(
|
129
|
+
_.omit("id"),
|
130
|
+
// assign new documentId
|
131
|
+
_.assoc("documentId", transformContentTypesToModels.createDocumentId()),
|
132
|
+
// Merge new data into it
|
133
|
+
(data2) => _.merge(data2, queryParams.data),
|
134
|
+
(data2) => createEntry({ ...queryParams, data: data2, status: "draft" })
|
135
|
+
)
|
136
|
+
);
|
137
|
+
return { documentId: clonedEntries.at(0)?.documentId, versions: clonedEntries };
|
147
138
|
}
|
148
139
|
async function update(documentId, params$1 = {}) {
|
149
140
|
const queryParams = await strapiUtils.async.pipe(
|
@@ -218,7 +209,7 @@ const createContentTypeRepository = (uid) => {
|
|
218
209
|
documentId,
|
219
210
|
publishedAt: null
|
220
211
|
},
|
221
|
-
populate: populate.getDeepPopulate(uid)
|
212
|
+
populate: populate.getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
|
222
213
|
});
|
223
214
|
const publishedEntries = await strapiUtils.async.map(
|
224
215
|
entriesToPublish,
|
@@ -267,7 +258,7 @@ const createContentTypeRepository = (uid) => {
|
|
267
258
|
documentId,
|
268
259
|
publishedAt: { $ne: null }
|
269
260
|
},
|
270
|
-
populate: populate.getDeepPopulate(uid)
|
261
|
+
populate: populate.getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
|
271
262
|
});
|
272
263
|
const draftEntries = await strapiUtils.async.map(
|
273
264
|
entriesToDraft,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"repository.js","sources":["../../../src/services/document-service/repository.ts"],"sourcesContent":["import { omit, assoc, curry } from 'lodash/fp';\n\nimport { async, convertQueryParams, contentTypes as contentTypesUtils } from '@strapi/utils';\nimport { Common } from '@strapi/types';\n\nimport { wrapInTransaction, type RepositoryFactoryMethod } from './common';\nimport * as DP from './draft-and-publish';\nimport * as i18n from './internationalization';\nimport { transformParamsDocumentId } from './transform/id-transform';\n\nimport {\n cloneComponents,\n createComponents,\n deleteComponents,\n getComponents,\n omitComponentData,\n updateComponents,\n} from '../entity-service/components';\n\nimport { pickSelectionParams } from './params';\nimport entityValidator from '../entity-validator';\nimport { applyTransforms } from '../entity-service/attributes';\nimport { createDocumentId } from '../../utils/transform-content-types-to-models';\nimport { getDeepPopulate } from './utils/populate';\nimport { transformData } from './transform/data';\n\nconst transformParamsToQuery = curry((uid: Common.UID.Schema, params: any) => {\n const query = convertQueryParams.transformParamsToQuery(uid, params);\n\n return assoc('where', { ...params?.lookup, ...query.where }, query);\n});\n\nexport const createContentTypeRepository: RepositoryFactoryMethod = (uid) => {\n const contentType = strapi.contentType(uid);\n const hasDraftAndPublish = contentTypesUtils.hasDraftAndPublish(contentType);\n\n async function findMany(params = {} as any) {\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params || {});\n\n return strapi.db.query(uid).findMany(query);\n }\n\n async function findFirst(params = {} as any) {\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n // TODO: do we really want to add filters on the findOne now that we have findFirst ?\n async function findOne(documentId: string, params = {} as any) {\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n async function deleteEntry(id: number) {\n const componentsToDelete = await getComponents(uid, { id });\n\n await strapi.db.query(uid).delete({ where: { id } });\n\n await deleteComponents(uid, componentsToDelete as any, { loadComponents: false });\n }\n\n async function deleteFn(documentId: string, params = {} as any) {\n const query = await async.pipe(\n omit('status'),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n if (params.status === 'draft') {\n throw new Error('Cannot delete a draft document');\n }\n\n const entriesToDelete = await strapi.db.query(uid).findMany(query);\n\n // Delete all matched entries and its components\n await async.map(entriesToDelete, (entryToDelete: any) => deleteEntry(entryToDelete.id));\n\n return { deletedEntries: entriesToDelete.length };\n }\n\n async function createEntry(params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n // Validation\n if (!params.data) {\n throw new Error('Create requires data attribute');\n }\n\n const validData = await entityValidator.validateEntityCreation(contentType, data as object, {\n // Note: publishedAt value will always be set when DP is disabled\n isDraft: !params?.data?.publishedAt,\n locale: params?.locale,\n });\n\n // Component handling\n const componentData = await createComponents(uid, validData as any);\n const entryData = applyTransforms(\n Object.assign(omitComponentData(contentType, validData), componentData),\n { contentType }\n );\n\n const doc = await strapi.db.query(uid).create({ ...query, data: entryData });\n\n return doc;\n }\n\n async function create(params = {} as any) {\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToData(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const doc = await createEntry(queryParams);\n\n if (hasDraftAndPublish && params.status === 'published') {\n return publish(doc.documentId, params).then((doc) => doc.versions[0]);\n }\n\n return doc;\n }\n\n async function clone(documentId: string, params = {} as any) {\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n i18n.localeToLookup(contentType)\n )(params);\n\n const { data, ...restParams } = await transformParamsDocumentId(uid, queryParams || {});\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any);\n // Param parsing\n\n // Validation\n const model = strapi.contentType(uid);\n // Find all locales of the document\n const entries = await strapi.db.query(uid).findMany({\n ...query,\n where: { ...queryParams?.lookup, ...query.where, documentId },\n });\n\n // Document does not exist\n if (!entries.length) {\n return null;\n }\n\n const newDocumentId = createDocumentId();\n\n const versions = await async.map(entries, async (entryToClone: any) => {\n const isDraft = contentTypesUtils.isDraft(data as object, model);\n // Todo: Merge data with entry to clone\n const validData = await entityValidator.validateEntityUpdate(\n model,\n // Omit id fields, the cloned entity id will be generated by the database\n omit(['id'], data),\n { isDraft, ...queryParams?.lookup },\n entryToClone\n );\n\n const componentData = await cloneComponents(uid, entryToClone, validData);\n const entityData = applyTransforms(\n Object.assign(omitComponentData(model, validData), componentData),\n { contentType: model }\n );\n\n // TODO: Transform params to query\n return strapi.db.query(uid).clone(entryToClone.id, {\n ...query,\n // Allows entityData to override the documentId (e.g. when publishing)\n data: { documentId: newDocumentId, ...entityData, locale: entryToClone.locale },\n });\n });\n\n return { documentId: newDocumentId, versions };\n }\n\n async function update(documentId: string, params = {} as any) {\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToLookup(contentType),\n DP.statusToData(contentType),\n // Default locale will be set if not provided\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const { data, ...restParams } = await transformParamsDocumentId(uid, queryParams || {});\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams || {}) as any);\n\n // Validation\n const model = strapi.contentType(uid);\n // Find if document exists\n const entryToUpdate = await strapi.db\n .query(uid)\n .findOne({ ...query, where: { ...queryParams?.lookup, ...query?.where, documentId } });\n\n let updatedDraft = null;\n if (entryToUpdate) {\n const validData = await entityValidator.validateEntityUpdate(\n model,\n data,\n {\n isDraft: !queryParams?.data?.publishedAt, // Always update the draft version\n locale: queryParams?.locale,\n },\n entryToUpdate\n );\n\n // Component handling\n const componentData = await updateComponents(uid, entryToUpdate, validData as any);\n const entryData = applyTransforms(\n Object.assign(omitComponentData(model, validData), componentData),\n { contentType: model }\n );\n\n updatedDraft = await strapi.db\n .query(uid)\n .update({ ...query, where: { id: entryToUpdate.id }, data: entryData });\n }\n\n if (!updatedDraft) {\n const documentExists = await strapi.db\n .query(contentType.uid)\n .findOne({ where: { documentId } });\n\n if (documentExists) {\n updatedDraft = await createEntry({\n ...queryParams,\n data: { ...queryParams.data, documentId },\n });\n }\n }\n\n if (hasDraftAndPublish && updatedDraft && params.status === 'published') {\n return publish(documentId, params).then((doc) => doc.versions[0]);\n }\n\n return updatedDraft;\n }\n\n async function count(params = {} as any) {\n const query = await async.pipe(\n DP.defaultStatus(contentType),\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).count(query);\n }\n\n async function publish(documentId: string, params = {} as any) {\n const queryParams = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n await deleteFn(documentId, {\n ...queryParams,\n lookup: { ...queryParams?.lookup, publishedAt: { $ne: null } },\n });\n\n // Get deep populate\n const entriesToPublish = await strapi.db?.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null,\n },\n populate: getDeepPopulate(uid),\n });\n\n // Transform draft entry data and create published versions\n const publishedEntries = await async.map(\n entriesToPublish,\n async.pipe(\n // Updated at value is used to know if draft has been modified\n // If both versions share the same value, it means the draft has not been modified\n (draft) => assoc('updatedAt', draft.updatedAt, draft),\n assoc('publishedAt', new Date()),\n assoc('documentId', documentId),\n omit('id'),\n // Transform relations to target published versions\n (entry) => {\n const opts = { uid, locale: entry.locale, status: 'published', allowMissingId: true };\n return transformData(entry, opts);\n },\n // Create the published entry\n (data) => createEntry({ ...queryParams, data, locale: data.locale, status: 'published' })\n )\n );\n\n return { versions: publishedEntries };\n }\n\n async function unpublish(documentId: string, params = {} as any) {\n const queryParams = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const { deletedEntries } = await deleteFn(documentId, {\n ...params,\n lookup: { ...queryParams?.lookup, publishedAt: { $ne: null } },\n });\n\n return { versions: deletedEntries };\n }\n\n async function discardDraft(documentId: string, params = {} as any) {\n const queryParams = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n await deleteFn(documentId, {\n ...queryParams,\n // Delete all drafts that match query\n lookup: { ...queryParams?.lookup, publishedAt: null },\n });\n\n // Get deep populate of published versions\n const entriesToDraft = await strapi.db?.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n populate: getDeepPopulate(uid),\n });\n\n // Transform published entry data and create draft versions\n const draftEntries = await async.map(\n entriesToDraft,\n async.pipe(\n assoc('publishedAt', null),\n assoc('documentId', documentId),\n omit('id'),\n // Transform relations to target draft versions\n (entry) => {\n const opts = { uid, locale: entry.locale, status: 'draft', allowMissingId: true };\n return transformData(entry, opts);\n },\n // Create the draft entry\n (data) => createEntry({ ...queryParams, locale: data.locale, data, status: 'draft' })\n )\n );\n\n return { versions: draftEntries };\n }\n\n return {\n findMany: wrapInTransaction(findMany),\n findFirst: wrapInTransaction(findFirst),\n findOne: wrapInTransaction(findOne),\n delete: wrapInTransaction(deleteFn),\n create: wrapInTransaction(create),\n clone: wrapInTransaction(clone),\n update: wrapInTransaction(update),\n count: wrapInTransaction(count),\n publish: hasDraftAndPublish ? wrapInTransaction(publish) : (undefined as any),\n unpublish: hasDraftAndPublish ? wrapInTransaction(unpublish) : (undefined as any),\n discardDraft: hasDraftAndPublish ? wrapInTransaction(discardDraft) : (undefined as any),\n };\n};\n"],"names":["curry","params","convertQueryParams","assoc","contentTypesUtils","async","DP.defaultToDraft","DP.statusToLookup","i18n.defaultLocale","i18n.localeToLookup","transformParamsDocumentId","query","getComponents","deleteComponents","omit","i18n.multiLocaleToLookup","data","pickSelectionParams","entityValidator","createComponents","applyTransforms","omitComponentData","DP.filterDataPublishedAt","DP.setStatusToDraft","DP.statusToData","i18n.localeToData","doc","createDocumentId","cloneComponents","updateComponents","DP.defaultStatus","getDeepPopulate","transformData","wrapInTransaction"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"repository.js","sources":["../../../src/services/document-service/repository.ts"],"sourcesContent":["import { omit, assoc, curry, merge } from 'lodash/fp';\n\nimport { async, convertQueryParams, contentTypes as contentTypesUtils } from '@strapi/utils';\nimport { Common } from '@strapi/types';\n\nimport { wrapInTransaction, type RepositoryFactoryMethod } from './common';\nimport * as DP from './draft-and-publish';\nimport * as i18n from './internationalization';\nimport { transformParamsDocumentId } from './transform/id-transform';\n\nimport {\n createComponents,\n deleteComponents,\n getComponents,\n omitComponentData,\n updateComponents,\n} from '../entity-service/components';\n\nimport { pickSelectionParams } from './params';\nimport entityValidator from '../entity-validator';\nimport { applyTransforms } from '../entity-service/attributes';\nimport { createDocumentId } from '../../utils/transform-content-types-to-models';\nimport { getDeepPopulate } from './utils/populate';\nimport { transformData } from './transform/data';\n\nconst transformParamsToQuery = curry((uid: Common.UID.Schema, params: any) => {\n const query = convertQueryParams.transformParamsToQuery(uid, params);\n\n return assoc('where', { ...params?.lookup, ...query.where }, query);\n});\n\nexport const createContentTypeRepository: RepositoryFactoryMethod = (uid) => {\n const contentType = strapi.contentType(uid);\n const hasDraftAndPublish = contentTypesUtils.hasDraftAndPublish(contentType);\n\n async function findMany(params = {} as any) {\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params || {});\n\n return strapi.db.query(uid).findMany(query);\n }\n\n async function findFirst(params = {} as any) {\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n // TODO: do we really want to add filters on the findOne now that we have findFirst ?\n async function findOne(documentId: string, params = {} as any) {\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n async function deleteEntry(id: number) {\n const componentsToDelete = await getComponents(uid, { id });\n\n await strapi.db.query(uid).delete({ where: { id } });\n\n await deleteComponents(uid, componentsToDelete as any, { loadComponents: false });\n }\n\n async function deleteFn(documentId: string, params = {} as any) {\n const query = await async.pipe(\n omit('status'),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n if (params.status === 'draft') {\n throw new Error('Cannot delete a draft document');\n }\n\n const entriesToDelete = await strapi.db.query(uid).findMany(query);\n\n // Delete all matched entries and its components\n await async.map(entriesToDelete, (entryToDelete: any) => deleteEntry(entryToDelete.id));\n\n return { deletedEntries: entriesToDelete };\n }\n\n async function createEntry(params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n // Validation\n if (!params.data) {\n throw new Error('Create requires data attribute');\n }\n\n const validData = await entityValidator.validateEntityCreation(contentType, data as object, {\n // Note: publishedAt value will always be set when DP is disabled\n isDraft: !params?.data?.publishedAt,\n locale: params?.locale,\n });\n\n // Component handling\n const componentData = await createComponents(uid, validData as any);\n const entryData = applyTransforms(\n Object.assign(omitComponentData(contentType, validData), componentData),\n { contentType }\n );\n\n const doc = await strapi.db.query(uid).create({ ...query, data: entryData });\n\n return doc;\n }\n\n async function create(params = {} as any) {\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToData(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const doc = await createEntry(queryParams);\n\n if (hasDraftAndPublish && params.status === 'published') {\n return publish(doc.documentId, params).then((doc) => doc.versions[0]);\n }\n\n return doc;\n }\n\n async function clone(documentId: string, params = {} as any) {\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n // Get deep populate\n const entriesToClone = await strapi.db?.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n // DP Enabled: Clone drafts\n // DP Disabled: Clone only the existing version (published)\n publishedAt: { $null: hasDraftAndPublish },\n },\n populate: getDeepPopulate(uid, { relationalFields: ['id'] }),\n });\n\n const clonedEntries = await async.map(\n entriesToClone,\n async.pipe(\n omit('id'),\n // assign new documentId\n assoc('documentId', createDocumentId()),\n // Merge new data into it\n (data) => merge(data, queryParams.data),\n (data) => createEntry({ ...queryParams, data, status: 'draft' })\n )\n );\n\n return { documentId: clonedEntries.at(0)?.documentId, versions: clonedEntries };\n }\n\n async function update(documentId: string, params = {} as any) {\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToLookup(contentType),\n DP.statusToData(contentType),\n // Default locale will be set if not provided\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const { data, ...restParams } = await transformParamsDocumentId(uid, queryParams || {});\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams || {}) as any);\n\n // Validation\n const model = strapi.contentType(uid);\n // Find if document exists\n const entryToUpdate = await strapi.db\n .query(uid)\n .findOne({ ...query, where: { ...queryParams?.lookup, ...query?.where, documentId } });\n\n let updatedDraft = null;\n if (entryToUpdate) {\n const validData = await entityValidator.validateEntityUpdate(\n model,\n data,\n {\n isDraft: !queryParams?.data?.publishedAt, // Always update the draft version\n locale: queryParams?.locale,\n },\n entryToUpdate\n );\n\n // Component handling\n const componentData = await updateComponents(uid, entryToUpdate, validData as any);\n const entryData = applyTransforms(\n Object.assign(omitComponentData(model, validData), componentData),\n { contentType: model }\n );\n\n updatedDraft = await strapi.db\n .query(uid)\n .update({ ...query, where: { id: entryToUpdate.id }, data: entryData });\n }\n\n if (!updatedDraft) {\n const documentExists = await strapi.db\n .query(contentType.uid)\n .findOne({ where: { documentId } });\n\n if (documentExists) {\n updatedDraft = await createEntry({\n ...queryParams,\n data: { ...queryParams.data, documentId },\n });\n }\n }\n\n if (hasDraftAndPublish && updatedDraft && params.status === 'published') {\n return publish(documentId, params).then((doc) => doc.versions[0]);\n }\n\n return updatedDraft;\n }\n\n async function count(params = {} as any) {\n const query = await async.pipe(\n DP.defaultStatus(contentType),\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).count(query);\n }\n\n async function publish(documentId: string, params = {} as any) {\n const queryParams = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n await deleteFn(documentId, {\n ...queryParams,\n lookup: { ...queryParams?.lookup, publishedAt: { $ne: null } },\n });\n\n // Get deep populate\n const entriesToPublish = await strapi.db?.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null,\n },\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n });\n\n // Transform draft entry data and create published versions\n const publishedEntries = await async.map(\n entriesToPublish,\n async.pipe(\n // Updated at value is used to know if draft has been modified\n // If both versions share the same value, it means the draft has not been modified\n (draft) => assoc('updatedAt', draft.updatedAt, draft),\n assoc('publishedAt', new Date()),\n assoc('documentId', documentId),\n omit('id'),\n // Transform relations to target published versions\n (entry) => {\n const opts = { uid, locale: entry.locale, status: 'published', allowMissingId: true };\n return transformData(entry, opts);\n },\n // Create the published entry\n (data) => createEntry({ ...queryParams, data, locale: data.locale, status: 'published' })\n )\n );\n\n return { versions: publishedEntries };\n }\n\n async function unpublish(documentId: string, params = {} as any) {\n const queryParams = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const { deletedEntries } = await deleteFn(documentId, {\n ...params,\n lookup: { ...queryParams?.lookup, publishedAt: { $ne: null } },\n });\n\n return { versions: deletedEntries };\n }\n\n async function discardDraft(documentId: string, params = {} as any) {\n const queryParams = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n await deleteFn(documentId, {\n ...queryParams,\n // Delete all drafts that match query\n lookup: { ...queryParams?.lookup, publishedAt: null },\n });\n\n // Get deep populate of published versions\n const entriesToDraft = await strapi.db?.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n });\n\n // Transform published entry data and create draft versions\n const draftEntries = await async.map(\n entriesToDraft,\n async.pipe(\n assoc('publishedAt', null),\n assoc('documentId', documentId),\n omit('id'),\n // Transform relations to target draft versions\n (entry) => {\n const opts = { uid, locale: entry.locale, status: 'draft', allowMissingId: true };\n return transformData(entry, opts);\n },\n // Create the draft entry\n (data) => createEntry({ ...queryParams, locale: data.locale, data, status: 'draft' })\n )\n );\n\n return { versions: draftEntries };\n }\n\n return {\n findMany: wrapInTransaction(findMany),\n findFirst: wrapInTransaction(findFirst),\n findOne: wrapInTransaction(findOne),\n delete: wrapInTransaction(deleteFn),\n create: wrapInTransaction(create),\n clone: wrapInTransaction(clone),\n update: wrapInTransaction(update),\n count: wrapInTransaction(count),\n publish: hasDraftAndPublish ? wrapInTransaction(publish) : (undefined as any),\n unpublish: hasDraftAndPublish ? wrapInTransaction(unpublish) : (undefined as any),\n discardDraft: hasDraftAndPublish ? wrapInTransaction(discardDraft) : (undefined as any),\n };\n};\n"],"names":["curry","params","convertQueryParams","assoc","contentTypesUtils","async","DP.defaultToDraft","DP.statusToLookup","i18n.defaultLocale","i18n.localeToLookup","transformParamsDocumentId","query","getComponents","deleteComponents","omit","i18n.multiLocaleToLookup","data","pickSelectionParams","entityValidator","createComponents","applyTransforms","omitComponentData","DP.filterDataPublishedAt","DP.setStatusToDraft","DP.statusToData","i18n.localeToData","doc","getDeepPopulate","createDocumentId","merge","updateComponents","DP.defaultStatus","transformData","wrapInTransaction"],"mappings":"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"}
|