@apimatic/cli 1.1.0-alpha.13 → 1.1.0-alpha.15
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 +96 -95
- package/lib/actions/action-result.d.ts +8 -0
- package/lib/actions/action-result.js +25 -0
- package/lib/actions/action-result.js.map +1 -0
- package/lib/actions/auth/login.d.ts +12 -0
- package/lib/actions/auth/login.js +63 -0
- package/lib/actions/auth/login.js.map +1 -0
- package/lib/actions/portal/copilot.d.ts +11 -0
- package/lib/actions/portal/copilot.js +46 -0
- package/lib/actions/portal/copilot.js.map +1 -0
- package/lib/actions/portal/generate.d.ts +11 -5
- package/lib/actions/portal/generate.js +54 -47
- package/lib/actions/portal/generate.js.map +1 -1
- package/lib/actions/portal/recipe/new-recipe.d.ts +3 -3
- package/lib/actions/portal/recipe/new-recipe.js +18 -31
- package/lib/actions/portal/recipe/new-recipe.js.map +1 -1
- package/lib/actions/portal/serve.d.ts +17 -0
- package/lib/actions/portal/serve.js +36 -0
- package/lib/actions/portal/serve.js.map +1 -0
- package/lib/actions/portal/toc/new-toc.d.ts +4 -1
- package/lib/actions/portal/toc/new-toc.js +37 -34
- package/lib/actions/portal/toc/new-toc.js.map +1 -1
- package/lib/actions/sdk/generate.d.ts +13 -0
- package/lib/actions/sdk/generate.js +49 -0
- package/lib/actions/sdk/generate.js.map +1 -0
- package/lib/application/portal/serve/portal-watcher.d.ts +11 -0
- package/lib/application/portal/serve/portal-watcher.js +67 -0
- package/lib/application/portal/serve/portal-watcher.js.map +1 -0
- package/lib/application/portal/serve/serve-handler.d.ts +16 -0
- package/lib/application/portal/serve/serve-handler.js +91 -0
- package/lib/application/portal/serve/serve-handler.js.map +1 -0
- package/lib/application/portal/serve/watcher-handler.d.ts +10 -0
- package/lib/application/portal/serve/watcher-handler.js +51 -0
- package/lib/application/portal/serve/watcher-handler.js.map +1 -0
- package/lib/application/portal/toc/sdl-parser.d.ts +2 -1
- package/lib/application/portal/toc/sdl-parser.js +4 -4
- package/lib/application/portal/toc/sdl-parser.js.map +1 -1
- package/lib/client-utils/auth-manager.d.ts +7 -2
- package/lib/client-utils/auth-manager.js +24 -7
- package/lib/client-utils/auth-manager.js.map +1 -1
- package/lib/client-utils/sdk-client.d.ts +0 -1
- package/lib/client-utils/sdk-client.js +7 -38
- package/lib/client-utils/sdk-client.js.map +1 -1
- package/lib/commands/api/transform.d.ts +2 -2
- package/lib/commands/api/transform.js +10 -19
- package/lib/commands/api/transform.js.map +1 -1
- package/lib/commands/api/validate.d.ts +1 -1
- package/lib/commands/api/validate.js +5 -13
- package/lib/commands/api/validate.js.map +1 -1
- package/lib/commands/auth/login.d.ts +2 -1
- package/lib/commands/auth/login.js +19 -65
- package/lib/commands/auth/login.js.map +1 -1
- package/lib/commands/auth/logout.js +2 -6
- package/lib/commands/auth/logout.js.map +1 -1
- package/lib/commands/auth/status.js +3 -6
- package/lib/commands/auth/status.js.map +1 -1
- package/lib/commands/portal/copilot.d.ts +12 -0
- package/lib/commands/portal/copilot.js +35 -0
- package/lib/commands/portal/copilot.js.map +1 -0
- package/lib/commands/portal/generate.d.ts +7 -10
- package/lib/commands/portal/generate.js +18 -83
- package/lib/commands/portal/generate.js.map +1 -1
- package/lib/commands/portal/quickstart.d.ts +2 -2
- package/lib/commands/portal/quickstart.js +58 -29
- package/lib/commands/portal/quickstart.js.map +1 -1
- package/lib/commands/portal/recipe/new.d.ts +1 -3
- package/lib/commands/portal/recipe/new.js +21 -27
- package/lib/commands/portal/recipe/new.js.map +1 -1
- package/lib/commands/portal/serve.d.ts +7 -6
- package/lib/commands/portal/serve.js +62 -112
- package/lib/commands/portal/serve.js.map +1 -1
- package/lib/commands/portal/toc/new.d.ts +4 -5
- package/lib/commands/portal/toc/new.js +26 -37
- package/lib/commands/portal/toc/new.js.map +1 -1
- package/lib/commands/sdk/generate.d.ts +8 -6
- package/lib/commands/sdk/generate.js +53 -124
- package/lib/commands/sdk/generate.js.map +1 -1
- package/lib/controllers/portal/quickstart.d.ts +0 -2
- package/lib/controllers/portal/quickstart.js +2 -60
- package/lib/controllers/portal/quickstart.js.map +1 -1
- package/lib/infrastructure/api-utils.d.ts +9 -0
- package/lib/infrastructure/api-utils.js +33 -0
- package/lib/infrastructure/api-utils.js.map +1 -0
- package/lib/infrastructure/env-info.d.ts +8 -0
- package/lib/infrastructure/env-info.js +37 -0
- package/lib/infrastructure/env-info.js.map +1 -0
- package/lib/infrastructure/file-service.d.ts +15 -0
- package/lib/infrastructure/file-service.js +61 -0
- package/lib/infrastructure/file-service.js.map +1 -0
- package/lib/infrastructure/services/api-service.d.ts +10 -0
- package/lib/infrastructure/services/api-service.js +52 -0
- package/lib/infrastructure/services/api-service.js.map +1 -0
- package/lib/infrastructure/services/auth-service.d.ts +11 -0
- package/lib/infrastructure/services/auth-service.js +33 -0
- package/lib/infrastructure/services/auth-service.js.map +1 -0
- package/lib/infrastructure/services/portal-service.d.ts +7 -4
- package/lib/infrastructure/services/portal-service.js +70 -49
- package/lib/infrastructure/services/portal-service.js.map +1 -1
- package/lib/infrastructure/services/telemetry-service.d.ts +8 -0
- package/lib/infrastructure/services/telemetry-service.js +40 -0
- package/lib/infrastructure/services/telemetry-service.js.map +1 -0
- package/lib/infrastructure/tmp-extensions.d.ts +2 -0
- package/lib/infrastructure/tmp-extensions.js +6 -0
- package/lib/infrastructure/tmp-extensions.js.map +1 -0
- package/lib/infrastructure/zip-service.d.ts +6 -0
- package/lib/infrastructure/zip-service.js +25 -0
- package/lib/infrastructure/zip-service.js.map +1 -0
- package/lib/prompts/auth/login.d.ts +5 -0
- package/lib/prompts/auth/login.js +13 -0
- package/lib/prompts/auth/login.js.map +1 -0
- package/lib/prompts/portal/common/base-prompts.d.ts +7 -0
- package/lib/prompts/portal/common/base-prompts.js +19 -0
- package/lib/prompts/portal/common/base-prompts.js.map +1 -0
- package/lib/prompts/portal/copilot.d.ts +6 -0
- package/lib/prompts/portal/copilot.js +35 -0
- package/lib/prompts/portal/copilot.js.map +1 -0
- package/lib/prompts/portal/generate.d.ts +3 -2
- package/lib/prompts/portal/generate.js +21 -36
- package/lib/prompts/portal/generate.js.map +1 -1
- package/lib/prompts/portal/quickstart.d.ts +8 -9
- package/lib/prompts/portal/quickstart.js +44 -32
- package/lib/prompts/portal/quickstart.js.map +1 -1
- package/lib/prompts/portal/recipe/new-recipe.d.ts +1 -0
- package/lib/prompts/portal/recipe/new-recipe.js +18 -8
- package/lib/prompts/portal/recipe/new-recipe.js.map +1 -1
- package/lib/prompts/portal/serve.d.ts +4 -6
- package/lib/prompts/portal/serve.js +24 -15
- package/lib/prompts/portal/serve.js.map +1 -1
- package/lib/prompts/portal/toc/new-toc.d.ts +3 -2
- package/lib/prompts/portal/toc/new-toc.js +11 -14
- package/lib/prompts/portal/toc/new-toc.js.map +1 -1
- package/lib/prompts/sdk/generate.d.ts +11 -0
- package/lib/prompts/sdk/generate.js +42 -0
- package/lib/prompts/sdk/generate.js.map +1 -0
- package/lib/types/api/account.d.ts +10 -0
- package/lib/types/api/account.js +2 -0
- package/lib/types/api/account.js.map +1 -0
- package/lib/types/build/build.d.ts +14 -0
- package/lib/types/build/build.js +4 -0
- package/lib/types/build/build.js.map +1 -0
- package/lib/types/build-context.d.ts +13 -0
- package/lib/types/build-context.js +30 -0
- package/lib/types/build-context.js.map +1 -0
- package/lib/types/events/domain-event.d.ts +8 -0
- package/lib/types/events/domain-event.js +11 -0
- package/lib/types/events/domain-event.js.map +1 -0
- package/lib/types/events/recipe-creation-failed.d.ts +5 -0
- package/lib/types/events/recipe-creation-failed.js +8 -0
- package/lib/types/events/recipe-creation-failed.js.map +1 -0
- package/lib/types/events/toc-creation-failed.d.ts +5 -0
- package/lib/types/events/toc-creation-failed.js +8 -0
- package/lib/types/events/toc-creation-failed.js.map +1 -0
- package/lib/types/file/directoryPath.d.ts +7 -0
- package/lib/types/file/directoryPath.js +16 -0
- package/lib/types/file/directoryPath.js.map +1 -0
- package/lib/types/file/fileName.d.ts +5 -0
- package/lib/types/file/fileName.js +9 -0
- package/lib/types/file/fileName.js.map +1 -0
- package/lib/types/file/filePath.d.ts +8 -0
- package/lib/types/file/filePath.js +11 -0
- package/lib/types/file/filePath.js.map +1 -0
- package/lib/types/flags-provider.d.ts +15 -0
- package/lib/types/flags-provider.js +34 -0
- package/lib/types/flags-provider.js.map +1 -0
- package/lib/types/portal/generate.d.ts +0 -13
- package/lib/types/portal/quickstart.d.ts +1 -1
- package/lib/types/portal/serve.d.ts +13 -0
- package/lib/types/portal/serve.js +2 -0
- package/lib/types/portal/serve.js.map +1 -0
- package/lib/types/portal-context.d.ts +11 -0
- package/lib/types/portal-context.js +28 -0
- package/lib/types/portal-context.js.map +1 -0
- package/lib/types/sdk/generate.d.ts +8 -8
- package/lib/types/sdk/generate.js +10 -10
- package/lib/types/sdk/generate.js.map +1 -1
- package/lib/types/sdk-context.d.ts +13 -0
- package/lib/types/sdk-context.js +28 -0
- package/lib/types/sdk-context.js.map +1 -0
- package/lib/types/spec-context.d.ts +7 -0
- package/lib/types/spec-context.js +12 -0
- package/lib/types/spec-context.js.map +1 -0
- package/lib/utils/utils.d.ts +1 -4
- package/lib/utils/utils.js +18 -32
- package/lib/utils/utils.js.map +1 -1
- package/lib/validators/common/directoryValidator.d.ts +3 -7
- package/lib/validators/common/directoryValidator.js +10 -37
- package/lib/validators/common/directoryValidator.js.map +1 -1
- package/lib/validators/portal/serve-validator.d.ts +6 -0
- package/lib/validators/portal/serve-validator.js +15 -0
- package/lib/validators/portal/serve-validator.js.map +1 -0
- package/package.json +6 -3
- package/lib/controllers/portal/generate.d.ts +0 -3
- package/lib/controllers/portal/generate.js +0 -106
- package/lib/controllers/portal/generate.js.map +0 -1
- package/lib/controllers/portal/serve.d.ts +0 -3
- package/lib/controllers/portal/serve.js +0 -136
- package/lib/controllers/portal/serve.js.map +0 -1
- package/lib/controllers/sdk/generate.d.ts +0 -4
- package/lib/controllers/sdk/generate.js +0 -61
- package/lib/controllers/sdk/generate.js.map +0 -1
- package/lib/services/portal/server.d.ts +0 -14
- package/lib/services/portal/server.js +0 -97
- package/lib/services/portal/server.js.map +0 -1
- package/lib/validators/common/portValidator.d.ts +0 -5
- package/lib/validators/common/portValidator.js +0 -16
- package/lib/validators/common/portValidator.js.map +0 -1
- package/lib/validators/portal/serveValidator.d.ts +0 -6
- package/lib/validators/portal/serveValidator.js +0 -17
- package/lib/validators/portal/serveValidator.js.map +0 -1
|
@@ -8,6 +8,7 @@ import { printValidationMessages } from "../../utils/utils.js";
|
|
|
8
8
|
import { getFileNameFromPath, replaceHTML } from "../../utils/utils.js";
|
|
9
9
|
import { DestinationFormats, TransformationFormats } from "../../types/api/transform.js";
|
|
10
10
|
import { getValidFormat, getTransformationId, downloadTransformationFile } from "../../controllers/api/transform.js";
|
|
11
|
+
import { FlagsProvider } from "../../types/flags-provider.js";
|
|
11
12
|
const formats = Object.keys(TransformationFormats).join("|");
|
|
12
13
|
class Transform extends Command {
|
|
13
14
|
async run() {
|
|
@@ -80,36 +81,26 @@ class Transform extends Command {
|
|
|
80
81
|
_a = Transform;
|
|
81
82
|
Transform.description = `Transform API specifications from one format to another. Supports [10+ different formats](https://www.apimatic.io/transformer/#supported-formats) including OpenApi/Swagger, RAML, WSDL and Postman Collections.`;
|
|
82
83
|
Transform.examples = [
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
`,
|
|
86
|
-
`$ apimatic api:transform --format=RAML --url="https://petstore.swagger.io/v2/swagger.json" --destination="D:/"
|
|
87
|
-
Success! Your transformed file is located at D:/swagger_raml.yaml
|
|
88
|
-
`
|
|
84
|
+
`apimatic api:transform --format="OpenApi3Json" --file="./specs/sample.json" --destination="D:/"`,
|
|
85
|
+
`apimatic api:transform --format=RAML --url="https://petstore.swagger.io/v2/swagger.json" --destination="D:/"`
|
|
89
86
|
];
|
|
90
|
-
Transform.flags = {
|
|
91
|
-
format: Flags.string({
|
|
87
|
+
Transform.flags = Object.assign(Object.assign({ format: Flags.string({
|
|
92
88
|
parse: async (format) => getValidFormat(format),
|
|
93
89
|
required: true,
|
|
94
90
|
description: `specification format to transform API specification into
|
|
95
91
|
${formats}`
|
|
96
|
-
}),
|
|
97
|
-
file: Flags.string({
|
|
92
|
+
}), file: Flags.string({
|
|
98
93
|
parse: async (input) => path.resolve(input),
|
|
99
94
|
default: "",
|
|
100
95
|
description: "path to the API specification file to transform"
|
|
101
|
-
}),
|
|
102
|
-
url: Flags.string({
|
|
96
|
+
}), url: Flags.string({
|
|
103
97
|
default: "",
|
|
104
98
|
description: "URL to the API specification file to transform. Can be used in place of the --file option if the API specification is publicly available."
|
|
105
|
-
}),
|
|
106
|
-
destination: Flags.string({
|
|
99
|
+
}), destination: Flags.string({
|
|
107
100
|
parse: async (input) => path.resolve(input),
|
|
108
101
|
default: path.resolve("./"),
|
|
109
|
-
description: "directory to download transformed file to"
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
"auth-key": Flags.string({ description: "override current authentication state with an authentication key" })
|
|
113
|
-
};
|
|
102
|
+
description: "directory to download transformed file to",
|
|
103
|
+
char: "d"
|
|
104
|
+
}) }, FlagsProvider.force), FlagsProvider.authKey);
|
|
114
105
|
export default Transform;
|
|
115
106
|
//# sourceMappingURL=transform.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../src/commands/api/transform.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,OAAO,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAoC,MAAM,eAAe,CAAC;AAG3F,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../src/commands/api/transform.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,9 @@ export default class Validate extends Command {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
+
"auth-key": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
7
|
file: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
8
|
url: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
-
"auth-key": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
};
|
|
10
10
|
run(): Promise<void>;
|
|
11
11
|
}
|
|
@@ -4,6 +4,7 @@ import { ApiValidationExternalApisController } from "@apimatic/sdk";
|
|
|
4
4
|
import { SDKClient } from "../../client-utils/sdk-client.js";
|
|
5
5
|
import { getValidationSummary } from "../../controllers/api/validate.js";
|
|
6
6
|
import { printValidationMessages, replaceHTML } from "../../utils/utils.js";
|
|
7
|
+
import { FlagsProvider } from "../../types/flags-provider.js";
|
|
7
8
|
class Validate extends Command {
|
|
8
9
|
async run() {
|
|
9
10
|
const { flags } = await this.parse(Validate);
|
|
@@ -57,21 +58,12 @@ class Validate extends Command {
|
|
|
57
58
|
}
|
|
58
59
|
Validate.description = "Validate the syntactic and semantic correctness of an API specification";
|
|
59
60
|
Validate.examples = [
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
`,
|
|
63
|
-
`$ apimatic api:validate --url=https://petstore.swagger.io/v2/swagger.json
|
|
64
|
-
Specification file provided is valid
|
|
65
|
-
`
|
|
61
|
+
`apimatic api:validate --file="./specs/sample.json"`,
|
|
62
|
+
`apimatic api:validate --url=https://petstore.swagger.io/v2/swagger.json`
|
|
66
63
|
];
|
|
67
|
-
Validate.flags = {
|
|
68
|
-
file: Flags.string({ default: "", description: "Path to the API specification file to validate" }),
|
|
69
|
-
url: Flags.string({
|
|
64
|
+
Validate.flags = Object.assign({ file: Flags.string({ default: "", description: "Path to the API specification file to validate" }), url: Flags.string({
|
|
70
65
|
default: "",
|
|
71
66
|
description: "URL to the specification file to validate. Can be used in place of the --file option if the API specification is publicly available."
|
|
72
|
-
}),
|
|
73
|
-
// docs: flags.boolean({ default: false, description: "Validate specification for docs generation" }), // Next tier, not included in API spec
|
|
74
|
-
"auth-key": Flags.string({ description: "override current authentication state with an authentication key" })
|
|
75
|
-
};
|
|
67
|
+
}) }, FlagsProvider.authKey);
|
|
76
68
|
export default Validate;
|
|
77
69
|
//# sourceMappingURL=validate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/api/validate.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAY,mCAAmC,EAAgC,MAAM,eAAe,CAAC;AAG5G,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/api/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,8 @@ export default class Login extends Command {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
"auth-key": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
"auth-key": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
7
|
};
|
|
8
|
+
private readonly prompts;
|
|
8
9
|
run(): Promise<void>;
|
|
9
10
|
}
|
|
@@ -1,75 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { Command, Flags } from "@oclif/core";
|
|
2
|
+
import { DirectoryPath } from "../../types/file/directoryPath.js";
|
|
3
|
+
import { LoginPrompts } from "../../prompts/auth/login.js";
|
|
4
|
+
import { LoginAction } from "../../actions/auth/login.js";
|
|
5
5
|
class Login extends Command {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.prompts = new LoginPrompts();
|
|
9
|
+
}
|
|
6
10
|
async run() {
|
|
7
|
-
const { flags } = await this.parse(Login);
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const client = SDKClient.getInstance();
|
|
11
|
-
// If user is setting auth key
|
|
12
|
-
if (flags["auth-key"]) {
|
|
13
|
-
const response = client.setAuthKey(flags["auth-key"], configDir);
|
|
14
|
-
return this.log(response);
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
// If user logs in with email and password
|
|
18
|
-
const email = await text({
|
|
19
|
-
message: "Enter your registered email:",
|
|
20
|
-
validate: (input) => {
|
|
21
|
-
if (!input) {
|
|
22
|
-
return getMessageInRedColor("Email is required.");
|
|
23
|
-
}
|
|
24
|
-
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])?)*$/;
|
|
25
|
-
if (!emailRegex.test(input)) {
|
|
26
|
-
return getMessageInRedColor("Please enter a valid email address.");
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
const pass = await password({
|
|
31
|
-
message: "Please enter your password:",
|
|
32
|
-
validate: (input) => {
|
|
33
|
-
if (!input) {
|
|
34
|
-
return getMessageInRedColor("Password is required.");
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
const response = await client.login(email, pass, configDir);
|
|
39
|
-
outro(response);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
if (error && error.response) {
|
|
44
|
-
const apiError = error;
|
|
45
|
-
const apiResponse = apiError.response;
|
|
46
|
-
if (apiResponse) {
|
|
47
|
-
const responseData = apiResponse.data;
|
|
48
|
-
if (apiResponse.status === 403 && responseData) {
|
|
49
|
-
return this.error(replaceHTML(JSON.stringify(responseData)));
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
return this.error(apiError.message);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
this.error(error.message);
|
|
11
|
+
const { flags: { "auth-key": authKey } } = await this.parse(Login);
|
|
12
|
+
if (authKey === "") {
|
|
13
|
+
this.error("Flag --auth-key must not be empty when provided.");
|
|
57
14
|
}
|
|
15
|
+
const loginAction = new LoginAction(new DirectoryPath(this.config.configDir));
|
|
16
|
+
const result = await loginAction.execute(authKey);
|
|
17
|
+
result.match((email) => this.prompts.loginSuccessful(email), (error) => this.prompts.logError(error));
|
|
58
18
|
}
|
|
59
19
|
}
|
|
60
20
|
Login.description = "Login using your APIMatic credentials or an API Key";
|
|
61
|
-
Login.examples = [
|
|
62
|
-
`$ apimatic auth:login
|
|
63
|
-
Enter your registered email: apimatic-user@gmail.com
|
|
64
|
-
Please enter your password: *********
|
|
65
|
-
|
|
66
|
-
You have successfully logged into APIMatic
|
|
67
|
-
`,
|
|
68
|
-
`$ apimatic auth:login --auth-key=xxxxxx
|
|
69
|
-
Authentication key successfully set`
|
|
70
|
-
];
|
|
21
|
+
Login.examples = [`apimatic auth:login`, `apimatic auth:login --auth-key={api-key}`];
|
|
71
22
|
Login.flags = {
|
|
72
|
-
"auth-key": Flags.string({
|
|
23
|
+
"auth-key": Flags.string({
|
|
24
|
+
char: "k",
|
|
25
|
+
description: "Sets authentication key for all commands.",
|
|
26
|
+
})
|
|
73
27
|
};
|
|
74
28
|
export default Login;
|
|
75
29
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,MAAqB,KAAM,SAAQ,OAAO;IAA1C;;QAYmB,YAAO,GAAG,IAAI,YAAY,EAAE,CAAC;IAkBhD,CAAC;IAhBC,KAAK,CAAC,GAAG;QACP,MAAM,EACJ,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,EAC/B,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE5B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CACV,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,EAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CACxC,CAAC;IACJ,CAAC;;AA5BM,iBAAW,GAAG,qDAAqD,AAAxD,CAAyD;AAEpE,cAAQ,GAAG,CAAC,qBAAqB,EAAE,0CAA0C,CAAC,AAAtE,CAAuE;AAE/E,WAAK,GAAG;IACb,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC;QACvB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,2CAA2C;KACzD,CAAC;CACH,AALW,CAKV;eAViB,KAAK"}
|
|
@@ -12,11 +12,7 @@ class Login extends Command {
|
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
Login.description = "
|
|
16
|
-
Login.examples = [
|
|
17
|
-
`$ apimatic auth:logout
|
|
18
|
-
Logged out
|
|
19
|
-
`
|
|
20
|
-
];
|
|
15
|
+
Login.description = "Clears the local login credentials.";
|
|
16
|
+
Login.examples = [`apimatic auth:logout`];
|
|
21
17
|
export default Login;
|
|
22
18
|
//# sourceMappingURL=logout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,MAAqB,KAAM,SAAQ,OAAO;
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,MAAqB,KAAM,SAAQ,OAAO;IAKxC,KAAK,CAAC,GAAG;QACP,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAE5D,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;;AAbM,iBAAW,GAAG,qCAAqC,CAAC;AAEpD,cAAQ,GAAG,CAAC,sBAAsB,CAAC,CAAC;eAHxB,KAAK"}
|
|
@@ -4,6 +4,7 @@ class Status extends Command {
|
|
|
4
4
|
async run() {
|
|
5
5
|
try {
|
|
6
6
|
const client = SDKClient.getInstance();
|
|
7
|
+
// TODO: Add validation for auth key from the server.
|
|
7
8
|
const response = await client.status(this.config.configDir);
|
|
8
9
|
this.log(response);
|
|
9
10
|
}
|
|
@@ -12,11 +13,7 @@ class Status extends Command {
|
|
|
12
13
|
}
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
|
-
Status.description = "View
|
|
16
|
-
Status.examples = [
|
|
17
|
-
`$ apimatic auth:status
|
|
18
|
-
Currently logged in as apimatic-client@gmail.com
|
|
19
|
-
`
|
|
20
|
-
];
|
|
16
|
+
Status.description = "View the currently logged in user.";
|
|
17
|
+
Status.examples = [`apimatic auth:status`];
|
|
21
18
|
export default Status;
|
|
22
19
|
//# sourceMappingURL=status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,MAAqB,MAAO,SAAQ,OAAO;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,MAAqB,MAAO,SAAQ,OAAO;IAKzC,KAAK,CAAC,GAAG;QACP,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YACvC,qDAAqD;YACrD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAE5D,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;;AAdM,kBAAW,GAAG,oCAAoC,CAAC;AAEnD,eAAQ,GAAG,CAAC,sBAAsB,CAAC,CAAC;eAHxB,MAAM"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
export default class PortalCopilotEnable extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
"auth-key": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
"welcome-message": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
disable: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
};
|
|
9
|
+
static examples: string[];
|
|
10
|
+
private readonly prompts;
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Command, Flags } from "@oclif/core";
|
|
2
|
+
import { DirectoryPath } from "../../types/file/directoryPath.js";
|
|
3
|
+
import { PortalCopilotPrompts } from "../../prompts/portal/copilot.js";
|
|
4
|
+
import { FlagsProvider } from "../../types/flags-provider.js";
|
|
5
|
+
import { CopilotAction } from "../../actions/portal/copilot.js";
|
|
6
|
+
const DEFAULT_WORKING_DIRECTORY = "./";
|
|
7
|
+
class PortalCopilotEnable extends Command {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.prompts = new PortalCopilotPrompts();
|
|
11
|
+
}
|
|
12
|
+
async run() {
|
|
13
|
+
const { flags: { folder, "auth-key": authKey, disable, 'welcome-message': welcomeMessage } } = await this.parse(PortalCopilotEnable);
|
|
14
|
+
const workingDirectory = new DirectoryPath(folder !== null && folder !== void 0 ? folder : DEFAULT_WORKING_DIRECTORY);
|
|
15
|
+
const buildDirectory = folder ? new DirectoryPath(folder, "src") : workingDirectory.join("src");
|
|
16
|
+
const copilotConfigAction = new CopilotAction(new DirectoryPath(this.config.configDir), authKey);
|
|
17
|
+
const result = await copilotConfigAction.execute(buildDirectory, welcomeMessage, !disable);
|
|
18
|
+
result.map((message) => this.prompts.logError(message));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
PortalCopilotEnable.description = "Adds the API Copilot configuration in APIMATIC-BUILD.json";
|
|
22
|
+
PortalCopilotEnable.flags = Object.assign(Object.assign(Object.assign({}, FlagsProvider.input), { "welcome-message": Flags.string({
|
|
23
|
+
char: "m",
|
|
24
|
+
default: "",
|
|
25
|
+
description: "welcome message for the API copilot"
|
|
26
|
+
}), disable: Flags.boolean({
|
|
27
|
+
default: false,
|
|
28
|
+
description: "marks the API Copilot as disabled in the configuration"
|
|
29
|
+
}) }), FlagsProvider.authKey);
|
|
30
|
+
PortalCopilotEnable.examples = [
|
|
31
|
+
`apimatic portal:copilot --input="./" --welcome-message="Welcome to our API!"`,
|
|
32
|
+
`apimatic portal:copilot --input="./"`
|
|
33
|
+
];
|
|
34
|
+
export default PortalCopilotEnable;
|
|
35
|
+
//# sourceMappingURL=copilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../../src/commands/portal/copilot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAEvC,MAAqB,mBAAoB,SAAQ,OAAO;IAAxD;;QAsBmB,YAAO,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAaxD,CAAC;IAXC,KAAK,CAAC,GAAG;QACP,MAAM,EACJ,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAC,EAClF,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAE1C,MAAM,gBAAgB,GAAG,IAAI,aAAa,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,yBAAyB,CAAC,CAAC;QAChF,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChG,MAAM,mBAAmB,GAAG,IAAI,aAAa,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QACjG,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,cAAc,EAAE,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC;QAC3F,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,CAAC;;AAjCM,+BAAW,GAAG,2DAA2D,AAA9D,CAA+D;AAE1E,yBAAK,iDACP,aAAa,CAAC,KAAK,KACtB,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC;QAC9B,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,qCAAqC;KACnD,CAAC,EACF,OAAO,EAAG,KAAK,CAAC,OAAO,CAAC;QACtB,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,wDAAwD;KACtE,CAAC,KACC,aAAa,CAAC,OAAO,CAXd,CAYV;AAEK,4BAAQ,GAAG;IAChB,8EAA8E;IAC9E,sCAAsC;CACvC,AAHc,CAGb;eApBiB,mBAAmB"}
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
import { Command } from "@oclif/core";
|
|
2
|
-
export
|
|
1
|
+
import { Command, Config } from "@oclif/core";
|
|
2
|
+
export declare class PortalGenerate extends Command {
|
|
3
3
|
static description: string;
|
|
4
4
|
static flags: {
|
|
5
|
-
|
|
6
|
-
destination: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
-
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
5
|
+
"auth-key": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
6
|
zip: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
-
|
|
7
|
+
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
destination: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
9
|
};
|
|
11
10
|
static examples: string[];
|
|
12
11
|
private readonly prompts;
|
|
13
|
-
constructor(argv: string[], config:
|
|
12
|
+
constructor(argv: string[], config: Config);
|
|
14
13
|
run(): Promise<void>;
|
|
15
|
-
private
|
|
16
|
-
private validatePaths;
|
|
17
|
-
private checkExistingPortal;
|
|
14
|
+
private getConfigDir;
|
|
18
15
|
}
|
|
@@ -1,96 +1,31 @@
|
|
|
1
|
-
var _a;
|
|
2
|
-
import * as path from "path";
|
|
3
|
-
import fsExtra from "fs-extra";
|
|
4
1
|
import { Command, Flags } from "@oclif/core";
|
|
5
|
-
import {
|
|
2
|
+
import { DirectoryPath } from "../../types/file/directoryPath.js";
|
|
3
|
+
import { GenerateAction } from "../../actions/portal/generate.js";
|
|
6
4
|
import { PortalGeneratePrompts } from "../../prompts/portal/generate.js";
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const DEFAULT_DESTINATION = path.resolve("./");
|
|
11
|
-
const GENERATED_PORTAL_ARTIFACTS_FOLDER = "generated_portal";
|
|
12
|
-
const GENERATED_PORTAL_ARTIFACTS_ZIP = ".generated_portal.zip";
|
|
13
|
-
class PortalGenerate extends Command {
|
|
5
|
+
import { FlagsProvider } from "../../types/flags-provider.js";
|
|
6
|
+
const DEFAULT_WORKING_DIRECTORY = "./";
|
|
7
|
+
export class PortalGenerate extends Command {
|
|
14
8
|
constructor(argv, config) {
|
|
15
9
|
super(argv, config);
|
|
10
|
+
this.getConfigDir = () => {
|
|
11
|
+
return new DirectoryPath(this.config.configDir);
|
|
12
|
+
};
|
|
16
13
|
this.prompts = new PortalGeneratePrompts();
|
|
17
14
|
}
|
|
18
15
|
async run() {
|
|
19
|
-
const { flags } = await this.parse(
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const validationResult = await this.validatePaths(paths);
|
|
27
|
-
if (validationResult.isFailed()) {
|
|
28
|
-
this.error(validationResult.error);
|
|
29
|
-
}
|
|
30
|
-
await portalGenerateAction.generatePortal(paths, flags, this.config.configDir);
|
|
31
|
-
}
|
|
32
|
-
async getPortalPaths(flags) {
|
|
33
|
-
return {
|
|
34
|
-
sourceFolderPath: flags.folder,
|
|
35
|
-
destinationFolderPath: flags.destination,
|
|
36
|
-
generatedPortalArtifactsFolderPath: path.join(flags.destination, GENERATED_PORTAL_ARTIFACTS_FOLDER),
|
|
37
|
-
generatedPortalArtifactsZipFilePath: path.join(flags.destination, GENERATED_PORTAL_ARTIFACTS_ZIP)
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
async validatePaths(paths) {
|
|
41
|
-
if (!(await fsExtra.pathExists(paths.sourceFolderPath))) {
|
|
42
|
-
return Result.failure(getMessageInRedColor(`Portal build input folder ${paths.sourceFolderPath} does not exist.`));
|
|
43
|
-
}
|
|
44
|
-
if (!(await fsExtra.pathExists(path.dirname(paths.generatedPortalArtifactsFolderPath)))) {
|
|
45
|
-
return Result.failure(getMessageInRedColor(`Destination path ${path.dirname(paths.generatedPortalArtifactsFolderPath)} does not exist.`));
|
|
46
|
-
}
|
|
47
|
-
return Result.success("Paths validated successfully.");
|
|
48
|
-
}
|
|
49
|
-
async checkExistingPortal(paths, flags) {
|
|
50
|
-
if (fsExtra.existsSync(paths.generatedPortalArtifactsFolderPath) && !flags.force && !flags.zip) {
|
|
51
|
-
if (!(await this.prompts.overwriteExistingPortalArtifactsPrompt())) {
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
else if (fsExtra.existsSync(paths.generatedPortalArtifactsZipFilePath) && !flags.force && flags.zip) {
|
|
56
|
-
if (!(await this.prompts.existingDestinationPortalZipPrompt())) {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return true;
|
|
16
|
+
const { flags: { folder, destination, force, zip: zipPortal, "auth-key": authKey } } = await this.parse(PortalGenerate);
|
|
17
|
+
const workingDirectory = new DirectoryPath(folder !== null && folder !== void 0 ? folder : DEFAULT_WORKING_DIRECTORY);
|
|
18
|
+
const buildDirectory = folder ? new DirectoryPath(folder, "src") : workingDirectory.join("src");
|
|
19
|
+
const portalDirectory = destination ? new DirectoryPath(destination) : workingDirectory.join("portal");
|
|
20
|
+
const action = new GenerateAction(this.getConfigDir(), authKey);
|
|
21
|
+
const result = await action.execute(buildDirectory, portalDirectory, force, zipPortal);
|
|
22
|
+
result.mapAll(() => this.prompts.displayOutroMessage(portalDirectory.toString()), (message) => this.prompts.logError(message));
|
|
61
23
|
}
|
|
62
24
|
}
|
|
63
|
-
_a = PortalGenerate;
|
|
64
25
|
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)";
|
|
65
|
-
PortalGenerate.flags = {
|
|
66
|
-
folder: Flags.string({
|
|
67
|
-
parse: async (input) => path.resolve(input),
|
|
68
|
-
default: DEFAULT_FOLDER,
|
|
69
|
-
description: "path to the input directory containing API specifications and config files"
|
|
70
|
-
}),
|
|
71
|
-
destination: Flags.string({
|
|
72
|
-
parse: async (input) => path.resolve(input),
|
|
73
|
-
default: DEFAULT_DESTINATION,
|
|
74
|
-
description: "path to the downloaded portal"
|
|
75
|
-
}),
|
|
76
|
-
force: Flags.boolean({
|
|
77
|
-
char: "f",
|
|
78
|
-
default: false,
|
|
79
|
-
description: "overwrite if a portal exists in the destination"
|
|
80
|
-
}),
|
|
81
|
-
zip: Flags.boolean({
|
|
26
|
+
PortalGenerate.flags = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, FlagsProvider.input), FlagsProvider.destination("portal", "portal")), FlagsProvider.force), { zip: Flags.boolean({
|
|
82
27
|
default: false,
|
|
83
28
|
description: "download the generated portal as a .zip archive"
|
|
84
|
-
}),
|
|
85
|
-
|
|
86
|
-
default: "",
|
|
87
|
-
description: "override current authentication state with an authentication key"
|
|
88
|
-
})
|
|
89
|
-
};
|
|
90
|
-
PortalGenerate.examples = [
|
|
91
|
-
`$ apimatic portal:generate --folder="./portal/" --destination="D:/"
|
|
92
|
-
Your portal has been generated at D:/
|
|
93
|
-
`
|
|
94
|
-
];
|
|
95
|
-
export default PortalGenerate;
|
|
29
|
+
}) }), FlagsProvider.authKey);
|
|
30
|
+
PortalGenerate.examples = [`apimatic portal:generate`, `apimatic portal:generate --input="./" --destination="./portal"`];
|
|
96
31
|
//# sourceMappingURL=generate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/portal/generate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/portal/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,KAAK,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAEvC,MAAM,OAAO,cAAe,SAAQ,OAAO;IAmBzC,YAAY,IAAc,EAAE,MAAc;QACxC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAqBd,iBAAY,GAAG,GAAG,EAAE;YAC1B,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC,CAAC;QAtBA,IAAI,CAAC,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EACJ,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,EAC3E,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAErC,MAAM,gBAAgB,GAAG,IAAI,aAAa,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,yBAAyB,CAAC,CAAC;QAChF,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChG,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEvG,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QACvF,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,EAClE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC5C,CAAC;IACJ,CAAC;;AAtCM,0BAAW,GAChB,sTAAsT,AADtS,CACuS;AAElT,oBAAK,6EACP,aAAa,CAAC,KAAK,GACnB,aAAa,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAC7C,aAAa,CAAC,KAAK,KACtB,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;QACjB,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,iDAAiD;KAC/D,CAAC,KACC,aAAa,CAAC,OAAO,CARd,CASV;AAEK,uBAAQ,GAAG,CAAC,0BAA0B,EAAE,gEAAgE,CAAC,AAAjG,CAAkG"}
|
|
@@ -4,7 +4,7 @@ export default class PortalQuickstart extends Command {
|
|
|
4
4
|
static examples: string[];
|
|
5
5
|
private getSpecFile;
|
|
6
6
|
private getSpecValidationSummary;
|
|
7
|
-
private
|
|
8
|
-
private getGeneratedPortalPath;
|
|
7
|
+
private getWorkingDirectory;
|
|
9
8
|
run(): Promise<void>;
|
|
9
|
+
private getServerPort;
|
|
10
10
|
}
|