@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.
Files changed (37) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +145 -0
  3. package/dist/chunk-BkvOhyD0.js +12 -0
  4. package/dist/domain/describeResources.d.ts +10 -0
  5. package/dist/domain/index.d.ts +2 -1
  6. package/dist/domain/index.js +3 -4
  7. package/dist/domain/types.d.ts +76 -12
  8. package/dist/domain-B-7sApJT.js +34 -0
  9. package/dist/domain-B-7sApJT.js.map +1 -0
  10. package/dist/generators/index.js +2 -2
  11. package/dist/generators/spec/generateOpenAPISpec.d.ts +3 -0
  12. package/dist/generators-JMALItMS.js +346 -0
  13. package/dist/generators-JMALItMS.js.map +1 -0
  14. package/dist/index.d.ts +3 -3
  15. package/dist/index.js +5 -10
  16. package/dist/mappers/index.d.ts +1 -1
  17. package/dist/mappers/index.js +3 -3
  18. package/dist/mappers/schema/generateSchemaFromModel.d.ts +3 -0
  19. package/dist/mappers/schema/generateSchemaFromZod.d.ts +6 -0
  20. package/dist/mappers/schema/index.d.ts +1 -0
  21. package/dist/mappers/schema/mapTypeToOpenAPI.d.ts +3 -0
  22. package/dist/mappers-bmN95TGV.js +15 -0
  23. package/dist/{mappers-CIfnOwl2.js.map → mappers-bmN95TGV.js.map} +1 -1
  24. package/dist/{schema-DVxdID48.js → schema-D3ybOrpr.js} +19 -12
  25. package/dist/schema-D3ybOrpr.js.map +1 -0
  26. package/package.json +57 -53
  27. package/dist/domain/types.js +0 -1
  28. package/dist/domain-Cufz6y1q.js +0 -7
  29. package/dist/domain-Cufz6y1q.js.map +0 -1
  30. package/dist/generators/spec/generateOpenAPISpec.js +0 -133
  31. package/dist/generators-Bvwyyja4.js +0 -131
  32. package/dist/generators-Bvwyyja4.js.map +0 -1
  33. package/dist/index.js.map +0 -1
  34. package/dist/mappers/schema/generateSchemaFromModel.js +0 -19
  35. package/dist/mappers-CIfnOwl2.js +0 -13
  36. package/dist/schema-DVxdID48.js.map +0 -1
  37. package/dist/version.d.ts +0 -1
package/package.json CHANGED
@@ -1,58 +1,62 @@
1
1
  {
2
- "name": "@danceroutine/tango-openapi",
3
- "version": "0.1.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"
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
- "files": [
27
- "dist"
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
- "keywords": [
36
- "tango",
37
- "openapi",
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
- "dependencies": {
49
- "@danceroutine/tango-resources": "workspace:*",
50
- "zod": "^4.0.0"
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
+ }
@@ -1 +0,0 @@
1
- export {};
@@ -1,7 +0,0 @@
1
-
2
- //#region src/domain/index.ts
3
- var domain_exports = {};
4
-
5
- //#endregion
6
- export { domain_exports };
7
- //# sourceMappingURL=domain-Cufz6y1q.js.map
@@ -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
- }
@@ -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";