@strapi/utils 5.53.0 → 5.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audit-logs.d.ts +22 -0
- package/dist/audit-logs.d.ts.map +1 -0
- package/dist/audit-logs.js +22 -0
- package/dist/audit-logs.js.map +1 -0
- package/dist/audit-logs.mjs +20 -0
- package/dist/audit-logs.mjs.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -1
- package/dist/parse-type.js +1 -1
- package/dist/parse-type.js.map +1 -1
- package/dist/parse-type.mjs +1 -1
- package/dist/parse-type.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The part of the Strapi instance an audit emit needs. Declared structurally rather
|
|
3
|
+
* than as `Core.Strapi`, so this package does not have to depend on `@strapi/types`,
|
|
4
|
+
* which depends on this one.
|
|
5
|
+
*/
|
|
6
|
+
export interface AuditEmitter {
|
|
7
|
+
eventHub: {
|
|
8
|
+
emit(event: string, ...args: unknown[]): Promise<void>;
|
|
9
|
+
};
|
|
10
|
+
log: {
|
|
11
|
+
error(message: string, meta?: unknown): void;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Emits an audit event and waits for it to be processed.
|
|
16
|
+
* A failed audit write, or a failing listener, is logged here and doesn't affect the
|
|
17
|
+
* operation that emitted the event.
|
|
18
|
+
*/
|
|
19
|
+
export declare const emitAudit: ({ strapi }: {
|
|
20
|
+
strapi: AuditEmitter;
|
|
21
|
+
}, event: string, payload: unknown) => Promise<void>;
|
|
22
|
+
//# sourceMappingURL=audit-logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logs.d.ts","sourceRoot":"","sources":["../src/audit-logs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE;QAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACrE,GAAG,EAAE;QAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,CAAC;CACvD;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,GACpB,YAAY;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,EACpC,OAAO,MAAM,EACb,SAAS,OAAO,KACf,OAAO,CAAC,IAAI,CAMd,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The part of the Strapi instance an audit emit needs. Declared structurally rather
|
|
5
|
+
* than as `Core.Strapi`, so this package does not have to depend on `@strapi/types`,
|
|
6
|
+
* which depends on this one.
|
|
7
|
+
*/ /**
|
|
8
|
+
* Emits an audit event and waits for it to be processed.
|
|
9
|
+
* A failed audit write, or a failing listener, is logged here and doesn't affect the
|
|
10
|
+
* operation that emitted the event.
|
|
11
|
+
*/ const emitAudit = async ({ strapi }, event, payload)=>{
|
|
12
|
+
try {
|
|
13
|
+
await strapi.eventHub.emit(event, payload);
|
|
14
|
+
} catch (error) {
|
|
15
|
+
strapi.log.error(`An event listener failed while handling ${event}`, {
|
|
16
|
+
error
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
exports.emitAudit = emitAudit;
|
|
22
|
+
//# sourceMappingURL=audit-logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logs.js","sources":["../src/audit-logs.ts"],"sourcesContent":["/**\n * The part of the Strapi instance an audit emit needs. Declared structurally rather\n * than as `Core.Strapi`, so this package does not have to depend on `@strapi/types`,\n * which depends on this one.\n */\nexport interface AuditEmitter {\n eventHub: { emit(event: string, ...args: unknown[]): Promise<void> };\n log: { error(message: string, meta?: unknown): void };\n}\n\n/**\n * Emits an audit event and waits for it to be processed.\n * A failed audit write, or a failing listener, is logged here and doesn't affect the\n * operation that emitted the event.\n */\nexport const emitAudit = async (\n { strapi }: { strapi: AuditEmitter },\n event: string,\n payload: unknown\n): Promise<void> => {\n try {\n await strapi.eventHub.emit(event, payload);\n } catch (error) {\n strapi.log.error(`An event listener failed while handling ${event}`, { error });\n }\n};\n"],"names":["emitAudit","strapi","event","payload","eventHub","emit","error","log"],"mappings":";;AAAA;;;;;;;;UAeaA,SAAAA,GAAY,OACvB,EAAEC,MAAM,EAA4B,EACpCC,KAAAA,EACAC,OAAAA,GAAAA;IAEA,IAAI;AACF,QAAA,MAAMF,MAAAA,CAAOG,QAAQ,CAACC,IAAI,CAACH,KAAAA,EAAOC,OAAAA,CAAAA;AACpC,IAAA,CAAA,CAAE,OAAOG,KAAAA,EAAO;QACdL,MAAAA,CAAOM,GAAG,CAACD,KAAK,CAAC,CAAC,wCAAwC,EAAEJ,OAAO,EAAE;AAAEI,YAAAA;AAAM,SAAA,CAAA;AAC/E,IAAA;AACF;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The part of the Strapi instance an audit emit needs. Declared structurally rather
|
|
3
|
+
* than as `Core.Strapi`, so this package does not have to depend on `@strapi/types`,
|
|
4
|
+
* which depends on this one.
|
|
5
|
+
*/ /**
|
|
6
|
+
* Emits an audit event and waits for it to be processed.
|
|
7
|
+
* A failed audit write, or a failing listener, is logged here and doesn't affect the
|
|
8
|
+
* operation that emitted the event.
|
|
9
|
+
*/ const emitAudit = async ({ strapi }, event, payload)=>{
|
|
10
|
+
try {
|
|
11
|
+
await strapi.eventHub.emit(event, payload);
|
|
12
|
+
} catch (error) {
|
|
13
|
+
strapi.log.error(`An event listener failed while handling ${event}`, {
|
|
14
|
+
error
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export { emitAudit };
|
|
20
|
+
//# sourceMappingURL=audit-logs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logs.mjs","sources":["../src/audit-logs.ts"],"sourcesContent":["/**\n * The part of the Strapi instance an audit emit needs. Declared structurally rather\n * than as `Core.Strapi`, so this package does not have to depend on `@strapi/types`,\n * which depends on this one.\n */\nexport interface AuditEmitter {\n eventHub: { emit(event: string, ...args: unknown[]): Promise<void> };\n log: { error(message: string, meta?: unknown): void };\n}\n\n/**\n * Emits an audit event and waits for it to be processed.\n * A failed audit write, or a failing listener, is logged here and doesn't affect the\n * operation that emitted the event.\n */\nexport const emitAudit = async (\n { strapi }: { strapi: AuditEmitter },\n event: string,\n payload: unknown\n): Promise<void> => {\n try {\n await strapi.eventHub.emit(event, payload);\n } catch (error) {\n strapi.log.error(`An event listener failed while handling ${event}`, { error });\n }\n};\n"],"names":["emitAudit","strapi","event","payload","eventHub","emit","error","log"],"mappings":"AAAA;;;;;;;;UAeaA,SAAAA,GAAY,OACvB,EAAEC,MAAM,EAA4B,EACpCC,KAAAA,EACAC,OAAAA,GAAAA;IAEA,IAAI;AACF,QAAA,MAAMF,MAAAA,CAAOG,QAAQ,CAACC,IAAI,CAACH,KAAAA,EAAOC,OAAAA,CAAAA;AACpC,IAAA,CAAA,CAAE,OAAOG,KAAAA,EAAO;QACdL,MAAAA,CAAOM,GAAG,CAACD,KAAK,CAAC,CAAC,wCAAwC,EAAEJ,OAAO,EAAE;AAAEI,YAAAA;AAAM,SAAA,CAAA;AAC/E,IAAA;AACF;;;;"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,KAAK,WAAW,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AAEpB,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,KAAK,WAAW,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AAEpB,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -43,6 +43,7 @@ var security = require('./security.js');
|
|
|
43
43
|
var publicationFilter = require('./publication-filter.js');
|
|
44
44
|
var hasPublishedVersionParam = require('./has-published-version-param.js');
|
|
45
45
|
var sortQuery = require('./sort-query.js');
|
|
46
|
+
var auditLogs = require('./audit-logs.js');
|
|
46
47
|
var z = require('zod/v4');
|
|
47
48
|
|
|
48
49
|
function _interopNamespace(e) {
|
|
@@ -137,5 +138,6 @@ exports.validatePublicationFilterQueryParam = publicationFilter.validatePublicat
|
|
|
137
138
|
exports.hasPublishedVersionBooleanToPublicationFilterMode = hasPublishedVersionParam.hasPublishedVersionBooleanToPublicationFilterMode;
|
|
138
139
|
exports.parseHasPublishedVersionQueryParam = hasPublishedVersionParam.parseHasPublishedVersionQueryParam;
|
|
139
140
|
exports.hasSort = sortQuery.hasSort;
|
|
141
|
+
exports.emitAudit = auditLogs.emitAudit;
|
|
140
142
|
exports.z = z__namespace;
|
|
141
143
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.mjs
CHANGED
|
@@ -60,6 +60,7 @@ export { CSP_DEFAULTS, extendMiddlewareConfiguration } from './security.mjs';
|
|
|
60
60
|
export { buildPublicationFilterWhere, parsePublicationFilter, validatePublicationFilterQueryParam } from './publication-filter.mjs';
|
|
61
61
|
export { hasPublishedVersionBooleanToPublicationFilterMode, parseHasPublishedVersionQueryParam } from './has-published-version-param.mjs';
|
|
62
62
|
export { hasSort } from './sort-query.mjs';
|
|
63
|
+
export { emitAudit } from './audit-logs.mjs';
|
|
63
64
|
import * as z from 'zod/v4';
|
|
64
65
|
export { z };
|
|
65
66
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/parse-type.js
CHANGED
|
@@ -26,7 +26,7 @@ function _interopNamespace(e) {
|
|
|
26
26
|
var ___namespace = /*#__PURE__*/_interopNamespace(_);
|
|
27
27
|
var dates__namespace = /*#__PURE__*/_interopNamespace(dates);
|
|
28
28
|
|
|
29
|
-
const timeRegex = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(
|
|
29
|
+
const timeRegex = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]{1,3})?$/;
|
|
30
30
|
const isDate = (v)=>{
|
|
31
31
|
return dates__namespace.isDate(v);
|
|
32
32
|
};
|
package/dist/parse-type.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-type.js","sources":["../src/parse-type.ts"],"sourcesContent":["import * as _ from 'lodash';\nimport * as dates from 'date-fns';\n\nconst timeRegex = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(
|
|
1
|
+
{"version":3,"file":"parse-type.js","sources":["../src/parse-type.ts"],"sourcesContent":["import * as _ from 'lodash';\nimport * as dates from 'date-fns';\n\nconst timeRegex = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\.[0-9]{1,3})?$/;\n\nconst isDate = (v: unknown): v is Date => {\n return dates.isDate(v);\n};\n\nconst parseTime = (value: unknown): string => {\n if (isDate(value)) {\n return dates.format(value, 'HH:mm:ss.SSS');\n }\n\n if (typeof value !== 'string') {\n throw new Error(`Expected a string, got a ${typeof value}`);\n }\n const result = value.match(timeRegex);\n\n if (result === null) {\n throw new Error('Invalid time format, expected HH:mm:ss.SSS');\n }\n\n const [, hours, minutes, seconds, fraction = '.000'] = result;\n const fractionPart = _.padEnd(fraction.slice(1), 3, '0');\n\n return `${hours}:${minutes}:${seconds}.${fractionPart}`;\n};\n\nconst parseDate = (value: unknown) => {\n if (isDate(value)) {\n return dates.format(value, 'yyyy-MM-dd');\n }\n\n if (typeof value !== 'string') {\n throw new Error(`Expected a string, got a ${typeof value}`);\n }\n\n try {\n const date = dates.parseISO(value);\n\n if (dates.isValid(date)) return dates.format(date, 'yyyy-MM-dd');\n\n throw new Error(`Invalid format, expected an ISO compatible date`);\n } catch {\n throw new Error(`Invalid format, expected an ISO compatible date`);\n }\n};\n\nconst parseDateTimeOrTimestamp = (value: unknown) => {\n if (isDate(value)) {\n return value;\n }\n\n if (typeof value !== 'string') {\n throw new Error(`Expected a string, got a ${typeof value}`);\n }\n\n try {\n const date = dates.parseISO(value);\n if (dates.isValid(date)) return date;\n\n const milliUnixDate = dates.parse(value, 'T', new Date());\n if (dates.isValid(milliUnixDate)) return milliUnixDate;\n\n throw new Error(`Invalid format, expected a timestamp or an ISO date`);\n } catch {\n throw new Error(`Invalid format, expected a timestamp or an ISO date`);\n }\n};\n\ntype TypeMap = {\n boolean: boolean;\n integer: number;\n biginteger: number;\n float: number;\n decimal: number;\n time: string;\n date: string;\n timestamp: Date;\n datetime: Date;\n};\n\nexport interface ParseTypeOptions<T extends keyof TypeMap> {\n type: T;\n value: unknown;\n forceCast?: boolean;\n}\n\n/**\n * Hoisted out of `parseBoolean`, which allocated both of these arrays on every call.\n * Query validation calls it once per node of the populate tree of every request, which\n * made those two throwaway allocations one of the largest single sources of GC pressure\n * in a read: 4.3% of on-CPU time in a profiled LaunchPad run.\n */\nconst TRUTHY_INPUTS: ReadonlyArray<string | number> = ['true', 't', '1', 1];\nconst FALSY_INPUTS: ReadonlyArray<string | number> = ['false', 'f', '0', 0];\n\n/**\n * Whether `parseBoolean` would accept this value without `forceCast`.\n *\n * Exists so callers can ask the question without using an exception as control flow.\n * Query validation asked it once per populate key by calling `parseType` inside a\n * `try`/`catch`, so every key that is not a boolean keyword — which is nearly all of\n * them — built an Error and captured a stack trace only to discard it. Stack capture is\n * the expensive part, and it made this the second hottest function in a read.\n *\n * Kept in lockstep with `parseBoolean`'s accept conditions below.\n */\nconst isBooleanLike = (value: unknown): boolean => {\n if (typeof value === 'boolean') {\n return true;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return TRUTHY_INPUTS.includes(value) || FALSY_INPUTS.includes(value);\n }\n\n return false;\n};\n\nconst parseBoolean = (value: unknown, options: { forceCast?: boolean }): boolean => {\n const { forceCast = false } = options;\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n if (TRUTHY_INPUTS.includes(value)) {\n return true;\n }\n\n if (FALSY_INPUTS.includes(value)) {\n return false;\n }\n }\n\n if (forceCast) {\n return Boolean(value);\n }\n\n throw new Error('Invalid boolean input. Expected \"t\",\"1\",\"true\",\"false\",\"0\",\"f\"');\n};\n\n/**\n * Cast basic values based on attribute type\n */\nconst parseType = <Type extends keyof TypeMap>(options: ParseTypeOptions<Type>): TypeMap[Type] => {\n const { type, value, forceCast } = options;\n\n switch (type) {\n case 'boolean':\n return parseBoolean(value, { forceCast }) as TypeMap[Type];\n case 'integer':\n case 'biginteger':\n case 'float':\n case 'decimal': {\n return _.toNumber(value) as TypeMap[Type];\n }\n case 'time': {\n return parseTime(value) as TypeMap[Type];\n }\n case 'date': {\n return parseDate(value) as TypeMap[Type];\n }\n case 'timestamp':\n case 'datetime': {\n return parseDateTimeOrTimestamp(value) as TypeMap[Type];\n }\n default:\n return value as TypeMap[Type];\n }\n};\n\nexport { isBooleanLike };\nexport default parseType;\n"],"names":["timeRegex","isDate","v","dates","parseTime","value","format","Error","result","match","hours","minutes","seconds","fraction","fractionPart","_","padEnd","slice","parseDate","date","parseISO","isValid","parseDateTimeOrTimestamp","milliUnixDate","parse","Date","TRUTHY_INPUTS","FALSY_INPUTS","isBooleanLike","includes","parseBoolean","options","forceCast","Boolean","parseType","type","toNumber"],"mappings":"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"}
|
package/dist/parse-type.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _ from 'lodash';
|
|
2
2
|
import * as dates from 'date-fns';
|
|
3
3
|
|
|
4
|
-
const timeRegex = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(
|
|
4
|
+
const timeRegex = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]{1,3})?$/;
|
|
5
5
|
const isDate = (v)=>{
|
|
6
6
|
return dates.isDate(v);
|
|
7
7
|
};
|
package/dist/parse-type.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-type.mjs","sources":["../src/parse-type.ts"],"sourcesContent":["import * as _ from 'lodash';\nimport * as dates from 'date-fns';\n\nconst timeRegex = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(
|
|
1
|
+
{"version":3,"file":"parse-type.mjs","sources":["../src/parse-type.ts"],"sourcesContent":["import * as _ from 'lodash';\nimport * as dates from 'date-fns';\n\nconst timeRegex = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\.[0-9]{1,3})?$/;\n\nconst isDate = (v: unknown): v is Date => {\n return dates.isDate(v);\n};\n\nconst parseTime = (value: unknown): string => {\n if (isDate(value)) {\n return dates.format(value, 'HH:mm:ss.SSS');\n }\n\n if (typeof value !== 'string') {\n throw new Error(`Expected a string, got a ${typeof value}`);\n }\n const result = value.match(timeRegex);\n\n if (result === null) {\n throw new Error('Invalid time format, expected HH:mm:ss.SSS');\n }\n\n const [, hours, minutes, seconds, fraction = '.000'] = result;\n const fractionPart = _.padEnd(fraction.slice(1), 3, '0');\n\n return `${hours}:${minutes}:${seconds}.${fractionPart}`;\n};\n\nconst parseDate = (value: unknown) => {\n if (isDate(value)) {\n return dates.format(value, 'yyyy-MM-dd');\n }\n\n if (typeof value !== 'string') {\n throw new Error(`Expected a string, got a ${typeof value}`);\n }\n\n try {\n const date = dates.parseISO(value);\n\n if (dates.isValid(date)) return dates.format(date, 'yyyy-MM-dd');\n\n throw new Error(`Invalid format, expected an ISO compatible date`);\n } catch {\n throw new Error(`Invalid format, expected an ISO compatible date`);\n }\n};\n\nconst parseDateTimeOrTimestamp = (value: unknown) => {\n if (isDate(value)) {\n return value;\n }\n\n if (typeof value !== 'string') {\n throw new Error(`Expected a string, got a ${typeof value}`);\n }\n\n try {\n const date = dates.parseISO(value);\n if (dates.isValid(date)) return date;\n\n const milliUnixDate = dates.parse(value, 'T', new Date());\n if (dates.isValid(milliUnixDate)) return milliUnixDate;\n\n throw new Error(`Invalid format, expected a timestamp or an ISO date`);\n } catch {\n throw new Error(`Invalid format, expected a timestamp or an ISO date`);\n }\n};\n\ntype TypeMap = {\n boolean: boolean;\n integer: number;\n biginteger: number;\n float: number;\n decimal: number;\n time: string;\n date: string;\n timestamp: Date;\n datetime: Date;\n};\n\nexport interface ParseTypeOptions<T extends keyof TypeMap> {\n type: T;\n value: unknown;\n forceCast?: boolean;\n}\n\n/**\n * Hoisted out of `parseBoolean`, which allocated both of these arrays on every call.\n * Query validation calls it once per node of the populate tree of every request, which\n * made those two throwaway allocations one of the largest single sources of GC pressure\n * in a read: 4.3% of on-CPU time in a profiled LaunchPad run.\n */\nconst TRUTHY_INPUTS: ReadonlyArray<string | number> = ['true', 't', '1', 1];\nconst FALSY_INPUTS: ReadonlyArray<string | number> = ['false', 'f', '0', 0];\n\n/**\n * Whether `parseBoolean` would accept this value without `forceCast`.\n *\n * Exists so callers can ask the question without using an exception as control flow.\n * Query validation asked it once per populate key by calling `parseType` inside a\n * `try`/`catch`, so every key that is not a boolean keyword — which is nearly all of\n * them — built an Error and captured a stack trace only to discard it. Stack capture is\n * the expensive part, and it made this the second hottest function in a read.\n *\n * Kept in lockstep with `parseBoolean`'s accept conditions below.\n */\nconst isBooleanLike = (value: unknown): boolean => {\n if (typeof value === 'boolean') {\n return true;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return TRUTHY_INPUTS.includes(value) || FALSY_INPUTS.includes(value);\n }\n\n return false;\n};\n\nconst parseBoolean = (value: unknown, options: { forceCast?: boolean }): boolean => {\n const { forceCast = false } = options;\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n if (TRUTHY_INPUTS.includes(value)) {\n return true;\n }\n\n if (FALSY_INPUTS.includes(value)) {\n return false;\n }\n }\n\n if (forceCast) {\n return Boolean(value);\n }\n\n throw new Error('Invalid boolean input. Expected \"t\",\"1\",\"true\",\"false\",\"0\",\"f\"');\n};\n\n/**\n * Cast basic values based on attribute type\n */\nconst parseType = <Type extends keyof TypeMap>(options: ParseTypeOptions<Type>): TypeMap[Type] => {\n const { type, value, forceCast } = options;\n\n switch (type) {\n case 'boolean':\n return parseBoolean(value, { forceCast }) as TypeMap[Type];\n case 'integer':\n case 'biginteger':\n case 'float':\n case 'decimal': {\n return _.toNumber(value) as TypeMap[Type];\n }\n case 'time': {\n return parseTime(value) as TypeMap[Type];\n }\n case 'date': {\n return parseDate(value) as TypeMap[Type];\n }\n case 'timestamp':\n case 'datetime': {\n return parseDateTimeOrTimestamp(value) as TypeMap[Type];\n }\n default:\n return value as TypeMap[Type];\n }\n};\n\nexport { isBooleanLike };\nexport default parseType;\n"],"names":["timeRegex","isDate","v","dates","parseTime","value","format","Error","result","match","hours","minutes","seconds","fraction","fractionPart","_","padEnd","slice","parseDate","date","parseISO","isValid","parseDateTimeOrTimestamp","milliUnixDate","parse","Date","TRUTHY_INPUTS","FALSY_INPUTS","isBooleanLike","includes","parseBoolean","options","forceCast","Boolean","parseType","type","toNumber"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/utils",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.54.0",
|
|
4
4
|
"description": "Shared utilities for the Strapi packages",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"strapi",
|
|
@@ -65,13 +65,13 @@
|
|
|
65
65
|
"@types/jest": "29.5.2",
|
|
66
66
|
"@types/koa": "2.15.2",
|
|
67
67
|
"@types/node": "20.19.41",
|
|
68
|
-
"eslint-config-custom": "5.
|
|
68
|
+
"eslint-config-custom": "5.54.0",
|
|
69
69
|
"jest": "29.6.0",
|
|
70
70
|
"koa": "2.16.4",
|
|
71
71
|
"koa-body": "6.0.1",
|
|
72
|
-
"tsconfig": "5.
|
|
72
|
+
"tsconfig": "5.54.0",
|
|
73
73
|
"vitest": "catalog:",
|
|
74
|
-
"vitest-config": "5.
|
|
74
|
+
"vitest-config": "5.54.0"
|
|
75
75
|
},
|
|
76
76
|
"engines": {
|
|
77
77
|
"node": ">=20.0.0 <=26.x.x",
|