@archtx/procedures 1.0.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.
Files changed (45) hide show
  1. package/README.md +283 -0
  2. package/dist/exports.d.ts +6 -0
  3. package/dist/exports.js +7 -0
  4. package/dist/exports.js.map +1 -0
  5. package/dist/src/errors.d.ts +22 -0
  6. package/dist/src/errors.js +50 -0
  7. package/dist/src/errors.js.map +1 -0
  8. package/dist/src/index.d.ts +56 -0
  9. package/dist/src/index.js +86 -0
  10. package/dist/src/index.js.map +1 -0
  11. package/dist/src/index.test.d.ts +1 -0
  12. package/dist/src/index.test.js +307 -0
  13. package/dist/src/index.test.js.map +1 -0
  14. package/dist/src/procedure-codes.d.ts +26 -0
  15. package/dist/src/procedure-codes.js +28 -0
  16. package/dist/src/procedure-codes.js.map +1 -0
  17. package/dist/src/schema/compute-schema.d.ts +23 -0
  18. package/dist/src/schema/compute-schema.js +28 -0
  19. package/dist/src/schema/compute-schema.js.map +1 -0
  20. package/dist/src/schema/compute-schema.test.d.ts +1 -0
  21. package/dist/src/schema/compute-schema.test.js +107 -0
  22. package/dist/src/schema/compute-schema.test.js.map +1 -0
  23. package/dist/src/schema/extract-json-schema.d.ts +2 -0
  24. package/dist/src/schema/extract-json-schema.js +12 -0
  25. package/dist/src/schema/extract-json-schema.js.map +1 -0
  26. package/dist/src/schema/extract-json-schema.test.d.ts +1 -0
  27. package/dist/src/schema/extract-json-schema.test.js +23 -0
  28. package/dist/src/schema/extract-json-schema.test.js.map +1 -0
  29. package/dist/src/schema/parser.d.ts +21 -0
  30. package/dist/src/schema/parser.js +57 -0
  31. package/dist/src/schema/parser.js.map +1 -0
  32. package/dist/src/schema/parser.test.d.ts +1 -0
  33. package/dist/src/schema/parser.test.js +71 -0
  34. package/dist/src/schema/parser.test.js.map +1 -0
  35. package/dist/src/schema/resolve-schema-lib.d.ts +12 -0
  36. package/dist/src/schema/resolve-schema-lib.js +7 -0
  37. package/dist/src/schema/resolve-schema-lib.js.map +1 -0
  38. package/dist/src/schema/resolve-schema-lib.test.d.ts +1 -0
  39. package/dist/src/schema/resolve-schema-lib.test.js +17 -0
  40. package/dist/src/schema/resolve-schema-lib.test.js.map +1 -0
  41. package/dist/src/schema/types.d.ts +4 -0
  42. package/dist/src/schema/types.js +2 -0
  43. package/dist/src/schema/types.js.map +1 -0
  44. package/dist/tsconfig.tsbuildinfo +1 -0
  45. package/package.json +36 -0
