@contentrail/core 0.1.0 → 0.2.1

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 CHANGED
@@ -8,16 +8,14 @@ This package defines **collections and validation only**. It does not read files
8
8
 
9
9
  - Node.js **≥ 22** (`engines.node`)
10
10
  - TypeScript 5.9+ recommended for consumers
11
- - [Zod](https://zod.dev) `^3.23` (dependency + peer `zod@^3.23.0`; shipped/tested on **3.25.76**)
11
+ - [Zod](https://zod.dev) `^4.6.7` (dependency + peer; native `zod` entry — not `zod/v3`)
12
12
 
13
13
  Prefer `validateEntry` / `validateCollection` / `assertValidEntry` for untrusted
14
- input. Calling `schema.safeParse()` directly bypasses ContentRail JSON bounds
15
- (ADR 025).
14
+ input. Calling `schema.safeParse()` directly bypasses ContentRail JSON bounds.
16
15
 
17
- ## Install
16
+ Upgrading from ContentRail `0.1.0` (Zod 3): see `docs/MIGRATION_ZOD4.md`.
18
17
 
19
- > **Not on the public npm registry yet.** Packages remain `"private": true` until
20
- > publication is explicitly authorized. See `docs/PUBLISHING.md`.
18
+ ## Install
21
19
 
22
20
  ### Monorepo (current)
23
21
 
@@ -26,10 +24,10 @@ pnpm install
26
24
  pnpm --filter @contentrail/core build
27
25
  ```
28
26
 
29
- ### Intended after first public `0.1.0` release
27
+ ### From npm (`0.2.1`)
30
28
 
31
29
  ```sh
32
- pnpm add @contentrail/core zod
30
+ pnpm add @contentrail/core@0.2.1 zod@^4.6.7
33
31
  ```
34
32
 
35
33
  ## Define a collection
@@ -102,6 +100,29 @@ type Article = InferEntry<typeof articles>;
102
100
  // { title: string; slug: string; published: boolean; publishedAt?: string }
103
101
  ```
104
102
 
103
+ ## `ContentSchema`
104
+
105
+ `ContentSchema` is the public Zod 4 schema constraint used by
106
+ `defineCollection` / `ContentCollection` generics. It is an alias of
107
+ `z.ZodType` from the native `zod` entry:
108
+
109
+ ```ts
110
+ import { defineCollection, type ContentSchema } from "@contentrail/core";
111
+ import { z } from "zod";
112
+
113
+ const schema: ContentSchema = z.object({
114
+ title: z.string().min(1),
115
+ });
116
+
117
+ const pages = defineCollection({
118
+ name: "pages",
119
+ schema,
120
+ });
121
+ ```
122
+
123
+ Prefer defining schemas with `z` and letting `defineCollection` infer types;
124
+ use `ContentSchema` when you need an explicit annotation.
125
+
105
126
  ## Errors
106
127
 
107
128
  | Error | When |
@@ -125,7 +146,7 @@ From `@contentrail/core`:
125
146
  - `assertValidEntry`
126
147
  - `ContentDefinitionError`
127
148
  - `ContentValidationError`
128
- - Types: `ContentCollection`, `DefineCollectionInput`, `InferEntry`, `UnknownKeysPolicy`, `ValidationResult`, `ValidationSuccess`, `ValidationFailure`, `ValidationIssue`
149
+ - Types: `ContentSchema`, `ContentCollection`, `DefineCollectionInput`, `InferEntry`, `UnknownKeysPolicy`, `ValidationResult`, `ValidationSuccess`, `ValidationFailure`, `ValidationIssue`
129
150
 
130
151
  There is a single browser-safe export map entry (`.`). No server-only subpath exists in this package.
131
152
 
@@ -140,5 +161,5 @@ There is a single browser-safe export map entry (`.`). No server-only subpath ex
140
161
  - No content I/O, Git, R2, or publishing APIs
141
162
  - No editor schema introspection helpers beyond Zod itself
142
163
  - No JSON Schema export
143
- - Zod 4 is not targeted; peer range is Zod 3.x
144
- - Unpublished while `"private": true` — see root README / `docs/PUBLISHING.md`
164
+ - Requires Zod **4.6.7+**; Zod 3 schemas are not supported
165
+ - See root README / `docs/PUBLISHING.md` for `0.2.1` publication status
package/dist/bounds.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Structural limits applied **before** Zod validation.
3
3
  *
4
- * Zod 3 (and Zod 4's `zod/v3` entry) can accumulate one validation issue per
5
- * array element without early termination (GHSA-mrhx-c7xc-m3w5). ContentRail
6
- * stays on the Zod 3 public schema API; these bounds reduce resource-exhaustion
7
- * risk at trust boundaries without migrating consumers to Zod 4.
4
+ * ContentRail's public schema API targets Zod **4.6.7+** (native `zod` entry),
5
+ * which remediates GHSA-mrhx-c7xc-m3w5. These bounds remain as defense-in-depth
6
+ * at trust boundaries and provide stable ContentRail error codes (`too_big`,
7
+ * `too_deep`, `cyclic`) independent of Zod issue shaping.
8
8
  *
9
9
  * Limitations (explicit): these checks bound nesting, array length, and object
10
10
  * key count. They do **not** cap string byte length, total serialized size, or
package/dist/bounds.js CHANGED
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Structural limits applied **before** Zod validation.
3
3
  *
4
- * Zod 3 (and Zod 4's `zod/v3` entry) can accumulate one validation issue per
5
- * array element without early termination (GHSA-mrhx-c7xc-m3w5). ContentRail
6
- * stays on the Zod 3 public schema API; these bounds reduce resource-exhaustion
7
- * risk at trust boundaries without migrating consumers to Zod 4.
4
+ * ContentRail's public schema API targets Zod **4.6.7+** (native `zod` entry),
5
+ * which remediates GHSA-mrhx-c7xc-m3w5. These bounds remain as defense-in-depth
6
+ * at trust boundaries and provide stable ContentRail error codes (`too_big`,
7
+ * `too_deep`, `cyclic`) independent of Zod issue shaping.
8
8
  *
9
9
  * Limitations (explicit): these checks bound nesting, array length, and object
10
10
  * key count. They do **not** cap string byte length, total serialized size, or
@@ -1,8 +1,7 @@
1
- import { type z } from "zod";
2
- import type { ContentCollection, DefineCollectionInput } from "./types.js";
1
+ import type { ContentCollection, ContentSchema, DefineCollectionInput } from "./types.js";
3
2
  /**
4
3
  * Defines a content collection bound to a Zod schema.
5
4
  * Does not touch storage or publishing — schema and validation only.
6
5
  */
7
- export declare function defineCollection<TSchema extends z.ZodTypeAny>(input: DefineCollectionInput<TSchema>): ContentCollection<TSchema>;
6
+ export declare function defineCollection<TSchema extends ContentSchema>(input: DefineCollectionInput<TSchema>): ContentCollection<TSchema>;
8
7
  //# sourceMappingURL=collection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC;AAExC,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EAEtB,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU,EAC3D,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,GACpC,iBAAiB,CAAC,OAAO,CAAC,CA4C5B"}
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EAEtB,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,aAAa,EAC5D,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,GACpC,iBAAiB,CAAC,OAAO,CAAC,CA4C5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,KAAK,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAOrD,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAErD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAqC;IAErC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,sBAAsB,CAC9B,kDAAkD,CACnD,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,sBAAsB,CAC9B,+CAA+C,CAChD,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,sBAAsB,CAC9B,gCAAgC,uBAAuB,eAAe,IAAI,IAAI,CAC/E,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACxD,MAAM,IAAI,sBAAsB,CAC9B,eAAe,IAAI,4BAA4B,CAChD,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QACjD,MAAM,IAAI,sBAAsB,CAC9B,eAAe,IAAI,mDAAmD,CACvE,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAsB,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC;IACpE,IAAI,WAAW,KAAK,OAAO,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QACxD,MAAM,IAAI,sBAAsB,CAC9B,eAAe,IAAI,8CAA8C,CAClE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAY,CAAC;IAE5E,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI;QACJ,MAAM;QACN,WAAW;KACZ,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAAe,EACf,MAAyB;IAEzB,IAAI,CAAC,CAAC,MAAM,YAAY,SAAS,CAAC,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAQrD,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAErD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAqC;IAErC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,sBAAsB,CAC9B,kDAAkD,CACnD,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,sBAAsB,CAC9B,+CAA+C,CAChD,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,sBAAsB,CAC9B,gCAAgC,uBAAuB,eAAe,IAAI,IAAI,CAC/E,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACxD,MAAM,IAAI,sBAAsB,CAC9B,eAAe,IAAI,4BAA4B,CAChD,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QACjD,MAAM,IAAI,sBAAsB,CAC9B,eAAe,IAAI,mDAAmD,CACvE,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAsB,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC;IACpE,IAAI,WAAW,KAAK,OAAO,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QACxD,MAAM,IAAI,sBAAsB,CAC9B,eAAe,IAAI,8CAA8C,CAClE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAY,CAAC;IAE5E,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI;QACJ,MAAM;QACN,WAAW;KACZ,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAAe,EACf,MAAyB;IAEzB,IAAI,CAAC,CAAC,MAAM,YAAY,SAAS,CAAC,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { findJsonBoundViolation, type JsonBoundLimits, type JsonBoundViolation, } from "./bounds.js";
2
2
  export { defineCollection } from "./collection.js";
3
3
  export { ContentDefinitionError, ContentValidationError, type ValidationIssue, } from "./errors.js";
4
- export type { ContentCollection, DefineCollectionInput, InferEntry, UnknownKeysPolicy, ValidationFailure, ValidationResult, ValidationSuccess, } from "./types.js";
4
+ export type { ContentCollection, ContentSchema, DefineCollectionInput, InferEntry, UnknownKeysPolicy, ValidationFailure, ValidationResult, ValidationSuccess, } from "./types.js";
5
5
  export { DEFAULT_MAX_COLLECTION_ENTRIES, assertValidEntry, validateCollection, validateEntry, type ValidateCollectionOptions, type ValidateEntryOptions, } from "./validate.js";
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,8BAA8B,EAC9B,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,8BAA8B,EAC9B,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,GAGvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GAEvB,MAAM,aAAa,CAAC;AAUrB,OAAO,EACL,8BAA8B,EAC9B,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,GAGd,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,GAGvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GAEvB,MAAM,aAAa,CAAC;AAWrB,OAAO,EACL,8BAA8B,EAC9B,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,GAGd,MAAM,eAAe,CAAC"}
package/dist/types.d.ts CHANGED
@@ -2,7 +2,9 @@ import type { z } from "zod";
2
2
  import type { ContentValidationError } from "./errors.js";
3
3
  /** How root object schemas treat keys not declared in the schema. */
4
4
  export type UnknownKeysPolicy = "strip" | "strict";
5
- export interface DefineCollectionInput<TSchema extends z.ZodTypeAny> {
5
+ /** Zod 4 schema constraint used across ContentRail public generics. */
6
+ export type ContentSchema = z.ZodType;
7
+ export interface DefineCollectionInput<TSchema extends ContentSchema> {
6
8
  /** Stable collection identifier used in errors and tooling. */
7
9
  readonly name: string;
8
10
  /** Zod schema describing one content entry. */
@@ -21,7 +23,7 @@ export interface DefineCollectionInput<TSchema extends z.ZodTypeAny> {
21
23
  * A defined content collection. This is a schema-bound definition only —
22
24
  * it does not read, write, or publish content.
23
25
  */
24
- export interface ContentCollection<TSchema extends z.ZodTypeAny = z.ZodTypeAny> {
26
+ export interface ContentCollection<TSchema extends ContentSchema = ContentSchema> {
25
27
  readonly name: string;
26
28
  readonly schema: TSchema;
27
29
  readonly unknownKeys: UnknownKeysPolicy;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,qEAAqE;AACrE,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnD,MAAM,WAAW,qBAAqB,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU;IACjE,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAChC,OAAO,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;IAE3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;CACzC;AAED,4CAA4C;AAC5C,MAAM,MAAM,UAAU,CAAC,WAAW,SAAS,iBAAiB,IAAI,CAAC,CAAC,KAAK,CACrE,WAAW,CAAC,QAAQ,CAAC,CACtB,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,qEAAqE;AACrE,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnD,uEAAuE;AACvE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC;AAEtC,MAAM,WAAW,qBAAqB,CAAC,OAAO,SAAS,aAAa;IAClE,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAChC,OAAO,SAAS,aAAa,GAAG,aAAa;IAE7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;CACzC;AAED,4CAA4C;AAC5C,MAAM,MAAM,UAAU,CAAC,WAAW,SAAS,iBAAiB,IAAI,CAAC,CAAC,KAAK,CACrE,WAAW,CAAC,QAAQ,CAAC,CACtB,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC"}
@@ -13,8 +13,9 @@ export interface ValidateCollectionOptions extends ValidateEntryOptions {
13
13
  * Validates a single content entry against the collection schema.
14
14
  * Never throws for invalid content — returns a structured result.
15
15
  *
16
- * Structural JSON bounds run before Zod so oversized nested arrays/objects
17
- * cannot drive unbounded issue accumulation in Zod 3 (GHSA-mrhx-c7xc-m3w5).
16
+ * Structural JSON bounds run before Zod as defense-in-depth against oversized
17
+ * nested arrays/objects (GHSA-mrhx-c7xc-m3w5 was fixed in Zod 4.6.6+; bounds
18
+ * remain for defense-in-depth and consistent ContentRail error codes).
18
19
  */
19
20
  export declare function validateEntry<TCollection extends ContentCollection>(collection: TCollection, entry: unknown, options?: ValidateEntryOptions): ValidationResult<InferEntry<TCollection>>;
20
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3E,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,sFAAsF;AACtF,eAAO,MAAM,8BAA8B,QAAS,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,yBAA0B,SAAQ,oBAAoB;IACrE,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,WAAW,SAAS,iBAAiB,EACjE,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,oBAAyB,GACjC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAgC3C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,SAAS,iBAAiB,EACtE,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,yBAA8B,GACtC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CA+DlD;AA0DD,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,WAAW,SAAS,iBAAiB,EACpE,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,oBAAyB,GACjC,UAAU,CAAC,WAAW,CAAC,CAMzB"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3E,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,sFAAsF;AACtF,eAAO,MAAM,8BAA8B,QAAS,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,yBAA0B,SAAQ,oBAAoB;IACrE,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,WAAW,SAAS,iBAAiB,EACjE,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,oBAAyB,GACjC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAgC3C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,SAAS,iBAAiB,EACtE,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,yBAA8B,GACtC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CA+DlD;AA6ED,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,WAAW,SAAS,iBAAiB,EACpE,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,oBAAyB,GACjC,UAAU,CAAC,WAAW,CAAC,CAMzB"}
package/dist/validate.js CHANGED
@@ -6,8 +6,9 @@ export const DEFAULT_MAX_COLLECTION_ENTRIES = 10_000;
6
6
  * Validates a single content entry against the collection schema.
7
7
  * Never throws for invalid content — returns a structured result.
8
8
  *
9
- * Structural JSON bounds run before Zod so oversized nested arrays/objects
10
- * cannot drive unbounded issue accumulation in Zod 3 (GHSA-mrhx-c7xc-m3w5).
9
+ * Structural JSON bounds run before Zod as defense-in-depth against oversized
10
+ * nested arrays/objects (GHSA-mrhx-c7xc-m3w5 was fixed in Zod 4.6.6+; bounds
11
+ * remain for defense-in-depth and consistent ContentRail error codes).
11
12
  */
12
13
  export function validateEntry(collection, entry, options = {}) {
13
14
  assertCollection(collection);
@@ -106,6 +107,7 @@ function assertCollection(collection) {
106
107
  }
107
108
  }
108
109
  function toValidationIssue(issue) {
110
+ const record = issue;
109
111
  const base = {
110
112
  path: issue.path.map((segment) => {
111
113
  if (typeof segment === "string" || typeof segment === "number") {
@@ -117,16 +119,33 @@ function toValidationIssue(issue) {
117
119
  message: issue.message,
118
120
  };
119
121
  if (issue.code === "invalid_type") {
122
+ const expected = record.expected;
123
+ const input = record.input;
124
+ const received = record.received;
120
125
  return {
121
126
  ...base,
122
- expected: issue.expected,
123
- received: issue.received,
127
+ ...(expected !== undefined ? { expected: String(expected) } : {}),
128
+ ...(input !== undefined
129
+ ? { received: typeName(input) }
130
+ : received !== undefined
131
+ ? { received: String(received) }
132
+ : {}),
124
133
  };
125
134
  }
126
135
  if (issue.code === "unrecognized_keys") {
136
+ const keys = Array.isArray(record.keys) ? record.keys.map(String) : [];
127
137
  return {
128
138
  ...base,
129
- received: issue.keys.join(", "),
139
+ received: keys.join(", "),
140
+ };
141
+ }
142
+ if (issue.code === "invalid_format") {
143
+ const format = record.format;
144
+ const input = record.input;
145
+ return {
146
+ ...base,
147
+ ...(format !== undefined ? { expected: String(format) } : {}),
148
+ ...(input !== undefined ? { received: String(input) } : {}),
130
149
  };
131
150
  }
132
151
  return base;
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentrail/core",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Framework-independent ContentRail schemas, validation, and content types.",
@@ -22,15 +22,15 @@
22
22
  "LICENSE"
23
23
  ],
24
24
  "dependencies": {
25
- "zod": "^3.25.76"
25
+ "zod": "^4.6.7"
26
26
  },
27
27
  "peerDependencies": {
28
- "zod": "^3.23.0"
28
+ "zod": "^4.6.7"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^22.20.5",
32
32
  "typescript": "5.9.3",
33
- "zod": "3.25.76"
33
+ "zod": "4.6.7"
34
34
  },
35
35
  "repository": {
36
36
  "type": "git",