@apimatic/cli 1.1.0-beta.9 → 1.2.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/README.md +117 -14
- package/lib/actions/portal/copilot.d.ts +1 -0
- package/lib/actions/portal/copilot.js +12 -12
- package/lib/actions/portal/copilot.js.map +1 -1
- package/lib/actions/portal/generate.js +7 -1
- package/lib/actions/portal/generate.js.map +1 -1
- package/lib/actions/portal/quickstart.d.ts +1 -0
- package/lib/actions/portal/quickstart.js +79 -10
- package/lib/actions/portal/quickstart.js.map +1 -1
- package/lib/actions/portal/serve.d.ts +1 -0
- package/lib/actions/portal/serve.js +77 -20
- package/lib/actions/portal/serve.js.map +1 -1
- package/lib/actions/portal/toc/new-toc.js +8 -20
- package/lib/actions/portal/toc/new-toc.js.map +1 -1
- package/lib/actions/publishing/profile/list.d.ts +11 -0
- package/lib/actions/publishing/profile/list.js +29 -0
- package/lib/actions/publishing/profile/list.js.map +1 -0
- package/lib/actions/sdk/generate.d.ts +9 -5
- package/lib/actions/sdk/generate.js +74 -46
- package/lib/actions/sdk/generate.js.map +1 -1
- package/lib/actions/sdk/merge-source-tree.d.ts +12 -0
- package/lib/actions/sdk/merge-source-tree.js +78 -0
- package/lib/actions/sdk/merge-source-tree.js.map +1 -0
- package/lib/actions/sdk/publish/interactive.d.ts +13 -0
- package/lib/actions/sdk/publish/interactive.js +105 -0
- package/lib/actions/sdk/publish/interactive.js.map +1 -0
- package/lib/actions/sdk/publish/non-interactive.d.ts +14 -0
- package/lib/actions/sdk/publish/non-interactive.js +101 -0
- package/lib/actions/sdk/publish/non-interactive.js.map +1 -0
- package/lib/actions/sdk/publish.d.ts +18 -0
- package/lib/actions/sdk/publish.js +56 -0
- package/lib/actions/sdk/publish.js.map +1 -0
- package/lib/actions/sdk/quickstart.d.ts +1 -0
- package/lib/actions/sdk/quickstart.js +19 -2
- package/lib/actions/sdk/quickstart.js.map +1 -1
- package/lib/actions/sdk/save-changes.d.ts +8 -0
- package/lib/actions/sdk/save-changes.js +93 -0
- package/lib/actions/sdk/save-changes.js.map +1 -0
- package/lib/application/portal/recipe/recipe-generator.js +14 -29
- package/lib/application/portal/recipe/recipe-generator.js.map +1 -1
- package/lib/application/portal/toc/toc-structure-generator.d.ts +3 -19
- package/lib/application/portal/toc/toc-structure-generator.js +43 -33
- package/lib/application/portal/toc/toc-structure-generator.js.map +1 -1
- package/lib/commands/portal/recipe/new.js +2 -2
- package/lib/commands/portal/recipe/new.js.map +1 -1
- package/lib/commands/portal/serve.js +3 -3
- package/lib/commands/portal/serve.js.map +1 -1
- package/lib/commands/portal/toc/new.js +2 -2
- package/lib/commands/portal/toc/new.js.map +1 -1
- package/lib/commands/publishing/profile/list.d.ts +9 -0
- package/lib/commands/publishing/profile/list.js +28 -0
- package/lib/commands/publishing/profile/list.js.map +1 -0
- package/lib/commands/quickstart.js +1 -1
- package/lib/commands/quickstart.js.map +1 -1
- package/lib/commands/sdk/generate.d.ts +6 -2
- package/lib/commands/sdk/generate.js +35 -9
- package/lib/commands/sdk/generate.js.map +1 -1
- package/lib/commands/sdk/publish.d.ts +18 -0
- package/lib/commands/sdk/publish.js +73 -0
- package/lib/commands/sdk/publish.js.map +1 -0
- package/lib/commands/sdk/save-changes.d.ts +14 -0
- package/lib/commands/sdk/save-changes.js +51 -0
- package/lib/commands/sdk/save-changes.js.map +1 -0
- package/lib/hooks/not-found.js +1 -1
- package/lib/hooks/not-found.js.map +1 -1
- package/lib/infrastructure/debounce-service.js +3 -0
- package/lib/infrastructure/debounce-service.js.map +1 -1
- package/lib/infrastructure/env-info.d.ts +2 -0
- package/lib/infrastructure/env-info.js +23 -12
- package/lib/infrastructure/env-info.js.map +1 -1
- package/lib/infrastructure/file-service.d.ts +9 -0
- package/lib/infrastructure/file-service.js +94 -5
- package/lib/infrastructure/file-service.js.map +1 -1
- package/lib/infrastructure/git-service.d.ts +14 -0
- package/lib/infrastructure/git-service.js +90 -0
- package/lib/infrastructure/git-service.js.map +1 -0
- package/lib/infrastructure/launcher-service.d.ts +5 -0
- package/lib/infrastructure/launcher-service.js +35 -2
- package/lib/infrastructure/launcher-service.js.map +1 -1
- package/lib/infrastructure/os-extensions.d.ts +2 -0
- package/lib/infrastructure/os-extensions.js +6 -0
- package/lib/infrastructure/os-extensions.js.map +1 -0
- package/lib/infrastructure/service-error.d.ts +14 -2
- package/lib/infrastructure/service-error.js +26 -9
- package/lib/infrastructure/service-error.js.map +1 -1
- package/lib/infrastructure/services/api-service.d.ts +1 -0
- package/lib/infrastructure/services/api-service.js +26 -2
- package/lib/infrastructure/services/api-service.js.map +1 -1
- package/lib/infrastructure/services/portal-service.d.ts +11 -2
- package/lib/infrastructure/services/portal-service.js +123 -18
- package/lib/infrastructure/services/portal-service.js.map +1 -1
- package/lib/infrastructure/services/publishing-api-service.d.ts +19 -0
- package/lib/infrastructure/services/publishing-api-service.js +111 -0
- package/lib/infrastructure/services/publishing-api-service.js.map +1 -0
- package/lib/infrastructure/services/validation-service.d.ts +21 -0
- package/lib/infrastructure/services/validation-service.js +94 -4
- package/lib/infrastructure/services/validation-service.js.map +1 -1
- package/lib/infrastructure/zip-service.d.ts +2 -2
- package/lib/infrastructure/zip-service.js +46 -25
- package/lib/infrastructure/zip-service.js.map +1 -1
- package/lib/prompts/format.d.ts +0 -2
- package/lib/prompts/format.js +0 -31
- package/lib/prompts/format.js.map +1 -1
- package/lib/prompts/portal/generate.d.ts +1 -1
- package/lib/prompts/portal/generate.js +9 -3
- package/lib/prompts/portal/generate.js.map +1 -1
- package/lib/prompts/portal/quickstart.d.ts +11 -2
- package/lib/prompts/portal/quickstart.js +80 -13
- package/lib/prompts/portal/quickstart.js.map +1 -1
- package/lib/prompts/portal/serve.d.ts +4 -0
- package/lib/prompts/portal/serve.js +20 -1
- package/lib/prompts/portal/serve.js.map +1 -1
- package/lib/prompts/portal/toc/new-toc.d.ts +2 -2
- package/lib/prompts/portal/toc/new-toc.js +3 -3
- package/lib/prompts/portal/toc/new-toc.js.map +1 -1
- package/lib/prompts/prompt.d.ts +6 -0
- package/lib/prompts/prompt.js +45 -0
- package/lib/prompts/prompt.js.map +1 -1
- package/lib/prompts/publishing/profile/list.d.ts +9 -0
- package/lib/prompts/publishing/profile/list.js +27 -0
- package/lib/prompts/publishing/profile/list.js.map +1 -0
- package/lib/prompts/sdk/generate.d.ts +7 -3
- package/lib/prompts/sdk/generate.js +25 -13
- package/lib/prompts/sdk/generate.js.map +1 -1
- package/lib/prompts/sdk/merge-source-tree.d.ts +22 -0
- package/lib/prompts/sdk/merge-source-tree.js +90 -0
- package/lib/prompts/sdk/merge-source-tree.js.map +1 -0
- package/lib/prompts/sdk/publish/interactive.d.ts +30 -0
- package/lib/prompts/sdk/publish/interactive.js +139 -0
- package/lib/prompts/sdk/publish/interactive.js.map +1 -0
- package/lib/prompts/sdk/publish/non-interactive.d.ts +27 -0
- package/lib/prompts/sdk/publish/non-interactive.js +97 -0
- package/lib/prompts/sdk/publish/non-interactive.js.map +1 -0
- package/lib/prompts/sdk/publish.d.ts +12 -0
- package/lib/prompts/sdk/publish.js +16 -0
- package/lib/prompts/sdk/publish.js.map +1 -0
- package/lib/prompts/sdk/quickstart.d.ts +4 -1
- package/lib/prompts/sdk/quickstart.js +30 -13
- package/lib/prompts/sdk/quickstart.js.map +1 -1
- package/lib/prompts/sdk/save-changes.d.ts +21 -0
- package/lib/prompts/sdk/save-changes.js +84 -0
- package/lib/prompts/sdk/save-changes.js.map +1 -0
- package/lib/types/api/account.d.ts +1 -0
- package/lib/types/build/build.d.ts +82 -2
- package/lib/types/build/build.js +161 -0
- package/lib/types/build/build.js.map +1 -1
- package/lib/types/build-context.d.ts +14 -1
- package/lib/types/build-context.js +82 -4
- package/lib/types/build-context.js.map +1 -1
- package/lib/types/events/sdk-changes-saved.d.ts +8 -0
- package/lib/types/events/sdk-changes-saved.js +11 -0
- package/lib/types/events/sdk-changes-saved.js.map +1 -0
- package/lib/types/events/sdk-changes-tracked.d.ts +8 -0
- package/lib/types/events/sdk-changes-tracked.js +11 -0
- package/lib/types/events/sdk-changes-tracked.js.map +1 -0
- package/lib/types/events/sdk-conflicts-resolved.d.ts +8 -0
- package/lib/types/events/sdk-conflicts-resolved.js +11 -0
- package/lib/types/events/sdk-conflicts-resolved.js.map +1 -0
- package/lib/types/events/sdk-publish-validation-failed.d.ts +5 -0
- package/lib/types/events/sdk-publish-validation-failed.js +8 -0
- package/lib/types/events/sdk-publish-validation-failed.js.map +1 -0
- package/lib/types/file/directory.d.ts +10 -1
- package/lib/types/file/directory.js +63 -5
- package/lib/types/file/directory.js.map +1 -1
- package/lib/types/file/directoryPath.js.map +1 -1
- package/lib/types/file/urlPath.d.ts +4 -0
- package/lib/types/file/urlPath.js +9 -0
- package/lib/types/file/urlPath.js.map +1 -1
- package/lib/types/merge-source-tree-context.d.ts +28 -0
- package/lib/types/merge-source-tree-context.js +63 -0
- package/lib/types/merge-source-tree-context.js.map +1 -0
- package/lib/types/package-settings-context.d.ts +10 -0
- package/lib/types/package-settings-context.js +20 -0
- package/lib/types/package-settings-context.js.map +1 -0
- package/lib/types/publish/package-settings-configuration.d.ts +74 -0
- package/lib/types/publish/package-settings-configuration.js +2 -0
- package/lib/types/publish/package-settings-configuration.js.map +1 -0
- package/lib/types/publish/profile-id.d.ts +10 -0
- package/lib/types/publish/profile-id.js +22 -0
- package/lib/types/publish/profile-id.js.map +1 -0
- package/lib/types/publish/publishing-profile.d.ts +26 -0
- package/lib/types/publish/publishing-profile.js +154 -0
- package/lib/types/publish/publishing-profile.js.map +1 -0
- package/lib/types/publish/publishing-profiles.d.ts +12 -0
- package/lib/types/publish/publishing-profiles.js +36 -0
- package/lib/types/publish/publishing-profiles.js.map +1 -0
- package/lib/types/publish/version.d.ts +7 -0
- package/lib/types/publish/version.js +17 -0
- package/lib/types/publish/version.js.map +1 -0
- package/lib/types/publish-api/publish-log.d.ts +20 -0
- package/lib/types/publish-api/publish-log.js +2 -0
- package/lib/types/publish-api/publish-log.js.map +1 -0
- package/lib/types/publish-api/publishing-info.d.ts +4 -0
- package/lib/types/publish-api/publishing-info.js +2 -0
- package/lib/types/publish-api/publishing-info.js.map +1 -0
- package/lib/types/publish-api/publishing-profile-item.d.ts +190 -0
- package/lib/types/publish-api/publishing-profile-item.js +6 -0
- package/lib/types/publish-api/publishing-profile-item.js.map +1 -0
- package/lib/types/save-changes-context.d.ts +17 -0
- package/lib/types/save-changes-context.js +42 -0
- package/lib/types/save-changes-context.js.map +1 -0
- package/lib/types/sdk/generate.d.ts +18 -0
- package/lib/types/sdk/generate.js +25 -0
- package/lib/types/sdk/generate.js.map +1 -1
- package/lib/types/sdk-context.d.ts +5 -4
- package/lib/types/sdk-context.js +26 -13
- package/lib/types/sdk-context.js.map +1 -1
- package/lib/types/sdl/sdl.d.ts +0 -28
- package/lib/types/sdl/sdl.js +1 -128
- package/lib/types/sdl/sdl.js.map +1 -1
- package/lib/types/spec-context.js.map +1 -1
- package/lib/types/temp-context.js.map +1 -1
- package/lib/types/toc/toc-components.d.ts +37 -0
- package/lib/types/toc/toc-components.js +97 -0
- package/lib/types/toc/toc-components.js.map +1 -0
- package/lib/types/toc/toc.d.ts +11 -0
- package/lib/utils/string-utils.d.ts +0 -1
- package/lib/utils/string-utils.js +0 -42
- package/lib/utils/string-utils.js.map +1 -1
- package/package.json +28 -20
- package/lib/types/versioned-build-context.d.ts +0 -15
- package/lib/types/versioned-build-context.js +0 -28
- package/lib/types/versioned-build-context.js.map +0 -1
|
@@ -2,8 +2,11 @@ import { Command, Flags } from "@oclif/core";
|
|
|
2
2
|
import { DirectoryPath } from "../../types/file/directoryPath.js";
|
|
3
3
|
import { FlagsProvider } from "../../types/flags-provider.js";
|
|
4
4
|
import { GenerateAction } from "../../actions/sdk/generate.js";
|
|
5
|
-
import { Language } from "../../types/sdk/generate.js";
|
|
5
|
+
import { CodeGenerationVersion, Language, Stability } from "../../types/sdk/generate.js";
|
|
6
6
|
import { format, intro, outro } from "../../prompts/format.js";
|
|
7
|
+
import { SdkChangesTrackedEvent } from "../../types/events/sdk-changes-tracked.js";
|
|
8
|
+
import { TelemetryService } from "../../infrastructure/services/telemetry-service.js";
|
|
9
|
+
import { SdkConflictsResolvedEvent } from "../../types/events/sdk-conflicts-resolved.js";
|
|
7
10
|
class SdkGenerate extends Command {
|
|
8
11
|
constructor() {
|
|
9
12
|
super(...arguments);
|
|
@@ -12,38 +15,61 @@ class SdkGenerate extends Command {
|
|
|
12
15
|
};
|
|
13
16
|
}
|
|
14
17
|
async run() {
|
|
15
|
-
const { flags: { language, input, destination, force, zip: zipSdk, "auth-key": authKey, "api-version": apiVersion } } = await this.parse(SdkGenerate);
|
|
18
|
+
const { flags: { language, input, destination, force, zip: zipSdk, "auth-key": authKey, "skip-changes": skipChanges, "track-changes": trackChanges, "api-version": apiVersion, "codegen-version": codegenVersion, stability } } = await this.parse(SdkGenerate);
|
|
16
19
|
const workingDirectory = DirectoryPath.createInput(input);
|
|
17
20
|
const buildDirectory = input ? new DirectoryPath(input, "src") : workingDirectory.join("src");
|
|
18
|
-
const sdkDirectory = destination ? new DirectoryPath(destination) :
|
|
21
|
+
const sdkDirectory = destination ? new DirectoryPath(destination) : workingDirectory.join("sdk");
|
|
19
22
|
const commandMetadata = {
|
|
20
23
|
commandName: SdkGenerate.id,
|
|
21
24
|
shell: this.config.shell
|
|
22
25
|
};
|
|
26
|
+
const telemetryService = new TelemetryService(this.getConfigDir());
|
|
23
27
|
intro("Generate SDK");
|
|
24
28
|
const action = new GenerateAction(this.getConfigDir(), commandMetadata, authKey);
|
|
25
|
-
const result = await action.execute(buildDirectory, sdkDirectory, language, force, zipSdk, apiVersion);
|
|
29
|
+
const result = await action.execute(buildDirectory, sdkDirectory, language, force, zipSdk, skipChanges, trackChanges, codegenVersion, stability, apiVersion);
|
|
26
30
|
outro(result);
|
|
31
|
+
await result.mapAll(async (res) => {
|
|
32
|
+
if (res === null || res === void 0 ? void 0 : res.sourceTreeTrackingInitiated) {
|
|
33
|
+
await telemetryService.trackEvent(new SdkChangesTrackedEvent(language), commandMetadata.shell);
|
|
34
|
+
}
|
|
35
|
+
if (res === null || res === void 0 ? void 0 : res.conflictsResolved) {
|
|
36
|
+
await telemetryService.trackEvent(new SdkConflictsResolvedEvent(language), commandMetadata.shell);
|
|
37
|
+
}
|
|
38
|
+
}, async () => { }, async () => { });
|
|
27
39
|
}
|
|
28
40
|
}
|
|
29
41
|
SdkGenerate.summary = "Generate an SDK for your API";
|
|
30
42
|
SdkGenerate.description = `Generate Software Development Kits (SDKs) from API specifications.
|
|
31
43
|
Supports multiple programming languages including Java, C#, Python, JavaScript, and more.`;
|
|
32
44
|
SdkGenerate.cmdTxt = format.cmd("apimatic", "sdk", "generate");
|
|
33
|
-
SdkGenerate.flags = Object.assign(Object.assign(Object.assign(
|
|
45
|
+
SdkGenerate.flags = Object.assign(Object.assign(Object.assign({ language: Flags.string({
|
|
34
46
|
char: "l",
|
|
35
47
|
required: true,
|
|
36
48
|
description: "Programming language for SDK generation",
|
|
37
49
|
options: Object.values(Language).map((p) => p.valueOf()),
|
|
38
|
-
})
|
|
50
|
+
}), destination: Flags.string({
|
|
39
51
|
char: "d",
|
|
40
|
-
description: "
|
|
52
|
+
description: "[default: <input>/sdk/<language> | <input>/sdk/<api-version>/<language>] path where the SDK will be generated"
|
|
53
|
+
}), "skip-changes": Flags.boolean({
|
|
54
|
+
default: false,
|
|
55
|
+
description: "Do not apply the saved changes to the generated SDK"
|
|
41
56
|
}), "api-version": Flags.string({
|
|
42
57
|
description: "Version of the API to use for SDK generation (if multiple versions exist)"
|
|
43
|
-
})
|
|
58
|
+
}), zip: Flags.boolean({
|
|
44
59
|
default: false,
|
|
45
60
|
description: "Download the generated SDK as a .zip archive"
|
|
46
|
-
})
|
|
61
|
+
}), "track-changes": Flags.boolean({
|
|
62
|
+
default: false,
|
|
63
|
+
description: "Enable change tracking for SDK generation (only required for initial setup)"
|
|
64
|
+
}), "codegen-version": Flags.string({
|
|
65
|
+
description: "Version of the code generator to use",
|
|
66
|
+
options: Object.values(CodeGenerationVersion).map((v) => v.valueOf()),
|
|
67
|
+
default: CodeGenerationVersion.V3
|
|
68
|
+
}), "stability": Flags.string({
|
|
69
|
+
description: "Stability level of the generated SDK",
|
|
70
|
+
options: Object.values(Stability).map((s) => s.valueOf()),
|
|
71
|
+
default: Stability.STABLE
|
|
72
|
+
}) }, FlagsProvider.input), FlagsProvider.force), FlagsProvider.authKey);
|
|
47
73
|
SdkGenerate.examples = [
|
|
48
74
|
`${SdkGenerate.cmdTxt} ${format.flag("language", "java")}`,
|
|
49
75
|
`${SdkGenerate.cmdTxt} ${format.flag("language", "csharp")} ${format.flag("input", "./")}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/sdk/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/sdk/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class SdkPublish extends Command {
|
|
3
|
+
static readonly summary = "Generate and publish an SDK to a package registry and/or source repository";
|
|
4
|
+
static readonly description = "Generate and publish an SDK using a publishing profile configured in the APIMatic App. Requires an input directory containing the API specification. Run without flags for a step-by-step interactive experience, or pass all required flags for CI/CD automation.";
|
|
5
|
+
static readonly cmdTxt: string;
|
|
6
|
+
static flags: {
|
|
7
|
+
'publish-type': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
language: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
destination: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
'profile-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
version: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
};
|
|
15
|
+
static examples: string[];
|
|
16
|
+
run(): Promise<void>;
|
|
17
|
+
private readonly getConfigDir;
|
|
18
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import { DirectoryPath } from '../../types/file/directoryPath.js';
|
|
3
|
+
import { FlagsProvider } from '../../types/flags-provider.js';
|
|
4
|
+
import { Language } from '../../types/sdk/generate.js';
|
|
5
|
+
import { format, intro, outro } from '../../prompts/format.js';
|
|
6
|
+
import { PublishType } from '../../types/publish-api/publishing-profile-item.js';
|
|
7
|
+
import { TelemetryService } from '../../infrastructure/services/telemetry-service.js';
|
|
8
|
+
import { SdkPublishValidationFailedEvent } from '../../types/events/sdk-publish-validation-failed.js';
|
|
9
|
+
import { SdkPublishInteractiveAction } from '../../actions/sdk/publish/interactive.js';
|
|
10
|
+
import { SdkPublishNonInteractiveAction } from '../../actions/sdk/publish/non-interactive.js';
|
|
11
|
+
class SdkPublish extends Command {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.getConfigDir = () => {
|
|
15
|
+
return new DirectoryPath(this.config.configDir);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
async run() {
|
|
19
|
+
const { flags: { 'profile-id': profileId, version, destination, language, force, input, 'publish-type': publishType, 'dry-run': dryRun } } = await this.parse(SdkPublish);
|
|
20
|
+
const publishTypes = [...new Set(publishType)];
|
|
21
|
+
const interactive = this.argv.length === 0;
|
|
22
|
+
const commandMetadata = {
|
|
23
|
+
commandName: SdkPublish.id,
|
|
24
|
+
shell: this.config.shell
|
|
25
|
+
};
|
|
26
|
+
const workingDirectory = DirectoryPath.createInput(input);
|
|
27
|
+
const buildDirectory = input ? new DirectoryPath(input, 'src') : workingDirectory.join('src');
|
|
28
|
+
const sdkDirectory = destination ? new DirectoryPath(destination) : workingDirectory.join('sdk');
|
|
29
|
+
const configDir = this.getConfigDir();
|
|
30
|
+
const telemetryService = new TelemetryService(configDir);
|
|
31
|
+
const onPublishSdkError = interactive
|
|
32
|
+
? (errorMessage) => telemetryService.trackEvent(new SdkPublishValidationFailedEvent(errorMessage, SdkPublish.id, { interactive: true }), commandMetadata.shell)
|
|
33
|
+
: (errorMessage) => telemetryService.trackEvent(new SdkPublishValidationFailedEvent(errorMessage, SdkPublish.id, Object.assign(Object.assign({ 'profile-id': profileId, version,
|
|
34
|
+
language }, (force && { force })), { 'publish-type': publishTypes })), commandMetadata.shell);
|
|
35
|
+
intro('Publish SDK');
|
|
36
|
+
const result = interactive
|
|
37
|
+
? await new SdkPublishInteractiveAction(configDir, commandMetadata).execute(workingDirectory, onPublishSdkError)
|
|
38
|
+
: await new SdkPublishNonInteractiveAction(configDir, commandMetadata).execute(buildDirectory, sdkDirectory, language, publishTypes, force, dryRun, onPublishSdkError, profileId, version);
|
|
39
|
+
outro(result);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
SdkPublish.summary = 'Generate and publish an SDK to a package registry and/or source repository';
|
|
43
|
+
SdkPublish.description = `Generate and publish an SDK using a publishing profile configured in the APIMatic App. Requires an input directory containing the API specification. Run without flags for a step-by-step interactive experience, or pass all required flags for CI/CD automation.`;
|
|
44
|
+
SdkPublish.cmdTxt = format.cmd('apimatic', 'sdk', 'publish');
|
|
45
|
+
SdkPublish.flags = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ 'profile-id': Flags.string({
|
|
46
|
+
char: 'p',
|
|
47
|
+
description: 'Id of the publishing profile to use.'
|
|
48
|
+
}), version: Flags.string({
|
|
49
|
+
char: 'v',
|
|
50
|
+
description: 'Semantic version of the SDK to publish (e.g. 1.0.0).'
|
|
51
|
+
}) }, FlagsProvider.destination('sdk', 'sdk')), { language: Flags.string({
|
|
52
|
+
char: 'l',
|
|
53
|
+
description: 'Language of the SDK to generate and publish.',
|
|
54
|
+
options: Object.values(Language)
|
|
55
|
+
.filter((l) => l !== Language.GO)
|
|
56
|
+
.map((l) => l.valueOf())
|
|
57
|
+
}) }), FlagsProvider.force), FlagsProvider.input), { 'publish-type': Flags.string({
|
|
58
|
+
description: "One or more publishing targets: 'package' for a package registry, 'sourcecode' for a git repository.",
|
|
59
|
+
options: [PublishType.PackagePublishing, PublishType.SourceCodePublishing],
|
|
60
|
+
multiple: true,
|
|
61
|
+
multipleNonGreedy: true
|
|
62
|
+
}), 'dry-run': Flags.boolean({
|
|
63
|
+
default: false,
|
|
64
|
+
description: 'Generate the SDK locally for review without publishing.'
|
|
65
|
+
}) });
|
|
66
|
+
SdkPublish.examples = [
|
|
67
|
+
`${SdkPublish.cmdTxt}`,
|
|
68
|
+
`${SdkPublish.cmdTxt} ${format.flag('profile-id', 'a1b2c3d4e5f6a1b2c3d4e5f6')} ${format.flag('language', 'typescript')} ${format.flag('version', '1.0.0')} ${format.flag('publish-type', PublishType.PackagePublishing)} ${format.flag('publish-type', PublishType.SourceCodePublishing)}`,
|
|
69
|
+
`${SdkPublish.cmdTxt} ${format.flag('profile-id', 'b2c3d4e5f6a1b2c3d4e5f6a1')} ${format.flag('language', 'java')} ${format.flag('version', '2.0.0')} ${format.flag('publish-type', PublishType.SourceCodePublishing)}`,
|
|
70
|
+
`${SdkPublish.cmdTxt} ${format.flag('profile-id', 'c3d4e5f6a1b2c3d4e5f6a1b2')} ${format.flag('language', 'python')} ${format.flag('version', '1.0.0')} ${format.flag('publish-type', PublishType.PackagePublishing)} ${format.flag('dry-run')}`
|
|
71
|
+
];
|
|
72
|
+
export default SdkPublish;
|
|
73
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/sdk/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
export default class SaveChanges extends Command {
|
|
3
|
+
static readonly summary = "Save customizations made to an auto-generated SDK";
|
|
4
|
+
static readonly description = "Requires an input directory with API specifications, a path to the updated SDK directory, and the programming language.";
|
|
5
|
+
static readonly cmdTxt: string;
|
|
6
|
+
static flags: {
|
|
7
|
+
language: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
sdk: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
"api-version": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
static examples: string[];
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
private readonly getConfigDir;
|
|
14
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Command, Flags } from "@oclif/core";
|
|
2
|
+
import { format, intro, outro } from "../../prompts/format.js";
|
|
3
|
+
import { DirectoryPath } from "../../types/file/directoryPath.js";
|
|
4
|
+
import { SaveChangesAction } from "../../actions/sdk/save-changes.js";
|
|
5
|
+
import { Language } from "../../types/sdk/generate.js";
|
|
6
|
+
import { FlagsProvider } from "../../types/flags-provider.js";
|
|
7
|
+
import { TelemetryService } from "../../infrastructure/services/telemetry-service.js";
|
|
8
|
+
import { SdkChangesSavedEvent } from "../../types/events/sdk-changes-saved.js";
|
|
9
|
+
class SaveChanges extends Command {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.getConfigDir = () => {
|
|
13
|
+
return new DirectoryPath(this.config.configDir);
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
async run() {
|
|
17
|
+
const { flags: { sdk, language, input, "api-version": apiVersion } } = await this.parse(SaveChanges);
|
|
18
|
+
const workingDirectory = DirectoryPath.createInput(input);
|
|
19
|
+
const buildDirectory = workingDirectory.join("src");
|
|
20
|
+
const sdkDirectoryInput = sdk ? new DirectoryPath(sdk) : undefined;
|
|
21
|
+
const commandMetadata = {
|
|
22
|
+
commandName: SaveChanges.id,
|
|
23
|
+
shell: this.config.shell
|
|
24
|
+
};
|
|
25
|
+
const telemetryService = new TelemetryService(this.getConfigDir());
|
|
26
|
+
intro("Save Changes");
|
|
27
|
+
const action = new SaveChangesAction();
|
|
28
|
+
const result = await action.execute(workingDirectory, buildDirectory, sdkDirectoryInput, language, apiVersion);
|
|
29
|
+
outro(result);
|
|
30
|
+
await result.mapAll(async () => await telemetryService.trackEvent(new SdkChangesSavedEvent(language), commandMetadata.shell), async () => { }, async () => { });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
SaveChanges.summary = "Save customizations made to an auto-generated SDK";
|
|
34
|
+
SaveChanges.description = "Requires an input directory with API specifications, a path to the updated SDK directory, and the programming language.";
|
|
35
|
+
SaveChanges.cmdTxt = format.cmd("apimatic", "sdk", "save-changes");
|
|
36
|
+
SaveChanges.flags = Object.assign({ language: Flags.string({
|
|
37
|
+
char: "l",
|
|
38
|
+
required: true,
|
|
39
|
+
description: "Programming language of the SDK",
|
|
40
|
+
options: Object.values(Language).map((p) => p.valueOf())
|
|
41
|
+
}), "sdk": Flags.string({
|
|
42
|
+
description: "[default: ./sdk/<language> | ./sdk/<api-version>/<language>] path to the folder containing the updated SDK."
|
|
43
|
+
}), "api-version": Flags.string({
|
|
44
|
+
description: "Version of the API where changes should be saved (if multiple versions exist)."
|
|
45
|
+
}) }, FlagsProvider.input);
|
|
46
|
+
SaveChanges.examples = [
|
|
47
|
+
`${SaveChanges.cmdTxt} ${format.flag("language", "csharp")}`,
|
|
48
|
+
`${SaveChanges.cmdTxt} ${format.flag("language", "java")} ${format.flag("sdk", "./sdk")}`
|
|
49
|
+
];
|
|
50
|
+
export default SaveChanges;
|
|
51
|
+
//# sourceMappingURL=save-changes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"save-changes.js","sourceRoot":"","sources":["../../../src/commands/sdk/save-changes.ts"],"names":[],"mappings":"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"}
|
package/lib/hooks/not-found.js
CHANGED
|
@@ -37,7 +37,7 @@ const hook = async function (opts) {
|
|
|
37
37
|
}
|
|
38
38
|
if (response) {
|
|
39
39
|
const confirmedSuggestion = suggestion;
|
|
40
|
-
let argv = (
|
|
40
|
+
let argv = (_a = opts.argv) !== null && _a !== void 0 ? _a : [];
|
|
41
41
|
if (confirmedSuggestion.startsWith("help:")) {
|
|
42
42
|
argv = confirmedSuggestion.split(":").slice(1);
|
|
43
43
|
suggestion = "help";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"not-found.js","sourceRoot":"","sources":["../../src/hooks/not-found.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,OAAO,EAAQ,cAAc,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,IAAI,GAAyB,KAAK,WAAW,IAAI;;IACrD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEhG,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CACtG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAChC,CAAC;IAEF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEpC,IAAI,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,OAAO,GAAG,GAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,CAAC;IAED,IAAI,UAAyB,CAAC;IAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,UAAU,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzF,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,kBAAkB,GAAG,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEvF,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC;IAEzE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,oCAAoC,EAAE;YACxE,IAAI,EAAE,GAAG;SACV,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,kBAAmB,CAAC,CAAC;IAC9D,CAAC;IAAC,WAAM,CAAC;QACP,QAAQ,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,mBAAmB,GAAG,UAAW,CAAC;QACxC,IAAI,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"not-found.js","sourceRoot":"","sources":["../../src/hooks/not-found.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,OAAO,EAAQ,cAAc,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,IAAI,GAAyB,KAAK,WAAW,IAAI;;IACrD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEhG,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CACtG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAChC,CAAC;IAEF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEpC,IAAI,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,OAAO,GAAG,GAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,CAAC;IAED,IAAI,UAAyB,CAAC;IAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,UAAU,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzF,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,kBAAkB,GAAG,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEvF,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC;IAEzE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,oCAAoC,EAAE;YACxE,IAAI,EAAE,GAAG;SACV,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,kBAAmB,CAAC,CAAC;IAC9D,CAAC;IAAC,WAAM,CAAC;QACP,QAAQ,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,mBAAmB,GAAG,UAAW,CAAC;QACxC,IAAI,IAAI,GAAG,MAAA,IAAI,CAAC,IAAI,mCAAI,EAAE,CAAC;QAE3B,IAAI,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/C,UAAU,GAAG,MAAM,CAAC;QACtB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,oCAAoC,EAAE;QACxE,IAAI,EAAE,GAAG;KACV,CAAC,CAAC;AAEL,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debounce-service.js","sourceRoot":"","sources":["../../src/infrastructure/debounce-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAElD,MAAM,OAAO,eAAe;IAM1B,YAAY,aAAqB,GAAG;QAL5B,iBAAY,GAAG,KAAK,CAAC;QACrB,kBAAa,GAAiC,IAAI,CAAC;QACnD,kBAAa,GAA0B,IAAI,CAAC;QAIlD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAA4B;QACnD,kCAAkC;QAClC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAE7B,iFAAiF;QACjF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;YACzC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAE1B,IAAI,CAAC;gBACH,0CAA0C;gBAC1C,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;oBAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC1B,MAAM,cAAc,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"debounce-service.js","sourceRoot":"","sources":["../../src/infrastructure/debounce-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAElD,MAAM,OAAO,eAAe;IAM1B,YAAY,aAAqB,GAAG;QAL5B,iBAAY,GAAG,KAAK,CAAC;QACrB,kBAAa,GAAiC,IAAI,CAAC;QACnD,kBAAa,GAA0B,IAAI,CAAC;QAIlD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAA4B;QACnD,kCAAkC;QAClC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAE7B,iFAAiF;QACjF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;YACzC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAE1B,IAAI,CAAC;gBACH,0CAA0C;gBAC1C,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;oBAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC1B,MAAM,cAAc,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC;IAED,yCAAyC;IAClC,KAAK;QACV,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -3,10 +3,12 @@ declare class EnvInfo {
|
|
|
3
3
|
private static cachedUserAgent;
|
|
4
4
|
private static cachedBaseUrl;
|
|
5
5
|
private static cachedAuthBaseUrl;
|
|
6
|
+
private static cachedPublishingBaseUrl;
|
|
6
7
|
getUserAgent(shell: string): string;
|
|
7
8
|
getCLIVersion(): string;
|
|
8
9
|
getBaseUrl(): string | undefined;
|
|
9
10
|
getAuthBaseUrl(): string | undefined;
|
|
11
|
+
getPublishingBaseUrl(): string | undefined;
|
|
10
12
|
}
|
|
11
13
|
export declare const envInfo: EnvInfo;
|
|
12
14
|
export {};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import os from
|
|
2
|
-
import { fileURLToPath } from
|
|
3
|
-
import { dirname, join } from
|
|
4
|
-
import fs from
|
|
1
|
+
import os from 'os';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
import { dirname, join } from 'path';
|
|
4
|
+
import fs from 'fs-extra';
|
|
5
5
|
class EnvInfo {
|
|
6
6
|
getUserAgent(shell) {
|
|
7
7
|
if (!EnvInfo.cachedUserAgent) {
|
|
8
8
|
const osInfo = `${os.platform()} ${os.release()}`;
|
|
9
|
-
const engine =
|
|
9
|
+
const engine = 'Node.js';
|
|
10
10
|
const engineVersion = process.version;
|
|
11
11
|
EnvInfo.cachedUserAgent = `APIMATIC CLI/${this.getCLIVersion()} - (OS: ${osInfo}, Engine: ${engine}/${engineVersion}, Shell: ${shell})`;
|
|
12
12
|
}
|
|
@@ -19,15 +19,15 @@ class EnvInfo {
|
|
|
19
19
|
try {
|
|
20
20
|
const __filename = fileURLToPath(import.meta.url);
|
|
21
21
|
const __dirname = dirname(__filename);
|
|
22
|
-
const pkgPath = join(__dirname,
|
|
23
|
-
const pkgJson = fs.readFileSync(pkgPath,
|
|
22
|
+
const pkgPath = join(__dirname, '../../package.json');
|
|
23
|
+
const pkgJson = fs.readFileSync(pkgPath, 'utf-8');
|
|
24
24
|
const pkg = JSON.parse(pkgJson);
|
|
25
|
-
const version = pkg.version ||
|
|
25
|
+
const version = pkg.version || 'unknown';
|
|
26
26
|
EnvInfo.cachedCliVersion = version;
|
|
27
27
|
return version;
|
|
28
28
|
}
|
|
29
29
|
catch (_a) {
|
|
30
|
-
return
|
|
30
|
+
return 'unknown';
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
getBaseUrl() {
|
|
@@ -36,7 +36,7 @@ class EnvInfo {
|
|
|
36
36
|
}
|
|
37
37
|
const envBaseUrls = process.env.APIMATIC_BASE_URL;
|
|
38
38
|
if (envBaseUrls) {
|
|
39
|
-
EnvInfo.cachedBaseUrl = envBaseUrls.split(
|
|
39
|
+
EnvInfo.cachedBaseUrl = envBaseUrls.split(';')[0];
|
|
40
40
|
}
|
|
41
41
|
return EnvInfo.cachedBaseUrl;
|
|
42
42
|
}
|
|
@@ -46,11 +46,22 @@ class EnvInfo {
|
|
|
46
46
|
}
|
|
47
47
|
const envBaseUrls = process.env.APIMATIC_BASE_URL;
|
|
48
48
|
if (envBaseUrls) {
|
|
49
|
-
const baseUrls = envBaseUrls.split(
|
|
50
|
-
EnvInfo.cachedAuthBaseUrl = baseUrls.length ===
|
|
49
|
+
const baseUrls = envBaseUrls.split(';');
|
|
50
|
+
EnvInfo.cachedAuthBaseUrl = baseUrls.length === 3 ? baseUrls[1] : undefined;
|
|
51
51
|
}
|
|
52
52
|
return EnvInfo.cachedAuthBaseUrl;
|
|
53
53
|
}
|
|
54
|
+
getPublishingBaseUrl() {
|
|
55
|
+
if (EnvInfo.cachedPublishingBaseUrl) {
|
|
56
|
+
return EnvInfo.cachedPublishingBaseUrl;
|
|
57
|
+
}
|
|
58
|
+
const envBaseUrls = process.env.APIMATIC_BASE_URL;
|
|
59
|
+
if (envBaseUrls) {
|
|
60
|
+
const baseUrls = envBaseUrls.split(';');
|
|
61
|
+
EnvInfo.cachedPublishingBaseUrl = baseUrls.length === 3 ? baseUrls[2] : undefined;
|
|
62
|
+
}
|
|
63
|
+
return EnvInfo.cachedPublishingBaseUrl;
|
|
64
|
+
}
|
|
54
65
|
}
|
|
55
66
|
EnvInfo.cachedCliVersion = null;
|
|
56
67
|
EnvInfo.cachedUserAgent = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-info.js","sourceRoot":"","sources":["../../src/infrastructure/env-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,MAAM,OAAO;
|
|
1
|
+
{"version":3,"file":"env-info.js","sourceRoot":"","sources":["../../src/infrastructure/env-info.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,17 +2,23 @@ import fs from "fs";
|
|
|
2
2
|
import { FilePath } from "../types/file/filePath.js";
|
|
3
3
|
import { DirectoryPath } from "../types/file/directoryPath.js";
|
|
4
4
|
import { Directory } from "../types/file/directory.js";
|
|
5
|
+
import { FileName } from "../types/file/fileName.js";
|
|
5
6
|
export declare class FileService {
|
|
6
7
|
fileExists(file: FilePath): Promise<boolean>;
|
|
8
|
+
fileExistsSync(file: FilePath): boolean;
|
|
7
9
|
directoryExists(dir: DirectoryPath): Promise<boolean>;
|
|
10
|
+
directoryExistsSync(dir: DirectoryPath): boolean;
|
|
8
11
|
directoryEmpty(dir: DirectoryPath): Promise<boolean>;
|
|
9
12
|
cleanDirectory(dir: DirectoryPath): Promise<void>;
|
|
13
|
+
cleanDirectoryExcluding(dir: DirectoryPath, excludeNames: FileName[]): Promise<void>;
|
|
10
14
|
createDirectoryIfNotExists(dir: DirectoryPath): Promise<void>;
|
|
11
15
|
getDirectory(directoryPath: DirectoryPath): Promise<Directory>;
|
|
12
16
|
getSubDirectoriesPaths(dir: DirectoryPath): Promise<DirectoryPath[]>;
|
|
13
17
|
copyDirectoryContents(source: DirectoryPath, destination: DirectoryPath): Promise<void>;
|
|
18
|
+
copyDirectoryExcluding(source: DirectoryPath, destination: DirectoryPath, excludeNames: FileName[]): Promise<void>;
|
|
14
19
|
deleteFile(filePath: FilePath): Promise<void>;
|
|
15
20
|
deleteDirectory(dirPath: DirectoryPath): Promise<void>;
|
|
21
|
+
pollDeleteDirectory(dirPath: DirectoryPath, onDeleteFailurePersists: () => void): Promise<void>;
|
|
16
22
|
getRelativePath(filePath: FilePath, basePath: DirectoryPath): string;
|
|
17
23
|
getStream(filePath: FilePath): Promise<fs.ReadStream>;
|
|
18
24
|
getContents(filePath: FilePath): Promise<string>;
|
|
@@ -21,5 +27,8 @@ export declare class FileService {
|
|
|
21
27
|
writeContents(filePath: FilePath, contents: string): Promise<void>;
|
|
22
28
|
copy(source: FilePath, destination: FilePath): Promise<void>;
|
|
23
29
|
copyToDir(source: FilePath, destination: DirectoryPath): Promise<void>;
|
|
30
|
+
readFile(filePath: FilePath): Promise<string>;
|
|
24
31
|
isZipFile(filePath: FilePath): Promise<boolean>;
|
|
32
|
+
hasContent(file: FilePath, content: string): Promise<boolean>;
|
|
33
|
+
getAvailableDirectoryPath(currentPath: DirectoryPath): Promise<DirectoryPath>;
|
|
25
34
|
}
|
|
@@ -16,6 +16,15 @@ export class FileService {
|
|
|
16
16
|
return false;
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
+
fileExistsSync(file) {
|
|
20
|
+
try {
|
|
21
|
+
const stat = fsExtra.statSync(file.toString());
|
|
22
|
+
return stat.isFile();
|
|
23
|
+
}
|
|
24
|
+
catch (_a) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
19
28
|
async directoryExists(dir) {
|
|
20
29
|
try {
|
|
21
30
|
const stat = await fsExtra.stat(dir.toString());
|
|
@@ -25,6 +34,15 @@ export class FileService {
|
|
|
25
34
|
return false;
|
|
26
35
|
}
|
|
27
36
|
}
|
|
37
|
+
directoryExistsSync(dir) {
|
|
38
|
+
try {
|
|
39
|
+
const stat = fsExtra.statSync(dir.toString());
|
|
40
|
+
return stat.isDirectory();
|
|
41
|
+
}
|
|
42
|
+
catch (_a) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
28
46
|
async directoryEmpty(dir) {
|
|
29
47
|
try {
|
|
30
48
|
const files = await fsExtra.readdir(dir.toString());
|
|
@@ -38,6 +56,15 @@ export class FileService {
|
|
|
38
56
|
await fsExtra.ensureDir(dir.toString());
|
|
39
57
|
await fsExtra.emptyDir(dir.toString()); // removes everything inside, keeps the dir
|
|
40
58
|
}
|
|
59
|
+
async cleanDirectoryExcluding(dir, excludeNames) {
|
|
60
|
+
await fsExtra.ensureDir(dir.toString());
|
|
61
|
+
const entries = await fsExtra.readdir(dir.toString());
|
|
62
|
+
await Promise.all(entries
|
|
63
|
+
.filter((entry) => !excludeNames.find((exclude) => exclude.toString() === entry))
|
|
64
|
+
.map(async (entry) => {
|
|
65
|
+
return fsExtra.remove(dir.join(entry).toString());
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
41
68
|
async createDirectoryIfNotExists(dir) {
|
|
42
69
|
await fsExtra.ensureDir(dir.toString());
|
|
43
70
|
}
|
|
@@ -46,16 +73,22 @@ export class FileService {
|
|
|
46
73
|
const results = await Promise.all(entries.map(async (entry) => {
|
|
47
74
|
const fullPath = path.join(directoryPath.toString(), entry);
|
|
48
75
|
const stat = await fsExtra.stat(fullPath);
|
|
49
|
-
return stat.isDirectory() ? await this.getDirectory(new DirectoryPath(fullPath)) : new FileName(entry);
|
|
76
|
+
return stat.isDirectory() ? await this.getDirectory(new DirectoryPath(fullPath)) : { fileName: new FileName(entry) };
|
|
50
77
|
}));
|
|
51
78
|
return new Directory(directoryPath, results);
|
|
52
79
|
}
|
|
53
80
|
async getSubDirectoriesPaths(dir) {
|
|
54
81
|
try {
|
|
55
|
-
const entries = await fsExtra.readdir(dir.toString()
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
82
|
+
const entries = await fsExtra.readdir(dir.toString());
|
|
83
|
+
const directories = [];
|
|
84
|
+
for (const entry of entries) {
|
|
85
|
+
const fullPath = dir.join(entry).toString();
|
|
86
|
+
const stat = await fsExtra.stat(fullPath);
|
|
87
|
+
if (stat.isDirectory()) {
|
|
88
|
+
directories.push(new DirectoryPath(fullPath));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return directories;
|
|
59
92
|
}
|
|
60
93
|
catch (_a) {
|
|
61
94
|
return [];
|
|
@@ -69,6 +102,21 @@ export class FileService {
|
|
|
69
102
|
await fsExtra.copy(srcEntry, destEntry);
|
|
70
103
|
}));
|
|
71
104
|
}
|
|
105
|
+
async copyDirectoryExcluding(source, destination, excludeNames) {
|
|
106
|
+
await this.createDirectoryIfNotExists(destination);
|
|
107
|
+
const entries = await fsExtra.readdir(source.toString());
|
|
108
|
+
await Promise.all(entries
|
|
109
|
+
.filter((entry) => !excludeNames.find((exclude) => exclude.toString() === entry))
|
|
110
|
+
.map(async (entry) => {
|
|
111
|
+
const sourcePath = path.join(source.toString(), entry);
|
|
112
|
+
const destPath = path.join(destination.toString(), entry);
|
|
113
|
+
const stat = await fsExtra.stat(sourcePath);
|
|
114
|
+
if (stat.isDirectory()) {
|
|
115
|
+
return this.copyDirectoryExcluding(new DirectoryPath(sourcePath), new DirectoryPath(destPath), excludeNames);
|
|
116
|
+
}
|
|
117
|
+
return fsExtra.copyFile(sourcePath, destPath);
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
72
120
|
async deleteFile(filePath) {
|
|
73
121
|
const exists = await this.fileExists(filePath);
|
|
74
122
|
if (exists) {
|
|
@@ -81,6 +129,19 @@ export class FileService {
|
|
|
81
129
|
await fsExtra.remove(dirPath.toString());
|
|
82
130
|
}
|
|
83
131
|
}
|
|
132
|
+
async pollDeleteDirectory(dirPath, onDeleteFailurePersists) {
|
|
133
|
+
const timeoutMs = 5 * 60 * 1000;
|
|
134
|
+
const deadline = Date.now() + timeoutMs;
|
|
135
|
+
const deleteFailurePersistsMaxDelay = Date.now() + 5 * 1000;
|
|
136
|
+
let actionPerformed = false;
|
|
137
|
+
while (Date.now() < deadline && await this.deleteDirectory(dirPath).then(() => false).catch(() => true)) {
|
|
138
|
+
if (!actionPerformed && Date.now() > deleteFailurePersistsMaxDelay) {
|
|
139
|
+
onDeleteFailurePersists();
|
|
140
|
+
actionPerformed = true;
|
|
141
|
+
}
|
|
142
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
84
145
|
getRelativePath(filePath, basePath) {
|
|
85
146
|
const filePathStr = filePath.toString();
|
|
86
147
|
const basePathStr = basePath.toString();
|
|
@@ -113,6 +174,9 @@ export class FileService {
|
|
|
113
174
|
async copyToDir(source, destination) {
|
|
114
175
|
await fsExtra.copyFile(source.toString(), source.replaceDirectory(destination).toString());
|
|
115
176
|
}
|
|
177
|
+
async readFile(filePath) {
|
|
178
|
+
return await fsExtra.readFile(filePath.toString(), "utf-8");
|
|
179
|
+
}
|
|
116
180
|
async isZipFile(filePath) {
|
|
117
181
|
try {
|
|
118
182
|
const buffer = await fsExtra.readFile(filePath.toString());
|
|
@@ -126,6 +190,31 @@ export class FileService {
|
|
|
126
190
|
return false;
|
|
127
191
|
}
|
|
128
192
|
}
|
|
193
|
+
async hasContent(file, content) {
|
|
194
|
+
return (await this.fileExists(file)) && (await this.readFile(file)).includes(content);
|
|
195
|
+
}
|
|
196
|
+
async getAvailableDirectoryPath(currentPath) {
|
|
197
|
+
if (!(await this.directoryExists(currentPath)))
|
|
198
|
+
return currentPath;
|
|
199
|
+
const dir = path.dirname(currentPath.toString());
|
|
200
|
+
let baseName = path.basename(currentPath.toString());
|
|
201
|
+
// Strip existing " (n)" suffix using string methods
|
|
202
|
+
if (baseName.endsWith(')')) {
|
|
203
|
+
const open = baseName.lastIndexOf('(');
|
|
204
|
+
if (open !== -1 && baseName[open - 1] === ' ') {
|
|
205
|
+
const inner = baseName.slice(open + 1, -1);
|
|
206
|
+
if (inner.length > 0 && !isNaN(Number(inner))) {
|
|
207
|
+
baseName = baseName.slice(0, open - 1);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
let counter = 1;
|
|
212
|
+
let newPath;
|
|
213
|
+
do {
|
|
214
|
+
newPath = path.join(dir, `${baseName} (${counter++})`);
|
|
215
|
+
} while (await this.directoryExists(new DirectoryPath(newPath)));
|
|
216
|
+
return new DirectoryPath(newPath);
|
|
217
|
+
}
|
|
129
218
|
}
|
|
130
219
|
const streamPipeline = promisify(pipeline);
|
|
131
220
|
//# sourceMappingURL=file-service.js.map
|