@kontract/adonis 0.1.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 (46) hide show
  1. package/README.md +507 -0
  2. package/dist/adapters/controller-registrar.d.ts +313 -0
  3. package/dist/adapters/controller-registrar.d.ts.map +1 -0
  4. package/dist/adapters/controller-registrar.js +324 -0
  5. package/dist/adapters/controller-registrar.js.map +1 -0
  6. package/dist/adapters/index.d.ts +2 -0
  7. package/dist/adapters/index.d.ts.map +1 -0
  8. package/dist/adapters/index.js +2 -0
  9. package/dist/adapters/index.js.map +1 -0
  10. package/dist/adapters/route-registrar.d.ts +53 -0
  11. package/dist/adapters/route-registrar.d.ts.map +1 -0
  12. package/dist/adapters/route-registrar.js +139 -0
  13. package/dist/adapters/route-registrar.js.map +1 -0
  14. package/dist/adapters/router.d.ts +37 -0
  15. package/dist/adapters/router.d.ts.map +1 -0
  16. package/dist/adapters/router.js +129 -0
  17. package/dist/adapters/router.js.map +1 -0
  18. package/dist/builder/index.d.ts +2 -0
  19. package/dist/builder/index.d.ts.map +1 -0
  20. package/dist/builder/index.js +3 -0
  21. package/dist/builder/index.js.map +1 -0
  22. package/dist/builder/openapi-builder.d.ts +100 -0
  23. package/dist/builder/openapi-builder.d.ts.map +1 -0
  24. package/dist/builder/openapi-builder.js +388 -0
  25. package/dist/builder/openapi-builder.js.map +1 -0
  26. package/dist/index.d.ts +34 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +45 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/serializers/index.d.ts +2 -0
  31. package/dist/serializers/index.d.ts.map +1 -0
  32. package/dist/serializers/index.js +2 -0
  33. package/dist/serializers/index.js.map +1 -0
  34. package/dist/serializers/lucid.d.ts +100 -0
  35. package/dist/serializers/lucid.d.ts.map +1 -0
  36. package/dist/serializers/lucid.js +114 -0
  37. package/dist/serializers/lucid.js.map +1 -0
  38. package/dist/validation/ajv.d.ts +42 -0
  39. package/dist/validation/ajv.d.ts.map +1 -0
  40. package/dist/validation/ajv.js +170 -0
  41. package/dist/validation/ajv.js.map +1 -0
  42. package/dist/validation/index.d.ts +2 -0
  43. package/dist/validation/index.d.ts.map +1 -0
  44. package/dist/validation/index.js +3 -0
  45. package/dist/validation/index.js.map +1 -0
  46. package/package.json +96 -0
