@strapi/utils 4.10.1-experimental.0 → 4.10.2-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/dist/async.d.ts +15 -0
  2. package/dist/async.js +33 -0
  3. package/dist/async.js.map +1 -0
  4. package/dist/code-generator.d.ts +2 -0
  5. package/dist/code-generator.js +11 -0
  6. package/dist/code-generator.js.map +1 -0
  7. package/dist/config.d.ts +8 -0
  8. package/dist/config.js +79 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/content-types.d.ts +60 -0
  11. package/dist/content-types.js +143 -0
  12. package/dist/content-types.js.map +1 -0
  13. package/dist/env-helper.d.ts +2 -0
  14. package/dist/env-helper.js +83 -0
  15. package/dist/env-helper.js.map +1 -0
  16. package/dist/errors.d.ts +37 -0
  17. package/dist/errors.js +100 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/file.d.ts +16 -0
  20. package/dist/file.js +54 -0
  21. package/dist/file.js.map +1 -0
  22. package/dist/format-yup-error.d.ts +10 -0
  23. package/dist/format-yup-error.js +17 -0
  24. package/dist/format-yup-error.js.map +1 -0
  25. package/dist/hooks.d.ts +92 -0
  26. package/dist/hooks.js +89 -0
  27. package/dist/hooks.js.map +1 -0
  28. package/dist/import-default.d.ts +2 -0
  29. package/dist/import-default.js +7 -0
  30. package/dist/import-default.js.map +1 -0
  31. package/dist/index.d.ts +30 -0
  32. package/dist/index.js +82 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/object-formatting.d.ts +3 -0
  35. package/dist/object-formatting.js +14 -0
  36. package/dist/object-formatting.js.map +1 -0
  37. package/dist/pagination.d.ts +14 -0
  38. package/dist/pagination.js +80 -0
  39. package/dist/pagination.js.map +1 -0
  40. package/dist/parse-multipart.d.ts +8 -0
  41. package/dist/parse-multipart.js +36 -0
  42. package/dist/parse-multipart.js.map +1 -0
  43. package/dist/parse-type.d.ts +1 -0
  44. package/dist/parse-type.js +95 -0
  45. package/dist/parse-type.js.map +1 -0
  46. package/dist/policy.d.ts +41 -0
  47. package/dist/policy.js +109 -0
  48. package/dist/policy.js.map +1 -0
  49. package/dist/print-value.d.ts +2 -0
  50. package/dist/print-value.js +50 -0
  51. package/dist/print-value.js.map +1 -0
  52. package/dist/provider-factory.d.ts +84 -0
  53. package/dist/provider-factory.js +87 -0
  54. package/dist/provider-factory.js.map +1 -0
  55. package/dist/relations.d.ts +10 -0
  56. package/dist/relations.js +23 -0
  57. package/dist/relations.js.map +1 -0
  58. package/dist/sanitize/index.d.ts +28 -0
  59. package/dist/sanitize/index.js +135 -0
  60. package/dist/sanitize/index.js.map +1 -0
  61. package/dist/sanitize/sanitizers.d.ts +10 -0
  62. package/dist/sanitize/sanitizers.js +106 -0
  63. package/dist/sanitize/sanitizers.js.map +1 -0
  64. package/dist/sanitize/visitors/allowed-fields.d.ts +3 -0
  65. package/dist/sanitize/visitors/allowed-fields.js +83 -0
  66. package/dist/sanitize/visitors/allowed-fields.js.map +1 -0
  67. package/dist/sanitize/visitors/index.d.ts +7 -0
  68. package/dist/sanitize/visitors/index.js +21 -0
  69. package/dist/sanitize/visitors/index.js.map +1 -0
  70. package/dist/sanitize/visitors/remove-dynamic-zones.d.ts +3 -0
  71. package/dist/sanitize/visitors/remove-dynamic-zones.js +10 -0
  72. package/dist/sanitize/visitors/remove-dynamic-zones.js.map +1 -0
  73. package/dist/sanitize/visitors/remove-morph-to-relations.d.ts +3 -0
  74. package/dist/sanitize/visitors/remove-morph-to-relations.js +10 -0
  75. package/dist/sanitize/visitors/remove-morph-to-relations.js.map +1 -0
  76. package/dist/sanitize/visitors/remove-password.d.ts +3 -0
  77. package/dist/sanitize/visitors/remove-password.js +9 -0
  78. package/dist/sanitize/visitors/remove-password.js.map +1 -0
  79. package/dist/sanitize/visitors/remove-private.d.ts +3 -0
  80. package/dist/sanitize/visitors/remove-private.js +14 -0
  81. package/dist/sanitize/visitors/remove-private.js.map +1 -0
  82. package/dist/sanitize/visitors/remove-restricted-relations.d.ts +3 -0
  83. package/dist/sanitize/visitors/remove-restricted-relations.js +88 -0
  84. package/dist/sanitize/visitors/remove-restricted-relations.js.map +1 -0
  85. package/dist/sanitize/visitors/restricted-fields.d.ts +3 -0
  86. package/dist/sanitize/visitors/restricted-fields.js +25 -0
  87. package/dist/sanitize/visitors/restricted-fields.js.map +1 -0
  88. package/dist/set-creator-fields.d.ts +9 -0
  89. package/dist/set-creator-fields.js +37 -0
  90. package/dist/set-creator-fields.js.map +1 -0
  91. package/dist/string-formatting.d.ts +16 -0
  92. package/dist/string-formatting.js +85 -0
  93. package/dist/string-formatting.js.map +1 -0
  94. package/dist/template-configuration.d.ts +5 -0
  95. package/dist/template-configuration.js +28 -0
  96. package/dist/template-configuration.js.map +1 -0
  97. package/dist/template.d.ts +9 -0
  98. package/dist/template.js +20 -0
  99. package/dist/template.js.map +1 -0
  100. package/dist/traverse/factory.d.ts +13 -0
  101. package/dist/traverse/factory.js +126 -0
  102. package/dist/traverse/factory.js.map +1 -0
  103. package/dist/traverse/index.d.ts +5 -0
  104. package/dist/traverse/index.js +17 -0
  105. package/dist/traverse/index.js.map +1 -0
  106. package/dist/traverse/query-fields.d.ts +3 -0
  107. package/dist/traverse/query-fields.js +35 -0
  108. package/dist/traverse/query-fields.js.map +1 -0
  109. package/dist/traverse/query-filters.d.ts +3 -0
  110. package/dist/traverse/query-filters.js +73 -0
  111. package/dist/traverse/query-filters.js.map +1 -0
  112. package/dist/traverse/query-populate.d.ts +3 -0
  113. package/dist/traverse/query-populate.js +140 -0
  114. package/dist/traverse/query-populate.js.map +1 -0
  115. package/dist/traverse/query-sort.d.ts +3 -0
  116. package/dist/traverse/query-sort.js +114 -0
  117. package/dist/traverse/query-sort.js.map +1 -0
  118. package/dist/traverse-entity.d.ts +33 -0
  119. package/dist/traverse-entity.js +134 -0
  120. package/dist/traverse-entity.js.map +1 -0
  121. package/dist/types.d.ts +57 -0
  122. package/dist/types.js +4 -0
  123. package/dist/types.js.map +1 -0
  124. package/dist/validators.d.ts +5 -0
  125. package/dist/validators.js +110 -0
  126. package/dist/validators.js.map +1 -0
  127. package/dist/webhook.d.ts +10 -0
  128. package/dist/webhook.js +14 -0
  129. package/dist/webhook.js.map +1 -0
  130. package/index.d.ts +5 -3
  131. package/package.json +2 -2
  132. package/coverage/clover.xml +0 -638
  133. package/coverage/coverage-final.json +0 -24
  134. package/coverage/lcov-report/base.css +0 -224
  135. package/coverage/lcov-report/block-navigation.js +0 -87
  136. package/coverage/lcov-report/favicon.png +0 -0
  137. package/coverage/lcov-report/index.html +0 -146
  138. package/coverage/lcov-report/lib/async.js.html +0 -223
  139. package/coverage/lcov-report/lib/content-types.js.html +0 -643
  140. package/coverage/lcov-report/lib/env-helper.js.html +0 -319
  141. package/coverage/lcov-report/lib/errors.js.html +0 -397
  142. package/coverage/lcov-report/lib/format-yup-error.js.html +0 -145
  143. package/coverage/lcov-report/lib/hooks.js.html +0 -415
  144. package/coverage/lcov-report/lib/import-default.js.html +0 -115
  145. package/coverage/lcov-report/lib/index.html +0 -326
  146. package/coverage/lcov-report/lib/pagination.js.html +0 -382
  147. package/coverage/lcov-report/lib/parse-type.js.html +0 -385
  148. package/coverage/lcov-report/lib/policy.js.html +0 -472
  149. package/coverage/lcov-report/lib/print-value.js.html +0 -241
  150. package/coverage/lcov-report/lib/provider-factory.js.html +0 -433
  151. package/coverage/lcov-report/lib/relations.js.html +0 -178
  152. package/coverage/lcov-report/lib/sanitize/visitors/allowed-fields.js.html +0 -367
  153. package/coverage/lcov-report/lib/sanitize/visitors/index.html +0 -191
  154. package/coverage/lcov-report/lib/sanitize/visitors/index.js.html +0 -112
  155. package/coverage/lcov-report/lib/sanitize/visitors/remove-password.js.html +0 -106
  156. package/coverage/lcov-report/lib/sanitize/visitors/remove-private.js.html +0 -118
  157. package/coverage/lcov-report/lib/sanitize/visitors/remove-restricted-relations.js.html +0 -316
  158. package/coverage/lcov-report/lib/sanitize/visitors/restricted-fields.js.html +0 -181
  159. package/coverage/lcov-report/lib/string-formatting.js.html +0 -322
  160. package/coverage/lcov-report/lib/validators.js.html +0 -445
  161. package/coverage/lcov-report/prettify.css +0 -1
  162. package/coverage/lcov-report/prettify.js +0 -2
  163. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  164. package/coverage/lcov-report/sorter.js +0 -196
