@clipboard-health/contract-core 3.8.6 → 4.0.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/esm/package.json +4 -0
- package/esm/src/index.js +2 -0
- package/esm/src/index.js.map +1 -0
- package/esm/src/lib/schemas/apiError.js +19 -0
- package/esm/src/lib/schemas/apiError.js.map +1 -0
- package/esm/src/lib/schemas/booleanString.js +12 -0
- package/esm/src/lib/schemas/booleanString.js.map +1 -0
- package/esm/src/lib/schemas/commaSeparatedArray.js +28 -0
- package/esm/src/lib/schemas/commaSeparatedArray.js.map +1 -0
- package/esm/src/lib/schemas/dateTime.js +27 -0
- package/esm/src/lib/schemas/dateTime.js.map +1 -0
- package/esm/src/lib/schemas/enum.js +35 -0
- package/esm/src/lib/schemas/enum.js.map +1 -0
- package/esm/src/lib/schemas/index.js +10 -0
- package/esm/src/lib/schemas/index.js.map +1 -0
- package/esm/src/lib/schemas/money.js +10 -0
- package/esm/src/lib/schemas/money.js.map +1 -0
- package/esm/src/lib/schemas/nonEmptyString.js +6 -0
- package/esm/src/lib/schemas/nonEmptyString.js.map +1 -0
- package/esm/src/lib/schemas/objectId.js +6 -0
- package/esm/src/lib/schemas/objectId.js.map +1 -0
- package/esm/src/lib/schemas/uuid.js +6 -0
- package/esm/src/lib/schemas/uuid.js.map +1 -0
- package/package.json +19 -3
package/esm/package.json
ADDED
package/esm/src/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/contract-core/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { nonEmptyString } from "./nonEmptyString.js";
|
|
3
|
+
/**
|
|
4
|
+
* @see {@link https://jsonapi.org/format/#error-objects Error Objects}
|
|
5
|
+
*/
|
|
6
|
+
export const apiError = z.object({
|
|
7
|
+
code: nonEmptyString,
|
|
8
|
+
detail: z.string().optional(),
|
|
9
|
+
id: nonEmptyString,
|
|
10
|
+
status: nonEmptyString,
|
|
11
|
+
title: z.string().optional(),
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* @see {@link https://jsonapi.org/format/#errors Errors}
|
|
15
|
+
*/
|
|
16
|
+
export const apiErrors = z.object({
|
|
17
|
+
errors: apiError.array().min(0).max(100),
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=apiError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiError.js","sourceRoot":"","sources":["../../../../../../../packages/contract-core/src/lib/schemas/apiError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,EAAE,EAAE,cAAc;IAClB,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACzC,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* A Zod schema for use with boolean query parameters since `z.coerce.boolean()` treats any truthy
|
|
4
|
+
* value as `true`.
|
|
5
|
+
*
|
|
6
|
+
* `.transform((value) => value === "true")` causes inference issues in controllers.
|
|
7
|
+
*/
|
|
8
|
+
export const booleanString = z.enum(["true", "false"]);
|
|
9
|
+
export function toBoolean(value) {
|
|
10
|
+
return value === "true";
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=booleanString.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"booleanString.js","sourceRoot":"","sources":["../../../../../../../packages/contract-core/src/lib/schemas/booleanString.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAIvD,MAAM,UAAU,SAAS,CAAC,KAAoB;IAC5C,OAAO,KAAK,KAAK,MAAM,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Validates comma-separated string or array inputs and normalizes them to typed arrays.
|
|
4
|
+
*
|
|
5
|
+
* Accepts:
|
|
6
|
+
* - Comma-separated strings (split and validated per item)
|
|
7
|
+
* - Arrays of items (validated per item)
|
|
8
|
+
*
|
|
9
|
+
* Designed for shared contracts where the server receives comma-separated query strings
|
|
10
|
+
* and the client passes typed arrays.
|
|
11
|
+
*
|
|
12
|
+
* Composable with `.optional()`, `.nullable()`, etc. at the call site:
|
|
13
|
+
* ```ts
|
|
14
|
+
* z.object({
|
|
15
|
+
* workerTypes: commaSeparatedArray(z.string().min(1)).optional(),
|
|
16
|
+
* dates: commaSeparatedArray(dateTimeSchema()).optional(),
|
|
17
|
+
* });
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* z.input → string | T[] (where T is z.input of the item schema)
|
|
21
|
+
* z.output → T[] (where T is z.output of the item schema)
|
|
22
|
+
*/
|
|
23
|
+
export function commaSeparatedArray(itemSchema) {
|
|
24
|
+
return z
|
|
25
|
+
.union([z.string().transform((value) => value.split(",")), z.array(itemSchema)])
|
|
26
|
+
.pipe(z.array(itemSchema));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=commaSeparatedArray.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commaSeparatedArray.js","sourceRoot":"","sources":["../../../../../../../packages/contract-core/src/lib/schemas/commaSeparatedArray.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,mBAAmB,CAAyB,UAAa;IACvE,OAAO,CAAC;SACL,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;SAC/E,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Validates datetime inputs and normalizes them to Date objects.
|
|
4
|
+
*
|
|
5
|
+
* Accepts:
|
|
6
|
+
* - ISO-8601 datetime strings (validated strictly)
|
|
7
|
+
* - Date objects (passed through as-is)
|
|
8
|
+
*
|
|
9
|
+
* Rejects epoch numbers, date-only strings, and other loose inputs.
|
|
10
|
+
*
|
|
11
|
+
* Composable with `.optional()`, `.nullable()`, etc. at the call site:
|
|
12
|
+
* ```ts
|
|
13
|
+
* z.object({
|
|
14
|
+
* start: dateTimeSchema(),
|
|
15
|
+
* clockIn: dateTimeSchema().optional(),
|
|
16
|
+
* });
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* z.input → string | Date
|
|
20
|
+
* z.output → Date
|
|
21
|
+
*/
|
|
22
|
+
export function dateTimeSchema() {
|
|
23
|
+
return z
|
|
24
|
+
.union([z.string().datetime({ offset: true }), z.date()])
|
|
25
|
+
.transform((value) => (value instanceof Date ? value : new Date(value)));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=dateTime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dateTime.js","sourceRoot":"","sources":["../../../../../../../packages/contract-core/src/lib/schemas/dateTime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC;SACL,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SACxD,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* A business-context-neutral sentinel returned when an enum field
|
|
4
|
+
* receives a value the consumer does not recognize.
|
|
5
|
+
*/
|
|
6
|
+
export const ENUM_FALLBACK = "UNRECOGNIZED_";
|
|
7
|
+
export function enumWithFallback(values, options = {}) {
|
|
8
|
+
if (values.includes(ENUM_FALLBACK)) {
|
|
9
|
+
throw new Error(`Enum values must not include "${ENUM_FALLBACK}". It is appended automatically.`);
|
|
10
|
+
}
|
|
11
|
+
const OriginalEnum = z.enum([...values]);
|
|
12
|
+
const ExpandedEnum = z.enum([...values, ENUM_FALLBACK]);
|
|
13
|
+
const optional = options.optional ?? false;
|
|
14
|
+
const schema = optional ? ExpandedEnum.optional() : ExpandedEnum;
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
16
|
+
return z.preprocess((value) => {
|
|
17
|
+
if (value === undefined) {
|
|
18
|
+
return optional ? undefined : value;
|
|
19
|
+
}
|
|
20
|
+
return OriginalEnum.safeParse(value).success ? value : ENUM_FALLBACK;
|
|
21
|
+
}, schema);
|
|
22
|
+
}
|
|
23
|
+
export function requiredEnumWithFallback(values) {
|
|
24
|
+
return enumWithFallback(values, { optional: false });
|
|
25
|
+
}
|
|
26
|
+
export function optionalEnumWithFallback(values) {
|
|
27
|
+
return enumWithFallback(values, { optional: true });
|
|
28
|
+
}
|
|
29
|
+
export function requiredEnum(values) {
|
|
30
|
+
return z.enum([...values]);
|
|
31
|
+
}
|
|
32
|
+
export function optionalEnum(values) {
|
|
33
|
+
return z.enum([...values]).optional();
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.js","sourceRoot":"","sources":["../../../../../../../packages/contract-core/src/lib/schemas/enum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,eAAwB,CAAC;AAqBtD,MAAM,UAAU,gBAAgB,CAC9B,MAAS,EACT,OAAO,GAA2B,EAAE;IAEpC,IAAK,MAA4B,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CACb,iCAAiC,aAAa,kCAAkC,CACjF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;IAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;IAEjE,+DAA+D;IAC/D,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;QACtC,CAAC;QAED,OAAO,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC;IACvE,CAAC,EAAE,MAAM,CAAC,CAAC;AACb,CAAC;AAED,MAAM,UAAU,wBAAwB,CAA6B,MAAqB;IACxF,OAAO,gBAAgB,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAA6B,MAAqB;IACxF,OAAO,gBAAgB,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,YAAY,CAA6B,MAAqB;IAC5E,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,MAAqB;IAErB,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./apiError.js";
|
|
2
|
+
export * from "./booleanString.js";
|
|
3
|
+
export * from "./commaSeparatedArray.js";
|
|
4
|
+
export * from "./dateTime.js";
|
|
5
|
+
export * from "./enum.js";
|
|
6
|
+
export * from "./money.js";
|
|
7
|
+
export * from "./nonEmptyString.js";
|
|
8
|
+
export * from "./objectId.js";
|
|
9
|
+
export * from "./uuid.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/contract-core/src/lib/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Currency code that follows the ISO 4217 standard.
|
|
4
|
+
*/
|
|
5
|
+
export const currencyCode = z.enum(["USD"]);
|
|
6
|
+
export const money = z.object({
|
|
7
|
+
amountInMinorUnits: z.number().int(),
|
|
8
|
+
currencyCode,
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=money.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"money.js","sourceRoot":"","sources":["../../../../../../../packages/contract-core/src/lib/schemas/money.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAE5C,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACpC,YAAY;CACb,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nonEmptyString.js","sourceRoot":"","sources":["../../../../../../../packages/contract-core/src/lib/schemas/nonEmptyString.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objectId.js","sourceRoot":"","sources":["../../../../../../../packages/contract-core/src/lib/schemas/objectId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../../../../../../packages/contract-core/src/lib/schemas/uuid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clipboard-health/contract-core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Shared Zod schemas for Clipboard's contracts.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"contract",
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"directory": "packages/contract-core"
|
|
17
17
|
},
|
|
18
18
|
"type": "commonjs",
|
|
19
|
+
"sideEffects": false,
|
|
19
20
|
"main": "./src/index.js",
|
|
20
21
|
"typings": "./src/index.d.ts",
|
|
21
22
|
"publishConfig": {
|
|
@@ -25,11 +26,26 @@
|
|
|
25
26
|
"tslib": "2.8.1"
|
|
26
27
|
},
|
|
27
28
|
"devDependencies": {
|
|
28
|
-
"@clipboard-health/testing-core": "2.7.
|
|
29
|
+
"@clipboard-health/testing-core": "2.7.8",
|
|
29
30
|
"zod": "3.25.76"
|
|
30
31
|
},
|
|
31
32
|
"peerDependencies": {
|
|
32
33
|
"zod": "^3"
|
|
33
34
|
},
|
|
34
|
-
"types": "./src/index.d.ts"
|
|
35
|
+
"types": "./src/index.d.ts",
|
|
36
|
+
"exports": {
|
|
37
|
+
"./package.json": "./package.json",
|
|
38
|
+
".": {
|
|
39
|
+
"types": "./src/index.d.ts",
|
|
40
|
+
"import": "./esm/src/index.js",
|
|
41
|
+
"require": "./src/index.js",
|
|
42
|
+
"default": "./src/index.js"
|
|
43
|
+
},
|
|
44
|
+
"./*": {
|
|
45
|
+
"types": "./src/lib/schemas/*.d.ts",
|
|
46
|
+
"import": "./esm/src/lib/schemas/*.js",
|
|
47
|
+
"require": "./src/lib/schemas/*.js",
|
|
48
|
+
"default": "./src/lib/schemas/*.js"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
35
51
|
}
|