@@ -0,0 +1,114 @@
1
+ /* cspell:words paginators */
2
+ /**
3
+ * Check if a value is a Lucid model (has serialize method).
4
+ */
5
+ export function isLucidModel(value) {
6
+ return (value !== null
7
+ && typeof value === 'object'
8
+ && 'serialize' in value
9
+ && typeof value.serialize === 'function');
10
+ }
11
+ /**
12
+ * Check if a value is a TypedModel (has toResponse method).
13
+ */
14
+ export function isTypedModel(value) {
15
+ return (value !== null
16
+ && typeof value === 'object'
17
+ && 'toResponse' in value
18
+ && typeof value.toResponse === 'function');
19
+ }
20
+ /**
21
+ * Check if a value is a Lucid paginator.
22
+ */
23
+ export function isPaginator(value) {
24
+ return (value !== null
25
+ && typeof value === 'object'
26
+ && 'total' in value
27
+ && 'currentPage' in value
28
+ && 'perPage' in value
29
+ && 'all' in value
30
+ && typeof value.all === 'function');
31
+ }
32
+ /**
33
+ * Serializer for TypedModel instances.
34
+ * Calls toResponse() to get the API response format.
35
+ */
36
+ export function serializeTypedModel(model) {
37
+ return model.toResponse();
38
+ }
39
+ /**
40
+ * Serializer for generic Lucid models.
41
+ * Calls serialize() to get the model data.
42
+ */
43
+ export function serializeLucidModel(model) {
44
+ return model.serialize();
45
+ }
46
+ /**
47
+ * Serializer for Lucid paginators.
48
+ * Converts to standard paginated response format.
49
+ */
50
+ export function serializePaginator(paginator) {
51
+ const items = paginator.all();
52
+ const data = items.map((model) => {
53
+ if (isTypedModel(model)) {
54
+ return model.toResponse();
55
+ }
56
+ if (isLucidModel(model)) {
57
+ return model.serialize();
58
+ }
59
+ return model;
60
+ });
61
+ return {
62
+ data,
63
+ meta: {
64
+ total: paginator.total,
65
+ perPage: paginator.perPage,
66
+ currentPage: paginator.currentPage,
67
+ lastPage: paginator.lastPage,
68
+ firstPage: paginator.firstPage,
69
+ },
70
+ };
71
+ }
72
+ /**
73
+ * Check if a value has a serialize() method (like VersionRecord).
74
+ */
75
+ export function hasSerialize(value) {
76
+ return (value !== null
77
+ && typeof value === 'object'
78
+ && 'serialize' in value
79
+ && typeof value.serialize === 'function');
80
+ }
81
+ /**
82
+ * Serializer registration objects for use with defineConfig().
83
+ */
84
+ export const typedModelSerializer = {
85
+ check: isTypedModel,
86
+ serialize: serializeTypedModel,
87
+ priority: 100,
88
+ };
89
+ export const lucidModelSerializer = {
90
+ check: isLucidModel,
91
+ serialize: serializeLucidModel,
92
+ priority: 50,
93
+ };
94
+ export const paginatorSerializer = {
95
+ check: isPaginator,
96
+ serialize: serializePaginator,
97
+ priority: 150,
98
+ };
99
+ export const serializableSerializer = {
100
+ check: hasSerialize,
101
+ serialize: (obj) => obj.serialize(),
102
+ priority: 25,
103
+ };
104
+ /**
105
+ * All Lucid-related serializers.
106
+ * Register these with defineConfig() to enable automatic model serialization.
107
+ */
108
+ export const lucidSerializers = [
109
+ paginatorSerializer,
110
+ typedModelSerializer,
111
+ lucidModelSerializer,
112
+ serializableSerializer,
113
+ ];
114
+ //# sourceMappingURL=lucid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lucid.js","sourceRoot":"","sources":["../../src/serializers/lucid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { TSchema, Static } from '@sinclair/typebox';
2
+ import { type Validator, type ValidatorOptions, type ValidationErrorDetail } from 'kontract';
3
+ /**
4
+ * Options for creating the AJV validator.
5
+ */
6
+ export interface AjvValidatorOptions extends ValidatorOptions {
7
+ /**
8
+ * Additional AJV options.
9
+ */
10
+ ajvOptions?: Record<string, unknown>;
11
+ }
12
+ /**
13
+ * Create an AJV-based validator.
14
+ */
15
+ export declare function createAjvValidator(options?: AjvValidatorOptions): Validator;
16
+ export declare function validate<T extends TSchema>(schema: T, data: unknown): Static<T>;
17
+ /**
18
+ * Validation error class for AJV errors.
19
+ */
20
+ export declare class AjvValidationError extends Error {
21
+ readonly errors: ValidationErrorDetail[];
22
+ readonly status = 422;
23
+ readonly code = "E_VALIDATION_ERROR";
24
+ constructor(errors: ValidationErrorDetail[]);
25
+ }
26
+ /**
27
+ * Strip $id from nested schemas to prevent AJV conflicts.
28
+ *
29
+ * When a schema with $id is used multiple times in a parent schema,
30
+ * AJV sees each instance as a separate schema definition with the
31
+ * same $id, causing conflicts.
32
+ */
33
+ export declare function stripNestedIds<T extends TSchema>(schema: T, isRoot?: boolean): T;
34
+ /**
35
+ * Get the default AJV instance for advanced use cases.
36
+ */
37
+ export declare function getDefaultValidator(): Validator;
38
+ /**
39
+ * Reset the default validator (useful for testing).
40
+ */
41
+ export declare function resetDefaultValidator(): void;
42
+ //# sourceMappingURL=ajv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ajv.d.ts","sourceRoot":"","sources":["../../src/validation/ajv.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAE3B,MAAM,0BAA0B,CAAA;AAgBjC;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,SAAS,CAoG/E;AAQD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAW/E;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAgB,MAAM,EAAE,qBAAqB,EAAE,CAAA;IAC/C,SAAgB,MAAM,OAAM;IAC5B,SAAgB,IAAI,wBAAuB;gBAE/B,MAAM,EAAE,qBAAqB,EAAE;CAK5C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,UAAO,GAAG,CAAC,CAyB7E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,CAK/C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
@@ -0,0 +1,170 @@
1
+ import Ajv from 'ajv';
2
+ import addFormats from 'ajv-formats';
3
+ import { RequestValidationError, } from '@blog/openapi-decorators';
4
+ // Handle ESM/CJS compatibility for Ajv and ajv-formats
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+ const AjvClass = Ajv.default ?? Ajv;
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ const addFormatsFunc = addFormats.default ?? addFormats;
9
+ /**
10
+ * Create an AJV-based validator.
11
+ */
12
+ export function createAjvValidator(options = {}) {
13
+ const ajv = new AjvClass({
14
+ allErrors: true,
15
+ coerceTypes: options.coerceTypes ?? true,
16
+ removeAdditional: options.removeAdditional ?? true,
17
+ useDefaults: options.useDefaults ?? true,
18
+ strict: false, // Disable strict mode for TypeBox compatibility
19
+ ...options.ajvOptions,
20
+ });
21
+ // Add format validators
22
+ addFormatsFunc(ajv);
23
+ // Register custom formats
24
+ if (options.formats) {
25
+ for (const [name, fn] of Object.entries(options.formats)) {
26
+ ajv.addFormat(name, fn);
27
+ }
28
+ }
29
+ // Cache for compiled validators
30
+ const validatorCache = new Map();
31
+ /**
32
+ * Get or create a compiled validator for a schema.
33
+ */
34
+ function getCompiledValidator(schema) {
35
+ let validator = validatorCache.get(schema);
36
+ if (!validator) {
37
+ const schemaId = schema.$id;
38
+ // Check if schema is already registered with AJV
39
+ if (schemaId) {
40
+ const existing = ajv.getSchema(schemaId);
41
+ if (existing) {
42
+ validatorCache.set(schema, existing);
43
+ return existing;
44
+ }
45
+ }
46
+ // Strip nested $id fields to prevent AJV conflicts
47
+ const cleanedSchema = stripNestedIds(schema);
48
+ validator = ajv.compile(cleanedSchema);
49
+ validatorCache.set(schema, validator);
50
+ }
51
+ return validator;
52
+ }
53
+ return {
54
+ validate(schema, data) {
55
+ const validator = getCompiledValidator(schema);
56
+ const valid = validator(data);
57
+ if (!valid && validator.errors) {
58
+ return validator.errors.map((err) => ({
59
+ field: err.instancePath.replace(/^\//, '').replace(/\//g, '.')
60
+ || err.params.missingProperty
61
+ || 'unknown',
62
+ message: err.message || 'Validation failed',
63
+ }));
64
+ }
65
+ return [];
66
+ },
67
+ validateOrThrow(schema, data) {
68
+ const errors = this.validate(schema, data);
69
+ if (errors.length > 0) {
70
+ throw new RequestValidationError(schema, data, errors, 'body');
71
+ }
72
+ },
73
+ compile(schema) {
74
+ const compiled = getCompiledValidator(schema);
75
+ return {
76
+ validate(data) {
77
+ const valid = compiled(data);
78
+ if (!valid && compiled.errors) {
79
+ return compiled.errors.map((err) => ({
80
+ field: err.instancePath.replace(/^\//, '').replace(/\//g, '.')
81
+ || err.params.missingProperty
82
+ || 'unknown',
83
+ message: err.message || 'Validation failed',
84
+ }));
85
+ }
86
+ return [];
87
+ },
88
+ validateOrThrow(data) {
89
+ const errors = this.validate(data);
90
+ if (errors.length > 0) {
91
+ throw new RequestValidationError(schema, data, errors, 'body');
92
+ }
93
+ },
94
+ };
95
+ },
96
+ };
97
+ }
98
+ /**
99
+ * Simple validate function that creates a validator on demand.
100
+ * For better performance, use createAjvValidator() and reuse the instance.
101
+ */
102
+ let defaultValidator = null;
103
+ export function validate(schema, data) {
104
+ if (!defaultValidator) {
105
+ defaultValidator = createAjvValidator();
106
+ }
107
+ const errors = defaultValidator.validate(schema, data);
108
+ if (errors.length > 0) {
109
+ throw new AjvValidationError(errors);
110
+ }
111
+ return data;
112
+ }
113
+ /**
114
+ * Validation error class for AJV errors.
115
+ */
116
+ export class AjvValidationError extends Error {
117
+ errors;
118
+ status = 422;
119
+ code = 'E_VALIDATION_ERROR';
120
+ constructor(errors) {
121
+ super('Validation failed');
122
+ this.name = 'AjvValidationError';
123
+ this.errors = errors;
124
+ }
125
+ }
126
+ /**
127
+ * Strip $id from nested schemas to prevent AJV conflicts.
128
+ *
129
+ * When a schema with $id is used multiple times in a parent schema,
130
+ * AJV sees each instance as a separate schema definition with the
131
+ * same $id, causing conflicts.
132
+ */
133
+ export function stripNestedIds(schema, isRoot = true) {
134
+ if (typeof schema !== 'object' || schema === null) {
135
+ return schema;
136
+ }
137
+ if (Array.isArray(schema)) {
138
+ return schema.map((item) => stripNestedIds(item, false));
139
+ }
140
+ const result = {};
141
+ for (const [key, value] of Object.entries(schema)) {
142
+ // Strip $id from non-root schemas
143
+ if (key === '$id' && !isRoot) {
144
+ continue;
145
+ }
146
+ if (typeof value === 'object' && value !== null) {
147
+ result[key] = stripNestedIds(value, false);
148
+ }
149
+ else {
150
+ result[key] = value;
151
+ }
152
+ }
153
+ return result;
154
+ }
155
+ /**
156
+ * Get the default AJV instance for advanced use cases.
157
+ */
158
+ export function getDefaultValidator() {
159
+ if (!defaultValidator) {
160
+ defaultValidator = createAjvValidator();
161
+ }
162
+ return defaultValidator;
163
+ }
164
+ /**
165
+ * Reset the default validator (useful for testing).
166
+ */
167
+ export function resetDefaultValidator() {
168
+ defaultValidator = null;
169
+ }
170
+ //# sourceMappingURL=ajv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ajv.js","sourceRoot":"","sources":["../../src/validation/ajv.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { createAjvValidator, validate, stripNestedIds, getDefaultValidator, resetDefaultValidator, AjvValidationError, type AjvValidatorOptions, type Validator, type CompiledValidator, type ValidatorOptions, type ValidationErrorDetail, } from '@kontract/ajv';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAA"}
@@ -0,0 +1,3 @@
1
+ // Re-export all validation utilities from the shared package
2
+ export { createAjvValidator, validate, stripNestedIds, getDefaultValidator, resetDefaultValidator, AjvValidationError, } from '@kontract/ajv';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,GAMnB,MAAM,eAAe,CAAA"}
package/package.json ADDED
@@ -0,0 +1,96 @@
1
+ {
2
+ "name": "@kontract/adonis",
3
+ "version": "0.1.0",
4
+ "description": "AdonisJS adapter for kontract",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./adapters": {
14
+ "types": "./dist/adapters/index.d.ts",
15
+ "import": "./dist/adapters/index.js"
16
+ },
17
+ "./validation": {
18
+ "types": "./dist/validation/index.d.ts",
19
+ "import": "./dist/validation/index.js"
20
+ },
21
+ "./builder": {
22
+ "types": "./dist/builder/index.d.ts",
23
+ "import": "./dist/builder/index.js"
24
+ }
25
+ },
26
+ "files": [
27
+ "dist",
28
+ "README.md"
29
+ ],
30
+ "scripts": {
31
+ "build": "tsc",
32
+ "dev": "tsc --watch",
33
+ "typecheck": "tsc --noEmit",
34
+ "lint": "eslint src/",
35
+ "lint:fix": "eslint src/ --fix",
36
+ "clean": "rm -rf dist",
37
+ "test": "TSX_TSCONFIG_PATH=tsconfig.test.json node --import=tsx bin/test.ts",
38
+ "demo": "node --import=tsx demo/bin/server.ts",
39
+ "demo:watch": "node --watch --import=tsx demo/bin/server.ts"
40
+ },
41
+ "dependencies": {
42
+ "@kontract/ajv": "*",
43
+ "kontract": "*"
44
+ },
45
+ "devDependencies": {
46
+ "@adonisjs/core": "^6.18.0",
47
+ "@adonisjs/lucid": "^21.6.0",
48
+ "@japa/api-client": "^3.0.0",
49
+ "@japa/assert": "^4.2.0",
50
+ "@japa/runner": "^4.4.0",
51
+ "@sinclair/typebox": "^0.34.33",
52
+ "@types/node": "^22.15.21",
53
+ "ajv": "^8.17.1",
54
+ "ajv-formats": "^3.0.1",
55
+ "tsx": "^4.19.0",
56
+ "typescript": "^5.8.3"
57
+ },
58
+ "peerDependencies": {
59
+ "@adonisjs/core": "^6.0.0",
60
+ "@adonisjs/lucid": "^21.0.0",
61
+ "@sinclair/typebox": ">=0.32.0",
62
+ "ajv": "^8.0.0"
63
+ },
64
+ "peerDependenciesMeta": {
65
+ "@adonisjs/lucid": {
66
+ "optional": true
67
+ },
68
+ "ajv": {
69
+ "optional": true
70
+ }
71
+ },
72
+ "engines": {
73
+ "node": ">=20.0.0"
74
+ },
75
+ "keywords": [
76
+ "adonisjs",
77
+ "openapi",
78
+ "swagger",
79
+ "decorators",
80
+ "typescript"
81
+ ],
82
+ "author": "Drew Daniels",
83
+ "license": "MIT",
84
+ "repository": {
85
+ "type": "git",
86
+ "url": "https://github.com/Drew-Daniels/kontract.git",
87
+ "directory": "packages/kontract-adonis"
88
+ },
89
+ "homepage": "https://github.com/Drew-Daniels/kontract#readme",
90
+ "bugs": {
91
+ "url": "https://github.com/Drew-Daniels/kontract/issues"
92
+ },
93
+ "publishConfig": {
94
+ "access": "public"
95
+ }
96
+ }