@strapi/core 5.33.3 → 5.34.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.map +1 -1
- package/dist/Strapi.js +3 -0
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +3 -0
- package/dist/Strapi.mjs.map +1 -1
- package/dist/ee/index.d.ts +2 -0
- package/dist/ee/index.d.ts.map +1 -1
- package/dist/ee/index.js +6 -0
- package/dist/ee/index.js.map +1 -1
- package/dist/ee/index.mjs +6 -0
- package/dist/ee/index.mjs.map +1 -1
- package/dist/ee/license.d.ts +2 -0
- package/dist/ee/license.d.ts.map +1 -1
- package/dist/ee/license.js.map +1 -1
- package/dist/ee/license.mjs.map +1 -1
- package/dist/package.json.js +12 -12
- package/dist/package.json.mjs +12 -12
- package/dist/services/document-service/repository.d.ts.map +1 -1
- package/dist/services/document-service/repository.js +22 -5
- package/dist/services/document-service/repository.js.map +1 -1
- package/dist/services/document-service/repository.mjs +24 -7
- package/dist/services/document-service/repository.mjs.map +1 -1
- package/dist/services/document-service/transform/data.d.ts.map +1 -1
- package/dist/services/document-service/transform/data.js +8 -1
- package/dist/services/document-service/transform/data.js.map +1 -1
- package/dist/services/document-service/transform/data.mjs +8 -1
- package/dist/services/document-service/transform/data.mjs.map +1 -1
- package/dist/services/document-service/utils/ordered-parallel.d.ts +5 -0
- package/dist/services/document-service/utils/ordered-parallel.d.ts.map +1 -0
- package/dist/services/document-service/utils/ordered-parallel.js +18 -0
- package/dist/services/document-service/utils/ordered-parallel.js.map +1 -0
- package/dist/services/document-service/utils/ordered-parallel.mjs +16 -0
- package/dist/services/document-service/utils/ordered-parallel.mjs.map +1 -0
- package/dist/services/metrics/middleware.d.ts.map +1 -1
- package/dist/services/metrics/middleware.js +27 -9
- package/dist/services/metrics/middleware.js.map +1 -1
- package/dist/services/metrics/middleware.mjs +27 -9
- package/dist/services/metrics/middleware.mjs.map +1 -1
- package/dist/services/metrics/sender.d.ts.map +1 -1
- package/dist/services/metrics/sender.js +9 -2
- package/dist/services/metrics/sender.js.map +1 -1
- package/dist/services/metrics/sender.mjs +9 -2
- package/dist/services/metrics/sender.mjs.map +1 -1
- package/package.json +12 -12
package/dist/ee/license.d.ts
CHANGED
package/dist/ee/license.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/ee/license.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,UAAU,WAAW;IACnB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/ee/license.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,UAAU,WAAW;IACnB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACtE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAiBD,QAAA,MAAM,oBAAoB,8BAA8B,CAAC;AAIzD,cAAM,iBAAkB,SAAQ,KAAK;IACnC,cAAc,UAAS;gBAEX,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ;CAKpD;AAED,QAAA,MAAM,WAAW,cAAe,MAAM,uBASrC,CAAC;AAEF,QAAA,MAAM,aAAa,YAAa,MAAM,gBA+BrC,CAAC;AAMF,QAAA,MAAM,YAAY,eACJ;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,OAC9B,MAAM,aACA,MAAM,iBAkClB,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC"}
|
package/dist/ee/license.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.js","sources":["../../src/ee/license.ts"],"sourcesContent":["import fs from 'fs';\nimport { join, resolve } from 'path';\nimport crypto from 'crypto';\nimport type { Core } from '@strapi/types';\n\nimport { generateInstallId } from '@strapi/utils';\n\ninterface LicenseInfo {\n type: 'bronze' | 'silver' | 'gold';\n isTrial: boolean;\n expireAt?: string;\n seats?: number;\n features?: Array<{ name: string; options?: Record<string, unknown> }>;\n}\n\nconst DEFAULT_FEATURES = {\n bronze: [],\n silver: [],\n gold: [\n { name: 'sso' },\n // Set a null retention duration to allow the user to override it\n // The default of 90 days is set in the audit logs service\n { name: 'audit-logs', options: { retentionDays: null } },\n { name: 'review-workflows' },\n { name: 'cms-content-releases' },\n { name: 'cms-content-history', options: { retentionDays: 99999 } },\n { name: 'cms-advanced-preview' },\n ],\n};\n\nconst LICENSE_REGISTRY_URI = 'https://license.strapi.io';\n\nconst publicKey = fs.readFileSync(resolve(__dirname, '../../resources/key.pub'));\n\nclass LicenseCheckError extends Error {\n shouldFallback = false;\n\n constructor(message: string, shouldFallback = false) {\n super(message);\n\n this.shouldFallback = shouldFallback;\n }\n}\n\nconst readLicense = (directory: string) => {\n try {\n const path = join(directory, 'license.txt');\n return fs.readFileSync(path).toString();\n } catch (error) {\n if (typeof error === 'object' && error !== null && 'code' in error && error.code !== 'ENOENT') {\n throw Error('License file not readable, review its format and access rules.');\n }\n }\n};\n\nconst verifyLicense = (license: string) => {\n const [signature, base64Content] = Buffer.from(license, 'base64').toString().split('\\n');\n\n if (!signature || !base64Content) {\n throw new Error('Invalid license.');\n }\n\n const stringifiedContent = Buffer.from(base64Content, 'base64').toString();\n\n const verify = crypto.createVerify('RSA-SHA256');\n verify.update(stringifiedContent);\n verify.end();\n\n const verified = verify.verify(publicKey, signature, 'base64');\n\n if (!verified) {\n throw new Error('Invalid license.');\n }\n\n const licenseInfo: LicenseInfo = JSON.parse(stringifiedContent);\n\n if (!licenseInfo.features) {\n licenseInfo.features = DEFAULT_FEATURES[licenseInfo.type];\n }\n\n if (!licenseInfo.isTrial) {\n licenseInfo.isTrial = false;\n }\n\n Object.freeze(licenseInfo.features);\n return licenseInfo;\n};\n\nconst throwError = () => {\n throw new LicenseCheckError('Could not proceed to the online validation of your license.', true);\n};\n\nconst fetchLicense = async (\n { strapi }: { strapi: Core.Strapi },\n key: string,\n projectId: string\n) => {\n const { installId: installIdFromPackageJson } = strapi.config;\n\n const response = await strapi\n .fetch(`${LICENSE_REGISTRY_URI}/api/licenses/validate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n key,\n projectId,\n deviceId: generateInstallId(projectId, installIdFromPackageJson),\n }), // NOTE: Doing nothing on the LR with the installId\n })\n .catch(throwError);\n\n const contentType = response.headers.get('Content-Type');\n\n if (contentType?.includes('application/json')) {\n const { data, error } = await response.json();\n\n switch (response.status) {\n case 200:\n return data.license;\n case 400:\n throw new LicenseCheckError(error.message);\n case 404:\n throw new LicenseCheckError('The license used does not exists.');\n default:\n throwError();\n }\n } else {\n throwError();\n }\n};\n\nexport { readLicense, verifyLicense, fetchLicense, LicenseCheckError, LICENSE_REGISTRY_URI };\n"],"names":["DEFAULT_FEATURES","bronze","silver","gold","name","options","retentionDays","LICENSE_REGISTRY_URI","publicKey","fs","readFileSync","resolve","__dirname","LicenseCheckError","Error","message","shouldFallback","readLicense","directory","path","join","toString","error","code","verifyLicense","license","signature","base64Content","Buffer","from","split","stringifiedContent","verify","crypto","createVerify","update","end","verified","licenseInfo","JSON","parse","features","type","isTrial","Object","freeze","throwError","fetchLicense","strapi","key","projectId","installId","installIdFromPackageJson","config","response","fetch","method","headers","body","stringify","deviceId","generateInstallId","catch","contentType","get","includes","data","json","status"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"license.js","sources":["../../src/ee/license.ts"],"sourcesContent":["import fs from 'fs';\nimport { join, resolve } from 'path';\nimport crypto from 'crypto';\nimport type { Core } from '@strapi/types';\n\nimport { generateInstallId } from '@strapi/utils';\n\ninterface LicenseInfo {\n type: 'bronze' | 'silver' | 'gold';\n isTrial: boolean;\n expireAt?: string;\n seats?: number;\n features?: Array<{ name: string; options?: Record<string, unknown> }>;\n subscriptionId?: string;\n planPriceId?: string;\n}\n\nconst DEFAULT_FEATURES = {\n bronze: [],\n silver: [],\n gold: [\n { name: 'sso' },\n // Set a null retention duration to allow the user to override it\n // The default of 90 days is set in the audit logs service\n { name: 'audit-logs', options: { retentionDays: null } },\n { name: 'review-workflows' },\n { name: 'cms-content-releases' },\n { name: 'cms-content-history', options: { retentionDays: 99999 } },\n { name: 'cms-advanced-preview' },\n ],\n};\n\nconst LICENSE_REGISTRY_URI = 'https://license.strapi.io';\n\nconst publicKey = fs.readFileSync(resolve(__dirname, '../../resources/key.pub'));\n\nclass LicenseCheckError extends Error {\n shouldFallback = false;\n\n constructor(message: string, shouldFallback = false) {\n super(message);\n\n this.shouldFallback = shouldFallback;\n }\n}\n\nconst readLicense = (directory: string) => {\n try {\n const path = join(directory, 'license.txt');\n return fs.readFileSync(path).toString();\n } catch (error) {\n if (typeof error === 'object' && error !== null && 'code' in error && error.code !== 'ENOENT') {\n throw Error('License file not readable, review its format and access rules.');\n }\n }\n};\n\nconst verifyLicense = (license: string) => {\n const [signature, base64Content] = Buffer.from(license, 'base64').toString().split('\\n');\n\n if (!signature || !base64Content) {\n throw new Error('Invalid license.');\n }\n\n const stringifiedContent = Buffer.from(base64Content, 'base64').toString();\n\n const verify = crypto.createVerify('RSA-SHA256');\n verify.update(stringifiedContent);\n verify.end();\n\n const verified = verify.verify(publicKey, signature, 'base64');\n\n if (!verified) {\n throw new Error('Invalid license.');\n }\n\n const licenseInfo: LicenseInfo = JSON.parse(stringifiedContent);\n\n if (!licenseInfo.features) {\n licenseInfo.features = DEFAULT_FEATURES[licenseInfo.type];\n }\n\n if (!licenseInfo.isTrial) {\n licenseInfo.isTrial = false;\n }\n\n Object.freeze(licenseInfo.features);\n return licenseInfo;\n};\n\nconst throwError = () => {\n throw new LicenseCheckError('Could not proceed to the online validation of your license.', true);\n};\n\nconst fetchLicense = async (\n { strapi }: { strapi: Core.Strapi },\n key: string,\n projectId: string\n) => {\n const { installId: installIdFromPackageJson } = strapi.config;\n\n const response = await strapi\n .fetch(`${LICENSE_REGISTRY_URI}/api/licenses/validate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n key,\n projectId,\n deviceId: generateInstallId(projectId, installIdFromPackageJson),\n }), // NOTE: Doing nothing on the LR with the installId\n })\n .catch(throwError);\n\n const contentType = response.headers.get('Content-Type');\n\n if (contentType?.includes('application/json')) {\n const { data, error } = await response.json();\n\n switch (response.status) {\n case 200:\n return data.license;\n case 400:\n throw new LicenseCheckError(error.message);\n case 404:\n throw new LicenseCheckError('The license used does not exists.');\n default:\n throwError();\n }\n } else {\n throwError();\n }\n};\n\nexport { readLicense, verifyLicense, fetchLicense, LicenseCheckError, LICENSE_REGISTRY_URI };\n"],"names":["DEFAULT_FEATURES","bronze","silver","gold","name","options","retentionDays","LICENSE_REGISTRY_URI","publicKey","fs","readFileSync","resolve","__dirname","LicenseCheckError","Error","message","shouldFallback","readLicense","directory","path","join","toString","error","code","verifyLicense","license","signature","base64Content","Buffer","from","split","stringifiedContent","verify","crypto","createVerify","update","end","verified","licenseInfo","JSON","parse","features","type","isTrial","Object","freeze","throwError","fetchLicense","strapi","key","projectId","installId","installIdFromPackageJson","config","response","fetch","method","headers","body","stringify","deviceId","generateInstallId","catch","contentType","get","includes","data","json","status"],"mappings":"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"}
|
package/dist/ee/license.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.mjs","sources":["../../src/ee/license.ts"],"sourcesContent":["import fs from 'fs';\nimport { join, resolve } from 'path';\nimport crypto from 'crypto';\nimport type { Core } from '@strapi/types';\n\nimport { generateInstallId } from '@strapi/utils';\n\ninterface LicenseInfo {\n type: 'bronze' | 'silver' | 'gold';\n isTrial: boolean;\n expireAt?: string;\n seats?: number;\n features?: Array<{ name: string; options?: Record<string, unknown> }>;\n}\n\nconst DEFAULT_FEATURES = {\n bronze: [],\n silver: [],\n gold: [\n { name: 'sso' },\n // Set a null retention duration to allow the user to override it\n // The default of 90 days is set in the audit logs service\n { name: 'audit-logs', options: { retentionDays: null } },\n { name: 'review-workflows' },\n { name: 'cms-content-releases' },\n { name: 'cms-content-history', options: { retentionDays: 99999 } },\n { name: 'cms-advanced-preview' },\n ],\n};\n\nconst LICENSE_REGISTRY_URI = 'https://license.strapi.io';\n\nconst publicKey = fs.readFileSync(resolve(__dirname, '../../resources/key.pub'));\n\nclass LicenseCheckError extends Error {\n shouldFallback = false;\n\n constructor(message: string, shouldFallback = false) {\n super(message);\n\n this.shouldFallback = shouldFallback;\n }\n}\n\nconst readLicense = (directory: string) => {\n try {\n const path = join(directory, 'license.txt');\n return fs.readFileSync(path).toString();\n } catch (error) {\n if (typeof error === 'object' && error !== null && 'code' in error && error.code !== 'ENOENT') {\n throw Error('License file not readable, review its format and access rules.');\n }\n }\n};\n\nconst verifyLicense = (license: string) => {\n const [signature, base64Content] = Buffer.from(license, 'base64').toString().split('\\n');\n\n if (!signature || !base64Content) {\n throw new Error('Invalid license.');\n }\n\n const stringifiedContent = Buffer.from(base64Content, 'base64').toString();\n\n const verify = crypto.createVerify('RSA-SHA256');\n verify.update(stringifiedContent);\n verify.end();\n\n const verified = verify.verify(publicKey, signature, 'base64');\n\n if (!verified) {\n throw new Error('Invalid license.');\n }\n\n const licenseInfo: LicenseInfo = JSON.parse(stringifiedContent);\n\n if (!licenseInfo.features) {\n licenseInfo.features = DEFAULT_FEATURES[licenseInfo.type];\n }\n\n if (!licenseInfo.isTrial) {\n licenseInfo.isTrial = false;\n }\n\n Object.freeze(licenseInfo.features);\n return licenseInfo;\n};\n\nconst throwError = () => {\n throw new LicenseCheckError('Could not proceed to the online validation of your license.', true);\n};\n\nconst fetchLicense = async (\n { strapi }: { strapi: Core.Strapi },\n key: string,\n projectId: string\n) => {\n const { installId: installIdFromPackageJson } = strapi.config;\n\n const response = await strapi\n .fetch(`${LICENSE_REGISTRY_URI}/api/licenses/validate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n key,\n projectId,\n deviceId: generateInstallId(projectId, installIdFromPackageJson),\n }), // NOTE: Doing nothing on the LR with the installId\n })\n .catch(throwError);\n\n const contentType = response.headers.get('Content-Type');\n\n if (contentType?.includes('application/json')) {\n const { data, error } = await response.json();\n\n switch (response.status) {\n case 200:\n return data.license;\n case 400:\n throw new LicenseCheckError(error.message);\n case 404:\n throw new LicenseCheckError('The license used does not exists.');\n default:\n throwError();\n }\n } else {\n throwError();\n }\n};\n\nexport { readLicense, verifyLicense, fetchLicense, LicenseCheckError, LICENSE_REGISTRY_URI };\n"],"names":["DEFAULT_FEATURES","bronze","silver","gold","name","options","retentionDays","LICENSE_REGISTRY_URI","publicKey","fs","readFileSync","resolve","__dirname","LicenseCheckError","Error","message","shouldFallback","readLicense","directory","path","join","toString","error","code","verifyLicense","license","signature","base64Content","Buffer","from","split","stringifiedContent","verify","crypto","createVerify","update","end","verified","licenseInfo","JSON","parse","features","type","isTrial","Object","freeze","throwError","fetchLicense","strapi","key","projectId","installId","installIdFromPackageJson","config","response","fetch","method","headers","body","stringify","deviceId","generateInstallId","catch","contentType","get","includes","data","json","status"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"license.mjs","sources":["../../src/ee/license.ts"],"sourcesContent":["import fs from 'fs';\nimport { join, resolve } from 'path';\nimport crypto from 'crypto';\nimport type { Core } from '@strapi/types';\n\nimport { generateInstallId } from '@strapi/utils';\n\ninterface LicenseInfo {\n type: 'bronze' | 'silver' | 'gold';\n isTrial: boolean;\n expireAt?: string;\n seats?: number;\n features?: Array<{ name: string; options?: Record<string, unknown> }>;\n subscriptionId?: string;\n planPriceId?: string;\n}\n\nconst DEFAULT_FEATURES = {\n bronze: [],\n silver: [],\n gold: [\n { name: 'sso' },\n // Set a null retention duration to allow the user to override it\n // The default of 90 days is set in the audit logs service\n { name: 'audit-logs', options: { retentionDays: null } },\n { name: 'review-workflows' },\n { name: 'cms-content-releases' },\n { name: 'cms-content-history', options: { retentionDays: 99999 } },\n { name: 'cms-advanced-preview' },\n ],\n};\n\nconst LICENSE_REGISTRY_URI = 'https://license.strapi.io';\n\nconst publicKey = fs.readFileSync(resolve(__dirname, '../../resources/key.pub'));\n\nclass LicenseCheckError extends Error {\n shouldFallback = false;\n\n constructor(message: string, shouldFallback = false) {\n super(message);\n\n this.shouldFallback = shouldFallback;\n }\n}\n\nconst readLicense = (directory: string) => {\n try {\n const path = join(directory, 'license.txt');\n return fs.readFileSync(path).toString();\n } catch (error) {\n if (typeof error === 'object' && error !== null && 'code' in error && error.code !== 'ENOENT') {\n throw Error('License file not readable, review its format and access rules.');\n }\n }\n};\n\nconst verifyLicense = (license: string) => {\n const [signature, base64Content] = Buffer.from(license, 'base64').toString().split('\\n');\n\n if (!signature || !base64Content) {\n throw new Error('Invalid license.');\n }\n\n const stringifiedContent = Buffer.from(base64Content, 'base64').toString();\n\n const verify = crypto.createVerify('RSA-SHA256');\n verify.update(stringifiedContent);\n verify.end();\n\n const verified = verify.verify(publicKey, signature, 'base64');\n\n if (!verified) {\n throw new Error('Invalid license.');\n }\n\n const licenseInfo: LicenseInfo = JSON.parse(stringifiedContent);\n\n if (!licenseInfo.features) {\n licenseInfo.features = DEFAULT_FEATURES[licenseInfo.type];\n }\n\n if (!licenseInfo.isTrial) {\n licenseInfo.isTrial = false;\n }\n\n Object.freeze(licenseInfo.features);\n return licenseInfo;\n};\n\nconst throwError = () => {\n throw new LicenseCheckError('Could not proceed to the online validation of your license.', true);\n};\n\nconst fetchLicense = async (\n { strapi }: { strapi: Core.Strapi },\n key: string,\n projectId: string\n) => {\n const { installId: installIdFromPackageJson } = strapi.config;\n\n const response = await strapi\n .fetch(`${LICENSE_REGISTRY_URI}/api/licenses/validate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n key,\n projectId,\n deviceId: generateInstallId(projectId, installIdFromPackageJson),\n }), // NOTE: Doing nothing on the LR with the installId\n })\n .catch(throwError);\n\n const contentType = response.headers.get('Content-Type');\n\n if (contentType?.includes('application/json')) {\n const { data, error } = await response.json();\n\n switch (response.status) {\n case 200:\n return data.license;\n case 400:\n throw new LicenseCheckError(error.message);\n case 404:\n throw new LicenseCheckError('The license used does not exists.');\n default:\n throwError();\n }\n } else {\n throwError();\n }\n};\n\nexport { readLicense, verifyLicense, fetchLicense, LicenseCheckError, LICENSE_REGISTRY_URI };\n"],"names":["DEFAULT_FEATURES","bronze","silver","gold","name","options","retentionDays","LICENSE_REGISTRY_URI","publicKey","fs","readFileSync","resolve","__dirname","LicenseCheckError","Error","message","shouldFallback","readLicense","directory","path","join","toString","error","code","verifyLicense","license","signature","base64Content","Buffer","from","split","stringifiedContent","verify","crypto","createVerify","update","end","verified","licenseInfo","JSON","parse","features","type","isTrial","Object","freeze","throwError","fetchLicense","strapi","key","projectId","installId","installIdFromPackageJson","config","response","fetch","method","headers","body","stringify","deviceId","generateInstallId","catch","contentType","get","includes","data","json","status"],"mappings":"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"}
|
package/dist/package.json.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var name = "@strapi/core";
|
|
6
|
-
var version = "5.
|
|
6
|
+
var version = "5.34.0";
|
|
7
7
|
var description = "Core of Strapi";
|
|
8
8
|
var homepage = "https://strapi.io";
|
|
9
9
|
var bugs = {
|
|
@@ -59,14 +59,14 @@ var dependencies = {
|
|
|
59
59
|
"@koa/cors": "5.0.0",
|
|
60
60
|
"@koa/router": "12.0.2",
|
|
61
61
|
"@paralleldrive/cuid2": "2.2.2",
|
|
62
|
-
"@strapi/admin": "5.
|
|
63
|
-
"@strapi/database": "5.
|
|
64
|
-
"@strapi/generators": "5.
|
|
65
|
-
"@strapi/logger": "5.
|
|
66
|
-
"@strapi/permissions": "5.
|
|
67
|
-
"@strapi/types": "5.
|
|
68
|
-
"@strapi/typescript-utils": "5.
|
|
69
|
-
"@strapi/utils": "5.
|
|
62
|
+
"@strapi/admin": "5.34.0",
|
|
63
|
+
"@strapi/database": "5.34.0",
|
|
64
|
+
"@strapi/generators": "5.34.0",
|
|
65
|
+
"@strapi/logger": "5.34.0",
|
|
66
|
+
"@strapi/permissions": "5.34.0",
|
|
67
|
+
"@strapi/types": "5.34.0",
|
|
68
|
+
"@strapi/typescript-utils": "5.34.0",
|
|
69
|
+
"@strapi/utils": "5.34.0",
|
|
70
70
|
"@vercel/stega": "0.1.2",
|
|
71
71
|
bcryptjs: "2.4.3",
|
|
72
72
|
boxen: "5.1.2",
|
|
@@ -109,7 +109,7 @@ var dependencies = {
|
|
|
109
109
|
semver: "7.5.4",
|
|
110
110
|
statuses: "2.0.1",
|
|
111
111
|
typescript: "5.4.4",
|
|
112
|
-
undici: "6.
|
|
112
|
+
undici: "6.23.0",
|
|
113
113
|
yup: "0.32.9",
|
|
114
114
|
zod: "3.25.67"
|
|
115
115
|
};
|
|
@@ -134,9 +134,9 @@ var devDependencies = {
|
|
|
134
134
|
"@types/node": "24.10.0",
|
|
135
135
|
"@types/node-schedule": "2.1.7",
|
|
136
136
|
"@types/statuses": "2.0.1",
|
|
137
|
-
"eslint-config-custom": "5.
|
|
137
|
+
"eslint-config-custom": "5.34.0",
|
|
138
138
|
supertest: "6.3.3",
|
|
139
|
-
tsconfig: "5.
|
|
139
|
+
tsconfig: "5.34.0"
|
|
140
140
|
};
|
|
141
141
|
var engines = {
|
|
142
142
|
node: ">=20.0.0 <=24.x.x",
|
package/dist/package.json.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var name = "@strapi/core";
|
|
2
|
-
var version = "5.
|
|
2
|
+
var version = "5.34.0";
|
|
3
3
|
var description = "Core of Strapi";
|
|
4
4
|
var homepage = "https://strapi.io";
|
|
5
5
|
var bugs = {
|
|
@@ -55,14 +55,14 @@ var dependencies = {
|
|
|
55
55
|
"@koa/cors": "5.0.0",
|
|
56
56
|
"@koa/router": "12.0.2",
|
|
57
57
|
"@paralleldrive/cuid2": "2.2.2",
|
|
58
|
-
"@strapi/admin": "5.
|
|
59
|
-
"@strapi/database": "5.
|
|
60
|
-
"@strapi/generators": "5.
|
|
61
|
-
"@strapi/logger": "5.
|
|
62
|
-
"@strapi/permissions": "5.
|
|
63
|
-
"@strapi/types": "5.
|
|
64
|
-
"@strapi/typescript-utils": "5.
|
|
65
|
-
"@strapi/utils": "5.
|
|
58
|
+
"@strapi/admin": "5.34.0",
|
|
59
|
+
"@strapi/database": "5.34.0",
|
|
60
|
+
"@strapi/generators": "5.34.0",
|
|
61
|
+
"@strapi/logger": "5.34.0",
|
|
62
|
+
"@strapi/permissions": "5.34.0",
|
|
63
|
+
"@strapi/types": "5.34.0",
|
|
64
|
+
"@strapi/typescript-utils": "5.34.0",
|
|
65
|
+
"@strapi/utils": "5.34.0",
|
|
66
66
|
"@vercel/stega": "0.1.2",
|
|
67
67
|
bcryptjs: "2.4.3",
|
|
68
68
|
boxen: "5.1.2",
|
|
@@ -105,7 +105,7 @@ var dependencies = {
|
|
|
105
105
|
semver: "7.5.4",
|
|
106
106
|
statuses: "2.0.1",
|
|
107
107
|
typescript: "5.4.4",
|
|
108
|
-
undici: "6.
|
|
108
|
+
undici: "6.23.0",
|
|
109
109
|
yup: "0.32.9",
|
|
110
110
|
zod: "3.25.67"
|
|
111
111
|
};
|
|
@@ -130,9 +130,9 @@ var devDependencies = {
|
|
|
130
130
|
"@types/node": "24.10.0",
|
|
131
131
|
"@types/node-schedule": "2.1.7",
|
|
132
132
|
"@types/statuses": "2.0.1",
|
|
133
|
-
"eslint-config-custom": "5.
|
|
133
|
+
"eslint-config-custom": "5.34.0",
|
|
134
134
|
supertest: "6.3.3",
|
|
135
|
-
tsconfig: "5.
|
|
135
|
+
tsconfig: "5.34.0"
|
|
136
136
|
};
|
|
137
137
|
var engines = {
|
|
138
138
|
node: ">=20.0.0 <=24.x.x",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/repository.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/repository.ts"],"names":[],"mappings":"AAWA,OAAO,EAAqB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAwB3E,eAAO,MAAM,2BAA2B,EAAE,uBAodzC,CAAC"}
|
|
@@ -17,6 +17,7 @@ var unidirectionalRelations = require('./utils/unidirectional-relations.js');
|
|
|
17
17
|
var bidirectionalRelations = require('./utils/bidirectional-relations.js');
|
|
18
18
|
var index = require('../entity-validator/index.js');
|
|
19
19
|
var firstPublishedAt = require('./first-published-at.js');
|
|
20
|
+
var orderedParallel = require('./utils/ordered-parallel.js');
|
|
20
21
|
|
|
21
22
|
const { validators } = strapiUtils.validate;
|
|
22
23
|
// we have to typecast to reconcile the differences between validator and database getModel
|
|
@@ -47,14 +48,30 @@ const createContentTypeRepository = (uid, validator = index)=>{
|
|
|
47
48
|
]
|
|
48
49
|
};
|
|
49
50
|
const validateParams = async (params)=>{
|
|
51
|
+
// Cache model lookups for this request to avoid repeating the same work
|
|
52
|
+
const modelCache = strapiUtils.createModelCache(getModel);
|
|
50
53
|
const ctx = {
|
|
51
54
|
schema: contentType,
|
|
52
|
-
getModel
|
|
55
|
+
getModel: modelCache.getModel
|
|
53
56
|
};
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
// Only validate what is actually provided
|
|
58
|
+
const validations = [];
|
|
59
|
+
if (params.filters && !fp.isEmpty(params.filters)) {
|
|
60
|
+
validations.push(validators.validateFilters(ctx, params.filters, filtersValidations));
|
|
61
|
+
}
|
|
62
|
+
if (params.sort && !fp.isEmpty(params.sort)) {
|
|
63
|
+
validations.push(validators.validateSort(ctx, params.sort, sortValidations));
|
|
64
|
+
}
|
|
65
|
+
if (params.fields && !fp.isEmpty(params.fields)) {
|
|
66
|
+
validations.push(validators.validateFields(ctx, params.fields, fieldValidations));
|
|
67
|
+
}
|
|
68
|
+
if (params.populate && !fp.isEmpty(params.populate)) {
|
|
69
|
+
validations.push(validators.validatePopulate(ctx, params.populate, populateValidations));
|
|
70
|
+
}
|
|
71
|
+
// Run validations together but keep the same error order as before
|
|
72
|
+
await orderedParallel.runParallelWithOrderedErrors(validations);
|
|
73
|
+
// Clean up cache after validation
|
|
74
|
+
modelCache.clear();
|
|
58
75
|
// Strip lookup from params, it's only used internally
|
|
59
76
|
if (params.lookup) {
|
|
60
77
|
throw new strapiUtils.errors.ValidationError("Invalid params: 'lookup'");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sources":["../../../src/services/document-service/repository.ts"],"sourcesContent":["import { omit, assoc, merge, curry } from 'lodash/fp';\n\nimport { async, contentTypes as contentTypesUtils, validate, errors } from '@strapi/utils';\n\nimport type { UID } from '@strapi/types';\nimport { wrapInTransaction, type RepositoryFactoryMethod } from './common';\nimport * as DP from './draft-and-publish';\nimport * as i18n from './internationalization';\nimport { copyNonLocalizedFields } from './internationalization';\nimport * as components from './components';\n\nimport { createEntriesService } from './entries';\nimport { pickSelectionParams } from './params';\nimport { createDocumentId } from '../../utils/transform-content-types-to-models';\nimport { getDeepPopulate } from './utils/populate';\nimport { transformParamsToQuery } from './transform/query';\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { createEventManager } from './events';\nimport * as unidirectionalRelations from './utils/unidirectional-relations';\nimport * as bidirectionalRelations from './utils/bidirectional-relations';\nimport entityValidator from '../entity-validator';\nimport { addFirstPublishedAtToDraft, filterDataFirstPublishedAt } from './first-published-at';\n\nconst { validators } = validate;\n\n// we have to typecast to reconcile the differences between validator and database getModel\nconst getModel = ((schema: UID.Schema) => strapi.getModel(schema)) as (schema: string) => any;\n\nexport const createContentTypeRepository: RepositoryFactoryMethod = (\n uid,\n validator = entityValidator\n) => {\n const contentType = strapi.contentType(uid);\n const hasDraftAndPublish = contentTypesUtils.hasDraftAndPublish(contentType);\n\n // Define the validations that should be performed\n const sortValidations = ['nonAttributesOperators', 'dynamicZones', 'morphRelations'];\n const fieldValidations = ['scalarAttributes'];\n const filtersValidations = ['nonAttributesOperators', 'dynamicZones', 'morphRelations'];\n const populateValidations = {\n sort: sortValidations,\n field: fieldValidations,\n filters: filtersValidations,\n populate: ['nonAttributesOperators'],\n };\n\n const validateParams = async (params: any) => {\n const ctx = { schema: contentType, getModel };\n await validators.validateFilters(ctx, params.filters, filtersValidations);\n await validators.validateSort(ctx, params.sort, sortValidations);\n await validators.validateFields(ctx, params.fields, fieldValidations);\n await validators.validatePopulate(ctx, params.populate, populateValidations);\n\n // Strip lookup from params, it's only used internally\n if (params.lookup) {\n throw new errors.ValidationError(\"Invalid params: 'lookup'\");\n }\n\n // TODO: add validate status, locale, pagination\n\n return params;\n };\n\n const entries = createEntriesService(uid, validator);\n\n const eventManager = createEventManager(strapi, uid);\n const emitEvent = curry(eventManager.emitEvent);\n\n async function findMany(params = {} as any) {\n const query = await async.pipe(\n validateParams,\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(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 validateParams,\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(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\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 deleteDocument(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\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 const deletedEntries = await async.map(entriesToDelete, (entryToDelete: any) =>\n entries.delete(entryToDelete.id)\n );\n\n entriesToDelete.forEach(emitEvent('entry.delete'));\n\n return { documentId, entries: deletedEntries };\n }\n\n async function create(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\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 entries.create(queryParams);\n\n emitEvent('entry.create', doc);\n\n if (hasDraftAndPublish && params.status === 'published') {\n return publish({\n ...params,\n documentId: doc.documentId,\n }).then((doc) => doc.entries[0]);\n }\n\n return doc;\n }\n\n async function clone(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\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 validateParams,\n omit(['id', 'createdAt', 'updatedAt']),\n // assign new documentId\n assoc('documentId', createDocumentId()),\n // Merge new data into it\n (data) => merge(data, queryParams.data),\n (data) => entries.create({ ...queryParams, data, status: 'draft' })\n )\n );\n\n clonedEntries.forEach(emitEvent('entry.create'));\n\n return { documentId: clonedEntries.at(0)?.documentId, entries: clonedEntries };\n }\n\n async function update(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n DP.filterDataPublishedAt,\n filterDataFirstPublishedAt,\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 // 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 updatedDraft = await entries.update(entryToUpdate, queryParams);\n emitEvent('entry.update', updatedDraft);\n }\n\n if (!updatedDraft) {\n const documentExists = await strapi.db\n .query(contentType.uid)\n .findOne({ where: { documentId } });\n\n if (documentExists) {\n const mergedData = await copyNonLocalizedFields(contentType, documentId, {\n ...queryParams.data,\n documentId,\n });\n\n updatedDraft = await entries.create({\n ...queryParams,\n data: mergedData,\n });\n emitEvent('entry.create', updatedDraft);\n }\n }\n\n if (hasDraftAndPublish && updatedDraft && params.status === 'published') {\n return publish({\n ...params,\n documentId,\n }).then((doc) => doc.entries[0]);\n }\n\n return updatedDraft;\n }\n\n async function count(params = {} as any) {\n const query = await async.pipe(\n validateParams,\n DP.defaultStatus(contentType),\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).count(query);\n }\n\n async function publish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [draftsToPublish, oldPublishedVersions] = await Promise.all([\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null, // Ignore lookup\n },\n // Populate relations, media, compos and dz\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n }),\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n select: ['id', 'locale'],\n }),\n ]);\n\n // Load any unidirectional relation targetting the old published entries\n const relationsToSync = await unidirectionalRelations.load(\n uid,\n {\n newVersions: draftsToPublish,\n oldVersions: oldPublishedVersions,\n },\n {\n shouldPropagateRelation: components.createComponentRelationFilter(),\n }\n );\n\n const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {\n newVersions: draftsToPublish,\n oldVersions: oldPublishedVersions,\n });\n\n // Delete old published versions\n await async.map(oldPublishedVersions, (entry: any) => entries.delete(entry.id));\n\n // Add firstPublishedAt to draft if it doesn't exist\n const updatedDraft = await async.map(draftsToPublish, (draft: any) =>\n addFirstPublishedAtToDraft(draft, entries.update, contentType)\n );\n\n // Transform draft entry data and create published versions\n const publishedEntries = await async.map(updatedDraft, (draft: any) =>\n entries.publish(draft, queryParams)\n );\n\n // Sync unidirectional relations with the new published entries\n await unidirectionalRelations.sync(\n [...oldPublishedVersions, ...updatedDraft],\n publishedEntries,\n relationsToSync\n );\n\n await bidirectionalRelations.sync(\n [...oldPublishedVersions, ...updatedDraft],\n publishedEntries,\n bidirectionalRelationsToSync\n );\n\n publishedEntries.forEach(emitEvent('entry.publish'));\n\n return { documentId, entries: publishedEntries };\n }\n\n async function unpublish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId, publishedAt: { $ne: null } }, query)\n )(params);\n\n // Delete all published versions\n const versionsToDelete = await strapi.db.query(uid).findMany(query);\n await async.map(versionsToDelete, (entry: any) => entries.delete(entry.id));\n\n versionsToDelete.forEach(emitEvent('entry.unpublish'));\n return { documentId, entries: versionsToDelete };\n }\n\n async function discardDraft(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [versionsToDraft, oldDrafts] = await Promise.all([\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n // Populate relations, media, compos and dz\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n }),\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null,\n },\n select: ['id', 'locale'],\n }),\n ]);\n\n // Load any unidirectional relation targeting the old drafts\n const relationsToSync = await unidirectionalRelations.load(\n uid,\n {\n newVersions: versionsToDraft,\n oldVersions: oldDrafts,\n },\n {\n shouldPropagateRelation: components.createComponentRelationFilter(),\n }\n );\n\n const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {\n newVersions: versionsToDraft,\n oldVersions: oldDrafts,\n });\n\n // Delete old drafts\n await async.map(oldDrafts, (entry: any) => entries.delete(entry.id));\n\n // Transform published entry data and create draft versions\n const draftEntries = await async.map(versionsToDraft, (entry: any) =>\n entries.discardDraft(entry, queryParams)\n );\n\n // Sync unidirectional relations with the new draft entries\n await unidirectionalRelations.sync(\n [...oldDrafts, ...versionsToDraft],\n draftEntries,\n relationsToSync\n );\n\n await bidirectionalRelations.sync(\n [...oldDrafts, ...versionsToDraft],\n draftEntries,\n bidirectionalRelationsToSync\n );\n\n draftEntries.forEach(emitEvent('entry.draft-discard'));\n return { documentId, entries: draftEntries };\n }\n\n async function updateComponents(entry: any, data: any) {\n return components.updateComponents(uid, entry, data);\n }\n\n function omitComponentData(data: any) {\n return components.omitComponentData(contentType, data);\n }\n\n return {\n findMany: wrapInTransaction(findMany),\n findFirst: wrapInTransaction(findFirst),\n findOne: wrapInTransaction(findOne),\n delete: wrapInTransaction(deleteDocument),\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 updateComponents,\n omitComponentData,\n };\n};\n"],"names":["validators","validate","getModel","schema","strapi","createContentTypeRepository","uid","validator","entityValidator","contentType","hasDraftAndPublish","contentTypesUtils","sortValidations","fieldValidations","filtersValidations","populateValidations","sort","field","filters","populate","validateParams","params","ctx","validateFilters","validateSort","validateFields","fields","validatePopulate","lookup","errors","ValidationError","entries","createEntriesService","eventManager","createEventManager","emitEvent","curry","findMany","query","async","pipe","DP","i18n","transformParamsDocumentId","transformParamsToQuery","db","findFirst","findOne","opts","documentId","assoc","where","deleteDocument","omit","status","Error","entriesToDelete","deletedEntries","map","entryToDelete","delete","id","forEach","create","queryParams","doc","publish","then","clone","entriesToClone","publishedAt","$null","getDeepPopulate","relationalFields","clonedEntries","createDocumentId","data","merge","at","update","filterDataFirstPublishedAt","restParams","pickSelectionParams","entryToUpdate","updatedDraft","documentExists","mergedData","copyNonLocalizedFields","count","draftsToPublish","oldPublishedVersions","Promise","all","$ne","select","relationsToSync","unidirectionalRelations","newVersions","oldVersions","shouldPropagateRelation","components","bidirectionalRelationsToSync","bidirectionalRelations","entry","draft","addFirstPublishedAtToDraft","publishedEntries","unpublish","versionsToDelete","discardDraft","versionsToDraft","oldDrafts","draftEntries","updateComponents","omitComponentData","wrapInTransaction","undefined"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"repository.js","sources":["../../../src/services/document-service/repository.ts"],"sourcesContent":["import { omit, assoc, merge, curry, isEmpty } from 'lodash/fp';\n\nimport {\n async,\n contentTypes as contentTypesUtils,\n validate,\n errors,\n createModelCache,\n} from '@strapi/utils';\n\nimport type { UID } from '@strapi/types';\nimport { wrapInTransaction, type RepositoryFactoryMethod } from './common';\nimport * as DP from './draft-and-publish';\nimport * as i18n from './internationalization';\nimport { copyNonLocalizedFields } from './internationalization';\nimport * as components from './components';\n\nimport { createEntriesService } from './entries';\nimport { pickSelectionParams } from './params';\nimport { createDocumentId } from '../../utils/transform-content-types-to-models';\nimport { getDeepPopulate } from './utils/populate';\nimport { transformParamsToQuery } from './transform/query';\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { createEventManager } from './events';\nimport * as unidirectionalRelations from './utils/unidirectional-relations';\nimport * as bidirectionalRelations from './utils/bidirectional-relations';\nimport entityValidator from '../entity-validator';\nimport { addFirstPublishedAtToDraft, filterDataFirstPublishedAt } from './first-published-at';\nimport { runParallelWithOrderedErrors } from './utils/ordered-parallel';\n\nconst { validators } = validate;\n\n// we have to typecast to reconcile the differences between validator and database getModel\nconst getModel = ((schema: UID.Schema) => strapi.getModel(schema)) as (schema: string) => any;\n\nexport const createContentTypeRepository: RepositoryFactoryMethod = (\n uid,\n validator = entityValidator\n) => {\n const contentType = strapi.contentType(uid);\n const hasDraftAndPublish = contentTypesUtils.hasDraftAndPublish(contentType);\n\n // Define the validations that should be performed\n const sortValidations = ['nonAttributesOperators', 'dynamicZones', 'morphRelations'];\n const fieldValidations = ['scalarAttributes'];\n const filtersValidations = ['nonAttributesOperators', 'dynamicZones', 'morphRelations'];\n const populateValidations = {\n sort: sortValidations,\n field: fieldValidations,\n filters: filtersValidations,\n populate: ['nonAttributesOperators'],\n };\n\n const validateParams = async (params: any) => {\n // Cache model lookups for this request to avoid repeating the same work\n const modelCache = createModelCache(getModel);\n\n const ctx = { schema: contentType, getModel: modelCache.getModel };\n\n // Only validate what is actually provided\n const validations: Promise<unknown>[] = [];\n\n if (params.filters && !isEmpty(params.filters)) {\n validations.push(validators.validateFilters(ctx, params.filters, filtersValidations));\n }\n\n if (params.sort && !isEmpty(params.sort)) {\n validations.push(validators.validateSort(ctx, params.sort, sortValidations));\n }\n\n if (params.fields && !isEmpty(params.fields)) {\n validations.push(validators.validateFields(ctx, params.fields, fieldValidations));\n }\n\n if (params.populate && !isEmpty(params.populate)) {\n validations.push(validators.validatePopulate(ctx, params.populate, populateValidations));\n }\n\n // Run validations together but keep the same error order as before\n await runParallelWithOrderedErrors(validations);\n\n // Clean up cache after validation\n modelCache.clear();\n\n // Strip lookup from params, it's only used internally\n if (params.lookup) {\n throw new errors.ValidationError(\"Invalid params: 'lookup'\");\n }\n\n // TODO: add validate status, locale, pagination\n\n return params;\n };\n\n const entries = createEntriesService(uid, validator);\n\n const eventManager = createEventManager(strapi, uid);\n const emitEvent = curry(eventManager.emitEvent);\n\n async function findMany(params = {} as any) {\n const query = await async.pipe(\n validateParams,\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(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 validateParams,\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(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\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 deleteDocument(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\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 const deletedEntries = await async.map(entriesToDelete, (entryToDelete: any) =>\n entries.delete(entryToDelete.id)\n );\n\n entriesToDelete.forEach(emitEvent('entry.delete'));\n\n return { documentId, entries: deletedEntries };\n }\n\n async function create(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\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 entries.create(queryParams);\n\n emitEvent('entry.create', doc);\n\n if (hasDraftAndPublish && params.status === 'published') {\n return publish({\n ...params,\n documentId: doc.documentId,\n }).then((doc) => doc.entries[0]);\n }\n\n return doc;\n }\n\n async function clone(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\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 validateParams,\n omit(['id', 'createdAt', 'updatedAt']),\n // assign new documentId\n assoc('documentId', createDocumentId()),\n // Merge new data into it\n (data) => merge(data, queryParams.data),\n (data) => entries.create({ ...queryParams, data, status: 'draft' })\n )\n );\n\n clonedEntries.forEach(emitEvent('entry.create'));\n\n return { documentId: clonedEntries.at(0)?.documentId, entries: clonedEntries };\n }\n\n async function update(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n DP.filterDataPublishedAt,\n filterDataFirstPublishedAt,\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 // 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 updatedDraft = await entries.update(entryToUpdate, queryParams);\n emitEvent('entry.update', updatedDraft);\n }\n\n if (!updatedDraft) {\n const documentExists = await strapi.db\n .query(contentType.uid)\n .findOne({ where: { documentId } });\n\n if (documentExists) {\n const mergedData = await copyNonLocalizedFields(contentType, documentId, {\n ...queryParams.data,\n documentId,\n });\n\n updatedDraft = await entries.create({\n ...queryParams,\n data: mergedData,\n });\n emitEvent('entry.create', updatedDraft);\n }\n }\n\n if (hasDraftAndPublish && updatedDraft && params.status === 'published') {\n return publish({\n ...params,\n documentId,\n }).then((doc) => doc.entries[0]);\n }\n\n return updatedDraft;\n }\n\n async function count(params = {} as any) {\n const query = await async.pipe(\n validateParams,\n DP.defaultStatus(contentType),\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).count(query);\n }\n\n async function publish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [draftsToPublish, oldPublishedVersions] = await Promise.all([\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null, // Ignore lookup\n },\n // Populate relations, media, compos and dz\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n }),\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n select: ['id', 'locale'],\n }),\n ]);\n\n // Load any unidirectional relation targetting the old published entries\n const relationsToSync = await unidirectionalRelations.load(\n uid,\n {\n newVersions: draftsToPublish,\n oldVersions: oldPublishedVersions,\n },\n {\n shouldPropagateRelation: components.createComponentRelationFilter(),\n }\n );\n\n const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {\n newVersions: draftsToPublish,\n oldVersions: oldPublishedVersions,\n });\n\n // Delete old published versions\n await async.map(oldPublishedVersions, (entry: any) => entries.delete(entry.id));\n\n // Add firstPublishedAt to draft if it doesn't exist\n const updatedDraft = await async.map(draftsToPublish, (draft: any) =>\n addFirstPublishedAtToDraft(draft, entries.update, contentType)\n );\n\n // Transform draft entry data and create published versions\n const publishedEntries = await async.map(updatedDraft, (draft: any) =>\n entries.publish(draft, queryParams)\n );\n\n // Sync unidirectional relations with the new published entries\n await unidirectionalRelations.sync(\n [...oldPublishedVersions, ...updatedDraft],\n publishedEntries,\n relationsToSync\n );\n\n await bidirectionalRelations.sync(\n [...oldPublishedVersions, ...updatedDraft],\n publishedEntries,\n bidirectionalRelationsToSync\n );\n\n publishedEntries.forEach(emitEvent('entry.publish'));\n\n return { documentId, entries: publishedEntries };\n }\n\n async function unpublish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId, publishedAt: { $ne: null } }, query)\n )(params);\n\n // Delete all published versions\n const versionsToDelete = await strapi.db.query(uid).findMany(query);\n await async.map(versionsToDelete, (entry: any) => entries.delete(entry.id));\n\n versionsToDelete.forEach(emitEvent('entry.unpublish'));\n return { documentId, entries: versionsToDelete };\n }\n\n async function discardDraft(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [versionsToDraft, oldDrafts] = await Promise.all([\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n // Populate relations, media, compos and dz\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n }),\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null,\n },\n select: ['id', 'locale'],\n }),\n ]);\n\n // Load any unidirectional relation targeting the old drafts\n const relationsToSync = await unidirectionalRelations.load(\n uid,\n {\n newVersions: versionsToDraft,\n oldVersions: oldDrafts,\n },\n {\n shouldPropagateRelation: components.createComponentRelationFilter(),\n }\n );\n\n const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {\n newVersions: versionsToDraft,\n oldVersions: oldDrafts,\n });\n\n // Delete old drafts\n await async.map(oldDrafts, (entry: any) => entries.delete(entry.id));\n\n // Transform published entry data and create draft versions\n const draftEntries = await async.map(versionsToDraft, (entry: any) =>\n entries.discardDraft(entry, queryParams)\n );\n\n // Sync unidirectional relations with the new draft entries\n await unidirectionalRelations.sync(\n [...oldDrafts, ...versionsToDraft],\n draftEntries,\n relationsToSync\n );\n\n await bidirectionalRelations.sync(\n [...oldDrafts, ...versionsToDraft],\n draftEntries,\n bidirectionalRelationsToSync\n );\n\n draftEntries.forEach(emitEvent('entry.draft-discard'));\n return { documentId, entries: draftEntries };\n }\n\n async function updateComponents(entry: any, data: any) {\n return components.updateComponents(uid, entry, data);\n }\n\n function omitComponentData(data: any) {\n return components.omitComponentData(contentType, data);\n }\n\n return {\n findMany: wrapInTransaction(findMany),\n findFirst: wrapInTransaction(findFirst),\n findOne: wrapInTransaction(findOne),\n delete: wrapInTransaction(deleteDocument),\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 updateComponents,\n omitComponentData,\n };\n};\n"],"names":["validators","validate","getModel","schema","strapi","createContentTypeRepository","uid","validator","entityValidator","contentType","hasDraftAndPublish","contentTypesUtils","sortValidations","fieldValidations","filtersValidations","populateValidations","sort","field","filters","populate","validateParams","params","modelCache","createModelCache","ctx","validations","isEmpty","push","validateFilters","validateSort","fields","validateFields","validatePopulate","runParallelWithOrderedErrors","clear","lookup","errors","ValidationError","entries","createEntriesService","eventManager","createEventManager","emitEvent","curry","findMany","query","async","pipe","DP","i18n","transformParamsDocumentId","transformParamsToQuery","db","findFirst","findOne","opts","documentId","assoc","where","deleteDocument","omit","status","Error","entriesToDelete","deletedEntries","map","entryToDelete","delete","id","forEach","create","queryParams","doc","publish","then","clone","entriesToClone","publishedAt","$null","getDeepPopulate","relationalFields","clonedEntries","createDocumentId","data","merge","at","update","filterDataFirstPublishedAt","restParams","pickSelectionParams","entryToUpdate","updatedDraft","documentExists","mergedData","copyNonLocalizedFields","count","draftsToPublish","oldPublishedVersions","Promise","all","$ne","select","relationsToSync","unidirectionalRelations","newVersions","oldVersions","shouldPropagateRelation","components","bidirectionalRelationsToSync","bidirectionalRelations","entry","draft","addFirstPublishedAtToDraft","publishedEntries","unpublish","versionsToDelete","discardDraft","versionsToDraft","oldDrafts","draftEntries","updateComponents","omitComponentData","wrapInTransaction","undefined"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { curry, assoc, omit, merge } from 'lodash/fp';
|
|
2
|
-
import { contentTypes, async, errors, validate } from '@strapi/utils';
|
|
1
|
+
import { curry, assoc, omit, merge, isEmpty } from 'lodash/fp';
|
|
2
|
+
import { contentTypes, async, createModelCache, errors, validate } from '@strapi/utils';
|
|
3
3
|
import { wrapInTransaction } from './common.mjs';
|
|
4
4
|
import { defaultToDraft as defaultToDraftCurry, statusToLookup as statusToLookupCurry, filterDataPublishedAt as filterDataPublishedAtCurry, setStatusToDraft as setStatusToDraftCurry, statusToData as statusToDataCurry, defaultStatus as defaultStatusCurry } from './draft-and-publish.mjs';
|
|
5
5
|
import { defaultLocale as defaultLocaleCurry, multiLocaleToLookup as multiLocaleToLookupCurry, localeToLookup as localeToLookupCurry, localeToData as localeToDataCurry, copyNonLocalizedFields } from './internationalization.mjs';
|
|
@@ -15,6 +15,7 @@ import { load, sync } from './utils/unidirectional-relations.mjs';
|
|
|
15
15
|
import { load as load$1, sync as sync$1 } from './utils/bidirectional-relations.mjs';
|
|
16
16
|
import entityValidator from '../entity-validator/index.mjs';
|
|
17
17
|
import { filterDataFirstPublishedAt, addFirstPublishedAtToDraft } from './first-published-at.mjs';
|
|
18
|
+
import { runParallelWithOrderedErrors } from './utils/ordered-parallel.mjs';
|
|
18
19
|
|
|
19
20
|
const { validators } = validate;
|
|
20
21
|
// we have to typecast to reconcile the differences between validator and database getModel
|
|
@@ -45,14 +46,30 @@ const createContentTypeRepository = (uid, validator = entityValidator)=>{
|
|
|
45
46
|
]
|
|
46
47
|
};
|
|
47
48
|
const validateParams = async (params)=>{
|
|
49
|
+
// Cache model lookups for this request to avoid repeating the same work
|
|
50
|
+
const modelCache = createModelCache(getModel);
|
|
48
51
|
const ctx = {
|
|
49
52
|
schema: contentType,
|
|
50
|
-
getModel
|
|
53
|
+
getModel: modelCache.getModel
|
|
51
54
|
};
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
55
|
+
// Only validate what is actually provided
|
|
56
|
+
const validations = [];
|
|
57
|
+
if (params.filters && !isEmpty(params.filters)) {
|
|
58
|
+
validations.push(validators.validateFilters(ctx, params.filters, filtersValidations));
|
|
59
|
+
}
|
|
60
|
+
if (params.sort && !isEmpty(params.sort)) {
|
|
61
|
+
validations.push(validators.validateSort(ctx, params.sort, sortValidations));
|
|
62
|
+
}
|
|
63
|
+
if (params.fields && !isEmpty(params.fields)) {
|
|
64
|
+
validations.push(validators.validateFields(ctx, params.fields, fieldValidations));
|
|
65
|
+
}
|
|
66
|
+
if (params.populate && !isEmpty(params.populate)) {
|
|
67
|
+
validations.push(validators.validatePopulate(ctx, params.populate, populateValidations));
|
|
68
|
+
}
|
|
69
|
+
// Run validations together but keep the same error order as before
|
|
70
|
+
await runParallelWithOrderedErrors(validations);
|
|
71
|
+
// Clean up cache after validation
|
|
72
|
+
modelCache.clear();
|
|
56
73
|
// Strip lookup from params, it's only used internally
|
|
57
74
|
if (params.lookup) {
|
|
58
75
|
throw new errors.ValidationError("Invalid params: 'lookup'");
|