@strapi/core 0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee → 0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607

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 (88) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +2 -0
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +2 -0
  5. package/dist/Strapi.mjs.map +1 -1
  6. package/dist/configuration/index.d.ts +1 -0
  7. package/dist/configuration/index.d.ts.map +1 -1
  8. package/dist/configuration/index.js +1 -0
  9. package/dist/configuration/index.js.map +1 -1
  10. package/dist/configuration/index.mjs +1 -0
  11. package/dist/configuration/index.mjs.map +1 -1
  12. package/dist/configuration/urls.d.ts.map +1 -1
  13. package/dist/configuration/urls.js +13 -4
  14. package/dist/configuration/urls.js.map +1 -1
  15. package/dist/configuration/urls.mjs +13 -4
  16. package/dist/configuration/urls.mjs.map +1 -1
  17. package/dist/ee/index.d.ts +6 -0
  18. package/dist/ee/index.d.ts.map +1 -1
  19. package/dist/ee/index.js +29 -3
  20. package/dist/ee/index.js.map +1 -1
  21. package/dist/ee/index.mjs +30 -4
  22. package/dist/ee/index.mjs.map +1 -1
  23. package/dist/ee/license.d.ts +3 -1
  24. package/dist/ee/license.d.ts.map +1 -1
  25. package/dist/ee/license.js +8 -2
  26. package/dist/ee/license.js.map +1 -1
  27. package/dist/ee/license.mjs +9 -4
  28. package/dist/ee/license.mjs.map +1 -1
  29. package/dist/index.js +1 -1
  30. package/dist/index.mjs +1 -1
  31. package/dist/package.json.js +15 -13
  32. package/dist/package.json.js.map +1 -1
  33. package/dist/package.json.mjs +15 -13
  34. package/dist/package.json.mjs.map +1 -1
  35. package/dist/services/core-store.d.ts +2 -2
  36. package/dist/services/core-store.d.ts.map +1 -1
  37. package/dist/services/core-store.js.map +1 -1
  38. package/dist/services/core-store.mjs.map +1 -1
  39. package/dist/services/document-service/entries.d.ts.map +1 -1
  40. package/dist/services/document-service/entries.js +42 -0
  41. package/dist/services/document-service/entries.js.map +1 -1
  42. package/dist/services/document-service/entries.mjs +43 -1
  43. package/dist/services/document-service/entries.mjs.map +1 -1
  44. package/dist/services/document-service/internationalization.d.ts +6 -1
  45. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  46. package/dist/services/document-service/internationalization.js +32 -0
  47. package/dist/services/document-service/internationalization.js.map +1 -1
  48. package/dist/services/document-service/internationalization.mjs +32 -1
  49. package/dist/services/document-service/internationalization.mjs.map +1 -1
  50. package/dist/services/document-service/repository.d.ts.map +1 -1
  51. package/dist/services/document-service/repository.js +5 -4
  52. package/dist/services/document-service/repository.js.map +1 -1
  53. package/dist/services/document-service/repository.mjs +6 -5
  54. package/dist/services/document-service/repository.mjs.map +1 -1
  55. package/dist/services/entity-validator/index.d.ts.map +1 -1
  56. package/dist/services/entity-validator/index.js +9 -0
  57. package/dist/services/entity-validator/index.js.map +1 -1
  58. package/dist/services/entity-validator/index.mjs +9 -0
  59. package/dist/services/entity-validator/index.mjs.map +1 -1
  60. package/dist/services/entity-validator/validators.d.ts +1 -0
  61. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  62. package/dist/services/entity-validator/validators.js +3 -0
  63. package/dist/services/entity-validator/validators.js.map +1 -1
  64. package/dist/services/entity-validator/validators.mjs +3 -0
  65. package/dist/services/entity-validator/validators.mjs.map +1 -1
  66. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  67. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  68. package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
  69. package/dist/services/metrics/sender.d.ts.map +1 -1
  70. package/dist/services/metrics/sender.js +3 -3
  71. package/dist/services/metrics/sender.js.map +1 -1
  72. package/dist/services/metrics/sender.mjs +4 -4
  73. package/dist/services/metrics/sender.mjs.map +1 -1
  74. package/dist/services/utils/conditional-fields.d.ts +3 -0
  75. package/dist/services/utils/conditional-fields.d.ts.map +1 -0
  76. package/dist/services/utils/conditional-fields.js +22 -0
  77. package/dist/services/utils/conditional-fields.js.map +1 -0
  78. package/dist/services/utils/conditional-fields.mjs +20 -0
  79. package/dist/services/utils/conditional-fields.mjs.map +1 -0
  80. package/dist/utils/fetch.d.ts +5 -1
  81. package/dist/utils/fetch.d.ts.map +1 -1
  82. package/dist/utils/fetch.js +8 -4
  83. package/dist/utils/fetch.js.map +1 -1
  84. package/dist/utils/fetch.mjs +8 -4
  85. package/dist/utils/fetch.mjs.map +1 -1
  86. package/dist/utils/transform-content-types-to-models.d.ts +197 -0
  87. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  88. package/package.json +15 -13
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var name = "@strapi/core";
6
- var version = "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee";
6
+ var version = "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607";
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": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
63
- "@strapi/database": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
64
- "@strapi/generators": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
65
- "@strapi/logger": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
66
- "@strapi/permissions": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
67
- "@strapi/types": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
68
- "@strapi/typescript-utils": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
69
- "@strapi/utils": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
62
+ "@strapi/admin": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
63
+ "@strapi/database": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
64
+ "@strapi/generators": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
65
+ "@strapi/logger": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
66
+ "@strapi/permissions": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
67
+ "@strapi/types": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
68
+ "@strapi/typescript-utils": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
69
+ "@strapi/utils": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
70
70
  bcryptjs: "2.4.3",
71
71
  boxen: "5.1.2",
72
72
  chalk: "4.1.2",
