@asyncapi/cli 3.2.0 → 3.4.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/assets/create-template/templates/default/package-lock.json +4 -3
- package/lib/apps/api/app.d.ts +15 -0
- package/lib/apps/api/app.js +89 -0
- package/lib/apps/api/configs/development.json +16 -0
- package/lib/apps/api/configs/production.json +16 -0
- package/lib/apps/api/configs/test.json +16 -0
- package/lib/apps/api/constants.d.ts +1 -0
- package/lib/apps/api/constants.js +4 -0
- package/lib/apps/api/controllers/bundle.controller.d.ts +7 -0
- package/lib/apps/api/controllers/bundle.controller.js +44 -0
- package/lib/apps/api/controllers/convert.controller.d.ts +11 -0
- package/lib/apps/api/controllers/convert.controller.js +69 -0
- package/lib/apps/api/controllers/diff.controller.d.ts +7 -0
- package/lib/apps/api/controllers/diff.controller.js +42 -0
- package/lib/apps/api/controllers/docs.controller.d.ts +6 -0
- package/lib/apps/api/controllers/docs.controller.js +24 -0
- package/lib/apps/api/controllers/generate.controller.d.ts +22 -0
- package/lib/apps/api/controllers/generate.controller.js +176 -0
- package/lib/apps/api/controllers/help.controller.d.ts +6 -0
- package/lib/apps/api/controllers/help.controller.js +101 -0
- package/lib/apps/api/controllers/parse.controller.d.ts +10 -0
- package/lib/apps/api/controllers/parse.controller.js +35 -0
- package/lib/apps/api/controllers/validate.controller.d.ts +10 -0
- package/lib/apps/api/controllers/validate.controller.js +50 -0
- package/lib/apps/api/exceptions/problem.exception.d.ts +14 -0
- package/lib/apps/api/exceptions/problem.exception.js +10 -0
- package/lib/apps/api/index.d.ts +9 -0
- package/lib/apps/api/index.js +21 -0
- package/lib/apps/api/middlewares/problem.middleware.d.ts +6 -0
- package/lib/apps/api/middlewares/problem.middleware.js +27 -0
- package/lib/apps/api/middlewares/validation.middleware.d.ts +12 -0
- package/lib/apps/api/middlewares/validation.middleware.js +236 -0
- package/lib/apps/api/server.d.ts +3 -0
- package/lib/apps/api/server.js +19 -0
- package/lib/{commands → apps/cli/commands}/bundle.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/bundle.js +3 -3
- package/lib/{commands → apps/cli/commands}/config/analytics.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/config/analytics.js +4 -3
- package/lib/{commands → apps/cli/commands}/config/context/add.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/config/context/add.js +12 -6
- package/lib/{commands → apps/cli/commands}/config/context/current.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/config/context/current.js +4 -4
- package/lib/{commands → apps/cli/commands}/config/context/edit.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/config/context/edit.js +12 -6
- package/lib/{commands → apps/cli/commands}/config/context/index.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/config/context/index.js +1 -1
- package/lib/{commands → apps/cli/commands}/config/context/init.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/config/context/init.js +7 -4
- package/lib/{commands → apps/cli/commands}/config/context/list.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/config/context/list.js +4 -4
- package/lib/{commands → apps/cli/commands}/config/context/remove.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/config/context/remove.js +8 -5
- package/lib/{commands → apps/cli/commands}/config/context/use.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/config/context/use.js +8 -5
- package/lib/{commands → apps/cli/commands}/config/index.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/config/index.js +1 -1
- package/lib/{commands → apps/cli/commands}/config/versions.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/config/versions.js +2 -2
- package/lib/{commands → apps/cli/commands}/convert.d.ts +2 -7
- package/lib/apps/cli/commands/convert.js +85 -0
- package/lib/{commands → apps/cli/commands}/diff.d.ts +11 -2
- package/lib/{commands → apps/cli/commands}/diff.js +85 -31
- package/lib/{commands → apps/cli/commands}/format.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/format.js +4 -4
- package/lib/{commands → apps/cli/commands}/generate/fromTemplate.d.ts +4 -5
- package/lib/{commands → apps/cli/commands}/generate/fromTemplate.js +89 -122
- package/lib/{commands → apps/cli/commands}/generate/index.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/generate/index.js +1 -1
- package/lib/{commands → apps/cli/commands}/generate/models.d.ts +6 -1
- package/lib/{commands → apps/cli/commands}/generate/models.js +48 -9
- package/lib/{commands → apps/cli/commands}/new/file.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/new/file.js +11 -8
- package/lib/{commands → apps/cli/commands}/new/glee.d.ts +2 -2
- package/lib/{commands → apps/cli/commands}/new/glee.js +4 -4
- package/lib/{commands → apps/cli/commands}/new/index.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/new/index.js +1 -1
- package/lib/{commands → apps/cli/commands}/new/template.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/new/template.js +10 -8
- package/lib/{commands → apps/cli/commands}/optimize.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/optimize.js +71 -30
- package/lib/{commands → apps/cli/commands}/pretty.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/pretty.js +8 -5
- package/lib/apps/cli/commands/start/api.d.ts +11 -0
- package/lib/apps/cli/commands/start/api.js +23 -0
- package/lib/{commands → apps/cli/commands}/start/index.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/start/index.js +1 -1
- package/lib/{commands → apps/cli/commands}/start/preview.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/start/preview.js +9 -6
- package/lib/{commands → apps/cli/commands}/start/studio.d.ts +1 -1
- package/lib/{commands → apps/cli/commands}/start/studio.js +10 -7
- package/lib/{commands → apps/cli/commands}/validate.d.ts +4 -2
- package/lib/apps/cli/commands/validate.js +94 -0
- package/lib/{core → apps/cli/internal}/base.d.ts +1 -1
- package/lib/{core → apps/cli/internal}/base.js +12 -4
- package/lib/apps/cli/internal/flags/bundle.flags.js +26 -0
- package/lib/apps/cli/internal/flags/config/analytics.flags.js +24 -0
- package/lib/{core → apps/cli/internal}/flags/config/context.flags.js +1 -1
- package/lib/{core → apps/cli/internal}/flags/convert.flags.js +9 -2
- package/lib/{core → apps/cli/internal}/flags/diff.flags.d.ts +1 -1
- package/lib/{core → apps/cli/internal}/flags/diff.flags.js +3 -3
- package/lib/{core → apps/cli/internal}/flags/generate/fromTemplate.flags.js +12 -12
- package/lib/{core → apps/cli/internal}/flags/generate/models.flags.js +2 -2
- package/lib/{core → apps/cli/internal}/flags/global.flags.js +1 -1
- package/lib/{core → apps/cli/internal}/flags/new/file.flags.js +7 -2
- package/lib/{core → apps/cli/internal}/flags/optimize.flags.js +24 -4
- package/lib/apps/cli/internal/flags/parser.flags.d.ts +10 -0
- package/lib/apps/cli/internal/flags/parser.flags.js +28 -0
- package/lib/{core → apps/cli/internal}/flags/proxy.flags.js +3 -3
- package/lib/apps/cli/internal/flags/start/api.flags.d.ts +5 -0
- package/lib/apps/cli/internal/flags/start/api.flags.js +20 -0
- package/lib/apps/cli/internal/flags/start/preview.flags.js +31 -0
- package/lib/{core → apps/cli/internal}/flags/start/studio.flags.js +9 -2
- package/lib/{core → apps/cli/internal}/flags/validate.flags.d.ts +1 -1
- package/lib/{core → apps/cli/internal}/flags/validate.flags.js +2 -2
- package/lib/{core → apps/cli/internal}/globals.d.ts +1 -1
- package/lib/{core → apps/cli/internal}/globals.js +2 -4
- package/lib/{core → apps/cli/internal}/hooks/command_not_found/myhook.js +14 -4
- package/lib/{core → domains}/models/Context.js +1 -1
- package/lib/{core → domains}/models/Preview.js +35 -19
- package/lib/{core → domains}/models/SpecificationFile.d.ts +2 -2
- package/lib/{core → domains}/models/SpecificationFile.js +8 -5
- package/lib/{core → domains}/models/Studio.js +4 -4
- package/lib/domains/services/archiver.service.d.ts +17 -0
- package/lib/domains/services/archiver.service.js +53 -0
- package/lib/domains/services/base.service.d.ts +6 -0
- package/lib/domains/services/base.service.js +26 -0
- package/lib/domains/services/convert.service.d.ts +12 -0
- package/lib/domains/services/convert.service.js +65 -0
- package/lib/domains/services/generator.service.d.ts +15 -0
- package/lib/domains/services/generator.service.js +95 -0
- package/lib/domains/services/validation.service.d.ts +54 -0
- package/lib/domains/services/validation.service.js +288 -0
- package/lib/{core/errors → errors}/specification-file.js +1 -1
- package/lib/{core/errors → errors}/validation-error.js +6 -5
- package/lib/interfaces/index.d.ts +87 -0
- package/lib/interfaces/index.js +7 -0
- package/lib/utils/ajv.d.ts +2 -0
- package/lib/utils/ajv.js +18 -0
- package/lib/utils/app-openapi.d.ts +4 -0
- package/lib/utils/app-openapi.js +28 -0
- package/lib/{core/utils/generator.js → utils/fileWatcher.js} +8 -2
- package/lib/utils/logger.d.ts +6 -0
- package/lib/utils/logger.js +33 -0
- package/lib/utils/retrieve-language.d.ts +1 -0
- package/lib/utils/retrieve-language.js +9 -0
- package/lib/utils/temp-dir.d.ts +2 -0
- package/lib/utils/temp-dir.js +25 -0
- package/oclif.manifest.json +109 -1
- package/package.json +37 -10
- package/scripts/releasePackagesRename.js +16 -8
- package/lib/commands/convert.js +0 -132
- package/lib/commands/validate.js +0 -47
- package/lib/core/flags/bundle.flags.js +0 -14
- package/lib/core/flags/config/analytics.flags.js +0 -13
- package/lib/core/flags/start/preview.flags.js +0 -15
- package/lib/core/parser.d.ts +0 -35
- package/lib/core/parser.js +0 -230
- /package/lib/{core → apps/cli/internal}/flags/bundle.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/config/analytics.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/config/context.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/convert.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/format.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/format.flags.js +0 -0
- /package/lib/{core → apps/cli/internal}/flags/generate/fromTemplate.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/generate/models.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/global.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/new/file.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/new/glee.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/new/glee.flags.js +0 -0
- /package/lib/{core → apps/cli/internal}/flags/new/template.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/new/template.flags.js +0 -0
- /package/lib/{core → apps/cli/internal}/flags/optimize.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/pretty.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/pretty.flags.js +0 -0
- /package/lib/{core → apps/cli/internal}/flags/proxy.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/start/preview.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/flags/start/studio.flags.d.ts +0 -0
- /package/lib/{core → apps/cli/internal}/hooks/command_not_found/myhook.d.ts +0 -0
- /package/lib/{core → domains}/models/Context.d.ts +0 -0
- /package/lib/{core → domains}/models/Preview.d.ts +0 -0
- /package/lib/{core → domains}/models/Studio.d.ts +0 -0
- /package/lib/{core/errors → errors}/context-error.d.ts +0 -0
- /package/lib/{core/errors → errors}/context-error.js +0 -0
- /package/lib/{core/errors → errors}/diff-error.d.ts +0 -0
- /package/lib/{core/errors → errors}/diff-error.js +0 -0
- /package/lib/{core/errors → errors}/generator-error.d.ts +0 -0
- /package/lib/{core/errors → errors}/generator-error.js +0 -0
- /package/lib/{core/errors → errors}/specification-file.d.ts +0 -0
- /package/lib/{core/errors → errors}/validation-error.d.ts +0 -0
- /package/lib/{core/utils/generator.d.ts → utils/fileWatcher.d.ts} +0 -0
- /package/lib/{core/utils → utils}/scoreCalculator.d.ts +0 -0
- /package/lib/{core/utils → utils}/scoreCalculator.js +0 -0
|
@@ -2416,9 +2416,10 @@
|
|
|
2416
2416
|
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
|
|
2417
2417
|
},
|
|
2418
2418
|
"node_modules/brace-expansion": {
|
|
2419
|
-
"version": "1.1.
|
|
2420
|
-
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.
|
|
2421
|
-
"integrity": "sha512-
|
|
2419
|
+
"version": "1.1.12",
|
|
2420
|
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
|
2421
|
+
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
|
2422
|
+
"license": "MIT",
|
|
2422
2423
|
"dependencies": {
|
|
2423
2424
|
"balanced-match": "^1.0.0",
|
|
2424
2425
|
"concat-map": "0.0.1"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import { Controller } from '../../interfaces';
|
|
3
|
+
export declare class App {
|
|
4
|
+
private readonly controllers;
|
|
5
|
+
private readonly port;
|
|
6
|
+
private readonly env;
|
|
7
|
+
private app;
|
|
8
|
+
constructor(controllers: Controller[], port?: number | string, env?: string);
|
|
9
|
+
init(): Promise<void>;
|
|
10
|
+
listen(): void;
|
|
11
|
+
getServer(): express.Application;
|
|
12
|
+
private initializeMiddlewares;
|
|
13
|
+
private initializeControllers;
|
|
14
|
+
private initializeErrorHandling;
|
|
15
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.App = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const body_parser_1 = tslib_1.__importDefault(require("body-parser"));
|
|
6
|
+
const compression_1 = tslib_1.__importDefault(require("compression"));
|
|
7
|
+
const config_1 = tslib_1.__importDefault(require("config"));
|
|
8
|
+
const cors_1 = tslib_1.__importDefault(require("cors"));
|
|
9
|
+
const express_1 = tslib_1.__importDefault(require("express"));
|
|
10
|
+
const helmet_1 = tslib_1.__importDefault(require("helmet"));
|
|
11
|
+
// import { problemMiddleware } from './middlewares/problem.middleware';
|
|
12
|
+
const logger_1 = require("../../utils/logger");
|
|
13
|
+
const constants_1 = require("./constants");
|
|
14
|
+
const problem_middleware_1 = require("./middlewares/problem.middleware");
|
|
15
|
+
class App {
|
|
16
|
+
constructor(controllers, port = process.env.PORT || 80, env = process.env.NODE_ENV || 'development') {
|
|
17
|
+
this.controllers = controllers;
|
|
18
|
+
this.port = port;
|
|
19
|
+
this.env = env;
|
|
20
|
+
this.app = (0, express_1.default)();
|
|
21
|
+
}
|
|
22
|
+
init() {
|
|
23
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
// initialize core middlewares
|
|
25
|
+
yield this.initializeMiddlewares();
|
|
26
|
+
// initialize controllers
|
|
27
|
+
yield this.initializeControllers();
|
|
28
|
+
// initialize error handling
|
|
29
|
+
yield this.initializeErrorHandling();
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
listen() {
|
|
33
|
+
this.app.listen(this.port, () => {
|
|
34
|
+
logger_1.logger.info('=================================');
|
|
35
|
+
logger_1.logger.info(`= ENV: ${this.env}`);
|
|
36
|
+
logger_1.logger.info(`= 🚀 AsyncAPI Server API listening on the port ${this.port}`);
|
|
37
|
+
logger_1.logger.info('=================================');
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
getServer() {
|
|
41
|
+
return this.app;
|
|
42
|
+
}
|
|
43
|
+
initializeMiddlewares() {
|
|
44
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
45
|
+
const requestBodyLimit = config_1.default.get('request.body.limit');
|
|
46
|
+
this.app.use((0, cors_1.default)({
|
|
47
|
+
origin: config_1.default.get('cors.origin'),
|
|
48
|
+
credentials: config_1.default.get('cors.credentials'),
|
|
49
|
+
}));
|
|
50
|
+
this.app.use((0, compression_1.default)());
|
|
51
|
+
this.app.use(body_parser_1.default.text({ type: ['text/*'], limit: requestBodyLimit }));
|
|
52
|
+
this.app.use(body_parser_1.default.urlencoded({ extended: true, limit: requestBodyLimit }));
|
|
53
|
+
this.app.use(body_parser_1.default.json({
|
|
54
|
+
type: ['json', '*/json', '+json'],
|
|
55
|
+
limit: requestBodyLimit,
|
|
56
|
+
}));
|
|
57
|
+
this.app.use((0, helmet_1.default)({
|
|
58
|
+
contentSecurityPolicy: {
|
|
59
|
+
directives: {
|
|
60
|
+
// for `/docs` path - we need to fetch redoc component from unpkg.com domain and hash for inline script
|
|
61
|
+
'script-src': [
|
|
62
|
+
'\'self\'',
|
|
63
|
+
'unpkg.com',
|
|
64
|
+
'\'sha256-HoDNcNPq7PEOgc6zsff39t5lZ/S65RY7Zl4hI67unp0=\'',
|
|
65
|
+
],
|
|
66
|
+
// for schemas
|
|
67
|
+
'connect-src': ['\'self\'', 'http:'],
|
|
68
|
+
'worker-src': ['\'self\' blob:'],
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
// for `/docs` path
|
|
72
|
+
crossOriginEmbedderPolicy: false,
|
|
73
|
+
}));
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
initializeControllers() {
|
|
77
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
78
|
+
for (const controller of this.controllers) {
|
|
79
|
+
this.app.use(`/${constants_1.API_VERSION}/`, yield controller.boot());
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
initializeErrorHandling() {
|
|
84
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
85
|
+
this.app.use(problem_middleware_1.problemMiddleware);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.App = App;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const API_VERSION = "v1";
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BundleController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const express_1 = require("express");
|
|
6
|
+
const bundler_1 = tslib_1.__importDefault(require("@asyncapi/bundler"));
|
|
7
|
+
const validation_middleware_1 = require("../middlewares/validation.middleware");
|
|
8
|
+
const problem_exception_1 = require("../exceptions/problem.exception");
|
|
9
|
+
class BundleController {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.basepath = '/bundle';
|
|
12
|
+
}
|
|
13
|
+
bundle(req, res, next) {
|
|
14
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
15
|
+
const asyncapis = req.body.asyncapis;
|
|
16
|
+
const base = req.body.base;
|
|
17
|
+
try {
|
|
18
|
+
const document = yield (0, bundler_1.default)(asyncapis, { base });
|
|
19
|
+
const bundled = document.json();
|
|
20
|
+
res.status(200).json({ bundled });
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
return next(new problem_exception_1.ProblemException({
|
|
24
|
+
type: 'internal-bundler-error',
|
|
25
|
+
title: 'Internal Bundler error',
|
|
26
|
+
status: 500,
|
|
27
|
+
detail: err.message,
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
boot() {
|
|
33
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
const router = (0, express_1.Router)();
|
|
35
|
+
router.post(this.basepath, yield (0, validation_middleware_1.validationMiddleware)({
|
|
36
|
+
path: this.basepath,
|
|
37
|
+
method: 'post',
|
|
38
|
+
documents: ['asyncapis', 'base'],
|
|
39
|
+
}), this.bundle.bind(this));
|
|
40
|
+
return router;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.BundleController = BundleController;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { Controller } from '../../../interfaces';
|
|
3
|
+
/**
|
|
4
|
+
* Controller which exposes the Convert functionality
|
|
5
|
+
*/
|
|
6
|
+
export declare class ConvertController implements Controller {
|
|
7
|
+
basepath: string;
|
|
8
|
+
private conversionService;
|
|
9
|
+
private convert;
|
|
10
|
+
boot(): Promise<Router>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConvertController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const express_1 = require("express");
|
|
6
|
+
const validation_middleware_1 = require("../middlewares/validation.middleware");
|
|
7
|
+
const convert_service_1 = require("../../../domains/services/convert.service");
|
|
8
|
+
const problem_exception_1 = require("../exceptions/problem.exception");
|
|
9
|
+
const SpecificationFile_1 = require("../../../domains/models/SpecificationFile");
|
|
10
|
+
/**
|
|
11
|
+
* Controller which exposes the Convert functionality
|
|
12
|
+
*/
|
|
13
|
+
class ConvertController {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.basepath = '/convert';
|
|
16
|
+
this.conversionService = new convert_service_1.ConversionService();
|
|
17
|
+
}
|
|
18
|
+
convert(req, res, next) {
|
|
19
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
var _a, _b;
|
|
21
|
+
try {
|
|
22
|
+
const options = req.body;
|
|
23
|
+
const specFile = new SpecificationFile_1.Specification(typeof options.source === 'string'
|
|
24
|
+
? options.source
|
|
25
|
+
: JSON.stringify(options.source));
|
|
26
|
+
const result = yield this.conversionService.convertDocument(specFile, options);
|
|
27
|
+
if (!result.success) {
|
|
28
|
+
return next(new problem_exception_1.ProblemException({
|
|
29
|
+
type: 'conversion-error',
|
|
30
|
+
title: 'Conversion failed',
|
|
31
|
+
status: 400,
|
|
32
|
+
detail: result.error,
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
res.status(200).json({
|
|
36
|
+
converted: (_a = result.data) === null || _a === void 0 ? void 0 : _a.convertedDocument,
|
|
37
|
+
sourceFormat: (_b = result.data) === null || _b === void 0 ? void 0 : _b.originalFormat,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
if (err instanceof problem_exception_1.ProblemException) {
|
|
42
|
+
return next(err);
|
|
43
|
+
}
|
|
44
|
+
return next(new problem_exception_1.ProblemException({
|
|
45
|
+
type: 'internal-server-error',
|
|
46
|
+
title: 'Internal server error',
|
|
47
|
+
status: 500,
|
|
48
|
+
detail: err.message,
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
boot() {
|
|
54
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
55
|
+
const router = (0, express_1.Router)();
|
|
56
|
+
router.post(this.basepath, yield (0, validation_middleware_1.validationMiddleware)({
|
|
57
|
+
path: this.basepath,
|
|
58
|
+
method: 'post',
|
|
59
|
+
documents: ['source'],
|
|
60
|
+
condition: (req) => {
|
|
61
|
+
const body = req.body;
|
|
62
|
+
return body.format === 'asyncapi';
|
|
63
|
+
},
|
|
64
|
+
}), this.convert.bind(this));
|
|
65
|
+
return router;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.ConvertController = ConvertController;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DiffController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const express_1 = require("express");
|
|
6
|
+
const diff_1 = require("@asyncapi/diff");
|
|
7
|
+
const validation_middleware_1 = require("../middlewares/validation.middleware");
|
|
8
|
+
const problem_exception_1 = require("../exceptions/problem.exception");
|
|
9
|
+
class DiffController {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.basepath = '/diff';
|
|
12
|
+
}
|
|
13
|
+
diff(req, res, next) {
|
|
14
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
15
|
+
const { asyncapis } = req.body;
|
|
16
|
+
try {
|
|
17
|
+
const output = (0, diff_1.diff)(asyncapis[0], asyncapis[1]).getOutput();
|
|
18
|
+
res.status(200).json({ diff: output });
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
return next(new problem_exception_1.ProblemException({
|
|
22
|
+
type: 'internal-diff-error',
|
|
23
|
+
title: 'Internal Diff error',
|
|
24
|
+
status: 500,
|
|
25
|
+
detail: err.message,
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
boot() {
|
|
31
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
const router = (0, express_1.Router)();
|
|
33
|
+
router.post(this.basepath, yield (0, validation_middleware_1.validationMiddleware)({
|
|
34
|
+
path: this.basepath,
|
|
35
|
+
method: 'post',
|
|
36
|
+
documents: ['asyncapis'],
|
|
37
|
+
}), this.diff.bind(this));
|
|
38
|
+
return router;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.DiffController = DiffController;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DocsController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const express_1 = require("express");
|
|
6
|
+
const redoc_express_1 = tslib_1.__importDefault(require("redoc-express"));
|
|
7
|
+
const constants_1 = require("../constants");
|
|
8
|
+
class DocsController {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.basepath = '/docs';
|
|
11
|
+
}
|
|
12
|
+
boot() {
|
|
13
|
+
const router = (0, express_1.Router)();
|
|
14
|
+
router.get(`${this.basepath}/openapi.yaml`, (_, res) => {
|
|
15
|
+
res.sendFile('openapi.yaml', { root: '.' });
|
|
16
|
+
});
|
|
17
|
+
router.get(this.basepath, (0, redoc_express_1.default)({
|
|
18
|
+
title: 'OpenAPI Documentation',
|
|
19
|
+
specUrl: `/${constants_1.API_VERSION}${this.basepath}/openapi.yaml`,
|
|
20
|
+
}));
|
|
21
|
+
return router;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.DocsController = DocsController;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { Controller } from '../../../interfaces';
|
|
3
|
+
/**
|
|
4
|
+
* Controller which exposes the Generator functionality
|
|
5
|
+
*/
|
|
6
|
+
export declare class GenerateController implements Controller {
|
|
7
|
+
basepath: string;
|
|
8
|
+
private archiverService;
|
|
9
|
+
private generatorService;
|
|
10
|
+
private ajv;
|
|
11
|
+
private generate;
|
|
12
|
+
private validateTemplateParameters;
|
|
13
|
+
/**
|
|
14
|
+
* Retrieve proper AJV's validator function, create or reuse it.
|
|
15
|
+
*/
|
|
16
|
+
getAjvValidator(templateName: string): Promise<import("ajv/dist/types").AnyValidateFunction<unknown> | undefined>;
|
|
17
|
+
/**
|
|
18
|
+
* Serialize template parameters. Read all parameters from template's package.json and create a proper JSON Schema for validating parameters.
|
|
19
|
+
*/
|
|
20
|
+
serializeTemplateParameters(templateName: string): Promise<object | undefined>;
|
|
21
|
+
boot(): Promise<Router>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GenerateController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
6
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
7
|
+
const express_1 = require("express");
|
|
8
|
+
const ajv_1 = tslib_1.__importDefault(require("ajv"));
|
|
9
|
+
const validation_middleware_1 = require("../middlewares/validation.middleware");
|
|
10
|
+
const archiver_service_1 = require("../../../domains/services/archiver.service");
|
|
11
|
+
const generator_service_1 = require("../../../domains/services/generator.service");
|
|
12
|
+
const problem_exception_1 = require("../exceptions/problem.exception");
|
|
13
|
+
const SpecificationFile_1 = require("../../../domains/models/SpecificationFile");
|
|
14
|
+
/**
|
|
15
|
+
* Controller which exposes the Generator functionality
|
|
16
|
+
*/
|
|
17
|
+
class GenerateController {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.basepath = '/generate';
|
|
20
|
+
this.archiverService = new archiver_service_1.ArchiverService();
|
|
21
|
+
this.generatorService = new generator_service_1.GeneratorService();
|
|
22
|
+
}
|
|
23
|
+
generate(req, res, next) {
|
|
24
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
// try {
|
|
26
|
+
// await this.validateTemplateParameters(req);
|
|
27
|
+
// } catch (err) {
|
|
28
|
+
// return next(err);
|
|
29
|
+
// }
|
|
30
|
+
const zip = this.archiverService.createZip(res);
|
|
31
|
+
let tmpDir;
|
|
32
|
+
try {
|
|
33
|
+
tmpDir = yield this.archiverService.createTempDirectory();
|
|
34
|
+
const { asyncapi, template, parameters } = req.body;
|
|
35
|
+
const options = {
|
|
36
|
+
forceWrite: true,
|
|
37
|
+
templateParams: parameters,
|
|
38
|
+
};
|
|
39
|
+
const generateFunc = req.body['use-fallback-generator']
|
|
40
|
+
? this.generatorService.generate.bind(this.generatorService)
|
|
41
|
+
: this.generatorService.generateUsingNewGenerator.bind(this.generatorService);
|
|
42
|
+
try {
|
|
43
|
+
const result = yield generateFunc(new SpecificationFile_1.Specification(typeof asyncapi === 'object' ? JSON.stringify(asyncapi) : asyncapi), template, tmpDir, options, {}, true);
|
|
44
|
+
if (!result.success) {
|
|
45
|
+
return next(new problem_exception_1.ProblemException({
|
|
46
|
+
type: 'generation-error',
|
|
47
|
+
title: 'Generation Error',
|
|
48
|
+
status: 500,
|
|
49
|
+
detail: result.error || 'An error occurred during generation.',
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (genErr) {
|
|
54
|
+
return next(new problem_exception_1.ProblemException({
|
|
55
|
+
type: 'internal-generator-error',
|
|
56
|
+
title: 'Internal Generator error',
|
|
57
|
+
status: 500,
|
|
58
|
+
detail: genErr.message,
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
this.archiverService.appendDirectory(zip, tmpDir, 'template');
|
|
62
|
+
this.archiverService.appendAsyncAPIDocument(zip, asyncapi);
|
|
63
|
+
res.status(200);
|
|
64
|
+
return yield this.archiverService.finalize(zip);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
return next(new problem_exception_1.ProblemException({
|
|
68
|
+
type: 'internal-server-error',
|
|
69
|
+
title: 'Internal server error',
|
|
70
|
+
status: 500,
|
|
71
|
+
detail: err.message,
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
if (tmpDir) {
|
|
76
|
+
// Remove the temporary directory after the response is sent
|
|
77
|
+
// to avoid leaving temporary files on the server.
|
|
78
|
+
yield this.archiverService.removeTempDirectory(tmpDir);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
validateTemplateParameters(req) {
|
|
84
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
85
|
+
const { template, parameters } = req.body;
|
|
86
|
+
const validate = yield this.getAjvValidator(template);
|
|
87
|
+
if (!validate) {
|
|
88
|
+
throw new problem_exception_1.ProblemException({
|
|
89
|
+
type: 'invalid-template',
|
|
90
|
+
title: 'Invalid Generator Template',
|
|
91
|
+
status: 422,
|
|
92
|
+
detail: `Template ${template} is not valid or does not exist.`,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
const valid = validate(parameters || {});
|
|
96
|
+
const errors = validate.errors && [...validate.errors];
|
|
97
|
+
if (valid === false) {
|
|
98
|
+
throw new problem_exception_1.ProblemException({
|
|
99
|
+
type: 'invalid-template-parameters',
|
|
100
|
+
title: 'Invalid Generator Template parameters',
|
|
101
|
+
status: 422,
|
|
102
|
+
validationErrors: errors,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Retrieve proper AJV's validator function, create or reuse it.
|
|
109
|
+
*/
|
|
110
|
+
getAjvValidator(templateName) {
|
|
111
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
112
|
+
if (!this.ajv) {
|
|
113
|
+
throw new Error('AJV instance is not initialized');
|
|
114
|
+
}
|
|
115
|
+
let validate = this.ajv.getSchema(templateName);
|
|
116
|
+
if (!validate) {
|
|
117
|
+
this.ajv.addSchema((yield this.serializeTemplateParameters(templateName)) || {}, templateName);
|
|
118
|
+
validate = this.ajv.getSchema(templateName);
|
|
119
|
+
}
|
|
120
|
+
return validate;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Serialize template parameters. Read all parameters from template's package.json and create a proper JSON Schema for validating parameters.
|
|
125
|
+
*/
|
|
126
|
+
serializeTemplateParameters(templateName) {
|
|
127
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
128
|
+
const pathToPackageJSON = path_1.default.join(__dirname, `../../../../node_modules/${templateName}/package.json`);
|
|
129
|
+
const packageJSONContent = yield fs_1.default.promises.readFile(pathToPackageJSON, 'utf-8');
|
|
130
|
+
const packageJSON = JSON.parse(packageJSONContent);
|
|
131
|
+
if (!packageJSON) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const generator = packageJSON.generator;
|
|
135
|
+
if (!generator || !generator.parameters) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const parameters = generator.parameters || {};
|
|
139
|
+
const required = [];
|
|
140
|
+
for (const parameter in parameters) {
|
|
141
|
+
// at the moment all parameters have to be passed to the Generator instance as string
|
|
142
|
+
parameters[String(parameter)].type = 'string';
|
|
143
|
+
if (parameters[String(parameter)].required) {
|
|
144
|
+
required.push(parameter);
|
|
145
|
+
}
|
|
146
|
+
delete parameters[String(parameter)].required;
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
150
|
+
type: 'object',
|
|
151
|
+
properties: parameters,
|
|
152
|
+
required,
|
|
153
|
+
// don't allow non supported properties
|
|
154
|
+
additionalProperties: false,
|
|
155
|
+
};
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
boot() {
|
|
159
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
160
|
+
this.ajv = new ajv_1.default({
|
|
161
|
+
inlineRefs: true,
|
|
162
|
+
allErrors: true,
|
|
163
|
+
schemaId: 'id',
|
|
164
|
+
logger: false,
|
|
165
|
+
});
|
|
166
|
+
const router = (0, express_1.Router)();
|
|
167
|
+
router.post(`${this.basepath}`, yield (0, validation_middleware_1.validationMiddleware)({
|
|
168
|
+
path: this.basepath,
|
|
169
|
+
method: 'post',
|
|
170
|
+
documents: ['asyncapi'],
|
|
171
|
+
}), this.generate.bind(this));
|
|
172
|
+
return router;
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.GenerateController = GenerateController;
|