@revealui/contracts 1.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.
Files changed (191) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +160 -0
  3. package/dist/a2a/index.d.ts +383 -0
  4. package/dist/a2a/index.d.ts.map +1 -0
  5. package/dist/a2a/index.js +276 -0
  6. package/dist/a2a/index.js.map +1 -0
  7. package/dist/actions/action-validator.d.ts +48 -0
  8. package/dist/actions/action-validator.d.ts.map +1 -0
  9. package/dist/actions/action-validator.js +288 -0
  10. package/dist/actions/action-validator.js.map +1 -0
  11. package/dist/actions/index.d.ts +7 -0
  12. package/dist/actions/index.d.ts.map +1 -0
  13. package/dist/actions/index.js +7 -0
  14. package/dist/actions/index.js.map +1 -0
  15. package/dist/agents/index.d.ts +628 -0
  16. package/dist/agents/index.d.ts.map +1 -0
  17. package/dist/agents/index.js +511 -0
  18. package/dist/agents/index.js.map +1 -0
  19. package/dist/agents/types.d.ts +22 -0
  20. package/dist/agents/types.d.ts.map +1 -0
  21. package/dist/agents/types.js +2 -0
  22. package/dist/agents/types.js.map +1 -0
  23. package/dist/api/auth.d.ts +60 -0
  24. package/dist/api/auth.d.ts.map +1 -0
  25. package/dist/api/auth.js +84 -0
  26. package/dist/api/auth.js.map +1 -0
  27. package/dist/api/chat.d.ts +45 -0
  28. package/dist/api/chat.d.ts.map +1 -0
  29. package/dist/api/chat.js +55 -0
  30. package/dist/api/chat.js.map +1 -0
  31. package/dist/api/gdpr.d.ts +39 -0
  32. package/dist/api/gdpr.d.ts.map +1 -0
  33. package/dist/api/gdpr.js +53 -0
  34. package/dist/api/gdpr.js.map +1 -0
  35. package/dist/cms/collection.d.ts +108 -0
  36. package/dist/cms/collection.d.ts.map +1 -0
  37. package/dist/cms/collection.js +144 -0
  38. package/dist/cms/collection.js.map +1 -0
  39. package/dist/cms/compat.d.ts +128 -0
  40. package/dist/cms/compat.d.ts.map +1 -0
  41. package/dist/cms/compat.js +141 -0
  42. package/dist/cms/compat.js.map +1 -0
  43. package/dist/cms/config-contract.d.ts +278 -0
  44. package/dist/cms/config-contract.d.ts.map +1 -0
  45. package/dist/cms/config-contract.js +220 -0
  46. package/dist/cms/config-contract.js.map +1 -0
  47. package/dist/cms/config.d.ts +351 -0
  48. package/dist/cms/config.d.ts.map +1 -0
  49. package/dist/cms/config.js +50 -0
  50. package/dist/cms/config.js.map +1 -0
  51. package/dist/cms/errors.d.ts +122 -0
  52. package/dist/cms/errors.d.ts.map +1 -0
  53. package/dist/cms/errors.js +163 -0
  54. package/dist/cms/errors.js.map +1 -0
  55. package/dist/cms/extensibility.d.ts +211 -0
  56. package/dist/cms/extensibility.d.ts.map +1 -0
  57. package/dist/cms/extensibility.js +313 -0
  58. package/dist/cms/extensibility.js.map +1 -0
  59. package/dist/cms/field.d.ts +69 -0
  60. package/dist/cms/field.d.ts.map +1 -0
  61. package/dist/cms/field.js +94 -0
  62. package/dist/cms/field.js.map +1 -0
  63. package/dist/cms/functions.d.ts +466 -0
  64. package/dist/cms/functions.d.ts.map +1 -0
  65. package/dist/cms/functions.js +19 -0
  66. package/dist/cms/functions.js.map +1 -0
  67. package/dist/cms/global.d.ts +45 -0
  68. package/dist/cms/global.d.ts.map +1 -0
  69. package/dist/cms/global.js +62 -0
  70. package/dist/cms/global.js.map +1 -0
  71. package/dist/cms/index.d.ts +23 -0
  72. package/dist/cms/index.d.ts.map +1 -0
  73. package/dist/cms/index.js +42 -0
  74. package/dist/cms/index.js.map +1 -0
  75. package/dist/cms/structure.d.ts +1601 -0
  76. package/dist/cms/structure.d.ts.map +1 -0
  77. package/dist/cms/structure.js +757 -0
  78. package/dist/cms/structure.js.map +1 -0
  79. package/dist/content/index.d.ts +1542 -0
  80. package/dist/content/index.d.ts.map +1 -0
  81. package/dist/content/index.js +522 -0
  82. package/dist/content/index.js.map +1 -0
  83. package/dist/database/bridge.d.ts +177 -0
  84. package/dist/database/bridge.d.ts.map +1 -0
  85. package/dist/database/bridge.js +139 -0
  86. package/dist/database/bridge.js.map +1 -0
  87. package/dist/database/index.d.ts +8 -0
  88. package/dist/database/index.d.ts.map +1 -0
  89. package/dist/database/index.js +9 -0
  90. package/dist/database/index.js.map +1 -0
  91. package/dist/database/type-bridge.d.ts +178 -0
  92. package/dist/database/type-bridge.d.ts.map +1 -0
  93. package/dist/database/type-bridge.js +154 -0
  94. package/dist/database/type-bridge.js.map +1 -0
  95. package/dist/entities/agent-context.d.ts +280 -0
  96. package/dist/entities/agent-context.d.ts.map +1 -0
  97. package/dist/entities/agent-context.js +390 -0
  98. package/dist/entities/agent-context.js.map +1 -0
  99. package/dist/entities/agent-memory.d.ts +661 -0
  100. package/dist/entities/agent-memory.d.ts.map +1 -0
  101. package/dist/entities/agent-memory.js +544 -0
  102. package/dist/entities/agent-memory.js.map +1 -0
  103. package/dist/entities/board.d.ts +95 -0
  104. package/dist/entities/board.d.ts.map +1 -0
  105. package/dist/entities/board.js +99 -0
  106. package/dist/entities/board.js.map +1 -0
  107. package/dist/entities/code-provenance.d.ts +270 -0
  108. package/dist/entities/code-provenance.d.ts.map +1 -0
  109. package/dist/entities/code-provenance.js +339 -0
  110. package/dist/entities/code-provenance.js.map +1 -0
  111. package/dist/entities/index.d.ts +22 -0
  112. package/dist/entities/index.d.ts.map +1 -0
  113. package/dist/entities/index.js +22 -0
  114. package/dist/entities/index.js.map +1 -0
  115. package/dist/entities/media.d.ts +485 -0
  116. package/dist/entities/media.d.ts.map +1 -0
  117. package/dist/entities/media.js +606 -0
  118. package/dist/entities/media.js.map +1 -0
  119. package/dist/entities/page-revision.d.ts +390 -0
  120. package/dist/entities/page-revision.d.ts.map +1 -0
  121. package/dist/entities/page-revision.js +406 -0
  122. package/dist/entities/page-revision.js.map +1 -0
  123. package/dist/entities/page.d.ts +2349 -0
  124. package/dist/entities/page.d.ts.map +1 -0
  125. package/dist/entities/page.js +377 -0
  126. package/dist/entities/page.js.map +1 -0
  127. package/dist/entities/post.d.ts +619 -0
  128. package/dist/entities/post.d.ts.map +1 -0
  129. package/dist/entities/post.js +555 -0
  130. package/dist/entities/post.js.map +1 -0
  131. package/dist/entities/price.d.ts +772 -0
  132. package/dist/entities/price.d.ts.map +1 -0
  133. package/dist/entities/price.js +308 -0
  134. package/dist/entities/price.js.map +1 -0
  135. package/dist/entities/product.d.ts +753 -0
  136. package/dist/entities/product.d.ts.map +1 -0
  137. package/dist/entities/product.js +307 -0
  138. package/dist/entities/product.js.map +1 -0
  139. package/dist/entities/session.d.ts +222 -0
  140. package/dist/entities/session.d.ts.map +1 -0
  141. package/dist/entities/session.js +253 -0
  142. package/dist/entities/session.js.map +1 -0
  143. package/dist/entities/site.d.ts +387 -0
  144. package/dist/entities/site.d.ts.map +1 -0
  145. package/dist/entities/site.js +348 -0
  146. package/dist/entities/site.js.map +1 -0
  147. package/dist/entities/ticket-comment.d.ts +49 -0
  148. package/dist/entities/ticket-comment.d.ts.map +1 -0
  149. package/dist/entities/ticket-comment.js +58 -0
  150. package/dist/entities/ticket-comment.js.map +1 -0
  151. package/dist/entities/ticket-label.d.ts +64 -0
  152. package/dist/entities/ticket-label.d.ts.map +1 -0
  153. package/dist/entities/ticket-label.js +77 -0
  154. package/dist/entities/ticket-label.js.map +1 -0
  155. package/dist/entities/ticket.d.ts +204 -0
  156. package/dist/entities/ticket.d.ts.map +1 -0
  157. package/dist/entities/ticket.js +205 -0
  158. package/dist/entities/ticket.js.map +1 -0
  159. package/dist/entities/user.d.ts +336 -0
  160. package/dist/entities/user.d.ts.map +1 -0
  161. package/dist/entities/user.js +255 -0
  162. package/dist/entities/user.js.map +1 -0
  163. package/dist/foundation/contract.d.ts +221 -0
  164. package/dist/foundation/contract.d.ts.map +1 -0
  165. package/dist/foundation/contract.js +133 -0
  166. package/dist/foundation/contract.js.map +1 -0
  167. package/dist/foundation/index.d.ts +7 -0
  168. package/dist/foundation/index.d.ts.map +1 -0
  169. package/dist/foundation/index.js +7 -0
  170. package/dist/foundation/index.js.map +1 -0
  171. package/dist/generated/contracts.d.ts +1514 -0
  172. package/dist/generated/contracts.d.ts.map +1 -0
  173. package/dist/generated/contracts.js +959 -0
  174. package/dist/generated/contracts.js.map +1 -0
  175. package/dist/generated/database.d.ts +48 -0
  176. package/dist/generated/database.d.ts.map +1 -0
  177. package/dist/generated/database.js +17 -0
  178. package/dist/generated/database.js.map +1 -0
  179. package/dist/generated/zod-schemas.d.ts +14793 -0
  180. package/dist/generated/zod-schemas.d.ts.map +1 -0
  181. package/dist/generated/zod-schemas.js +547 -0
  182. package/dist/generated/zod-schemas.js.map +1 -0
  183. package/dist/index.d.ts +50 -0
  184. package/dist/index.d.ts.map +1 -0
  185. package/dist/index.js +81 -0
  186. package/dist/index.js.map +1 -0
  187. package/dist/representation/index.d.ts +304 -0
  188. package/dist/representation/index.d.ts.map +1 -0
  189. package/dist/representation/index.js +280 -0
  190. package/dist/representation/index.js.map +1 -0
  191. package/package.json +117 -0
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Unified Contract System
3
+ *
4
+ * A Contract is a single source of truth that combines:
5
+ * 1. TypeScript Type (compile-time safety)
6
+ * 2. Zod Schema (runtime validation)
7
+ * 3. Validation Functions (runtime validation)
8
+ * 4. Type Guards (runtime type checking)
9
+ * 5. Metadata (documentation, versioning)
10
+ *
11
+ * This unified approach ensures that types, schemas, and validation
12
+ * never drift apart, providing both compile-time and runtime safety.
13
+ *
14
+ * @module @revealui/contracts/foundation
15
+ */
16
+ import type { ZodError, z } from 'zod/v4';
17
+ /**
18
+ * Validation result from contract validation
19
+ */
20
+ export interface ContractValidationSuccess<T> {
21
+ success: true;
22
+ data: T;
23
+ errors?: never;
24
+ }
25
+ export interface ContractValidationFailure {
26
+ success: false;
27
+ data?: never;
28
+ errors: ZodError;
29
+ }
30
+ export type ContractValidationResult<T> = ContractValidationSuccess<T> | ContractValidationFailure;
31
+ /**
32
+ * Contract metadata for documentation and versioning
33
+ */
34
+ export interface ContractMetadata {
35
+ /** Contract name/identifier */
36
+ name: string;
37
+ /** Contract version for migration support */
38
+ version: string;
39
+ /** Human-readable description */
40
+ description?: string;
41
+ /** Documentation URL */
42
+ docsUrl?: string;
43
+ /** Tags for categorization */
44
+ tags?: string[];
45
+ /** Deprecation notice if applicable */
46
+ deprecated?: boolean;
47
+ /** Deprecation message */
48
+ deprecatedMessage?: string;
49
+ }
50
+ /**
51
+ * Unified Contract Interface
52
+ *
53
+ * A Contract binds together TypeScript types, Zod schemas, and validation
54
+ * into a single source of truth.
55
+ *
56
+ * @template T - The TypeScript type this contract validates
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * const UserContract = createContract({
61
+ * name: 'User',
62
+ * version: '1.0.0',
63
+ * schema: z.object({
64
+ * id: z.string(),
65
+ * email: z.string().email(),
66
+ * name: z.string().min(1),
67
+ * }),
68
+ * })
69
+ *
70
+ * // Type inference
71
+ * type User = ContractType<typeof UserContract>
72
+ *
73
+ * // Runtime validation
74
+ * const result = UserContract.validate(rawData)
75
+ * if (result.success) {
76
+ * // result.data is fully typed as User
77
+ * console.log(result.data.email)
78
+ * }
79
+ *
80
+ * // Type guard
81
+ * if (UserContract.isType(unknownData)) {
82
+ * // unknownData is now typed as User
83
+ * console.log(unknownData.email)
84
+ * }
85
+ * ```
86
+ */
87
+ export interface Contract<T> {
88
+ /** Contract metadata */
89
+ readonly metadata: ContractMetadata;
90
+ /**
91
+ * Zod schema for runtime validation
92
+ * This is the single source of truth for the data structure
93
+ */
94
+ readonly schema: z.ZodSchema<T>;
95
+ /**
96
+ * Validate data against the contract
97
+ * Returns a result object with success flag and typed data or errors
98
+ *
99
+ * @param data - Unknown data to validate
100
+ * @returns Validation result with typed data on success, errors on failure
101
+ */
102
+ validate(data: unknown): ContractValidationResult<T>;
103
+ /**
104
+ * Type guard function
105
+ * Returns true if data matches the contract, false otherwise
106
+ * When true, TypeScript narrows the type to T
107
+ *
108
+ * @param data - Unknown data to check
109
+ * @returns True if data is valid, false otherwise
110
+ */
111
+ isType(data: unknown): data is T;
112
+ /**
113
+ * Parse data and throw on validation failure
114
+ * Use this when you're certain data should be valid
115
+ *
116
+ * @param data - Unknown data to parse
117
+ * @returns Typed data
118
+ * @throws ZodError if validation fails
119
+ */
120
+ parse(data: unknown): T;
121
+ /**
122
+ * Safe parse - returns result without throwing
123
+ * Alias for validate() for consistency with Zod API
124
+ *
125
+ * @param data - Unknown data to parse
126
+ * @returns Validation result
127
+ */
128
+ safeParse(data: unknown): ContractValidationResult<T>;
129
+ }
130
+ /**
131
+ * Extract the TypeScript type from a Contract
132
+ *
133
+ * @template C - The contract type
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * type User = ContractType<typeof UserContract>
138
+ * ```
139
+ */
140
+ export type ContractType<C extends Contract<unknown>> = C extends Contract<infer T> ? T : never;
141
+ /**
142
+ * Options for creating a contract
143
+ */
144
+ export interface CreateContractOptions<T> {
145
+ /** Contract name/identifier */
146
+ name: string;
147
+ /** Contract version */
148
+ version: string;
149
+ /** Zod schema for validation */
150
+ schema: z.ZodSchema<T>;
151
+ /** Optional description */
152
+ description?: string;
153
+ /** Optional documentation URL */
154
+ docsUrl?: string;
155
+ /** Optional tags */
156
+ tags?: string[];
157
+ /** Optional deprecation flag */
158
+ deprecated?: boolean;
159
+ /** Optional deprecation message */
160
+ deprecatedMessage?: string;
161
+ }
162
+ /**
163
+ * Create a unified contract from a Zod schema
164
+ *
165
+ * This factory function creates a Contract that binds together:
166
+ * - TypeScript type inference from the schema
167
+ * - Runtime validation via Zod
168
+ * - Type guards for type narrowing
169
+ * - Metadata for documentation
170
+ *
171
+ * @template T - The type inferred from the schema
172
+ * @param options - Contract creation options
173
+ * @returns A complete Contract instance
174
+ *
175
+ * @example
176
+ * ```typescript
177
+ * const UserContract = createContract({
178
+ * name: 'User',
179
+ * version: '1.0.0',
180
+ * schema: z.object({
181
+ * id: z.string(),
182
+ * email: z.string().email(),
183
+ * name: z.string().min(1),
184
+ * }),
185
+ * })
186
+ * ```
187
+ */
188
+ export declare function createContract<T>(options: CreateContractOptions<T>): Contract<T>;
189
+ /**
190
+ * Contract registry for managing all contracts
191
+ * Allows lookup and versioning of contracts
192
+ */
193
+ declare class ContractRegistry {
194
+ private contracts;
195
+ /**
196
+ * Register a contract
197
+ */
198
+ register<T>(contract: Contract<T>): void;
199
+ /**
200
+ * Get a contract by name and version
201
+ */
202
+ get<T>(name: string, version: string): Contract<T> | undefined;
203
+ /**
204
+ * Get the latest version of a contract
205
+ */
206
+ getLatest<T>(name: string): Contract<T> | undefined;
207
+ /**
208
+ * List all registered contracts
209
+ */
210
+ list(): Contract<unknown>[];
211
+ /**
212
+ * Clear all contracts (useful for testing)
213
+ */
214
+ clear(): void;
215
+ }
216
+ /**
217
+ * Global contract registry instance
218
+ */
219
+ export declare const contractRegistry: ContractRegistry;
220
+ export {};
221
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/foundation/contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Unified Contract System
3
+ *
4
+ * A Contract is a single source of truth that combines:
5
+ * 1. TypeScript Type (compile-time safety)
6
+ * 2. Zod Schema (runtime validation)
7
+ * 3. Validation Functions (runtime validation)
8
+ * 4. Type Guards (runtime type checking)
9
+ * 5. Metadata (documentation, versioning)
10
+ *
11
+ * This unified approach ensures that types, schemas, and validation
12
+ * never drift apart, providing both compile-time and runtime safety.
13
+ *
14
+ * @module @revealui/contracts/foundation
15
+ */
16
+ /**
17
+ * Create a unified contract from a Zod schema
18
+ *
19
+ * This factory function creates a Contract that binds together:
20
+ * - TypeScript type inference from the schema
21
+ * - Runtime validation via Zod
22
+ * - Type guards for type narrowing
23
+ * - Metadata for documentation
24
+ *
25
+ * @template T - The type inferred from the schema
26
+ * @param options - Contract creation options
27
+ * @returns A complete Contract instance
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const UserContract = createContract({
32
+ * name: 'User',
33
+ * version: '1.0.0',
34
+ * schema: z.object({
35
+ * id: z.string(),
36
+ * email: z.string().email(),
37
+ * name: z.string().min(1),
38
+ * }),
39
+ * })
40
+ * ```
41
+ */
42
+ export function createContract(options) {
43
+ const { name, version, schema, description, docsUrl, tags, deprecated, deprecatedMessage } = options;
44
+ const metadata = {
45
+ name,
46
+ version,
47
+ ...(description && { description }),
48
+ ...(docsUrl && { docsUrl }),
49
+ ...(tags && { tags }),
50
+ ...(deprecated !== undefined && { deprecated }),
51
+ ...(deprecatedMessage && { deprecatedMessage }),
52
+ };
53
+ return {
54
+ metadata,
55
+ schema,
56
+ validate(data) {
57
+ const result = schema.safeParse(data);
58
+ if (result.success) {
59
+ return {
60
+ success: true,
61
+ data: result.data,
62
+ };
63
+ }
64
+ return {
65
+ success: false,
66
+ errors: result.error,
67
+ };
68
+ },
69
+ isType(data) {
70
+ return schema.safeParse(data).success;
71
+ },
72
+ parse(data) {
73
+ return schema.parse(data);
74
+ },
75
+ safeParse(data) {
76
+ return this.validate(data);
77
+ },
78
+ };
79
+ }
80
+ /**
81
+ * Contract registry for managing all contracts
82
+ * Allows lookup and versioning of contracts
83
+ */
84
+ class ContractRegistry {
85
+ contracts = new Map();
86
+ /**
87
+ * Register a contract
88
+ */
89
+ register(contract) {
90
+ const key = `${contract.metadata.name}@${contract.metadata.version}`;
91
+ this.contracts.set(key, contract);
92
+ }
93
+ /**
94
+ * Get a contract by name and version
95
+ */
96
+ get(name, version) {
97
+ const key = `${name}@${version}`;
98
+ return this.contracts.get(key);
99
+ }
100
+ /**
101
+ * Get the latest version of a contract
102
+ */
103
+ getLatest(name) {
104
+ let latest;
105
+ let latestVersion = '0.0.0';
106
+ for (const contract of Array.from(this.contracts.values())) {
107
+ if (contract.metadata.name === name) {
108
+ if (contract.metadata.version > latestVersion) {
109
+ latestVersion = contract.metadata.version;
110
+ latest = contract;
111
+ }
112
+ }
113
+ }
114
+ return latest;
115
+ }
116
+ /**
117
+ * List all registered contracts
118
+ */
119
+ list() {
120
+ return Array.from(this.contracts.values());
121
+ }
122
+ /**
123
+ * Clear all contracts (useful for testing)
124
+ */
125
+ clear() {
126
+ this.contracts.clear();
127
+ }
128
+ }
129
+ /**
130
+ * Global contract registry instance
131
+ */
132
+ export const contractRegistry = new ContractRegistry();
133
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/foundation/contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @revealui/contracts/foundation
3
+ *
4
+ * Foundation contract system - core Contract<T> interface and utilities
5
+ */
6
+ export { type Contract, type ContractMetadata, type ContractType, type ContractValidationFailure, type ContractValidationResult, type ContractValidationSuccess, type CreateContractOptions, contractRegistry, createContract, } from './contract.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/foundation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,gBAAgB,EAChB,cAAc,GACf,MAAM,eAAe,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @revealui/contracts/foundation
3
+ *
4
+ * Foundation contract system - core Contract<T> interface and utilities
5
+ */
6
+ export { contractRegistry, createContract, } from './contract.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/foundation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAQL,gBAAgB,EAChB,cAAc,GACf,MAAM,eAAe,CAAA"}