@classytic/arc 1.1.0 → 2.1.3

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 (200) hide show
  1. package/README.md +247 -794
  2. package/bin/arc.js +91 -52
  3. package/dist/EventTransport-BkUDYZEb.d.mts +99 -0
  4. package/dist/HookSystem-BsGV-j2l.mjs +404 -0
  5. package/dist/ResourceRegistry-7Ic20ZMw.mjs +249 -0
  6. package/dist/adapters/index.d.mts +5 -0
  7. package/dist/adapters/index.mjs +3 -0
  8. package/dist/audit/index.d.mts +81 -0
  9. package/dist/audit/index.mjs +275 -0
  10. package/dist/audit/mongodb.d.mts +5 -0
  11. package/dist/audit/mongodb.mjs +3 -0
  12. package/dist/audited-CGdLiSlE.mjs +140 -0
  13. package/dist/auth/index.d.mts +188 -0
  14. package/dist/auth/index.mjs +1096 -0
  15. package/dist/auth/redis-session.d.mts +43 -0
  16. package/dist/auth/redis-session.mjs +75 -0
  17. package/dist/betterAuthOpenApi-DjWDddNc.mjs +249 -0
  18. package/dist/cache/index.d.mts +145 -0
  19. package/dist/cache/index.mjs +91 -0
  20. package/dist/caching-GSDJcA6-.mjs +93 -0
  21. package/dist/chunk-C7Uep-_p.mjs +20 -0
  22. package/dist/circuitBreaker-DYhWBW_D.mjs +1096 -0
  23. package/dist/cli/commands/describe.d.mts +18 -0
  24. package/dist/cli/commands/describe.mjs +238 -0
  25. package/dist/cli/commands/docs.d.mts +13 -0
  26. package/dist/cli/commands/docs.mjs +52 -0
  27. package/dist/cli/commands/{generate.d.ts → generate.d.mts} +3 -2
  28. package/dist/cli/commands/generate.mjs +357 -0
  29. package/dist/cli/commands/{init.d.ts → init.d.mts} +11 -8
  30. package/dist/cli/commands/{init.js → init.mjs} +807 -617
  31. package/dist/cli/commands/introspect.d.mts +10 -0
  32. package/dist/cli/commands/introspect.mjs +75 -0
  33. package/dist/cli/index.d.mts +16 -0
  34. package/dist/cli/index.mjs +156 -0
  35. package/dist/constants-DdXFXQtN.mjs +84 -0
  36. package/dist/core/index.d.mts +5 -0
  37. package/dist/core/index.mjs +4 -0
  38. package/dist/createApp-D2D5XXaV.mjs +559 -0
  39. package/dist/defineResource-PXzSJ15_.mjs +2197 -0
  40. package/dist/discovery/index.d.mts +46 -0
  41. package/dist/discovery/index.mjs +109 -0
  42. package/dist/docs/index.d.mts +162 -0
  43. package/dist/docs/index.mjs +74 -0
  44. package/dist/elevation-DGo5shaX.d.mts +87 -0
  45. package/dist/elevation-DSTbVvYj.mjs +113 -0
  46. package/dist/errorHandler-C3GY3_ow.mjs +108 -0
  47. package/dist/errorHandler-CW3OOeYq.d.mts +72 -0
  48. package/dist/errors-DAWRdiYP.d.mts +124 -0
  49. package/dist/errors-DBANPbGr.mjs +211 -0
  50. package/dist/eventPlugin-BEOvaDqo.mjs +229 -0
  51. package/dist/eventPlugin-H6wDDjGO.d.mts +124 -0
  52. package/dist/events/index.d.mts +53 -0
  53. package/dist/events/index.mjs +51 -0
  54. package/dist/events/transports/redis-stream-entry.d.mts +2 -0
  55. package/dist/events/transports/redis-stream-entry.mjs +177 -0
  56. package/dist/events/transports/redis.d.mts +76 -0
  57. package/dist/events/transports/redis.mjs +124 -0
  58. package/dist/externalPaths-SyPF2tgK.d.mts +50 -0
  59. package/dist/factory/index.d.mts +63 -0
  60. package/dist/factory/index.mjs +3 -0
  61. package/dist/fastifyAdapter-C8DlE0YH.d.mts +216 -0
  62. package/dist/fields-Bi_AVKSo.d.mts +109 -0
  63. package/dist/fields-CTd_CrKr.mjs +114 -0
  64. package/dist/hooks/index.d.mts +4 -0
  65. package/dist/hooks/index.mjs +3 -0
  66. package/dist/idempotency/index.d.mts +96 -0
  67. package/dist/idempotency/index.mjs +319 -0
  68. package/dist/idempotency/mongodb.d.mts +2 -0
  69. package/dist/idempotency/mongodb.mjs +114 -0
  70. package/dist/idempotency/redis.d.mts +2 -0
  71. package/dist/idempotency/redis.mjs +103 -0
  72. package/dist/index.d.mts +260 -0
  73. package/dist/index.mjs +104 -0
  74. package/dist/integrations/event-gateway.d.mts +46 -0
  75. package/dist/integrations/event-gateway.mjs +43 -0
  76. package/dist/integrations/index.d.mts +5 -0
  77. package/dist/integrations/index.mjs +1 -0
  78. package/dist/integrations/jobs.d.mts +103 -0
  79. package/dist/integrations/jobs.mjs +123 -0
  80. package/dist/integrations/streamline.d.mts +60 -0
  81. package/dist/integrations/streamline.mjs +125 -0
  82. package/dist/integrations/websocket.d.mts +82 -0
  83. package/dist/integrations/websocket.mjs +288 -0
  84. package/dist/interface-CSNjltAc.d.mts +77 -0
  85. package/dist/interface-DTbsvIWe.d.mts +54 -0
  86. package/dist/interface-e9XfSsUV.d.mts +1097 -0
  87. package/dist/introspectionPlugin-B3JkrjwU.mjs +53 -0
  88. package/dist/keys-DhqDRxv3.mjs +42 -0
  89. package/dist/logger-ByrvQWZO.mjs +78 -0
  90. package/dist/memory-B2v7KrCB.mjs +143 -0
  91. package/dist/migrations/index.d.mts +156 -0
  92. package/dist/migrations/index.mjs +260 -0
  93. package/dist/mongodb-ClykrfGo.d.mts +118 -0
  94. package/dist/mongodb-DNKEExbf.mjs +93 -0
  95. package/dist/mongodb-Dg8O_gvd.d.mts +71 -0
  96. package/dist/openapi-9nB_kiuR.mjs +525 -0
  97. package/dist/org/index.d.mts +68 -0
  98. package/dist/org/index.mjs +513 -0
  99. package/dist/org/types.d.mts +82 -0
  100. package/dist/org/types.mjs +1 -0
  101. package/dist/permissions/index.d.mts +278 -0
  102. package/dist/permissions/index.mjs +579 -0
  103. package/dist/plugins/index.d.mts +172 -0
  104. package/dist/plugins/index.mjs +522 -0
  105. package/dist/plugins/response-cache.d.mts +87 -0
  106. package/dist/plugins/response-cache.mjs +283 -0
  107. package/dist/plugins/tracing-entry.d.mts +2 -0
  108. package/dist/plugins/tracing-entry.mjs +185 -0
  109. package/dist/pluralize-CM-jZg7p.mjs +86 -0
  110. package/dist/policies/{index.d.ts → index.d.mts} +204 -170
  111. package/dist/policies/index.mjs +321 -0
  112. package/dist/presets/{index.d.ts → index.d.mts} +62 -131
  113. package/dist/presets/index.mjs +143 -0
  114. package/dist/presets/multiTenant.d.mts +24 -0
  115. package/dist/presets/multiTenant.mjs +113 -0
  116. package/dist/presets-BTeYbw7h.d.mts +57 -0
  117. package/dist/presets-CeFtfDR8.mjs +119 -0
  118. package/dist/prisma-C3iornoK.d.mts +274 -0
  119. package/dist/prisma-DJbMt3yf.mjs +627 -0
  120. package/dist/queryCachePlugin-B6R0d4av.mjs +138 -0
  121. package/dist/queryCachePlugin-Q6SYuHZ6.d.mts +71 -0
  122. package/dist/redis-UwjEp8Ea.d.mts +49 -0
  123. package/dist/redis-stream-CBg0upHI.d.mts +103 -0
  124. package/dist/registry/index.d.mts +11 -0
  125. package/dist/registry/index.mjs +4 -0
  126. package/dist/requestContext-xi6OKBL-.mjs +55 -0
  127. package/dist/schemaConverter-Dtg0Kt9T.mjs +98 -0
  128. package/dist/schemas/index.d.mts +63 -0
  129. package/dist/schemas/index.mjs +82 -0
  130. package/dist/scope/index.d.mts +21 -0
  131. package/dist/scope/index.mjs +65 -0
  132. package/dist/sessionManager-D_iEHjQl.d.mts +186 -0
  133. package/dist/sse-DkqQ1uxb.mjs +123 -0
  134. package/dist/testing/index.d.mts +907 -0
  135. package/dist/testing/index.mjs +1976 -0
  136. package/dist/tracing-8CEbhF0w.d.mts +70 -0
  137. package/dist/typeGuards-DwxA1t_L.mjs +9 -0
  138. package/dist/types/index.d.mts +946 -0
  139. package/dist/types/index.mjs +14 -0
  140. package/dist/types-B0dhNrnd.d.mts +445 -0
  141. package/dist/types-Beqn1Un7.mjs +38 -0
  142. package/dist/types-DelU6kln.mjs +25 -0
  143. package/dist/types-RLkFVgaw.d.mts +101 -0
  144. package/dist/utils/index.d.mts +747 -0
  145. package/dist/utils/index.mjs +6 -0
  146. package/package.json +194 -68
  147. package/dist/BaseController-DVAiHxEQ.d.ts +0 -233
  148. package/dist/adapters/index.d.ts +0 -237
  149. package/dist/adapters/index.js +0 -668
  150. package/dist/arcCorePlugin-CsShQdyP.d.ts +0 -273
  151. package/dist/audit/index.d.ts +0 -195
  152. package/dist/audit/index.js +0 -319
  153. package/dist/auth/index.d.ts +0 -47
  154. package/dist/auth/index.js +0 -174
  155. package/dist/cli/commands/docs.d.ts +0 -11
  156. package/dist/cli/commands/docs.js +0 -474
  157. package/dist/cli/commands/generate.js +0 -334
  158. package/dist/cli/commands/introspect.d.ts +0 -8
  159. package/dist/cli/commands/introspect.js +0 -338
  160. package/dist/cli/index.d.ts +0 -4
  161. package/dist/cli/index.js +0 -3269
  162. package/dist/core/index.d.ts +0 -220
  163. package/dist/core/index.js +0 -2786
  164. package/dist/createApp-Ce9wl8W9.d.ts +0 -77
  165. package/dist/docs/index.d.ts +0 -166
  166. package/dist/docs/index.js +0 -658
  167. package/dist/errors-8WIxGS_6.d.ts +0 -122
  168. package/dist/events/index.d.ts +0 -117
  169. package/dist/events/index.js +0 -89
  170. package/dist/factory/index.d.ts +0 -38
  171. package/dist/factory/index.js +0 -1652
  172. package/dist/hooks/index.d.ts +0 -4
  173. package/dist/hooks/index.js +0 -199
  174. package/dist/idempotency/index.d.ts +0 -323
  175. package/dist/idempotency/index.js +0 -500
  176. package/dist/index-B4t03KQ0.d.ts +0 -1366
  177. package/dist/index.d.ts +0 -135
  178. package/dist/index.js +0 -4756
  179. package/dist/migrations/index.d.ts +0 -185
  180. package/dist/migrations/index.js +0 -274
  181. package/dist/org/index.d.ts +0 -129
  182. package/dist/org/index.js +0 -220
  183. package/dist/permissions/index.d.ts +0 -144
  184. package/dist/permissions/index.js +0 -103
  185. package/dist/plugins/index.d.ts +0 -46
  186. package/dist/plugins/index.js +0 -1069
  187. package/dist/policies/index.js +0 -196
  188. package/dist/presets/index.js +0 -384
  189. package/dist/presets/multiTenant.d.ts +0 -39
  190. package/dist/presets/multiTenant.js +0 -112
  191. package/dist/registry/index.d.ts +0 -16
  192. package/dist/registry/index.js +0 -253
  193. package/dist/testing/index.d.ts +0 -618
  194. package/dist/testing/index.js +0 -48020
  195. package/dist/types/index.d.ts +0 -4
  196. package/dist/types/index.js +0 -8
  197. package/dist/types-B99TBmFV.d.ts +0 -76
  198. package/dist/types-BvckRbs2.d.ts +0 -143
  199. package/dist/utils/index.d.ts +0 -679
  200. package/dist/utils/index.js +0 -931