@@ -0,0 +1,307 @@
1
+ import { describe, expect, test } from 'vitest';
2
+ import { Procedures } from './index';
3
+ import { v } from 'suretype';
4
+ import { ProcedureHookError, ProcedureError, ProcedureValidationError, } from './errors';
5
+ import { ProcedureCodes } from './procedure-codes';
6
+ describe('Procedures', () => {
7
+ test('Procedures', () => {
8
+ const result = Procedures({
9
+ onCreate: () => {
10
+ return undefined;
11
+ },
12
+ });
13
+ expect(result).toHaveProperty('Create');
14
+ });
15
+ test('Create Single Procedures', () => {
16
+ const { test1, test1Schema } = Procedures().Create('test1', {}, async (ctx, args) => {
17
+ return '1';
18
+ });
19
+ const { test2, test2Schema } = Procedures().Create('test2', {}, async (ctx, args) => {
20
+ return '2';
21
+ });
22
+ expect(test1).toBeDefined();
23
+ expect(test1Schema).toBeDefined();
24
+ expect(test2).toBeDefined();
25
+ expect(test2Schema).toBeDefined;
26
+ });
27
+ test('Procedures - Create call', () => new Promise((done) => {
28
+ let mockHttpCall;
29
+ const { Create } = Procedures({
30
+ onCreate: ({ handler, config, name }) => {
31
+ mockHttpCall = handler;
32
+ },
33
+ });
34
+ Create('Handler', {
35
+ schema: {
36
+ args: v.object({ name: v.string() }),
37
+ data: v.string(),
38
+ },
39
+ }, async (ctx, args) => {
40
+ expect(args).toEqual({ name: 'name' });
41
+ done();
42
+ return 'name';
43
+ });
44
+ mockHttpCall({}, { name: 'name' });
45
+ }));
46
+ test('Procedures - Create returns a handler to call/test the Procedure registration', async () => {
47
+ let ProcedureRegisteredCbHandler;
48
+ const { Create } = Procedures({
49
+ onCreate: (Procedure) => {
50
+ ProcedureRegisteredCbHandler = Procedure.handler;
51
+ },
52
+ });
53
+ const { Handler, HandlerSchema } = Create('Handler', {
54
+ schema: {
55
+ args: v.object({ number: v.number() }),
56
+ },
57
+ }, async (ctx, args) => {
58
+ return args.number;
59
+ });
60
+ expect(Handler).toBeDefined();
61
+ expect(ProcedureRegisteredCbHandler).toEqual(Handler);
62
+ const result = Handler({}, { number: 1 });
63
+ expect(result).toBeDefined();
64
+ expect(result).toBeInstanceOf(Promise);
65
+ await expect(result).resolves.toEqual(1);
66
+ expect(HandlerSchema).toBeDefined();
67
+ expect(HandlerSchema).toBeInstanceOf(Object);
68
+ expect(HandlerSchema).toHaveProperty('args');
69
+ expect(HandlerSchema.args).toEqual({
70
+ type: 'object',
71
+ properties: { number: { type: 'number' } },
72
+ });
73
+ });
74
+ test('Procedures - Create args validation w/ no args provided', () => new Promise((done) => {
75
+ let mockHttpCall;
76
+ const { Create } = Procedures({
77
+ onCreate: ({ handler, config, name }) => {
78
+ mockHttpCall = (callArgs) => {
79
+ if (config.validation?.args) {
80
+ const { errors } = config.validation.args(callArgs);
81
+ if (errors && 'message' in errors[0]) {
82
+ expect(errors[0].message).toEqual('must be object');
83
+ done();
84
+ return;
85
+ }
86
+ }
87
+ handler(callArgs, {});
88
+ };
89
+ },
90
+ });
91
+ Create('test', {
92
+ schema: {
93
+ args: v.object({}),
94
+ },
95
+ }, async () => {
96
+ done();
97
+ });
98
+ mockHttpCall();
99
+ }));
100
+ test('Procedures - Create args validation w/ missing args', async () => new Promise((done) => {
101
+ let mockHttpCall;
102
+ const { Create } = Procedures({
103
+ onCreate: async ({ handler, config, name }) => {
104
+ mockHttpCall = async (callArgs) => {
105
+ if (config.validation?.args) {
106
+ const { errors } = config.validation.args(callArgs);
107
+ expect(errors).toBeDefined();
108
+ expect(errors?.length).toEqual(2);
109
+ }
110
+ try {
111
+ await handler(callArgs, {});
112
+ }
113
+ catch (e) {
114
+ expect(e).instanceof(ProcedureValidationError);
115
+ expect(e.errors.length).toEqual(2);
116
+ done();
117
+ }
118
+ };
119
+ },
120
+ });
121
+ Create('test', {
122
+ schema: {
123
+ args: v.object({
124
+ name: v.string().required(),
125
+ id: v.number().required(),
126
+ email: v.string(),
127
+ }),
128
+ },
129
+ }, async () => {
130
+ return;
131
+ });
132
+ mockHttpCall({});
133
+ }));
134
+ test('Procedures - Create call provides ctx to handler', () => new Promise((done) => {
135
+ let mockHttpCall;
136
+ const { Create } = Procedures({
137
+ onCreate: ({ handler }) => {
138
+ mockHttpCall = () => handler({ testCtx: 'testCtx' });
139
+ },
140
+ });
141
+ Create('test', {}, async (ctx, args) => {
142
+ expect(ctx.testCtx).toEqual('testCtx');
143
+ done();
144
+ });
145
+ mockHttpCall();
146
+ }));
147
+ test('Procedures - Create call provides ctx, local ctx & hook context to handler', () => new Promise((done) => {
148
+ let mockHttpCall;
149
+ const { Create } = Procedures({
150
+ onCreate: ({ handler }) => {
151
+ mockHttpCall = () => handler({ testCtx: 'testCtx' });
152
+ },
153
+ });
154
+ Create('test', {
155
+ hook: async () => ({ localCtx: 'localCtx' }),
156
+ }, async (ctx, args) => {
157
+ expect(ctx.testCtx).toEqual('testCtx');
158
+ expect(ctx.localCtx).toEqual('localCtx');
159
+ expect(ctx.error(400, 'error')).toBeInstanceOf(ProcedureError);
160
+ done();
161
+ });
162
+ mockHttpCall();
163
+ }));
164
+ test('Procedure hook can throw local ctx error and is caught', async () => {
165
+ const { Create } = Procedures();
166
+ const { TestProcedureHookError } = Create('TestProcedureHookError', {
167
+ hook: async (ctx) => {
168
+ throw ctx.error(400, 'Local context error');
169
+ },
170
+ }, async () => null);
171
+ try {
172
+ await TestProcedureHookError({}, {});
173
+ }
174
+ catch (e) {
175
+ expect(e).toBeInstanceOf(ProcedureError);
176
+ expect(e.code).toEqual(400);
177
+ expect(e.message).toEqual('Local context error');
178
+ expect(e.procedureName).toEqual('TestProcedureHookError');
179
+ }
180
+ });
181
+ test('Procedure hook can throw any error and is caught as ProcedureHookError', async () => {
182
+ const { Create } = Procedures();
183
+ const { TestProcedureHookError } = Create('TestProcedureHookError', {
184
+ hook: async (ctx) => {
185
+ throw new Error('Local context error');
186
+ },
187
+ }, async () => null);
188
+ try {
189
+ await TestProcedureHookError({}, {});
190
+ }
191
+ catch (e) {
192
+ expect(e).toBeInstanceOf(ProcedureHookError);
193
+ expect(e.code).toEqual(ProcedureCodes.PRECONDITION_FAILED);
194
+ expect(e.message).toContain('Local context error');
195
+ expect(e.procedureName).toEqual('TestProcedureHookError');
196
+ }
197
+ });
198
+ test('Procedure handler can throw local ctx error and is caught', async () => {
199
+ const { Create } = Procedures();
200
+ const { TestProcedureHandlerError } = Create('TestProcedureHandlerError', {}, async (ctx) => {
201
+ throw ctx.error(400, 'Local context error');
202
+ });
203
+ try {
204
+ await TestProcedureHandlerError({}, {});
205
+ }
206
+ catch (e) {
207
+ expect(e).toBeInstanceOf(ProcedureError);
208
+ expect(e.code).toEqual(400);
209
+ expect(e.message).toEqual('Local context error');
210
+ expect(e.procedureName).toEqual('TestProcedureHandlerError');
211
+ }
212
+ });
213
+ test('Procedure handler can call other Procedures and local ctx is not overwritten', async () => {
214
+ const { Create } = Procedures();
215
+ const { TestProcedure1 } = Create('TestProcedure1', {
216
+ hook: async (ctx) => {
217
+ return { test: 'test1' };
218
+ },
219
+ schema: {
220
+ args: v.any(),
221
+ },
222
+ }, async (ctx, args) => {
223
+ if (args)
224
+ return { local: ctx.test };
225
+ // this will throw an error when no args are provided
226
+ throw ctx.error(400, 'Local context error', { local: ctx.test });
227
+ });
228
+ const { TestProcedure2 } = Create('TestProcedure2', {
229
+ hook: async (ctx) => {
230
+ return { test: 'test2' };
231
+ },
232
+ schema: {
233
+ args: v.any(),
234
+ },
235
+ }, async (ctx, args) => {
236
+ return await TestProcedure1(ctx, args);
237
+ });
238
+ try {
239
+ await TestProcedure2({}, undefined);
240
+ }
241
+ catch (e) {
242
+ expect(e).toBeInstanceOf(ProcedureError);
243
+ expect(e.code).toEqual(400);
244
+ expect(e.message).toEqual('Local context error');
245
+ expect(e.procedureName).toEqual('TestProcedure1');
246
+ expect(e.meta.local).toEqual('test1');
247
+ }
248
+ const result = await TestProcedure2({}, { any: 'any' });
249
+ expect(result).toEqual({ local: 'test1' });
250
+ });
251
+ test('Procedures - getRegisteredProcedures', () => {
252
+ const { Create, getProcedures } = Procedures({
253
+ onCreate: () => {
254
+ return undefined;
255
+ },
256
+ });
257
+ Create('test-docs', {
258
+ schema: {
259
+ args: v.object({ name: v.string().required() }),
260
+ data: v.string(),
261
+ },
262
+ }, async () => {
263
+ return 'test-docs';
264
+ });
265
+ expect(getProcedures().get('test-docs')).toBeDefined();
266
+ expect(getProcedures().get('test-docs')?.config?.schema).toEqual({
267
+ args: {
268
+ type: 'object',
269
+ properties: {
270
+ name: {
271
+ type: 'string',
272
+ },
273
+ },
274
+ required: ['name'],
275
+ },
276
+ data: {
277
+ type: 'string',
278
+ },
279
+ });
280
+ });
281
+ test('Procedures - context() throws', async () => {
282
+ const { Create } = Procedures();
283
+ function validateAuthToken(token) {
284
+ return token === 'valid-token';
285
+ }
286
+ function getUserFromToken(token) {
287
+ return { id: 'user-id' };
288
+ }
289
+ const { CheckIsAuthenticated } = Create('CheckIsAuthenticated', {
290
+ hook: async (ctx) => {
291
+ if (validateAuthToken(ctx.authToken)) {
292
+ const user = await getUserFromToken(ctx.authToken);
293
+ return { user };
294
+ }
295
+ throw ctx.error(ProcedureCodes.UNAUTHORIZED, 'Invalid auth token');
296
+ },
297
+ schema: {
298
+ data: v.string(),
299
+ },
300
+ }, async () => {
301
+ return 'User authentication is valid';
302
+ });
303
+ await expect(CheckIsAuthenticated({ authToken: 'valid-token' }, {})).resolves.toEqual('User authentication is valid');
304
+ await expect(CheckIsAuthenticated({ authToken: 'not-valid-token' }, {})).rejects.toThrowError(ProcedureError);
305
+ });
306
+ });
307
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * A list of common codes borrowed from HTTP status codes.
3
+ */
4
+ export declare enum ProcedureCodes {
5
+ OK = 200,
6
+ CREATED = 201,
7
+ ACCEPTED = 202,
8
+ NO_CONTENT = 204,
9
+ RESET_CONTENT = 205,
10
+ PARTIAL_CONTENT = 206,
11
+ BAD_REQUEST = 400,
12
+ UNAUTHORIZED = 401,
13
+ FORBIDDEN = 403,
14
+ NOT_FOUND = 404,
15
+ NOT_ACCEPTABLE = 406,
16
+ PROXY_AUTHENTICATION_REQUIRED = 407,
17
+ TIMEOUT = 408,
18
+ CONFLICT = 409,
19
+ PRECONDITION_FAILED = 412,
20
+ VALIDATION_ERROR = 422,
21
+ TOO_MANY_REQUESTS = 429,
22
+ INTERNAL_ERROR = 500,
23
+ HANDLER_ERROR = 500,
24
+ NOT_IMPLEMENTED = 501,
25
+ SERVICE_UNAVAILABLE = 503
26
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * A list of common codes borrowed from HTTP status codes.
3
+ */
4
+ export var ProcedureCodes;
5
+ (function (ProcedureCodes) {
6
+ ProcedureCodes[ProcedureCodes["OK"] = 200] = "OK";
7
+ ProcedureCodes[ProcedureCodes["CREATED"] = 201] = "CREATED";
8
+ ProcedureCodes[ProcedureCodes["ACCEPTED"] = 202] = "ACCEPTED";
9
+ ProcedureCodes[ProcedureCodes["NO_CONTENT"] = 204] = "NO_CONTENT";
10
+ ProcedureCodes[ProcedureCodes["RESET_CONTENT"] = 205] = "RESET_CONTENT";
11
+ ProcedureCodes[ProcedureCodes["PARTIAL_CONTENT"] = 206] = "PARTIAL_CONTENT";
12
+ ProcedureCodes[ProcedureCodes["BAD_REQUEST"] = 400] = "BAD_REQUEST";
13
+ ProcedureCodes[ProcedureCodes["UNAUTHORIZED"] = 401] = "UNAUTHORIZED";
14
+ ProcedureCodes[ProcedureCodes["FORBIDDEN"] = 403] = "FORBIDDEN";
15
+ ProcedureCodes[ProcedureCodes["NOT_FOUND"] = 404] = "NOT_FOUND";
16
+ ProcedureCodes[ProcedureCodes["NOT_ACCEPTABLE"] = 406] = "NOT_ACCEPTABLE";
17
+ ProcedureCodes[ProcedureCodes["PROXY_AUTHENTICATION_REQUIRED"] = 407] = "PROXY_AUTHENTICATION_REQUIRED";
18
+ ProcedureCodes[ProcedureCodes["TIMEOUT"] = 408] = "TIMEOUT";
19
+ ProcedureCodes[ProcedureCodes["CONFLICT"] = 409] = "CONFLICT";
20
+ ProcedureCodes[ProcedureCodes["PRECONDITION_FAILED"] = 412] = "PRECONDITION_FAILED";
21
+ ProcedureCodes[ProcedureCodes["VALIDATION_ERROR"] = 422] = "VALIDATION_ERROR";
22
+ ProcedureCodes[ProcedureCodes["TOO_MANY_REQUESTS"] = 429] = "TOO_MANY_REQUESTS";
23
+ ProcedureCodes[ProcedureCodes["INTERNAL_ERROR"] = 500] = "INTERNAL_ERROR";
24
+ ProcedureCodes[ProcedureCodes["HANDLER_ERROR"] = 500] = "HANDLER_ERROR";
25
+ ProcedureCodes[ProcedureCodes["NOT_IMPLEMENTED"] = 501] = "NOT_IMPLEMENTED";
26
+ ProcedureCodes[ProcedureCodes["SERVICE_UNAVAILABLE"] = 503] = "SERVICE_UNAVAILABLE";
27
+ })(ProcedureCodes || (ProcedureCodes = {}));
28
+ //# sourceMappingURL=procedure-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procedure-codes.js","sourceRoot":"","sources":["../../src/procedure-codes.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,cAsBX;AAtBD,WAAY,cAAc;IACxB,iDAAQ,CAAA;IACR,2DAAa,CAAA;IACb,6DAAc,CAAA;IACd,iEAAgB,CAAA;IAChB,uEAAmB,CAAA;IACnB,2EAAqB,CAAA;IACrB,mEAAiB,CAAA;IACjB,qEAAkB,CAAA;IAClB,+DAAe,CAAA;IACf,+DAAe,CAAA;IACf,yEAAoB,CAAA;IACpB,uGAAmC,CAAA;IACnC,2DAAa,CAAA;IACb,6DAAc,CAAA;IACd,mFAAyB,CAAA;IACzB,6EAAsB,CAAA;IACtB,+EAAuB,CAAA;IACvB,yEAAoB,CAAA;IACpB,uEAAmB,CAAA;IACnB,2EAAqB,CAAA;IACrB,mFAAyB,CAAA;AAC3B,CAAC,EAtBW,cAAc,KAAd,cAAc,QAsBzB"}
@@ -0,0 +1,23 @@
1
+ import { TSchemaValidationError } from './parser';
2
+ import { TJSONSchema } from './types';
3
+ /**
4
+ * This function is used to compute the JSON schema and validation functions
5
+ * for a given schema.
6
+ *
7
+ * @param name The name of the procedure
8
+ * @param schema Procedure schema
9
+ */
10
+ export declare function computeSchema<TArgsSchemaType, TDataSchemaType>(name: string, schema?: {
11
+ args?: TArgsSchemaType;
12
+ data?: TDataSchemaType;
13
+ }): {
14
+ jsonSchema: {
15
+ args?: TJSONSchema;
16
+ data?: TJSONSchema;
17
+ };
18
+ validations: {
19
+ args?: (args?: any) => {
20
+ errors?: TSchemaValidationError[];
21
+ };
22
+ };
23
+ };
@@ -0,0 +1,28 @@
1
+ import { schemaParser } from './parser';
2
+ import { ProcedureRegistrationError } from '../errors';
3
+ /**
4
+ * This function is used to compute the JSON schema and validation functions
5
+ * for a given schema.
6
+ *
7
+ * @param name The name of the procedure
8
+ * @param schema Procedure schema
9
+ */
10
+ export function computeSchema(name, schema) {
11
+ const jsonSchema = {
12
+ args: undefined,
13
+ data: undefined,
14
+ };
15
+ const validations = {};
16
+ if (schema) {
17
+ const { jsonSchema: { args, data }, validation, } = schemaParser(schema, (errors) => {
18
+ throw new ProcedureRegistrationError(name, `Error parsing schema for ${name} - ${Object.entries(errors)
19
+ .map(([key, error]) => `${key}: ${error}`)
20
+ .join(', ')}`);
21
+ });
22
+ jsonSchema.args = args;
23
+ jsonSchema.data = data;
24
+ validations.args = validation.args;
25
+ }
26
+ return { jsonSchema, validations };
27
+ }
28
+ //# sourceMappingURL=compute-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute-schema.js","sourceRoot":"","sources":["../../../src/schema/compute-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA0B,MAAM,UAAU,CAAA;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAA;AAGtD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,MAGC;IAUD,MAAM,UAAU,GAA+C;QAC7D,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;KAChB,CAAA;IAED,MAAM,WAAW,GAEb,EAAE,CAAA;IAEN,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,EACJ,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAC1B,UAAU,GACX,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YAClC,MAAM,IAAI,0BAA0B,CAClC,IAAI,EACJ,4BAA4B,IAAI,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;iBACzD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC;iBACzC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,UAAU,CAAC,IAAI,GAAG,IAAI,CAAA;QACtB,UAAU,CAAC,IAAI,GAAG,IAAI,CAAA;QACtB,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;IACpC,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAA;AACpC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,107 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { Type } from '@sinclair/typebox';
3
+ import { v } from 'suretype';
4
+ import { computeSchema } from './compute-schema';
5
+ import { ProcedureRegistrationError } from '../errors';
6
+ describe('computeSchema', () => {
7
+ it('should return empty schema and validations when no schema provided', () => {
8
+ const result = computeSchema('test-procedure');
9
+ expect(result).toEqual({
10
+ jsonSchema: { args: undefined, data: undefined },
11
+ validations: {}
12
+ });
13
+ });
14
+ describe('with Typebox schema', () => {
15
+ it('should correctly process args schema', () => {
16
+ const schema = {
17
+ args: Type.Object({
18
+ name: Type.String(),
19
+ age: Type.Number()
20
+ })
21
+ };
22
+ const result = computeSchema('test-procedure', schema);
23
+ expect(result.jsonSchema.args).toBeDefined();
24
+ expect(result.validations.args).toBeDefined();
25
+ // Test validation function
26
+ const validInput = { name: 'John', age: 30 };
27
+ expect(result.validations.args?.(validInput).errors).toBeUndefined();
28
+ // Test invalid input
29
+ const invalidInput = { name: 123, age: 'invalid' };
30
+ expect(result.validations.args?.(invalidInput).errors).toBeDefined();
31
+ });
32
+ it('should correctly process data schema', () => {
33
+ const schema = {
34
+ data: Type.Object({
35
+ result: Type.Boolean()
36
+ })
37
+ };
38
+ const result = computeSchema('test-procedure', schema);
39
+ expect(result.jsonSchema.data).toBeDefined();
40
+ expect(result.validations.args).toBeUndefined();
41
+ });
42
+ });
43
+ describe('with Suretype schema', () => {
44
+ it('should correctly process args schema', () => {
45
+ const schema = {
46
+ args: v.object({
47
+ name: v.string(),
48
+ age: v.number()
49
+ })
50
+ };
51
+ const result = computeSchema('test-procedure', schema);
52
+ expect(result.jsonSchema.args).toBeDefined();
53
+ expect(result.validations.args).toBeDefined();
54
+ // Test validation function
55
+ const validInput = { name: 'John', age: 30 };
56
+ expect(result.validations.args?.(validInput).errors).toBeUndefined();
57
+ // Test invalid input
58
+ const invalidInput = { name: 123, age: 'invalid' };
59
+ expect(result.validations.args?.(invalidInput).errors).toBeDefined();
60
+ });
61
+ });
62
+ describe('error handling', () => {
63
+ it('should throw ProcedureRegistrationError for invalid schema', () => {
64
+ const invalidSchema = {
65
+ args: {
66
+ type: 'invalid-schema-type'
67
+ }
68
+ };
69
+ expect(() => computeSchema('test-procedure', invalidSchema))
70
+ .toThrow(ProcedureRegistrationError);
71
+ });
72
+ it('should include procedure name in error message', () => {
73
+ const invalidSchema = {
74
+ args: {
75
+ type: 'invalid-schema-type'
76
+ }
77
+ };
78
+ try {
79
+ computeSchema('test-procedure', invalidSchema);
80
+ }
81
+ catch (error) {
82
+ expect(error instanceof ProcedureRegistrationError).toBe(true);
83
+ expect(error.message).toContain('test-procedure');
84
+ }
85
+ });
86
+ });
87
+ describe('combined schemas', () => {
88
+ it('should handle both args and data schemas', () => {
89
+ const schema = {
90
+ args: Type.Object({
91
+ input: Type.String()
92
+ }),
93
+ data: Type.Object({
94
+ output: Type.Boolean()
95
+ })
96
+ };
97
+ const result = computeSchema('test-procedure', schema);
98
+ expect(result.jsonSchema.args).toBeDefined();
99
+ expect(result.jsonSchema.data).toBeDefined();
100
+ expect(result.validations.args).toBeDefined();
101
+ // Test args validation
102
+ const validInput = { input: 'test' };
103
+ expect(result.validations.args?.(validInput).errors).toBeUndefined();
104
+ });
105
+ });
106
+ });
107
+ //# sourceMappingURL=compute-schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute-schema.test.js","sourceRoot":"","sources":["../../../src/schema/compute-schema.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { TJSONSchema } from './types';
2
+ export declare function extractJsonSchema(libSchema: unknown): TJSONSchema | undefined;
@@ -0,0 +1,12 @@
1
+ import { extractSingleJsonSchema } from 'suretype';
2
+ import { isSuretypeSchema, isTypeboxSchema } from './resolve-schema-lib';
3
+ export function extractJsonSchema(libSchema) {
4
+ if (isTypeboxSchema(libSchema)) {
5
+ return libSchema;
6
+ }
7
+ if (isSuretypeSchema(libSchema)) {
8
+ return extractSingleJsonSchema(libSchema)?.schema;
9
+ }
10
+ return undefined;
11
+ }
12
+ //# sourceMappingURL=extract-json-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-json-schema.js","sourceRoot":"","sources":["../../../src/schema/extract-json-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAGxE,MAAM,UAAU,iBAAiB,CAAC,SAAkB;IAClD,IAAI,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,uBAAuB,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IACnD,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ import { describe, expect, test } from 'vitest';
2
+ import { Type } from '@sinclair/typebox';
3
+ import { v } from 'suretype';
4
+ import { extractJsonSchema } from './extract-json-schema';
5
+ describe('extractJsonSchema()', () => {
6
+ const typebox = Type.Object({ name: Type.String() });
7
+ const suretype = v.object({ name: v.string().required() });
8
+ test('it extracts TypeBox json-schema', async () => {
9
+ expect(extractJsonSchema(typebox)).toMatchObject({
10
+ type: 'object',
11
+ properties: { name: { type: 'string' } },
12
+ required: ['name'],
13
+ });
14
+ });
15
+ test('it extracts Suretype json-schema', async () => {
16
+ expect(extractJsonSchema(suretype)).toMatchObject({
17
+ type: 'object',
18
+ properties: { name: { type: 'string' } },
19
+ required: ['name'],
20
+ });
21
+ });
22
+ });
23
+ //# sourceMappingURL=extract-json-schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-json-schema.test.js","sourceRoot":"","sources":["../../../src/schema/extract-json-schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,UAAU,CAAA;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IAE1D,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;YAC/C,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACxC,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;YAChD,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACxC,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { ErrorObject } from 'ajv';
2
+ import { TJSONSchema } from './types';
3
+ export type TSchemaParsed = {
4
+ jsonSchema: {
5
+ args?: TJSONSchema;
6
+ data?: TJSONSchema;
7
+ };
8
+ validation: {
9
+ args?: (args: any) => {
10
+ errors?: TSchemaValidationError[];
11
+ };
12
+ };
13
+ };
14
+ export type TSchemaValidationError = ErrorObject;
15
+ export declare function schemaParser(schema: {
16
+ args?: unknown;
17
+ data?: unknown;
18
+ }, onParseError: (errors: {
19
+ args?: string;
20
+ data?: string;
21
+ }) => void): TSchemaParsed;