@apimatic/cli 1.1.0-alpha.8 → 1.1.0-alpha.9
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 +7 -7
- package/lib/actions/portal/toc/new-toc.js +134 -0
- package/lib/application/portal/{new/toc → toc}/sdl-parser.d.ts +3 -3
- package/lib/application/portal/toc/sdl-parser.js +53 -0
- package/lib/application/portal/{new/toc → toc}/toc-content-parser.d.ts +1 -1
- package/lib/application/portal/toc/toc-content-parser.js +46 -0
- package/lib/application/portal/{new/toc → toc}/toc-structure-generator.d.ts +1 -1
- package/lib/application/portal/toc/toc-structure-generator.js +88 -0
- package/lib/commands/portal/{new/toc.d.ts → toc/new.d.ts} +1 -1
- package/lib/commands/portal/{new/toc.js → toc/new.js} +13 -13
- package/lib/prompts/portal/{new/toc.js → toc/new-toc.js} +1 -1
- package/package.json +1 -1
- package/lib/actions/portal/new/toc.js +0 -134
- package/lib/application/portal/new/toc/sdl-parser.js +0 -53
- package/lib/application/portal/new/toc/toc-content-parser.js +0 -46
- package/lib/application/portal/new/toc/toc-structure-generator.js +0 -88
- /package/lib/actions/portal/{new/toc.d.ts → toc/new-toc.d.ts} +0 -0
- /package/lib/prompts/portal/{new/toc.d.ts → toc/new-toc.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ USAGE
|
|
|
42
42
|
* [`apimatic autocomplete [SHELL]`](#apimatic-autocomplete-shell)
|
|
43
43
|
* [`apimatic help [COMMAND]`](#apimatic-help-command)
|
|
44
44
|
* [`apimatic portal:generate`](#apimatic-portalgenerate)
|
|
45
|
-
* [`apimatic portal:new
|
|
45
|
+
* [`apimatic portal:toc:new`](#apimatic-portaltocnew)
|
|
46
46
|
* [`apimatic portal:quickstart`](#apimatic-portalquickstart)
|
|
47
47
|
* [`apimatic portal:serve`](#apimatic-portalserve)
|
|
48
48
|
* [`apimatic sdk:generate`](#apimatic-sdkgenerate)
|
|
@@ -244,13 +244,13 @@ EXAMPLES
|
|
|
244
244
|
|
|
245
245
|
_See code: [src/commands/portal/generate.ts](https://github.com/apimatic/apimatic-cli/blob/alpha/src/commands/portal/generate.ts)_
|
|
246
246
|
|
|
247
|
-
## `apimatic portal:new
|
|
247
|
+
## `apimatic portal:toc:new`
|
|
248
248
|
|
|
249
249
|
Generates a TOC file based on the content directory and spec folder provided in your working directory
|
|
250
250
|
|
|
251
251
|
```
|
|
252
252
|
USAGE
|
|
253
|
-
$ apimatic portal:new
|
|
253
|
+
$ apimatic portal:toc:new [--destination <value>] [--folder <value>] [--force] [--expand-endpoints]
|
|
254
254
|
[--expand-models]
|
|
255
255
|
|
|
256
256
|
FLAGS
|
|
@@ -276,17 +276,17 @@ DESCRIPTION
|
|
|
276
276
|
https://docs.apimatic.io/platform-api/#/http/guides/generating-on-prem-api-portal/overview-generating-api-portal
|
|
277
277
|
|
|
278
278
|
EXAMPLES
|
|
279
|
-
$ apimatic portal:new
|
|
279
|
+
$ apimatic portal:toc:new --destination="./portal/content/"
|
|
280
280
|
A new toc file has been created at ./portal/content/toc.yml
|
|
281
281
|
|
|
282
|
-
$ apimatic portal:new
|
|
282
|
+
$ apimatic portal:toc:new --folder="./my-project"
|
|
283
283
|
A new toc file has been created at ./my-project/content/toc.yml
|
|
284
284
|
|
|
285
|
-
$ apimatic portal:new
|
|
285
|
+
$ apimatic portal:toc:new --folder="./my-project" --destination="./portal/content/"
|
|
286
286
|
A new toc file has been created at ./portal/content/toc.yml
|
|
287
287
|
```
|
|
288
288
|
|
|
289
|
-
_See code: [src/commands/portal/new/toc.ts](https://github.com/apimatic/apimatic-cli/blob/alpha/src/commands/portal/new/toc.ts)_
|
|
289
|
+
_See code: [src/commands/portal/toc/new/toc.ts](https://github.com/apimatic/apimatic-cli/blob/alpha/src/commands/portal/toc/new/toc.ts)_
|
|
290
290
|
|
|
291
291
|
## `apimatic portal:quickstart`
|
|
292
292
|
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PortalNewTocAction = void 0;
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const fs = require("fs-extra");
|
|
6
|
+
const new_toc_1 = require("../../../prompts/portal/toc/new-toc");
|
|
7
|
+
const result_1 = require("../../../types/common/result");
|
|
8
|
+
const utils_1 = require("../../../utils/utils");
|
|
9
|
+
const sdl_parser_1 = require("../../../application/portal/toc/sdl-parser");
|
|
10
|
+
const toc_structure_generator_1 = require("../../../application/portal/toc/toc-structure-generator");
|
|
11
|
+
const toc_content_parser_1 = require("../../../application/portal/toc/toc-content-parser");
|
|
12
|
+
const portal_service_1 = require("../../../infrastructure/services/portal-service");
|
|
13
|
+
const DEFAULT_TOC_FILENAME = "toc.yml";
|
|
14
|
+
const APIMATIC_BUILD_FILENAME = "APIMATIC-BUILD.json";
|
|
15
|
+
class PortalNewTocAction {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.prompts = new new_toc_1.PortalNewTocPrompts();
|
|
18
|
+
this.sdlParser = new sdl_parser_1.SdlParser(new portal_service_1.PortalService());
|
|
19
|
+
this.tocGenerator = new toc_structure_generator_1.TocStructureGenerator();
|
|
20
|
+
this.contentParser = new toc_content_parser_1.TocContentParser();
|
|
21
|
+
}
|
|
22
|
+
async createToc(workingDirectory, configDir, destination, force = false, expandEndpoints = false, expandModels = false) {
|
|
23
|
+
try {
|
|
24
|
+
const tocDir = await this.getDestinationPath(workingDirectory, destination);
|
|
25
|
+
const tocPath = path.join(tocDir, DEFAULT_TOC_FILENAME);
|
|
26
|
+
const tocCheckResult = await this.handleExistingToc(tocPath, force);
|
|
27
|
+
if (!tocCheckResult.isSuccess()) {
|
|
28
|
+
return tocCheckResult;
|
|
29
|
+
}
|
|
30
|
+
const { endpointGroups, models } = await this.extractSdlComponents(workingDirectory, configDir, expandEndpoints, expandModels);
|
|
31
|
+
const contentGroups = await this.extractContentGroups(workingDirectory);
|
|
32
|
+
const toc = this.tocGenerator.createTocStructure(endpointGroups, models, expandEndpoints, expandModels, contentGroups);
|
|
33
|
+
const yamlString = this.tocGenerator.transformToYaml(toc);
|
|
34
|
+
await this.writeToc(tocPath, yamlString, "utf8");
|
|
35
|
+
this.prompts.displayOutroMessage(tocPath);
|
|
36
|
+
return result_1.Result.success(tocPath);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
this.prompts.logError((0, utils_1.getMessageInRedColor)(`${error}`));
|
|
40
|
+
return result_1.Result.failure(`❌ An unexpected error occurred while generating the TOC file.`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async writeToc(path, content, encoding) {
|
|
44
|
+
await fs.ensureFile(path);
|
|
45
|
+
await fs.writeFile(path, content, encoding);
|
|
46
|
+
}
|
|
47
|
+
async handleExistingToc(tocPath, force) {
|
|
48
|
+
const shouldContinue = await this.checkExistingToc(tocPath, force);
|
|
49
|
+
if (!shouldContinue) {
|
|
50
|
+
return result_1.Result.cancelled("Operation was cancelled by the user.");
|
|
51
|
+
}
|
|
52
|
+
return result_1.Result.success("TOC check passed.");
|
|
53
|
+
}
|
|
54
|
+
async extractSdlComponents(workingDirectory, configDir, expandEndpoints, expandModels) {
|
|
55
|
+
if (!expandEndpoints && !expandModels) {
|
|
56
|
+
return { endpointGroups: new Map(), models: [] };
|
|
57
|
+
}
|
|
58
|
+
this.prompts.startProgressIndicatorWithMessage("Extracting endpoints and/or models from the API specification...");
|
|
59
|
+
const specFolderPath = await this.getSpecFolderPath(workingDirectory);
|
|
60
|
+
if (!(await fs.pathExists(specFolderPath))) {
|
|
61
|
+
this.prompts.stopProgressIndicatorWithMessage(`⚠️ Could not find the specification folder at: ${specFolderPath}`);
|
|
62
|
+
this.prompts.displayInfo("Falling back to default TOC structure without expanded endpoints or models...");
|
|
63
|
+
return { endpointGroups: new Map(), models: [] };
|
|
64
|
+
}
|
|
65
|
+
const sdlResult = await this.sdlParser.getTocComponentsFromSdl(specFolderPath, workingDirectory, configDir);
|
|
66
|
+
if (!sdlResult.isSuccess()) {
|
|
67
|
+
this.prompts.stopProgressIndicatorWithMessage(`⚠️ ${sdlResult.error}`);
|
|
68
|
+
this.prompts.displayInfo("Falling back to default TOC structure without expanded endpoints or models...");
|
|
69
|
+
return { endpointGroups: new Map(), models: [] };
|
|
70
|
+
}
|
|
71
|
+
this.prompts.stopProgressIndicatorWithMessage("✅ Successfully extracted endpoints and/or models from the specification.");
|
|
72
|
+
return sdlResult.value;
|
|
73
|
+
}
|
|
74
|
+
async extractContentGroups(workingDirectory) {
|
|
75
|
+
const contentFolderPath = await this.getContentFolderPath(workingDirectory);
|
|
76
|
+
if (!(await fs.pathExists(contentFolderPath))) {
|
|
77
|
+
this.prompts.displayInfo(`⚠️ Could not locate the content folder at: ${contentFolderPath}`);
|
|
78
|
+
this.prompts.displayInfo("Skipping custom content addition in TOC...");
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
return await this.contentParser.parseContentFolder(contentFolderPath, contentFolderPath);
|
|
82
|
+
}
|
|
83
|
+
async getDestinationPath(workingDirectory, providedDestination) {
|
|
84
|
+
if (providedDestination === undefined) {
|
|
85
|
+
const inferredDestination = await this.getContentFolderPath(workingDirectory);
|
|
86
|
+
return inferredDestination;
|
|
87
|
+
}
|
|
88
|
+
return providedDestination;
|
|
89
|
+
}
|
|
90
|
+
async checkExistingToc(tocPath, force) {
|
|
91
|
+
if ((await fs.pathExists(tocPath)) && !force) {
|
|
92
|
+
return await this.prompts.overwriteExistingTocPrompt();
|
|
93
|
+
}
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
async getContentFolderPath(workingDirectory) {
|
|
97
|
+
var _a;
|
|
98
|
+
const buildFilePath = path.join(workingDirectory, APIMATIC_BUILD_FILENAME);
|
|
99
|
+
const defaultContentFolder = path.join(workingDirectory, "content");
|
|
100
|
+
if (!(await fs.pathExists(buildFilePath))) {
|
|
101
|
+
return defaultContentFolder;
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
const buildConfig = await fs.readJson(buildFilePath, "utf8");
|
|
105
|
+
if (((_a = buildConfig.generatePortal) === null || _a === void 0 ? void 0 : _a.contentFolder) == null) {
|
|
106
|
+
return defaultContentFolder;
|
|
107
|
+
}
|
|
108
|
+
return path.join(workingDirectory, buildConfig.generatePortal.contentFolder, "content");
|
|
109
|
+
}
|
|
110
|
+
catch (_b) {
|
|
111
|
+
return defaultContentFolder;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async getSpecFolderPath(workingDirectory) {
|
|
115
|
+
var _a;
|
|
116
|
+
const buildFilePath = path.join(workingDirectory, APIMATIC_BUILD_FILENAME);
|
|
117
|
+
const defaultSpecFolder = path.join(workingDirectory, "spec");
|
|
118
|
+
if (!(await fs.pathExists(buildFilePath))) {
|
|
119
|
+
return defaultSpecFolder;
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
const buildConfig = await fs.readJson(buildFilePath, "utf8");
|
|
123
|
+
if (((_a = buildConfig.generatePortal) === null || _a === void 0 ? void 0 : _a.apiSpecPath) == null) {
|
|
124
|
+
return defaultSpecFolder;
|
|
125
|
+
}
|
|
126
|
+
return path.join(workingDirectory, buildConfig.generatePortal.apiSpecPath);
|
|
127
|
+
}
|
|
128
|
+
catch (_b) {
|
|
129
|
+
return defaultSpecFolder;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.PortalNewTocAction = PortalNewTocAction;
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LXRvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hY3Rpb25zL3BvcnRhbC90b2MvbmV3LXRvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLGlFQUEwRTtBQUMxRSx5REFBc0Q7QUFDdEQsZ0RBQTREO0FBQzVELDJFQUF1RTtBQUN2RSxxR0FBZ0c7QUFDaEcsMkZBQXNGO0FBRXRGLG9GQUFnRjtBQUVoRixNQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztBQUN2QyxNQUFNLHVCQUF1QixHQUFHLHFCQUFxQixDQUFDO0FBRXRELE1BQWEsa0JBQWtCO0lBTTdCO1FBQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLDZCQUFtQixFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLHNCQUFTLENBQUMsSUFBSSw4QkFBYSxFQUFFLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksK0NBQXFCLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUkscUNBQWdCLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FDYixnQkFBd0IsRUFDeEIsU0FBaUIsRUFDakIsV0FBb0IsRUFDcEIsUUFBaUIsS0FBSyxFQUN0QixrQkFBMkIsS0FBSyxFQUNoQyxlQUF3QixLQUFLO1FBRTdCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFDeEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxD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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { PortalService } from "
|
|
2
|
-
import { TocEndpoint, TocModel } from "
|
|
3
|
-
import { Result } from "
|
|
1
|
+
import { PortalService } from "../../../infrastructure/services/portal-service";
|
|
2
|
+
import { TocEndpoint, TocModel } from "../../../types/toc/toc";
|
|
3
|
+
import { Result } from "../../../types/common/result";
|
|
4
4
|
export declare class SdlParser {
|
|
5
5
|
private readonly portalService;
|
|
6
6
|
constructor(portalService: PortalService);
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SdlParser = void 0;
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const utils_1 = require("../../../utils/utils");
|
|
6
|
+
const result_1 = require("../../../types/common/result");
|
|
7
|
+
class SdlParser {
|
|
8
|
+
constructor(portalService) {
|
|
9
|
+
this.portalService = portalService;
|
|
10
|
+
}
|
|
11
|
+
async getTocComponentsFromSdl(specFolderPath, workingDirectory, configDir) {
|
|
12
|
+
const sourceSpecInputZipFilePath = await (0, utils_1.validateAndZipPortalSource)(specFolderPath, path.join(workingDirectory, ".spec_source.zip"));
|
|
13
|
+
try {
|
|
14
|
+
const result = await this.portalService.generateSdl(sourceSpecInputZipFilePath, configDir);
|
|
15
|
+
if (!result.isSuccess()) {
|
|
16
|
+
return result_1.Result.failure("Failed to extract endpoints/models from the specification. Please validate your spec using APIMatic's interactive VS Code extension");
|
|
17
|
+
}
|
|
18
|
+
const sdl = result.value;
|
|
19
|
+
const endpointGroups = this.extractEndpointGroups(sdl);
|
|
20
|
+
const models = this.extractModels(sdl);
|
|
21
|
+
return result_1.Result.success({ endpointGroups, models });
|
|
22
|
+
}
|
|
23
|
+
finally {
|
|
24
|
+
await (0, utils_1.deleteFile)(sourceSpecInputZipFilePath);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
extractEndpointGroups(sdl) {
|
|
28
|
+
const endpointGroups = new Map();
|
|
29
|
+
const endpoints = sdl.Endpoints.map((e) => ({
|
|
30
|
+
generate: null,
|
|
31
|
+
from: "endpoint",
|
|
32
|
+
endpointName: e.Name,
|
|
33
|
+
endpointGroup: e.Group
|
|
34
|
+
}));
|
|
35
|
+
endpoints.forEach((endpoint) => {
|
|
36
|
+
const group = endpoint.endpointGroup;
|
|
37
|
+
if (!endpointGroups.has(group)) {
|
|
38
|
+
endpointGroups.set(group, []);
|
|
39
|
+
}
|
|
40
|
+
endpointGroups.get(group).push(endpoint);
|
|
41
|
+
});
|
|
42
|
+
return endpointGroups;
|
|
43
|
+
}
|
|
44
|
+
extractModels(sdl) {
|
|
45
|
+
return sdl.CustomTypes.map((e) => ({
|
|
46
|
+
generate: null,
|
|
47
|
+
from: "model",
|
|
48
|
+
modelName: e.Name
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.SdlParser = SdlParser;
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RsLXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9wb3J0YWwvdG9jL3NkbC1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTZCO0FBRTdCLGdEQUE4RTtBQUU5RSx5REFBc0Q7QUFHdEQsTUFBYSxTQUFTO0lBQ3BCLFlBQTZCLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQUcsQ0FBQztJQUU3RCxLQUFLLENBQUMsdUJBQXVCLENBQUMsY0FBc0IsRUFBRSxnQkFBd0IsRUFBRSxTQUFpQjtRQUMvRixNQUFNLDBCQUEwQixHQUFHLE1BQU0sSUFBQSxrQ0FBMEIsRUFDakUsY0FBYyxFQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsQ0FDaEQsQ0FBQztRQUVGLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFM0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2dCQUN4QixPQUFPLGVBQU0sQ0FBQyxPQUFPLENBQUMscUlBQXFJLENBQUMsQ0FBQTtZQUM5SixDQUFDO1lBRUQsTUFBTSxHQUFHLEdBQVMsTUFBTSxDQUFDLEtBQU0sQ0FBQTtZQUMvQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV2QyxPQUFPLGVBQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNwRCxDQUFDO2dCQUFTLENBQUM7WUFDVCxNQUFNLElBQUEsa0JBQVUsRUFBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRU8scUJBQXFCLENBQUMsR0FBUTtRQUNwQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztRQUV4RCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQWMsRUFBZSxFQUFFLENBQUMsQ0FBQztZQUNwRSxRQUFRLEVBQUUsSUFBSTtZQUNkLElBQUksRUFBRSxVQUFVO1lBQ2hCLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSTtZQUNwQixhQUFhLEVBQUUsQ0FBQyxDQUFDLEtBQUs7U0FDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBcUIsRUFBRSxFQUFFO1lBQzFDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUNELGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxHQUFRO1FBQzVCLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFXLEVBQVksRUFBRSxDQUFDLENBQUM7WUFDckQsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsT0FBTztZQUNiLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSTtTQUNsQixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7Q0FDRjtBQXRERCw4QkFzREMifQ==
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TocContentParser = void 0;
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const fs = require("fs-extra");
|
|
6
|
+
class TocContentParser {
|
|
7
|
+
async parseContentFolder(contentFolderPath, workingDirectory) {
|
|
8
|
+
const items = await fs.readdir(contentFolderPath);
|
|
9
|
+
const contentItems = [];
|
|
10
|
+
for (const item of items) {
|
|
11
|
+
const itemPath = path.join(contentFolderPath, item);
|
|
12
|
+
const stats = await fs.stat(itemPath);
|
|
13
|
+
if (stats.isDirectory()) {
|
|
14
|
+
const subItems = await this.parseContentFolder(itemPath, workingDirectory);
|
|
15
|
+
if (subItems.length > 0) {
|
|
16
|
+
contentItems.push({
|
|
17
|
+
group: item,
|
|
18
|
+
items: subItems[0].items // Take items from the Custom Content group
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
else if (stats.isFile() && item.endsWith(".md")) {
|
|
23
|
+
const relativePath = path.relative(workingDirectory, itemPath);
|
|
24
|
+
const pageName = path.basename(item, ".md");
|
|
25
|
+
contentItems.push({
|
|
26
|
+
page: pageName,
|
|
27
|
+
file: this.normalizePath(relativePath)
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Return empty array if no markdown files were found
|
|
32
|
+
if (contentItems.length === 0) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
// Wrap everything under a "Custom Content" group
|
|
36
|
+
return [{
|
|
37
|
+
group: "Custom Content",
|
|
38
|
+
items: contentItems
|
|
39
|
+
}];
|
|
40
|
+
}
|
|
41
|
+
normalizePath(path) {
|
|
42
|
+
return path.replace(/\\/g, '/');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.TocContentParser = TocContentParser;
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9jLWNvbnRlbnQtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3BvcnRhbC90b2MvdG9jLWNvbnRlbnQtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFHL0IsTUFBYSxnQkFBZ0I7SUFDM0IsS0FBSyxDQUFDLGtCQUFrQixDQUFDLGlCQUF5QixFQUFFLGdCQUF3QjtRQUMxRSxNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsRCxNQUFNLFlBQVksR0FBaUMsRUFBRSxDQUFDO1FBRXRELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwRCxNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFdEMsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQzNFLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQzt3QkFDaEIsS0FBSyxFQUFFLElBQUk7d0JBQ1gsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsMkNBQTJDO3FCQUNyRSxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFNUMsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDaEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO2lCQUN2QyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELHFEQUFxRDtRQUNyRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsaURBQWlEO1FBQ2pELE9BQU8sQ0FBQztnQkFDTixLQUFLLEVBQUUsZ0JBQWdCO2dCQUN2QixLQUFLLEVBQUUsWUFBWTthQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sYUFBYSxDQUFDLElBQVk7UUFDaEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0NBQ0Y7QUEzQ0QsNENBMkNDIn0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Toc, TocGroup, TocEndpoint, TocModel } from "
|
|
1
|
+
import { Toc, TocGroup, TocEndpoint, TocModel } from "../../../types/toc/toc";
|
|
2
2
|
export declare class TocStructureGenerator {
|
|
3
3
|
createTocStructure(endpointGroups: Map<string, TocEndpoint[]>, models: TocModel[], expandEndpoints?: boolean, expandModels?: boolean, contentGroups?: TocGroup[]): Toc;
|
|
4
4
|
transformToYaml(toc: Toc): string;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TocStructureGenerator = void 0;
|
|
4
|
+
const yaml_1 = require("yaml");
|
|
5
|
+
class TocStructureGenerator {
|
|
6
|
+
createTocStructure(endpointGroups, models, expandEndpoints = false, expandModels = false, contentGroups = []) {
|
|
7
|
+
const tocStructure = {
|
|
8
|
+
toc: []
|
|
9
|
+
};
|
|
10
|
+
// Add Getting Started section
|
|
11
|
+
tocStructure.toc.push({
|
|
12
|
+
group: "Getting Started",
|
|
13
|
+
items: [
|
|
14
|
+
{
|
|
15
|
+
generate: "How to Get Started",
|
|
16
|
+
from: "getting-started"
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
});
|
|
20
|
+
// Add content groups
|
|
21
|
+
if (contentGroups.length > 0) {
|
|
22
|
+
tocStructure.toc.push(...contentGroups);
|
|
23
|
+
}
|
|
24
|
+
// Add API Endpoints section
|
|
25
|
+
if (!expandEndpoints || endpointGroups.size === 0) {
|
|
26
|
+
tocStructure.toc.push({
|
|
27
|
+
generate: "API Endpoints",
|
|
28
|
+
from: "endpoints"
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
tocStructure.toc.push({
|
|
33
|
+
group: "API Endpoints",
|
|
34
|
+
items: Array.from(endpointGroups).map(([groupName, endpoints]) => ({
|
|
35
|
+
group: groupName,
|
|
36
|
+
items: [
|
|
37
|
+
{
|
|
38
|
+
generate: null,
|
|
39
|
+
from: "endpoint-group-overview",
|
|
40
|
+
endpointGroup: groupName
|
|
41
|
+
},
|
|
42
|
+
...endpoints
|
|
43
|
+
]
|
|
44
|
+
}))
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// Add Models section
|
|
48
|
+
if (!expandModels || models.length === 0) {
|
|
49
|
+
tocStructure.toc.push({
|
|
50
|
+
generate: "Models",
|
|
51
|
+
from: "models"
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
tocStructure.toc.push({
|
|
56
|
+
group: "Models",
|
|
57
|
+
items: models
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
//Add Sdk Infra section
|
|
61
|
+
tocStructure.toc.push({
|
|
62
|
+
generate: "SDK Infrastructure",
|
|
63
|
+
from: "sdk-infra"
|
|
64
|
+
});
|
|
65
|
+
return tocStructure;
|
|
66
|
+
}
|
|
67
|
+
transformToYaml(toc) {
|
|
68
|
+
const transformedToc = this.transformKeys(toc);
|
|
69
|
+
return (0, yaml_1.stringify)(transformedToc, {
|
|
70
|
+
indent: 2,
|
|
71
|
+
nullStr: ""
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
transformKeys(obj) {
|
|
75
|
+
if (Array.isArray(obj)) {
|
|
76
|
+
return obj.map((item) => this.transformKeys(item));
|
|
77
|
+
}
|
|
78
|
+
if (obj !== null && typeof obj === "object") {
|
|
79
|
+
return Object.fromEntries(Object.entries(obj).map(([key, value]) => [
|
|
80
|
+
key.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(),
|
|
81
|
+
this.transformKeys(value)
|
|
82
|
+
]));
|
|
83
|
+
}
|
|
84
|
+
return obj;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.TocStructureGenerator = TocStructureGenerator;
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9jLXN0cnVjdHVyZS1nZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcG9ydGFsL3RvYy90b2Mtc3RydWN0dXJlLWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBaUM7QUFHakMsTUFBYSxxQkFBcUI7SUFDaEMsa0JBQWtCLENBQ2hCLGNBQTBDLEVBQzFDLE1BQWtCLEVBQ2xCLGtCQUEyQixLQUFLLEVBQ2hDLGVBQXdCLEtBQUssRUFDN0IsZ0JBQTRCLEVBQUU7UUFFOUIsTUFBTSxZQUFZLEdBQVE7WUFDeEIsR0FBRyxFQUFFLEVBQUU7U0FDUixDQUFDO1FBRUYsOEJBQThCO1FBQzlCLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ3BCLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsS0FBSyxFQUFFO2dCQUNMO29CQUNFLFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLElBQUksRUFBRSxpQkFBaUI7aUJBQ3hCO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxxQkFBcUI7UUFDckIsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdCLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixJQUFJLENBQUMsZUFBZSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BCLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixJQUFJLEVBQUUsV0FBVzthQUNsQixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNwQixLQUFLLEVBQUUsZUFBZTtnQkFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2pFLEtBQUssRUFBRSxTQUFTO29CQUNoQixLQUFLLEVBQUU7d0JBQ0w7NEJBQ0UsUUFBUSxFQUFFLElBQUk7NEJBQ2QsSUFBSSxFQUFFLHlCQUF5Qjs0QkFDL0IsYUFBYSxFQUFFLFNBQVM7eUJBQ0c7d0JBQzdCLEdBQUcsU0FBUztxQkFDYjtpQkFDRixDQUFDLENBQUM7YUFDSixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDcEIsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLElBQUksRUFBRSxRQUFRO2FBQ2YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDcEIsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsS0FBSyxFQUFFLE1BQU07YUFDZCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsdUJBQXVCO1FBQ3ZCLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ3BCLFFBQVEsRUFBRSxvQkFBb0I7WUFDOUIsSUFBSSxFQUFFLFdBQVc7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFRO1FBQ3RCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0MsT0FBTyxJQUFBLGdCQUFTLEVBQUMsY0FBYyxFQUFFO1lBQy9CLE1BQU0sRUFBRSxDQUFDO1lBQ1QsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sYUFBYSxDQUFDLEdBQVE7UUFDNUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUNELElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN4QyxHQUFHLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7YUFDMUIsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0Y7QUEvRkQsc0RBK0ZDIn0=
|
|
@@ -3,31 +3,31 @@ var _a;
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const path = require("path");
|
|
5
5
|
const core_1 = require("@oclif/core");
|
|
6
|
-
const
|
|
6
|
+
const new_toc_1 = require("../../../actions/portal/toc/new-toc");
|
|
7
7
|
const DEFAULT_FOLDER = process.cwd();
|
|
8
|
-
class
|
|
8
|
+
class PortalTocNew extends core_1.Command {
|
|
9
9
|
constructor(argv, config) {
|
|
10
10
|
super(argv, config);
|
|
11
11
|
}
|
|
12
12
|
async run() {
|
|
13
13
|
const { flags } = await this.parse(_a);
|
|
14
|
-
const portalNewTocAction = new
|
|
14
|
+
const portalNewTocAction = new new_toc_1.PortalNewTocAction();
|
|
15
15
|
const result = await portalNewTocAction.createToc(flags.folder, this.config.configDir, flags.destination, flags.force, flags["expand-endpoints"], flags["expand-models"]);
|
|
16
16
|
if (result.isFailed()) {
|
|
17
17
|
this.error(result.error);
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
_a =
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
_a = PortalTocNew;
|
|
22
|
+
PortalTocNew.summary = 'Generates a TOC file based on the content directory and spec folder provided in your working directory';
|
|
23
|
+
PortalTocNew.description = `This command generates a new Table of Contents (TOC) file used in the
|
|
24
24
|
generation of your API documentation portal.
|
|
25
25
|
|
|
26
26
|
The output is a YAML file with the .yml extension.
|
|
27
27
|
|
|
28
28
|
To learn more about the TOC file and APIMatic build directory structure, visit:
|
|
29
29
|
https://docs.apimatic.io/platform-api/#/http/guides/generating-on-prem-api-portal/overview-generating-api-portal`;
|
|
30
|
-
|
|
30
|
+
PortalTocNew.flags = {
|
|
31
31
|
destination: core_1.Flags.string({
|
|
32
32
|
parse: async (input) => path.resolve(input),
|
|
33
33
|
description: "optional path where the generated TOC file will be saved. Defaults to the current working directory if not provided.",
|
|
@@ -50,16 +50,16 @@ PortalNewToc.flags = {
|
|
|
50
50
|
description: "include individual entries for each model in the generated TOC. Requires a valid API specification in the working directory."
|
|
51
51
|
})
|
|
52
52
|
};
|
|
53
|
-
|
|
54
|
-
`$ apimatic portal:new
|
|
53
|
+
PortalTocNew.examples = [
|
|
54
|
+
`$ apimatic portal:toc:new --destination="./portal/content/"
|
|
55
55
|
A new toc file has been created at ./portal/content/toc.yml
|
|
56
56
|
`,
|
|
57
|
-
`$ apimatic portal:new
|
|
57
|
+
`$ apimatic portal:toc:new --folder="./my-project"
|
|
58
58
|
A new toc file has been created at ./my-project/content/toc.yml
|
|
59
59
|
`,
|
|
60
|
-
`$ apimatic portal:new
|
|
60
|
+
`$ apimatic portal:toc:new --folder="./my-project" --destination="./portal/content/"
|
|
61
61
|
A new toc file has been created at ./portal/content/toc.yml
|
|
62
62
|
`
|
|
63
63
|
];
|
|
64
|
-
exports.default =
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
exports.default = PortalTocNew;
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3BvcnRhbC90b2MvbmV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE2QjtBQUM3QixzQ0FBNkM7QUFDN0MsaUVBQXlFO0FBRXpFLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUVyQyxNQUFxQixZQUFhLFNBQVEsY0FBTztJQStDL0MsWUFBWSxJQUFjLEVBQUUsTUFBVztRQUNyQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBWSxDQUFDLENBQUM7UUFDakQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLDRCQUFrQixFQUFFLENBQUM7UUFDcEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxTQUFTLENBQy9DLEtBQUssQ0FBQyxNQUFNLEVBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQ3JCLEtBQUssQ0FBQyxXQUFXLEVBQ2pCLEtBQUssQ0FBQyxLQUFLLEVBQ1gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQ3pCLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FDdkIsQ0FBQztRQUVGLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBTSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7OztBQWpFTSxvQkFBTyxHQUFHLHdHQUF3RyxBQUEzRyxDQUE0RztBQUVuSCx3QkFBVyxHQUFHOzs7Ozs7aUhBTTBGLEFBTjdGLENBTThGO0FBRXpHLGtCQUFLLEdBQUc7SUFDYixXQUFXLEVBQUUsWUFBSyxDQUFDLE1BQU0sQ0FBQztRQUN4QixLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDbkQsV0FBVyxFQUFFLHNIQUFzSDtLQUNwSSxDQUFDO0lBQ0YsTUFBTSxFQUFFLFlBQUssQ0FBQyxNQUFNLENBQUM7UUFDbkIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ25ELFdBQVcsRUFBRSw2SEFBNkg7UUFDMUksT0FBTyxFQUFFLGNBQWM7S0FDeEIsQ0FBQztJQUNGLEtBQUssRUFBRSxZQUFLLENBQUMsT0FBTyxDQUFDO1FBQ25CLE9BQU8sRUFBRSxLQUFLO1FBQ2QsV0FBVyxFQUFFLGtFQUFrRTtLQUNoRixDQUFDO0lBQ0Ysa0JBQWtCLEVBQUUsWUFBSyxDQUFDLE9BQU8sQ0FBQztRQUNoQyxPQUFPLEVBQUUsS0FBSztRQUNkLFdBQVcsRUFBRSxpSUFBaUk7S0FDL0ksQ0FBQztJQUNGLGVBQWUsRUFBRSxZQUFLLENBQUMsT0FBTyxDQUFDO1FBQzdCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsV0FBVyxFQUFFLDhIQUE4SDtLQUM1SSxDQUFDO0NBQ0gsQUF0QlcsQ0FzQlY7QUFFSyxxQkFBUSxHQUFHO0lBQ2hCOztDQUVIO0lBQ0c7O0NBRUg7SUFDRzs7Q0FFSDtDQUNFLEFBVmMsQ0FVYjtrQkE3Q2lCLFlBQVkifQ==
|
|
@@ -43,4 +43,4 @@ class PortalNewTocPrompts {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
exports.PortalNewTocPrompts = PortalNewTocPrompts;
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LXRvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wcm9tcHRzL3BvcnRhbC90b2MvbmV3LXRvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FBK0U7QUFFL0UsTUFBYSxtQkFBbUI7SUFBaEM7UUFDbUIsU0FBSSxHQUFHLElBQUEsaUJBQU8sR0FBRSxDQUFDO0lBOENwQyxDQUFDO0lBNUNDLEtBQUssQ0FBQywwQkFBMEI7UUFDOUIsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFBLGdCQUFNLEVBQUM7WUFDbkMsT0FBTyxFQUFFLDJGQUEyRjtZQUNwRyxPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBQzlCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2FBQzdCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFBLGtCQUFRLEVBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFBLGdCQUFNLEVBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUMvQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELElBQUksZUFBZSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUEsZUFBSyxFQUFDLDBGQUEwRixDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUVELE9BQU8sZUFBZSxLQUFLLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBRUQsaUNBQWlDLENBQUMsT0FBZTtRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0NBQWdDLENBQUMsT0FBZTtRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBZTtRQUNqQyxJQUFBLGVBQUssRUFBQyx1Q0FBdUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWE7UUFDcEIsSUFBQSxlQUFLLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQWU7UUFDNUIsYUFBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQWU7UUFDekIsYUFBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUEvQ0Qsa0RBK0NDIn0=
|
package/package.json
CHANGED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PortalNewTocAction = void 0;
|
|
4
|
-
const path = require("path");
|
|
5
|
-
const fs = require("fs-extra");
|
|
6
|
-
const toc_1 = require("../../../prompts/portal/new/toc");
|
|
7
|
-
const result_1 = require("../../../types/common/result");
|
|
8
|
-
const utils_1 = require("../../../utils/utils");
|
|
9
|
-
const sdl_parser_1 = require("../../../application/portal/new/toc/sdl-parser");
|
|
10
|
-
const toc_structure_generator_1 = require("../../../application/portal/new/toc/toc-structure-generator");
|
|
11
|
-
const toc_content_parser_1 = require("../../../application/portal/new/toc/toc-content-parser");
|
|
12
|
-
const portal_service_1 = require("../../../infrastructure/services/portal-service");
|
|
13
|
-
const DEFAULT_TOC_FILENAME = "toc.yml";
|
|
14
|
-
const APIMATIC_BUILD_FILENAME = "APIMATIC-BUILD.json";
|
|
15
|
-
class PortalNewTocAction {
|
|
16
|
-
constructor() {
|
|
17
|
-
this.prompts = new toc_1.PortalNewTocPrompts();
|
|
18
|
-
this.sdlParser = new sdl_parser_1.SdlParser(new portal_service_1.PortalService());
|
|
19
|
-
this.tocGenerator = new toc_structure_generator_1.TocStructureGenerator();
|
|
20
|
-
this.contentParser = new toc_content_parser_1.TocContentParser();
|
|
21
|
-
}
|
|
22
|
-
async createToc(workingDirectory, configDir, destination, force = false, expandEndpoints = false, expandModels = false) {
|
|
23
|
-
try {
|
|
24
|
-
const tocDir = await this.getDestinationPath(workingDirectory, destination);
|
|
25
|
-
const tocPath = path.join(tocDir, DEFAULT_TOC_FILENAME);
|
|
26
|
-
const tocCheckResult = await this.handleExistingToc(tocPath, force);
|
|
27
|
-
if (!tocCheckResult.isSuccess()) {
|
|
28
|
-
return tocCheckResult;
|
|
29
|
-
}
|
|
30
|
-
const { endpointGroups, models } = await this.extractSdlComponents(workingDirectory, configDir, expandEndpoints, expandModels);
|
|
31
|
-
const contentGroups = await this.extractContentGroups(workingDirectory);
|
|
32
|
-
const toc = this.tocGenerator.createTocStructure(endpointGroups, models, expandEndpoints, expandModels, contentGroups);
|
|
33
|
-
const yamlString = this.tocGenerator.transformToYaml(toc);
|
|
34
|
-
await this.writeToc(tocPath, yamlString, "utf8");
|
|
35
|
-
this.prompts.displayOutroMessage(tocPath);
|
|
36
|
-
return result_1.Result.success(tocPath);
|
|
37
|
-
}
|
|
38
|
-
catch (error) {
|
|
39
|
-
this.prompts.logError((0, utils_1.getMessageInRedColor)(`${error}`));
|
|
40
|
-
return result_1.Result.failure(`❌ An unexpected error occurred while generating the TOC file.`);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
async writeToc(path, content, encoding) {
|
|
44
|
-
await fs.ensureFile(path);
|
|
45
|
-
await fs.writeFile(path, content, encoding);
|
|
46
|
-
}
|
|
47
|
-
async handleExistingToc(tocPath, force) {
|
|
48
|
-
const shouldContinue = await this.checkExistingToc(tocPath, force);
|
|
49
|
-
if (!shouldContinue) {
|
|
50
|
-
return result_1.Result.cancelled("Operation was cancelled by the user.");
|
|
51
|
-
}
|
|
52
|
-
return result_1.Result.success("TOC check passed.");
|
|
53
|
-
}
|
|
54
|
-
async extractSdlComponents(workingDirectory, configDir, expandEndpoints, expandModels) {
|
|
55
|
-
if (!expandEndpoints && !expandModels) {
|
|
56
|
-
return { endpointGroups: new Map(), models: [] };
|
|
57
|
-
}
|
|
58
|
-
this.prompts.startProgressIndicatorWithMessage("Extracting endpoints and/or models from the API specification...");
|
|
59
|
-
const specFolderPath = await this.getSpecFolderPath(workingDirectory);
|
|
60
|
-
if (!(await fs.pathExists(specFolderPath))) {
|
|
61
|
-
this.prompts.stopProgressIndicatorWithMessage(`⚠️ Could not find the specification folder at: ${specFolderPath}`);
|
|
62
|
-
this.prompts.displayInfo("Falling back to default TOC structure without expanded endpoints or models...");
|
|
63
|
-
return { endpointGroups: new Map(), models: [] };
|
|
64
|
-
}
|
|
65
|
-
const sdlResult = await this.sdlParser.getTocComponentsFromSdl(specFolderPath, workingDirectory, configDir);
|
|
66
|
-
if (!sdlResult.isSuccess()) {
|
|
67
|
-
this.prompts.stopProgressIndicatorWithMessage(`⚠️ ${sdlResult.error}`);
|
|
68
|
-
this.prompts.displayInfo("Falling back to default TOC structure without expanded endpoints or models...");
|
|
69
|
-
return { endpointGroups: new Map(), models: [] };
|
|
70
|
-
}
|
|
71
|
-
this.prompts.stopProgressIndicatorWithMessage("✅ Successfully extracted endpoints and/or models from the specification.");
|
|
72
|
-
return sdlResult.value;
|
|
73
|
-
}
|
|
74
|
-
async extractContentGroups(workingDirectory) {
|
|
75
|
-
const contentFolderPath = await this.getContentFolderPath(workingDirectory);
|
|
76
|
-
if (!(await fs.pathExists(contentFolderPath))) {
|
|
77
|
-
this.prompts.displayInfo(`⚠️ Could not locate the content folder at: ${contentFolderPath}`);
|
|
78
|
-
this.prompts.displayInfo("Skipping custom content addition in TOC...");
|
|
79
|
-
return [];
|
|
80
|
-
}
|
|
81
|
-
return await this.contentParser.parseContentFolder(contentFolderPath, contentFolderPath);
|
|
82
|
-
}
|
|
83
|
-
async getDestinationPath(workingDirectory, providedDestination) {
|
|
84
|
-
if (providedDestination === undefined) {
|
|
85
|
-
const inferredDestination = await this.getContentFolderPath(workingDirectory);
|
|
86
|
-
return inferredDestination;
|
|
87
|
-
}
|
|
88
|
-
return providedDestination;
|
|
89
|
-
}
|
|
90
|
-
async checkExistingToc(tocPath, force) {
|
|
91
|
-
if ((await fs.pathExists(tocPath)) && !force) {
|
|
92
|
-
return await this.prompts.overwriteExistingTocPrompt();
|
|
93
|
-
}
|
|
94
|
-
return true;
|
|
95
|
-
}
|
|
96
|
-
async getContentFolderPath(workingDirectory) {
|
|
97
|
-
var _a;
|
|
98
|
-
const buildFilePath = path.join(workingDirectory, APIMATIC_BUILD_FILENAME);
|
|
99
|
-
const defaultContentFolder = path.join(workingDirectory, "content");
|
|
100
|
-
if (!(await fs.pathExists(buildFilePath))) {
|
|
101
|
-
return defaultContentFolder;
|
|
102
|
-
}
|
|
103
|
-
try {
|
|
104
|
-
const buildConfig = await fs.readJson(buildFilePath, "utf8");
|
|
105
|
-
if (((_a = buildConfig.generatePortal) === null || _a === void 0 ? void 0 : _a.contentFolder) == null) {
|
|
106
|
-
return defaultContentFolder;
|
|
107
|
-
}
|
|
108
|
-
return path.join(workingDirectory, buildConfig.generatePortal.contentFolder, "content");
|
|
109
|
-
}
|
|
110
|
-
catch (_b) {
|
|
111
|
-
return defaultContentFolder;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
async getSpecFolderPath(workingDirectory) {
|
|
115
|
-
var _a;
|
|
116
|
-
const buildFilePath = path.join(workingDirectory, APIMATIC_BUILD_FILENAME);
|
|
117
|
-
const defaultSpecFolder = path.join(workingDirectory, "spec");
|
|
118
|
-
if (!(await fs.pathExists(buildFilePath))) {
|
|
119
|
-
return defaultSpecFolder;
|
|
120
|
-
}
|
|
121
|
-
try {
|
|
122
|
-
const buildConfig = await fs.readJson(buildFilePath, "utf8");
|
|
123
|
-
if (((_a = buildConfig.generatePortal) === null || _a === void 0 ? void 0 : _a.apiSpecPath) == null) {
|
|
124
|
-
return defaultSpecFolder;
|
|
125
|
-
}
|
|
126
|
-
return path.join(workingDirectory, buildConfig.generatePortal.apiSpecPath);
|
|
127
|
-
}
|
|
128
|
-
catch (_b) {
|
|
129
|
-
return defaultSpecFolder;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
exports.PortalNewTocAction = PortalNewTocAction;
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FjdGlvbnMvcG9ydGFsL25ldy90b2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUMvQix5REFBc0U7QUFDdEUseURBQXNEO0FBQ3RELGdEQUE0RDtBQUM1RCwrRUFBMkU7QUFDM0UseUdBQW9HO0FBQ3BHLCtGQUEwRjtBQUUxRixvRkFBZ0Y7QUFFaEYsTUFBTSxvQkFBb0IsR0FBRyxTQUFTLENBQUM7QUFDdkMsTUFBTSx1QkFBdUIsR0FBRyxxQkFBcUIsQ0FBQztBQUV0RCxNQUFhLGtCQUFrQjtJQU03QjtRQUNFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSx5QkFBbUIsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxzQkFBUyxDQUFDLElBQUksOEJBQWEsRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLCtDQUFxQixFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLHFDQUFnQixFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQ2IsZ0JBQXdCLEVBQ3hCLFNBQWlCLEVBQ2pCLFdBQW9CLEVBQ3BCLFFBQWlCLEtBQUssRUFDdEIsa0JBQTJCLEtBQUssRUFDaEMsZUFBd0IsS0FBSztRQUU3QixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUM1RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNw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
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SdlParser = void 0;
|
|
4
|
-
const path = require("path");
|
|
5
|
-
const utils_1 = require("../../../../utils/utils");
|
|
6
|
-
const result_1 = require("../../../../types/common/result");
|
|
7
|
-
class SdlParser {
|
|
8
|
-
constructor(portalService) {
|
|
9
|
-
this.portalService = portalService;
|
|
10
|
-
}
|
|
11
|
-
async getTocComponentsFromSdl(specFolderPath, workingDirectory, configDir) {
|
|
12
|
-
const sourceSpecInputZipFilePath = await (0, utils_1.validateAndZipPortalSource)(specFolderPath, path.join(workingDirectory, ".spec_source.zip"));
|
|
13
|
-
try {
|
|
14
|
-
const result = await this.portalService.generateSdl(sourceSpecInputZipFilePath, configDir);
|
|
15
|
-
if (!result.isSuccess()) {
|
|
16
|
-
return result_1.Result.failure("Failed to extract endpoints/models from the specification. Please validate your spec using APIMatic's interactive VS Code extension");
|
|
17
|
-
}
|
|
18
|
-
const sdl = result.value;
|
|
19
|
-
const endpointGroups = this.extractEndpointGroups(sdl);
|
|
20
|
-
const models = this.extractModels(sdl);
|
|
21
|
-
return result_1.Result.success({ endpointGroups, models });
|
|
22
|
-
}
|
|
23
|
-
finally {
|
|
24
|
-
await (0, utils_1.deleteFile)(sourceSpecInputZipFilePath);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
extractEndpointGroups(sdl) {
|
|
28
|
-
const endpointGroups = new Map();
|
|
29
|
-
const endpoints = sdl.Endpoints.map((e) => ({
|
|
30
|
-
generate: null,
|
|
31
|
-
from: "endpoint",
|
|
32
|
-
endpointName: e.Name,
|
|
33
|
-
endpointGroup: e.Group
|
|
34
|
-
}));
|
|
35
|
-
endpoints.forEach((endpoint) => {
|
|
36
|
-
const group = endpoint.endpointGroup;
|
|
37
|
-
if (!endpointGroups.has(group)) {
|
|
38
|
-
endpointGroups.set(group, []);
|
|
39
|
-
}
|
|
40
|
-
endpointGroups.get(group).push(endpoint);
|
|
41
|
-
});
|
|
42
|
-
return endpointGroups;
|
|
43
|
-
}
|
|
44
|
-
extractModels(sdl) {
|
|
45
|
-
return sdl.CustomTypes.map((e) => ({
|
|
46
|
-
generate: null,
|
|
47
|
-
from: "model",
|
|
48
|
-
modelName: e.Name
|
|
49
|
-
}));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
exports.SdlParser = SdlParser;
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RsLXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9wb3J0YWwvbmV3L3RvYy9zZGwtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE2QjtBQUU3QixtREFBaUY7QUFFakYsNERBQXlEO0FBR3pELE1BQWEsU0FBUztJQUNwQixZQUE2QixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUFHLENBQUM7SUFFN0QsS0FBSyxDQUFDLHVCQUF1QixDQUFDLGNBQXNCLEVBQUUsZ0JBQXdCLEVBQUUsU0FBaUI7UUFDL0YsTUFBTSwwQkFBMEIsR0FBRyxNQUFNLElBQUEsa0NBQTBCLEVBQ2pFLGNBQWMsRUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGtCQUFrQixDQUFDLENBQ2hELENBQUM7UUFFRixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLDBCQUEwQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRTNGLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxlQUFNLENBQUMsT0FBTyxDQUFDLHFJQUFxSSxDQUFDLENBQUE7WUFDOUosQ0FBQztZQUVELE1BQU0sR0FBRyxHQUFTLE1BQU0sQ0FBQyxLQUFNLENBQUE7WUFDL0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFdkMsT0FBTyxlQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDcEQsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsTUFBTSxJQUFBLGtCQUFVLEVBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEdBQVE7UUFDcEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7UUFFeEQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFjLEVBQWUsRUFBRSxDQUFDLENBQUM7WUFDcEUsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsVUFBVTtZQUNoQixZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDcEIsYUFBYSxFQUFFLENBQUMsQ0FBQyxLQUFLO1NBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBRUosU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQXFCLEVBQUUsRUFBRTtZQUMxQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7WUFDRCxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFTyxhQUFhLENBQUMsR0FBUTtRQUM1QixPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBVyxFQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELFFBQVEsRUFBRSxJQUFJO1lBQ2QsSUFBSSxFQUFFLE9BQU87WUFDYixTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUk7U0FDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0Y7QUF0REQsOEJBc0RDIn0=
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TocContentParser = void 0;
|
|
4
|
-
const path = require("path");
|
|
5
|
-
const fs = require("fs-extra");
|
|
6
|
-
class TocContentParser {
|
|
7
|
-
async parseContentFolder(contentFolderPath, workingDirectory) {
|
|
8
|
-
const items = await fs.readdir(contentFolderPath);
|
|
9
|
-
const contentItems = [];
|
|
10
|
-
for (const item of items) {
|
|
11
|
-
const itemPath = path.join(contentFolderPath, item);
|
|
12
|
-
const stats = await fs.stat(itemPath);
|
|
13
|
-
if (stats.isDirectory()) {
|
|
14
|
-
const subItems = await this.parseContentFolder(itemPath, workingDirectory);
|
|
15
|
-
if (subItems.length > 0) {
|
|
16
|
-
contentItems.push({
|
|
17
|
-
group: item,
|
|
18
|
-
items: subItems[0].items // Take items from the Custom Content group
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
else if (stats.isFile() && item.endsWith(".md")) {
|
|
23
|
-
const relativePath = path.relative(workingDirectory, itemPath);
|
|
24
|
-
const pageName = path.basename(item, ".md");
|
|
25
|
-
contentItems.push({
|
|
26
|
-
page: pageName,
|
|
27
|
-
file: this.normalizePath(relativePath)
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
// Return empty array if no markdown files were found
|
|
32
|
-
if (contentItems.length === 0) {
|
|
33
|
-
return [];
|
|
34
|
-
}
|
|
35
|
-
// Wrap everything under a "Custom Content" group
|
|
36
|
-
return [{
|
|
37
|
-
group: "Custom Content",
|
|
38
|
-
items: contentItems
|
|
39
|
-
}];
|
|
40
|
-
}
|
|
41
|
-
normalizePath(path) {
|
|
42
|
-
return path.replace(/\\/g, '/');
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
exports.TocContentParser = TocContentParser;
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9jLWNvbnRlbnQtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3BvcnRhbC9uZXcvdG9jL3RvYy1jb250ZW50LXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFDN0IsK0JBQStCO0FBRy9CLE1BQWEsZ0JBQWdCO0lBQzNCLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBeUIsRUFBRSxnQkFBd0I7UUFDMUUsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbEQsTUFBTSxZQUFZLEdBQWlDLEVBQUUsQ0FBQztRQUV0RCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXRDLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLFlBQVksQ0FBQyxJQUFJLENBQUM7d0JBQ2hCLEtBQUssRUFBRSxJQUFJO3dCQUNYLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLDJDQUEyQztxQkFDckUsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBRTVDLFlBQVksQ0FBQyxJQUFJLENBQUM7b0JBQ2hCLElBQUksRUFBRSxRQUFRO29CQUNkLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztpQkFDdkMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxxREFBcUQ7UUFDckQsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELGlEQUFpRDtRQUNqRCxPQUFPLENBQUM7Z0JBQ04sS0FBSyxFQUFFLGdCQUFnQjtnQkFDdkIsS0FBSyxFQUFFLFlBQVk7YUFDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFZO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBM0NELDRDQTJDQyJ9
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TocStructureGenerator = void 0;
|
|
4
|
-
const yaml_1 = require("yaml");
|
|
5
|
-
class TocStructureGenerator {
|
|
6
|
-
createTocStructure(endpointGroups, models, expandEndpoints = false, expandModels = false, contentGroups = []) {
|
|
7
|
-
const tocStructure = {
|
|
8
|
-
toc: []
|
|
9
|
-
};
|
|
10
|
-
// Add Getting Started section
|
|
11
|
-
tocStructure.toc.push({
|
|
12
|
-
group: "Getting Started",
|
|
13
|
-
items: [
|
|
14
|
-
{
|
|
15
|
-
generate: "How to Get Started",
|
|
16
|
-
from: "getting-started"
|
|
17
|
-
}
|
|
18
|
-
]
|
|
19
|
-
});
|
|
20
|
-
// Add content groups
|
|
21
|
-
if (contentGroups.length > 0) {
|
|
22
|
-
tocStructure.toc.push(...contentGroups);
|
|
23
|
-
}
|
|
24
|
-
// Add API Endpoints section
|
|
25
|
-
if (!expandEndpoints || endpointGroups.size === 0) {
|
|
26
|
-
tocStructure.toc.push({
|
|
27
|
-
generate: "API Endpoints",
|
|
28
|
-
from: "endpoints"
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
tocStructure.toc.push({
|
|
33
|
-
group: "API Endpoints",
|
|
34
|
-
items: Array.from(endpointGroups).map(([groupName, endpoints]) => ({
|
|
35
|
-
group: groupName,
|
|
36
|
-
items: [
|
|
37
|
-
{
|
|
38
|
-
generate: null,
|
|
39
|
-
from: "endpoint-group-overview",
|
|
40
|
-
endpointGroup: groupName
|
|
41
|
-
},
|
|
42
|
-
...endpoints
|
|
43
|
-
]
|
|
44
|
-
}))
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
// Add Models section
|
|
48
|
-
if (!expandModels || models.length === 0) {
|
|
49
|
-
tocStructure.toc.push({
|
|
50
|
-
generate: "Models",
|
|
51
|
-
from: "models"
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
tocStructure.toc.push({
|
|
56
|
-
group: "Models",
|
|
57
|
-
items: models
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
//Add Sdk Infra section
|
|
61
|
-
tocStructure.toc.push({
|
|
62
|
-
generate: "SDK Infrastructure",
|
|
63
|
-
from: "sdk-infra"
|
|
64
|
-
});
|
|
65
|
-
return tocStructure;
|
|
66
|
-
}
|
|
67
|
-
transformToYaml(toc) {
|
|
68
|
-
const transformedToc = this.transformKeys(toc);
|
|
69
|
-
return (0, yaml_1.stringify)(transformedToc, {
|
|
70
|
-
indent: 2,
|
|
71
|
-
nullStr: ""
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
transformKeys(obj) {
|
|
75
|
-
if (Array.isArray(obj)) {
|
|
76
|
-
return obj.map((item) => this.transformKeys(item));
|
|
77
|
-
}
|
|
78
|
-
if (obj !== null && typeof obj === "object") {
|
|
79
|
-
return Object.fromEntries(Object.entries(obj).map(([key, value]) => [
|
|
80
|
-
key.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(),
|
|
81
|
-
this.transformKeys(value)
|
|
82
|
-
]));
|
|
83
|
-
}
|
|
84
|
-
return obj;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
exports.TocStructureGenerator = TocStructureGenerator;
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9jLXN0cnVjdHVyZS1nZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcG9ydGFsL25ldy90b2MvdG9jLXN0cnVjdHVyZS1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQWlDO0FBR2pDLE1BQWEscUJBQXFCO0lBQ2hDLGtCQUFrQixDQUNoQixjQUEwQyxFQUMxQyxNQUFrQixFQUNsQixrQkFBMkIsS0FBSyxFQUNoQyxlQUF3QixLQUFLLEVBQzdCLGdCQUE0QixFQUFFO1FBRTlCLE1BQU0sWUFBWSxHQUFRO1lBQ3hCLEdBQUcsRUFBRSxFQUFFO1NBQ1IsQ0FBQztRQUVGLDhCQUE4QjtRQUM5QixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNwQixLQUFLLEVBQUUsaUJBQWlCO1lBQ3hCLEtBQUssRUFBRTtnQkFDTDtvQkFDRSxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixJQUFJLEVBQUUsaUJBQWlCO2lCQUN4QjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgscUJBQXFCO1FBQ3JCLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLGVBQWUsSUFBSSxjQUFjLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xELFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNwQixRQUFRLEVBQUUsZUFBZTtnQkFDekIsSUFBSSxFQUFFLFdBQVc7YUFDbEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDcEIsS0FBSyxFQUFFLGVBQWU7Z0JBQ3RCLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNqRSxLQUFLLEVBQUUsU0FBUztvQkFDaEIsS0FBSyxFQUFFO3dCQUNMOzRCQUNFLFFBQVEsRUFBRSxJQUFJOzRCQUNkLElBQUksRUFBRSx5QkFBeUI7NEJBQy9CLGFBQWEsRUFBRSxTQUFTO3lCQUNHO3dCQUM3QixHQUFHLFNBQVM7cUJBQ2I7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0osQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsWUFBWSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixJQUFJLEVBQUUsUUFBUTthQUNmLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BCLEtBQUssRUFBRSxRQUFRO2dCQUNmLEtBQUssRUFBRSxNQUFNO2FBQ2QsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNwQixRQUFRLEVBQUUsb0JBQW9CO1lBQzlCLElBQUksRUFBRSxXQUFXO1NBQ2xCLENBQUMsQ0FBQztRQUVILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxlQUFlLENBQUMsR0FBUTtRQUN0QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sSUFBQSxnQkFBUyxFQUFDLGNBQWMsRUFBRTtZQUMvQixNQUFNLEVBQUUsQ0FBQztZQUNULE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGFBQWEsQ0FBQyxHQUFRO1FBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDNUMsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDeEMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3hELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO2FBQzFCLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGO0FBL0ZELHNEQStGQyJ9
|
|
File without changes
|
|
File without changes
|