@danceroutine/tango-openapi 0.1.0 → 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.
- package/LICENSE +21 -0
- package/README.md +145 -0
- package/dist/chunk-BkvOhyD0.js +12 -0
- package/dist/domain/describeResources.d.ts +10 -0
- package/dist/domain/index.d.ts +2 -1
- package/dist/domain/index.js +3 -4
- package/dist/domain/types.d.ts +76 -12
- package/dist/domain-B-7sApJT.js +34 -0
- package/dist/domain-B-7sApJT.js.map +1 -0
- package/dist/generators/index.js +2 -2
- package/dist/generators/spec/generateOpenAPISpec.d.ts +3 -0
- package/dist/generators-JMALItMS.js +346 -0
- package/dist/generators-JMALItMS.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +5 -10
- package/dist/mappers/index.d.ts +1 -1
- package/dist/mappers/index.js +3 -3
- package/dist/mappers/schema/generateSchemaFromModel.d.ts +3 -0
- package/dist/mappers/schema/generateSchemaFromZod.d.ts +6 -0
- package/dist/mappers/schema/index.d.ts +1 -0
- package/dist/mappers/schema/mapTypeToOpenAPI.d.ts +3 -0
- package/dist/mappers-bmN95TGV.js +15 -0
- package/dist/{mappers-CIfnOwl2.js.map → mappers-bmN95TGV.js.map} +1 -1
- package/dist/{schema-DVxdID48.js → schema-D3ybOrpr.js} +19 -12
- package/dist/schema-D3ybOrpr.js.map +1 -0
- package/package.json +57 -53
- package/dist/domain/types.js +0 -1
- package/dist/domain-Cufz6y1q.js +0 -7
- package/dist/domain-Cufz6y1q.js.map +0 -1
- package/dist/generators/spec/generateOpenAPISpec.js +0 -133
- package/dist/generators-Bvwyyja4.js +0 -131
- package/dist/generators-Bvwyyja4.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/mappers/schema/generateSchemaFromModel.js +0 -19
- package/dist/mappers-CIfnOwl2.js +0 -13
- package/dist/schema-DVxdID48.js.map +0 -1
- package/dist/version.d.ts +0 -1
package/package.json
CHANGED
|
@@ -1,58 +1,62 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
},
|
|
13
|
-
"./domain": {
|
|
14
|
-
"types": "./dist/domain/index.d.ts",
|
|
15
|
-
"import": "./dist/domain/index.js"
|
|
16
|
-
},
|
|
17
|
-
"./generators": {
|
|
18
|
-
"types": "./dist/generators/index.d.ts",
|
|
19
|
-
"import": "./dist/generators/index.js"
|
|
20
|
-
},
|
|
21
|
-
"./mappers": {
|
|
22
|
-
"types": "./dist/mappers/index.d.ts",
|
|
23
|
-
"import": "./dist/mappers/index.js"
|
|
24
|
-
}
|
|
2
|
+
"name": "@danceroutine/tango-openapi",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "OpenAPI generation for Tango resources",
|
|
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"
|
|
25
12
|
},
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"scripts": {
|
|
30
|
-
"build": "tsdown",
|
|
31
|
-
"test": "vitest run --coverage",
|
|
32
|
-
"test:watch": "vitest",
|
|
33
|
-
"typecheck": "tsc --noEmit"
|
|
13
|
+
"./domain": {
|
|
14
|
+
"types": "./dist/domain/index.d.ts",
|
|
15
|
+
"import": "./dist/domain/index.js"
|
|
34
16
|
},
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"swagger",
|
|
39
|
-
"api-docs"
|
|
40
|
-
],
|
|
41
|
-
"author": "Pedro Del Moral Lopez",
|
|
42
|
-
"license": "MIT",
|
|
43
|
-
"repository": {
|
|
44
|
-
"type": "git",
|
|
45
|
-
"url": "https://github.com/danceroutine/tango.git",
|
|
46
|
-
"directory": "packages/openapi"
|
|
17
|
+
"./generators": {
|
|
18
|
+
"types": "./dist/generators/index.d.ts",
|
|
19
|
+
"import": "./dist/generators/index.js"
|
|
47
20
|
},
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
},
|
|
52
|
-
"devDependencies": {
|
|
53
|
-
"@types/node": "^22.9.0",
|
|
54
|
-
"tsdown": "^0.4.0",
|
|
55
|
-
"typescript": "^5.6.3",
|
|
56
|
-
"vitest": "^4.0.6"
|
|
21
|
+
"./mappers": {
|
|
22
|
+
"types": "./dist/mappers/index.d.ts",
|
|
23
|
+
"import": "./dist/mappers/index.js"
|
|
57
24
|
}
|
|
58
|
-
}
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist"
|
|
28
|
+
],
|
|
29
|
+
"keywords": [
|
|
30
|
+
"tango",
|
|
31
|
+
"openapi",
|
|
32
|
+
"swagger",
|
|
33
|
+
"api-docs"
|
|
34
|
+
],
|
|
35
|
+
"author": "Pedro Del Moral Lopez",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/danceroutine/tango.git",
|
|
40
|
+
"directory": "packages/openapi"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"zod": "^4.0.0",
|
|
44
|
+
"@danceroutine/tango-resources": "1.0.0"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/node": "^22.9.0",
|
|
48
|
+
"tsdown": "^0.4.0",
|
|
49
|
+
"typescript": "^5.6.3",
|
|
50
|
+
"vitest": "^4.0.6",
|
|
51
|
+
"@danceroutine/tango-core": "1.0.0",
|
|
52
|
+
"@danceroutine/tango-testing": "1.0.0"
|
|
53
|
+
},
|
|
54
|
+
"scripts": {
|
|
55
|
+
"build": "tsdown",
|
|
56
|
+
"test": "vitest run --coverage",
|
|
57
|
+
"test:watch": "vitest",
|
|
58
|
+
"typecheck": "pnpm run typecheck:prod && pnpm run typecheck:test",
|
|
59
|
+
"typecheck:prod": "tsc --noEmit -p tsconfig.json",
|
|
60
|
+
"typecheck:test": "tsc --noEmit -p tsconfig.tests.json"
|
|
61
|
+
}
|
|
62
|
+
}
|
package/dist/domain/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/domain-Cufz6y1q.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"domain-Cufz6y1q.js","names":[],"sources":["../src/domain/index.ts"],"sourcesContent":["/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport type {\n OpenAPIModel,\n OpenAPIModelFieldMeta,\n OpenAPIOptions,\n OpenAPISpec,\n OpenAPIGeneratorConfig,\n ViewSetLike,\n} from './types';\n"],"mappings":""}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { generateSchemaFromModel } from '../../mappers/schema';
|
|
2
|
-
export function generateOpenAPISpec(config) {
|
|
3
|
-
const paths = {};
|
|
4
|
-
const schemas = {};
|
|
5
|
-
if (config.viewsets) {
|
|
6
|
-
for (const [basePath, viewset] of Object.entries(config.viewsets)) {
|
|
7
|
-
const model = viewset.repository?.model;
|
|
8
|
-
if (!model)
|
|
9
|
-
continue;
|
|
10
|
-
const modelName = model.name;
|
|
11
|
-
const collectionPath = `/${basePath}`;
|
|
12
|
-
const itemPath = `/${basePath}/{id}`;
|
|
13
|
-
schemas[modelName] = generateSchemaFromModel(model);
|
|
14
|
-
paths[collectionPath] = {
|
|
15
|
-
get: {
|
|
16
|
-
summary: `List ${modelName}s`,
|
|
17
|
-
tags: [modelName],
|
|
18
|
-
parameters: [
|
|
19
|
-
{ name: 'limit', in: 'query', schema: { type: 'integer' } },
|
|
20
|
-
{ name: 'offset', in: 'query', schema: { type: 'integer' } },
|
|
21
|
-
],
|
|
22
|
-
responses: {
|
|
23
|
-
'200': {
|
|
24
|
-
description: 'Successful response',
|
|
25
|
-
content: {
|
|
26
|
-
'application/json': {
|
|
27
|
-
schema: {
|
|
28
|
-
type: 'array',
|
|
29
|
-
items: { $ref: `#/components/schemas/${modelName}` },
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
post: {
|
|
37
|
-
summary: `Create ${modelName}`,
|
|
38
|
-
tags: [modelName],
|
|
39
|
-
requestBody: {
|
|
40
|
-
required: true,
|
|
41
|
-
content: {
|
|
42
|
-
'application/json': {
|
|
43
|
-
schema: { $ref: `#/components/schemas/${modelName}` },
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
responses: {
|
|
48
|
-
'201': {
|
|
49
|
-
description: 'Created',
|
|
50
|
-
content: {
|
|
51
|
-
'application/json': {
|
|
52
|
-
schema: { $ref: `#/components/schemas/${modelName}` },
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
paths[itemPath] = {
|
|
60
|
-
get: {
|
|
61
|
-
summary: `Get ${modelName}`,
|
|
62
|
-
tags: [modelName],
|
|
63
|
-
parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string' } }],
|
|
64
|
-
responses: {
|
|
65
|
-
'200': {
|
|
66
|
-
description: 'Successful response',
|
|
67
|
-
content: {
|
|
68
|
-
'application/json': {
|
|
69
|
-
schema: { $ref: `#/components/schemas/${modelName}` },
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
'404': {
|
|
74
|
-
description: 'Not found',
|
|
75
|
-
},
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
|
-
patch: {
|
|
79
|
-
summary: `Update ${modelName}`,
|
|
80
|
-
tags: [modelName],
|
|
81
|
-
parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string' } }],
|
|
82
|
-
requestBody: {
|
|
83
|
-
required: true,
|
|
84
|
-
content: {
|
|
85
|
-
'application/json': {
|
|
86
|
-
schema: { $ref: `#/components/schemas/${modelName}` },
|
|
87
|
-
},
|
|
88
|
-
},
|
|
89
|
-
},
|
|
90
|
-
responses: {
|
|
91
|
-
'200': {
|
|
92
|
-
description: 'Updated',
|
|
93
|
-
content: {
|
|
94
|
-
'application/json': {
|
|
95
|
-
schema: { $ref: `#/components/schemas/${modelName}` },
|
|
96
|
-
},
|
|
97
|
-
},
|
|
98
|
-
},
|
|
99
|
-
'404': {
|
|
100
|
-
description: 'Not found',
|
|
101
|
-
},
|
|
102
|
-
},
|
|
103
|
-
},
|
|
104
|
-
delete: {
|
|
105
|
-
summary: `Delete ${modelName}`,
|
|
106
|
-
tags: [modelName],
|
|
107
|
-
parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string' } }],
|
|
108
|
-
responses: {
|
|
109
|
-
'204': {
|
|
110
|
-
description: 'Deleted',
|
|
111
|
-
},
|
|
112
|
-
'404': {
|
|
113
|
-
description: 'Not found',
|
|
114
|
-
},
|
|
115
|
-
},
|
|
116
|
-
},
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
return {
|
|
121
|
-
openapi: '3.1.0',
|
|
122
|
-
info: {
|
|
123
|
-
title: config.title,
|
|
124
|
-
version: config.version,
|
|
125
|
-
description: config.description,
|
|
126
|
-
},
|
|
127
|
-
servers: config.servers,
|
|
128
|
-
paths,
|
|
129
|
-
components: {
|
|
130
|
-
schemas,
|
|
131
|
-
},
|
|
132
|
-
};
|
|
133
|
-
}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import { __export, generateSchemaFromModel } from "./schema-DVxdID48.js";
|
|
2
|
-
|
|
3
|
-
//#region src/generators/spec/generateOpenAPISpec.ts
|
|
4
|
-
function generateOpenAPISpec(config) {
|
|
5
|
-
const paths = {};
|
|
6
|
-
const schemas = {};
|
|
7
|
-
if (config.viewsets) for (const [basePath, viewset] of Object.entries(config.viewsets)) {
|
|
8
|
-
const model = viewset.repository?.model;
|
|
9
|
-
if (!model) continue;
|
|
10
|
-
const modelName = model.name;
|
|
11
|
-
const collectionPath = `/${basePath}`;
|
|
12
|
-
const itemPath = `/${basePath}/{id}`;
|
|
13
|
-
schemas[modelName] = generateSchemaFromModel(model);
|
|
14
|
-
paths[collectionPath] = {
|
|
15
|
-
get: {
|
|
16
|
-
summary: `List ${modelName}s`,
|
|
17
|
-
tags: [modelName],
|
|
18
|
-
parameters: [{
|
|
19
|
-
name: "limit",
|
|
20
|
-
in: "query",
|
|
21
|
-
schema: { type: "integer" }
|
|
22
|
-
}, {
|
|
23
|
-
name: "offset",
|
|
24
|
-
in: "query",
|
|
25
|
-
schema: { type: "integer" }
|
|
26
|
-
}],
|
|
27
|
-
responses: { "200": {
|
|
28
|
-
description: "Successful response",
|
|
29
|
-
content: { "application/json": { schema: {
|
|
30
|
-
type: "array",
|
|
31
|
-
items: { $ref: `#/components/schemas/${modelName}` }
|
|
32
|
-
} } }
|
|
33
|
-
} }
|
|
34
|
-
},
|
|
35
|
-
post: {
|
|
36
|
-
summary: `Create ${modelName}`,
|
|
37
|
-
tags: [modelName],
|
|
38
|
-
requestBody: {
|
|
39
|
-
required: true,
|
|
40
|
-
content: { "application/json": { schema: { $ref: `#/components/schemas/${modelName}` } } }
|
|
41
|
-
},
|
|
42
|
-
responses: { "201": {
|
|
43
|
-
description: "Created",
|
|
44
|
-
content: { "application/json": { schema: { $ref: `#/components/schemas/${modelName}` } } }
|
|
45
|
-
} }
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
paths[itemPath] = {
|
|
49
|
-
get: {
|
|
50
|
-
summary: `Get ${modelName}`,
|
|
51
|
-
tags: [modelName],
|
|
52
|
-
parameters: [{
|
|
53
|
-
name: "id",
|
|
54
|
-
in: "path",
|
|
55
|
-
required: true,
|
|
56
|
-
schema: { type: "string" }
|
|
57
|
-
}],
|
|
58
|
-
responses: {
|
|
59
|
-
"200": {
|
|
60
|
-
description: "Successful response",
|
|
61
|
-
content: { "application/json": { schema: { $ref: `#/components/schemas/${modelName}` } } }
|
|
62
|
-
},
|
|
63
|
-
"404": { description: "Not found" }
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
patch: {
|
|
67
|
-
summary: `Update ${modelName}`,
|
|
68
|
-
tags: [modelName],
|
|
69
|
-
parameters: [{
|
|
70
|
-
name: "id",
|
|
71
|
-
in: "path",
|
|
72
|
-
required: true,
|
|
73
|
-
schema: { type: "string" }
|
|
74
|
-
}],
|
|
75
|
-
requestBody: {
|
|
76
|
-
required: true,
|
|
77
|
-
content: { "application/json": { schema: { $ref: `#/components/schemas/${modelName}` } } }
|
|
78
|
-
},
|
|
79
|
-
responses: {
|
|
80
|
-
"200": {
|
|
81
|
-
description: "Updated",
|
|
82
|
-
content: { "application/json": { schema: { $ref: `#/components/schemas/${modelName}` } } }
|
|
83
|
-
},
|
|
84
|
-
"404": { description: "Not found" }
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
delete: {
|
|
88
|
-
summary: `Delete ${modelName}`,
|
|
89
|
-
tags: [modelName],
|
|
90
|
-
parameters: [{
|
|
91
|
-
name: "id",
|
|
92
|
-
in: "path",
|
|
93
|
-
required: true,
|
|
94
|
-
schema: { type: "string" }
|
|
95
|
-
}],
|
|
96
|
-
responses: {
|
|
97
|
-
"204": { description: "Deleted" },
|
|
98
|
-
"404": { description: "Not found" }
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
return {
|
|
104
|
-
openapi: "3.1.0",
|
|
105
|
-
info: {
|
|
106
|
-
title: config.title,
|
|
107
|
-
version: config.version,
|
|
108
|
-
description: config.description
|
|
109
|
-
},
|
|
110
|
-
servers: config.servers,
|
|
111
|
-
paths,
|
|
112
|
-
components: { schemas }
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
//#endregion
|
|
117
|
-
//#region src/generators/spec/index.ts
|
|
118
|
-
var spec_exports = {};
|
|
119
|
-
__export(spec_exports, { generateOpenAPISpec: () => generateOpenAPISpec });
|
|
120
|
-
|
|
121
|
-
//#endregion
|
|
122
|
-
//#region src/generators/index.ts
|
|
123
|
-
var generators_exports = {};
|
|
124
|
-
__export(generators_exports, {
|
|
125
|
-
generateOpenAPISpec: () => generateOpenAPISpec,
|
|
126
|
-
spec: () => spec_exports
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
//#endregion
|
|
130
|
-
export { generateOpenAPISpec, generators_exports, spec_exports };
|
|
131
|
-
//# sourceMappingURL=generators-Bvwyyja4.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generators-Bvwyyja4.js","names":["config: OpenAPIGeneratorConfig","paths: Record<string, any>","schemas: Record<string, any>"],"sources":["../src/generators/spec/generateOpenAPISpec.ts","../src/generators/spec/index.ts","../src/generators/index.ts"],"sourcesContent":["import { generateSchemaFromModel } from '../../mappers/schema';\nimport type { OpenAPIGeneratorConfig, OpenAPISpec } from '../../domain';\n\nexport function generateOpenAPISpec(config: OpenAPIGeneratorConfig): OpenAPISpec {\n const paths: Record<string, any> = {};\n const schemas: Record<string, any> = {};\n\n if (config.viewsets) {\n for (const [basePath, viewset] of Object.entries(config.viewsets)) {\n const model = (viewset as any).repository?.model;\n if (!model) continue;\n\n const modelName = model.name;\n const collectionPath = `/${basePath}`;\n const itemPath = `/${basePath}/{id}`;\n\n schemas[modelName] = generateSchemaFromModel(model);\n\n paths[collectionPath] = {\n get: {\n summary: `List ${modelName}s`,\n tags: [modelName],\n parameters: [\n { name: 'limit', in: 'query', schema: { type: 'integer' } },\n { name: 'offset', in: 'query', schema: { type: 'integer' } },\n ],\n responses: {\n '200': {\n description: 'Successful response',\n content: {\n 'application/json': {\n schema: {\n type: 'array',\n items: { $ref: `#/components/schemas/${modelName}` },\n },\n },\n },\n },\n },\n },\n post: {\n summary: `Create ${modelName}`,\n tags: [modelName],\n requestBody: {\n required: true,\n content: {\n 'application/json': {\n schema: { $ref: `#/components/schemas/${modelName}` },\n },\n },\n },\n responses: {\n '201': {\n description: 'Created',\n content: {\n 'application/json': {\n schema: { $ref: `#/components/schemas/${modelName}` },\n },\n },\n },\n },\n },\n };\n\n paths[itemPath] = {\n get: {\n summary: `Get ${modelName}`,\n tags: [modelName],\n parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string' } }],\n responses: {\n '200': {\n description: 'Successful response',\n content: {\n 'application/json': {\n schema: { $ref: `#/components/schemas/${modelName}` },\n },\n },\n },\n '404': {\n description: 'Not found',\n },\n },\n },\n patch: {\n summary: `Update ${modelName}`,\n tags: [modelName],\n parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string' } }],\n requestBody: {\n required: true,\n content: {\n 'application/json': {\n schema: { $ref: `#/components/schemas/${modelName}` },\n },\n },\n },\n responses: {\n '200': {\n description: 'Updated',\n content: {\n 'application/json': {\n schema: { $ref: `#/components/schemas/${modelName}` },\n },\n },\n },\n '404': {\n description: 'Not found',\n },\n },\n },\n delete: {\n summary: `Delete ${modelName}`,\n tags: [modelName],\n parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string' } }],\n responses: {\n '204': {\n description: 'Deleted',\n },\n '404': {\n description: 'Not found',\n },\n },\n },\n };\n }\n }\n\n return {\n openapi: '3.1.0',\n info: {\n title: config.title,\n version: config.version,\n description: config.description,\n },\n servers: config.servers,\n paths,\n components: {\n schemas,\n },\n };\n}\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { generateOpenAPISpec } from './generateOpenAPISpec';\n","/**\n * Domain boundary barrel: exposes namespaced exports for Django-style drill-down\n * imports and curated flat exports for TS-native ergonomics.\n */\n\nexport * as spec from './spec/index';\nexport { generateOpenAPISpec } from './spec/index';\n"],"mappings":";;;AAGO,SAAS,oBAAoBA,QAA6C;CAC7E,MAAMC,QAA6B,CAAE;CACrC,MAAMC,UAA+B,CAAE;AAEvC,KAAI,OAAO,SACP,MAAK,MAAM,CAAC,UAAU,QAAQ,IAAI,OAAO,QAAQ,OAAO,SAAS,EAAE;EAC/D,MAAM,QAAS,QAAgB,YAAY;AAC3C,OAAK,MAAO;EAEZ,MAAM,YAAY,MAAM;EACxB,MAAM,kBAAkB,GAAG,SAAS;EACpC,MAAM,YAAY,GAAG,SAAS;AAE9B,UAAQ,aAAa,wBAAwB,MAAM;AAEnD,QAAM,kBAAkB;GACpB,KAAK;IACD,UAAU,OAAO,UAAU;IAC3B,MAAM,CAAC,SAAU;IACjB,YAAY,CACR;KAAE,MAAM;KAAS,IAAI;KAAS,QAAQ,EAAE,MAAM,UAAW;IAAE,GAC3D;KAAE,MAAM;KAAU,IAAI;KAAS,QAAQ,EAAE,MAAM,UAAW;IAC7D,CAAA;IACD,WAAW,EACP,OAAO;KACH,aAAa;KACb,SAAS,EACL,oBAAoB,EAChB,QAAQ;MACJ,MAAM;MACN,OAAO,EAAE,OAAO,uBAAuB,UAAU,EAAG;KACvD,EACJ,EACJ;IACJ,EACJ;GACJ;GACD,MAAM;IACF,UAAU,SAAS,UAAU;IAC7B,MAAM,CAAC,SAAU;IACjB,aAAa;KACT,UAAU;KACV,SAAS,EACL,oBAAoB,EAChB,QAAQ,EAAE,OAAO,uBAAuB,UAAU,EAAG,EACxD,EACJ;IACJ;IACD,WAAW,EACP,OAAO;KACH,aAAa;KACb,SAAS,EACL,oBAAoB,EAChB,QAAQ,EAAE,OAAO,uBAAuB,UAAU,EAAG,EACxD,EACJ;IACJ,EACJ;GACJ;EACJ;AAED,QAAM,YAAY;GACd,KAAK;IACD,UAAU,MAAM,UAAU;IAC1B,MAAM,CAAC,SAAU;IACjB,YAAY,CAAC;KAAE,MAAM;KAAM,IAAI;KAAQ,UAAU;KAAM,QAAQ,EAAE,MAAM,SAAU;IAAG,CAAA;IACpF,WAAW;KACP,OAAO;MACH,aAAa;MACb,SAAS,EACL,oBAAoB,EAChB,QAAQ,EAAE,OAAO,uBAAuB,UAAU,EAAG,EACxD,EACJ;KACJ;KACD,OAAO,EACH,aAAa,YAChB;IACJ;GACJ;GACD,OAAO;IACH,UAAU,SAAS,UAAU;IAC7B,MAAM,CAAC,SAAU;IACjB,YAAY,CAAC;KAAE,MAAM;KAAM,IAAI;KAAQ,UAAU;KAAM,QAAQ,EAAE,MAAM,SAAU;IAAG,CAAA;IACpF,aAAa;KACT,UAAU;KACV,SAAS,EACL,oBAAoB,EAChB,QAAQ,EAAE,OAAO,uBAAuB,UAAU,EAAG,EACxD,EACJ;IACJ;IACD,WAAW;KACP,OAAO;MACH,aAAa;MACb,SAAS,EACL,oBAAoB,EAChB,QAAQ,EAAE,OAAO,uBAAuB,UAAU,EAAG,EACxD,EACJ;KACJ;KACD,OAAO,EACH,aAAa,YAChB;IACJ;GACJ;GACD,QAAQ;IACJ,UAAU,SAAS,UAAU;IAC7B,MAAM,CAAC,SAAU;IACjB,YAAY,CAAC;KAAE,MAAM;KAAM,IAAI;KAAQ,UAAU;KAAM,QAAQ,EAAE,MAAM,SAAU;IAAG,CAAA;IACpF,WAAW;KACP,OAAO,EACH,aAAa,UAChB;KACD,OAAO,EACH,aAAa,YAChB;IACJ;GACJ;EACJ;CACJ;AAGL,QAAO;EACH,SAAS;EACT,MAAM;GACF,OAAO,OAAO;GACd,SAAS,OAAO;GAChB,aAAa,OAAO;EACvB;EACD,SAAS,OAAO;EAChB;EACA,YAAY,EACR,QACH;CACJ;AACJ"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/version.ts"],"sourcesContent":["export const VERSION = '0.1.0';\n"],"mappings":";;;;;;MAAa,UAAU"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { mapTypeToOpenAPI } from './mapTypeToOpenAPI';
|
|
2
|
-
export function generateSchemaFromModel(model) {
|
|
3
|
-
const properties = {};
|
|
4
|
-
const required = [];
|
|
5
|
-
for (const [name, meta] of Object.entries(model.fields)) {
|
|
6
|
-
properties[name] = {
|
|
7
|
-
type: mapTypeToOpenAPI(meta.type),
|
|
8
|
-
description: meta.description,
|
|
9
|
-
};
|
|
10
|
-
if (!meta.nullable && meta.default === undefined && !meta.primaryKey) {
|
|
11
|
-
required.push(name);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
return {
|
|
15
|
-
type: 'object',
|
|
16
|
-
properties,
|
|
17
|
-
required: required.length > 0 ? required : undefined,
|
|
18
|
-
};
|
|
19
|
-
}
|
package/dist/mappers-CIfnOwl2.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { __export, generateSchemaFromModel, mapTypeToOpenAPI, schema_exports } from "./schema-DVxdID48.js";
|
|
2
|
-
|
|
3
|
-
//#region src/mappers/index.ts
|
|
4
|
-
var mappers_exports = {};
|
|
5
|
-
__export(mappers_exports, {
|
|
6
|
-
generateSchemaFromModel: () => generateSchemaFromModel,
|
|
7
|
-
mapTypeToOpenAPI: () => mapTypeToOpenAPI,
|
|
8
|
-
schema: () => schema_exports
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
//#endregion
|
|
12
|
-
export { mappers_exports };
|
|
13
|
-
//# sourceMappingURL=mappers-CIfnOwl2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema-DVxdID48.js","names":["type: string","typeMap: Record<string, string>","model: OpenAPIModel","properties: Record<string, any>","required: string[]"],"sources":["../src/mappers/schema/mapTypeToOpenAPI.ts","../src/mappers/schema/generateSchemaFromModel.ts","../src/mappers/schema/index.ts"],"sourcesContent":["export function mapTypeToOpenAPI(type: string): string {\n const typeMap: Record<string, string> = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n date: 'string',\n serial: 'integer',\n int: 'integer',\n bigint: 'integer',\n text: 'string',\n bool: 'boolean',\n uuid: 'string',\n jsonb: 'object',\n timestamptz: 'string',\n };\n\n return typeMap[type] || 'string';\n}\n","import type { OpenAPIModel } from '../../domain';\nimport { mapTypeToOpenAPI } from './mapTypeToOpenAPI';\n\nexport function generateSchemaFromModel(model: OpenAPIModel): any {\n const properties: Record<string, any> = {};\n const required: string[] = [];\n\n for (const [name, meta] of Object.entries(model.fields)) {\n properties[name] = {\n type: mapTypeToOpenAPI(meta.type),\n description: meta.description,\n };\n\n if (!meta.nullable && meta.default === undefined && !meta.primaryKey) {\n required.push(name);\n }\n }\n\n return {\n type: 'object',\n properties,\n required: required.length > 0 ? required : undefined,\n };\n}\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { generateSchemaFromModel } from './generateSchemaFromModel';\nexport { mapTypeToOpenAPI } from './mapTypeToOpenAPI';\n"],"mappings":";;;;;;;;;;;;AAAO,SAAS,iBAAiBA,MAAsB;CACnD,MAAMC,UAAkC;EACpC,QAAQ;EACR,QAAQ;EACR,SAAS;EACT,MAAM;EACN,QAAQ;EACR,KAAK;EACL,QAAQ;EACR,MAAM;EACN,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;CAChB;AAED,QAAO,QAAQ,SAAS;AAC3B;;;;ACdM,SAAS,wBAAwBC,OAA0B;CAC9D,MAAMC,aAAkC,CAAE;CAC1C,MAAMC,WAAqB,CAAE;AAE7B,MAAK,MAAM,CAAC,MAAM,KAAK,IAAI,OAAO,QAAQ,MAAM,OAAO,EAAE;AACrD,aAAW,QAAQ;GACf,MAAM,iBAAiB,KAAK,KAAK;GACjC,aAAa,KAAK;EACrB;AAED,OAAK,KAAK,YAAY,KAAK,YAAY,cAAc,KAAK,WACtD,UAAS,KAAK,KAAK;CAE1B;AAED,QAAO;EACH,MAAM;EACN;EACA,UAAU,SAAS,SAAS,IAAI,WAAW;CAC9C;AACJ"}
|
package/dist/version.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.0";
|