zod 4.6.2 → 4.6.4
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/README.md +2 -2
- package/package.json +1 -1
- package/src/v4/classic/checks.ts +1 -0
- package/src/v4/classic/schemas.ts +12 -29
- package/src/v4/classic/tests/assignability.test.ts +1 -0
- package/src/v4/classic/tests/cyclic-data.test.ts +2 -11
- package/src/v4/classic/tests/firstparty.test.ts +0 -4
- package/src/v4/classic/tests/instance-footprint.test.ts +22 -0
- package/src/v4/classic/tests/instanceof.test.ts +1 -1
- package/src/v4/classic/tests/number.test.ts +39 -0
- package/src/v4/classic/tests/properties.test.ts +34 -137
- package/src/v4/classic/tests/string.test.ts +70 -1
- package/src/v4/classic/tests/to-json-schema.test.ts +87 -35
- package/src/v4/core/api.ts +21 -29
- package/src/v4/core/checks.ts +61 -1
- package/src/v4/core/compile.ts +35 -24
- package/src/v4/core/core.ts +1 -3
- package/src/v4/core/json-schema-processors.ts +9 -63
- package/src/v4/core/memoizer.ts +2 -5
- package/src/v4/core/regexes.ts +4 -0
- package/src/v4/core/schemas.ts +36 -109
- package/src/v4/core/tests/compile-differential.test.ts +35 -0
- package/src/v4/core/tests/compile.test.ts +177 -0
- package/src/v4/core/tests/url-no-canparse.test.ts +118 -16
- package/src/v4/core/to-json-schema.ts +1 -1
- package/src/v4/core/util.ts +0 -4
- package/src/v4/core/versions.ts +1 -1
- package/src/v4/core/visit.ts +0 -11
- package/src/v4/locales/ar.ts +1 -0
- package/src/v4/locales/az.ts +1 -0
- package/src/v4/locales/be.ts +1 -0
- package/src/v4/locales/bg.ts +1 -0
- package/src/v4/locales/bn.ts +1 -0
- package/src/v4/locales/ca.ts +1 -0
- package/src/v4/locales/ckb.ts +1 -0
- package/src/v4/locales/cs.ts +1 -0
- package/src/v4/locales/da.ts +1 -0
- package/src/v4/locales/de.ts +1 -0
- package/src/v4/locales/el.ts +1 -0
- package/src/v4/locales/en.ts +1 -0
- package/src/v4/locales/eo.ts +1 -0
- package/src/v4/locales/es.ts +1 -0
- package/src/v4/locales/fa.ts +1 -0
- package/src/v4/locales/fi.ts +1 -0
- package/src/v4/locales/fr-CA.ts +1 -0
- package/src/v4/locales/fr.ts +1 -0
- package/src/v4/locales/gu.ts +1 -0
- package/src/v4/locales/he.ts +1 -0
- package/src/v4/locales/hi.ts +1 -0
- package/src/v4/locales/hr.ts +1 -0
- package/src/v4/locales/hu.ts +1 -0
- package/src/v4/locales/hy.ts +1 -0
- package/src/v4/locales/id.ts +1 -0
- package/src/v4/locales/is.ts +1 -0
- package/src/v4/locales/it.ts +1 -0
- package/src/v4/locales/ja.ts +1 -0
- package/src/v4/locales/ka.ts +1 -0
- package/src/v4/locales/km.ts +1 -0
- package/src/v4/locales/kn.ts +1 -0
- package/src/v4/locales/ko.ts +1 -0
- package/src/v4/locales/lt.ts +1 -0
- package/src/v4/locales/mk.ts +1 -0
- package/src/v4/locales/ms.ts +1 -0
- package/src/v4/locales/ne.ts +1 -0
- package/src/v4/locales/nl.ts +1 -0
- package/src/v4/locales/nn.ts +1 -0
- package/src/v4/locales/no.ts +1 -0
- package/src/v4/locales/ota.ts +1 -0
- package/src/v4/locales/pl.ts +1 -0
- package/src/v4/locales/ps.ts +1 -0
- package/src/v4/locales/pt-BR.ts +1 -0
- package/src/v4/locales/pt.ts +1 -0
- package/src/v4/locales/ro.ts +1 -0
- package/src/v4/locales/ru.ts +1 -0
- package/src/v4/locales/sk.ts +1 -0
- package/src/v4/locales/sl.ts +1 -0
- package/src/v4/locales/sv.ts +1 -0
- package/src/v4/locales/ta.ts +1 -0
- package/src/v4/locales/tg.ts +1 -0
- package/src/v4/locales/th.ts +1 -0
- package/src/v4/locales/tk.ts +1 -0
- package/src/v4/locales/tr.ts +1 -0
- package/src/v4/locales/uk.ts +1 -0
- package/src/v4/locales/ur.ts +1 -0
- package/src/v4/locales/uz.ts +1 -0
- package/src/v4/locales/vi.ts +1 -0
- package/src/v4/locales/yo.ts +1 -0
- package/src/v4/locales/zh-CN.ts +1 -0
- package/src/v4/locales/zh-TW.ts +1 -0
- package/src/v4/mini/checks.ts +1 -0
- package/src/v4/mini/schemas.ts +12 -23
- package/src/v4/mini/tests/index.test.ts +56 -0
- package/src/v4/mini/tests/string.test.ts +7 -0
- package/v4/classic/checks.cjs +2 -1
- package/v4/classic/checks.d.cts +1 -1
- package/v4/classic/checks.d.ts +1 -1
- package/v4/classic/checks.js +1 -1
- package/v4/classic/schemas.cjs +11 -15
- package/v4/classic/schemas.d.cts +2 -6
- package/v4/classic/schemas.d.ts +2 -6
- package/v4/classic/schemas.js +9 -13
- package/v4/core/api.cjs +11 -23
- package/v4/core/api.d.cts +8 -4
- package/v4/core/api.d.ts +8 -4
- package/v4/core/api.js +11 -23
- package/v4/core/checks.cjs +32 -1
- package/v4/core/checks.d.cts +16 -0
- package/v4/core/checks.d.ts +16 -0
- package/v4/core/checks.js +31 -0
- package/v4/core/compile.cjs +12 -17
- package/v4/core/compile.js +13 -18
- package/v4/core/core.cjs +1 -1
- package/v4/core/core.js +1 -1
- package/v4/core/json-schema-processors.cjs +8 -44
- package/v4/core/json-schema-processors.d.cts +0 -1
- package/v4/core/json-schema-processors.d.ts +0 -1
- package/v4/core/json-schema-processors.js +8 -43
- package/v4/core/memoizer.cjs +2 -5
- package/v4/core/memoizer.js +2 -5
- package/v4/core/regexes.cjs +4 -2
- package/v4/core/regexes.d.cts +1 -0
- package/v4/core/regexes.d.ts +1 -0
- package/v4/core/regexes.js +2 -0
- package/v4/core/schemas.cjs +33 -73
- package/v4/core/schemas.d.cts +7 -22
- package/v4/core/schemas.d.ts +7 -22
- package/v4/core/schemas.js +30 -72
- package/v4/core/to-json-schema.cjs +0 -1
- package/v4/core/to-json-schema.d.cts +0 -3
- package/v4/core/to-json-schema.d.ts +0 -3
- package/v4/core/to-json-schema.js +1 -1
- package/v4/core/util.cjs +0 -4
- package/v4/core/util.js +0 -4
- package/v4/core/versions.cjs +1 -1
- package/v4/core/versions.js +1 -1
- package/v4/core/visit.cjs +0 -12
- package/v4/core/visit.js +0 -12
- package/v4/locales/ar.cjs +1 -0
- package/v4/locales/ar.js +1 -0
- package/v4/locales/az.cjs +1 -0
- package/v4/locales/az.js +1 -0
- package/v4/locales/be.cjs +1 -0
- package/v4/locales/be.js +1 -0
- package/v4/locales/bg.cjs +1 -0
- package/v4/locales/bg.js +1 -0
- package/v4/locales/bn.cjs +1 -0
- package/v4/locales/bn.js +1 -0
- package/v4/locales/ca.cjs +1 -0
- package/v4/locales/ca.js +1 -0
- package/v4/locales/ckb.cjs +1 -0
- package/v4/locales/ckb.js +1 -0
- package/v4/locales/cs.cjs +1 -0
- package/v4/locales/cs.js +1 -0
- package/v4/locales/da.cjs +1 -0
- package/v4/locales/da.js +1 -0
- package/v4/locales/de.cjs +1 -0
- package/v4/locales/de.js +1 -0
- package/v4/locales/el.cjs +1 -0
- package/v4/locales/el.js +1 -0
- package/v4/locales/en.cjs +1 -0
- package/v4/locales/en.js +1 -0
- package/v4/locales/eo.cjs +1 -0
- package/v4/locales/eo.js +1 -0
- package/v4/locales/es.cjs +1 -0
- package/v4/locales/es.js +1 -0
- package/v4/locales/fa.cjs +1 -0
- package/v4/locales/fa.js +1 -0
- package/v4/locales/fi.cjs +1 -0
- package/v4/locales/fi.js +1 -0
- package/v4/locales/fr-CA.cjs +1 -0
- package/v4/locales/fr-CA.js +1 -0
- package/v4/locales/fr.cjs +1 -0
- package/v4/locales/fr.js +1 -0
- package/v4/locales/gu.cjs +1 -0
- package/v4/locales/gu.js +1 -0
- package/v4/locales/he.cjs +1 -0
- package/v4/locales/he.js +1 -0
- package/v4/locales/hi.cjs +1 -0
- package/v4/locales/hi.js +1 -0
- package/v4/locales/hr.cjs +1 -0
- package/v4/locales/hr.js +1 -0
- package/v4/locales/hu.cjs +1 -0
- package/v4/locales/hu.js +1 -0
- package/v4/locales/hy.cjs +1 -0
- package/v4/locales/hy.js +1 -0
- package/v4/locales/id.cjs +1 -0
- package/v4/locales/id.js +1 -0
- package/v4/locales/is.cjs +1 -0
- package/v4/locales/is.js +1 -0
- package/v4/locales/it.cjs +1 -0
- package/v4/locales/it.js +1 -0
- package/v4/locales/ja.cjs +1 -0
- package/v4/locales/ja.js +1 -0
- package/v4/locales/ka.cjs +1 -0
- package/v4/locales/ka.js +1 -0
- package/v4/locales/km.cjs +1 -0
- package/v4/locales/km.js +1 -0
- package/v4/locales/kn.cjs +1 -0
- package/v4/locales/kn.js +1 -0
- package/v4/locales/ko.cjs +1 -0
- package/v4/locales/ko.js +1 -0
- package/v4/locales/lt.cjs +1 -0
- package/v4/locales/lt.js +1 -0
- package/v4/locales/mk.cjs +1 -0
- package/v4/locales/mk.js +1 -0
- package/v4/locales/ms.cjs +1 -0
- package/v4/locales/ms.js +1 -0
- package/v4/locales/ne.cjs +1 -0
- package/v4/locales/ne.js +1 -0
- package/v4/locales/nl.cjs +1 -0
- package/v4/locales/nl.js +1 -0
- package/v4/locales/nn.cjs +1 -0
- package/v4/locales/nn.js +1 -0
- package/v4/locales/no.cjs +1 -0
- package/v4/locales/no.js +1 -0
- package/v4/locales/ota.cjs +1 -0
- package/v4/locales/ota.js +1 -0
- package/v4/locales/pl.cjs +1 -0
- package/v4/locales/pl.js +1 -0
- package/v4/locales/ps.cjs +1 -0
- package/v4/locales/ps.js +1 -0
- package/v4/locales/pt-BR.cjs +1 -0
- package/v4/locales/pt-BR.js +1 -0
- package/v4/locales/pt.cjs +1 -0
- package/v4/locales/pt.js +1 -0
- package/v4/locales/ro.cjs +1 -0
- package/v4/locales/ro.js +1 -0
- package/v4/locales/ru.cjs +1 -0
- package/v4/locales/ru.js +1 -0
- package/v4/locales/sk.cjs +1 -0
- package/v4/locales/sk.js +1 -0
- package/v4/locales/sl.cjs +1 -0
- package/v4/locales/sl.js +1 -0
- package/v4/locales/sv.cjs +1 -0
- package/v4/locales/sv.js +1 -0
- package/v4/locales/ta.cjs +1 -0
- package/v4/locales/ta.js +1 -0
- package/v4/locales/tg.cjs +1 -0
- package/v4/locales/tg.js +1 -0
- package/v4/locales/th.cjs +1 -0
- package/v4/locales/th.js +1 -0
- package/v4/locales/tk.cjs +1 -0
- package/v4/locales/tk.js +1 -0
- package/v4/locales/tr.cjs +1 -0
- package/v4/locales/tr.js +1 -0
- package/v4/locales/uk.cjs +1 -0
- package/v4/locales/uk.js +1 -0
- package/v4/locales/ur.cjs +1 -0
- package/v4/locales/ur.js +1 -0
- package/v4/locales/uz.cjs +1 -0
- package/v4/locales/uz.js +1 -0
- package/v4/locales/vi.cjs +1 -0
- package/v4/locales/vi.js +1 -0
- package/v4/locales/yo.cjs +1 -0
- package/v4/locales/yo.js +1 -0
- package/v4/locales/zh-CN.cjs +1 -0
- package/v4/locales/zh-CN.js +1 -0
- package/v4/locales/zh-TW.cjs +1 -0
- package/v4/locales/zh-TW.js +1 -0
- package/v4/mini/checks.cjs +2 -1
- package/v4/mini/checks.d.cts +1 -1
- package/v4/mini/checks.d.ts +1 -1
- package/v4/mini/checks.js +1 -1
- package/v4/mini/schemas.cjs +11 -13
- package/v4/mini/schemas.d.cts +1 -4
- package/v4/mini/schemas.d.ts +1 -4
- package/v4/mini/schemas.js +9 -11
package/src/v4/locales/bn.ts
CHANGED
package/src/v4/locales/ca.ts
CHANGED
package/src/v4/locales/ckb.ts
CHANGED
package/src/v4/locales/cs.ts
CHANGED
package/src/v4/locales/da.ts
CHANGED
package/src/v4/locales/de.ts
CHANGED
package/src/v4/locales/el.ts
CHANGED
package/src/v4/locales/en.ts
CHANGED
package/src/v4/locales/eo.ts
CHANGED
package/src/v4/locales/es.ts
CHANGED
package/src/v4/locales/fa.ts
CHANGED
package/src/v4/locales/fi.ts
CHANGED
package/src/v4/locales/fr-CA.ts
CHANGED
package/src/v4/locales/fr.ts
CHANGED
|
@@ -45,6 +45,7 @@ const error: () => errors.$ZodErrorMap = () => {
|
|
|
45
45
|
json_string: "chaîne de caractères JSON",
|
|
46
46
|
e164: "numéro au format E.164",
|
|
47
47
|
credit_card: "numéro de carte de crédit",
|
|
48
|
+
currency_code: "code de devise",
|
|
48
49
|
iban: "IBAN",
|
|
49
50
|
jwt: "JWT",
|
|
50
51
|
template_literal: "entrée",
|
package/src/v4/locales/gu.ts
CHANGED
package/src/v4/locales/he.ts
CHANGED
|
@@ -88,6 +88,7 @@ const error: () => errors.$ZodErrorMap = () => {
|
|
|
88
88
|
json_string: { label: "מחרוזת JSON", gender: "f" },
|
|
89
89
|
e164: { label: "מספר E.164", gender: "m" },
|
|
90
90
|
credit_card: { label: "מספר כרטיס אשראי", gender: "m" },
|
|
91
|
+
currency_code: { label: "קוד מטבע", gender: "m" },
|
|
91
92
|
iban: { label: "IBAN", gender: "m" },
|
|
92
93
|
jwt: { label: "JWT", gender: "m" },
|
|
93
94
|
template_literal: { label: "קלט", gender: "m" },
|
package/src/v4/locales/hi.ts
CHANGED
package/src/v4/locales/hr.ts
CHANGED
package/src/v4/locales/hu.ts
CHANGED
package/src/v4/locales/hy.ts
CHANGED
package/src/v4/locales/id.ts
CHANGED
package/src/v4/locales/is.ts
CHANGED
package/src/v4/locales/it.ts
CHANGED
package/src/v4/locales/ja.ts
CHANGED
package/src/v4/locales/ka.ts
CHANGED
package/src/v4/locales/km.ts
CHANGED
package/src/v4/locales/kn.ts
CHANGED
package/src/v4/locales/ko.ts
CHANGED
package/src/v4/locales/lt.ts
CHANGED
|
@@ -146,6 +146,7 @@ const error: () => errors.$ZodErrorMap = () => {
|
|
|
146
146
|
json_string: "JSON eilutė",
|
|
147
147
|
e164: "E.164 numeris",
|
|
148
148
|
credit_card: "kredito kortelės numeris",
|
|
149
|
+
currency_code: "valiutos kodas",
|
|
149
150
|
iban: "IBAN",
|
|
150
151
|
jwt: "JWT",
|
|
151
152
|
template_literal: "įvestis",
|
package/src/v4/locales/mk.ts
CHANGED
package/src/v4/locales/ms.ts
CHANGED
package/src/v4/locales/ne.ts
CHANGED
package/src/v4/locales/nl.ts
CHANGED
package/src/v4/locales/nn.ts
CHANGED
package/src/v4/locales/no.ts
CHANGED
package/src/v4/locales/ota.ts
CHANGED
package/src/v4/locales/pl.ts
CHANGED
package/src/v4/locales/ps.ts
CHANGED
package/src/v4/locales/pt-BR.ts
CHANGED
|
@@ -47,6 +47,7 @@ const error: () => errors.$ZodErrorMap = () => {
|
|
|
47
47
|
json_string: "o texto JSON",
|
|
48
48
|
e164: "o número E.164",
|
|
49
49
|
credit_card: "o número de cartão de crédito",
|
|
50
|
+
currency_code: "o código de moeda",
|
|
50
51
|
iban: "o IBAN",
|
|
51
52
|
jwt: "o JWT",
|
|
52
53
|
template_literal: "a entrada",
|
package/src/v4/locales/pt.ts
CHANGED
|
@@ -47,6 +47,7 @@ const error: () => errors.$ZodErrorMap = () => {
|
|
|
47
47
|
json_string: "o texto JSON",
|
|
48
48
|
e164: "o número E.164",
|
|
49
49
|
credit_card: "o número de cartão de crédito",
|
|
50
|
+
currency_code: "o código de moeda",
|
|
50
51
|
iban: "o IBAN",
|
|
51
52
|
jwt: "o JWT",
|
|
52
53
|
template_literal: "a entrada",
|
package/src/v4/locales/ro.ts
CHANGED
package/src/v4/locales/ru.ts
CHANGED
package/src/v4/locales/sk.ts
CHANGED
package/src/v4/locales/sl.ts
CHANGED
package/src/v4/locales/sv.ts
CHANGED
package/src/v4/locales/ta.ts
CHANGED
package/src/v4/locales/tg.ts
CHANGED
package/src/v4/locales/th.ts
CHANGED
|
@@ -46,6 +46,7 @@ const error: () => errors.$ZodErrorMap = () => {
|
|
|
46
46
|
json_string: "ข้อความแบบ JSON",
|
|
47
47
|
e164: "เบอร์โทรศัพท์ระหว่างประเทศ (E.164)",
|
|
48
48
|
credit_card: "หมายเลขบัตรเครดิต",
|
|
49
|
+
currency_code: "รหัสสกุลเงิน",
|
|
49
50
|
iban: "IBAN",
|
|
50
51
|
jwt: "โทเคน JWT",
|
|
51
52
|
template_literal: "ข้อมูลที่ป้อน",
|
package/src/v4/locales/tk.ts
CHANGED
package/src/v4/locales/tr.ts
CHANGED
package/src/v4/locales/uk.ts
CHANGED
package/src/v4/locales/ur.ts
CHANGED
package/src/v4/locales/uz.ts
CHANGED
package/src/v4/locales/vi.ts
CHANGED
package/src/v4/locales/yo.ts
CHANGED
package/src/v4/locales/zh-CN.ts
CHANGED
package/src/v4/locales/zh-TW.ts
CHANGED
package/src/v4/mini/checks.ts
CHANGED
package/src/v4/mini/schemas.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as core from "../core/index.js";
|
|
2
2
|
import type { $ZodBigIntFormats } from "../core/index.js";
|
|
3
|
+
import * as regexes from "../core/regexes.js";
|
|
3
4
|
import * as util from "../core/util.js";
|
|
4
5
|
import * as parse from "./parse.js";
|
|
5
6
|
|
|
@@ -224,8 +225,8 @@ export function url(params?: string | core.$ZodURLParams): ZodMiniURL {
|
|
|
224
225
|
// @__NO_SIDE_EFFECTS__
|
|
225
226
|
export function httpUrl(params?: string | Omit<core.$ZodURLParams, "protocol" | "hostname">): ZodMiniURL {
|
|
226
227
|
return core._url(ZodMiniURL, {
|
|
227
|
-
protocol:
|
|
228
|
-
hostname:
|
|
228
|
+
protocol: regexes.httpProtocol,
|
|
229
|
+
hostname: regexes.domain,
|
|
229
230
|
...util.normalizeParams(params),
|
|
230
231
|
});
|
|
231
232
|
}
|
|
@@ -563,12 +564,19 @@ export function stringFormat<Format extends string>(
|
|
|
563
564
|
|
|
564
565
|
// @__NO_SIDE_EFFECTS__
|
|
565
566
|
export function hostname(_params?: string | core.$ZodStringFormatParams): ZodMiniCustomStringFormat<"hostname"> {
|
|
566
|
-
return core._stringFormat(ZodMiniCustomStringFormat, "hostname",
|
|
567
|
+
return core._stringFormat(ZodMiniCustomStringFormat, "hostname", regexes.hostname, _params) as any;
|
|
567
568
|
}
|
|
568
569
|
|
|
569
570
|
// @__NO_SIDE_EFFECTS__
|
|
570
571
|
export function hex(_params?: string | core.$ZodStringFormatParams): ZodMiniCustomStringFormat<"hex"> {
|
|
571
|
-
return core._stringFormat(ZodMiniCustomStringFormat, "hex",
|
|
572
|
+
return core._stringFormat(ZodMiniCustomStringFormat, "hex", regexes.hex, _params) as any;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
// @__NO_SIDE_EFFECTS__
|
|
576
|
+
export function currencyCode(
|
|
577
|
+
_params?: string | core.$ZodStringFormatParams
|
|
578
|
+
): ZodMiniCustomStringFormat<"currency_code"> {
|
|
579
|
+
return core._stringFormat(ZodMiniCustomStringFormat, "currency_code", regexes.currencyCode, _params) as any;
|
|
572
580
|
}
|
|
573
581
|
|
|
574
582
|
// @__NO_SIDE_EFFECTS__
|
|
@@ -1866,25 +1874,6 @@ export const ZodMiniCustom: core.$constructor<ZodMiniCustom> = /*@__PURE__*/ cor
|
|
|
1866
1874
|
}
|
|
1867
1875
|
);
|
|
1868
1876
|
|
|
1869
|
-
// ZodMiniProperties
|
|
1870
|
-
export interface ZodMiniProperties<Shape extends core.$ZodShape = core.$ZodShape>
|
|
1871
|
-
extends _ZodMiniType<core.$ZodPropertiesInternals<Shape>>,
|
|
1872
|
-
core.$ZodProperties<Shape> {}
|
|
1873
|
-
export const ZodMiniProperties: core.$constructor<ZodMiniProperties> = /*@__PURE__*/ core.$constructor(
|
|
1874
|
-
"ZodMiniProperties",
|
|
1875
|
-
(inst, def) => {
|
|
1876
|
-
core.$ZodProperties.init(inst, def);
|
|
1877
|
-
ZodMiniType.init(inst, def);
|
|
1878
|
-
}
|
|
1879
|
-
);
|
|
1880
|
-
|
|
1881
|
-
export function properties<Shape extends core.$ZodShape>(
|
|
1882
|
-
shape: Shape,
|
|
1883
|
-
params?: string | core.$ZodPropertiesParams
|
|
1884
|
-
): ZodMiniProperties<Shape> {
|
|
1885
|
-
return core._properties(ZodMiniProperties, shape, params) as any;
|
|
1886
|
-
}
|
|
1887
|
-
|
|
1888
1877
|
// custom checks
|
|
1889
1878
|
// @__NO_SIDE_EFFECTS__
|
|
1890
1879
|
export function check<O = unknown>(fn: core.CheckFn<O>, params?: string | core.$ZodCustomParams): core.$ZodCheck<O> {
|