@@ -1,237 +0,0 @@
1
- import { D as DataAdapter, y as CrudRepository, o as RepositoryLike, m as SchemaMetadata, R as RouteSchemaOptions, af as OpenApiSchemas, Q as QueryParserInterface, ae as ParsedQuery, V as ValidationResult } from '../index-B4t03KQ0.js';
2
- export { ag as AdapterFactory, F as FieldMetadata, n as RelationMetadata } from '../index-B4t03KQ0.js';
3
- import { Model } from 'mongoose';
4
- import 'fastify';
5
- import '../types-B99TBmFV.js';
6
-
7
- /**
8
- * Mongoose Adapter - Type-Safe Database Adapter
9
- *
10
- * Bridges Mongoose models with Arc's resource system.
11
- * Proper generics eliminate the need for 'as any' casts.
12
- */
13
-
14
- /**
15
- * Options for creating a Mongoose adapter
16
- *
17
- * @typeParam TDoc - The document type (inferred or explicit)
18
- */
19
- interface MongooseAdapterOptions<TDoc = unknown> {
20
- /** Mongoose model instance */
21
- model: Model<any>;
22
- /** Repository implementing CRUD operations - accepts any repository-like object */
23
- repository: CrudRepository<TDoc> | RepositoryLike;
24
- }
25
- /**
26
- * Mongoose data adapter with proper type safety
27
- *
28
- * @typeParam TDoc - The document type
29
- */
30
- declare class MongooseAdapter<TDoc = unknown> implements DataAdapter<TDoc> {
31
- readonly type: "mongoose";
32
- readonly name: string;
33
- readonly model: Model<any>;
34
- readonly repository: CrudRepository<TDoc> | RepositoryLike;
35
- constructor(options: MongooseAdapterOptions<TDoc>);
36
- /**
37
- * Get schema metadata from Mongoose model
38
- */
39
- getSchemaMetadata(): SchemaMetadata;
40
- /**
41
- * Generate OpenAPI schemas from Mongoose model
42
- */
43
- generateSchemas(schemaOptions?: RouteSchemaOptions): OpenApiSchemas | null;
44
- /**
45
- * Extract relation metadata
46
- */
47
- private extractRelations;
48
- /**
49
- * Convert Mongoose type to OpenAPI type
50
- */
51
- private mongooseTypeToOpenApi;
52
- }
53
- /**
54
- * Create Mongoose adapter with flexible type acceptance
55
- *
56
- * Accepts any repository with CRUD methods - no 'as any' needed.
57
- *
58
- * @example
59
- * ```typescript
60
- * // Works with any MongoKit repository - no cast needed
61
- * const adapter = createMongooseAdapter({
62
- * model: ProductModel,
63
- * repository: productRepository,
64
- * });
65
- * ```
66
- */
67
- declare function createMongooseAdapter<TDoc = unknown>(options: MongooseAdapterOptions<TDoc>): DataAdapter<TDoc>;
68
-
69
- /**
70
- * Prisma Adapter - PostgreSQL/MySQL/SQLite Implementation
71
- *
72
- * Bridges Prisma Client with Arc's DataAdapter interface.
73
- * Supports Prisma 5+ with all database providers.
74
- *
75
- * Features:
76
- * ✅ Schema generation (OpenAPI docs from DMMF)
77
- * ✅ Health checks (database connectivity)
78
- * ✅ Query parsing (URL params → Prisma where/orderBy)
79
- * ✅ Policy filter translation
80
- * ✅ Soft delete preset support
81
- * ✅ Multi-tenant preset support
82
- *
83
- * @example
84
- * ```typescript
85
- * import { PrismaClient, Prisma } from '@prisma/client';
86
- * import { createPrismaAdapter, PrismaQueryParser } from '@classytic/arc/adapters';
87
- *
88
- * const prisma = new PrismaClient();
89
- *
90
- * const userAdapter = createPrismaAdapter({
91
- * client: prisma,
92
- * modelName: 'user',
93
- * repository: new UserRepository(prisma),
94
- * dmmf: Prisma.dmmf, // For schema generation
95
- * queryParser: new PrismaQueryParser(), // Optional: custom parser
96
- * });
97
- * ```
98
- */
99
-
100
- /**
101
- * Options for PrismaQueryParser
102
- */
103
- interface PrismaQueryParserOptions {
104
- /** Maximum allowed limit value (default: 1000) */
105
- maxLimit?: number;
106
- /** Default limit for pagination (default: 20) */
107
- defaultLimit?: number;
108
- /** Enable soft delete filtering by default (default: true) */
109
- softDeleteEnabled?: boolean;
110
- /** Field name for soft delete (default: 'deletedAt') */
111
- softDeleteField?: string;
112
- }
113
- /**
114
- * Prisma Query Parser - Converts URL parameters to Prisma query format
115
- *
116
- * Translates Arc's query format to Prisma's where/orderBy/take/skip structure.
117
- *
118
- * @example
119
- * ```typescript
120
- * const parser = new PrismaQueryParser();
121
- *
122
- * // URL: ?status=active&price[gte]=100&sort=-createdAt&page=2&limit=10
123
- * const prismaQuery = parser.toPrismaQuery(parsedQuery);
124
- * // Returns:
125
- * // {
126
- * // where: { status: 'active', price: { gte: 100 }, deletedAt: null },
127
- * // orderBy: { createdAt: 'desc' },
128
- * // take: 10,
129
- * // skip: 10,
130
- * // }
131
- * ```
132
- */
133
- declare class PrismaQueryParser implements QueryParserInterface {
134
- private readonly maxLimit;
135
- private readonly defaultLimit;
136
- private readonly softDeleteEnabled;
137
- private readonly softDeleteField;
138
- /** Map Arc operators to Prisma operators */
139
- private readonly operatorMap;
140
- constructor(options?: PrismaQueryParserOptions);
141
- /**
142
- * Parse URL query parameters (delegates to ArcQueryParser format)
143
- */
144
- parse(query: Record<string, unknown> | null | undefined): ParsedQuery;
145
- /**
146
- * Convert ParsedQuery to Prisma query options
147
- */
148
- toPrismaQuery(parsed: ParsedQuery, policyFilters?: Record<string, unknown>): PrismaQueryOptions;
149
- /**
150
- * Translate Arc/MongoDB-style filters to Prisma where clause
151
- */
152
- private translateFilters;
153
- private parseNumber;
154
- private parseSort;
155
- private parseSelect;
156
- private parseFilters;
157
- private coerceValue;
158
- }
159
- /**
160
- * Prisma query options returned by toPrismaQuery
161
- */
162
- interface PrismaQueryOptions {
163
- where?: Record<string, unknown>;
164
- orderBy?: Array<Record<string, 'asc' | 'desc'>>;
165
- take?: number;
166
- skip?: number;
167
- select?: Record<string, boolean>;
168
- include?: Record<string, boolean>;
169
- }
170
- interface PrismaAdapterOptions<TModel> {
171
- /** Prisma client instance */
172
- client: any;
173
- /** Model name (e.g., 'user', 'product') */
174
- modelName: string;
175
- /** Repository instance implementing CRUD operations */
176
- repository: CrudRepository<TModel>;
177
- /** Optional: Prisma DMMF (Data Model Meta Format) for schema extraction */
178
- dmmf?: any;
179
- /** Optional: Custom query parser (default: PrismaQueryParser) */
180
- queryParser?: PrismaQueryParser;
181
- /** Enable soft delete filtering (default: true) */
182
- softDeleteEnabled?: boolean;
183
- /** Field name for soft delete (default: 'deletedAt') */
184
- softDeleteField?: string;
185
- }
186
- declare class PrismaAdapter<TModel = any> implements DataAdapter<TModel> {
187
- readonly type: "prisma";
188
- readonly name: string;
189
- readonly repository: CrudRepository<TModel>;
190
- readonly queryParser: PrismaQueryParser;
191
- private client;
192
- private modelName;
193
- private dmmf?;
194
- private softDeleteEnabled;
195
- private softDeleteField;
196
- constructor(options: PrismaAdapterOptions<TModel>);
197
- /**
198
- * Parse URL query parameters and convert to Prisma query options
199
- */
200
- parseQuery(query: Record<string, unknown>, policyFilters?: Record<string, unknown>): PrismaQueryOptions;
201
- /**
202
- * Apply policy filters to existing Prisma where clause
203
- * Used for multi-tenant, ownership, and other security filters
204
- */
205
- applyPolicyFilters(where: Record<string, unknown>, policyFilters: Record<string, unknown>): Record<string, unknown>;
206
- generateSchemas(options?: RouteSchemaOptions): OpenApiSchemas | null;
207
- getSchemaMetadata(): SchemaMetadata | null;
208
- validate(data: unknown): Promise<ValidationResult>;
209
- healthCheck(): Promise<boolean>;
210
- close(): Promise<void>;
211
- private buildEntitySchema;
212
- private buildCreateSchema;
213
- private buildUpdateSchema;
214
- private shouldSkipField;
215
- private convertPrismaFieldToJsonSchema;
216
- private convertPrismaFieldToMetadata;
217
- private mapPrismaTypeToMetadataType;
218
- }
219
- /**
220
- * Factory function to create Prisma adapter
221
- *
222
- * @example
223
- * import { PrismaClient } from '@prisma/client';
224
- * import { createPrismaAdapter } from '@classytic/arc';
225
- *
226
- * const prisma = new PrismaClient();
227
- *
228
- * const userAdapter = createPrismaAdapter({
229
- * client: prisma,
230
- * modelName: 'user',
231
- * repository: userRepository,
232
- * dmmf: Prisma.dmmf, // Optional: for schema generation
233
- * });
234
- */
235
- declare function createPrismaAdapter<TModel>(options: PrismaAdapterOptions<TModel>): PrismaAdapter<TModel>;
236
-
237
- export { DataAdapter, MongooseAdapter, type MongooseAdapterOptions, PrismaAdapter, type PrismaAdapterOptions, type PrismaQueryOptions, PrismaQueryParser, type PrismaQueryParserOptions, RepositoryLike, SchemaMetadata, ValidationResult, createMongooseAdapter, createPrismaAdapter };