@strapi/data-transfer 5.12.1 → 5.12.3

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 (213) hide show
  1. package/dist/engine/errors.js +39 -0
  2. package/dist/engine/errors.js.map +1 -0
  3. package/dist/engine/errors.mjs +34 -0
  4. package/dist/engine/errors.mjs.map +1 -0
  5. package/dist/engine/index.js +797 -0
  6. package/dist/engine/index.js.map +1 -0
  7. package/dist/engine/index.mjs +792 -0
  8. package/dist/engine/index.mjs.map +1 -0
  9. package/dist/engine/validation/provider.js +19 -0
  10. package/dist/engine/validation/provider.js.map +1 -0
  11. package/dist/engine/validation/provider.mjs +17 -0
  12. package/dist/engine/validation/provider.mjs.map +1 -0
  13. package/dist/engine/validation/schemas/index.js +57 -0
  14. package/dist/engine/validation/schemas/index.js.map +1 -0
  15. package/dist/engine/validation/schemas/index.mjs +55 -0
  16. package/dist/engine/validation/schemas/index.mjs.map +1 -0
  17. package/dist/errors/base.js +13 -0
  18. package/dist/errors/base.js.map +1 -0
  19. package/dist/errors/base.mjs +11 -0
  20. package/dist/errors/base.mjs.map +1 -0
  21. package/dist/errors/constants.js +10 -0
  22. package/dist/errors/constants.js.map +1 -0
  23. package/dist/errors/constants.mjs +8 -0
  24. package/dist/errors/constants.mjs.map +1 -0
  25. package/dist/errors/providers.js +41 -0
  26. package/dist/errors/providers.js.map +1 -0
  27. package/dist/errors/providers.mjs +36 -0
  28. package/dist/errors/providers.mjs.map +1 -0
  29. package/dist/file/index.js +8 -0
  30. package/dist/file/index.js.map +1 -0
  31. package/dist/file/index.mjs +3 -0
  32. package/dist/file/index.mjs.map +1 -0
  33. package/dist/file/providers/destination/index.js +248 -0
  34. package/dist/file/providers/destination/index.js.map +1 -0
  35. package/dist/file/providers/destination/index.mjs +246 -0
  36. package/dist/file/providers/destination/index.mjs.map +1 -0
  37. package/dist/file/providers/destination/utils.js +63 -0
  38. package/dist/file/providers/destination/utils.js.map +1 -0
  39. package/dist/file/providers/destination/utils.mjs +60 -0
  40. package/dist/file/providers/destination/utils.mjs.map +1 -0
  41. package/dist/file/providers/index.js +10 -0
  42. package/dist/file/providers/index.js.map +1 -0
  43. package/dist/file/providers/index.mjs +3 -0
  44. package/dist/file/providers/index.mjs.map +1 -0
  45. package/dist/file/providers/source/index.js +288 -0
  46. package/dist/file/providers/source/index.js.map +1 -0
  47. package/dist/file/providers/source/index.mjs +286 -0
  48. package/dist/file/providers/source/index.mjs.map +1 -0
  49. package/dist/file/providers/source/utils.js +56 -0
  50. package/dist/file/providers/source/utils.js.map +1 -0
  51. package/dist/file/providers/source/utils.mjs +52 -0
  52. package/dist/file/providers/source/utils.mjs.map +1 -0
  53. package/dist/index.js +8 -5692
  54. package/dist/index.js.map +1 -1
  55. package/dist/index.mjs +8 -5674
  56. package/dist/index.mjs.map +1 -1
  57. package/dist/strapi/index.js +12 -0
  58. package/dist/strapi/index.js.map +1 -0
  59. package/dist/strapi/index.mjs +7 -0
  60. package/dist/strapi/index.mjs.map +1 -0
  61. package/dist/strapi/providers/index.js +16 -0
  62. package/dist/strapi/providers/index.js.map +1 -0
  63. package/dist/strapi/providers/index.mjs +7 -0
  64. package/dist/strapi/providers/index.mjs.map +1 -0
  65. package/dist/strapi/providers/local-destination/index.js +419 -0
  66. package/dist/strapi/providers/local-destination/index.js.map +1 -0
  67. package/dist/strapi/providers/local-destination/index.mjs +396 -0
  68. package/dist/strapi/providers/local-destination/index.mjs.map +1 -0
  69. package/dist/strapi/providers/local-destination/strategies/restore/configuration.js +52 -0
  70. package/dist/strapi/providers/local-destination/strategies/restore/configuration.js.map +1 -0
  71. package/dist/strapi/providers/local-destination/strategies/restore/configuration.mjs +49 -0
  72. package/dist/strapi/providers/local-destination/strategies/restore/configuration.mjs.map +1 -0
  73. package/dist/strapi/providers/local-destination/strategies/restore/entities.js +64 -0
  74. package/dist/strapi/providers/local-destination/strategies/restore/entities.js.map +1 -0
  75. package/dist/strapi/providers/local-destination/strategies/restore/entities.mjs +62 -0
  76. package/dist/strapi/providers/local-destination/strategies/restore/entities.mjs.map +1 -0
  77. package/dist/strapi/providers/local-destination/strategies/restore/index.js +126 -0
  78. package/dist/strapi/providers/local-destination/strategies/restore/index.js.map +1 -0
  79. package/dist/strapi/providers/local-destination/strategies/restore/index.mjs +122 -0
  80. package/dist/strapi/providers/local-destination/strategies/restore/index.mjs.map +1 -0
  81. package/dist/strapi/providers/local-destination/strategies/restore/links.js +60 -0
  82. package/dist/strapi/providers/local-destination/strategies/restore/links.js.map +1 -0
  83. package/dist/strapi/providers/local-destination/strategies/restore/links.mjs +58 -0
  84. package/dist/strapi/providers/local-destination/strategies/restore/links.mjs.map +1 -0
  85. package/dist/strapi/providers/local-source/assets.js +123 -0
  86. package/dist/strapi/providers/local-source/assets.js.map +1 -0
  87. package/dist/strapi/providers/local-source/assets.mjs +121 -0
  88. package/dist/strapi/providers/local-source/assets.mjs.map +1 -0
  89. package/dist/strapi/providers/local-source/configuration.js +39 -0
  90. package/dist/strapi/providers/local-source/configuration.js.map +1 -0
  91. package/dist/strapi/providers/local-source/configuration.mjs +37 -0
  92. package/dist/strapi/providers/local-source/configuration.mjs.map +1 -0
  93. package/dist/strapi/providers/local-source/entities.js +62 -0
  94. package/dist/strapi/providers/local-source/entities.js.map +1 -0
  95. package/dist/strapi/providers/local-source/entities.mjs +59 -0
  96. package/dist/strapi/providers/local-source/entities.mjs.map +1 -0
  97. package/dist/strapi/providers/local-source/index.js +154 -0
  98. package/dist/strapi/providers/local-source/index.js.map +1 -0
  99. package/dist/strapi/providers/local-source/index.mjs +152 -0
  100. package/dist/strapi/providers/local-source/index.mjs.map +1 -0
  101. package/dist/strapi/providers/local-source/links.js +26 -0
  102. package/dist/strapi/providers/local-source/links.js.map +1 -0
  103. package/dist/strapi/providers/local-source/links.mjs +24 -0
  104. package/dist/strapi/providers/local-source/links.mjs.map +1 -0
  105. package/dist/strapi/providers/remote-destination/index.js +392 -0
  106. package/dist/strapi/providers/remote-destination/index.js.map +1 -0
  107. package/dist/strapi/providers/remote-destination/index.mjs +390 -0
  108. package/dist/strapi/providers/remote-destination/index.mjs.map +1 -0
  109. package/dist/strapi/providers/remote-source/index.js +405 -0
  110. package/dist/strapi/providers/remote-source/index.js.map +1 -0
  111. package/dist/strapi/providers/remote-source/index.mjs +403 -0
  112. package/dist/strapi/providers/remote-source/index.mjs.map +1 -0
  113. package/dist/strapi/providers/utils.js +173 -0
  114. package/dist/strapi/providers/utils.js.map +1 -0
  115. package/dist/strapi/providers/utils.mjs +169 -0
  116. package/dist/strapi/providers/utils.mjs.map +1 -0
  117. package/dist/strapi/queries/entity.js +125 -0
  118. package/dist/strapi/queries/entity.js.map +1 -0
  119. package/dist/strapi/queries/entity.mjs +123 -0
  120. package/dist/strapi/queries/entity.mjs.map +1 -0
  121. package/dist/strapi/queries/index.js +10 -0
  122. package/dist/strapi/queries/index.js.map +1 -0
  123. package/dist/strapi/queries/index.mjs +5 -0
  124. package/dist/strapi/queries/index.mjs.map +1 -0
  125. package/dist/strapi/queries/link.js +298 -0
  126. package/dist/strapi/queries/link.js.map +1 -0
  127. package/dist/strapi/queries/link.mjs +295 -0
  128. package/dist/strapi/queries/link.mjs.map +1 -0
  129. package/dist/strapi/remote/constants.js +11 -0
  130. package/dist/strapi/remote/constants.js.map +1 -0
  131. package/dist/strapi/remote/constants.mjs +8 -0
  132. package/dist/strapi/remote/constants.mjs.map +1 -0
  133. package/dist/strapi/remote/flows/default.js +43 -0
  134. package/dist/strapi/remote/flows/default.js.map +1 -0
  135. package/dist/strapi/remote/flows/default.mjs +41 -0
  136. package/dist/strapi/remote/flows/default.mjs.map +1 -0
  137. package/dist/strapi/remote/flows/index.js +54 -0
  138. package/dist/strapi/remote/flows/index.js.map +1 -0
  139. package/dist/strapi/remote/flows/index.mjs +52 -0
  140. package/dist/strapi/remote/flows/index.mjs.map +1 -0
  141. package/dist/strapi/remote/handlers/constants.js +10 -0
  142. package/dist/strapi/remote/handlers/constants.js.map +1 -0
  143. package/dist/strapi/remote/handlers/constants.mjs +8 -0
  144. package/dist/strapi/remote/handlers/constants.mjs.map +1 -0
  145. package/dist/strapi/remote/handlers/index.js +12 -0
  146. package/dist/strapi/remote/handlers/index.js.map +1 -0
  147. package/dist/strapi/remote/handlers/index.mjs +4 -0
  148. package/dist/strapi/remote/handlers/index.mjs.map +1 -0
  149. package/dist/strapi/remote/handlers/pull.js +348 -0
  150. package/dist/strapi/remote/handlers/pull.js.map +1 -0
  151. package/dist/strapi/remote/handlers/pull.mjs +346 -0
  152. package/dist/strapi/remote/handlers/pull.mjs.map +1 -0
  153. package/dist/strapi/remote/handlers/push.js +400 -0
  154. package/dist/strapi/remote/handlers/push.js.map +1 -0
  155. package/dist/strapi/remote/handlers/push.mjs +398 -0
  156. package/dist/strapi/remote/handlers/push.mjs.map +1 -0
  157. package/dist/strapi/remote/handlers/utils.js +316 -0
  158. package/dist/strapi/remote/handlers/utils.js.map +1 -0
  159. package/dist/strapi/remote/handlers/utils.mjs +310 -0
  160. package/dist/strapi/remote/handlers/utils.mjs.map +1 -0
  161. package/dist/strapi/remote/index.js +10 -0
  162. package/dist/strapi/remote/index.js.map +1 -0
  163. package/dist/strapi/remote/index.mjs +5 -0
  164. package/dist/strapi/remote/index.mjs.map +1 -0
  165. package/dist/utils/components.js +178 -0
  166. package/dist/utils/components.js.map +1 -0
  167. package/dist/utils/components.mjs +171 -0
  168. package/dist/utils/components.mjs.map +1 -0
  169. package/dist/utils/diagnostic.js +51 -0
  170. package/dist/utils/diagnostic.js.map +1 -0
  171. package/dist/utils/diagnostic.mjs +49 -0
  172. package/dist/utils/diagnostic.mjs.map +1 -0
  173. package/dist/utils/encryption/decrypt.js +47 -0
  174. package/dist/utils/encryption/decrypt.js.map +1 -0
  175. package/dist/utils/encryption/decrypt.mjs +45 -0
  176. package/dist/utils/encryption/decrypt.mjs.map +1 -0
  177. package/dist/utils/encryption/encrypt.js +47 -0
  178. package/dist/utils/encryption/encrypt.js.map +1 -0
  179. package/dist/utils/encryption/encrypt.mjs +45 -0
  180. package/dist/utils/encryption/encrypt.mjs.map +1 -0
  181. package/dist/utils/encryption/index.js +10 -0
  182. package/dist/utils/encryption/index.js.map +1 -0
  183. package/dist/utils/encryption/index.mjs +3 -0
  184. package/dist/utils/encryption/index.mjs.map +1 -0
  185. package/dist/utils/index.js +20 -0
  186. package/dist/utils/index.js.map +1 -0
  187. package/dist/utils/index.mjs +15 -0
  188. package/dist/utils/index.mjs.map +1 -0
  189. package/dist/utils/json.js +96 -0
  190. package/dist/utils/json.js.map +1 -0
  191. package/dist/utils/json.mjs +94 -0
  192. package/dist/utils/json.mjs.map +1 -0
  193. package/dist/utils/middleware.js +14 -0
  194. package/dist/utils/middleware.js.map +1 -0
  195. package/dist/utils/middleware.mjs +12 -0
  196. package/dist/utils/middleware.mjs.map +1 -0
  197. package/dist/utils/providers.js +12 -0
  198. package/dist/utils/providers.js.map +1 -0
  199. package/dist/utils/providers.mjs +10 -0
  200. package/dist/utils/providers.mjs.map +1 -0
  201. package/dist/utils/schema.js +32 -0
  202. package/dist/utils/schema.js.map +1 -0
  203. package/dist/utils/schema.mjs +29 -0
  204. package/dist/utils/schema.mjs.map +1 -0
  205. package/dist/utils/stream.js +59 -0
  206. package/dist/utils/stream.js.map +1 -0
  207. package/dist/utils/stream.mjs +55 -0
  208. package/dist/utils/stream.mjs.map +1 -0
  209. package/dist/utils/transaction.js +93 -0
  210. package/dist/utils/transaction.js.map +1 -0
  211. package/dist/utils/transaction.mjs +91 -0
  212. package/dist/utils/transaction.mjs.map +1 -0
  213. package/package.json +5 -5
