@strapi/core 5.47.1 → 5.48.1

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.
Files changed (44) hide show
  1. package/dist/configuration/index.d.ts +24 -0
  2. package/dist/configuration/index.d.ts.map +1 -1
  3. package/dist/configuration/index.js +47 -22
  4. package/dist/configuration/index.js.map +1 -1
  5. package/dist/configuration/index.mjs +47 -22
  6. package/dist/configuration/index.mjs.map +1 -1
  7. package/dist/package.json.js +18 -16
  8. package/dist/package.json.js.map +1 -1
  9. package/dist/package.json.mjs +18 -16
  10. package/dist/package.json.mjs.map +1 -1
  11. package/dist/services/document-service/draft-and-publish.d.ts +4 -4
  12. package/dist/services/document-service/internationalization.d.ts +4 -4
  13. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  14. package/dist/services/document-service/utils/unidirectional-relations.js +17 -4
  15. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
  16. package/dist/services/document-service/utils/unidirectional-relations.mjs +17 -4
  17. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
  18. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  19. package/dist/services/entity-validator/validators.js +51 -2
  20. package/dist/services/entity-validator/validators.js.map +1 -1
  21. package/dist/services/entity-validator/validators.mjs +51 -2
  22. package/dist/services/entity-validator/validators.mjs.map +1 -1
  23. package/dist/services/server/openapi.d.ts +3 -0
  24. package/dist/services/server/openapi.d.ts.map +1 -0
  25. package/dist/services/server/openapi.js +209 -0
  26. package/dist/services/server/openapi.js.map +1 -0
  27. package/dist/services/server/openapi.mjs +188 -0
  28. package/dist/services/server/openapi.mjs.map +1 -0
  29. package/dist/services/server/register-routes.d.ts.map +1 -1
  30. package/dist/services/server/register-routes.js +2 -0
  31. package/dist/services/server/register-routes.js.map +1 -1
  32. package/dist/services/server/register-routes.mjs +2 -0
  33. package/dist/services/server/register-routes.mjs.map +1 -1
  34. package/dist/utils/startup-logger.d.ts.map +1 -1
  35. package/dist/utils/startup-logger.js +18 -6
  36. package/dist/utils/startup-logger.js.map +1 -1
  37. package/dist/utils/startup-logger.mjs +18 -6
  38. package/dist/utils/startup-logger.mjs.map +1 -1
  39. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  40. package/dist/utils/transform-content-types-to-models.js +5 -1
  41. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  42. package/dist/utils/transform-content-types-to-models.mjs +5 -1
  43. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  44. package/package.json +18 -16
@@ -38,6 +38,30 @@ export declare const loadConfiguration: (opts: StrapiOptions) => {
38
38
  enabled: true;
39
39
  };
40
40
  };
41
+ openapi: {
42
+ 'content-api': {
43
+ access: "disabled";
44
+ route: {
45
+ path: string;
46
+ };
47
+ cache: {
48
+ enabled: true;
49
+ maxAgeMs: number;
50
+ filePath: string;
51
+ };
52
+ };
53
+ admin: {
54
+ access: "disabled";
55
+ route: {
56
+ path: string;
57
+ };
58
+ cache: {
59
+ enabled: true;
60
+ maxAgeMs: number;
61
+ filePath: string;
62
+ };
63
+ };
64
+ };
41
65
  };
42
66
  admin: {};
43
67
  api: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/configuration/index.ts"],"names":[],"mappings":"AAGA,OAAO,CAAC,MAAM,QAAQ,CAAC;AAUvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAqC/C,eAAO,MAAM,iBAAiB,SAAU,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wEAkDpD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/configuration/index.ts"],"names":[],"mappings":"AAGA,OAAO,CAAC,MAAM,QAAQ,CAAC;AAUvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AA+D/C,eAAO,MAAM,iBAAiB,SAAU,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wEAkDpD,CAAC"}
@@ -15,34 +15,59 @@ dotenv.config({
15
15
  path: process.env.ENV_PATH
16
16
  });
17
17
  process.env.NODE_ENV = process.env.NODE_ENV || 'development';
