@voyantjs/charters-contracts 0.90.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/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # @voyantjs/charters-contracts
2
+
3
+ Pure charter content contracts for adapter implementers and external
4
+ consumers that need to validate `charters/v1` rich content payloads
5
+ without installing the full charters runtime package.
6
+
7
+ Use this package for `CHARTERS_CONTENT_SCHEMA_VERSION`,
8
+ `charterContentSchema`, `CharterContent`, nested content types, and
9
+ `validateCharterContent`. Use `@voyantjs/charters` when you also need
10
+ Drizzle schema, routes, services, booking integration, catalog projection, or
11
+ runtime content resolution (including the `mergeOverlaysIntoCharterContent`
12
+ overlay composition).
13
+
14
+ ## Install
15
+
16
+ ```bash
17
+ pnpm add @voyantjs/charters-contracts zod
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ ```ts
23
+ import {
24
+ CHARTERS_CONTENT_SCHEMA_VERSION,
25
+ charterContentSchema,
26
+ type CharterContent,
27
+ } from "@voyantjs/charters-contracts"
28
+ ```
29
+
30
+ Existing `@voyantjs/charters/content-shape` imports remain available for
31
+ applications that already depend on the full runtime package.
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Charters content shape — the rich detail-page content shape returned
3
+ * by `getContent` for sourced charter products.
4
+ *
5
+ * The charters content aggregate is `{ charter, yacht, voyages[],
6
+ * suites[], schedule_days[], policies[] }` — one payload returned by a
7
+ * single `getContent`. Pricing stays out (volatile-live, flows through
8
+ * `liveResolve`). Voyages here carry departure dates and structural
9
+ * info; their fares come through `liveResolve`.
10
+ *
11
+ * Charters' MYBA-style products often include APA (Advance
12
+ * Provisioning Allowance) terms in the policy block — captured under
13
+ * `policies[].kind: "supplier_notes"` or a structured rule shape. The
14
+ * synthesizer flattens what the projection knows.
15
+ *
16
+ * This module is the pure content contract: schemas, types, version, and
17
+ * the validator. The `mergeOverlaysIntoCharterContent` overlay
18
+ * composition stays in the `@voyantjs/charters` runtime package.
19
+ *
20
+ * See `docs/architecture/catalog-sourced-content.md` §3.2, §3.5.4, §3.6.
21
+ */
22
+ import { z } from "zod";
23
+ export declare const CHARTERS_CONTENT_SCHEMA_VERSION = "charters/v1";
24
+ export declare const charterSummarySchema: z.ZodObject<{
25
+ id: z.ZodString;
26
+ name: z.ZodString;
27
+ status: z.ZodOptional<z.ZodString>;
28
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
29
+ charter_type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
30
+ hero_image_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
31
+ highlights: z.ZodOptional<z.ZodArray<z.ZodString>>;
32
+ cruising_area: z.ZodOptional<z.ZodNullable<z.ZodString>>;
33
+ base_port: z.ZodOptional<z.ZodNullable<z.ZodString>>;
34
+ duration_nights: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
35
+ }, z.core.$strip>;
36
+ export declare const charterYachtSchema: z.ZodObject<{
37
+ id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
38
+ name: z.ZodString;
39
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
40
+ type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
41
+ length_meters: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
42
+ beam_meters: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
43
+ capacity_guests: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
44
+ capacity_crew: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
45
+ cabins: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
46
+ year_built: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
47
+ builder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
48
+ flag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
49
+ amenities: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
50
+ images: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
51
+ }, z.core.$strip>;
52
+ export declare const charterVoyageSchema: z.ZodObject<{
53
+ id: z.ZodString;
54
+ source_ref: z.ZodOptional<z.ZodNullable<z.ZodString>>;
55
+ departure_date: z.ZodString;
56
+ return_date: z.ZodOptional<z.ZodNullable<z.ZodString>>;
57
+ duration_nights: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
58
+ status: z.ZodOptional<z.ZodNullable<z.ZodString>>;
59
+ embarkation_port: z.ZodOptional<z.ZodNullable<z.ZodString>>;
60
+ disembarkation_port: z.ZodOptional<z.ZodNullable<z.ZodString>>;
61
+ per_suite_bookable: z.ZodOptional<z.ZodBoolean>;
62
+ }, z.core.$strip>;
63
+ export declare const charterSuiteSchema: z.ZodObject<{
64
+ id: z.ZodString;
65
+ code: z.ZodOptional<z.ZodNullable<z.ZodString>>;
66
+ name: z.ZodString;
67
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
68
+ category: z.ZodOptional<z.ZodNullable<z.ZodString>>;
69
+ capacity: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
70
+ has_balcony: z.ZodOptional<z.ZodBoolean>;
71
+ size_sqm: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
72
+ }, z.core.$strip>;
73
+ export declare const charterScheduleDaySchema: z.ZodObject<{
74
+ day_number: z.ZodNumber;
75
+ date: z.ZodOptional<z.ZodNullable<z.ZodString>>;
76
+ port_or_anchorage: z.ZodOptional<z.ZodNullable<z.ZodString>>;
77
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
78
+ is_at_sea: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
79
+ }, z.core.$strip>;
80
+ export declare const charterPolicySchema: z.ZodObject<{
81
+ kind: z.ZodEnum<{
82
+ cancellation: "cancellation";
83
+ payment: "payment";
84
+ supplier_notes: "supplier_notes";
85
+ requirements: "requirements";
86
+ apa: "apa";
87
+ }>;
88
+ body: z.ZodString;
89
+ rules: z.ZodOptional<z.ZodUnknown>;
90
+ }, z.core.$strip>;
91
+ export declare const charterContentSchema: z.ZodObject<{
92
+ charter: z.ZodObject<{
93
+ id: z.ZodString;
94
+ name: z.ZodString;
95
+ status: z.ZodOptional<z.ZodString>;
96
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
97
+ charter_type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
98
+ hero_image_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
99
+ highlights: z.ZodOptional<z.ZodArray<z.ZodString>>;
100
+ cruising_area: z.ZodOptional<z.ZodNullable<z.ZodString>>;
101
+ base_port: z.ZodOptional<z.ZodNullable<z.ZodString>>;
102
+ duration_nights: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
103
+ }, z.core.$strip>;
104
+ yacht: z.ZodOptional<z.ZodNullable<z.ZodObject<{
105
+ id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
106
+ name: z.ZodString;
107
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
108
+ type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
109
+ length_meters: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
110
+ beam_meters: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
111
+ capacity_guests: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
112
+ capacity_crew: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
113
+ cabins: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
114
+ year_built: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
115
+ builder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
116
+ flag: z.ZodOptional<z.ZodNullable<z.ZodString>>;
117
+ amenities: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
118
+ images: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
119
+ }, z.core.$strip>>>;
120
+ voyages: z.ZodDefault<z.ZodArray<z.ZodObject<{
121
+ id: z.ZodString;
122
+ source_ref: z.ZodOptional<z.ZodNullable<z.ZodString>>;
123
+ departure_date: z.ZodString;
124
+ return_date: z.ZodOptional<z.ZodNullable<z.ZodString>>;
125
+ duration_nights: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
126
+ status: z.ZodOptional<z.ZodNullable<z.ZodString>>;
127
+ embarkation_port: z.ZodOptional<z.ZodNullable<z.ZodString>>;
128
+ disembarkation_port: z.ZodOptional<z.ZodNullable<z.ZodString>>;
129
+ per_suite_bookable: z.ZodOptional<z.ZodBoolean>;
130
+ }, z.core.$strip>>>;
131
+ suites: z.ZodDefault<z.ZodArray<z.ZodObject<{
132
+ id: z.ZodString;
133
+ code: z.ZodOptional<z.ZodNullable<z.ZodString>>;
134
+ name: z.ZodString;
135
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
136
+ category: z.ZodOptional<z.ZodNullable<z.ZodString>>;
137
+ capacity: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
138
+ has_balcony: z.ZodOptional<z.ZodBoolean>;
139
+ size_sqm: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
140
+ }, z.core.$strip>>>;
141
+ schedule_days: z.ZodDefault<z.ZodArray<z.ZodObject<{
142
+ day_number: z.ZodNumber;
143
+ date: z.ZodOptional<z.ZodNullable<z.ZodString>>;
144
+ port_or_anchorage: z.ZodOptional<z.ZodNullable<z.ZodString>>;
145
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
146
+ is_at_sea: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
147
+ }, z.core.$strip>>>;
148
+ policies: z.ZodDefault<z.ZodArray<z.ZodObject<{
149
+ kind: z.ZodEnum<{
150
+ cancellation: "cancellation";
151
+ payment: "payment";
152
+ supplier_notes: "supplier_notes";
153
+ requirements: "requirements";
154
+ apa: "apa";
155
+ }>;
156
+ body: z.ZodString;
157
+ rules: z.ZodOptional<z.ZodUnknown>;
158
+ }, z.core.$strip>>>;
159
+ }, z.core.$strip>;
160
+ export type CharterContent = z.infer<typeof charterContentSchema>;
161
+ export type CharterSummary = z.infer<typeof charterSummarySchema>;
162
+ export type CharterYachtContent = z.infer<typeof charterYachtSchema>;
163
+ export type CharterVoyageContent = z.infer<typeof charterVoyageSchema>;
164
+ export type CharterSuiteContent = z.infer<typeof charterSuiteSchema>;
165
+ export type CharterScheduleDay = z.infer<typeof charterScheduleDaySchema>;
166
+ export type CharterPolicy = z.infer<typeof charterPolicySchema>;
167
+ export declare function validateCharterContent(payload: unknown): {
168
+ valid: true;
169
+ content: CharterContent;
170
+ } | {
171
+ valid: false;
172
+ reason: string;
173
+ };
174
+ //# sourceMappingURL=content-shape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-shape.d.ts","sourceRoot":"","sources":["../src/content-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,+BAA+B,gBAAgB,CAAA;AAE5D,eAAO,MAAM,oBAAoB;;;;;;;;;;;iBAW/B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;iBAe7B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;iBAW9B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;iBAS7B,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;;;;iBAMnC,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;iBAI9B,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACjE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACjE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AACpE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AACpE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,GACf;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAU7E"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Charters content shape — the rich detail-page content shape returned
3
+ * by `getContent` for sourced charter products.
4
+ *
5
+ * The charters content aggregate is `{ charter, yacht, voyages[],
6
+ * suites[], schedule_days[], policies[] }` — one payload returned by a
7
+ * single `getContent`. Pricing stays out (volatile-live, flows through
8
+ * `liveResolve`). Voyages here carry departure dates and structural
9
+ * info; their fares come through `liveResolve`.
10
+ *
11
+ * Charters' MYBA-style products often include APA (Advance
12
+ * Provisioning Allowance) terms in the policy block — captured under
13
+ * `policies[].kind: "supplier_notes"` or a structured rule shape. The
14
+ * synthesizer flattens what the projection knows.
15
+ *
16
+ * This module is the pure content contract: schemas, types, version, and
17
+ * the validator. The `mergeOverlaysIntoCharterContent` overlay
18
+ * composition stays in the `@voyantjs/charters` runtime package.
19
+ *
20
+ * See `docs/architecture/catalog-sourced-content.md` §3.2, §3.5.4, §3.6.
21
+ */
22
+ import { z } from "zod";
23
+ export const CHARTERS_CONTENT_SCHEMA_VERSION = "charters/v1";
24
+ export const charterSummarySchema = z.object({
25
+ id: z.string(),
26
+ name: z.string(),
27
+ status: z.string().optional(),
28
+ description: z.string().nullable().optional(),
29
+ charter_type: z.string().nullable().optional(), // "per_suite" | "whole_yacht"
30
+ hero_image_url: z.string().nullable().optional(),
31
+ highlights: z.array(z.string()).optional(),
32
+ cruising_area: z.string().nullable().optional(),
33
+ base_port: z.string().nullable().optional(),
34
+ duration_nights: z.number().int().nonnegative().nullable().optional(),
35
+ });
36
+ export const charterYachtSchema = z.object({
37
+ id: z.string().nullable().optional(),
38
+ name: z.string(),
39
+ description: z.string().nullable().optional(),
40
+ type: z.string().nullable().optional(), // motor / sail / catamaran
41
+ length_meters: z.number().nullable().optional(),
42
+ beam_meters: z.number().nullable().optional(),
43
+ capacity_guests: z.number().int().nonnegative().nullable().optional(),
44
+ capacity_crew: z.number().int().nonnegative().nullable().optional(),
45
+ cabins: z.number().int().nonnegative().nullable().optional(),
46
+ year_built: z.number().int().nonnegative().nullable().optional(),
47
+ builder: z.string().nullable().optional(),
48
+ flag: z.string().nullable().optional(),
49
+ amenities: z.array(z.string()).optional().default([]),
50
+ images: z.array(z.string()).optional().default([]),
51
+ });
52
+ export const charterVoyageSchema = z.object({
53
+ id: z.string(),
54
+ source_ref: z.string().nullable().optional(),
55
+ departure_date: z.string(),
56
+ return_date: z.string().nullable().optional(),
57
+ duration_nights: z.number().int().nonnegative().nullable().optional(),
58
+ status: z.string().nullable().optional(), // "open" | "on_request" | "sold_out"
59
+ embarkation_port: z.string().nullable().optional(),
60
+ disembarkation_port: z.string().nullable().optional(),
61
+ /** Whole-yacht voyages set this to false; per-suite voyages set true. */
62
+ per_suite_bookable: z.boolean().optional(),
63
+ });
64
+ export const charterSuiteSchema = z.object({
65
+ id: z.string(),
66
+ code: z.string().nullable().optional(),
67
+ name: z.string(),
68
+ description: z.string().nullable().optional(),
69
+ category: z.string().nullable().optional(), // "owner" | "vip" | "guest"
70
+ capacity: z.number().int().nonnegative().nullable().optional(),
71
+ has_balcony: z.boolean().optional(),
72
+ size_sqm: z.number().int().nonnegative().nullable().optional(),
73
+ });
74
+ export const charterScheduleDaySchema = z.object({
75
+ day_number: z.number().int().positive(),
76
+ date: z.string().nullable().optional(),
77
+ port_or_anchorage: z.string().nullable().optional(),
78
+ description: z.string().nullable().optional(),
79
+ is_at_sea: z.boolean().optional().default(false),
80
+ });
81
+ export const charterPolicySchema = z.object({
82
+ kind: z.enum(["cancellation", "payment", "supplier_notes", "requirements", "apa"]),
83
+ body: z.string(),
84
+ rules: z.unknown().optional(),
85
+ });
86
+ export const charterContentSchema = z.object({
87
+ charter: charterSummarySchema,
88
+ yacht: charterYachtSchema.nullable().optional(),
89
+ voyages: z.array(charterVoyageSchema).default([]),
90
+ suites: z.array(charterSuiteSchema).default([]),
91
+ schedule_days: z.array(charterScheduleDaySchema).default([]),
92
+ policies: z.array(charterPolicySchema).default([]),
93
+ });
94
+ export function validateCharterContent(payload) {
95
+ const result = charterContentSchema.safeParse(payload);
96
+ if (result.success) {
97
+ return { valid: true, content: result.data };
98
+ }
99
+ const issue = result.error.issues[0];
100
+ return {
101
+ valid: false,
102
+ reason: issue ? `${issue.path.join(".")}: ${issue.message}` : "validation failed",
103
+ };
104
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=content-shape.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-shape.test.d.ts","sourceRoot":"","sources":["../src/content-shape.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { CHARTERS_CONTENT_SCHEMA_VERSION, charterContentSchema, validateCharterContent, } from "./index.js";
3
+ describe("@voyantjs/charters-contracts content shape", () => {
4
+ it("validates the charters/v1 rich content payload", () => {
5
+ const content = charterContentSchema.parse({
6
+ charter: { id: "chrt_abc", name: "Aegean Escape", duration_nights: 7 },
7
+ yacht: { name: "MY Serenity", type: "motor", capacity_guests: 12 },
8
+ voyages: [{ id: "chvy_001", departure_date: "2026-06-01" }],
9
+ schedule_days: [{ day_number: 1, port_or_anchorage: "Athens" }],
10
+ policies: [{ kind: "apa", body: "APA is 30% of charter fee." }],
11
+ });
12
+ expect(CHARTERS_CONTENT_SCHEMA_VERSION).toBe("charters/v1");
13
+ expect(validateCharterContent(content)).toMatchObject({ valid: true });
14
+ expect(content.suites).toEqual([]);
15
+ expect(content.yacht?.amenities).toEqual([]);
16
+ });
17
+ it("defaults schedule-day is_at_sea to false", () => {
18
+ const content = charterContentSchema.parse({
19
+ charter: { id: "chrt_abc", name: "Aegean Escape" },
20
+ schedule_days: [{ day_number: 2 }],
21
+ });
22
+ expect(content.schedule_days[0]?.is_at_sea).toBe(false);
23
+ });
24
+ it("rejects payloads missing the required charter summary", () => {
25
+ expect(validateCharterContent({ voyages: [] })).toMatchObject({ valid: false });
26
+ expect(validateCharterContent({ charter: { id: "c" } })).toMatchObject({ valid: false });
27
+ });
28
+ it("rejects unknown policy kinds", () => {
29
+ expect(validateCharterContent({
30
+ charter: { id: "chrt_abc", name: "Aegean Escape" },
31
+ policies: [{ kind: "loyalty", body: "x" }],
32
+ })).toMatchObject({ valid: false });
33
+ });
34
+ });
@@ -0,0 +1,2 @@
1
+ export * from "./content-shape.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export * from "./content-shape.js";
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@voyantjs/charters-contracts",
3
+ "version": "0.90.0",
4
+ "license": "Apache-2.0",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": "./src/index.ts",
8
+ "./content-shape": "./src/content-shape.ts"
9
+ },
10
+ "scripts": {
11
+ "typecheck": "tsc --noEmit",
12
+ "lint": "biome check src/",
13
+ "test": "vitest run --passWithNoTests",
14
+ "build": "tsc -p tsconfig.json",
15
+ "clean": "rm -rf dist tsconfig.tsbuildinfo",
16
+ "prepack": "pnpm run build"
17
+ },
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "publishConfig": {
22
+ "access": "public",
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "import": "./dist/index.js",
27
+ "default": "./dist/index.js"
28
+ },
29
+ "./content-shape": {
30
+ "types": "./dist/content-shape.d.ts",
31
+ "import": "./dist/content-shape.js",
32
+ "default": "./dist/content-shape.js"
33
+ }
34
+ },
35
+ "main": "./dist/index.js",
36
+ "types": "./dist/index.d.ts"
37
+ },
38
+ "dependencies": {
39
+ "zod": "^4.3.6"
40
+ },
41
+ "devDependencies": {
42
+ "@voyantjs/voyant-typescript-config": "workspace:*",
43
+ "typescript": "^6.0.2",
44
+ "vitest": "^4.1.2"
45
+ },
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "https://github.com/voyantjs/voyant.git",
49
+ "directory": "packages/charters-contracts"
50
+ }
51
+ }