@@ -0,0 +1,15 @@
1
+ import * as index from './encryption/index.mjs';
2
+ export { index as encryption };
3
+ import * as stream from './stream.mjs';
4
+ export { stream };
5
+ import * as json from './json.mjs';
6
+ export { json };
7
+ import * as schema from './schema.mjs';
8
+ export { schema };
9
+ import * as transaction from './transaction.mjs';
10
+ export { transaction };
11
+ import * as middleware from './middleware.mjs';
12
+ export { middleware };
13
+ import * as diagnostic from './diagnostic.mjs';
14
+ export { diagnostic as diagnostics };
15
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
@@ -0,0 +1,96 @@
1
+ 'use strict';
2
+
3
+ var fp = require('lodash/fp');
4
+
5
+ const createContext = ()=>({
6
+ path: []
7
+ });
8
+ /**
9
+ * Compute differences between two JSON objects and returns them
10
+ *
11
+ * @param a - First object
12
+ * @param b - Second object
13
+ * @param ctx - Context used to keep track of the current path during recursion
14
+ */ const diff = (a, b, ctx = createContext())=>{
15
+ const diffs = [];
16
+ const { path } = ctx;
17
+ const aType = typeof a;
18
+ const bType = typeof b;
19
+ // Define helpers
20
+ const added = ()=>{
21
+ diffs.push({
22
+ kind: 'added',
23
+ path,
24
+ type: bType,
25
+ value: b
26
+ });
27
+ return diffs;
28
+ };
29
+ const deleted = ()=>{
30
+ diffs.push({
31
+ kind: 'deleted',
32
+ path,
33
+ type: aType,
34
+ value: a
35
+ });
36
+ return diffs;
37
+ };
38
+ const modified = ()=>{
39
+ diffs.push({
40
+ kind: 'modified',
41
+ path,
42
+ types: [
43
+ aType,
44
+ bType
45
+ ],
46
+ values: [
47
+ a,
48
+ b
49
+ ]
50
+ });
51
+ return diffs;
52
+ };
53
+ if (fp.isArray(a) && fp.isArray(b)) {
54
+ let k = 0;
55
+ for (const [aItem, bItem] of fp.zip(a, b)){
56
+ const kCtx = {
57
+ path: [
58
+ ...path,
59
+ k.toString()
60
+ ]
61
+ };
62
+ const kDiffs = diff(aItem, bItem, kCtx);
63
+ diffs.push(...kDiffs);
64
+ k += 1;
65
+ }
66
+ return diffs;
67
+ }
68
+ if (fp.isObject(a) && fp.isObject(b)) {
69
+ const keys = fp.uniq(Object.keys(a).concat(Object.keys(b)));
70
+ for (const key of keys){
71
+ const aValue = a[key];
72
+ const bValue = b[key];
73
+ const nestedDiffs = diff(aValue, bValue, {
74
+ path: [
75
+ ...path,
76
+ key
77
+ ]
78
+ });
79
+ diffs.push(...nestedDiffs);
80
+ }
81
+ return diffs;
82
+ }
83
+ if (!fp.isEqual(a, b)) {
84
+ if (aType === 'undefined') {
85
+ return added();
86
+ }
87
+ if (bType === 'undefined') {
88
+ return deleted();
89
+ }
90
+ return modified();
91
+ }
92
+ return diffs;
93
+ };
94
+
95
+ exports.diff = diff;
96
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sources":["../../src/utils/json.ts"],"sourcesContent":["import { isArray, isObject, zip, isEqual, uniq } from 'lodash/fp';\n\nconst createContext = (): Context => ({ path: [] });\n\n/**\n * Compute differences between two JSON objects and returns them\n *\n * @param a - First object\n * @param b - Second object\n * @param ctx - Context used to keep track of the current path during recursion\n */\nexport const diff = (a: unknown, b: unknown, ctx: Context = createContext()): Diff[] => {\n const diffs: Diff[] = [];\n const { path } = ctx;\n\n const aType = typeof a;\n const bType = typeof b;\n\n // Define helpers\n\n const added = () => {\n diffs.push({ kind: 'added', path, type: bType, value: b });\n return diffs;\n };\n\n const deleted = () => {\n diffs.push({ kind: 'deleted', path, type: aType, value: a });\n return diffs;\n };\n\n const modified = () => {\n diffs.push({\n kind: 'modified',\n path,\n types: [aType, bType],\n values: [a, b],\n });\n return diffs;\n };\n\n if (isArray(a) && isArray(b)) {\n let k = 0;\n\n for (const [aItem, bItem] of zip(a, b)) {\n const kCtx: Context = { path: [...path, k.toString()] };\n const kDiffs = diff(aItem, bItem, kCtx);\n\n diffs.push(...kDiffs);\n\n k += 1;\n }\n\n return diffs;\n }\n\n if (isObject(a) && isObject(b)) {\n const keys = uniq(Object.keys(a).concat(Object.keys(b)));\n\n for (const key of keys) {\n const aValue = (a as Record<string, unknown>)[key];\n const bValue = (b as Record<string, unknown>)[key];\n\n const nestedDiffs = diff(aValue, bValue, { path: [...path, key] });\n\n diffs.push(...nestedDiffs);\n }\n\n return diffs;\n }\n\n if (!isEqual(a, b)) {\n if (aType === 'undefined') {\n return added();\n }\n\n if (bType === 'undefined') {\n return deleted();\n }\n\n return modified();\n }\n\n return diffs;\n};\n\nexport interface AddedDiff<T = unknown> {\n kind: 'added';\n path: string[];\n type: string;\n value: T;\n}\n\nexport interface ModifiedDiff<T = unknown, P = unknown> {\n kind: 'modified';\n path: string[];\n types: [string, string];\n values: [T, P];\n}\n\nexport interface DeletedDiff<T = unknown> {\n kind: 'deleted';\n path: string[];\n type: string;\n value: T;\n}\n\nexport type Diff<T = unknown> = AddedDiff<T> | ModifiedDiff<T> | DeletedDiff<T>;\n\nexport interface Context {\n path: string[];\n}\n"],"names":["createContext","path","diff","a","b","ctx","diffs","aType","bType","added","push","kind","type","value","deleted","modified","types","values","isArray","k","aItem","bItem","zip","kCtx","toString","kDiffs","isObject","keys","uniq","Object","concat","key","aValue","bValue","nestedDiffs","isEqual"],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import { isArray, zip, isObject, uniq, isEqual } from 'lodash/fp';
2
+
3
+ const createContext = ()=>({
4
+ path: []
5
+ });
6
+ /**
7
+ * Compute differences between two JSON objects and returns them
8
+ *
9
+ * @param a - First object
10
+ * @param b - Second object
11
+ * @param ctx - Context used to keep track of the current path during recursion
12
+ */ const diff = (a, b, ctx = createContext())=>{
13
+ const diffs = [];
14
+ const { path } = ctx;
15
+ const aType = typeof a;
16
+ const bType = typeof b;
17
+ // Define helpers
18
+ const added = ()=>{
19
+ diffs.push({
20
+ kind: 'added',
21
+ path,
22
+ type: bType,
23
+ value: b
24
+ });
25
+ return diffs;
26
+ };
27
+ const deleted = ()=>{
28
+ diffs.push({
29
+ kind: 'deleted',
30
+ path,
31
+ type: aType,
32
+ value: a
33
+ });
34
+ return diffs;
35
+ };
36
+ const modified = ()=>{
37
+ diffs.push({
38
+ kind: 'modified',
39
+ path,
40
+ types: [
41
+ aType,
42
+ bType
43
+ ],
44
+ values: [
45
+ a,
46
+ b
47
+ ]
48
+ });
49
+ return diffs;
50
+ };
51
+ if (isArray(a) && isArray(b)) {
52
+ let k = 0;
53
+ for (const [aItem, bItem] of zip(a, b)){
54
+ const kCtx = {
55
+ path: [
56
+ ...path,
57
+ k.toString()
58
+ ]
59
+ };
60
+ const kDiffs = diff(aItem, bItem, kCtx);
61
+ diffs.push(...kDiffs);
62
+ k += 1;
63
+ }
64
+ return diffs;
65
+ }
66
+ if (isObject(a) && isObject(b)) {
67
+ const keys = uniq(Object.keys(a).concat(Object.keys(b)));
68
+ for (const key of keys){
69
+ const aValue = a[key];
70
+ const bValue = b[key];
71
+ const nestedDiffs = diff(aValue, bValue, {
72
+ path: [
73
+ ...path,
74
+ key
75
+ ]
76
+ });
77
+ diffs.push(...nestedDiffs);
78
+ }
79
+ return diffs;
80
+ }
81
+ if (!isEqual(a, b)) {
82
+ if (aType === 'undefined') {
83
+ return added();
84
+ }
85
+ if (bType === 'undefined') {
86
+ return deleted();
87
+ }
88
+ return modified();
89
+ }
90
+ return diffs;
91
+ };
92
+
93
+ export { diff };
94
+ //# sourceMappingURL=json.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.mjs","sources":["../../src/utils/json.ts"],"sourcesContent":["import { isArray, isObject, zip, isEqual, uniq } from 'lodash/fp';\n\nconst createContext = (): Context => ({ path: [] });\n\n/**\n * Compute differences between two JSON objects and returns them\n *\n * @param a - First object\n * @param b - Second object\n * @param ctx - Context used to keep track of the current path during recursion\n */\nexport const diff = (a: unknown, b: unknown, ctx: Context = createContext()): Diff[] => {\n const diffs: Diff[] = [];\n const { path } = ctx;\n\n const aType = typeof a;\n const bType = typeof b;\n\n // Define helpers\n\n const added = () => {\n diffs.push({ kind: 'added', path, type: bType, value: b });\n return diffs;\n };\n\n const deleted = () => {\n diffs.push({ kind: 'deleted', path, type: aType, value: a });\n return diffs;\n };\n\n const modified = () => {\n diffs.push({\n kind: 'modified',\n path,\n types: [aType, bType],\n values: [a, b],\n });\n return diffs;\n };\n\n if (isArray(a) && isArray(b)) {\n let k = 0;\n\n for (const [aItem, bItem] of zip(a, b)) {\n const kCtx: Context = { path: [...path, k.toString()] };\n const kDiffs = diff(aItem, bItem, kCtx);\n\n diffs.push(...kDiffs);\n\n k += 1;\n }\n\n return diffs;\n }\n\n if (isObject(a) && isObject(b)) {\n const keys = uniq(Object.keys(a).concat(Object.keys(b)));\n\n for (const key of keys) {\n const aValue = (a as Record<string, unknown>)[key];\n const bValue = (b as Record<string, unknown>)[key];\n\n const nestedDiffs = diff(aValue, bValue, { path: [...path, key] });\n\n diffs.push(...nestedDiffs);\n }\n\n return diffs;\n }\n\n if (!isEqual(a, b)) {\n if (aType === 'undefined') {\n return added();\n }\n\n if (bType === 'undefined') {\n return deleted();\n }\n\n return modified();\n }\n\n return diffs;\n};\n\nexport interface AddedDiff<T = unknown> {\n kind: 'added';\n path: string[];\n type: string;\n value: T;\n}\n\nexport interface ModifiedDiff<T = unknown, P = unknown> {\n kind: 'modified';\n path: string[];\n types: [string, string];\n values: [T, P];\n}\n\nexport interface DeletedDiff<T = unknown> {\n kind: 'deleted';\n path: string[];\n type: string;\n value: T;\n}\n\nexport type Diff<T = unknown> = AddedDiff<T> | ModifiedDiff<T> | DeletedDiff<T>;\n\nexport interface Context {\n path: string[];\n}\n"],"names":["createContext","path","diff","a","b","ctx","diffs","aType","bType","added","push","kind","type","value","deleted","modified","types","values","isArray","k","aItem","bItem","zip","kCtx","toString","kDiffs","isObject","keys","uniq","Object","concat","key","aValue","bValue","nestedDiffs","isEqual"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ const runMiddleware = async (context, middlewares)=>{
4
+ if (!middlewares.length) {
5
+ return;
6
+ }
7
+ const cb = middlewares[0];
8
+ await cb(context, async (newContext)=>{
9
+ await runMiddleware(newContext, middlewares.slice(1));
10
+ });
11
+ };
12
+
13
+ exports.runMiddleware = runMiddleware;
14
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sources":["../../src/utils/middleware.ts"],"sourcesContent":["import { Middleware } from '../../types';\n\nexport const runMiddleware = async <T>(context: T, middlewares: Middleware<T>[]): Promise<void> => {\n if (!middlewares.length) {\n return;\n }\n const cb = middlewares[0];\n await cb(context, async (newContext: T) => {\n await runMiddleware(newContext, middlewares.slice(1));\n });\n};\n"],"names":["runMiddleware","context","middlewares","length","cb","newContext","slice"],"mappings":";;AAEO,MAAMA,aAAgB,GAAA,OAAUC,OAAYC,EAAAA,WAAAA,GAAAA;IACjD,IAAI,CAACA,WAAYC,CAAAA,MAAM,EAAE;AACvB,QAAA;AACF;IACA,MAAMC,EAAAA,GAAKF,WAAW,CAAC,CAAE,CAAA;IACzB,MAAME,EAAAA,CAAGH,SAAS,OAAOI,UAAAA,GAAAA;AACvB,QAAA,MAAML,aAAcK,CAAAA,UAAAA,EAAYH,WAAYI,CAAAA,KAAK,CAAC,CAAA,CAAA,CAAA;AACpD,KAAA,CAAA;AACF;;;;"}
@@ -0,0 +1,12 @@
1
+ const runMiddleware = async (context, middlewares)=>{
2
+ if (!middlewares.length) {
3
+ return;
4
+ }
5
+ const cb = middlewares[0];
6
+ await cb(context, async (newContext)=>{
7
+ await runMiddleware(newContext, middlewares.slice(1));
8
+ });
9
+ };
10
+
11
+ export { runMiddleware };
12
+ //# sourceMappingURL=middleware.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.mjs","sources":["../../src/utils/middleware.ts"],"sourcesContent":["import { Middleware } from '../../types';\n\nexport const runMiddleware = async <T>(context: T, middlewares: Middleware<T>[]): Promise<void> => {\n if (!middlewares.length) {\n return;\n }\n const cb = middlewares[0];\n await cb(context, async (newContext: T) => {\n await runMiddleware(newContext, middlewares.slice(1));\n });\n};\n"],"names":["runMiddleware","context","middlewares","length","cb","newContext","slice"],"mappings":"AAEO,MAAMA,aAAgB,GAAA,OAAUC,OAAYC,EAAAA,WAAAA,GAAAA;IACjD,IAAI,CAACA,WAAYC,CAAAA,MAAM,EAAE;AACvB,QAAA;AACF;IACA,MAAMC,EAAAA,GAAKF,WAAW,CAAC,CAAE,CAAA;IACzB,MAAME,EAAAA,CAAGH,SAAS,OAAOI,UAAAA,GAAAA;AACvB,QAAA,MAAML,aAAcK,CAAAA,UAAAA,EAAYH,WAAYI,CAAAA,KAAK,CAAC,CAAA,CAAA,CAAA;AACpD,KAAA,CAAA;AACF;;;;"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var providers = require('../errors/providers.js');
4
+
5
+ const assertValidStrapi = (strapi, msg = '')=>{
6
+ if (!strapi) {
7
+ throw new providers.ProviderInitializationError(`${msg}. Strapi instance not found.`);
8
+ }
9
+ };
10
+
11
+ exports.assertValidStrapi = assertValidStrapi;
12
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sources":["../../src/utils/providers.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { ProviderInitializationError } from '../errors/providers';\n\nexport type ValidStrapiAssertion = (strapi: unknown, msg?: string) => asserts strapi is Core.Strapi;\n\nexport const assertValidStrapi: ValidStrapiAssertion = (strapi?: unknown, msg = '') => {\n if (!strapi) {\n throw new ProviderInitializationError(`${msg}. Strapi instance not found.`);\n }\n};\n"],"names":["assertValidStrapi","strapi","msg","ProviderInitializationError"],"mappings":";;;;AAMaA,MAAAA,iBAAAA,GAA0C,CAACC,MAAAA,EAAkBC,MAAM,EAAE,GAAA;AAChF,IAAA,IAAI,CAACD,MAAQ,EAAA;AACX,QAAA,MAAM,IAAIE,qCAA4B,CAAA,CAAC,EAAED,GAAAA,CAAI,4BAA4B,CAAC,CAAA;AAC5E;AACF;;;;"}
@@ -0,0 +1,10 @@
1
+ import { ProviderInitializationError } from '../errors/providers.mjs';
2
+
3
+ const assertValidStrapi = (strapi, msg = '')=>{
4
+ if (!strapi) {
5
+ throw new ProviderInitializationError(`${msg}. Strapi instance not found.`);
6
+ }
7
+ };
8
+
9
+ export { assertValidStrapi };
10
+ //# sourceMappingURL=providers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.mjs","sources":["../../src/utils/providers.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { ProviderInitializationError } from '../errors/providers';\n\nexport type ValidStrapiAssertion = (strapi: unknown, msg?: string) => asserts strapi is Core.Strapi;\n\nexport const assertValidStrapi: ValidStrapiAssertion = (strapi?: unknown, msg = '') => {\n if (!strapi) {\n throw new ProviderInitializationError(`${msg}. Strapi instance not found.`);\n }\n};\n"],"names":["assertValidStrapi","strapi","msg","ProviderInitializationError"],"mappings":";;AAMaA,MAAAA,iBAAAA,GAA0C,CAACC,MAAAA,EAAkBC,MAAM,EAAE,GAAA;AAChF,IAAA,IAAI,CAACD,MAAQ,EAAA;AACX,QAAA,MAAM,IAAIE,2BAA4B,CAAA,CAAC,EAAED,GAAAA,CAAI,4BAA4B,CAAC,CAAA;AAC5E;AACF;;;;"}
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ var fp = require('lodash/fp');
4
+
5
+ /**
6
+ * List of schema properties that should be kept when sanitizing schemas
7
+ */ const VALID_SCHEMA_PROPERTIES = [
8
+ 'collectionName',
9
+ 'info',
10
+ 'options',
11
+ 'pluginOptions',
12
+ 'attributes',
13
+ 'kind',
14
+ 'modelType',
15
+ 'modelName',
16
+ 'uid',
17
+ 'plugin',
18
+ 'globalId'
19
+ ];
20
+ /**
21
+ * Sanitize a schemas dictionary by omitting unwanted properties
22
+ * The list of allowed properties can be found here: {@link VALID_SCHEMA_PROPERTIES}
23
+ */ const mapSchemasValues = (schemas)=>{
24
+ return fp.mapValues(fp.pick(VALID_SCHEMA_PROPERTIES), schemas);
25
+ };
26
+ const schemasToValidJSON = (schemas)=>{
27
+ return JSON.parse(JSON.stringify(schemas));
28
+ };
29
+
30
+ exports.mapSchemasValues = mapSchemasValues;
31
+ exports.schemasToValidJSON = schemasToValidJSON;
32
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sources":["../../src/utils/schema.ts"],"sourcesContent":["import type { Struct, Utils } from '@strapi/types';\nimport { mapValues, pick } from 'lodash/fp';\n\n/**\n * List of schema properties that should be kept when sanitizing schemas\n */\nconst VALID_SCHEMA_PROPERTIES = [\n 'collectionName',\n 'info',\n 'options',\n 'pluginOptions',\n 'attributes',\n 'kind',\n 'modelType',\n 'modelName',\n 'uid',\n 'plugin',\n 'globalId',\n];\n\n/**\n * Sanitize a schemas dictionary by omitting unwanted properties\n * The list of allowed properties can be found here: {@link VALID_SCHEMA_PROPERTIES}\n */\nexport const mapSchemasValues = (schemas: Utils.String.Dict<Struct.Schema>) => {\n return mapValues(pick(VALID_SCHEMA_PROPERTIES), schemas) as Utils.String.Dict<Struct.Schema>;\n};\n\nexport const schemasToValidJSON = (schemas: Utils.String.Dict<Struct.Schema>) => {\n return JSON.parse(JSON.stringify(schemas));\n};\n"],"names":["VALID_SCHEMA_PROPERTIES","mapSchemasValues","schemas","mapValues","pick","schemasToValidJSON","JSON","parse","stringify"],"mappings":";;;;AAGA;;AAEC,IACD,MAAMA,uBAA0B,GAAA;AAC9B,IAAA,gBAAA;AACA,IAAA,MAAA;AACA,IAAA,SAAA;AACA,IAAA,eAAA;AACA,IAAA,YAAA;AACA,IAAA,MAAA;AACA,IAAA,WAAA;AACA,IAAA,WAAA;AACA,IAAA,KAAA;AACA,IAAA,QAAA;AACA,IAAA;AACD,CAAA;AAED;;;IAIaC,MAAAA,gBAAAA,GAAmB,CAACC,OAAAA,GAAAA;IAC/B,OAAOC,YAAAA,CAAUC,QAAKJ,uBAA0BE,CAAAA,EAAAA,OAAAA,CAAAA;AAClD;AAEO,MAAMG,qBAAqB,CAACH,OAAAA,GAAAA;AACjC,IAAA,OAAOI,IAAKC,CAAAA,KAAK,CAACD,IAAAA,CAAKE,SAAS,CAACN,OAAAA,CAAAA,CAAAA;AACnC;;;;;"}
@@ -0,0 +1,29 @@
1
+ import { mapValues, pick } from 'lodash/fp';
2
+
3
+ /**
4
+ * List of schema properties that should be kept when sanitizing schemas
5
+ */ const VALID_SCHEMA_PROPERTIES = [
6
+ 'collectionName',
7
+ 'info',
8
+ 'options',
9
+ 'pluginOptions',
10
+ 'attributes',
11
+ 'kind',
12
+ 'modelType',
13
+ 'modelName',
14
+ 'uid',
15
+ 'plugin',
16
+ 'globalId'
17
+ ];
18
+ /**
19
+ * Sanitize a schemas dictionary by omitting unwanted properties
20
+ * The list of allowed properties can be found here: {@link VALID_SCHEMA_PROPERTIES}
21
+ */ const mapSchemasValues = (schemas)=>{
22
+ return mapValues(pick(VALID_SCHEMA_PROPERTIES), schemas);
23
+ };
24
+ const schemasToValidJSON = (schemas)=>{
25
+ return JSON.parse(JSON.stringify(schemas));
26
+ };
27
+
28
+ export { mapSchemasValues, schemasToValidJSON };
29
+ //# sourceMappingURL=schema.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.mjs","sources":["../../src/utils/schema.ts"],"sourcesContent":["import type { Struct, Utils } from '@strapi/types';\nimport { mapValues, pick } from 'lodash/fp';\n\n/**\n * List of schema properties that should be kept when sanitizing schemas\n */\nconst VALID_SCHEMA_PROPERTIES = [\n 'collectionName',\n 'info',\n 'options',\n 'pluginOptions',\n 'attributes',\n 'kind',\n 'modelType',\n 'modelName',\n 'uid',\n 'plugin',\n 'globalId',\n];\n\n/**\n * Sanitize a schemas dictionary by omitting unwanted properties\n * The list of allowed properties can be found here: {@link VALID_SCHEMA_PROPERTIES}\n */\nexport const mapSchemasValues = (schemas: Utils.String.Dict<Struct.Schema>) => {\n return mapValues(pick(VALID_SCHEMA_PROPERTIES), schemas) as Utils.String.Dict<Struct.Schema>;\n};\n\nexport const schemasToValidJSON = (schemas: Utils.String.Dict<Struct.Schema>) => {\n return JSON.parse(JSON.stringify(schemas));\n};\n"],"names":["VALID_SCHEMA_PROPERTIES","mapSchemasValues","schemas","mapValues","pick","schemasToValidJSON","JSON","parse","stringify"],"mappings":";;AAGA;;AAEC,IACD,MAAMA,uBAA0B,GAAA;AAC9B,IAAA,gBAAA;AACA,IAAA,MAAA;AACA,IAAA,SAAA;AACA,IAAA,eAAA;AACA,IAAA,YAAA;AACA,IAAA,MAAA;AACA,IAAA,WAAA;AACA,IAAA,WAAA;AACA,IAAA,KAAA;AACA,IAAA,QAAA;AACA,IAAA;AACD,CAAA;AAED;;;IAIaC,MAAAA,gBAAAA,GAAmB,CAACC,OAAAA,GAAAA;IAC/B,OAAOC,SAAAA,CAAUC,KAAKJ,uBAA0BE,CAAAA,EAAAA,OAAAA,CAAAA;AAClD;AAEO,MAAMG,qBAAqB,CAACH,OAAAA,GAAAA;AACjC,IAAA,OAAOI,IAAKC,CAAAA,KAAK,CAACD,IAAAA,CAAKE,SAAS,CAACN,OAAAA,CAAAA,CAAAA;AACnC;;;;"}
@@ -0,0 +1,59 @@
1
+ 'use strict';
2
+
3
+ var stream = require('stream');
4
+
5
+ /**
6
+ * Create a filter stream that discard chunks which doesn't satisfies the given predicate
7
+ *
8
+ * @param predicate - A filter predicate, takes a stream data chunk as parameter and returns a boolean value
9
+ * @param options - Transform stream options
10
+ */ const filter = (predicate, options = {
11
+ objectMode: true
12
+ })=>{
13
+ return new stream.Transform({
14
+ ...options,
15
+ async transform (chunk, _encoding, callback) {
16
+ const keep = await predicate(chunk);
17
+ callback(null, keep ? chunk : undefined);
18
+ }
19
+ });
20
+ };
21
+ /**
22
+ * Create a map stream that transform chunks using the given predicate
23
+ *
24
+ * @param predicate - A map predicate, takes a stream data chunk as parameter and returns a mapped value
25
+ * @param options - Transform stream options
26
+ */ const map = (predicate, options = {
27
+ objectMode: true
28
+ })=>{
29
+ return new stream.Transform({
30
+ ...options,
31
+ async transform (chunk, _encoding, callback) {
32
+ const mappedValue = await predicate(chunk);
33
+ callback(null, mappedValue);
34
+ }
35
+ });
36
+ };
37
+ /**
38
+ * Collect every chunks from a Readable stream.
39
+ *
40
+ * @param stream - The redable stream to collect data from
41
+ * @param options.destroy - If set to true, it automatically calls `destroy()` on the given stream upon receiving the 'end' event
42
+ */ const collect = (stream, options = {
43
+ destroy: true
44
+ })=>{
45
+ const chunks = [];
46
+ return new Promise((resolve, reject)=>{
47
+ stream.on('close', ()=>resolve(chunks)).on('error', reject).on('data', (chunk)=>chunks.push(chunk)).on('end', ()=>{
48
+ if (options.destroy) {
49
+ stream.destroy();
50
+ }
51
+ resolve(chunks);
52
+ });
53
+ });
54
+ };
55
+
56
+ exports.collect = collect;
57
+ exports.filter = filter;
58
+ exports.map = map;
59
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sources":["../../src/utils/stream.ts"],"sourcesContent":["import { Transform, Readable } from 'stream';\n\ntype TransformOptions = ConstructorParameters<typeof Transform>[0];\n\n/**\n * Create a filter stream that discard chunks which doesn't satisfies the given predicate\n *\n * @param predicate - A filter predicate, takes a stream data chunk as parameter and returns a boolean value\n * @param options - Transform stream options\n */\nexport const filter = <T>(\n predicate: (value: T) => boolean | Promise<boolean>,\n options: TransformOptions = { objectMode: true }\n): Transform => {\n return new Transform({\n ...options,\n\n async transform(chunk, _encoding, callback) {\n const keep = await predicate(chunk);\n\n callback(null, keep ? chunk : undefined);\n },\n });\n};\n\n/**\n * Create a map stream that transform chunks using the given predicate\n *\n * @param predicate - A map predicate, takes a stream data chunk as parameter and returns a mapped value\n * @param options - Transform stream options\n */\nexport const map = <T, U = T>(\n predicate: (value: T) => U | Promise<U>,\n options: TransformOptions = { objectMode: true }\n): Transform => {\n return new Transform({\n ...options,\n\n async transform(chunk, _encoding, callback) {\n const mappedValue = await predicate(chunk);\n\n callback(null, mappedValue);\n },\n });\n};\n\n/**\n * Collect every chunks from a Readable stream.\n *\n * @param stream - The redable stream to collect data from\n * @param options.destroy - If set to true, it automatically calls `destroy()` on the given stream upon receiving the 'end' event\n */\nexport const collect = <T = unknown>(\n stream: Readable,\n options: { destroy: boolean } = { destroy: true }\n): Promise<T[]> => {\n const chunks: T[] = [];\n\n return new Promise((resolve, reject) => {\n stream\n .on('close', () => resolve(chunks))\n .on('error', reject)\n .on('data', (chunk) => chunks.push(chunk))\n .on('end', () => {\n if (options.destroy) {\n stream.destroy();\n }\n\n resolve(chunks);\n });\n });\n};\n"],"names":["filter","predicate","options","objectMode","Transform","transform","chunk","_encoding","callback","keep","undefined","map","mappedValue","collect","stream","destroy","chunks","Promise","resolve","reject","on","push"],"mappings":";;;;AAIA;;;;;AAKC,IACM,MAAMA,MAAS,GAAA,CACpBC,WACAC,OAA4B,GAAA;IAAEC,UAAY,EAAA;AAAK,CAAC,GAAA;AAEhD,IAAA,OAAO,IAAIC,gBAAU,CAAA;AACnB,QAAA,GAAGF,OAAO;AAEV,QAAA,MAAMG,SAAUC,CAAAA,CAAAA,KAAK,EAAEC,SAAS,EAAEC,QAAQ,EAAA;YACxC,MAAMC,IAAAA,GAAO,MAAMR,SAAUK,CAAAA,KAAAA,CAAAA;YAE7BE,QAAS,CAAA,IAAA,EAAMC,OAAOH,KAAQI,GAAAA,SAAAA,CAAAA;AAChC;AACF,KAAA,CAAA;AACF;AAEA;;;;;AAKC,IACM,MAAMC,GAAM,GAAA,CACjBV,WACAC,OAA4B,GAAA;IAAEC,UAAY,EAAA;AAAK,CAAC,GAAA;AAEhD,IAAA,OAAO,IAAIC,gBAAU,CAAA;AACnB,QAAA,GAAGF,OAAO;AAEV,QAAA,MAAMG,SAAUC,CAAAA,CAAAA,KAAK,EAAEC,SAAS,EAAEC,QAAQ,EAAA;YACxC,MAAMI,WAAAA,GAAc,MAAMX,SAAUK,CAAAA,KAAAA,CAAAA;AAEpCE,YAAAA,QAAAA,CAAS,IAAMI,EAAAA,WAAAA,CAAAA;AACjB;AACF,KAAA,CAAA;AACF;AAEA;;;;;AAKC,IACM,MAAMC,OAAU,GAAA,CACrBC,QACAZ,OAAgC,GAAA;IAAEa,OAAS,EAAA;AAAK,CAAC,GAAA;AAEjD,IAAA,MAAMC,SAAc,EAAE;IAEtB,OAAO,IAAIC,OAAQ,CAAA,CAACC,OAASC,EAAAA,MAAAA,GAAAA;QAC3BL,MACGM,CAAAA,EAAE,CAAC,OAAS,EAAA,IAAMF,QAAQF,MAC1BI,CAAAA,CAAAA,CAAAA,EAAE,CAAC,OAASD,EAAAA,MAAAA,CAAAA,CACZC,EAAE,CAAC,MAAA,EAAQ,CAACd,KAAUU,GAAAA,MAAAA,CAAOK,IAAI,CAACf,KAAAA,CAAAA,CAAAA,CAClCc,EAAE,CAAC,KAAO,EAAA,IAAA;YACT,IAAIlB,OAAAA,CAAQa,OAAO,EAAE;AACnBD,gBAAAA,MAAAA,CAAOC,OAAO,EAAA;AAChB;YAEAG,OAAQF,CAAAA,MAAAA,CAAAA;AACV,SAAA,CAAA;AACJ,KAAA,CAAA;AACF;;;;;;"}
@@ -0,0 +1,55 @@
1
+ import { Transform } from 'stream';
2
+
3
+ /**
4
+ * Create a filter stream that discard chunks which doesn't satisfies the given predicate
5
+ *
6
+ * @param predicate - A filter predicate, takes a stream data chunk as parameter and returns a boolean value
7
+ * @param options - Transform stream options
8
+ */ const filter = (predicate, options = {
9
+ objectMode: true
10
+ })=>{
11
+ return new Transform({
12
+ ...options,
13
+ async transform (chunk, _encoding, callback) {
14
+ const keep = await predicate(chunk);
15
+ callback(null, keep ? chunk : undefined);
16
+ }
17
+ });
18
+ };
19
+ /**
20
+ * Create a map stream that transform chunks using the given predicate
21
+ *
22
+ * @param predicate - A map predicate, takes a stream data chunk as parameter and returns a mapped value
23
+ * @param options - Transform stream options
24
+ */ const map = (predicate, options = {
25
+ objectMode: true
26
+ })=>{
27
+ return new Transform({
28
+ ...options,
29
+ async transform (chunk, _encoding, callback) {
30
+ const mappedValue = await predicate(chunk);
31
+ callback(null, mappedValue);
32
+ }
33
+ });
34
+ };
35
+ /**
36
+ * Collect every chunks from a Readable stream.
37
+ *
38
+ * @param stream - The redable stream to collect data from
39
+ * @param options.destroy - If set to true, it automatically calls `destroy()` on the given stream upon receiving the 'end' event
40
+ */ const collect = (stream, options = {
41
+ destroy: true
42
+ })=>{
43
+ const chunks = [];
44
+ return new Promise((resolve, reject)=>{
45
+ stream.on('close', ()=>resolve(chunks)).on('error', reject).on('data', (chunk)=>chunks.push(chunk)).on('end', ()=>{
46
+ if (options.destroy) {
47
+ stream.destroy();
48
+ }
49
+ resolve(chunks);
50
+ });
51
+ });
52
+ };
53
+
54
+ export { collect, filter, map };
55
+ //# sourceMappingURL=stream.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.mjs","sources":["../../src/utils/stream.ts"],"sourcesContent":["import { Transform, Readable } from 'stream';\n\ntype TransformOptions = ConstructorParameters<typeof Transform>[0];\n\n/**\n * Create a filter stream that discard chunks which doesn't satisfies the given predicate\n *\n * @param predicate - A filter predicate, takes a stream data chunk as parameter and returns a boolean value\n * @param options - Transform stream options\n */\nexport const filter = <T>(\n predicate: (value: T) => boolean | Promise<boolean>,\n options: TransformOptions = { objectMode: true }\n): Transform => {\n return new Transform({\n ...options,\n\n async transform(chunk, _encoding, callback) {\n const keep = await predicate(chunk);\n\n callback(null, keep ? chunk : undefined);\n },\n });\n};\n\n/**\n * Create a map stream that transform chunks using the given predicate\n *\n * @param predicate - A map predicate, takes a stream data chunk as parameter and returns a mapped value\n * @param options - Transform stream options\n */\nexport const map = <T, U = T>(\n predicate: (value: T) => U | Promise<U>,\n options: TransformOptions = { objectMode: true }\n): Transform => {\n return new Transform({\n ...options,\n\n async transform(chunk, _encoding, callback) {\n const mappedValue = await predicate(chunk);\n\n callback(null, mappedValue);\n },\n });\n};\n\n/**\n * Collect every chunks from a Readable stream.\n *\n * @param stream - The redable stream to collect data from\n * @param options.destroy - If set to true, it automatically calls `destroy()` on the given stream upon receiving the 'end' event\n */\nexport const collect = <T = unknown>(\n stream: Readable,\n options: { destroy: boolean } = { destroy: true }\n): Promise<T[]> => {\n const chunks: T[] = [];\n\n return new Promise((resolve, reject) => {\n stream\n .on('close', () => resolve(chunks))\n .on('error', reject)\n .on('data', (chunk) => chunks.push(chunk))\n .on('end', () => {\n if (options.destroy) {\n stream.destroy();\n }\n\n resolve(chunks);\n });\n });\n};\n"],"names":["filter","predicate","options","objectMode","Transform","transform","chunk","_encoding","callback","keep","undefined","map","mappedValue","collect","stream","destroy","chunks","Promise","resolve","reject","on","push"],"mappings":";;AAIA;;;;;AAKC,IACM,MAAMA,MAAS,GAAA,CACpBC,WACAC,OAA4B,GAAA;IAAEC,UAAY,EAAA;AAAK,CAAC,GAAA;AAEhD,IAAA,OAAO,IAAIC,SAAU,CAAA;AACnB,QAAA,GAAGF,OAAO;AAEV,QAAA,MAAMG,SAAUC,CAAAA,CAAAA,KAAK,EAAEC,SAAS,EAAEC,QAAQ,EAAA;YACxC,MAAMC,IAAAA,GAAO,MAAMR,SAAUK,CAAAA,KAAAA,CAAAA;YAE7BE,QAAS,CAAA,IAAA,EAAMC,OAAOH,KAAQI,GAAAA,SAAAA,CAAAA;AAChC;AACF,KAAA,CAAA;AACF;AAEA;;;;;AAKC,IACM,MAAMC,GAAM,GAAA,CACjBV,WACAC,OAA4B,GAAA;IAAEC,UAAY,EAAA;AAAK,CAAC,GAAA;AAEhD,IAAA,OAAO,IAAIC,SAAU,CAAA;AACnB,QAAA,GAAGF,OAAO;AAEV,QAAA,MAAMG,SAAUC,CAAAA,CAAAA,KAAK,EAAEC,SAAS,EAAEC,QAAQ,EAAA;YACxC,MAAMI,WAAAA,GAAc,MAAMX,SAAUK,CAAAA,KAAAA,CAAAA;AAEpCE,YAAAA,QAAAA,CAAS,IAAMI,EAAAA,WAAAA,CAAAA;AACjB;AACF,KAAA,CAAA;AACF;AAEA;;;;;AAKC,IACM,MAAMC,OAAU,GAAA,CACrBC,QACAZ,OAAgC,GAAA;IAAEa,OAAS,EAAA;AAAK,CAAC,GAAA;AAEjD,IAAA,MAAMC,SAAc,EAAE;IAEtB,OAAO,IAAIC,OAAQ,CAAA,CAACC,OAASC,EAAAA,MAAAA,GAAAA;QAC3BL,MACGM,CAAAA,EAAE,CAAC,OAAS,EAAA,IAAMF,QAAQF,MAC1BI,CAAAA,CAAAA,CAAAA,EAAE,CAAC,OAASD,EAAAA,MAAAA,CAAAA,CACZC,EAAE,CAAC,MAAA,EAAQ,CAACd,KAAUU,GAAAA,MAAAA,CAAOK,IAAI,CAACf,KAAAA,CAAAA,CAAAA,CAClCc,EAAE,CAAC,KAAO,EAAA,IAAA;YACT,IAAIlB,OAAAA,CAAQa,OAAO,EAAE;AACnBD,gBAAAA,MAAAA,CAAOC,OAAO,EAAA;AAChB;YAEAG,OAAQF,CAAAA,MAAAA,CAAAA;AACV,SAAA,CAAA;AACJ,KAAA,CAAA;AACF;;;;"}
@@ -0,0 +1,93 @@
1
+ 'use strict';
2
+
3
+ var events = require('events');
4
+ var crypto = require('crypto');
5
+
6
+ const createTransaction = (strapi)=>{
7
+ const fns = [];
8
+ let done = false;
9
+ let resume = null;
10
+ const e = new events.EventEmitter();
11
+ e.on('spawn', (uuid, cb)=>{
12
+ fns.push({
13
+ fn: cb,
14
+ uuid
15
+ });
16
+ resume?.();
17
+ });
18
+ e.on('close', ()=>{
19
+ e.removeAllListeners('rollback');
20
+ e.removeAllListeners('spawn');
21
+ done = true;
22
+ resume?.();
23
+ });
24
+ strapi.db.transaction(async ({ trx, rollback })=>{
25
+ e.once('rollback', async ()=>{
26
+ e.removeAllListeners('close');
27
+ e.removeAllListeners('spawn');
28
+ try {
29
+ await rollback();
30
+ e.emit('rollback_completed');
31
+ } catch {
32
+ e.emit('rollback_failed');
33
+ } finally{
34
+ done = true;
35
+ resume?.();
36
+ }
37
+ });
38
+ while(!done){
39
+ while(fns.length){
40
+ const item = fns.shift();
41
+ if (item) {
42
+ const { fn, uuid } = item;
43
+ try {
44
+ const res = await fn(trx);
45
+ e.emit(uuid, {
46
+ data: res
47
+ });
48
+ } catch (error) {
49
+ e.emit(uuid, {
50
+ error
51
+ });
52
+ }
53
+ }
54
+ }
55
+ if (!done && !fns.length) {
56
+ // eslint-disable-next-line @typescript-eslint/no-loop-func
57
+ await new Promise((resolve)=>{
58
+ resume = resolve;
59
+ });
60
+ }
61
+ }
62
+ });
63
+ return {
64
+ async attach (callback) {
65
+ const uuid = crypto.randomUUID();
66
+ e.emit('spawn', uuid, callback);
67
+ return new Promise((resolve, reject)=>{
68
+ e.on(uuid, ({ data, error })=>{
69
+ if (data) {
70
+ resolve(data);
71
+ }
72
+ if (error) {
73
+ reject(error);
74
+ }
75
+ resolve(undefined);
76
+ });
77
+ });
78
+ },
79
+ end () {
80
+ return e.emit('close');
81
+ },
82
+ rollback () {
83
+ return new Promise((resolve)=>{
84
+ e.emit('rollback');
85
+ e.once('rollback_failed', ()=>resolve(false));
86
+ e.once('rollback_completed', ()=>resolve(true));
87
+ });
88
+ }
89
+ };
90
+ };
91
+
92
+ exports.createTransaction = createTransaction;
93
+ //# sourceMappingURL=transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.js","sources":["../../src/utils/transaction.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { randomUUID } from 'crypto';\nimport type { Core } from '@strapi/types';\n\nimport { Transaction, TransactionCallback } from '../../types/utils';\n\nexport const createTransaction = (strapi: Core.Strapi): Transaction => {\n const fns: { fn: TransactionCallback; uuid: string }[] = [];\n\n let done = false;\n let resume: null | (() => void) = null;\n\n const e = new EventEmitter();\n e.on('spawn', (uuid, cb) => {\n fns.push({ fn: cb, uuid });\n resume?.();\n });\n\n e.on('close', () => {\n e.removeAllListeners('rollback');\n e.removeAllListeners('spawn');\n\n done = true;\n resume?.();\n });\n\n strapi.db.transaction(async ({ trx, rollback }) => {\n e.once('rollback', async () => {\n e.removeAllListeners('close');\n e.removeAllListeners('spawn');\n\n try {\n await rollback();\n e.emit('rollback_completed');\n } catch {\n e.emit('rollback_failed');\n } finally {\n done = true;\n resume?.();\n }\n });\n\n while (!done) {\n while (fns.length) {\n const item = fns.shift();\n\n if (item) {\n const { fn, uuid } = item;\n\n try {\n const res = await fn(trx);\n e.emit(uuid, { data: res });\n } catch (error) {\n e.emit(uuid, { error });\n }\n }\n }\n if (!done && !fns.length) {\n // eslint-disable-next-line @typescript-eslint/no-loop-func\n await new Promise<void>((resolve) => {\n resume = resolve;\n });\n }\n }\n });\n\n return {\n async attach<T = undefined>(callback: TransactionCallback): Promise<T | undefined> {\n const uuid = randomUUID();\n e.emit('spawn', uuid, callback);\n return new Promise<T | undefined>((resolve, reject) => {\n e.on(uuid, ({ data, error }) => {\n if (data) {\n resolve(data);\n }\n\n if (error) {\n reject(error);\n }\n resolve(undefined);\n });\n });\n },\n\n end() {\n return e.emit('close');\n },\n\n rollback() {\n return new Promise<boolean>((resolve) => {\n e.emit('rollback');\n\n e.once('rollback_failed', () => resolve(false));\n e.once('rollback_completed', () => resolve(true));\n });\n },\n };\n};\n"],"names":["createTransaction","strapi","fns","done","resume","e","EventEmitter","on","uuid","cb","push","fn","removeAllListeners","db","transaction","trx","rollback","once","emit","length","item","shift","res","data","error","Promise","resolve","attach","callback","randomUUID","reject","undefined","end"],"mappings":"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"}