@@ -85,7 +85,8 @@ var dependencies = {
85
85
  "http-errors": "2.0.0",
86
86
  inquirer: "8.2.5",
87
87
  "is-docker": "2.2.1",
88
- koa: "2.15.4",
88
+ "json-logic-js": "2.0.5",
89
+ koa: "2.16.1",
89
90
  "koa-body": "6.0.1",
90
91
  "koa-compose": "4.1.0",
91
92
  "koa-compress": "5.1.1",
@@ -106,7 +107,7 @@ var dependencies = {
106
107
  semver: "7.5.4",
107
108
  statuses: "2.0.1",
108
109
  typescript: "5.4.4",
109
- undici: "6.21.1",
110
+ undici: "6.21.2",
110
111
  yup: "0.32.9"
111
112
  };
112
113
  var devDependencies = {
@@ -119,6 +120,7 @@ var devDependencies = {
119
120
  "@types/global-agent": "2.1.3",
120
121
  "@types/http-errors": "2.0.4",
121
122
  "@types/jest": "29.5.2",
123
+ "@types/json-logic-js": "2.0.8",
122
124
  "@types/koa": "2.13.4",
123
125
  "@types/koa-compress": "4.0.3",
124
126
  "@types/koa-session": "6.4.1",
@@ -129,9 +131,9 @@ var devDependencies = {
129
131
  "@types/node": "18.19.24",
130
132
  "@types/node-schedule": "2.1.7",
131
133
  "@types/statuses": "2.0.1",
132
- "eslint-config-custom": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
134
+ "eslint-config-custom": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
133
135
  supertest: "6.3.3",
134
- tsconfig: "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee"
136
+ tsconfig: "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607"
135
137
  };
136
138
  var engines = {
137
139
  node: ">=18.0.0 <=22.x.x",
@@ -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 = "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee";
2
+ var version = "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607";
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": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
59
- "@strapi/database": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
60
- "@strapi/generators": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
61
- "@strapi/logger": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
62
- "@strapi/permissions": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
63
- "@strapi/types": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
64
- "@strapi/typescript-utils": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
65
- "@strapi/utils": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
58
+ "@strapi/admin": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
59
+ "@strapi/database": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
60
+ "@strapi/generators": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
61
+ "@strapi/logger": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
62
+ "@strapi/permissions": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
63
+ "@strapi/types": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
64
+ "@strapi/typescript-utils": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
65
+ "@strapi/utils": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
66
66
  bcryptjs: "2.4.3",
67
67
  boxen: "5.1.2",
68
68
  chalk: "4.1.2",
@@ -81,7 +81,8 @@ var dependencies = {
81
81
  "http-errors": "2.0.0",
82
82
  inquirer: "8.2.5",
83
83
  "is-docker": "2.2.1",
84
- koa: "2.15.4",
84
+ "json-logic-js": "2.0.5",
85
+ koa: "2.16.1",
85
86
  "koa-body": "6.0.1",
86
87
  "koa-compose": "4.1.0",
87
88
  "koa-compress": "5.1.1",
@@ -102,7 +103,7 @@ var dependencies = {
102
103
  semver: "7.5.4",
103
104
  statuses: "2.0.1",
104
105
  typescript: "5.4.4",
105
- undici: "6.21.1",
106
+ undici: "6.21.2",
106
107
  yup: "0.32.9"
107
108
  };
108
109
  var devDependencies = {
@@ -115,6 +116,7 @@ var devDependencies = {
115
116
  "@types/global-agent": "2.1.3",
116
117
  "@types/http-errors": "2.0.4",
117
118
  "@types/jest": "29.5.2",
119
+ "@types/json-logic-js": "2.0.8",
118
120
  "@types/koa": "2.13.4",
119
121
  "@types/koa-compress": "4.0.3",
120
122
  "@types/koa-session": "6.4.1",
@@ -125,9 +127,9 @@ var devDependencies = {
125
127
  "@types/node": "18.19.24",
126
128
  "@types/node-schedule": "2.1.7",
127
129
  "@types/statuses": "2.0.1",
128
- "eslint-config-custom": "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee",
130
+ "eslint-config-custom": "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607",
129
131
  supertest: "6.3.3",
130
- tsconfig: "0.0.0-experimental.b2710a38fa715c2420a41122dc06ffd65f2514ee"
132
+ tsconfig: "0.0.0-experimental.b64b317678ef49ec595d4adb8eab18393c8bc607"
131
133
  };
132
134
  var engines = {
133
135
  node: ">=18.0.0 <=22.x.x",
@@ -1 +1 @@
1
- {"version":3,"file":"package.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"package.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -18,11 +18,11 @@ type GetParams = {
18
18
  type Params = SetParams & GetParams;
19
19
  interface CoreStore {
20
20
  (defaultParams: Partial<Params>): {
21
- get(params: Partial<GetParams>): Promise<unknown>;
21
+ get<T = unknown>(params: Partial<GetParams>): Promise<T>;
22
22
  set(params: Partial<SetParams>): Promise<void>;
23
23
  delete(params: Partial<GetParams>): Promise<void>;
24
24
  };
25
- get(params: GetParams): Promise<unknown>;
25
+ get<T = unknown>(params: GetParams): Promise<T>;
26
26
  set(params: SetParams): Promise<void>;
27
27
  delete(params: GetParams): Promise<void>;
28
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"core-store.d.ts","sourceRoot":"","sources":["../../src/services/core-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAExD,QAAA,MAAM,cAAc,EAAE,KAwBrB,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpC,UAAU,SAAS;IACjB,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;QAChC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAClD,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACnD,CAAC;IACF,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,QAAA,MAAM,eAAe,WAAY;IAAE,EAAE,EAAE,QAAQ,CAAA;CAAE,cA+GhD,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"core-store.d.ts","sourceRoot":"","sources":["../../src/services/core-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAExD,QAAA,MAAM,cAAc,EAAE,KAwBrB,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpC,UAAU,SAAS;IACjB,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;QAChC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACzD,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACnD,CAAC;IACF,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAChD,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,QAAA,MAAM,eAAe,WAAY;IAAE,EAAE,EAAE,QAAQ,CAAA;CAAE,cA+GhD,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"core-store.js","sources":["../../src/services/core-store.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport type { Database, Model } from '@strapi/database';\n\nconst coreStoreModel: Model = {\n uid: 'strapi::core-store',\n singularName: 'strapi_core_store_settings',\n tableName: 'strapi_core_store_settings',\n attributes: {\n id: {\n type: 'increments',\n },\n key: {\n type: 'string',\n },\n value: {\n type: 'text',\n },\n type: {\n type: 'string',\n },\n environment: {\n type: 'string',\n },\n tag: {\n type: 'string',\n },\n },\n};\n\ntype SetParams = {\n key: string;\n value: unknown;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype GetParams = {\n key: string;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype Params = SetParams & GetParams;\n\ninterface CoreStore {\n (defaultParams: Partial<Params>): {\n get(params: Partial<GetParams>): Promise<unknown>;\n set(params: Partial<SetParams>): Promise<void>;\n delete(params: Partial<GetParams>): Promise<void>;\n };\n get(params: GetParams): Promise<unknown>;\n set(params: SetParams): Promise<void>;\n delete(params: GetParams): Promise<void>;\n}\n\nconst createCoreStore = ({ db }: { db: Database }) => {\n const mergeParams = (defaultParams: Partial<Params>, params: Params): Params => {\n return {\n ...defaultParams,\n ...params,\n };\n };\n\n const store: CoreStore = function (defaultParams: Partial<Params>) {\n return {\n get: (params: Params) => store.get(mergeParams(defaultParams, params)),\n set: (params: Params) => store.set(mergeParams(defaultParams, params)),\n delete: (params: Params) => store.delete(mergeParams(defaultParams, params)),\n };\n };\n\n /**\n * Get value from the core store\n */\n store.get = async (params) => {\n const { key, type = 'core', environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (!data) {\n return null;\n }\n\n if (\n data.type === 'object' ||\n data.type === 'array' ||\n data.type === 'boolean' ||\n data.type === 'string'\n ) {\n try {\n return JSON.parse(data.value);\n } catch (err) {\n return new Date(data.value);\n }\n } else if (data.type === 'number') {\n return Number(data.value);\n } else {\n return null;\n }\n };\n\n /**\n * Set value in the core store\n * @param {Object} params\n * @returns {*}\n */\n store.set = async (params) => {\n const { key, value, type, environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (data) {\n return db.query('strapi::core-store').update({\n where: { id: data.id },\n data: {\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n }\n\n return db.query('strapi::core-store').create({\n data: {\n ...where,\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n };\n\n /**\n * Deletes a value from the core store\n * @param {Object} params\n * @returns {*}\n */\n store.delete = async (params) => {\n const { key, environment, type, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n return db.query('strapi::core-store').delete({ where });\n };\n\n return store;\n};\n\nexport { coreStoreModel, createCoreStore };\n"],"names":["coreStoreModel","uid","singularName","tableName","attributes","id","type","key","value","environment","tag","createCoreStore","db","mergeParams","defaultParams","params","store","get","set","delete","name","prefix","where","data","query","findOne","JSON","parse","err","Date","Number","update","stringify","toString","create"],"mappings":";;;;AAGA,MAAMA,cAAwB,GAAA;IAC5BC,GAAK,EAAA,oBAAA;IACLC,YAAc,EAAA,4BAAA;IACdC,SAAW,EAAA,4BAAA;IACXC,UAAY,EAAA;QACVC,EAAI,EAAA;YACFC,IAAM,EAAA;AACR,SAAA;QACAC,GAAK,EAAA;YACHD,IAAM,EAAA;AACR,SAAA;QACAE,KAAO,EAAA;YACLF,IAAM,EAAA;AACR,SAAA;QACAA,IAAM,EAAA;YACJA,IAAM,EAAA;AACR,SAAA;QACAG,WAAa,EAAA;YACXH,IAAM,EAAA;AACR,SAAA;QACAI,GAAK,EAAA;YACHJ,IAAM,EAAA;AACR;AACF;AACF;AAgCA,MAAMK,eAAkB,GAAA,CAAC,EAAEC,EAAE,EAAoB,GAAA;IAC/C,MAAMC,WAAAA,GAAc,CAACC,aAAgCC,EAAAA,MAAAA,GAAAA;QACnD,OAAO;AACL,YAAA,GAAGD,aAAa;AAChB,YAAA,GAAGC;AACL,SAAA;AACF,KAAA;IAEA,MAAMC,KAAAA,GAAmB,SAAUF,aAA8B,EAAA;QAC/D,OAAO;AACLG,YAAAA,GAAAA,EAAK,CAACF,MAAmBC,GAAAA,KAAAA,CAAMC,GAAG,CAACJ,YAAYC,aAAeC,EAAAA,MAAAA,CAAAA,CAAAA;AAC9DG,YAAAA,GAAAA,EAAK,CAACH,MAAmBC,GAAAA,KAAAA,CAAME,GAAG,CAACL,YAAYC,aAAeC,EAAAA,MAAAA,CAAAA,CAAAA;AAC9DI,YAAAA,MAAAA,EAAQ,CAACJ,MAAmBC,GAAAA,KAAAA,CAAMG,MAAM,CAACN,YAAYC,aAAeC,EAAAA,MAAAA,CAAAA;AACtE,SAAA;AACF,KAAA;AAEA;;MAGAC,KAAAA,CAAMC,GAAG,GAAG,OAAOF,MAAAA,GAAAA;AACjB,QAAA,MAAM,EAAER,GAAG,EAAED,IAAAA,GAAO,MAAM,EAAEG,WAAW,EAAEW,IAAI,EAAEV,GAAG,EAAE,GAAGK,MAAAA;AAEvD,QAAA,MAAMM,MAAS,GAAA,CAAC,EAAEf,IAAAA,CAAK,EAAEc,IAAAA,GAAO,CAAC,CAAC,EAAEA,IAAAA,CAAK,CAAC,GAAG,GAAG,CAAC;AAEjD,QAAA,MAAME,KAAQ,GAAA;AACZf,YAAAA,GAAAA,EAAK,CAAC,EAAEc,MAAAA,CAAO,CAAC,EAAEd,IAAI,CAAC;AACvBE,YAAAA,WAAAA,EAAaA,WAAe,IAAA,IAAA;AAC5BC,YAAAA,GAAAA,EAAKA,GAAO,IAAA;AACd,SAAA;AAEA,QAAA,MAAMa,OAAO,MAAMX,EAAAA,CAAGY,KAAK,CAAC,oBAAA,CAAA,CAAsBC,OAAO,CAAC;AAAEH,YAAAA;AAAM,SAAA,CAAA;AAElE,QAAA,IAAI,CAACC,IAAM,EAAA;YACT,OAAO,IAAA;AACT;AAEA,QAAA,IACEA,IAAKjB,CAAAA,IAAI,KAAK,QAAA,IACdiB,KAAKjB,IAAI,KAAK,OACdiB,IAAAA,IAAAA,CAAKjB,IAAI,KAAK,SAAA,IACdiB,IAAKjB,CAAAA,IAAI,KAAK,QACd,EAAA;YACA,IAAI;AACF,gBAAA,OAAOoB,IAAKC,CAAAA,KAAK,CAACJ,IAAAA,CAAKf,KAAK,CAAA;AAC9B,aAAA,CAAE,OAAOoB,GAAK,EAAA;gBACZ,OAAO,IAAIC,IAAKN,CAAAA,IAAAA,CAAKf,KAAK,CAAA;AAC5B;AACF,SAAA,MAAO,IAAIe,IAAAA,CAAKjB,IAAI,KAAK,QAAU,EAAA;YACjC,OAAOwB,MAAAA,CAAOP,KAAKf,KAAK,CAAA;SACnB,MAAA;YACL,OAAO,IAAA;AACT;AACF,KAAA;AAEA;;;;MAKAQ,KAAAA,CAAME,GAAG,GAAG,OAAOH,MAAAA,GAAAA;AACjB,QAAA,MAAM,EAAER,GAAG,EAAEC,KAAK,EAAEF,IAAI,EAAEG,WAAW,EAAEW,IAAI,EAAEV,GAAG,EAAE,GAAGK,MAAAA;AAErD,QAAA,MAAMM,MAAS,GAAA,CAAC,EAAEf,IAAAA,CAAK,EAAEc,IAAAA,GAAO,CAAC,CAAC,EAAEA,IAAAA,CAAK,CAAC,GAAG,GAAG,CAAC;AAEjD,QAAA,MAAME,KAAQ,GAAA;AACZf,YAAAA,GAAAA,EAAK,CAAC,EAAEc,MAAAA,CAAO,CAAC,EAAEd,IAAI,CAAC;AACvBE,YAAAA,WAAAA,EAAaA,WAAe,IAAA,IAAA;AAC5BC,YAAAA,GAAAA,EAAKA,GAAO,IAAA;AACd,SAAA;AAEA,QAAA,MAAMa,OAAO,MAAMX,EAAAA,CAAGY,KAAK,CAAC,oBAAA,CAAA,CAAsBC,OAAO,CAAC;AAAEH,YAAAA;AAAM,SAAA,CAAA;AAElE,QAAA,IAAIC,IAAM,EAAA;AACR,YAAA,OAAOX,EAAGY,CAAAA,KAAK,CAAC,oBAAA,CAAA,CAAsBO,MAAM,CAAC;gBAC3CT,KAAO,EAAA;AAAEjB,oBAAAA,EAAAA,EAAIkB,KAAKlB;AAAG,iBAAA;gBACrBkB,IAAM,EAAA;AACJf,oBAAAA,KAAAA,EAAOkB,IAAKM,CAAAA,SAAS,CAACxB,KAAAA,CAAAA,IAAUyB,WAASzB,CAAAA,KAAAA,CAAAA;AACzCF,oBAAAA,IAAAA,EAAM,OAAOE;AACf;AACF,aAAA,CAAA;AACF;AAEA,QAAA,OAAOI,EAAGY,CAAAA,KAAK,CAAC,oBAAA,CAAA,CAAsBU,MAAM,CAAC;YAC3CX,IAAM,EAAA;AACJ,gBAAA,GAAGD,KAAK;AACRd,gBAAAA,KAAAA,EAAOkB,IAAKM,CAAAA,SAAS,CAACxB,KAAAA,CAAAA,IAAUyB,WAASzB,CAAAA,KAAAA,CAAAA;AACzCF,gBAAAA,IAAAA,EAAM,OAAOE;AACf;AACF,SAAA,CAAA;AACF,KAAA;AAEA;;;;MAKAQ,KAAAA,CAAMG,MAAM,GAAG,OAAOJ,MAAAA,GAAAA;QACpB,MAAM,EAAER,GAAG,EAAEE,WAAW,EAAEH,IAAI,EAAEc,IAAI,EAAEV,GAAG,EAAE,GAAGK,MAAAA;AAE9C,QAAA,MAAMM,MAAS,GAAA,CAAC,EAAEf,IAAAA,CAAK,EAAEc,IAAAA,GAAO,CAAC,CAAC,EAAEA,IAAAA,CAAK,CAAC,GAAG,GAAG,CAAC;AAEjD,QAAA,MAAME,KAAQ,GAAA;AACZf,YAAAA,GAAAA,EAAK,CAAC,EAAEc,MAAAA,CAAO,CAAC,EAAEd,IAAI,CAAC;AACvBE,YAAAA,WAAAA,EAAaA,WAAe,IAAA,IAAA;AAC5BC,YAAAA,GAAAA,EAAKA,GAAO,IAAA;AACd,SAAA;AAEA,QAAA,OAAOE,EAAGY,CAAAA,KAAK,CAAC,oBAAA,CAAA,CAAsBL,MAAM,CAAC;AAAEG,YAAAA;AAAM,SAAA,CAAA;AACvD,KAAA;IAEA,OAAON,KAAAA;AACT;;;;;"}
1
+ {"version":3,"file":"core-store.js","sources":["../../src/services/core-store.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport type { Database, Model } from '@strapi/database';\n\nconst coreStoreModel: Model = {\n uid: 'strapi::core-store',\n singularName: 'strapi_core_store_settings',\n tableName: 'strapi_core_store_settings',\n attributes: {\n id: {\n type: 'increments',\n },\n key: {\n type: 'string',\n },\n value: {\n type: 'text',\n },\n type: {\n type: 'string',\n },\n environment: {\n type: 'string',\n },\n tag: {\n type: 'string',\n },\n },\n};\n\ntype SetParams = {\n key: string;\n value: unknown;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype GetParams = {\n key: string;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype Params = SetParams & GetParams;\n\ninterface CoreStore {\n (defaultParams: Partial<Params>): {\n get<T = unknown>(params: Partial<GetParams>): Promise<T>;\n set(params: Partial<SetParams>): Promise<void>;\n delete(params: Partial<GetParams>): Promise<void>;\n };\n get<T = unknown>(params: GetParams): Promise<T>;\n set(params: SetParams): Promise<void>;\n delete(params: GetParams): Promise<void>;\n}\n\nconst createCoreStore = ({ db }: { db: Database }) => {\n const mergeParams = (defaultParams: Partial<Params>, params: Params): Params => {\n return {\n ...defaultParams,\n ...params,\n };\n };\n\n const store: CoreStore = function (defaultParams: Partial<Params>) {\n return {\n get: (params: Params) => store.get(mergeParams(defaultParams, params)),\n set: (params: Params) => store.set(mergeParams(defaultParams, params)),\n delete: (params: Params) => store.delete(mergeParams(defaultParams, params)),\n };\n };\n\n /**\n * Get value from the core store\n */\n store.get = async (params) => {\n const { key, type = 'core', environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (!data) {\n return null;\n }\n\n if (\n data.type === 'object' ||\n data.type === 'array' ||\n data.type === 'boolean' ||\n data.type === 'string'\n ) {\n try {\n return JSON.parse(data.value);\n } catch (err) {\n return new Date(data.value);\n }\n } else if (data.type === 'number') {\n return Number(data.value);\n } else {\n return null;\n }\n };\n\n /**\n * Set value in the core store\n * @param {Object} params\n * @returns {*}\n */\n store.set = async (params) => {\n const { key, value, type, environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (data) {\n return db.query('strapi::core-store').update({\n where: { id: data.id },\n data: {\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n }\n\n return db.query('strapi::core-store').create({\n data: {\n ...where,\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n };\n\n /**\n * Deletes a value from the core store\n * @param {Object} params\n * @returns {*}\n */\n store.delete = async (params) => {\n const { key, environment, type, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n return db.query('strapi::core-store').delete({ where });\n };\n\n return store;\n};\n\nexport { coreStoreModel, createCoreStore };\n"],"names":["coreStoreModel","uid","singularName","tableName","attributes","id","type","key","value","environment","tag","createCoreStore","db","mergeParams","defaultParams","params","store","get","set","delete","name","prefix","where","data","query","findOne","JSON","parse","err","Date","Number","update","stringify","toString","create"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"core-store.mjs","sources":["../../src/services/core-store.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport type { Database, Model } from '@strapi/database';\n\nconst coreStoreModel: Model = {\n uid: 'strapi::core-store',\n singularName: 'strapi_core_store_settings',\n tableName: 'strapi_core_store_settings',\n attributes: {\n id: {\n type: 'increments',\n },\n key: {\n type: 'string',\n },\n value: {\n type: 'text',\n },\n type: {\n type: 'string',\n },\n environment: {\n type: 'string',\n },\n tag: {\n type: 'string',\n },\n },\n};\n\ntype SetParams = {\n key: string;\n value: unknown;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype GetParams = {\n key: string;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype Params = SetParams & GetParams;\n\ninterface CoreStore {\n (defaultParams: Partial<Params>): {\n get(params: Partial<GetParams>): Promise<unknown>;\n set(params: Partial<SetParams>): Promise<void>;\n delete(params: Partial<GetParams>): Promise<void>;\n };\n get(params: GetParams): Promise<unknown>;\n set(params: SetParams): Promise<void>;\n delete(params: GetParams): Promise<void>;\n}\n\nconst createCoreStore = ({ db }: { db: Database }) => {\n const mergeParams = (defaultParams: Partial<Params>, params: Params): Params => {\n return {\n ...defaultParams,\n ...params,\n };\n };\n\n const store: CoreStore = function (defaultParams: Partial<Params>) {\n return {\n get: (params: Params) => store.get(mergeParams(defaultParams, params)),\n set: (params: Params) => store.set(mergeParams(defaultParams, params)),\n delete: (params: Params) => store.delete(mergeParams(defaultParams, params)),\n };\n };\n\n /**\n * Get value from the core store\n */\n store.get = async (params) => {\n const { key, type = 'core', environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (!data) {\n return null;\n }\n\n if (\n data.type === 'object' ||\n data.type === 'array' ||\n data.type === 'boolean' ||\n data.type === 'string'\n ) {\n try {\n return JSON.parse(data.value);\n } catch (err) {\n return new Date(data.value);\n }\n } else if (data.type === 'number') {\n return Number(data.value);\n } else {\n return null;\n }\n };\n\n /**\n * Set value in the core store\n * @param {Object} params\n * @returns {*}\n */\n store.set = async (params) => {\n const { key, value, type, environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (data) {\n return db.query('strapi::core-store').update({\n where: { id: data.id },\n data: {\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n }\n\n return db.query('strapi::core-store').create({\n data: {\n ...where,\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n };\n\n /**\n * Deletes a value from the core store\n * @param {Object} params\n * @returns {*}\n */\n store.delete = async (params) => {\n const { key, environment, type, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n return db.query('strapi::core-store').delete({ where });\n };\n\n return store;\n};\n\nexport { coreStoreModel, createCoreStore };\n"],"names":["coreStoreModel","uid","singularName","tableName","attributes","id","type","key","value","environment","tag","createCoreStore","db","mergeParams","defaultParams","params","store","get","set","delete","name","prefix","where","data","query","findOne","JSON","parse","err","Date","Number","update","stringify","toString","create"],"mappings":"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"}
1
+ {"version":3,"file":"core-store.mjs","sources":["../../src/services/core-store.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport type { Database, Model } from '@strapi/database';\n\nconst coreStoreModel: Model = {\n uid: 'strapi::core-store',\n singularName: 'strapi_core_store_settings',\n tableName: 'strapi_core_store_settings',\n attributes: {\n id: {\n type: 'increments',\n },\n key: {\n type: 'string',\n },\n value: {\n type: 'text',\n },\n type: {\n type: 'string',\n },\n environment: {\n type: 'string',\n },\n tag: {\n type: 'string',\n },\n },\n};\n\ntype SetParams = {\n key: string;\n value: unknown;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype GetParams = {\n key: string;\n type?: string;\n environment?: string;\n name?: string;\n tag?: string;\n};\n\ntype Params = SetParams & GetParams;\n\ninterface CoreStore {\n (defaultParams: Partial<Params>): {\n get<T = unknown>(params: Partial<GetParams>): Promise<T>;\n set(params: Partial<SetParams>): Promise<void>;\n delete(params: Partial<GetParams>): Promise<void>;\n };\n get<T = unknown>(params: GetParams): Promise<T>;\n set(params: SetParams): Promise<void>;\n delete(params: GetParams): Promise<void>;\n}\n\nconst createCoreStore = ({ db }: { db: Database }) => {\n const mergeParams = (defaultParams: Partial<Params>, params: Params): Params => {\n return {\n ...defaultParams,\n ...params,\n };\n };\n\n const store: CoreStore = function (defaultParams: Partial<Params>) {\n return {\n get: (params: Params) => store.get(mergeParams(defaultParams, params)),\n set: (params: Params) => store.set(mergeParams(defaultParams, params)),\n delete: (params: Params) => store.delete(mergeParams(defaultParams, params)),\n };\n };\n\n /**\n * Get value from the core store\n */\n store.get = async (params) => {\n const { key, type = 'core', environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (!data) {\n return null;\n }\n\n if (\n data.type === 'object' ||\n data.type === 'array' ||\n data.type === 'boolean' ||\n data.type === 'string'\n ) {\n try {\n return JSON.parse(data.value);\n } catch (err) {\n return new Date(data.value);\n }\n } else if (data.type === 'number') {\n return Number(data.value);\n } else {\n return null;\n }\n };\n\n /**\n * Set value in the core store\n * @param {Object} params\n * @returns {*}\n */\n store.set = async (params) => {\n const { key, value, type, environment, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n const data = await db.query('strapi::core-store').findOne({ where });\n\n if (data) {\n return db.query('strapi::core-store').update({\n where: { id: data.id },\n data: {\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n }\n\n return db.query('strapi::core-store').create({\n data: {\n ...where,\n value: JSON.stringify(value) || toString(value),\n type: typeof value,\n },\n });\n };\n\n /**\n * Deletes a value from the core store\n * @param {Object} params\n * @returns {*}\n */\n store.delete = async (params) => {\n const { key, environment, type, name, tag } = params;\n\n const prefix = `${type}${name ? `_${name}` : ''}`;\n\n const where = {\n key: `${prefix}_${key}`,\n environment: environment || null,\n tag: tag || null,\n };\n\n return db.query('strapi::core-store').delete({ where });\n };\n\n return store;\n};\n\nexport { coreStoreModel, createCoreStore };\n"],"names":["coreStoreModel","uid","singularName","tableName","attributes","id","type","key","value","environment","tag","createCoreStore","db","mergeParams","defaultParams","params","store","get","set","delete","name","prefix","where","data","query","findOne","JSON","parse","err","Date","Number","update","stringify","toString","create"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/entries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAYlD,QAAA,MAAM,oBAAoB,QACnB,IAAI,WAAW,mBACH,QAAQ,eAAe,CAAC,eAAe;;iBAmCzB,MAAM;4BAUK,GAAG;qBA4BV,GAAG;0BAaE,GAAG;CAoB5C,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/entries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAYlD,QAAA,MAAM,oBAAoB,QACnB,IAAI,WAAW,mBACH,QAAQ,eAAe,CAAC,eAAe;;iBA2EzB,MAAM;4BAUK,GAAG;qBA4BV,GAAG;0BAaE,GAAG;CAoB5C,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -18,6 +18,48 @@ const createEntriesService = (uid, entityValidator)=>{
18
18
  if (!data) {
19
19
  throw new Error('Create requires data attribute');
20
20
  }
21
+ // Check for uniqueness based on documentId and locale (if localized)
22
+ if (data.documentId) {
23
+ const i18nService = strapi.plugin('i18n')?.service('content-types');
24
+ const isLocalized = i18nService?.isLocalizedContentType(contentType) ?? false;
25
+ const hasDraftAndPublish = contentType.options?.draftAndPublish === true;
26
+ const whereClause = {
27
+ documentId: data.documentId
28
+ };
29
+ if (isLocalized) {
30
+ whereClause.locale = data.locale;
31
+ }
32
+ let publishedStateDescription = '';
33
+ if (hasDraftAndPublish) {
34
+ if (data.publishedAt) {
35
+ // Current entry is published, check for existing published entry
36
+ whereClause.publishedAt = {
37
+ $notNull: true
38
+ };
39
+ publishedStateDescription = 'published';
40
+ } else {
41
+ // Current entry is a draft, check for existing draft entry
42
+ whereClause.publishedAt = {
43
+ $null: true
44
+ };
45
+ publishedStateDescription = 'draft';
46
+ }
47
+ }
48
+ const existingEntry = await strapi.db.query(uid).findOne({
49
+ select: [
50
+ 'id'
51
+ ],
52
+ where: whereClause
53
+ });
54
+ if (existingEntry) {
55
+ let errorMsg = `A ${publishedStateDescription} entry with documentId "${data.documentId}"`;
56
+ if (isLocalized && data.locale) {
57
+ errorMsg += ` and locale "${data.locale}"`;
58
+ }
59
+ errorMsg += ` already exists for UID "${uid}". This combination must be unique.`;
60
+ throw new strapiUtils.errors.ApplicationError(errorMsg);
61
+ }
62
+ }
21
63
  const validData = await entityValidator.validateEntityCreation(contentType, data, {
22
64
  // Note: publishedAt value will always be set when DP is disabled
23
65
  isDraft: !params$1?.data?.publishedAt,
@@ -1 +1 @@
1
- {"version":3,"file":"entries.js","sources":["../../../src/services/document-service/entries.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { assoc, omit } from 'lodash/fp';\n\nimport * as components from './components';\n\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { transformParamsToQuery } from './transform/query';\nimport { pickSelectionParams } from './params';\nimport { applyTransforms } from './attributes';\nimport { transformData } from './transform/data';\n\nconst createEntriesService = (\n uid: UID.ContentType,\n entityValidator: Modules.EntityValidator.EntityValidator\n) => {\n const contentType = strapi.contentType(uid);\n\n async function createEntry(params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n // Validation\n if (!data) {\n throw new Error('Create requires data attribute');\n }\n\n const validData = await entityValidator.validateEntityCreation(contentType, data, {\n // Note: publishedAt value will always be set when DP is disabled\n isDraft: !params?.data?.publishedAt,\n locale: params?.locale,\n });\n\n // Component handling\n const componentData = await components.createComponents(uid, validData);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n const doc = await strapi.db.query(uid).create({ ...query, data: entryData });\n\n return doc;\n }\n\n async function deleteEntry(id: number) {\n const componentsToDelete = await components.getComponents(uid, { id });\n\n const deletedEntry = await strapi.db.query(uid).delete({ where: { id } });\n\n await components.deleteComponents(uid, componentsToDelete as any, { loadComponents: false });\n\n return deletedEntry;\n }\n\n async function updateEntry(entryToUpdate: any, params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n const validData = await entityValidator.validateEntityUpdate(\n contentType,\n data,\n {\n isDraft: !params?.data?.publishedAt, // Always update the draft version\n locale: params?.locale,\n },\n entryToUpdate\n );\n // Component handling\n const componentData = await components.updateComponents(uid, entryToUpdate, validData as any);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n return strapi.db\n .query(uid)\n .update({ ...query, where: { id: entryToUpdate.id }, data: entryData });\n }\n\n async function publishEntry(entry: any, params = {} as any) {\n return async.pipe(\n omit('id'),\n assoc('publishedAt', new Date()),\n (draft) => {\n const opts = { uid, locale: draft.locale, status: 'published', allowMissingId: true };\n return transformData(draft, opts);\n },\n // Create the published entry\n (draft) => createEntry({ ...params, data: draft, locale: draft.locale, status: 'published' })\n )(entry);\n }\n\n async function discardDraftEntry(entry: any, params = {} as any) {\n return async.pipe(\n omit('id'),\n assoc('publishedAt', null),\n (entry) => {\n const opts = { uid, locale: entry.locale, status: 'draft', allowMissingId: true };\n return transformData(entry, opts);\n },\n // Create the draft entry\n (data) => createEntry({ ...params, locale: data.locale, data, status: 'draft' })\n )(entry);\n }\n\n return {\n create: createEntry,\n delete: deleteEntry,\n update: updateEntry,\n publish: publishEntry,\n discardDraft: discardDraftEntry,\n };\n};\n\nexport { createEntriesService };\n"],"names":["createEntriesService","uid","entityValidator","contentType","strapi","createEntry","params","data","restParams","transformParamsDocumentId","query","transformParamsToQuery","pickSelectionParams","Error","validData","validateEntityCreation","isDraft","publishedAt","locale","componentData","components","dataWithComponents","entryData","applyTransforms","doc","db","create","deleteEntry","id","componentsToDelete","deletedEntry","delete","where","loadComponents","updateEntry","entryToUpdate","validateEntityUpdate","update","publishEntry","entry","async","pipe","omit","assoc","Date","draft","opts","status","allowMissingId","transformData","discardDraftEntry","publish","discardDraft"],"mappings":"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"}
1
+ {"version":3,"file":"entries.js","sources":["../../../src/services/document-service/entries.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { async, errors } from '@strapi/utils';\nimport { assoc, omit } from 'lodash/fp';\n\nimport * as components from './components';\n\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { transformParamsToQuery } from './transform/query';\nimport { pickSelectionParams } from './params';\nimport { applyTransforms } from './attributes';\nimport { transformData } from './transform/data';\n\nconst createEntriesService = (\n uid: UID.ContentType,\n entityValidator: Modules.EntityValidator.EntityValidator\n) => {\n const contentType = strapi.contentType(uid);\n\n async function createEntry(params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n // Validation\n if (!data) {\n throw new Error('Create requires data attribute');\n }\n\n // Check for uniqueness based on documentId and locale (if localized)\n if (data.documentId) {\n const i18nService = strapi.plugin('i18n')?.service('content-types');\n const isLocalized = i18nService?.isLocalizedContentType(contentType) ?? false;\n const hasDraftAndPublish = contentType.options?.draftAndPublish === true;\n\n const whereClause: Record<string, unknown> = { documentId: data.documentId };\n\n if (isLocalized) {\n whereClause.locale = data.locale;\n }\n\n let publishedStateDescription = '';\n\n if (hasDraftAndPublish) {\n if (data.publishedAt) {\n // Current entry is published, check for existing published entry\n whereClause.publishedAt = { $notNull: true };\n publishedStateDescription = 'published';\n } else {\n // Current entry is a draft, check for existing draft entry\n whereClause.publishedAt = { $null: true };\n publishedStateDescription = 'draft';\n }\n }\n\n const existingEntry = await strapi.db.query(uid).findOne({\n select: ['id'],\n where: whereClause,\n });\n\n if (existingEntry) {\n let errorMsg = `A ${publishedStateDescription} entry with documentId \"${data.documentId}\"`;\n if (isLocalized && data.locale) {\n errorMsg += ` and locale \"${data.locale}\"`;\n }\n errorMsg += ` already exists for UID \"${uid}\". This combination must be unique.`;\n throw new errors.ApplicationError(errorMsg);\n }\n }\n\n const validData = await entityValidator.validateEntityCreation(contentType, data, {\n // Note: publishedAt value will always be set when DP is disabled\n isDraft: !params?.data?.publishedAt,\n locale: params?.locale,\n });\n\n // Component handling\n const componentData = await components.createComponents(uid, validData);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n const doc = await strapi.db.query(uid).create({ ...query, data: entryData });\n\n return doc;\n }\n\n async function deleteEntry(id: number) {\n const componentsToDelete = await components.getComponents(uid, { id });\n\n const deletedEntry = await strapi.db.query(uid).delete({ where: { id } });\n\n await components.deleteComponents(uid, componentsToDelete as any, { loadComponents: false });\n\n return deletedEntry;\n }\n\n async function updateEntry(entryToUpdate: any, params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n const validData = await entityValidator.validateEntityUpdate(\n contentType,\n data,\n {\n isDraft: !params?.data?.publishedAt, // Always update the draft version\n locale: params?.locale,\n },\n entryToUpdate\n );\n // Component handling\n const componentData = await components.updateComponents(uid, entryToUpdate, validData as any);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n return strapi.db\n .query(uid)\n .update({ ...query, where: { id: entryToUpdate.id }, data: entryData });\n }\n\n async function publishEntry(entry: any, params = {} as any) {\n return async.pipe(\n omit('id'),\n assoc('publishedAt', new Date()),\n (draft) => {\n const opts = { uid, locale: draft.locale, status: 'published', allowMissingId: true };\n return transformData(draft, opts);\n },\n // Create the published entry\n (draft) => createEntry({ ...params, data: draft, locale: draft.locale, status: 'published' })\n )(entry);\n }\n\n async function discardDraftEntry(entry: any, params = {} as any) {\n return async.pipe(\n omit('id'),\n assoc('publishedAt', null),\n (entry) => {\n const opts = { uid, locale: entry.locale, status: 'draft', allowMissingId: true };\n return transformData(entry, opts);\n },\n // Create the draft entry\n (data) => createEntry({ ...params, locale: data.locale, data, status: 'draft' })\n )(entry);\n }\n\n return {\n create: createEntry,\n delete: deleteEntry,\n update: updateEntry,\n publish: publishEntry,\n discardDraft: discardDraftEntry,\n };\n};\n\nexport { createEntriesService };\n"],"names":["createEntriesService","uid","entityValidator","contentType","strapi","createEntry","params","data","restParams","transformParamsDocumentId","query","transformParamsToQuery","pickSelectionParams","Error","documentId","i18nService","plugin","service","isLocalized","isLocalizedContentType","hasDraftAndPublish","options","draftAndPublish","whereClause","locale","publishedStateDescription","publishedAt","$notNull","$null","existingEntry","db","findOne","select","where","errorMsg","errors","ApplicationError","validData","validateEntityCreation","isDraft","componentData","components","dataWithComponents","entryData","applyTransforms","doc","create","deleteEntry","id","componentsToDelete","deletedEntry","delete","loadComponents","updateEntry","entryToUpdate","validateEntityUpdate","update","publishEntry","entry","async","pipe","omit","assoc","Date","draft","opts","status","allowMissingId","transformData","discardDraftEntry","publish","discardDraft"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { async } from '@strapi/utils';
1
+ import { errors, async } from '@strapi/utils';
2
2
  import { omit, assoc } from 'lodash/fp';
3
3
  import { createComponents, assignComponentData, getComponents, deleteComponents, updateComponents } from './components.mjs';
4
4
  import { transformParamsDocumentId as curriedTransformParamsDocumentId } from './transform/id-transform.mjs';
@@ -16,6 +16,48 @@ const createEntriesService = (uid, entityValidator)=>{
16
16
  if (!data) {
17
17
  throw new Error('Create requires data attribute');
18
18
  }
19
+ // Check for uniqueness based on documentId and locale (if localized)
20
+ if (data.documentId) {
21
+ const i18nService = strapi.plugin('i18n')?.service('content-types');
22
+ const isLocalized = i18nService?.isLocalizedContentType(contentType) ?? false;
23
+ const hasDraftAndPublish = contentType.options?.draftAndPublish === true;
24
+ const whereClause = {
25
+ documentId: data.documentId
26
+ };
27
+ if (isLocalized) {
28
+ whereClause.locale = data.locale;
29
+ }
30
+ let publishedStateDescription = '';
31
+ if (hasDraftAndPublish) {
32
+ if (data.publishedAt) {
33
+ // Current entry is published, check for existing published entry
34
+ whereClause.publishedAt = {
35
+ $notNull: true
36
+ };
37
+ publishedStateDescription = 'published';
38
+ } else {
39
+ // Current entry is a draft, check for existing draft entry
40
+ whereClause.publishedAt = {
41
+ $null: true
42
+ };
43
+ publishedStateDescription = 'draft';
44
+ }
45
+ }
46
+ const existingEntry = await strapi.db.query(uid).findOne({
47
+ select: [
48
+ 'id'
49
+ ],
50
+ where: whereClause
51
+ });
52
+ if (existingEntry) {
53
+ let errorMsg = `A ${publishedStateDescription} entry with documentId "${data.documentId}"`;
54
+ if (isLocalized && data.locale) {
55
+ errorMsg += ` and locale "${data.locale}"`;
56
+ }
57
+ errorMsg += ` already exists for UID "${uid}". This combination must be unique.`;
58
+ throw new errors.ApplicationError(errorMsg);
59
+ }
60
+ }
19
61
  const validData = await entityValidator.validateEntityCreation(contentType, data, {
20
62
  // Note: publishedAt value will always be set when DP is disabled
21
63
  isDraft: !params?.data?.publishedAt,
@@ -1 +1 @@
1
- {"version":3,"file":"entries.mjs","sources":["../../../src/services/document-service/entries.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { async } from '@strapi/utils';\nimport { assoc, omit } from 'lodash/fp';\n\nimport * as components from './components';\n\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { transformParamsToQuery } from './transform/query';\nimport { pickSelectionParams } from './params';\nimport { applyTransforms } from './attributes';\nimport { transformData } from './transform/data';\n\nconst createEntriesService = (\n uid: UID.ContentType,\n entityValidator: Modules.EntityValidator.EntityValidator\n) => {\n const contentType = strapi.contentType(uid);\n\n async function createEntry(params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n // Validation\n if (!data) {\n throw new Error('Create requires data attribute');\n }\n\n const validData = await entityValidator.validateEntityCreation(contentType, data, {\n // Note: publishedAt value will always be set when DP is disabled\n isDraft: !params?.data?.publishedAt,\n locale: params?.locale,\n });\n\n // Component handling\n const componentData = await components.createComponents(uid, validData);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n const doc = await strapi.db.query(uid).create({ ...query, data: entryData });\n\n return doc;\n }\n\n async function deleteEntry(id: number) {\n const componentsToDelete = await components.getComponents(uid, { id });\n\n const deletedEntry = await strapi.db.query(uid).delete({ where: { id } });\n\n await components.deleteComponents(uid, componentsToDelete as any, { loadComponents: false });\n\n return deletedEntry;\n }\n\n async function updateEntry(entryToUpdate: any, params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n const validData = await entityValidator.validateEntityUpdate(\n contentType,\n data,\n {\n isDraft: !params?.data?.publishedAt, // Always update the draft version\n locale: params?.locale,\n },\n entryToUpdate\n );\n // Component handling\n const componentData = await components.updateComponents(uid, entryToUpdate, validData as any);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n return strapi.db\n .query(uid)\n .update({ ...query, where: { id: entryToUpdate.id }, data: entryData });\n }\n\n async function publishEntry(entry: any, params = {} as any) {\n return async.pipe(\n omit('id'),\n assoc('publishedAt', new Date()),\n (draft) => {\n const opts = { uid, locale: draft.locale, status: 'published', allowMissingId: true };\n return transformData(draft, opts);\n },\n // Create the published entry\n (draft) => createEntry({ ...params, data: draft, locale: draft.locale, status: 'published' })\n )(entry);\n }\n\n async function discardDraftEntry(entry: any, params = {} as any) {\n return async.pipe(\n omit('id'),\n assoc('publishedAt', null),\n (entry) => {\n const opts = { uid, locale: entry.locale, status: 'draft', allowMissingId: true };\n return transformData(entry, opts);\n },\n // Create the draft entry\n (data) => createEntry({ ...params, locale: data.locale, data, status: 'draft' })\n )(entry);\n }\n\n return {\n create: createEntry,\n delete: deleteEntry,\n update: updateEntry,\n publish: publishEntry,\n discardDraft: discardDraftEntry,\n };\n};\n\nexport { createEntriesService };\n"],"names":["createEntriesService","uid","entityValidator","contentType","strapi","createEntry","params","data","restParams","transformParamsDocumentId","query","transformParamsToQuery","pickSelectionParams","Error","validData","validateEntityCreation","isDraft","publishedAt","locale","componentData","components","dataWithComponents","entryData","applyTransforms","doc","db","create","deleteEntry","id","componentsToDelete","deletedEntry","delete","where","loadComponents","updateEntry","entryToUpdate","validateEntityUpdate","update","publishEntry","entry","async","pipe","omit","assoc","Date","draft","opts","status","allowMissingId","transformData","discardDraftEntry","publish","discardDraft"],"mappings":";;;;;;;;;AAYMA,MAAAA,oBAAAA,GAAuB,CAC3BC,GACAC,EAAAA,eAAAA,GAAAA;IAEA,MAAMC,WAAAA,GAAcC,MAAOD,CAAAA,WAAW,CAACF,GAAAA,CAAAA;IAEvC,eAAeI,WAAAA,CAAYC,MAAS,GAAA,EAAS,EAAA;QAC3C,MAAM,EAAEC,IAAI,EAAE,GAAGC,YAAY,GAAG,MAAMC,iCAA0BR,GAAKK,EAAAA,MAAAA,CAAAA;AAErE,QAAA,MAAMI,KAAQC,GAAAA,sBAAAA,CAAuBV,GAAKW,EAAAA,mBAAAA,CAAoBJ;;AAG9D,QAAA,IAAI,CAACD,IAAM,EAAA;AACT,YAAA,MAAM,IAAIM,KAAM,CAAA,gCAAA,CAAA;AAClB;AAEA,QAAA,MAAMC,YAAY,MAAMZ,eAAAA,CAAgBa,sBAAsB,CAACZ,aAAaI,IAAM,EAAA;;YAEhFS,OAAS,EAAA,CAACV,QAAQC,IAAMU,EAAAA,WAAAA;AACxBC,YAAAA,MAAAA,EAAQZ,MAAQY,EAAAA;AAClB,SAAA,CAAA;;AAGA,QAAA,MAAMC,aAAgB,GAAA,MAAMC,gBAA2B,CAACnB,GAAKa,EAAAA,SAAAA,CAAAA;AAC7D,QAAA,MAAMO,kBAAqBD,GAAAA,mBAA8B,CACvDjB,aACAgB,aACAL,EAAAA,SAAAA,CAAAA;QAGF,MAAMQ,SAAAA,GAAYC,gBAAgBpB,WAAakB,EAAAA,kBAAAA,CAAAA;QAE/C,MAAMG,GAAAA,GAAM,MAAMpB,MAAOqB,CAAAA,EAAE,CAACf,KAAK,CAACT,GAAKyB,CAAAA,CAAAA,MAAM,CAAC;AAAE,YAAA,GAAGhB,KAAK;YAAEH,IAAMe,EAAAA;AAAU,SAAA,CAAA;QAE1E,OAAOE,GAAAA;AACT;AAEA,IAAA,eAAeG,YAAYC,EAAU,EAAA;AACnC,QAAA,MAAMC,kBAAqB,GAAA,MAAMT,aAAwB,CAACnB,GAAK,EAAA;AAAE2B,YAAAA;AAAG,SAAA,CAAA;QAEpE,MAAME,YAAAA,GAAe,MAAM1B,MAAOqB,CAAAA,EAAE,CAACf,KAAK,CAACT,GAAK8B,CAAAA,CAAAA,MAAM,CAAC;YAAEC,KAAO,EAAA;AAAEJ,gBAAAA;AAAG;AAAE,SAAA,CAAA;AAEvE,QAAA,MAAMR,gBAA2B,CAACnB,GAAAA,EAAK4B,kBAA2B,EAAA;YAAEI,cAAgB,EAAA;AAAM,SAAA,CAAA;QAE1F,OAAOH,YAAAA;AACT;AAEA,IAAA,eAAeI,WAAYC,CAAAA,aAAkB,EAAE7B,MAAAA,GAAS,EAAS,EAAA;QAC/D,MAAM,EAAEC,IAAI,EAAE,GAAGC,YAAY,GAAG,MAAMC,iCAA0BR,GAAKK,EAAAA,MAAAA,CAAAA;AACrE,QAAA,MAAMI,KAAQC,GAAAA,sBAAAA,CAAuBV,GAAKW,EAAAA,mBAAAA,CAAoBJ;AAE9D,QAAA,MAAMM,YAAY,MAAMZ,eAAAA,CAAgBkC,oBAAoB,CAC1DjC,aACAI,IACA,EAAA;YACES,OAAS,EAAA,CAACV,QAAQC,IAAMU,EAAAA,WAAAA;AACxBC,YAAAA,MAAAA,EAAQZ,MAAQY,EAAAA;SAElBiB,EAAAA,aAAAA,CAAAA;;AAGF,QAAA,MAAMhB,gBAAgB,MAAMC,gBAA2B,CAACnB,KAAKkC,aAAerB,EAAAA,SAAAA,CAAAA;AAC5E,QAAA,MAAMO,kBAAqBD,GAAAA,mBAA8B,CACvDjB,aACAgB,aACAL,EAAAA,SAAAA,CAAAA;QAGF,MAAMQ,SAAAA,GAAYC,gBAAgBpB,WAAakB,EAAAA,kBAAAA,CAAAA;AAE/C,QAAA,OAAOjB,OAAOqB,EAAE,CACbf,KAAK,CAACT,GAAAA,CAAAA,CACNoC,MAAM,CAAC;AAAE,YAAA,GAAG3B,KAAK;YAAEsB,KAAO,EAAA;AAAEJ,gBAAAA,EAAAA,EAAIO,cAAcP;AAAG,aAAA;YAAGrB,IAAMe,EAAAA;AAAU,SAAA,CAAA;AACzE;AAEA,IAAA,eAAegB,YAAaC,CAAAA,KAAU,EAAEjC,MAAAA,GAAS,EAAS,EAAA;QACxD,OAAOkC,KAAAA,CAAMC,IAAI,CACfC,IAAAA,CAAK,OACLC,KAAM,CAAA,aAAA,EAAe,IAAIC,IAAAA,EAAAA,CAAAA,EACzB,CAACC,KAAAA,GAAAA;AACC,YAAA,MAAMC,IAAO,GAAA;AAAE7C,gBAAAA,GAAAA;AAAKiB,gBAAAA,MAAAA,EAAQ2B,MAAM3B,MAAM;gBAAE6B,MAAQ,EAAA,WAAA;gBAAaC,cAAgB,EAAA;AAAK,aAAA;AACpF,YAAA,OAAOC,cAAcJ,KAAOC,EAAAA,IAAAA,CAAAA;AAC9B,SAAA;AAEA,QAAA,CAACD,QAAUxC,WAAY,CAAA;AAAE,gBAAA,GAAGC,MAAM;gBAAEC,IAAMsC,EAAAA,KAAAA;AAAO3B,gBAAAA,MAAAA,EAAQ2B,MAAM3B,MAAM;gBAAE6B,MAAQ,EAAA;aAC/ER,CAAAA,CAAAA,CAAAA,KAAAA,CAAAA;AACJ;AAEA,IAAA,eAAeW,iBAAkBX,CAAAA,KAAU,EAAEjC,MAAAA,GAAS,EAAS,EAAA;QAC7D,OAAOkC,KAAAA,CAAMC,IAAI,CACfC,IAAAA,CAAK,OACLC,KAAM,CAAA,aAAA,EAAe,OACrB,CAACJ,KAAAA,GAAAA;AACC,YAAA,MAAMO,IAAO,GAAA;AAAE7C,gBAAAA,GAAAA;AAAKiB,gBAAAA,MAAAA,EAAQqB,MAAMrB,MAAM;gBAAE6B,MAAQ,EAAA,OAAA;gBAASC,cAAgB,EAAA;AAAK,aAAA;AAChF,YAAA,OAAOC,cAAcV,KAAOO,EAAAA,IAAAA,CAAAA;AAC9B,SAAA;AAEA,QAAA,CAACvC,OAASF,WAAY,CAAA;AAAE,gBAAA,GAAGC,MAAM;AAAEY,gBAAAA,MAAAA,EAAQX,KAAKW,MAAM;AAAEX,gBAAAA,IAAAA;gBAAMwC,MAAQ,EAAA;aACtER,CAAAA,CAAAA,CAAAA,KAAAA,CAAAA;AACJ;IAEA,OAAO;QACLb,MAAQrB,EAAAA,WAAAA;QACR0B,MAAQJ,EAAAA,WAAAA;QACRU,MAAQH,EAAAA,WAAAA;QACRiB,OAASb,EAAAA,YAAAA;QACTc,YAAcF,EAAAA;AAChB,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"entries.mjs","sources":["../../../src/services/document-service/entries.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { async, errors } from '@strapi/utils';\nimport { assoc, omit } from 'lodash/fp';\n\nimport * as components from './components';\n\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { transformParamsToQuery } from './transform/query';\nimport { pickSelectionParams } from './params';\nimport { applyTransforms } from './attributes';\nimport { transformData } from './transform/data';\n\nconst createEntriesService = (\n uid: UID.ContentType,\n entityValidator: Modules.EntityValidator.EntityValidator\n) => {\n const contentType = strapi.contentType(uid);\n\n async function createEntry(params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n // Validation\n if (!data) {\n throw new Error('Create requires data attribute');\n }\n\n // Check for uniqueness based on documentId and locale (if localized)\n if (data.documentId) {\n const i18nService = strapi.plugin('i18n')?.service('content-types');\n const isLocalized = i18nService?.isLocalizedContentType(contentType) ?? false;\n const hasDraftAndPublish = contentType.options?.draftAndPublish === true;\n\n const whereClause: Record<string, unknown> = { documentId: data.documentId };\n\n if (isLocalized) {\n whereClause.locale = data.locale;\n }\n\n let publishedStateDescription = '';\n\n if (hasDraftAndPublish) {\n if (data.publishedAt) {\n // Current entry is published, check for existing published entry\n whereClause.publishedAt = { $notNull: true };\n publishedStateDescription = 'published';\n } else {\n // Current entry is a draft, check for existing draft entry\n whereClause.publishedAt = { $null: true };\n publishedStateDescription = 'draft';\n }\n }\n\n const existingEntry = await strapi.db.query(uid).findOne({\n select: ['id'],\n where: whereClause,\n });\n\n if (existingEntry) {\n let errorMsg = `A ${publishedStateDescription} entry with documentId \"${data.documentId}\"`;\n if (isLocalized && data.locale) {\n errorMsg += ` and locale \"${data.locale}\"`;\n }\n errorMsg += ` already exists for UID \"${uid}\". This combination must be unique.`;\n throw new errors.ApplicationError(errorMsg);\n }\n }\n\n const validData = await entityValidator.validateEntityCreation(contentType, data, {\n // Note: publishedAt value will always be set when DP is disabled\n isDraft: !params?.data?.publishedAt,\n locale: params?.locale,\n });\n\n // Component handling\n const componentData = await components.createComponents(uid, validData);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n const doc = await strapi.db.query(uid).create({ ...query, data: entryData });\n\n return doc;\n }\n\n async function deleteEntry(id: number) {\n const componentsToDelete = await components.getComponents(uid, { id });\n\n const deletedEntry = await strapi.db.query(uid).delete({ where: { id } });\n\n await components.deleteComponents(uid, componentsToDelete as any, { loadComponents: false });\n\n return deletedEntry;\n }\n\n async function updateEntry(entryToUpdate: any, params = {} as any) {\n const { data, ...restParams } = await transformParamsDocumentId(uid, params);\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n const validData = await entityValidator.validateEntityUpdate(\n contentType,\n data,\n {\n isDraft: !params?.data?.publishedAt, // Always update the draft version\n locale: params?.locale,\n },\n entryToUpdate\n );\n // Component handling\n const componentData = await components.updateComponents(uid, entryToUpdate, validData as any);\n const dataWithComponents = components.assignComponentData(\n contentType,\n componentData,\n validData\n );\n\n const entryData = applyTransforms(contentType, dataWithComponents);\n\n return strapi.db\n .query(uid)\n .update({ ...query, where: { id: entryToUpdate.id }, data: entryData });\n }\n\n async function publishEntry(entry: any, params = {} as any) {\n return async.pipe(\n omit('id'),\n assoc('publishedAt', new Date()),\n (draft) => {\n const opts = { uid, locale: draft.locale, status: 'published', allowMissingId: true };\n return transformData(draft, opts);\n },\n // Create the published entry\n (draft) => createEntry({ ...params, data: draft, locale: draft.locale, status: 'published' })\n )(entry);\n }\n\n async function discardDraftEntry(entry: any, params = {} as any) {\n return async.pipe(\n omit('id'),\n assoc('publishedAt', null),\n (entry) => {\n const opts = { uid, locale: entry.locale, status: 'draft', allowMissingId: true };\n return transformData(entry, opts);\n },\n // Create the draft entry\n (data) => createEntry({ ...params, locale: data.locale, data, status: 'draft' })\n )(entry);\n }\n\n return {\n create: createEntry,\n delete: deleteEntry,\n update: updateEntry,\n publish: publishEntry,\n discardDraft: discardDraftEntry,\n };\n};\n\nexport { createEntriesService };\n"],"names":["createEntriesService","uid","entityValidator","contentType","strapi","createEntry","params","data","restParams","transformParamsDocumentId","query","transformParamsToQuery","pickSelectionParams","Error","documentId","i18nService","plugin","service","isLocalized","isLocalizedContentType","hasDraftAndPublish","options","draftAndPublish","whereClause","locale","publishedStateDescription","publishedAt","$notNull","$null","existingEntry","db","findOne","select","where","errorMsg","errors","ApplicationError","validData","validateEntityCreation","isDraft","componentData","components","dataWithComponents","entryData","applyTransforms","doc","create","deleteEntry","id","componentsToDelete","deletedEntry","delete","loadComponents","updateEntry","entryToUpdate","validateEntityUpdate","update","publishEntry","entry","async","pipe","omit","assoc","Date","draft","opts","status","allowMissingId","transformData","discardDraftEntry","publish","discardDraft"],"mappings":"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"}
@@ -1,8 +1,13 @@
1
1
  /// <reference types="lodash" />
2
2
  import type { Struct, Modules } from '@strapi/types';
3
+ /**
4
+ * Copy non-localized fields from an existing entry to a new entry being created
5
+ * for a different locale of the same document. Returns a new object with the merged data.
6
+ */
7
+ declare const copyNonLocalizedFields: (contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema, documentId: string, dataToCreate: Record<string, any>) => Promise<Record<string, any>>;
3
8
  declare const defaultLocaleCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Promise<Modules.Documents.Params.All>>;
4
9
  declare const localeToLookupCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
5
10
  declare const multiLocaleToLookupCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
6
11
  declare const localeToDataCurry: import("lodash").CurriedFunction2<Struct.SingleTypeSchema | Struct.CollectionTypeSchema, Modules.Documents.Params.All, Modules.Documents.Params.All>;
7
- export { defaultLocaleCurry as defaultLocale, localeToLookupCurry as localeToLookup, localeToDataCurry as localeToData, multiLocaleToLookupCurry as multiLocaleToLookup, };
12
+ export { defaultLocaleCurry as defaultLocale, localeToLookupCurry as localeToLookup, localeToDataCurry as localeToData, multiLocaleToLookupCurry as multiLocaleToLookup, copyNonLocalizedFields, };
8
13
  //# sourceMappingURL=internationalization.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"internationalization.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/internationalization.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AA8FrD,QAAA,MAAM,kBAAkB,+JAAuB,CAAC;AAChD,QAAA,MAAM,mBAAmB,sJAAwB,CAAC;AAClD,QAAA,MAAM,wBAAwB,sJAA6B,CAAC;AAC5D,QAAA,MAAM,iBAAiB,sJAAsB,CAAC;AAE9C,OAAO,EACL,kBAAkB,IAAI,aAAa,EACnC,mBAAmB,IAAI,cAAc,EACrC,iBAAiB,IAAI,YAAY,EACjC,wBAAwB,IAAI,mBAAmB,GAChD,CAAC"}
1
+ {"version":3,"file":"internationalization.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/internationalization.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AA8FrD;;;GAGG;AACH,QAAA,MAAM,sBAAsB,gBACb,OAAO,gBAAgB,GAAG,OAAO,oBAAoB,cACtD,MAAM,gBACJ,OAAO,MAAM,EAAE,GAAG,CAAC,KAChC,QAAQ,OAAO,MAAM,EAAE,GAAG,CAAC,CAwB7B,CAAC;AAEF,QAAA,MAAM,kBAAkB,+JAAuB,CAAC;AAChD,QAAA,MAAM,mBAAmB,sJAAwB,CAAC;AAClD,QAAA,MAAM,wBAAwB,sJAA6B,CAAC;AAC5D,QAAA,MAAM,iBAAiB,sJAAsB,CAAC;AAE9C,OAAO,EACL,kBAAkB,IAAI,aAAa,EACnC,mBAAmB,IAAI,cAAc,EACrC,iBAAiB,IAAI,YAAY,EACjC,wBAAwB,IAAI,mBAAmB,EAC/C,sBAAsB,GACvB,CAAC"}
@@ -67,11 +67,43 @@ const defaultLocale = async (contentType, params)=>{
67
67
  }
68
68
  return params;
69
69
  };
70
+ /**
71
+ * Copy non-localized fields from an existing entry to a new entry being created
72
+ * for a different locale of the same document. Returns a new object with the merged data.
73
+ */ const copyNonLocalizedFields = async (contentType, documentId, dataToCreate)=>{
74
+ // Check if this is a localized content type and if i18n plugin is available
75
+ const i18nService = strapi.plugin('i18n')?.service('content-types');
76
+ if (!i18nService?.isLocalizedContentType(contentType)) {
77
+ return dataToCreate;
78
+ }
79
+ // Find an existing entry for the same document to copy unlocalized fields from
80
+ const existingEntry = await strapi.db.query(contentType.uid).findOne({
81
+ where: {
82
+ documentId
83
+ },
84
+ // Prefer published entry, but fall back to any entry
85
+ orderBy: {
86
+ publishedAt: 'desc'
87
+ }
88
+ });
89
+ // If an entry exists in another locale, copy its non-localized fields
90
+ if (existingEntry) {
91
+ const mergedData = {
92
+ ...dataToCreate
93
+ };
94
+ i18nService.fillNonLocalizedAttributes(mergedData, existingEntry, {
95
+ model: contentType.uid
96
+ });
97
+ return mergedData;
98
+ }
99
+ return dataToCreate;
100
+ };
70
101
  const defaultLocaleCurry = fp.curry(defaultLocale);
71
102
  const localeToLookupCurry = fp.curry(localeToLookup);
72
103
  const multiLocaleToLookupCurry = fp.curry(multiLocaleToLookup);
73
104
  const localeToDataCurry = fp.curry(localeToData);
74
105
 
106
+ exports.copyNonLocalizedFields = copyNonLocalizedFields;
75
107
  exports.defaultLocale = defaultLocaleCurry;
76
108
  exports.localeToData = localeToDataCurry;
77
109
  exports.localeToLookup = localeToLookupCurry;
@@ -1 +1 @@
1
- {"version":3,"file":"internationalization.js","sources":["../../../src/services/document-service/internationalization.ts"],"sourcesContent":["import type { Struct, Modules } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport { curry, assoc } from 'lodash/fp';\n\ntype Transform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\ntype AsyncTransform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Promise<Modules.Documents.Params.All>;\n\nconst getDefaultLocale = async (): Promise<string> => {\n return strapi.plugin('i18n').service('locales').getDefaultLocale();\n};\n\nconst defaultLocale: AsyncTransform = async (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (!params.locale) {\n return assoc('locale', await getDefaultLocale(), params);\n }\n\n return params;\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst localeToLookup: Transform = (contentType, params) => {\n if (\n !params.locale ||\n !strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)\n ) {\n return params;\n }\n\n if (typeof params.locale !== 'string') {\n // localeToLookup accepts locales of '*'. This is because the document\n // service functions that use this transform work with the '*' locale\n // to return all locales.\n throw new errors.ValidationError(\n `Invalid locale param ${String(params.locale)} provided. Document locales must be strings.`\n );\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst multiLocaleToLookup: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n if (params.locale === '*') {\n return params;\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\n/**\n * Translate locale status parameter into the data that will be saved\n */\nconst localeToData: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n const isValidLocale = typeof params.locale === 'string' && params.locale !== '*';\n if (isValidLocale) {\n return assoc(['data', 'locale'], params.locale, params);\n }\n\n throw new errors.ValidationError(\n `Invalid locale param ${params.locale} provided. Document locales must be strings.`\n );\n }\n\n return params;\n};\n\nconst defaultLocaleCurry = curry(defaultLocale);\nconst localeToLookupCurry = curry(localeToLookup);\nconst multiLocaleToLookupCurry = curry(multiLocaleToLookup);\nconst localeToDataCurry = curry(localeToData);\n\nexport {\n defaultLocaleCurry as defaultLocale,\n localeToLookupCurry as localeToLookup,\n localeToDataCurry as localeToData,\n multiLocaleToLookupCurry as multiLocaleToLookup,\n};\n"],"names":["getDefaultLocale","strapi","plugin","service","defaultLocale","contentType","params","isLocalizedContentType","locale","assoc","localeToLookup","errors","ValidationError","String","multiLocaleToLookup","localeToData","isValidLocale","defaultLocaleCurry","curry","localeToLookupCurry","multiLocaleToLookupCurry","localeToDataCurry"],"mappings":"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"}
1
+ {"version":3,"file":"internationalization.js","sources":["../../../src/services/document-service/internationalization.ts"],"sourcesContent":["import type { Struct, Modules } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport { curry, assoc } from 'lodash/fp';\n\ntype Transform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\ntype AsyncTransform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Promise<Modules.Documents.Params.All>;\n\nconst getDefaultLocale = async (): Promise<string> => {\n return strapi.plugin('i18n').service('locales').getDefaultLocale();\n};\n\nconst defaultLocale: AsyncTransform = async (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (!params.locale) {\n return assoc('locale', await getDefaultLocale(), params);\n }\n\n return params;\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst localeToLookup: Transform = (contentType, params) => {\n if (\n !params.locale ||\n !strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)\n ) {\n return params;\n }\n\n if (typeof params.locale !== 'string') {\n // localeToLookup accepts locales of '*'. This is because the document\n // service functions that use this transform work with the '*' locale\n // to return all locales.\n throw new errors.ValidationError(\n `Invalid locale param ${String(params.locale)} provided. Document locales must be strings.`\n );\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst multiLocaleToLookup: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n if (params.locale === '*') {\n return params;\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\n/**\n * Translate locale status parameter into the data that will be saved\n */\nconst localeToData: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n const isValidLocale = typeof params.locale === 'string' && params.locale !== '*';\n if (isValidLocale) {\n return assoc(['data', 'locale'], params.locale, params);\n }\n\n throw new errors.ValidationError(\n `Invalid locale param ${params.locale} provided. Document locales must be strings.`\n );\n }\n\n return params;\n};\n\n/**\n * Copy non-localized fields from an existing entry to a new entry being created\n * for a different locale of the same document. Returns a new object with the merged data.\n */\nconst copyNonLocalizedFields = async (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n documentId: string,\n dataToCreate: Record<string, any>\n): Promise<Record<string, any>> => {\n // Check if this is a localized content type and if i18n plugin is available\n const i18nService = strapi.plugin('i18n')?.service('content-types');\n if (!i18nService?.isLocalizedContentType(contentType)) {\n return dataToCreate;\n }\n\n // Find an existing entry for the same document to copy unlocalized fields from\n const existingEntry = await strapi.db.query(contentType.uid).findOne({\n where: { documentId },\n // Prefer published entry, but fall back to any entry\n orderBy: { publishedAt: 'desc' },\n });\n\n // If an entry exists in another locale, copy its non-localized fields\n if (existingEntry) {\n const mergedData = { ...dataToCreate };\n i18nService.fillNonLocalizedAttributes(mergedData, existingEntry, {\n model: contentType.uid,\n });\n return mergedData;\n }\n\n return dataToCreate;\n};\n\nconst defaultLocaleCurry = curry(defaultLocale);\nconst localeToLookupCurry = curry(localeToLookup);\nconst multiLocaleToLookupCurry = curry(multiLocaleToLookup);\nconst localeToDataCurry = curry(localeToData);\n\nexport {\n defaultLocaleCurry as defaultLocale,\n localeToLookupCurry as localeToLookup,\n localeToDataCurry as localeToData,\n multiLocaleToLookupCurry as multiLocaleToLookup,\n copyNonLocalizedFields,\n};\n"],"names":["getDefaultLocale","strapi","plugin","service","defaultLocale","contentType","params","isLocalizedContentType","locale","assoc","localeToLookup","errors","ValidationError","String","multiLocaleToLookup","localeToData","isValidLocale","copyNonLocalizedFields","documentId","dataToCreate","i18nService","existingEntry","db","query","uid","findOne","where","orderBy","publishedAt","mergedData","fillNonLocalizedAttributes","model","defaultLocaleCurry","curry","localeToLookupCurry","multiLocaleToLookupCurry","localeToDataCurry"],"mappings":"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"}