18
- const defaultConfig = {
19
- server: {
20
- host: process.env.HOST || os.hostname() || 'localhost',
21
- port: Number(process.env.PORT) || 1337,
22
- proxy: false,
23
- cron: {
24
- enabled: false
25
- },
26
- admin: {
27
- autoOpen: false
28
- },
29
- dirs: {
30
- public: './public'
18
+ const defaultServerConfig = {
19
+ host: process.env.HOST || os.hostname() || 'localhost',
20
+ port: Number(process.env.PORT) || 1337,
21
+ proxy: false,
22
+ cron: {
23
+ enabled: false
24
+ },
25
+ admin: {
26
+ autoOpen: false
27
+ },
28
+ dirs: {
29
+ public: './public'
30
+ },
31
+ transfer: {
32
+ remote: {
33
+ enabled: true
34
+ }
35
+ },
36
+ logger: {
37
+ updates: {
38
+ enabled: true
31
39
  },
32
- transfer: {
33
- remote: {
34
- enabled: true
40
+ startup: {
41
+ enabled: true
42
+ }
43
+ },
44
+ openapi: {
45
+ 'content-api': {
46
+ access: 'disabled',
47
+ route: {
48
+ path: '/openapi.json'
49
+ },
50
+ cache: {
51
+ enabled: true,
52
+ maxAgeMs: 60000,
53
+ filePath: '.strapi/openapi/content-api.json'
35
54
  }
36
55
  },
37
- logger: {
38
- updates: {
39
- enabled: true
56
+ admin: {
57
+ access: 'disabled',
58
+ route: {
59
+ path: '/openapi.json'
40
60
  },
41
- startup: {
42
- enabled: true
61
+ cache: {
62
+ enabled: true,
63
+ maxAgeMs: 60000,
64
+ filePath: '.strapi/openapi/admin.json'
43
65
  }
44
66
  }
45
- },
67
+ }
68
+ };
69
+ const defaultConfig = {
70
+ server: defaultServerConfig,
46
71
  admin: {},
47
72
  api: {
48
73
  rest: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/configuration/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport os from 'os';\nimport path from 'path';\nimport _ from 'lodash';\nimport { omit } from 'lodash/fp';\nimport dotenv from 'dotenv';\nimport type { Core } from '@strapi/types';\nimport { strings } from '@strapi/utils';\n\nimport { getConfigUrls, getAbsoluteAdminUrl, getAbsoluteServerUrl } from './urls';\nimport loadConfigDir from './config-loader';\nimport { getDirs } from './get-dirs';\n\nimport type { StrapiOptions } from '../Strapi';\nimport { version as strapiVersion } from '../../package.json';\n\ndotenv.config({ path: process.env.ENV_PATH });\n\nprocess.env.NODE_ENV = process.env.NODE_ENV || 'development';\n\nconst defaultConfig = {\n server: {\n host: process.env.HOST || os.hostname() || 'localhost',\n port: Number(process.env.PORT) || 1337,\n proxy: false,\n cron: { enabled: false },\n admin: { autoOpen: false },\n dirs: { public: './public' },\n transfer: {\n remote: {\n enabled: true,\n },\n },\n logger: {\n updates: {\n enabled: true,\n },\n startup: {\n enabled: true,\n },\n },\n } satisfies Partial<Core.Config.Server>,\n admin: {} satisfies Partial<Core.Config.Admin>,\n api: {\n rest: {\n prefix: '/api',\n },\n } satisfies Partial<Core.Config.Api>,\n};\n\nexport const loadConfiguration = (opts: StrapiOptions) => {\n const { appDir, distDir, autoReload = false, serveAdminPanel = true } = opts;\n\n const pkgJSON = require(path.resolve(appDir, 'package.json'));\n\n const configDir = path.resolve(distDir || process.cwd(), 'config');\n\n const rootConfig = {\n launchedAt: Date.now(),\n autoReload,\n environment: process.env.NODE_ENV,\n uuid: _.get(pkgJSON, 'strapi.uuid'),\n installId: _.get(pkgJSON, 'strapi.installId'),\n packageJsonStrapi: _.omit(_.get(pkgJSON, 'strapi', {}), 'uuid'),\n info: {\n ...pkgJSON,\n strapi: strapiVersion,\n },\n admin: {\n serveAdminPanel,\n },\n };\n\n // See packages/core/core/src/domain/module/index.ts for plugin config loading\n const baseConfig = omit('plugins', loadConfigDir(configDir)); // plugin config will be loaded later\n\n const envDir = path.resolve(configDir, 'env', process.env.NODE_ENV as string);\n const envConfig = loadConfigDir(envDir);\n\n const config = _.merge(rootConfig, defaultConfig, baseConfig, envConfig);\n\n const { serverUrl, adminUrl } = getConfigUrls(config);\n\n const serverAbsoluteUrl = getAbsoluteServerUrl(config);\n const adminAbsoluteUrl = getAbsoluteAdminUrl(config);\n\n const sameOrigin = new URL(adminAbsoluteUrl).origin === new URL(serverAbsoluteUrl).origin;\n\n const adminPath = sameOrigin\n ? adminUrl.replace(strings.getCommonPath(serverUrl, adminUrl), '')\n : new URL(adminUrl).pathname;\n\n _.set(config, 'server.url', serverUrl);\n _.set(config, 'server.absoluteUrl', serverAbsoluteUrl);\n _.set(config, 'admin.url', adminUrl);\n _.set(config, 'admin.path', adminPath);\n _.set(config, 'admin.absoluteUrl', adminAbsoluteUrl);\n _.set(config, 'dirs', getDirs(opts, config));\n\n return config;\n};\n"],"names":["dotenv","config","path","process","env","ENV_PATH","NODE_ENV","defaultConfig","server","host","HOST","os","hostname","port","Number","PORT","proxy","cron","enabled","admin","autoOpen","dirs","public","transfer","remote","logger","updates","startup","api","rest","prefix","loadConfiguration","opts","appDir","distDir","autoReload","serveAdminPanel","pkgJSON","require","resolve","configDir","cwd","rootConfig","launchedAt","Date","now","environment","uuid","_","get","installId","packageJsonStrapi","omit","info","strapi","strapiVersion","baseConfig","loadConfigDir","envDir","envConfig","merge","serverUrl","adminUrl","getConfigUrls","serverAbsoluteUrl","getAbsoluteServerUrl","adminAbsoluteUrl","getAbsoluteAdminUrl","sameOrigin","URL","origin","adminPath","replace","strings","getCommonPath","pathname","set","getDirs"],"mappings":";;;;;;;;;;;;;AAgBAA,MAAAA,CAAOC,MAAM,CAAC;IAAEC,IAAAA,EAAMC,OAAAA,CAAQC,GAAG,CAACC;AAAS,CAAA,CAAA;AAE3CF,OAAAA,CAAQC,GAAG,CAACE,QAAQ,GAAGH,QAAQC,GAAG,CAACE,QAAQ,IAAI,aAAA;AAE/C,MAAMC,aAAAA,GAAgB;IACpBC,MAAAA,EAAQ;AACNC,QAAAA,IAAAA,EAAMN,QAAQC,GAAG,CAACM,IAAI,IAAIC,EAAAA,CAAGC,QAAQ,EAAA,IAAM,WAAA;AAC3CC,QAAAA,IAAAA,EAAMC,MAAAA,CAAOX,OAAAA,CAAQC,GAAG,CAACW,IAAI,CAAA,IAAK,IAAA;QAClCC,KAAAA,EAAO,KAAA;QACPC,IAAAA,EAAM;YAAEC,OAAAA,EAAS;AAAM,SAAA;QACvBC,KAAAA,EAAO;YAAEC,QAAAA,EAAU;AAAM,SAAA;QACzBC,IAAAA,EAAM;YAAEC,MAAAA,EAAQ;AAAW,SAAA;QAC3BC,QAAAA,EAAU;YACRC,MAAAA,EAAQ;gBACNN,OAAAA,EAAS;AACX;AACF,SAAA;QACAO,MAAAA,EAAQ;YACNC,OAAAA,EAAS;gBACPR,OAAAA,EAAS;AACX,aAAA;YACAS,OAAAA,EAAS;gBACPT,OAAAA,EAAS;AACX;AACF;AACF,KAAA;AACAC,IAAAA,KAAAA,EAAO,EAAC;IACRS,GAAAA,EAAK;QACHC,IAAAA,EAAM;YACJC,MAAAA,EAAQ;AACV;AACF;AACF,CAAA;AAEO,MAAMC,oBAAoB,CAACC,IAAAA,GAAAA;IAChC,MAAM,EAAEC,MAAM,EAAEC,OAAO,EAAEC,UAAAA,GAAa,KAAK,EAAEC,eAAAA,GAAkB,IAAI,EAAE,GAAGJ,IAAAA;AAExE,IAAA,MAAMK,OAAAA,GAAUC,OAAAA,CAAQpC,IAAAA,CAAKqC,OAAO,CAACN,MAAAA,EAAQ,cAAA,CAAA,CAAA;AAE7C,IAAA,MAAMO,YAAYtC,IAAAA,CAAKqC,OAAO,CAACL,OAAAA,IAAW/B,OAAAA,CAAQsC,GAAG,EAAA,EAAI,QAAA,CAAA;AAEzD,IAAA,MAAMC,UAAAA,GAAa;AACjBC,QAAAA,UAAAA,EAAYC,KAAKC,GAAG,EAAA;AACpBV,QAAAA,UAAAA;QACAW,WAAAA,EAAa3C,OAAAA,CAAQC,GAAG,CAACE,QAAQ;QACjCyC,IAAAA,EAAMC,CAAAA,CAAEC,GAAG,CAACZ,OAAAA,EAAS,aAAA,CAAA;QACrBa,SAAAA,EAAWF,CAAAA,CAAEC,GAAG,CAACZ,OAAAA,EAAS,kBAAA,CAAA;QAC1Bc,iBAAAA,EAAmBH,CAAAA,CAAEI,IAAI,CAACJ,CAAAA,CAAEC,GAAG,CAACZ,OAAAA,EAAS,QAAA,EAAU,EAAC,CAAA,EAAI,MAAA,CAAA;QACxDgB,IAAAA,EAAM;AACJ,YAAA,GAAGhB,OAAO;YACViB,MAAAA,EAAQC;AACV,SAAA;QACApC,KAAAA,EAAO;AACLiB,YAAAA;AACF;AACF,KAAA;;AAGA,IAAA,MAAMoB,UAAAA,GAAaJ,OAAAA,CAAK,SAAA,EAAWK,YAAAA,CAAcjB;IAEjD,MAAMkB,MAAAA,GAASxD,KAAKqC,OAAO,CAACC,WAAW,KAAA,EAAOrC,OAAAA,CAAQC,GAAG,CAACE,QAAQ,CAAA;AAClE,IAAA,MAAMqD,YAAYF,YAAAA,CAAcC,MAAAA,CAAAA;AAEhC,IAAA,MAAMzD,SAAS+C,CAAAA,CAAEY,KAAK,CAAClB,UAAAA,EAAYnC,eAAeiD,UAAAA,EAAYG,SAAAA,CAAAA;AAE9D,IAAA,MAAM,EAAEE,SAAS,EAAEC,QAAQ,EAAE,GAAGC,kBAAAA,CAAc9D,MAAAA,CAAAA;AAE9C,IAAA,MAAM+D,oBAAoBC,yBAAAA,CAAqBhE,MAAAA,CAAAA;AAC/C,IAAA,MAAMiE,mBAAmBC,wBAAAA,CAAoBlE,MAAAA,CAAAA;IAE7C,MAAMmE,UAAAA,GAAa,IAAIC,GAAAA,CAAIH,gBAAAA,CAAAA,CAAkBI,MAAM,KAAK,IAAID,GAAAA,CAAIL,iBAAAA,CAAAA,CAAmBM,MAAM;AAEzF,IAAA,MAAMC,SAAAA,GAAYH,UAAAA,GACdN,QAAAA,CAASU,OAAO,CAACC,mBAAAA,CAAQC,aAAa,CAACb,SAAAA,EAAWC,QAAAA,CAAAA,EAAW,EAAA,CAAA,GAC7D,IAAIO,GAAAA,CAAIP,UAAUa,QAAQ;IAE9B3B,CAAAA,CAAE4B,GAAG,CAAC3E,MAAAA,EAAQ,YAAA,EAAc4D,SAAAA,CAAAA;IAC5Bb,CAAAA,CAAE4B,GAAG,CAAC3E,MAAAA,EAAQ,oBAAA,EAAsB+D,iBAAAA,CAAAA;IACpChB,CAAAA,CAAE4B,GAAG,CAAC3E,MAAAA,EAAQ,WAAA,EAAa6D,QAAAA,CAAAA;IAC3Bd,CAAAA,CAAE4B,GAAG,CAAC3E,MAAAA,EAAQ,YAAA,EAAcsE,SAAAA,CAAAA;IAC5BvB,CAAAA,CAAE4B,GAAG,CAAC3E,MAAAA,EAAQ,mBAAA,EAAqBiE,gBAAAA,CAAAA;AACnClB,IAAAA,CAAAA,CAAE4B,GAAG,CAAC3E,MAAAA,EAAQ,MAAA,EAAQ4E,gBAAQ7C,IAAAA,EAAM/B,MAAAA,CAAAA,CAAAA;IAEpC,OAAOA,MAAAA;AACT;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/configuration/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport os from 'os';\nimport path from 'path';\nimport _ from 'lodash';\nimport { omit } from 'lodash/fp';\nimport dotenv from 'dotenv';\nimport type { Core } from '@strapi/types';\nimport { strings } from '@strapi/utils';\n\nimport { getConfigUrls, getAbsoluteAdminUrl, getAbsoluteServerUrl } from './urls';\nimport loadConfigDir from './config-loader';\nimport { getDirs } from './get-dirs';\n\nimport type { StrapiOptions } from '../Strapi';\nimport { version as strapiVersion } from '../../package.json';\n\ndotenv.config({ path: process.env.ENV_PATH });\n\nprocess.env.NODE_ENV = process.env.NODE_ENV || 'development';\n\nconst defaultServerConfig = {\n host: process.env.HOST || os.hostname() || 'localhost',\n port: Number(process.env.PORT) || 1337,\n proxy: false,\n cron: { enabled: false },\n admin: { autoOpen: false },\n dirs: { public: './public' },\n transfer: {\n remote: {\n enabled: true,\n },\n },\n logger: {\n updates: {\n enabled: true,\n },\n startup: {\n enabled: true,\n },\n },\n openapi: {\n 'content-api': {\n access: 'disabled',\n route: {\n path: '/openapi.json',\n },\n cache: {\n enabled: true,\n maxAgeMs: 60_000,\n filePath: '.strapi/openapi/content-api.json',\n },\n },\n admin: {\n access: 'disabled',\n route: {\n path: '/openapi.json',\n },\n cache: {\n enabled: true,\n maxAgeMs: 60_000,\n filePath: '.strapi/openapi/admin.json',\n },\n },\n },\n} satisfies Partial<Core.Config.Server>;\n\nconst defaultConfig = {\n server: defaultServerConfig,\n admin: {} satisfies Partial<Core.Config.Admin>,\n api: {\n rest: {\n prefix: '/api',\n },\n } satisfies Partial<Core.Config.Api>,\n};\n\nexport const loadConfiguration = (opts: StrapiOptions) => {\n const { appDir, distDir, autoReload = false, serveAdminPanel = true } = opts;\n\n const pkgJSON = require(path.resolve(appDir, 'package.json'));\n\n const configDir = path.resolve(distDir || process.cwd(), 'config');\n\n const rootConfig = {\n launchedAt: Date.now(),\n autoReload,\n environment: process.env.NODE_ENV,\n uuid: _.get(pkgJSON, 'strapi.uuid'),\n installId: _.get(pkgJSON, 'strapi.installId'),\n packageJsonStrapi: _.omit(_.get(pkgJSON, 'strapi', {}), 'uuid'),\n info: {\n ...pkgJSON,\n strapi: strapiVersion,\n },\n admin: {\n serveAdminPanel,\n },\n };\n\n // See packages/core/core/src/domain/module/index.ts for plugin config loading\n const baseConfig = omit('plugins', loadConfigDir(configDir)); // plugin config will be loaded later\n\n const envDir = path.resolve(configDir, 'env', process.env.NODE_ENV as string);\n const envConfig = loadConfigDir(envDir);\n\n const config = _.merge(rootConfig, defaultConfig, baseConfig, envConfig);\n\n const { serverUrl, adminUrl } = getConfigUrls(config);\n\n const serverAbsoluteUrl = getAbsoluteServerUrl(config);\n const adminAbsoluteUrl = getAbsoluteAdminUrl(config);\n\n const sameOrigin = new URL(adminAbsoluteUrl).origin === new URL(serverAbsoluteUrl).origin;\n\n const adminPath = sameOrigin\n ? adminUrl.replace(strings.getCommonPath(serverUrl, adminUrl), '')\n : new URL(adminUrl).pathname;\n\n _.set(config, 'server.url', serverUrl);\n _.set(config, 'server.absoluteUrl', serverAbsoluteUrl);\n _.set(config, 'admin.url', adminUrl);\n _.set(config, 'admin.path', adminPath);\n _.set(config, 'admin.absoluteUrl', adminAbsoluteUrl);\n _.set(config, 'dirs', getDirs(opts, config));\n\n return config;\n};\n"],"names":["dotenv","config","path","process","env","ENV_PATH","NODE_ENV","defaultServerConfig","host","HOST","os","hostname","port","Number","PORT","proxy","cron","enabled","admin","autoOpen","dirs","public","transfer","remote","logger","updates","startup","openapi","access","route","cache","maxAgeMs","filePath","defaultConfig","server","api","rest","prefix","loadConfiguration","opts","appDir","distDir","autoReload","serveAdminPanel","pkgJSON","require","resolve","configDir","cwd","rootConfig","launchedAt","Date","now","environment","uuid","_","get","installId","packageJsonStrapi","omit","info","strapi","strapiVersion","baseConfig","loadConfigDir","envDir","envConfig","merge","serverUrl","adminUrl","getConfigUrls","serverAbsoluteUrl","getAbsoluteServerUrl","adminAbsoluteUrl","getAbsoluteAdminUrl","sameOrigin","URL","origin","adminPath","replace","strings","getCommonPath","pathname","set","getDirs"],"mappings":"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"}
@@ -13,34 +13,59 @@ dotenv.config({
13
13
  path: process.env.ENV_PATH
14
14
  });
15
15
  process.env.NODE_ENV = process.env.NODE_ENV || 'development';
16
- const defaultConfig = {
17
- server: {
18
- host: process.env.HOST || os.hostname() || 'localhost',
19
- port: Number(process.env.PORT) || 1337,
20
- proxy: false,
21
- cron: {
22
- enabled: false
23
- },
24
- admin: {
25
- autoOpen: false
26
- },
27
- dirs: {
28
- public: './public'
16
+ const defaultServerConfig = {
17
+ host: process.env.HOST || os.hostname() || 'localhost',
18
+ port: Number(process.env.PORT) || 1337,
19
+ proxy: false,
20
+ cron: {
21
+ enabled: false
22
+ },
23
+ admin: {
24
+ autoOpen: false
25
+ },
26
+ dirs: {
27
+ public: './public'
28
+ },
29
+ transfer: {
30
+ remote: {
31
+ enabled: true
32
+ }
33
+ },
34
+ logger: {
35
+ updates: {
36
+ enabled: true
29
37
  },
30
- transfer: {
31
- remote: {
32
- enabled: true
38
+ startup: {
39
+ enabled: true
40
+ }
41
+ },
42
+ openapi: {
43
+ 'content-api': {
44
+ access: 'disabled',
45
+ route: {
46
+ path: '/openapi.json'
47
+ },
48
+ cache: {
49
+ enabled: true,
50
+ maxAgeMs: 60000,
51
+ filePath: '.strapi/openapi/content-api.json'
33
52
  }
34
53
  },
35
- logger: {
36
- updates: {
37
- enabled: true
54
+ admin: {
55
+ access: 'disabled',
56
+ route: {
57
+ path: '/openapi.json'
38
58
  },
39
- startup: {
40
- enabled: true
59
+ cache: {
60
+ enabled: true,
61
+ maxAgeMs: 60000,
62
+ filePath: '.strapi/openapi/admin.json'
41
63
  }
42
64
  }
43
- },
65
+ }
66
+ };
67
+ const defaultConfig = {
68
+ server: defaultServerConfig,
44
69
  admin: {},
45
70
  api: {
46
71
  rest: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/configuration/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport os from 'os';\nimport path from 'path';\nimport _ from 'lodash';\nimport { omit } from 'lodash/fp';\nimport dotenv from 'dotenv';\nimport type { Core } from '@strapi/types';\nimport { strings } from '@strapi/utils';\n\nimport { getConfigUrls, getAbsoluteAdminUrl, getAbsoluteServerUrl } from './urls';\nimport loadConfigDir from './config-loader';\nimport { getDirs } from './get-dirs';\n\nimport type { StrapiOptions } from '../Strapi';\nimport { version as strapiVersion } from '../../package.json';\n\ndotenv.config({ path: process.env.ENV_PATH });\n\nprocess.env.NODE_ENV = process.env.NODE_ENV || 'development';\n\nconst defaultConfig = {\n server: {\n host: process.env.HOST || os.hostname() || 'localhost',\n port: Number(process.env.PORT) || 1337,\n proxy: false,\n cron: { enabled: false },\n admin: { autoOpen: false },\n dirs: { public: './public' },\n transfer: {\n remote: {\n enabled: true,\n },\n },\n logger: {\n updates: {\n enabled: true,\n },\n startup: {\n enabled: true,\n },\n },\n } satisfies Partial<Core.Config.Server>,\n admin: {} satisfies Partial<Core.Config.Admin>,\n api: {\n rest: {\n prefix: '/api',\n },\n } satisfies Partial<Core.Config.Api>,\n};\n\nexport const loadConfiguration = (opts: StrapiOptions) => {\n const { appDir, distDir, autoReload = false, serveAdminPanel = true } = opts;\n\n const pkgJSON = require(path.resolve(appDir, 'package.json'));\n\n const configDir = path.resolve(distDir || process.cwd(), 'config');\n\n const rootConfig = {\n launchedAt: Date.now(),\n autoReload,\n environment: process.env.NODE_ENV,\n uuid: _.get(pkgJSON, 'strapi.uuid'),\n installId: _.get(pkgJSON, 'strapi.installId'),\n packageJsonStrapi: _.omit(_.get(pkgJSON, 'strapi', {}), 'uuid'),\n info: {\n ...pkgJSON,\n strapi: strapiVersion,\n },\n admin: {\n serveAdminPanel,\n },\n };\n\n // See packages/core/core/src/domain/module/index.ts for plugin config loading\n const baseConfig = omit('plugins', loadConfigDir(configDir)); // plugin config will be loaded later\n\n const envDir = path.resolve(configDir, 'env', process.env.NODE_ENV as string);\n const envConfig = loadConfigDir(envDir);\n\n const config = _.merge(rootConfig, defaultConfig, baseConfig, envConfig);\n\n const { serverUrl, adminUrl } = getConfigUrls(config);\n\n const serverAbsoluteUrl = getAbsoluteServerUrl(config);\n const adminAbsoluteUrl = getAbsoluteAdminUrl(config);\n\n const sameOrigin = new URL(adminAbsoluteUrl).origin === new URL(serverAbsoluteUrl).origin;\n\n const adminPath = sameOrigin\n ? adminUrl.replace(strings.getCommonPath(serverUrl, adminUrl), '')\n : new URL(adminUrl).pathname;\n\n _.set(config, 'server.url', serverUrl);\n _.set(config, 'server.absoluteUrl', serverAbsoluteUrl);\n _.set(config, 'admin.url', adminUrl);\n _.set(config, 'admin.path', adminPath);\n _.set(config, 'admin.absoluteUrl', adminAbsoluteUrl);\n _.set(config, 'dirs', getDirs(opts, config));\n\n return config;\n};\n"],"names":["dotenv","config","path","process","env","ENV_PATH","NODE_ENV","defaultConfig","server","host","HOST","os","hostname","port","Number","PORT","proxy","cron","enabled","admin","autoOpen","dirs","public","transfer","remote","logger","updates","startup","api","rest","prefix","loadConfiguration","opts","appDir","distDir","autoReload","serveAdminPanel","pkgJSON","require","resolve","configDir","cwd","rootConfig","launchedAt","Date","now","environment","uuid","_","get","installId","packageJsonStrapi","omit","info","strapi","strapiVersion","baseConfig","loadConfigDir","envDir","envConfig","merge","serverUrl","adminUrl","getConfigUrls","serverAbsoluteUrl","getAbsoluteServerUrl","adminAbsoluteUrl","getAbsoluteAdminUrl","sameOrigin","URL","origin","adminPath","replace","strings","getCommonPath","pathname","set","getDirs"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/configuration/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport os from 'os';\nimport path from 'path';\nimport _ from 'lodash';\nimport { omit } from 'lodash/fp';\nimport dotenv from 'dotenv';\nimport type { Core } from '@strapi/types';\nimport { strings } from '@strapi/utils';\n\nimport { getConfigUrls, getAbsoluteAdminUrl, getAbsoluteServerUrl } from './urls';\nimport loadConfigDir from './config-loader';\nimport { getDirs } from './get-dirs';\n\nimport type { StrapiOptions } from '../Strapi';\nimport { version as strapiVersion } from '../../package.json';\n\ndotenv.config({ path: process.env.ENV_PATH });\n\nprocess.env.NODE_ENV = process.env.NODE_ENV || 'development';\n\nconst defaultServerConfig = {\n host: process.env.HOST || os.hostname() || 'localhost',\n port: Number(process.env.PORT) || 1337,\n proxy: false,\n cron: { enabled: false },\n admin: { autoOpen: false },\n dirs: { public: './public' },\n transfer: {\n remote: {\n enabled: true,\n },\n },\n logger: {\n updates: {\n enabled: true,\n },\n startup: {\n enabled: true,\n },\n },\n openapi: {\n 'content-api': {\n access: 'disabled',\n route: {\n path: '/openapi.json',\n },\n cache: {\n enabled: true,\n maxAgeMs: 60_000,\n filePath: '.strapi/openapi/content-api.json',\n },\n },\n admin: {\n access: 'disabled',\n route: {\n path: '/openapi.json',\n },\n cache: {\n enabled: true,\n maxAgeMs: 60_000,\n filePath: '.strapi/openapi/admin.json',\n },\n },\n },\n} satisfies Partial<Core.Config.Server>;\n\nconst defaultConfig = {\n server: defaultServerConfig,\n admin: {} satisfies Partial<Core.Config.Admin>,\n api: {\n rest: {\n prefix: '/api',\n },\n } satisfies Partial<Core.Config.Api>,\n};\n\nexport const loadConfiguration = (opts: StrapiOptions) => {\n const { appDir, distDir, autoReload = false, serveAdminPanel = true } = opts;\n\n const pkgJSON = require(path.resolve(appDir, 'package.json'));\n\n const configDir = path.resolve(distDir || process.cwd(), 'config');\n\n const rootConfig = {\n launchedAt: Date.now(),\n autoReload,\n environment: process.env.NODE_ENV,\n uuid: _.get(pkgJSON, 'strapi.uuid'),\n installId: _.get(pkgJSON, 'strapi.installId'),\n packageJsonStrapi: _.omit(_.get(pkgJSON, 'strapi', {}), 'uuid'),\n info: {\n ...pkgJSON,\n strapi: strapiVersion,\n },\n admin: {\n serveAdminPanel,\n },\n };\n\n // See packages/core/core/src/domain/module/index.ts for plugin config loading\n const baseConfig = omit('plugins', loadConfigDir(configDir)); // plugin config will be loaded later\n\n const envDir = path.resolve(configDir, 'env', process.env.NODE_ENV as string);\n const envConfig = loadConfigDir(envDir);\n\n const config = _.merge(rootConfig, defaultConfig, baseConfig, envConfig);\n\n const { serverUrl, adminUrl } = getConfigUrls(config);\n\n const serverAbsoluteUrl = getAbsoluteServerUrl(config);\n const adminAbsoluteUrl = getAbsoluteAdminUrl(config);\n\n const sameOrigin = new URL(adminAbsoluteUrl).origin === new URL(serverAbsoluteUrl).origin;\n\n const adminPath = sameOrigin\n ? adminUrl.replace(strings.getCommonPath(serverUrl, adminUrl), '')\n : new URL(adminUrl).pathname;\n\n _.set(config, 'server.url', serverUrl);\n _.set(config, 'server.absoluteUrl', serverAbsoluteUrl);\n _.set(config, 'admin.url', adminUrl);\n _.set(config, 'admin.path', adminPath);\n _.set(config, 'admin.absoluteUrl', adminAbsoluteUrl);\n _.set(config, 'dirs', getDirs(opts, config));\n\n return config;\n};\n"],"names":["dotenv","config","path","process","env","ENV_PATH","NODE_ENV","defaultServerConfig","host","HOST","os","hostname","port","Number","PORT","proxy","cron","enabled","admin","autoOpen","dirs","public","transfer","remote","logger","updates","startup","openapi","access","route","cache","maxAgeMs","filePath","defaultConfig","server","api","rest","prefix","loadConfiguration","opts","appDir","distDir","autoReload","serveAdminPanel","pkgJSON","require","resolve","configDir","cwd","rootConfig","launchedAt","Date","now","environment","uuid","_","get","installId","packageJsonStrapi","omit","info","strapi","strapiVersion","baseConfig","loadConfigDir","envDir","envConfig","merge","serverUrl","adminUrl","getConfigUrls","serverAbsoluteUrl","getAbsoluteServerUrl","adminAbsoluteUrl","getAbsoluteAdminUrl","sameOrigin","URL","origin","adminPath","replace","strings","getCommonPath","pathname","set","getDirs"],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var name = "@strapi/core";
6
- var version = "5.47.1";
6
+ var version = "5.48.1";
7
7
  var description = "Core of Strapi";
8
8
  var homepage = "https://strapi.io";
9
9
  var bugs = {
@@ -64,14 +64,15 @@ var dependencies = {
64
64
  "@koa/router": "12.0.2",
65
65
  "@modelcontextprotocol/sdk": "1.29.0",
66
66
  "@paralleldrive/cuid2": "2.2.2",
67
- "@strapi/admin": "5.47.1",
68
- "@strapi/database": "5.47.1",
69
- "@strapi/generators": "5.47.1",
70
- "@strapi/logger": "5.47.1",
71
- "@strapi/permissions": "5.47.1",
72
- "@strapi/types": "5.47.1",
73
- "@strapi/typescript-utils": "5.47.1",
74
- "@strapi/utils": "5.47.1",
67
+ "@strapi/admin": "5.48.1",
68
+ "@strapi/database": "5.48.1",
69
+ "@strapi/generators": "5.48.1",
70
+ "@strapi/logger": "5.48.1",
71
+ "@strapi/openapi": "5.48.1",
72
+ "@strapi/permissions": "5.48.1",
73
+ "@strapi/types": "5.48.1",
74
+ "@strapi/typescript-utils": "5.48.1",
75
+ "@strapi/utils": "5.48.1",
75
76
  "@vercel/stega": "0.1.2",
76
77
  bcryptjs: "2.4.3",
77
78
  boxen: "5.1.2",
@@ -87,6 +88,7 @@ var dependencies = {
87
88
  "fs-extra": "11.3.4",
88
89
  glob: "13.0.6",
89
90
  "global-agent": "4.1.3",
91
+ helmet: "6.2.0",
90
92
  "http-errors": "2.0.0",
91
93
  inquirer: "9.3.8",
92
94
  "is-docker": "2.2.1",
@@ -97,14 +99,14 @@ var dependencies = {
97
99
  "koa-compose": "4.1.0",
98
100
  "koa-compress": "5.1.1",
99
101
  "koa-favicon": "2.1.0",
100
- "koa-helmet": "7.0.2",
102
+ "koa-helmet": "7.1.0",
101
103
  "koa-ip": "^2.1.3",
102
104
  "koa-session": "7.0.2",
103
105
  "koa-static": "5.0.0",
104
106
  lodash: "4.18.1",
105
107
  "mime-types": "2.1.35",
106
108
  "node-schedule": "2.1.1",
107
- open: "8.4.0",
109
+ open: "8.4.2",
108
110
  ora: "5.4.1",
109
111
  "package-json": "7.0.0",
110
112
  "pkg-up": "3.1.0",
@@ -122,7 +124,7 @@ var devDependencies = {
122
124
  "@swc/core": "1.13.5",
123
125
  "@types/bcryptjs": "2.4.3",
124
126
  "@types/configstore": "5.0.1",
125
- "@types/delegates": "1.0.0",
127
+ "@types/delegates": "1.0.3",
126
128
  "@types/fs-extra": "11.0.4",
127
129
  "@types/global-agent": "3.0.0",
128
130
  "@types/http-errors": "2.0.4",
@@ -137,14 +139,14 @@ var devDependencies = {
137
139
  "@types/node": "24.10.0",
138
140
  "@types/node-schedule": "2.1.7",
139
141
  "@types/statuses": "2.0.1",
140
- "eslint-config-custom": "5.47.1",
142
+ "eslint-config-custom": "5.48.1",
141
143
  supertest: "7.2.2",
142
- tsconfig: "5.47.1",
144
+ tsconfig: "5.48.1",
143
145
  vitest: "catalog:",
144
- "vitest-config": "5.47.1"
146
+ "vitest-config": "5.48.1"
145
147
  };
146
148
  var engines = {
147
- node: ">=20.0.0 <=24.x.x",
149
+ node: ">=20.0.0 <=26.x.x",
148
150
  npm: ">=6.0.0"
149
151
  };
150
152
  var pkg = {
@@ -1 +1 @@
1
- {"version":3,"file":"package.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"package.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  var name = "@strapi/core";
2
- var version = "5.47.1";
2
+ var version = "5.48.1";
3
3
  var description = "Core of Strapi";
4
4
  var homepage = "https://strapi.io";
5
5
  var bugs = {
@@ -60,14 +60,15 @@ var dependencies = {
60
60
  "@koa/router": "12.0.2",
61
61
  "@modelcontextprotocol/sdk": "1.29.0",
62
62
  "@paralleldrive/cuid2": "2.2.2",
63
- "@strapi/admin": "5.47.1",
64
- "@strapi/database": "5.47.1",
65
- "@strapi/generators": "5.47.1",
66
- "@strapi/logger": "5.47.1",
67
- "@strapi/permissions": "5.47.1",
68
- "@strapi/types": "5.47.1",
69
- "@strapi/typescript-utils": "5.47.1",
70
- "@strapi/utils": "5.47.1",
63
+ "@strapi/admin": "5.48.1",
64
+ "@strapi/database": "5.48.1",
65
+ "@strapi/generators": "5.48.1",
66
+ "@strapi/logger": "5.48.1",
67
+ "@strapi/openapi": "5.48.1",
68
+ "@strapi/permissions": "5.48.1",
69
+ "@strapi/types": "5.48.1",
70
+ "@strapi/typescript-utils": "5.48.1",
71
+ "@strapi/utils": "5.48.1",
71
72
  "@vercel/stega": "0.1.2",
72
73
  bcryptjs: "2.4.3",
73
74
  boxen: "5.1.2",
@@ -83,6 +84,7 @@ var dependencies = {
83
84
  "fs-extra": "11.3.4",
84
85
  glob: "13.0.6",
85
86
  "global-agent": "4.1.3",
87
+ helmet: "6.2.0",
86
88
  "http-errors": "2.0.0",
87
89
  inquirer: "9.3.8",
88
90
  "is-docker": "2.2.1",
@@ -93,14 +95,14 @@ var dependencies = {
93
95
  "koa-compose": "4.1.0",
94
96
  "koa-compress": "5.1.1",
95
97
  "koa-favicon": "2.1.0",
96
- "koa-helmet": "7.0.2",
98
+ "koa-helmet": "7.1.0",
97
99
  "koa-ip": "^2.1.3",
98
100
  "koa-session": "7.0.2",
99
101
  "koa-static": "5.0.0",
100
102
  lodash: "4.18.1",
101
103
  "mime-types": "2.1.35",
102
104
  "node-schedule": "2.1.1",
103
- open: "8.4.0",
105
+ open: "8.4.2",
104
106
  ora: "5.4.1",
105
107
  "package-json": "7.0.0",
106
108
  "pkg-up": "3.1.0",
@@ -118,7 +120,7 @@ var devDependencies = {
118
120
  "@swc/core": "1.13.5",
119
121
  "@types/bcryptjs": "2.4.3",
120
122
  "@types/configstore": "5.0.1",
121
- "@types/delegates": "1.0.0",
123
+ "@types/delegates": "1.0.3",
122
124
  "@types/fs-extra": "11.0.4",
123
125
  "@types/global-agent": "3.0.0",
124
126
  "@types/http-errors": "2.0.4",
@@ -133,14 +135,14 @@ var devDependencies = {
133
135
  "@types/node": "24.10.0",
134
136
  "@types/node-schedule": "2.1.7",
135
137
  "@types/statuses": "2.0.1",
136
- "eslint-config-custom": "5.47.1",
138
+ "eslint-config-custom": "5.48.1",
137
139
  supertest: "7.2.2",
138
- tsconfig: "5.47.1",
140
+ tsconfig: "5.48.1",
139
141
  vitest: "catalog:",
140
- "vitest-config": "5.47.1"
142
+ "vitest-config": "5.48.1"
141
143
  };
142
144
  var engines = {
143
- node: ">=20.0.0 <=24.x.x",
145
+ node: ">=20.0.0 <=26.x.x",
144
146
  npm: ">=6.0.0"
145
147
  };
146
148
  var pkg = {
@@ -1 +1 @@
1
- {"version":3,"file":"package.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"package.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,10 +1,10 @@
1
1
  /// <reference types="lodash" />
2
2
  import type { Modules, Struct } from '@strapi/types';
3
- declare const setStatusToDraftCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
3
+ declare const setStatusToDraftCurry: import("lodash").CurriedFunction2<Struct.CollectionTypeSchema | Struct.SingleTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
4
4
  declare const defaultToDraftCurry: import("lodash").CurriedFunction1<Modules.Documents.Params.All, Modules.Documents.Params.All>;
5
- declare const defaultStatusCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
5
+ declare const defaultStatusCurry: import("lodash").CurriedFunction2<Struct.CollectionTypeSchema | Struct.SingleTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
6
6
  declare const filterDataPublishedAtCurry: import("lodash").CurriedFunction1<Modules.Documents.Params.All, Modules.Documents.Params.All>;
7
- declare const statusToLookupCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
8
- declare const statusToDataCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
7
+ declare const statusToLookupCurry: import("lodash").CurriedFunction2<Struct.CollectionTypeSchema | Struct.SingleTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
8
+ declare const statusToDataCurry: import("lodash").CurriedFunction2<Struct.CollectionTypeSchema | Struct.SingleTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
9
9
  export { setStatusToDraftCurry as setStatusToDraft, defaultToDraftCurry as defaultToDraft, defaultStatusCurry as defaultStatus, filterDataPublishedAtCurry as filterDataPublishedAt, statusToLookupCurry as statusToLookup, statusToDataCurry as statusToData, };
10
10
  //# sourceMappingURL=draft-and-publish.d.ts.map
@@ -5,9 +5,9 @@ import type { Struct, Modules } from '@strapi/types';
5
5
  * for a different locale of the same document. Returns a new object with the merged data.
6
6
  */
7
7
  declare const copyNonLocalizedFields: (contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema, documentId: string, dataToCreate: Record<string, any>) => Promise<Record<string, any>>;
8
- declare const defaultLocaleCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Promise<Modules.Documents.Params.All>>;
9
- declare const localeToLookupCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
10
- declare const multiLocaleToLookupCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
11
- declare const localeToDataCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
8
+ declare const defaultLocaleCurry: import("lodash").CurriedFunction2<Struct.CollectionTypeSchema | Struct.SingleTypeSchema, Modules.Documents.Params.All, Promise<Modules.Documents.Params.All>>;
9
+ declare const localeToLookupCurry: import("lodash").CurriedFunction2<Struct.CollectionTypeSchema | Struct.SingleTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
10
+ declare const multiLocaleToLookupCurry: import("lodash").CurriedFunction2<Struct.CollectionTypeSchema | Struct.SingleTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
11
+ declare const localeToDataCurry: import("lodash").CurriedFunction2<Struct.CollectionTypeSchema | Struct.SingleTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
12
12
  export { defaultLocaleCurry as defaultLocale, localeToLookupCurry as localeToLookup, localeToDataCurry as localeToData, multiLocaleToLookupCurry as multiLocaleToLookup, copyNonLocalizedFields, };
13
13
  //# sourceMappingURL=internationalization.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"unidirectional-relations.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/utils/unidirectional-relations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,UAAU,WAAW;IACnB,WAAW,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,WAAW,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChD;AAED,UAAU,cAAc;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAClC;AAED,UAAU,qBAAqB;IAC7B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,CACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,KAAK,EAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,EAC5C,GAAG,EAAE,GAAG,KACL,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAED;;;;GAIG;AACH,QAAA,MAAM,IAAI,QACH,IAAI,WAAW,gCACU,WAAW,YAChC,qBAAqB,KAC7B,QAAQ,cAAc,EAAE,CA4G1B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,QAAA,MAAM,IAAI,eACI;IAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,cACjC;IAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,gBAC/B;IAAE,SAAS,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,GAAG,EAAE,CAAA;CAAE,EAAE,kBAiCrD,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACtB,YAAY,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"unidirectional-relations.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/utils/unidirectional-relations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,UAAU,WAAW;IACnB,WAAW,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,WAAW,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChD;AAED,UAAU,cAAc;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAClC;AAED,UAAU,qBAAqB;IAC7B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,CACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,KAAK,EAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,EAC5C,GAAG,EAAE,GAAG,KACL,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAED;;;;GAIG;AACH,QAAA,MAAM,IAAI,QACH,IAAI,WAAW,gCACU,WAAW,YAChC,qBAAqB,KAC7B,QAAQ,cAAc,EAAE,CA0H1B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,QAAA,MAAM,IAAI,eACI;IAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,cACjC;IAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,gBAC/B;IAAE,SAAS,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,GAAG,EAAE,CAAA;CAAE,EAAE,kBAiCrD,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACtB,YAAY,EAAE,qBAAqB,EAAE,CAAC"}
@@ -20,9 +20,13 @@ var fp = require('lodash/fp');
20
20
  for (const attribute of Object.values(dbModel.attributes)){
21
21
  /**
22
22
  * Only consider unidirectional relations.
23
- * Self-referential relations (model.uid === uid) are handled by selfReferentialRelations;
24
- * processing them here would re-insert stale source FK values pointing to deleted entries.
25
- */ if (attribute.type !== 'relation' || attribute.target !== uid || attribute.inversedBy || attribute.mappedBy || model.uid === uid) {
23
+ * Bidirectional relations (inversedBy/mappedBy) are handled by bidirectionalRelations.
24
+ * Self-referential relations (model.uid === uid) are included here, but rows where
25
+ * the source entry is also being republished in this same operation are excluded
26
+ * those are handled by selfReferentialRelations, which remaps both sides simultaneously.
27
+ * Without this guard, we would insert rows pointing to a source entry that is about
28
+ * to be deleted, creating stale foreign-key values.
29
+ */ if (attribute.type !== 'relation' || attribute.target !== uid || attribute.inversedBy || attribute.mappedBy) {
26
30
  continue;
27
31
  }
28
32
  // TODO: joinColumn relations
@@ -36,7 +40,16 @@ var fp = require('lodash/fp');
36
40
  * Load all relations that need to be updated
37
41
  */ // NOTE: when the model has draft and publish, we can assume relation are only draft to draft & published to published
38
42
  const ids = oldVersions.map((entry)=>entry.id);
39
- const oldVersionsRelations = await strapi.db.getConnection().select('*').from(joinTable.name).whereIn(targetColumnName, ids).transacting(trx);
43
+ let oldVersionsQuery = strapi.db.getConnection().select('*').from(joinTable.name).whereIn(targetColumnName, ids);
44
+ /**
45
+ * For self-referential relations, exclude join rows where the source entry is also
46
+ * being republished. When both sides are in the same publish batch, selfReferentialRelations
47
+ * already handles remapping them. Including them here too would insert a row whose
48
+ * source FK points at an entry that is about to be deleted.
49
+ */ if (model.uid === uid && ids.length > 0) {
50
+ oldVersionsQuery = oldVersionsQuery.whereNotIn(sourceColumnName, ids);
51
+ }
52
+ const oldVersionsRelations = await oldVersionsQuery.transacting(trx);
40
53
  if (oldVersionsRelations.length > 0) {
41
54
  updates.push({
42
55
  joinTable,
@@ -1 +1 @@
1
- {"version":3,"file":"unidirectional-relations.js","sources":["../../../../src/services/document-service/utils/unidirectional-relations.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport { keyBy, omit } from 'lodash/fp';\n\nimport type { Data, UID, Schema } from '@strapi/types';\n\nimport type { JoinTable } from '@strapi/database';\n\ninterface LoadContext {\n oldVersions: { id: Data.ID; locale: string }[];\n newVersions: { id: Data.ID; locale: string }[];\n}\n\ninterface RelationUpdate {\n joinTable: JoinTable;\n relations: Record<string, any>[];\n}\n\ninterface RelationFilterOptions {\n /**\n * Function to determine if a relation should be propagated to new document versions\n * This replaces the hardcoded component-specific logic\n */\n shouldPropagateRelation?: (\n relation: Record<string, any>,\n model: Schema.Component | Schema.ContentType,\n trx: any\n ) => Promise<boolean>;\n}\n\n/**\n * Loads lingering relations that need to be updated when overriding a published or draft entry.\n * This is necessary because the relations are uni-directional and the target entry is not aware of the source entry.\n * This is not the case for bi-directional relations, where the target entry is also linked to the source entry.\n */\nconst load = async (\n uid: UID.ContentType,\n { oldVersions, newVersions }: LoadContext,\n options: RelationFilterOptions = {}\n): Promise<RelationUpdate[]> => {\n const updates: RelationUpdate[] = [];\n\n // Iterate all components and content types to find relations that need to be updated\n await strapi.db.transaction(async ({ trx }) => {\n const contentTypes = Object.values(strapi.contentTypes) as Schema.ContentType[];\n const components = Object.values(strapi.components) as Schema.Component[];\n\n for (const model of [...contentTypes, ...components]) {\n const dbModel = strapi.db.metadata.get(model.uid);\n\n for (const attribute of Object.values(dbModel.attributes) as any) {\n /**\n * Only consider unidirectional relations.\n * Self-referential relations (model.uid === uid) are handled by selfReferentialRelations;\n * processing them here would re-insert stale source FK values pointing to deleted entries.\n */\n if (\n attribute.type !== 'relation' ||\n attribute.target !== uid ||\n attribute.inversedBy ||\n attribute.mappedBy ||\n model.uid === uid\n ) {\n continue;\n }\n\n // TODO: joinColumn relations\n const joinTable = attribute.joinTable;\n if (!joinTable) {\n continue;\n }\n\n const { name: sourceColumnName } = joinTable.joinColumn;\n const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n /**\n * Load all relations that need to be updated\n */\n // NOTE: when the model has draft and publish, we can assume relation are only draft to draft & published to published\n const ids = oldVersions.map((entry) => entry.id);\n\n const oldVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (oldVersionsRelations.length > 0) {\n updates.push({ joinTable, relations: oldVersionsRelations });\n }\n\n /**\n * if publishing\n * if published version exists\n * updated published versions links\n * else\n * create link to newly published version\n *\n * if discarding\n * if published version link exists & not draft version link\n * create link to new draft version\n */\n if (!model.options?.draftAndPublish) {\n const ids = newVersions.map((entry) => entry.id);\n\n // This is the step were we query the join table based on the id of the document\n const newVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n let versionRelations = newVersionsRelations;\n if (options.shouldPropagateRelation) {\n const relationsToPropagate = [];\n for (const relation of newVersionsRelations) {\n if (await options.shouldPropagateRelation(relation, model, trx)) {\n relationsToPropagate.push(relation);\n }\n }\n versionRelations = relationsToPropagate;\n }\n\n if (versionRelations.length > 0) {\n // when publishing a draft that doesn't have a published version yet,\n // copy the links to the draft over to the published version\n // when discarding a published version, if no drafts exists\n const discardToAdd = versionRelations\n .filter((relation) => {\n const matchingOldVersion = oldVersionsRelations.find((oldRelation) => {\n return oldRelation[sourceColumnName] === relation[sourceColumnName];\n });\n\n return !matchingOldVersion;\n })\n .map(omit(strapi.db.metadata.identifiers.ID_COLUMN));\n\n updates.push({ joinTable, relations: discardToAdd });\n }\n }\n }\n }\n });\n\n return updates;\n};\n\n/**\n * Updates uni directional relations to target the right entries when overriding published or draft entries.\n *\n * This function:\n * 1. Creates new relations pointing to the new entry versions\n * 2. Precisely deletes only the old relations being replaced to prevent orphaned links\n *\n * @param oldEntries The old entries that are being overridden\n * @param newEntries The new entries that are overriding the old ones\n * @param oldRelations The relations that were previously loaded with `load` @see load\n */\nconst sync = async (\n oldEntries: { id: Data.ID; locale: string }[],\n newEntries: { id: Data.ID; locale: string }[],\n oldRelations: { joinTable: any; relations: any[] }[]\n) => {\n /**\n * Create a map of old entry ids to new entry ids\n *\n * Will be used to update the relation target ids\n */\n const newEntryByLocale = keyBy('locale', newEntries);\n const oldEntriesMap = oldEntries.reduce(\n (acc, entry) => {\n const newEntry = newEntryByLocale[entry.locale];\n if (!newEntry) return acc;\n acc[String(entry.id)] = newEntry.id;\n return acc;\n },\n {} as Record<string, Data.ID>\n );\n\n await strapi.db.transaction(async ({ trx }) => {\n // Iterate old relations that are deleted and insert the new ones\n for (const { joinTable, relations } of oldRelations) {\n // Update old ids with the new ones\n const column = joinTable.inverseJoinColumn.name;\n\n const newRelations = relations.map((relation) => {\n const newId = oldEntriesMap[relation[column]];\n return { ...relation, [column]: newId };\n });\n\n const batchSize = strapi.db.dialect.getBatchInsertSize();\n await trx.batchInsert(joinTable.name, newRelations, batchSize);\n }\n });\n};\n\nexport { load, sync };\nexport type { RelationFilterOptions };\n"],"names":["load","uid","oldVersions","newVersions","options","updates","strapi","db","transaction","trx","contentTypes","Object","values","components","model","dbModel","metadata","get","attribute","attributes","type","target","inversedBy","mappedBy","joinTable","name","sourceColumnName","joinColumn","targetColumnName","inverseJoinColumn","ids","map","entry","id","oldVersionsRelations","getConnection","select","from","whereIn","transacting","length","push","relations","draftAndPublish","newVersionsRelations","versionRelations","shouldPropagateRelation","relationsToPropagate","relation","discardToAdd","filter","matchingOldVersion","find","oldRelation","omit","identifiers","ID_COLUMN","sync","oldEntries","newEntries","oldRelations","newEntryByLocale","keyBy","oldEntriesMap","reduce","acc","newEntry","locale","String","column","newRelations","newId","batchSize","dialect","getBatchInsertSize","batchInsert"],"mappings":"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"}
1
+ {"version":3,"file":"unidirectional-relations.js","sources":["../../../../src/services/document-service/utils/unidirectional-relations.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport { keyBy, omit } from 'lodash/fp';\n\nimport type { Data, UID, Schema } from '@strapi/types';\n\nimport type { JoinTable } from '@strapi/database';\n\ninterface LoadContext {\n oldVersions: { id: Data.ID; locale: string }[];\n newVersions: { id: Data.ID; locale: string }[];\n}\n\ninterface RelationUpdate {\n joinTable: JoinTable;\n relations: Record<string, any>[];\n}\n\ninterface RelationFilterOptions {\n /**\n * Function to determine if a relation should be propagated to new document versions\n * This replaces the hardcoded component-specific logic\n */\n shouldPropagateRelation?: (\n relation: Record<string, any>,\n model: Schema.Component | Schema.ContentType,\n trx: any\n ) => Promise<boolean>;\n}\n\n/**\n * Loads lingering relations that need to be updated when overriding a published or draft entry.\n * This is necessary because the relations are uni-directional and the target entry is not aware of the source entry.\n * This is not the case for bi-directional relations, where the target entry is also linked to the source entry.\n */\nconst load = async (\n uid: UID.ContentType,\n { oldVersions, newVersions }: LoadContext,\n options: RelationFilterOptions = {}\n): Promise<RelationUpdate[]> => {\n const updates: RelationUpdate[] = [];\n\n // Iterate all components and content types to find relations that need to be updated\n await strapi.db.transaction(async ({ trx }) => {\n const contentTypes = Object.values(strapi.contentTypes) as Schema.ContentType[];\n const components = Object.values(strapi.components) as Schema.Component[];\n\n for (const model of [...contentTypes, ...components]) {\n const dbModel = strapi.db.metadata.get(model.uid);\n\n for (const attribute of Object.values(dbModel.attributes) as any) {\n /**\n * Only consider unidirectional relations.\n * Bidirectional relations (inversedBy/mappedBy) are handled by bidirectionalRelations.\n * Self-referential relations (model.uid === uid) are included here, but rows where\n * the source entry is also being republished in this same operation are excluded —\n * those are handled by selfReferentialRelations, which remaps both sides simultaneously.\n * Without this guard, we would insert rows pointing to a source entry that is about\n * to be deleted, creating stale foreign-key values.\n */\n if (\n attribute.type !== 'relation' ||\n attribute.target !== uid ||\n attribute.inversedBy ||\n attribute.mappedBy\n ) {\n continue;\n }\n\n // TODO: joinColumn relations\n const joinTable = attribute.joinTable;\n if (!joinTable) {\n continue;\n }\n\n const { name: sourceColumnName } = joinTable.joinColumn;\n const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n /**\n * Load all relations that need to be updated\n */\n // NOTE: when the model has draft and publish, we can assume relation are only draft to draft & published to published\n const ids = oldVersions.map((entry) => entry.id);\n\n let oldVersionsQuery = strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids);\n\n /**\n * For self-referential relations, exclude join rows where the source entry is also\n * being republished. When both sides are in the same publish batch, selfReferentialRelations\n * already handles remapping them. Including them here too would insert a row whose\n * source FK points at an entry that is about to be deleted.\n */\n if (model.uid === uid && ids.length > 0) {\n oldVersionsQuery = oldVersionsQuery.whereNotIn(sourceColumnName, ids);\n }\n\n const oldVersionsRelations = await oldVersionsQuery.transacting(trx);\n\n if (oldVersionsRelations.length > 0) {\n updates.push({ joinTable, relations: oldVersionsRelations });\n }\n\n /**\n * if publishing\n * if published version exists\n * updated published versions links\n * else\n * create link to newly published version\n *\n * if discarding\n * if published version link exists & not draft version link\n * create link to new draft version\n */\n if (!model.options?.draftAndPublish) {\n const ids = newVersions.map((entry) => entry.id);\n\n // This is the step were we query the join table based on the id of the document\n const newVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n let versionRelations = newVersionsRelations;\n if (options.shouldPropagateRelation) {\n const relationsToPropagate = [];\n for (const relation of newVersionsRelations) {\n if (await options.shouldPropagateRelation(relation, model, trx)) {\n relationsToPropagate.push(relation);\n }\n }\n versionRelations = relationsToPropagate;\n }\n\n if (versionRelations.length > 0) {\n // when publishing a draft that doesn't have a published version yet,\n // copy the links to the draft over to the published version\n // when discarding a published version, if no drafts exists\n const discardToAdd = versionRelations\n .filter((relation) => {\n const matchingOldVersion = oldVersionsRelations.find((oldRelation) => {\n return oldRelation[sourceColumnName] === relation[sourceColumnName];\n });\n\n return !matchingOldVersion;\n })\n .map(omit(strapi.db.metadata.identifiers.ID_COLUMN));\n\n updates.push({ joinTable, relations: discardToAdd });\n }\n }\n }\n }\n });\n\n return updates;\n};\n\n/**\n * Updates uni directional relations to target the right entries when overriding published or draft entries.\n *\n * This function:\n * 1. Creates new relations pointing to the new entry versions\n * 2. Precisely deletes only the old relations being replaced to prevent orphaned links\n *\n * @param oldEntries The old entries that are being overridden\n * @param newEntries The new entries that are overriding the old ones\n * @param oldRelations The relations that were previously loaded with `load` @see load\n */\nconst sync = async (\n oldEntries: { id: Data.ID; locale: string }[],\n newEntries: { id: Data.ID; locale: string }[],\n oldRelations: { joinTable: any; relations: any[] }[]\n) => {\n /**\n * Create a map of old entry ids to new entry ids\n *\n * Will be used to update the relation target ids\n */\n const newEntryByLocale = keyBy('locale', newEntries);\n const oldEntriesMap = oldEntries.reduce(\n (acc, entry) => {\n const newEntry = newEntryByLocale[entry.locale];\n if (!newEntry) return acc;\n acc[String(entry.id)] = newEntry.id;\n return acc;\n },\n {} as Record<string, Data.ID>\n );\n\n await strapi.db.transaction(async ({ trx }) => {\n // Iterate old relations that are deleted and insert the new ones\n for (const { joinTable, relations } of oldRelations) {\n // Update old ids with the new ones\n const column = joinTable.inverseJoinColumn.name;\n\n const newRelations = relations.map((relation) => {\n const newId = oldEntriesMap[relation[column]];\n return { ...relation, [column]: newId };\n });\n\n const batchSize = strapi.db.dialect.getBatchInsertSize();\n await trx.batchInsert(joinTable.name, newRelations, batchSize);\n }\n });\n};\n\nexport { load, sync };\nexport type { RelationFilterOptions };\n"],"names":["load","uid","oldVersions","newVersions","options","updates","strapi","db","transaction","trx","contentTypes","Object","values","components","model","dbModel","metadata","get","attribute","attributes","type","target","inversedBy","mappedBy","joinTable","name","sourceColumnName","joinColumn","targetColumnName","inverseJoinColumn","ids","map","entry","id","oldVersionsQuery","getConnection","select","from","whereIn","length","whereNotIn","oldVersionsRelations","transacting","push","relations","draftAndPublish","newVersionsRelations","versionRelations","shouldPropagateRelation","relationsToPropagate","relation","discardToAdd","filter","matchingOldVersion","find","oldRelation","omit","identifiers","ID_COLUMN","sync","oldEntries","newEntries","oldRelations","newEntryByLocale","keyBy","oldEntriesMap","reduce","acc","newEntry","locale","String","column","newRelations","newId","batchSize","dialect","getBatchInsertSize","batchInsert"],"mappings":"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"}