@@ -0,0 +1,15 @@
1
+ import type { CurriedFunction3 } from 'lodash';
2
+ interface MapOptions {
3
+ concurrency?: number;
4
+ }
5
+ type MapFunc<T = unknown, R = unknown> = (element: T, index: number) => R | Promise<R>;
6
+ export type ReduceAsync<T = unknown, V = T, R = V> = CurriedFunction3<T[], (accumulator: V | R, current: Awaited<T>, index: number) => R | Promise<R>, V, Promise<R>>;
7
+ type CurriedMapAsync<T = unknown, R = unknown> = CurriedFunction3<T[], MapFunc<T, R>, MapOptions, Promise<R[]>>;
8
+ interface Method {
9
+ (...args: any[]): any;
10
+ }
11
+ declare function pipeAsync(...methods: Method[]): (data: unknown) => Promise<unknown>;
12
+ declare const mapAsync: CurriedMapAsync;
13
+ declare const reduceAsync: ReduceAsync;
14
+ declare const forEachAsync: (...args: any[]) => any;
15
+ export { mapAsync, reduceAsync, forEachAsync, pipeAsync };
package/dist/async.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.pipeAsync = exports.forEachAsync = exports.reduceAsync = exports.mapAsync = void 0;
7
+ const p_map_1 = __importDefault(require("p-map"));
8
+ const fp_1 = require("lodash/fp");
9
+ function pipeAsync(...methods) {
10
+ return async (data) => {
11
+ let res = data;
12
+ for (let i = 0; i < methods.length; i += 1) {
13
+ res = await methods[i](res);
14
+ }
15
+ return res;
16
+ };
17
+ }
18
+ exports.pipeAsync = pipeAsync;
19
+ const mapAsync = (0, fp_1.curry)(p_map_1.default);
20
+ exports.mapAsync = mapAsync;
21
+ const reduceAsync = (0, fp_1.curryN)(2, async (mixedArray, iteratee, initialValue) => {
22
+ let acc = initialValue;
23
+ for (let i = 0; i < mixedArray.length; i += 1) {
24
+ acc = await iteratee(acc, await mixedArray[i], i);
25
+ }
26
+ return acc;
27
+ });
28
+ exports.reduceAsync = reduceAsync;
29
+ const forEachAsync = (0, fp_1.curry)(async (array, func, options) => {
30
+ await mapAsync(array, func, options);
31
+ });
32
+ exports.forEachAsync = forEachAsync;
33
+ //# sourceMappingURL=async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.js","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAyB;AACzB,kCAA0C;AA2B1C,SAAS,SAAS,CAAC,GAAG,OAAiB;IACrC,OAAO,KAAK,EAAE,IAAa,EAAE,EAAE;QAC7B,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC1C,GAAG,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SAC7B;QAED,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAkB6C,8BAAS;AAhBvD,MAAM,QAAQ,GAAoB,IAAA,UAAK,EAAC,eAAI,CAAC,CAAC;AAgBrC,4BAAQ;AAdjB,MAAM,WAAW,GAAgB,IAAA,WAAM,EAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE;IACtF,IAAI,GAAG,GAAG,YAAY,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QAC7C,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACnD;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC,CAAC;AAQgB,kCAAW;AAN9B,MAAM,YAAY,GAAG,IAAA,UAAK,EACxB,KAAK,EAA4B,KAAU,EAAE,IAAmB,EAAE,OAAmB,EAAE,EAAE;IACvF,MAAM,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC,CACF,CAAC;AAE8B,oCAAY"}
@@ -0,0 +1,2 @@
1
+ declare const generateTimestampCode: (date: Date) => string;
2
+ export { generateTimestampCode };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateTimestampCode = void 0;
4
+ // Using timestamp (milliseconds) to be sure it is unique
5
+ // + converting timestamp to base 36 for better readibility
6
+ const generateTimestampCode = (date) => {
7
+ const referDate = date || new Date();
8
+ return referDate.getTime().toString(36);
9
+ };
10
+ exports.generateTimestampCode = generateTimestampCode;
11
+ //# sourceMappingURL=code-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-generator.js","sourceRoot":"","sources":["../src/code-generator.ts"],"names":[],"mappings":";;;AAAA,yDAAyD;AACzD,2DAA2D;AAC3D,MAAM,qBAAqB,GAAG,CAAC,IAAU,EAAE,EAAE;IAC3C,MAAM,SAAS,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;IAErC,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEO,sDAAqB"}
@@ -0,0 +1,8 @@
1
+ import type { Config } from './types';
2
+ export declare const getConfigUrls: (config: Config, forAdminBuild?: boolean) => {
3
+ serverUrl: string;
4
+ adminUrl: any;
5
+ adminPath: any;
6
+ };
7
+ export declare const getAbsoluteAdminUrl: (config: Config, forAdminBuild?: boolean) => any;
8
+ export declare const getAbsoluteServerUrl: (config: Config, forAdminBuild?: boolean) => any;
package/dist/config.js ADDED
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getAbsoluteServerUrl = exports.getAbsoluteAdminUrl = exports.getConfigUrls = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const string_formatting_1 = require("./string-formatting");
9
+ const getConfigUrls = (config, forAdminBuild = false) => {
10
+ const serverConfig = config.get('server');
11
+ const adminConfig = config.get('admin');
12
+ // Defines serverUrl value
13
+ let serverUrl = lodash_1.default.get(serverConfig, 'url', '');
14
+ serverUrl = lodash_1.default.trim(serverUrl, '/ ');
15
+ if (typeof serverUrl !== 'string') {
16
+ throw new Error('Invalid server url config. Make sure the url is a string.');
17
+ }
18
+ if (serverUrl.startsWith('http')) {
19
+ try {
20
+ serverUrl = lodash_1.default.trim(new URL(serverConfig.url).toString(), '/');
21
+ }
22
+ catch (e) {
23
+ throw new Error('Invalid server url config. Make sure the url defined in server.js is valid.');
24
+ }
25
+ }
26
+ else if (serverUrl !== '') {
27
+ serverUrl = `/${serverUrl}`;
28
+ }
29
+ // Defines adminUrl value
30
+ let adminUrl = lodash_1.default.get(adminConfig, 'url', '/admin');
31
+ adminUrl = lodash_1.default.trim(adminUrl, '/ ');
32
+ if (typeof adminUrl !== 'string') {
33
+ throw new Error('Invalid admin url config. Make sure the url is a non-empty string.');
34
+ }
35
+ if (adminUrl.startsWith('http')) {
36
+ try {
37
+ adminUrl = lodash_1.default.trim(new URL(adminUrl).toString(), '/');
38
+ }
39
+ catch (e) {
40
+ throw new Error('Invalid admin url config. Make sure the url defined in server.js is valid.');
41
+ }
42
+ }
43
+ else {
44
+ adminUrl = `${serverUrl}/${adminUrl}`;
45
+ }
46
+ // Defines adminPath value
47
+ let adminPath = adminUrl;
48
+ if (serverUrl.startsWith('http') &&
49
+ adminUrl.startsWith('http') &&
50
+ new URL(adminUrl).origin === new URL(serverUrl).origin &&
51
+ !forAdminBuild) {
52
+ adminPath = adminUrl.replace((0, string_formatting_1.getCommonPath)(serverUrl, adminUrl), '');
53
+ adminPath = `/${lodash_1.default.trim(adminPath, '/')}`;
54
+ }
55
+ else if (adminUrl.startsWith('http')) {
56
+ adminPath = new URL(adminUrl).pathname;
57
+ }
58
+ return {
59
+ serverUrl,
60
+ adminUrl,
61
+ adminPath,
62
+ };
63
+ };
64
+ exports.getConfigUrls = getConfigUrls;
65
+ const getAbsoluteUrl = (adminOrServer) => (config, forAdminBuild = false) => {
66
+ const { serverUrl, adminUrl } = (0, exports.getConfigUrls)(config, forAdminBuild);
67
+ const url = adminOrServer === 'server' ? serverUrl : adminUrl;
68
+ if (url.startsWith('http')) {
69
+ return url;
70
+ }
71
+ const hostname = config.get('environment') === 'development' &&
72
+ ['127.0.0.1', '0.0.0.0'].includes(config.get('server.host'))
73
+ ? 'localhost'
74
+ : config.get('server.host');
75
+ return `http://${hostname}:${config.get('server.port')}${url}`;
76
+ };
77
+ exports.getAbsoluteAdminUrl = getAbsoluteUrl('admin');
78
+ exports.getAbsoluteServerUrl = getAbsoluteUrl('server');
79
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { Model, Kind, Attribute, RelationalAttribute } from './types';
2
+ declare const constants: {
3
+ ID_ATTRIBUTE: string;
4
+ PUBLISHED_AT_ATTRIBUTE: string;
5
+ CREATED_BY_ATTRIBUTE: string;
6
+ UPDATED_BY_ATTRIBUTE: string;
7
+ CREATED_AT_ATTRIBUTE: string;
8
+ UPDATED_AT_ATTRIBUTE: string;
9
+ DP_PUB_STATES: string[];
10
+ DP_PUB_STATE_LIVE: string;
11
+ DP_PUB_STATE_PREVIEW: string;
12
+ SINGLE_TYPE: string;
13
+ COLLECTION_TYPE: string;
14
+ };
15
+ declare const getTimestamps: (model: Model) => string[];
16
+ declare const getNonWritableAttributes: (model: Model) => string[];
17
+ declare const getWritableAttributes: (model: Model) => string[];
18
+ declare const isWritableAttribute: (model: Model, attributeName: string) => boolean;
19
+ declare const getNonVisibleAttributes: (model: Model) => string[];
20
+ declare const getVisibleAttributes: (model: Model) => string[];
21
+ declare const isVisibleAttribute: (model: Model, attributeName: string) => boolean;
22
+ declare const getOptions: (model: Model) => {
23
+ draftAndPublish: boolean;
24
+ } | ({
25
+ draftAndPublish: boolean;
26
+ } & {
27
+ populateCreatorFields: boolean;
28
+ });
29
+ declare const hasDraftAndPublish: (model: Model) => boolean;
30
+ declare const isDraft: (data: object, model: Model) => boolean;
31
+ declare const isSingleType: ({ kind }: {
32
+ kind?: string | undefined;
33
+ }) => boolean;
34
+ declare const isCollectionType: ({ kind }: {
35
+ kind?: string | undefined;
36
+ }) => boolean;
37
+ declare const isKind: (kind: Kind) => (model: Model) => boolean;
38
+ declare const getPrivateAttributes: (model: Model) => string[];
39
+ declare const isPrivateAttribute: (model: Model, attributeName: string) => boolean;
40
+ declare const isScalarAttribute: (attribute: Attribute) => boolean;
41
+ declare const isMediaAttribute: (attribute: Attribute) => boolean;
42
+ declare const isRelationalAttribute: (attribute: Attribute) => attribute is RelationalAttribute;
43
+ declare const isComponentAttribute: (attribute: Attribute) => boolean;
44
+ declare const isDynamicZoneAttribute: (attribute: Attribute) => boolean;
45
+ declare const isMorphToRelationalAttribute: (attribute: Attribute) => boolean;
46
+ declare const getComponentAttributes: (schema: Model) => string[];
47
+ declare const getScalarAttributes: (schema: Model) => string[];
48
+ /**
49
+ * Checks if an attribute is of type `type`
50
+ * @param {object} attribute
51
+ * @param {string} type
52
+ */
53
+ declare const isTypedAttribute: (attribute: Attribute, type: string) => boolean;
54
+ /**
55
+ * Returns a route prefix for a contentType
56
+ * @param {object} contentType
57
+ * @returns {string}
58
+ */
59
+ declare const getContentTypeRoutePrefix: (contentType: Model) => string;
60
+ export { isScalarAttribute, isMediaAttribute, isRelationalAttribute, isComponentAttribute, isDynamicZoneAttribute, isMorphToRelationalAttribute, isTypedAttribute, getPrivateAttributes, isPrivateAttribute, constants, getNonWritableAttributes, getComponentAttributes, getScalarAttributes, getWritableAttributes, isWritableAttribute, getNonVisibleAttributes, getVisibleAttributes, getTimestamps, isVisibleAttribute, hasDraftAndPublish, getOptions, isDraft, isSingleType, isCollectionType, isKind, getContentTypeRoutePrefix, };
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getContentTypeRoutePrefix = exports.isKind = exports.isCollectionType = exports.isSingleType = exports.isDraft = exports.getOptions = exports.hasDraftAndPublish = exports.isVisibleAttribute = exports.getTimestamps = exports.getVisibleAttributes = exports.getNonVisibleAttributes = exports.isWritableAttribute = exports.getWritableAttributes = exports.getScalarAttributes = exports.getComponentAttributes = exports.getNonWritableAttributes = exports.constants = exports.isPrivateAttribute = exports.getPrivateAttributes = exports.isTypedAttribute = exports.isMorphToRelationalAttribute = exports.isDynamicZoneAttribute = exports.isComponentAttribute = exports.isRelationalAttribute = exports.isMediaAttribute = exports.isScalarAttribute = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const fp_1 = require("lodash/fp");
9
+ const SINGLE_TYPE = 'singleType';
10
+ const COLLECTION_TYPE = 'collectionType';
11
+ const ID_ATTRIBUTE = 'id';
12
+ const PUBLISHED_AT_ATTRIBUTE = 'publishedAt';
13
+ const CREATED_BY_ATTRIBUTE = 'createdBy';
14
+ const UPDATED_BY_ATTRIBUTE = 'updatedBy';
15
+ const CREATED_AT_ATTRIBUTE = 'createdAt';
16
+ const UPDATED_AT_ATTRIBUTE = 'updatedAt';
17
+ const DP_PUB_STATE_LIVE = 'live';
18
+ const DP_PUB_STATE_PREVIEW = 'preview';
19
+ const DP_PUB_STATES = [DP_PUB_STATE_LIVE, DP_PUB_STATE_PREVIEW];
20
+ const constants = {
21
+ ID_ATTRIBUTE,
22
+ PUBLISHED_AT_ATTRIBUTE,
23
+ CREATED_BY_ATTRIBUTE,
24
+ UPDATED_BY_ATTRIBUTE,
25
+ CREATED_AT_ATTRIBUTE,
26
+ UPDATED_AT_ATTRIBUTE,
27
+ DP_PUB_STATES,
28
+ DP_PUB_STATE_LIVE,
29
+ DP_PUB_STATE_PREVIEW,
30
+ SINGLE_TYPE,
31
+ COLLECTION_TYPE,
32
+ };
33
+ exports.constants = constants;
34
+ const getTimestamps = (model) => {
35
+ const attributes = [];
36
+ if ((0, fp_1.has)(CREATED_AT_ATTRIBUTE, model.attributes)) {
37
+ attributes.push(CREATED_AT_ATTRIBUTE);
38
+ }
39
+ if ((0, fp_1.has)(UPDATED_AT_ATTRIBUTE, model.attributes)) {
40
+ attributes.push(UPDATED_AT_ATTRIBUTE);
41
+ }
42
+ return attributes;
43
+ };
44
+ exports.getTimestamps = getTimestamps;
45
+ const getNonWritableAttributes = (model) => {
46
+ const nonWritableAttributes = lodash_1.default.reduce(model.attributes, (acc, attr, attrName) => (attr.writable === false ? acc.concat(attrName) : acc), []);
47
+ return lodash_1.default.uniq([ID_ATTRIBUTE, ...getTimestamps(model), ...nonWritableAttributes]);
48
+ };
49
+ exports.getNonWritableAttributes = getNonWritableAttributes;
50
+ const getWritableAttributes = (model) => {
51
+ return lodash_1.default.difference(Object.keys(model.attributes), getNonWritableAttributes(model));
52
+ };
53
+ exports.getWritableAttributes = getWritableAttributes;
54
+ const isWritableAttribute = (model, attributeName) => {
55
+ return getWritableAttributes(model).includes(attributeName);
56
+ };
57
+ exports.isWritableAttribute = isWritableAttribute;
58
+ const getNonVisibleAttributes = (model) => {
59
+ const nonVisibleAttributes = lodash_1.default.reduce(model.attributes, (acc, attr, attrName) => (attr.visible === false ? acc.concat(attrName) : acc), []);
60
+ return lodash_1.default.uniq([ID_ATTRIBUTE, ...getTimestamps(model), ...nonVisibleAttributes]);
61
+ };
62
+ exports.getNonVisibleAttributes = getNonVisibleAttributes;
63
+ const getVisibleAttributes = (model) => {
64
+ return lodash_1.default.difference(lodash_1.default.keys(model.attributes), getNonVisibleAttributes(model));
65
+ };
66
+ exports.getVisibleAttributes = getVisibleAttributes;
67
+ const isVisibleAttribute = (model, attributeName) => {
68
+ return getVisibleAttributes(model).includes(attributeName);
69
+ };
70
+ exports.isVisibleAttribute = isVisibleAttribute;
71
+ const getOptions = (model) => lodash_1.default.assign({ draftAndPublish: false }, lodash_1.default.get(model, 'options', {}));
72
+ exports.getOptions = getOptions;
73
+ const hasDraftAndPublish = (model) => lodash_1.default.get(model, 'options.draftAndPublish', false) === true;
74
+ exports.hasDraftAndPublish = hasDraftAndPublish;
75
+ const isDraft = (data, model) => hasDraftAndPublish(model) && lodash_1.default.get(data, PUBLISHED_AT_ATTRIBUTE) === null;
76
+ exports.isDraft = isDraft;
77
+ const isSingleType = ({ kind = COLLECTION_TYPE }) => kind === SINGLE_TYPE;
78
+ exports.isSingleType = isSingleType;
79
+ const isCollectionType = ({ kind = COLLECTION_TYPE }) => kind === COLLECTION_TYPE;
80
+ exports.isCollectionType = isCollectionType;
81
+ const isKind = (kind) => (model) => model.kind === kind;
82
+ exports.isKind = isKind;
83
+ const getPrivateAttributes = (model) => {
84
+ return lodash_1.default.union(strapi.config.get('api.responses.privateAttributes', []), lodash_1.default.get(model, 'options.privateAttributes', []), lodash_1.default.keys(lodash_1.default.pickBy(model.attributes, (attr) => !!attr.private)));
85
+ };
86
+ exports.getPrivateAttributes = getPrivateAttributes;
87
+ const isPrivateAttribute = (model, attributeName) => {
88
+ return model?.privateAttributes?.includes(attributeName) ?? false;
89
+ };
90
+ exports.isPrivateAttribute = isPrivateAttribute;
91
+ const isScalarAttribute = (attribute) => {
92
+ return !['media', 'component', 'relation', 'dynamiczone'].includes(attribute?.type);
93
+ };
94
+ exports.isScalarAttribute = isScalarAttribute;
95
+ const isMediaAttribute = (attribute) => attribute?.type === 'media';
96
+ exports.isMediaAttribute = isMediaAttribute;
97
+ const isRelationalAttribute = (attribute) => attribute?.type === 'relation';
98
+ exports.isRelationalAttribute = isRelationalAttribute;
99
+ const isComponentAttribute = (attribute) => ['component', 'dynamiczone'].includes(attribute?.type);
100
+ exports.isComponentAttribute = isComponentAttribute;
101
+ const isDynamicZoneAttribute = (attribute) => attribute?.type === 'dynamiczone';
102
+ exports.isDynamicZoneAttribute = isDynamicZoneAttribute;
103
+ const isMorphToRelationalAttribute = (attribute) => {
104
+ return isRelationalAttribute(attribute) && attribute?.relation?.startsWith?.('morphTo');
105
+ };
106
+ exports.isMorphToRelationalAttribute = isMorphToRelationalAttribute;
107
+ const getComponentAttributes = (schema) => {
108
+ return lodash_1.default.reduce(schema.attributes, (acc, attr, attrName) => {
109
+ if (isComponentAttribute(attr))
110
+ acc.push(attrName);
111
+ return acc;
112
+ }, []);
113
+ };
114
+ exports.getComponentAttributes = getComponentAttributes;
115
+ const getScalarAttributes = (schema) => {
116
+ return lodash_1.default.reduce(schema.attributes, (acc, attr, attrName) => {
117
+ if (isScalarAttribute(attr))
118
+ acc.push(attrName);
119
+ return acc;
120
+ }, []);
121
+ };
122
+ exports.getScalarAttributes = getScalarAttributes;
123
+ /**
124
+ * Checks if an attribute is of type `type`
125
+ * @param {object} attribute
126
+ * @param {string} type
127
+ */
128
+ const isTypedAttribute = (attribute, type) => {
129
+ return lodash_1.default.has(attribute, 'type') && attribute.type === type;
130
+ };
131
+ exports.isTypedAttribute = isTypedAttribute;
132
+ /**
133
+ * Returns a route prefix for a contentType
134
+ * @param {object} contentType
135
+ * @returns {string}
136
+ */
137
+ const getContentTypeRoutePrefix = (contentType) => {
138
+ return isSingleType(contentType)
139
+ ? lodash_1.default.kebabCase(contentType.info.singularName)
140
+ : lodash_1.default.kebabCase(contentType.info.pluralName);
141
+ };
142
+ exports.getContentTypeRoutePrefix = getContentTypeRoutePrefix;
143
+ //# sourceMappingURL=content-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-types.js","sourceRoot":"","sources":["../src/content-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare function env<T>(key: string, defaultValue?: T): string | T | undefined;
2
+ export = env;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ const lodash_1 = __importDefault(require("lodash"));
6
+ function env(key, defaultValue) {
7
+ return lodash_1.default.has(process.env, key) ? process.env[key] : defaultValue;
8
+ }
9
+ function getKey(key) {
10
+ return process.env[key] ?? '';
11
+ }
12
+ const utils = {
13
+ int(key, defaultValue) {
14
+ if (!lodash_1.default.has(process.env, key) && defaultValue) {
15
+ return defaultValue;
16
+ }
17
+ return parseInt(getKey(key), 10);
18
+ },
19
+ float(key, defaultValue) {
20
+ if (!lodash_1.default.has(process.env, key) && defaultValue) {
21
+ return defaultValue;
22
+ }
23
+ return parseFloat(getKey(key));
24
+ },
25
+ bool(key, defaultValue) {
26
+ if (!lodash_1.default.has(process.env, key) && defaultValue) {
27
+ return defaultValue;
28
+ }
29
+ return getKey(key) === 'true';
30
+ },
31
+ json(key, defaultValue) {
32
+ if (!lodash_1.default.has(process.env, key) && defaultValue) {
33
+ return defaultValue;
34
+ }
35
+ try {
36
+ return JSON.parse(getKey(key));
37
+ }
38
+ catch (error) {
39
+ if (error instanceof Error) {
40
+ throw new Error(`Invalid json environment variable ${key}: ${error.message}`);
41
+ }
42
+ throw error;
43
+ }
44
+ },
45
+ array(key, defaultValue) {
46
+ if (!lodash_1.default.has(process.env, key) && defaultValue) {
47
+ return defaultValue;
48
+ }
49
+ let value = getKey(key);
50
+ if (value.startsWith('[') && value.endsWith(']')) {
51
+ value = value.substring(1, value.length - 1);
52
+ }
53
+ return value.split(',').map((v) => {
54
+ return lodash_1.default.trim(lodash_1.default.trim(v, ' '), '"');
55
+ });
56
+ },
57
+ date(key, defaultValue) {
58
+ if (!lodash_1.default.has(process.env, key) && defaultValue) {
59
+ return defaultValue;
60
+ }
61
+ return new Date(getKey(key));
62
+ },
63
+ /**
64
+ * Gets a value from env that matches oneOf provided values
65
+ * @param {string} key
66
+ * @param {string[]} expectedValues
67
+ * @param {string|undefined} defaultValue
68
+ * @returns {string|undefined}
69
+ */
70
+ oneOf(key, expectedValues, defaultValue) {
71
+ if (!expectedValues) {
72
+ throw new Error(`env.oneOf requires expectedValues`);
73
+ }
74
+ if (defaultValue && !expectedValues.includes(defaultValue)) {
75
+ throw new Error(`env.oneOf requires defaultValue to be included in expectedValues`);
76
+ }
77
+ const rawValue = env(key, defaultValue);
78
+ return expectedValues.includes(rawValue) ? rawValue : defaultValue;
79
+ },
80
+ };
81
+ Object.assign(env, utils);
82
+ module.exports = env;
83
+ //# sourceMappingURL=env-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-helper.js","sourceRoot":"","sources":["../src/env-helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import yup from 'yup';
2
+ import { HttpError } from 'http-errors';
3
+ declare class ApplicationError extends Error {
4
+ details: unknown;
5
+ constructor(message: string, details?: unknown);
6
+ }
7
+ declare class ValidationError extends ApplicationError {
8
+ constructor(message: string, details?: unknown);
9
+ }
10
+ declare class YupValidationError extends ValidationError {
11
+ constructor(yupError: yup.ValidationError, message: string);
12
+ }
13
+ declare class PaginationError extends ApplicationError {
14
+ constructor(message: string, details?: unknown);
15
+ }
16
+ declare class NotFoundError extends ApplicationError {
17
+ constructor(message: string, details?: unknown);
18
+ }
19
+ declare class ForbiddenError extends ApplicationError {
20
+ constructor(message: string, details?: unknown);
21
+ }
22
+ declare class UnauthorizedError extends ApplicationError {
23
+ constructor(message: string, details?: unknown);
24
+ }
25
+ declare class RateLimitError extends ApplicationError {
26
+ constructor(message: string, details?: unknown);
27
+ }
28
+ declare class PayloadTooLargeError extends ApplicationError {
29
+ constructor(message: string, details?: unknown);
30
+ }
31
+ declare class PolicyError extends ForbiddenError {
32
+ constructor(message: string, details?: unknown);
33
+ }
34
+ declare class NotImplementedError extends ApplicationError {
35
+ constructor(message: string, details?: unknown);
36
+ }
37
+ export { HttpError, ApplicationError, ValidationError, YupValidationError, PaginationError, NotFoundError, ForbiddenError, UnauthorizedError, RateLimitError, PayloadTooLargeError, PolicyError, NotImplementedError, };
package/dist/errors.js ADDED
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ /* eslint-disable max-classes-per-file */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.NotImplementedError = exports.PolicyError = exports.PayloadTooLargeError = exports.RateLimitError = exports.UnauthorizedError = exports.ForbiddenError = exports.NotFoundError = exports.PaginationError = exports.YupValidationError = exports.ValidationError = exports.ApplicationError = exports.HttpError = void 0;
5
+ const http_errors_1 = require("http-errors");
6
+ Object.defineProperty(exports, "HttpError", { enumerable: true, get: function () { return http_errors_1.HttpError; } });
7
+ const format_yup_error_1 = require("./format-yup-error");
8
+ /* ApplicationError */
9
+ class ApplicationError extends Error {
10
+ constructor(message, details = {}) {
11
+ super();
12
+ this.name = 'ApplicationError';
13
+ this.message = message || 'An application error occured';
14
+ this.details = details;
15
+ }
16
+ }
17
+ exports.ApplicationError = ApplicationError;
18
+ class ValidationError extends ApplicationError {
19
+ constructor(message, details) {
20
+ super(message, details);
21
+ this.name = 'ValidationError';
22
+ }
23
+ }
24
+ exports.ValidationError = ValidationError;
25
+ class YupValidationError extends ValidationError {
26
+ constructor(yupError, message) {
27
+ super('Validation');
28
+ const { errors, message: yupMessage } = (0, format_yup_error_1.formatYupErrors)(yupError);
29
+ this.message = message || yupMessage;
30
+ this.details = { errors };
31
+ }
32
+ }
33
+ exports.YupValidationError = YupValidationError;
34
+ class PaginationError extends ApplicationError {
35
+ constructor(message, details) {
36
+ super(message, details);
37
+ this.name = 'PaginationError';
38
+ this.message = message || 'Invalid pagination';
39
+ }
40
+ }
41
+ exports.PaginationError = PaginationError;
42
+ class NotFoundError extends ApplicationError {
43
+ constructor(message, details) {
44
+ super(message, details);
45
+ this.name = 'NotFoundError';
46
+ this.message = message || 'Entity not found';
47
+ }
48
+ }
49
+ exports.NotFoundError = NotFoundError;
50
+ class ForbiddenError extends ApplicationError {
51
+ constructor(message, details) {
52
+ super(message, details);
53
+ this.name = 'ForbiddenError';
54
+ this.message = message || 'Forbidden access';
55
+ }
56
+ }
57
+ exports.ForbiddenError = ForbiddenError;
58
+ class UnauthorizedError extends ApplicationError {
59
+ constructor(message, details) {
60
+ super(message, details);
61
+ this.name = 'UnauthorizedError';
62
+ this.message = message || 'Unauthorized';
63
+ }
64
+ }
65
+ exports.UnauthorizedError = UnauthorizedError;
66
+ class RateLimitError extends ApplicationError {
67
+ constructor(message, details) {
68
+ super(message, details);
69
+ this.name = 'RateLimitError';
70
+ this.message = message || 'Too many requests, please try again later.';
71
+ this.details = details || {};
72
+ }
73
+ }
74
+ exports.RateLimitError = RateLimitError;
75
+ class PayloadTooLargeError extends ApplicationError {
76
+ constructor(message, details) {
77
+ super(message, details);
78
+ this.name = 'PayloadTooLargeError';
79
+ this.message = message || 'Entity too large';
80
+ }
81
+ }
82
+ exports.PayloadTooLargeError = PayloadTooLargeError;
83
+ class PolicyError extends ForbiddenError {
84
+ constructor(message, details) {
85
+ super(message, details);
86
+ this.name = 'PolicyError';
87
+ this.message = message || 'Policy Failed';
88
+ this.details = details || {};
89
+ }
90
+ }
91
+ exports.PolicyError = PolicyError;
92
+ class NotImplementedError extends ApplicationError {
93
+ constructor(message, details) {
94
+ super(message, details);
95
+ this.name = 'NotImplementedError';
96
+ this.message = message || 'This feature is not implemented yet';
97
+ }
98
+ }
99
+ exports.NotImplementedError = NotImplementedError;
100
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/file.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ /// <reference types="node" />
2
+ /**
3
+ * Utils file containing file treatment utils
4
+ */
5
+ import { Readable, Writable, WritableOptions } from 'node:stream';
6
+ declare const kbytesToBytes: (kbytes: number) => number;
7
+ declare const bytesToKbytes: (bytes: number) => number;
8
+ declare const bytesToHumanReadable: (bytes: number) => string;
9
+ declare const streamToBuffer: (stream: Readable) => Promise<unknown>;
10
+ declare const getStreamSize: (stream: Readable) => Promise<unknown>;
11
+ /**
12
+ * Create a writeable Node.js stream that discards received data.
13
+ * Useful for testing, draining a stream of data, etc.
14
+ */
15
+ declare function writableDiscardStream(options: WritableOptions): Writable;
16
+ export { streamToBuffer, bytesToHumanReadable, bytesToKbytes, kbytesToBytes, getStreamSize, writableDiscardStream, };