@apimatic/cli 1.1.0-alpha.5 → 1.1.0-alpha.7
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/README.md +115 -37
- package/bin/run +5 -1
- package/lib/client-utils/auth-manager.js +3 -3
- package/lib/client-utils/sdk-client.js +1 -0
- package/lib/commands/api/transform.d.ts +7 -7
- package/lib/commands/api/transform.js +18 -15
- package/lib/commands/api/validate.d.ts +4 -4
- package/lib/commands/api/validate.js +13 -10
- package/lib/commands/auth/login.d.ts +2 -2
- package/lib/commands/auth/login.js +29 -12
- package/lib/commands/auth/logout.d.ts +1 -1
- package/lib/commands/auth/logout.js +3 -2
- package/lib/commands/auth/status.d.ts +1 -1
- package/lib/commands/auth/status.js +3 -2
- package/lib/commands/portal/generate.d.ts +6 -6
- package/lib/commands/portal/generate.js +16 -11
- package/lib/commands/portal/quickstart.d.ts +10 -0
- package/lib/commands/portal/quickstart.js +83 -0
- package/lib/commands/portal/serve.d.ts +17 -0
- package/lib/commands/portal/serve.js +143 -0
- package/lib/commands/sdk/generate.d.ts +8 -8
- package/lib/commands/sdk/generate.js +16 -13
- package/lib/config/axios-config.d.ts +2 -0
- package/lib/config/axios-config.js +12 -0
- package/lib/config/env.d.ts +26 -0
- package/lib/config/env.js +28 -1
- package/lib/controllers/api/transform.js +6 -5
- package/lib/controllers/api/validate.d.ts +1 -1
- package/lib/controllers/api/validate.js +25 -8
- package/lib/controllers/portal/generate.d.ts +2 -1
- package/lib/controllers/portal/generate.js +19 -11
- package/lib/controllers/portal/quickstart.d.ts +14 -0
- package/lib/controllers/portal/quickstart.js +206 -0
- package/lib/controllers/portal/serve.d.ts +4 -0
- package/lib/controllers/portal/serve.js +152 -0
- package/lib/controllers/sdk/generate.js +7 -6
- package/lib/index.d.ts +1 -1
- package/lib/index.js +3 -3
- package/lib/prompts/portal/quickstart.d.ts +32 -0
- package/lib/prompts/portal/quickstart.js +216 -0
- package/lib/prompts/portal/serve.d.ts +7 -0
- package/lib/prompts/portal/serve.js +25 -0
- package/lib/services/portal/server.d.ts +11 -0
- package/lib/services/portal/server.js +71 -0
- package/lib/types/api/transform.d.ts +0 -1
- package/lib/types/api/transform.js +1 -0
- package/lib/types/api/validate.js +1 -0
- package/lib/types/portal/generate.js +1 -0
- package/lib/types/portal/quickstart.d.ts +17 -0
- package/lib/types/portal/quickstart.js +3 -0
- package/lib/types/sdk/generate.js +1 -0
- package/lib/types/utils.js +1 -0
- package/lib/utils/utils.d.ts +28 -4
- package/lib/utils/utils.js +289 -53
- package/lib/validators/common/directoryValidator.d.ts +9 -0
- package/lib/validators/common/directoryValidator.js +53 -0
- package/lib/validators/common/portValidator.d.ts +5 -0
- package/lib/validators/common/portValidator.js +20 -0
- package/lib/validators/portal/serveValidator.d.ts +6 -0
- package/lib/validators/portal/serveValidator.js +21 -0
- package/package.json +60 -24
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
4
|
-
const
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const prompts_1 = require("@clack/prompts");
|
|
5
5
|
const utils_1 = require("../../utils/utils");
|
|
6
6
|
const sdk_client_1 = require("../../client-utils/sdk-client");
|
|
7
|
-
class Login extends
|
|
7
|
+
class Login extends core_1.Command {
|
|
8
8
|
async run() {
|
|
9
|
-
const { flags } = this.parse(Login);
|
|
9
|
+
const { flags } = await this.parse(Login);
|
|
10
10
|
const configDir = this.config.configDir;
|
|
11
11
|
try {
|
|
12
12
|
const client = sdk_client_1.SDKClient.getInstance();
|
|
@@ -17,12 +17,28 @@ class Login extends command_1.Command {
|
|
|
17
17
|
}
|
|
18
18
|
else {
|
|
19
19
|
// If user logs in with email and password
|
|
20
|
-
const email = await
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
const email = await (0, prompts_1.text)({
|
|
21
|
+
message: "Enter your registered email:",
|
|
22
|
+
validate: (input) => {
|
|
23
|
+
if (!input) {
|
|
24
|
+
return (0, utils_1.getMessageInRedColor)("Email is required.");
|
|
25
|
+
}
|
|
26
|
+
const emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
|
|
27
|
+
if (!emailRegex.test(input)) {
|
|
28
|
+
return (0, utils_1.getMessageInRedColor)("Please enter a valid email address.");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
const pass = await (0, prompts_1.password)({
|
|
33
|
+
message: "Please enter your password:",
|
|
34
|
+
validate: (input) => {
|
|
35
|
+
if (!input) {
|
|
36
|
+
return (0, utils_1.getMessageInRedColor)("Password is required.");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
23
39
|
});
|
|
24
|
-
const response = await client.login(email,
|
|
25
|
-
|
|
40
|
+
const response = await client.login(email, pass, configDir);
|
|
41
|
+
(0, prompts_1.outro)(response);
|
|
26
42
|
}
|
|
27
43
|
}
|
|
28
44
|
catch (error) {
|
|
@@ -32,7 +48,7 @@ class Login extends command_1.Command {
|
|
|
32
48
|
if (apiResponse) {
|
|
33
49
|
const responseData = apiResponse.data;
|
|
34
50
|
if (apiResponse.status === 403 && responseData) {
|
|
35
|
-
return this.error((0, utils_1.replaceHTML)(responseData));
|
|
51
|
+
return this.error((0, utils_1.replaceHTML)(JSON.stringify(responseData)));
|
|
36
52
|
}
|
|
37
53
|
else {
|
|
38
54
|
return this.error(apiError.message);
|
|
@@ -46,7 +62,7 @@ class Login extends command_1.Command {
|
|
|
46
62
|
Login.description = "Login using your APIMatic credentials or an API Key";
|
|
47
63
|
Login.examples = [
|
|
48
64
|
`$ apimatic auth:login
|
|
49
|
-
|
|
65
|
+
Enter your registered email: apimatic-user@gmail.com
|
|
50
66
|
Please enter your password: *********
|
|
51
67
|
|
|
52
68
|
You have successfully logged into APIMatic
|
|
@@ -55,6 +71,7 @@ You have successfully logged into APIMatic
|
|
|
55
71
|
Authentication key successfully set`
|
|
56
72
|
];
|
|
57
73
|
Login.flags = {
|
|
58
|
-
"auth-key":
|
|
74
|
+
"auth-key": core_1.Flags.string({ default: "", description: "Set authentication key for all commands" })
|
|
59
75
|
};
|
|
60
76
|
exports.default = Login;
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvYXV0aC9sb2dpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHNDQUE2QztBQUM3Qyw0Q0FBdUQ7QUFDdkQsNkNBQXNFO0FBQ3RFLDhEQUEwRDtBQUUxRCxNQUFxQixLQUFNLFNBQVEsY0FBTztJQWtCeEMsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2hELElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFjLHNCQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFbEQsOEJBQThCO1lBQzlCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNqRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLDBDQUEwQztnQkFDMUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFBLGNBQUksRUFBQztvQkFDdkIsT0FBTyxFQUFFLDhCQUE4QjtvQkFDdkMsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFDWCxPQUFPLElBQUEsNEJBQW9CLEVBQUMsb0JBQW9CLENBQUMsQ0FBQzt3QkFDcEQsQ0FBQzt3QkFFRCxNQUFNLFVBQVUsR0FDZCxzSUFBc0ksQ0FBQzt3QkFFekksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzs0QkFDNUIsT0FBTyxJQUFBLDRCQUFvQixFQUFDLHFDQUFxQyxDQUFDLENBQUM7d0JBQ3JFLENBQUM7b0JBQ0gsQ0FBQztpQkFDRixDQUFDLENBQUM7Z0JBRUgsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLGtCQUFRLEVBQUM7b0JBQzFCLE9BQU8sRUFBRSw2QkFBNkI7b0JBQ3RDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUNsQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQ1gsT0FBTyxJQUFBLDRCQUFvQixFQUFDLHVCQUF1QixDQUFDLENBQUM7d0JBQ3ZELENBQUM7b0JBQ0gsQ0FBQztpQkFDRixDQUFDLENBQUM7Z0JBRUgsTUFBTSxRQUFRLEdBQVcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQWUsRUFBRSxJQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBRXhGLElBQUEsZUFBSyxFQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksS0FBSyxJQUFLLEtBQW9CLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzVDLE1BQU0sUUFBUSxHQUFHLEtBQW1CLENBQUM7Z0JBQ3JDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBRXRDLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2hCLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7b0JBRXRDLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7d0JBQy9DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFBLG1CQUFXLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9ELENBQUM7eUJBQU0sQ0FBQzt3QkFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN0QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBRSxLQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7O0FBM0VNLGlCQUFXLEdBQUcscURBQXFELENBQUM7QUFFcEUsY0FBUSxHQUFHO0lBQ2hCOzs7OztDQUtIO0lBQ0c7b0NBQ2dDO0NBQ2pDLENBQUM7QUFFSyxXQUFLLEdBQUc7SUFDYixVQUFVLEVBQUUsWUFBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLHlDQUF5QyxFQUFFLENBQUM7Q0FDbEcsQ0FBQztrQkFoQmlCLEtBQUsifQ==
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
4
|
const sdk_client_1 = require("../../client-utils/sdk-client");
|
|
5
|
-
class Login extends
|
|
5
|
+
class Login extends core_1.Command {
|
|
6
6
|
async run() {
|
|
7
7
|
try {
|
|
8
8
|
const client = sdk_client_1.SDKClient.getInstance();
|
|
@@ -21,3 +21,4 @@ Logged out
|
|
|
21
21
|
`
|
|
22
22
|
];
|
|
23
23
|
exports.default = Login;
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nb3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2F1dGgvbG9nb3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQXNDO0FBRXRDLDhEQUEwRDtBQUUxRCxNQUFxQixLQUFNLFNBQVEsY0FBTztJQVN4QyxLQUFLLENBQUMsR0FBRztRQUNQLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLHNCQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFNUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBZSxDQUFDLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7O0FBakJNLGlCQUFXLEdBQUcsK0JBQStCLENBQUM7QUFFOUMsY0FBUSxHQUFHO0lBQ2hCOztDQUVIO0NBQ0UsQ0FBQztrQkFQaUIsS0FBSyJ9
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
4
|
const sdk_client_1 = require("../../client-utils/sdk-client");
|
|
5
|
-
class Status extends
|
|
5
|
+
class Status extends core_1.Command {
|
|
6
6
|
async run() {
|
|
7
7
|
try {
|
|
8
8
|
const client = sdk_client_1.SDKClient.getInstance();
|
|
@@ -21,3 +21,4 @@ Currently logged in as apimatic-client@gmail.com
|
|
|
21
21
|
`
|
|
22
22
|
];
|
|
23
23
|
exports.default = Status;
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2F1dGgvc3RhdHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQXNDO0FBRXRDLDhEQUEwRDtBQUUxRCxNQUFxQixNQUFPLFNBQVEsY0FBTztJQVN6QyxLQUFLLENBQUMsR0FBRztRQUNQLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLHNCQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFNUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBZSxDQUFDLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7O0FBakJNLGtCQUFXLEdBQUcsbUNBQW1DLENBQUM7QUFFbEQsZUFBUSxHQUFHO0lBQ2hCOztDQUVIO0NBQ0UsQ0FBQztrQkFQaUIsTUFBTSJ9
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { Command
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
2
|
export default class PortalGenerate extends Command {
|
|
3
3
|
static description: string;
|
|
4
4
|
static flags: {
|
|
5
|
-
folder:
|
|
6
|
-
destination:
|
|
7
|
-
force: import("@oclif/
|
|
8
|
-
zip: import("@oclif/
|
|
9
|
-
"auth-key":
|
|
5
|
+
folder: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
6
|
+
destination: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
+
force: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
zip: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
"auth-key": import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
10
|
};
|
|
11
11
|
static examples: string[];
|
|
12
12
|
run(): Promise<undefined>;
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var _a;
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
const path = require("path");
|
|
4
5
|
const fs = require("fs-extra");
|
|
5
|
-
const
|
|
6
|
+
const core_1 = require("@oclif/core");
|
|
6
7
|
const sdk_1 = require("@apimatic/sdk");
|
|
7
8
|
const sdk_client_1 = require("../../client-utils/sdk-client");
|
|
8
9
|
const generate_1 = require("../../controllers/portal/generate");
|
|
9
10
|
const utils_1 = require("../../utils/utils");
|
|
10
|
-
class PortalGenerate extends
|
|
11
|
+
class PortalGenerate extends core_1.Command {
|
|
11
12
|
async run() {
|
|
12
|
-
const { flags } = this.parse(
|
|
13
|
+
const { flags } = await this.parse(_a);
|
|
13
14
|
const zip = flags.zip;
|
|
14
15
|
const sourceFolderPath = flags.folder;
|
|
15
16
|
const portalFolderPath = path.join(flags.destination, "generated_portal");
|
|
@@ -40,7 +41,9 @@ class PortalGenerate extends command_1.Command {
|
|
|
40
41
|
overrideAuthKey,
|
|
41
42
|
zip
|
|
42
43
|
};
|
|
44
|
+
core_1.ux.action.start('Generating portal');
|
|
43
45
|
const generatedPortalPath = await (0, generate_1.downloadDocsPortal)(generatePortalParams, this.config.configDir);
|
|
46
|
+
core_1.ux.action.stop();
|
|
44
47
|
this.log(`Your portal has been generated at ${generatedPortalPath}`);
|
|
45
48
|
}
|
|
46
49
|
catch (error) {
|
|
@@ -83,21 +86,22 @@ class PortalGenerate extends command_1.Command {
|
|
|
83
86
|
}
|
|
84
87
|
}
|
|
85
88
|
}
|
|
86
|
-
|
|
89
|
+
_a = PortalGenerate;
|
|
90
|
+
PortalGenerate.description = "Generate and download a static API Documentation portal. Requires an input directory containing API specifications, a config file and optionally, markdown guides. For details, refer to the [documentation](https://docs.apimatic.io/platform-api/#/http/guides/generating-on-prem-api-portal/build-file-reference)";
|
|
87
91
|
PortalGenerate.flags = {
|
|
88
|
-
folder:
|
|
89
|
-
parse: (input) => path.resolve(input),
|
|
92
|
+
folder: core_1.Flags.string({
|
|
93
|
+
parse: async (input) => path.resolve(input),
|
|
90
94
|
default: "./",
|
|
91
95
|
description: "path to the input directory containing API specifications and config files"
|
|
92
96
|
}),
|
|
93
|
-
destination:
|
|
94
|
-
parse: (input) => path.resolve(input),
|
|
97
|
+
destination: core_1.Flags.string({
|
|
98
|
+
parse: async (input) => path.resolve(input),
|
|
95
99
|
default: path.resolve("./"),
|
|
96
100
|
description: "path to the downloaded portal"
|
|
97
101
|
}),
|
|
98
|
-
force:
|
|
99
|
-
zip:
|
|
100
|
-
"auth-key":
|
|
102
|
+
force: core_1.Flags.boolean({ char: "f", default: false, description: "overwrite if a portal exists in the destination" }),
|
|
103
|
+
zip: core_1.Flags.boolean({ default: false, description: "download the generated portal as a .zip archive" }),
|
|
104
|
+
"auth-key": core_1.Flags.string({
|
|
101
105
|
default: "",
|
|
102
106
|
description: "override current authentication state with an authentication key"
|
|
103
107
|
})
|
|
@@ -108,3 +112,4 @@ Your portal has been generated at D:/
|
|
|
108
112
|
`
|
|
109
113
|
];
|
|
110
114
|
exports.default = PortalGenerate;
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvcG9ydGFsL2dlbmVyYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFFL0Isc0NBQWlEO0FBQ2pELHVDQUF1RTtBQUd2RSw4REFBMEQ7QUFFMUQsZ0VBQXVFO0FBQ3ZFLDZDQUE4RTtBQUc5RSxNQUFxQixjQUFlLFNBQVEsY0FBTztJQTZCakQsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQWMsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDdEIsTUFBTSxnQkFBZ0IsR0FBVyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzlDLE1BQU0sZ0JBQWdCLEdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDbEYsTUFBTSxnQkFBZ0IsR0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUV0RixNQUFNLGVBQWUsR0FBa0IsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVwRixxSEFBcUg7UUFDckgsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDNUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsZ0JBQWdCLDZCQUE2QixDQUFDLENBQUM7UUFDbEcsQ0FBQzthQUFNLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FB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
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
export default class PortalQuickstart extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
private getSpecFile;
|
|
6
|
+
private getSpecValidationSummary;
|
|
7
|
+
private getBuildDirectory;
|
|
8
|
+
private getGeneratedPortalPath;
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const sdk_1 = require("@apimatic/sdk");
|
|
5
|
+
const sdk_client_1 = require("../../client-utils/sdk-client");
|
|
6
|
+
const quickstart_1 = require("../../prompts/portal/quickstart");
|
|
7
|
+
const quickstart_2 = require("../../controllers/portal/quickstart");
|
|
8
|
+
const utils_1 = require("../../utils/utils");
|
|
9
|
+
class PortalQuickstart extends core_1.Command {
|
|
10
|
+
async getSpecFile(prompts, controller) {
|
|
11
|
+
const spec = await prompts.specPrompt();
|
|
12
|
+
const specFile = await controller.getSpecFile(spec);
|
|
13
|
+
prompts.displaySpecValidationMessage();
|
|
14
|
+
return specFile;
|
|
15
|
+
}
|
|
16
|
+
async getSpecValidationSummary(prompts, controller, specFile, apiValidationController) {
|
|
17
|
+
try {
|
|
18
|
+
const apiValidationSummary = await controller.getSpecValidationSummary(specFile, apiValidationController);
|
|
19
|
+
if (!apiValidationSummary.success) {
|
|
20
|
+
prompts.displaySpecValidationFailureMessage();
|
|
21
|
+
await prompts.specValidationFailurePrompt();
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
prompts.displaySpecValidationSuccessMessage();
|
|
25
|
+
}
|
|
26
|
+
return apiValidationSummary;
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
prompts.displaySpecValidationErrorMessage();
|
|
30
|
+
this.error((0, utils_1.getMessageInRedColor)("The specified path/URL does not point to a valid API Definition file. Please provide a valid API Definition file and try again."));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async getBuildDirectory(prompts, controller, specFile, apiValidationSummary, languages) {
|
|
34
|
+
const directory = await prompts.buildDirectoryPrompt();
|
|
35
|
+
prompts.displayBuildDirectoryGenerationMessage();
|
|
36
|
+
await controller.setupBuildDirectory(prompts, directory, specFile, apiValidationSummary, languages);
|
|
37
|
+
prompts.displayBuildDirectoryGenerationSuccessMessage(directory);
|
|
38
|
+
prompts.displayBuildDirectoryAsTree(directory);
|
|
39
|
+
return directory;
|
|
40
|
+
}
|
|
41
|
+
async getGeneratedPortalPath(prompts, controller, directory) {
|
|
42
|
+
prompts.displayPortalGenerationMessage();
|
|
43
|
+
const generatedPortalPath = await controller.generatePortalArtifacts(directory, this.config.configDir);
|
|
44
|
+
prompts.displayPortalGenerationSuccessMessage();
|
|
45
|
+
return generatedPortalPath;
|
|
46
|
+
}
|
|
47
|
+
async run() {
|
|
48
|
+
const prompts = new quickstart_1.PortalQuickstartPrompts();
|
|
49
|
+
const controller = new quickstart_2.PortalQuickstartController();
|
|
50
|
+
prompts.displayWelcomeMessage();
|
|
51
|
+
let loggedIn = await controller.isUserAuthenticated(this.config.configDir);
|
|
52
|
+
while (!loggedIn) {
|
|
53
|
+
const credentials = await prompts.loginPrompt();
|
|
54
|
+
prompts.displayLoggingInMessage();
|
|
55
|
+
try {
|
|
56
|
+
await controller.userLogin(credentials, sdk_client_1.SDKClient.getInstance(), this.config.configDir);
|
|
57
|
+
loggedIn = true;
|
|
58
|
+
prompts.displayLoggedInMessage();
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
prompts.displayLoggingInErrorMessage();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const client = await sdk_client_1.SDKClient.getInstance().getClient(null, this.config.configDir);
|
|
65
|
+
const apiValidationController = new sdk_1.APIValidationExternalApisController(client);
|
|
66
|
+
try {
|
|
67
|
+
const specFile = await this.getSpecFile(prompts, controller);
|
|
68
|
+
const apiValidationSummary = await this.getSpecValidationSummary(prompts, controller, specFile, apiValidationController);
|
|
69
|
+
const languages = await prompts.sdkLanguagesPrompt();
|
|
70
|
+
const directory = await this.getBuildDirectory(prompts, controller, specFile, apiValidationSummary, languages);
|
|
71
|
+
const generatedPortalPath = await this.getGeneratedPortalPath(prompts, controller, directory);
|
|
72
|
+
controller.servePortal(generatedPortalPath, directory, this.config.configDir);
|
|
73
|
+
prompts.displayOutroMessage();
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
this.error((0, utils_1.getMessageInRedColor)(error instanceof Error ? error.message : String(error)));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
PortalQuickstart.description = "Create your first API Portal using APIMatic’s Docs as Code offering.";
|
|
81
|
+
PortalQuickstart.examples = ["$ apimatic portal:quickstart"];
|
|
82
|
+
exports.default = PortalQuickstart;
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2tzdGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9wb3J0YWwvcXVpY2tzdGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUFzQztBQUN0Qyx1Q0FBa0c7QUFDbEcsOERBQTBEO0FBQzFELGdFQUEwRTtBQUMxRSxvRUFBaUY7QUFFakYsNkNBQXlEO0FBRXpELE1BQXFCLGdCQUFpQixTQUFRLGNBQU87SUFLM0MsS0FBSyxDQUFDLFdBQVcsQ0FDdkIsT0FBZ0MsRUFDaEMsVUFBc0M7UUFFdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFeEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBELE9BQU8sQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBRXZDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxLQUFLLENBQUMsd0JBQXdCLENBQ3BDLE9BQWdDLEVBQ2hDLFVBQXNDLEVBQ3RDLFFBQWtCLEVBQ2xCLHVCQUE0RDtRQUU1RCxJQUFJLENBQUM7WUFDSCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sVUFBVSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBRTFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbEMsT0FBTyxDQUFDLG1DQUFtQyxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sT0FBTyxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFDOUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDO1lBQ2hELENBQUM7WUFFRCxPQUFPLG9CQUFvQixDQUFDO1FBQzlCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLGlDQUFpQyxFQUFFLENBQUM7WUFD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
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
export default class PortalServe extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
port: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
6
|
+
destination: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
+
source: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
8
|
+
open: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
"no-reload": import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
ignore: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
+
"auth-key": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
|
+
};
|
|
13
|
+
static examples: string[];
|
|
14
|
+
private getGeneratedFilesPaths;
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
private handleError;
|
|
17
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const axios_1 = require("axios");
|
|
6
|
+
const core_1 = require("@oclif/core");
|
|
7
|
+
const serve_1 = require("../../controllers/portal/serve");
|
|
8
|
+
const server_1 = require("../../services/portal/server");
|
|
9
|
+
const serve_2 = require("../../prompts/portal/serve");
|
|
10
|
+
const utils_1 = require("../../utils/utils");
|
|
11
|
+
const serveValidator_1 = require("../../validators/portal/serveValidator");
|
|
12
|
+
class PortalServe extends core_1.Command {
|
|
13
|
+
getGeneratedFilesPaths(sourceDir, portalDir) {
|
|
14
|
+
const generatedZipPath = path.join(sourceDir, "portal_source.zip");
|
|
15
|
+
const generatedPortalZipPath = path.join(sourceDir, "generated_portal.zip");
|
|
16
|
+
const generatedPortalPath = path.join(path.dirname(portalDir), "api-portal");
|
|
17
|
+
return [generatedZipPath, generatedPortalPath, generatedPortalZipPath];
|
|
18
|
+
}
|
|
19
|
+
async run() {
|
|
20
|
+
var _b;
|
|
21
|
+
const { flags } = await this.parse(_a);
|
|
22
|
+
const ignoredPaths = flags.ignore.split(",").map((path) => path.trim());
|
|
23
|
+
const portalDir = path.resolve(flags.destination);
|
|
24
|
+
const sourceDir = path.resolve(flags.source);
|
|
25
|
+
const port = flags.port;
|
|
26
|
+
const overrideAuthKey = (_b = flags["auth-key"]) !== null && _b !== void 0 ? _b : null;
|
|
27
|
+
const serverService = new server_1.PortalServerService();
|
|
28
|
+
const prompts = new serve_2.PortalServePrompts();
|
|
29
|
+
const validator = new serveValidator_1.PortalServeValidator(this.error);
|
|
30
|
+
const allIgnoredPaths = [...ignoredPaths, ...this.getGeneratedFilesPaths(sourceDir, portalDir)];
|
|
31
|
+
await validator.validate(port, flags.destination, sourceDir, portalDir);
|
|
32
|
+
try {
|
|
33
|
+
prompts.displayGeneratingPortalMessage();
|
|
34
|
+
await (0, serve_1.generatePortal)(sourceDir, portalDir, this.config.configDir, allIgnoredPaths, overrideAuthKey);
|
|
35
|
+
prompts.displayGeneratedPortalMessage(portalDir);
|
|
36
|
+
await (0, utils_1.cleanUpGeneratedPortalFiles)(sourceDir);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
prompts.displayGeneratingPortalErrorMessage();
|
|
40
|
+
await (0, utils_1.cleanUpGeneratedPortalFiles)(sourceDir);
|
|
41
|
+
this.handleError(error);
|
|
42
|
+
}
|
|
43
|
+
serverService.setupServer(portalDir);
|
|
44
|
+
serverService.startServer({
|
|
45
|
+
generatedPortalPath: portalDir,
|
|
46
|
+
targetFolder: sourceDir,
|
|
47
|
+
configDir: this.config.configDir,
|
|
48
|
+
authKey: overrideAuthKey,
|
|
49
|
+
ignoredPaths: allIgnoredPaths,
|
|
50
|
+
port,
|
|
51
|
+
openInBrowser: flags.open
|
|
52
|
+
}, flags["no-reload"]);
|
|
53
|
+
prompts.displayOutroMessage(port);
|
|
54
|
+
}
|
|
55
|
+
handleError(error) {
|
|
56
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
57
|
+
const axiosError = error;
|
|
58
|
+
if (axiosError.response) {
|
|
59
|
+
if (axiosError.response.status === 400) {
|
|
60
|
+
this.error((0, utils_1.getMessageInRedColor)(`Failed to generate the portal. Please ensure that the provided build directory follows the correct structure and contains valid API definition and build files.`));
|
|
61
|
+
}
|
|
62
|
+
else if (axiosError.response.status === 401) {
|
|
63
|
+
this.error((0, utils_1.getMessageInRedColor)(`Failed to generate the portal. Please ensure that you are logged in or have provided a valid Auth key.`));
|
|
64
|
+
}
|
|
65
|
+
else if (axiosError.response.status === 403) {
|
|
66
|
+
this.error((0, utils_1.getMessageInRedColor)(`Access denied. It looks like you don’t have access to APIMatic’s Docs as Code offering. Check your subscription details and contact our team at support@apimatic.io if you believe this is a mistake.`));
|
|
67
|
+
}
|
|
68
|
+
else if (axiosError.response.status === 422) {
|
|
69
|
+
this.error((0, utils_1.getMessageInRedColor)(`Failed to generate the portal. Please ensure that the provided build directory follows the correct structure and contains valid API definition and build files.`));
|
|
70
|
+
}
|
|
71
|
+
else if (axiosError.response.status === 500) {
|
|
72
|
+
this.error((0, utils_1.getMessageInRedColor)(`Failed to generate the portal. Please ensure that the provided build directory follows the correct structure and contains valid API definition and build files. If the issue persists, reach out to our team at support@apimatic.io`));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
this.error((0, utils_1.getMessageInRedColor)(`Failed to generate the portal. Please ensure that the provided build directory follows the correct structure and contains valid API definition and build files. If the issue persists, reach out to our team at support@apimatic.io`));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (axiosError.request) {
|
|
79
|
+
if (axiosError.code === "ECONNABORTED") {
|
|
80
|
+
this.error((0, utils_1.getMessageInRedColor)(`Your request timed out. Please try again or reach out to our team at support@apimatic.io for help if your problem persists.`));
|
|
81
|
+
}
|
|
82
|
+
else if (error.code === "ENOTFOUND" || error.code === "ERR_NETWORK") {
|
|
83
|
+
this.error((0, utils_1.getMessageInRedColor)(`Network error. Please check your internet connection and try again.`));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
this.error((0, utils_1.getMessageInRedColor)(`No response received from the server. Please try again later.`));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
this.error((0, utils_1.getMessageInRedColor)(`Failed to generate the portal: ${axiosError.message}`));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else if (error instanceof Error) {
|
|
94
|
+
this.error((0, utils_1.getMessageInRedColor)(`Failed to generate the portal: ${error.message}`));
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
this.error((0, utils_1.getMessageInRedColor)(`Something went wrong while generating the portal, please try again later. If the issue persists, contact our team at support@apimatic.io`));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
_a = PortalServe;
|
|
102
|
+
PortalServe.description = "Generate and deploy a Docs as Code portal with hot reload.";
|
|
103
|
+
PortalServe.flags = {
|
|
104
|
+
port: core_1.Flags.integer({
|
|
105
|
+
char: "p",
|
|
106
|
+
description: "Port to serve the portal.",
|
|
107
|
+
default: 3000
|
|
108
|
+
}),
|
|
109
|
+
destination: core_1.Flags.string({
|
|
110
|
+
char: "d",
|
|
111
|
+
description: "Directory to store and serve the generated portal.",
|
|
112
|
+
default: "./api-portal",
|
|
113
|
+
parse: async (input) => path.resolve(input)
|
|
114
|
+
}),
|
|
115
|
+
source: core_1.Flags.string({
|
|
116
|
+
char: "s",
|
|
117
|
+
description: "Source directory containing specs, content, and build file. By default, the current directory is used.",
|
|
118
|
+
default: "./",
|
|
119
|
+
parse: async (input) => path.resolve(input)
|
|
120
|
+
}),
|
|
121
|
+
open: core_1.Flags.boolean({
|
|
122
|
+
char: "o",
|
|
123
|
+
description: "Open the portal in the default browser.",
|
|
124
|
+
default: false
|
|
125
|
+
}),
|
|
126
|
+
"no-reload": core_1.Flags.boolean({
|
|
127
|
+
description: "Disable hot reload.",
|
|
128
|
+
default: false
|
|
129
|
+
}),
|
|
130
|
+
ignore: core_1.Flags.string({
|
|
131
|
+
char: "i",
|
|
132
|
+
description: "Comma-separated list of files/directories to ignore.",
|
|
133
|
+
default: ""
|
|
134
|
+
}),
|
|
135
|
+
"auth-key": core_1.Flags.string({
|
|
136
|
+
description: "Override current authentication state with an authentication key."
|
|
137
|
+
})
|
|
138
|
+
};
|
|
139
|
+
PortalServe.examples = [
|
|
140
|
+
'$ apimatic portal:serve --source="./" --destination="./api-portal" --port=3000 --open --no-reload'
|
|
141
|
+
];
|
|
142
|
+
exports.default = PortalServe;
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvcG9ydGFsL3NlcnZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE2QjtBQUM3QixpQ0FBMEI7QUFDMUIsc0NBQTZDO0FBQzdDLDBEQUFnRTtBQUNoRSx5REFBbUU7QUFDbkUsc0RBQWdFO0FBQ2hFLDZDQUFzRjtBQUN0RiwyRUFBOEU7QUFFOUUsTUFBcUIsV0FBWSxTQUFRLGNBQU87SUE2Q3RDLHNCQUFzQixDQUFDLFNBQWlCLEVBQUUsU0FBaUI7UUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUM1RSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUU3RSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUc7O1FBQ1AsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFXLENBQUMsQ0FBQztRQUNoRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sU0FBUyxHQUFH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
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { Command
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
2
|
export default class SdkGenerate extends Command {
|
|
3
3
|
static description: string;
|
|
4
4
|
static flags: {
|
|
5
|
-
platform:
|
|
6
|
-
file:
|
|
7
|
-
url:
|
|
8
|
-
destination:
|
|
9
|
-
force: import("@oclif/
|
|
10
|
-
zip: import("@oclif/
|
|
11
|
-
"auth-key":
|
|
5
|
+
platform: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
6
|
+
file: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
+
url: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
8
|
+
destination: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
9
|
+
force: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
zip: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
"auth-key": import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
12
|
};
|
|
13
13
|
static examples: string[];
|
|
14
14
|
run(): Promise<void>;
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var _a;
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
const path = require("path");
|
|
4
5
|
const fs = require("fs-extra");
|
|
5
|
-
const
|
|
6
|
+
const core_1 = require("@oclif/core");
|
|
6
7
|
const sdk_client_1 = require("../../client-utils/sdk-client");
|
|
7
8
|
const sdk_1 = require("@apimatic/sdk");
|
|
8
9
|
const utils_1 = require("../../utils/utils");
|
|
9
10
|
const generate_1 = require("../../controllers/sdk/generate");
|
|
10
|
-
class SdkGenerate extends
|
|
11
|
+
class SdkGenerate extends core_1.Command {
|
|
11
12
|
async run() {
|
|
12
|
-
const { flags } = this.parse(
|
|
13
|
+
const { flags } = await this.parse(_a);
|
|
13
14
|
const zip = flags.zip;
|
|
14
15
|
const fileName = flags.file ? (0, utils_1.getFileNameFromPath)(flags.file) : (0, utils_1.getFileNameFromPath)(flags.url);
|
|
15
16
|
const sdkFolderPath = path.join(flags.destination, `${fileName}_sdk_${flags.platform}`.toLowerCase());
|
|
@@ -86,36 +87,37 @@ class SdkGenerate extends command_1.Command {
|
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
89
|
}
|
|
90
|
+
_a = SdkGenerate;
|
|
89
91
|
SdkGenerate.description = "Generate SDK for your APIs";
|
|
90
92
|
SdkGenerate.flags = {
|
|
91
|
-
platform:
|
|
92
|
-
parse: (input) => input.toUpperCase(),
|
|
93
|
+
platform: core_1.Flags.string({
|
|
94
|
+
parse: async (input) => input.toUpperCase(),
|
|
93
95
|
required: true,
|
|
94
96
|
description: `language platform for sdk
|
|
95
97
|
Simple: CSHARP|JAVA|PYTHON|RUBY|PHP|TYPESCRIPT
|
|
96
98
|
Legacy: CS_NET_STANDARD_LIB|JAVA_ECLIPSE_JRE_LIB|PHP_GENERIC_LIB|PYTHON_GENERIC_LIB|RUBY_GENERIC_LIB|TS_GENERIC_LIB`
|
|
97
99
|
}),
|
|
98
|
-
file:
|
|
99
|
-
parse: (input) => path.resolve(input),
|
|
100
|
+
file: core_1.Flags.string({
|
|
101
|
+
parse: async (input) => path.resolve(input),
|
|
100
102
|
default: "",
|
|
101
103
|
description: "path to the API specification to generate SDKs for"
|
|
102
104
|
}),
|
|
103
|
-
url:
|
|
105
|
+
url: core_1.Flags.string({
|
|
104
106
|
default: "",
|
|
105
107
|
description: "URL to the API specification to generate SDKs for. Can be used in place of the --file option if the API specification is publicly available."
|
|
106
108
|
}),
|
|
107
|
-
destination:
|
|
108
|
-
parse: (input) => path.resolve(input),
|
|
109
|
+
destination: core_1.Flags.string({
|
|
110
|
+
parse: async (input) => path.resolve(input),
|
|
109
111
|
default: path.resolve("./"),
|
|
110
112
|
description: "directory to download the generated SDK to"
|
|
111
113
|
}),
|
|
112
|
-
force:
|
|
114
|
+
force: core_1.Flags.boolean({
|
|
113
115
|
char: "f",
|
|
114
116
|
default: false,
|
|
115
117
|
description: "overwrite if an SDK already exists in the destination"
|
|
116
118
|
}),
|
|
117
|
-
zip:
|
|
118
|
-
"auth-key":
|
|
119
|
+
zip: core_1.Flags.boolean({ default: false, description: "download the generated SDK as a .zip archive" }),
|
|
120
|
+
"auth-key": core_1.Flags.string({
|
|
119
121
|
default: "",
|
|
120
122
|
description: "override current authentication state with an authentication key"
|
|
121
123
|
})
|
|
@@ -133,3 +135,4 @@ Success! Your SDK is located at swagger_sdk_csharp
|
|
|
133
135
|
`
|
|
134
136
|
];
|
|
135
137
|
exports.default = SdkGenerate;
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvc2RrL2dlbmVyYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFFL0Isc0NBQTZDO0FBQzdDLDhEQUEwRDtBQUMxRCx1Q0FBdUY7QUFFdkYsNkNBQXFGO0FBQ3JGLDZEQUEwRjtBQUkxRixNQUFxQixXQUFZLFNBQVEsY0FBTztJQWtEOUMsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQVcsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDdEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBQSwyQkFBbUIsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsMkJBQW1CLEVBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9GLE1BQU0sYUFBYSxHQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLFFBQVEsUUFBUSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM5RyxNQUFNLGFBQWEsR0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxRQUFRLFFBQVEsS0FBSyxDQUFDLFFBQVEsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFbEgsa0hBQWtIO1FBQ2xILElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6RCxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4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
|