@salesforce/plugin-command-reference 2.4.5 → 3.0.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 +33 -17
- package/lib/commands/commandreference/generate.d.ts +14 -7
- package/lib/commands/commandreference/generate.js +105 -52
- package/lib/commands/commandreference/generate.js.map +1 -1
- package/lib/commands/jit/install.js +4 -7
- package/lib/commands/jit/install.js.map +1 -1
- package/lib/ditamap/base-ditamap.js +1 -0
- package/lib/ditamap/base-ditamap.js.map +1 -1
- package/lib/ditamap/cli-reference.js +1 -0
- package/lib/ditamap/cli-reference.js.map +1 -1
- package/lib/ditamap/command.d.ts +8 -5
- package/lib/ditamap/command.js +50 -53
- package/lib/ditamap/command.js.map +1 -1
- package/lib/ditamap/ditamap.d.ts +8 -8
- package/lib/ditamap/ditamap.js +10 -10
- package/lib/ditamap/ditamap.js.map +1 -1
- package/lib/ditamap/help-reference.js +1 -0
- package/lib/ditamap/help-reference.js.map +1 -1
- package/lib/ditamap/topic-commands.d.ts +2 -2
- package/lib/ditamap/topic-commands.js +1 -0
- package/lib/ditamap/topic-commands.js.map +1 -1
- package/lib/ditamap/topic-ditamap.js +1 -0
- package/lib/ditamap/topic-ditamap.js.map +1 -1
- package/lib/docs.d.ts +4 -5
- package/lib/docs.js +53 -65
- package/lib/docs.js.map +1 -1
- package/lib/utils.d.ts +81 -7
- package/lib/utils.js +4 -19
- package/lib/utils.js.map +1 -1
- package/messages/main.md +53 -0
- package/oclif.manifest.json +33 -13
- package/package.json +142 -42
- package/lib/ditamap/cli-reference-topic.d.ts +0 -5
- package/lib/ditamap/cli-reference-topic.js +0 -28
- package/lib/ditamap/cli-reference-topic.js.map +0 -1
- package/lib/ditamap/main-topic-intro.d.ts +0 -6
- package/lib/ditamap/main-topic-intro.js +0 -43
- package/lib/ditamap/main-topic-intro.js.map +0 -1
- package/messages/main.json +0 -9
- package/templates/cli_reference_topic.hbs +0 -25
- package/templates/main_topic_intro.hbs +0 -44
package/lib/ditamap/command.js
CHANGED
|
@@ -9,14 +9,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.Command = void 0;
|
|
10
10
|
const path_1 = require("path");
|
|
11
11
|
const ts_types_1 = require("@salesforce/ts-types");
|
|
12
|
-
const ejs = require("ejs");
|
|
13
12
|
const utils_1 = require("../utils");
|
|
14
13
|
const ditamap_1 = require("./ditamap");
|
|
15
14
|
const getDefault = async (flag) => {
|
|
16
|
-
if (
|
|
17
|
-
return
|
|
15
|
+
if (!flag) {
|
|
16
|
+
return '';
|
|
18
17
|
}
|
|
19
|
-
|
|
18
|
+
if (typeof flag.default === 'function') {
|
|
20
19
|
try {
|
|
21
20
|
const help = await flag.default();
|
|
22
21
|
return help || '';
|
|
@@ -26,92 +25,90 @@ const getDefault = async (flag) => {
|
|
|
26
25
|
}
|
|
27
26
|
}
|
|
28
27
|
else {
|
|
29
|
-
return
|
|
28
|
+
return flag.default;
|
|
30
29
|
}
|
|
31
30
|
};
|
|
32
31
|
class Command extends ditamap_1.Ditamap {
|
|
33
32
|
constructor(topic, subtopic, command, commandMeta = {}) {
|
|
34
33
|
const commandWithUnderscores = (0, ts_types_1.ensureString)(command.id).replace(/:/g, '_');
|
|
35
34
|
const filename = ditamap_1.Ditamap.file(`cli_reference_${commandWithUnderscores}`, 'xml');
|
|
36
|
-
super(filename,
|
|
37
|
-
for (const flag of Object.keys(command.flags)) {
|
|
38
|
-
if (command.flags[flag].summary) {
|
|
39
|
-
command.flags[flag].summary = ejs.render(command.flags[flag].summary, {
|
|
40
|
-
command,
|
|
41
|
-
config: { bin: commandMeta.binary },
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
if (command.flags[flag].description) {
|
|
45
|
-
command.flags[flag].description = ejs.render(command.flags[flag].description, {
|
|
46
|
-
command,
|
|
47
|
-
config: { bin: commandMeta.binary },
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
35
|
+
super(filename, undefined);
|
|
51
36
|
this.flags = (0, ts_types_1.ensureObject)(command.flags);
|
|
52
|
-
|
|
53
|
-
const
|
|
37
|
+
this.commandMeta = commandMeta;
|
|
38
|
+
const summary = (0, utils_1.punctuate)(command.summary);
|
|
39
|
+
this.commandName = command.id.replace(/:/g, (0, ts_types_1.asString)(this.commandMeta.topicSeparator, ':'));
|
|
40
|
+
const description = command.description
|
|
41
|
+
? (0, utils_1.replaceConfigVariables)(command.description, (0, ts_types_1.asString)(this.commandMeta.binary, 'unknown'), this.commandName)
|
|
42
|
+
: undefined;
|
|
54
43
|
// Help are all the lines after the first line in the description. Before oclif, there was a 'help' property so continue to
|
|
55
44
|
// support that.
|
|
56
45
|
const help = this.formatParagraphs(description);
|
|
57
46
|
let trailblazerCommunityUrl;
|
|
58
47
|
let trailblazerCommunityName;
|
|
59
|
-
if (commandMeta.trailblazerCommunityLink) {
|
|
60
|
-
const community =
|
|
61
|
-
trailblazerCommunityUrl = community.url;
|
|
62
|
-
trailblazerCommunityName = community.name;
|
|
48
|
+
if (this.commandMeta.trailblazerCommunityLink) {
|
|
49
|
+
const community = this.commandMeta.trailblazerCommunityLink;
|
|
50
|
+
trailblazerCommunityUrl = community.url ?? 'unknown';
|
|
51
|
+
trailblazerCommunityName = community.name ?? 'unknown';
|
|
63
52
|
}
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
53
|
+
const examples = (command.examples ?? []).map((example) => {
|
|
54
|
+
let desc;
|
|
55
|
+
let commands;
|
|
56
|
+
if (typeof example === 'string') {
|
|
57
|
+
const parts = example.split('\n');
|
|
58
|
+
desc = parts.length > 1 ? parts[0] : null;
|
|
59
|
+
commands = parts.length > 1 ? parts.slice(1) : [parts[0]];
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
desc = example.description;
|
|
63
|
+
commands = [example.command];
|
|
64
|
+
}
|
|
69
65
|
return {
|
|
70
|
-
description: desc,
|
|
71
|
-
commands: commands.map((
|
|
72
|
-
return c
|
|
73
|
-
.replace(/<%= config.bin %>/g, (0, ts_types_1.asString)(commandMeta.binary))
|
|
74
|
-
.replace(/<%= command.id %>/g, commandName);
|
|
75
|
-
}),
|
|
66
|
+
description: (0, utils_1.replaceConfigVariables)(desc ?? '', (0, ts_types_1.asString)(this.commandMeta.binary, 'unknown'), this.commandName),
|
|
67
|
+
commands: commands.map((cmd) => (0, utils_1.replaceConfigVariables)(cmd, (0, ts_types_1.asString)(this.commandMeta.binary, 'unknown'), this.commandName)),
|
|
76
68
|
};
|
|
77
69
|
});
|
|
78
|
-
const state = command.state
|
|
79
|
-
|
|
80
|
-
name: commandName,
|
|
81
|
-
binary: commandMeta.binary,
|
|
82
|
-
topicSeparator: commandMeta.topicSeparator,
|
|
83
|
-
commandWithUnderscores,
|
|
84
|
-
examples,
|
|
70
|
+
const state = command.state ?? this.commandMeta.state;
|
|
71
|
+
const commandData = {
|
|
72
|
+
name: this.commandName,
|
|
85
73
|
summary,
|
|
86
74
|
description,
|
|
75
|
+
binary: 'binary' in commandMeta && typeof commandMeta.binary === 'string' ? commandMeta.binary : 'unknown',
|
|
76
|
+
commandWithUnderscores,
|
|
77
|
+
deprecated: command.deprecated ?? false,
|
|
78
|
+
examples,
|
|
87
79
|
help,
|
|
80
|
+
isBetaCommand: state === 'beta',
|
|
88
81
|
isClosedPilotCommand: state === 'closedPilot',
|
|
89
82
|
isOpenPilotCommand: state === 'openPilot',
|
|
90
|
-
isBetaCommand: state === 'beta',
|
|
91
|
-
trailblazerCommunityUrl,
|
|
92
83
|
trailblazerCommunityName,
|
|
93
|
-
|
|
84
|
+
trailblazerCommunityUrl,
|
|
85
|
+
};
|
|
86
|
+
this.data = Object.assign(command, commandData);
|
|
94
87
|
this.destination = (0, path_1.join)(ditamap_1.Ditamap.outputDir, topic, filename);
|
|
95
88
|
}
|
|
96
89
|
async getParametersForTemplate(flags) {
|
|
97
90
|
const final = [];
|
|
98
91
|
for (const [flagName, flag] of Object.entries(flags)) {
|
|
99
|
-
if (flag.hidden)
|
|
92
|
+
if (!flag || flag.hidden)
|
|
100
93
|
continue;
|
|
101
|
-
const description = Array.isArray(flag
|
|
102
|
-
const entireDescription = flag.summary
|
|
94
|
+
const description = (0, utils_1.replaceConfigVariables)(Array.isArray(flag?.description) ? flag?.description.join('\n') : flag?.description ?? '', (0, ts_types_1.asString)(this.commandMeta.binary, 'unknown'), this.commandName);
|
|
95
|
+
const entireDescription = flag.summary
|
|
96
|
+
? `${(0, utils_1.replaceConfigVariables)(flag.summary, (0, ts_types_1.asString)(this.commandMeta.binary, 'unknown'), this.commandName)}\n${description}`
|
|
97
|
+
: description;
|
|
103
98
|
const updated = Object.assign({}, flag, {
|
|
104
99
|
name: flagName,
|
|
105
100
|
description: this.formatParagraphs(entireDescription),
|
|
106
|
-
optional: !flag
|
|
107
|
-
kind: flag
|
|
108
|
-
hasValue: flag
|
|
101
|
+
optional: !flag?.required,
|
|
102
|
+
kind: flag?.kind ?? flag?.type,
|
|
103
|
+
hasValue: flag?.type !== 'boolean',
|
|
104
|
+
// eslint-disable-next-line no-await-in-loop
|
|
109
105
|
defaultFlagValue: await getDefault(flag),
|
|
110
106
|
});
|
|
111
107
|
final.push(updated);
|
|
112
108
|
}
|
|
113
109
|
return final;
|
|
114
110
|
}
|
|
111
|
+
// eslint-disable-next-line class-methods-use-this
|
|
115
112
|
getTemplateFileName() {
|
|
116
113
|
return 'command.hbs';
|
|
117
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/ditamap/command.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,+BAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/ditamap/command.ts"],"names":[],"mappings":"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"}
|
package/lib/ditamap/ditamap.d.ts
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DitamapData } from '../utils';
|
|
2
2
|
export declare abstract class Ditamap {
|
|
3
3
|
private filename;
|
|
4
|
-
protected data:
|
|
4
|
+
protected data: DitamapData;
|
|
5
5
|
static SUFFIX: string;
|
|
6
6
|
static templatesDir: string;
|
|
7
7
|
static outputDir: string;
|
|
8
8
|
static cliVersion: string;
|
|
9
|
-
static plugins:
|
|
9
|
+
static plugins: Record<string, string>;
|
|
10
10
|
static pluginVersions: Array<{
|
|
11
11
|
name: string;
|
|
12
12
|
version: string;
|
|
13
13
|
}>;
|
|
14
|
+
private static _suffix;
|
|
15
|
+
protected destination: string;
|
|
16
|
+
private readonly source;
|
|
17
|
+
constructor(filename: string, data: DitamapData);
|
|
14
18
|
static get suffix(): string;
|
|
15
19
|
static set suffix(suffix: string);
|
|
16
20
|
static file(name: string, ext: string): string;
|
|
17
|
-
private static _suffix;
|
|
18
|
-
protected destination: string;
|
|
19
|
-
private source;
|
|
20
|
-
constructor(filename: string, data: JsonMap);
|
|
21
|
-
abstract getTemplateFileName(): string;
|
|
22
21
|
getFilename(): string;
|
|
23
22
|
getOutputFilePath(): string;
|
|
24
23
|
write(): Promise<void>;
|
|
@@ -31,4 +30,5 @@ export declare abstract class Ditamap {
|
|
|
31
30
|
* @returns {object}
|
|
32
31
|
*/
|
|
33
32
|
protected transformToDitamap(): Promise<string>;
|
|
33
|
+
abstract getTemplateFileName(): string;
|
|
34
34
|
}
|
package/lib/ditamap/ditamap.js
CHANGED
|
@@ -9,7 +9,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.Ditamap = void 0;
|
|
10
10
|
const path_1 = require("path");
|
|
11
11
|
const fs = require("fs/promises");
|
|
12
|
-
const mkdirp = require("mkdirp");
|
|
13
12
|
const debugCreator = require("debug");
|
|
14
13
|
const hb = require("handlebars");
|
|
15
14
|
const debug = debugCreator('commandreference');
|
|
@@ -26,14 +25,20 @@ hb.registerHelper('uniqueId', (...strings) => {
|
|
|
26
25
|
/*
|
|
27
26
|
* Returns true if the string should be formatted as code block in docs
|
|
28
27
|
*/
|
|
29
|
-
//
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
29
|
hb.registerHelper('isCodeBlock', function (val, options) {
|
|
31
|
-
return val.
|
|
30
|
+
return val.startsWith('sf') || val.startsWith('sfdx') || val.includes('$') || val.includes('>>')
|
|
32
31
|
? options.fn(this)
|
|
33
32
|
: options.inverse(this);
|
|
34
33
|
});
|
|
35
34
|
hb.registerHelper('nextVersion', (value) => parseInt(value, 2) + 1);
|
|
36
35
|
class Ditamap {
|
|
36
|
+
constructor(filename, data) {
|
|
37
|
+
this.filename = filename;
|
|
38
|
+
this.data = data;
|
|
39
|
+
this.source = (0, path_1.join)(Ditamap.templatesDir, this.getTemplateFileName());
|
|
40
|
+
this.destination = (0, path_1.join)(Ditamap.outputDir, filename);
|
|
41
|
+
}
|
|
37
42
|
static get suffix() {
|
|
38
43
|
return Ditamap._suffix;
|
|
39
44
|
}
|
|
@@ -43,12 +48,6 @@ class Ditamap {
|
|
|
43
48
|
static file(name, ext) {
|
|
44
49
|
return Ditamap.suffix ? `${name}_${Ditamap.suffix}.${ext}` : `${name}.${ext}`;
|
|
45
50
|
}
|
|
46
|
-
constructor(filename, data) {
|
|
47
|
-
this.filename = filename;
|
|
48
|
-
this.data = data;
|
|
49
|
-
this.source = (0, path_1.join)(Ditamap.templatesDir, this.getTemplateFileName());
|
|
50
|
-
this.destination = (0, path_1.join)(Ditamap.outputDir, filename);
|
|
51
|
-
}
|
|
52
51
|
getFilename() {
|
|
53
52
|
return this.filename;
|
|
54
53
|
}
|
|
@@ -56,10 +55,11 @@ class Ditamap {
|
|
|
56
55
|
return this.destination;
|
|
57
56
|
}
|
|
58
57
|
async write() {
|
|
59
|
-
await
|
|
58
|
+
await fs.mkdir((0, path_1.dirname)(this.destination), { recursive: true });
|
|
60
59
|
const output = await this.transformToDitamap();
|
|
61
60
|
await fs.writeFile(this.destination, output);
|
|
62
61
|
}
|
|
62
|
+
// eslint-disable-next-line class-methods-use-this
|
|
63
63
|
formatParagraphs(textToFormat) {
|
|
64
64
|
return textToFormat ? textToFormat.split('\n').filter((n) => n !== '') : [];
|
|
65
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ditamap.js","sourceRoot":"","sources":["../../src/ditamap/ditamap.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,+BAAqC;AACrC,kCAAkC;AAClC,
|
|
1
|
+
{"version":3,"file":"ditamap.js","sourceRoot":"","sources":["../../src/ditamap/ditamap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help-reference.js","sourceRoot":"","sources":["../../src/ditamap/help-reference.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,uCAAoC;AAEpC,MAAa,aAAc,SAAQ,iBAAO;IACxC;QACE,sCAAsC;QACtC,MAAM,QAAQ,GAAG,iBAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QAC3D,KAAK,CAAC,QAAQ,EAAE;YACd,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACjC,CAAC,CAAC;IACL,CAAC;
|
|
1
|
+
{"version":3,"file":"help-reference.js","sourceRoot":"","sources":["../../src/ditamap/help-reference.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,uCAAoC;AAEpC,MAAa,aAAc,SAAQ,iBAAO;IACxC;QACE,sCAAsC;QACtC,MAAM,QAAQ,GAAG,iBAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QAC3D,KAAK,CAAC,QAAQ,EAAE;YACd,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACjC,CAAC,CAAC;IACL,CAAC;IAED,kDAAkD;IAC3C,mBAAmB;QACxB,OAAO,wBAAwB,CAAC;IAClC,CAAC;CACF;AAbD,sCAaC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SfTopic } from '../utils';
|
|
2
2
|
import { Ditamap } from './ditamap';
|
|
3
3
|
export declare class TopicCommands extends Ditamap {
|
|
4
|
-
constructor(topic: string, topicMeta:
|
|
4
|
+
constructor(topic: string, topicMeta: SfTopic);
|
|
5
5
|
getTemplateFileName(): string;
|
|
6
6
|
}
|
|
@@ -17,6 +17,7 @@ class TopicCommands extends ditamap_1.Ditamap {
|
|
|
17
17
|
// Override destination to include topic and subtopic
|
|
18
18
|
this.destination = (0, path_1.join)(ditamap_1.Ditamap.outputDir, topic, filename);
|
|
19
19
|
}
|
|
20
|
+
// eslint-disable-next-line class-methods-use-this
|
|
20
21
|
getTemplateFileName() {
|
|
21
22
|
return 'cli_reference_topic_commands.hbs';
|
|
22
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topic-commands.js","sourceRoot":"","sources":["../../src/ditamap/topic-commands.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,+BAA4B;AAE5B,uCAAoC;AAEpC,MAAa,aAAc,SAAQ,iBAAO;IACxC,YAAmB,KAAa,EAAE,SAAkB;QAClD,MAAM,QAAQ,GAAG,iBAAO,CAAC,IAAI,CAAC,iBAAiB,KAAK,WAAW,EAAE,KAAK,CAAC,CAAC;QACxE,sCAAsC;QACtC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE3B,qDAAqD;QACrD,IAAI,CAAC,WAAW,GAAG,IAAA,WAAI,EAAC,iBAAO,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;
|
|
1
|
+
{"version":3,"file":"topic-commands.js","sourceRoot":"","sources":["../../src/ditamap/topic-commands.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,+BAA4B;AAE5B,uCAAoC;AAEpC,MAAa,aAAc,SAAQ,iBAAO;IACxC,YAAmB,KAAa,EAAE,SAAkB;QAClD,MAAM,QAAQ,GAAG,iBAAO,CAAC,IAAI,CAAC,iBAAiB,KAAK,WAAW,EAAE,KAAK,CAAC,CAAC;QACxE,sCAAsC;QACtC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE3B,qDAAqD;QACrD,IAAI,CAAC,WAAW,GAAG,IAAA,WAAI,EAAC,iBAAO,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,kDAAkD;IAC3C,mBAAmB;QACxB,OAAO,kCAAkC,CAAC;IAC5C,CAAC;CACF;AAdD,sCAcC"}
|
|
@@ -18,6 +18,7 @@ class TopicDitamap extends ditamap_1.Ditamap {
|
|
|
18
18
|
// Override destination to include topic and subtopic
|
|
19
19
|
this.destination = (0, path_1.join)(ditamap_1.Ditamap.outputDir, topic, filename);
|
|
20
20
|
}
|
|
21
|
+
// eslint-disable-next-line class-methods-use-this
|
|
21
22
|
getTemplateFileName() {
|
|
22
23
|
return 'topic_ditamap.hbs';
|
|
23
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topic-ditamap.js","sourceRoot":"","sources":["../../src/ditamap/topic-ditamap.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,+BAA4B;AAC5B,uCAAoC;AAEpC,MAAa,YAAa,SAAQ,iBAAO;IACvC,YAAmB,KAAa,EAAE,UAAoB;QACpD,MAAM,QAAQ,GAAG,iBAAO,CAAC,IAAI,CAAC,iBAAiB,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QACnE,sCAAsC;QACtC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAErC,qDAAqD;QACrD,IAAI,CAAC,WAAW,GAAG,IAAA,WAAI,EAAC,iBAAO,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;
|
|
1
|
+
{"version":3,"file":"topic-ditamap.js","sourceRoot":"","sources":["../../src/ditamap/topic-ditamap.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,+BAA4B;AAC5B,uCAAoC;AAEpC,MAAa,YAAa,SAAQ,iBAAO;IACvC,YAAmB,KAAa,EAAE,UAAoB;QACpD,MAAM,QAAQ,GAAG,iBAAO,CAAC,IAAI,CAAC,iBAAiB,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QACnE,sCAAsC;QACtC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAErC,qDAAqD;QACrD,IAAI,CAAC,WAAW,GAAG,IAAA,WAAI,EAAC,iBAAO,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,kDAAkD;IAC3C,mBAAmB;QACxB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;CACF;AAfD,oCAeC"}
|
package/lib/docs.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { CommandClass } from './utils';
|
|
1
|
+
import { AnyJson } from '@salesforce/ts-types';
|
|
2
|
+
import { CliMeta, SfTopics, CommandClass } from './utils';
|
|
3
3
|
export declare class Docs {
|
|
4
4
|
private outputDir;
|
|
5
|
-
private plugins;
|
|
6
5
|
private hidden;
|
|
7
6
|
private topicMeta;
|
|
8
7
|
private cliMeta;
|
|
9
|
-
constructor(outputDir: string,
|
|
8
|
+
constructor(outputDir: string, hidden: boolean, topicMeta: SfTopics, cliMeta: CliMeta);
|
|
10
9
|
build(commands: CommandClass[]): Promise<void>;
|
|
11
|
-
populateTopic(topic: string, subtopics:
|
|
10
|
+
populateTopic(topic: string, subtopics: Map<string, CommandClass[]>): Promise<AnyJson[]>;
|
|
12
11
|
/**
|
|
13
12
|
* Group all commands by the top level topic and then subtopic. e.g. force, analytics, evergreen, etc
|
|
14
13
|
* then org, apex, etc within the force namespace.
|
package/lib/docs.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.Docs = void 0;
|
|
10
|
-
const
|
|
10
|
+
const fs = require("fs/promises");
|
|
11
11
|
const ts_types_1 = require("@salesforce/ts-types");
|
|
12
12
|
const chalk = require("chalk");
|
|
13
13
|
const base_ditamap_1 = require("./ditamap/base-ditamap");
|
|
@@ -21,64 +21,58 @@ function emitNoTopicMetadataWarning(topic) {
|
|
|
21
21
|
utils_1.events.emit('warning', `No metadata for topic ${chalk.bold(topic)}. That topic owner must add topic metadata in the oclif section in the package.json file within their plugin.`);
|
|
22
22
|
}
|
|
23
23
|
class Docs {
|
|
24
|
-
constructor(outputDir,
|
|
24
|
+
constructor(outputDir, hidden, topicMeta, cliMeta) {
|
|
25
25
|
this.outputDir = outputDir;
|
|
26
|
-
this.plugins = plugins;
|
|
27
26
|
this.hidden = hidden;
|
|
28
27
|
this.topicMeta = topicMeta;
|
|
29
28
|
this.cliMeta = cliMeta;
|
|
30
29
|
}
|
|
31
30
|
async build(commands) {
|
|
32
31
|
// Create if doesn't exist
|
|
33
|
-
await
|
|
32
|
+
await fs.mkdir(this.outputDir, { recursive: true });
|
|
34
33
|
await this.populateTemplate(commands);
|
|
35
34
|
}
|
|
36
35
|
async populateTopic(topic, subtopics) {
|
|
37
|
-
const topicMeta =
|
|
38
|
-
|
|
36
|
+
const topicMeta = this.topicMeta.get(topic);
|
|
37
|
+
if (!topicMeta) {
|
|
38
|
+
throw new Error(`No topic meta for ${topic} - add this topic to the oclif section of the package.json.`);
|
|
39
|
+
}
|
|
40
|
+
let description = topicMeta.description;
|
|
39
41
|
if (!description && !topicMeta.external) {
|
|
40
|
-
|
|
42
|
+
// TODO: check why the same property is used again when it is already used above
|
|
43
|
+
description = (0, utils_1.punctuate)(topicMeta.description);
|
|
41
44
|
if (!description) {
|
|
42
45
|
utils_1.events.emit('warning', `No description for topic ${chalk.bold(topic)}. Skipping until topic owner adds topic metadata in the oclif section in the package.json file within their plugin.`);
|
|
43
|
-
return;
|
|
46
|
+
return [];
|
|
44
47
|
}
|
|
45
48
|
}
|
|
46
49
|
const subTopicNames = [];
|
|
47
50
|
const commandIds = [];
|
|
48
|
-
for (const subtopic of
|
|
49
|
-
const subtopicOrCommand = (0, ts_types_1.isArray)(subtopics[subtopic])
|
|
50
|
-
? Object.assign([], subtopics[subtopic])
|
|
51
|
-
: Object.assign({}, subtopics[subtopic]);
|
|
51
|
+
for (const [subtopic, classes] of subtopics.entries()) {
|
|
52
52
|
try {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
commandIds.push(command.id);
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
const subTopicsMeta = (0, ts_types_1.ensureJsonMap)(topicMeta.subtopics);
|
|
62
|
-
if (!subTopicsMeta[subtopic]) {
|
|
63
|
-
emitNoTopicMetadataWarning(`${topic}:${subtopic}`);
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
53
|
+
// const subTopicsMeta = topicMeta.subtopics;
|
|
54
|
+
// if (!subTopicsMeta?.get(subtopic)) {
|
|
55
|
+
// emitNoTopicMetadataWarning(`${topic}:${subtopic}`);
|
|
56
|
+
// continue;
|
|
57
|
+
// }
|
|
66
58
|
subTopicNames.push(subtopic);
|
|
67
59
|
// Commands within the sub topic
|
|
68
|
-
for (const command of
|
|
60
|
+
for (const command of classes) {
|
|
69
61
|
const fullTopic = (0, ts_types_1.ensureString)(command.id).replace(/:\w+$/, '');
|
|
70
|
-
const commandsInFullTopic =
|
|
62
|
+
const commandsInFullTopic = classes.filter((cmd) => (0, ts_types_1.ensureString)(cmd.id).startsWith(fullTopic));
|
|
71
63
|
const commandMeta = this.resolveCommandMeta((0, ts_types_1.ensureString)(command.id), command, commandsInFullTopic.length);
|
|
64
|
+
// eslint-disable-next-line no-await-in-loop
|
|
72
65
|
await this.populateCommand(topic, subtopic, command, commandMeta);
|
|
73
66
|
commandIds.push(command.id);
|
|
74
67
|
}
|
|
75
68
|
}
|
|
76
69
|
catch (error) {
|
|
77
|
-
|
|
70
|
+
const err = error instanceof Error ? error : typeof error === 'string' ? new Error(error) : new Error('Unknown error');
|
|
71
|
+
if (err.name === 'UnexpectedValueTypeError') {
|
|
78
72
|
emitNoTopicMetadataWarning(`${topic}:${subtopic}`);
|
|
79
73
|
}
|
|
80
74
|
else {
|
|
81
|
-
utils_1.events.emit('warning', `Can't create topic for ${topic}:${subtopic}: ${
|
|
75
|
+
utils_1.events.emit('warning', `Can't create topic for ${topic}:${subtopic}: ${err.message}\n`);
|
|
82
76
|
}
|
|
83
77
|
}
|
|
84
78
|
}
|
|
@@ -96,7 +90,8 @@ class Docs {
|
|
|
96
90
|
* @returns The commands grouped by topics/subtopic/commands.
|
|
97
91
|
*/
|
|
98
92
|
groupTopicsAndSubtopics(commands) {
|
|
99
|
-
const topLevelTopics = {};
|
|
93
|
+
// const topLevelTopics: Dictionary<Dictionary<CommandClass | CommandClass[]>> = {};
|
|
94
|
+
const topLevelTopics = new Map();
|
|
100
95
|
for (const command of commands) {
|
|
101
96
|
if (command.hidden && !this.hidden) {
|
|
102
97
|
continue;
|
|
@@ -104,39 +99,37 @@ class Docs {
|
|
|
104
99
|
const commandParts = (0, ts_types_1.ensureString)(command.id).split(':');
|
|
105
100
|
const topLevelTopic = commandParts[0];
|
|
106
101
|
const plugin = command.plugin;
|
|
107
|
-
if (plugin
|
|
102
|
+
if (plugin) {
|
|
108
103
|
// Also include the namespace on the commands so we don't need to do the split at other times in the code.
|
|
109
104
|
command.topic = topLevelTopic;
|
|
110
|
-
const
|
|
105
|
+
const existingTopicsForTopLevel = topLevelTopics.get(topLevelTopic) ?? new Map();
|
|
111
106
|
if (commandParts.length === 1) {
|
|
112
107
|
// This is a top-level topic that is also a command
|
|
113
|
-
|
|
108
|
+
const existingTarget = existingTopicsForTopLevel.get(commandParts[0]) ?? [];
|
|
109
|
+
existingTopicsForTopLevel.set(commandParts[0], [...existingTarget, command]);
|
|
114
110
|
}
|
|
115
111
|
else if (commandParts.length === 2) {
|
|
116
112
|
// This is a command directly under the top-level topic
|
|
117
|
-
|
|
113
|
+
const existingTarget = existingTopicsForTopLevel.get(commandParts[1]) ?? [];
|
|
114
|
+
existingTopicsForTopLevel.set(commandParts[1], [...existingTarget, command]);
|
|
118
115
|
}
|
|
119
116
|
else {
|
|
120
117
|
const subtopic = commandParts[1];
|
|
121
118
|
try {
|
|
122
|
-
const topicMeta =
|
|
123
|
-
const subTopicsMeta =
|
|
124
|
-
if (subTopicsMeta
|
|
119
|
+
const topicMeta = this.topicMeta.get(topLevelTopic);
|
|
120
|
+
const subTopicsMeta = topicMeta?.subtopics?.get(subtopic);
|
|
121
|
+
if (subTopicsMeta?.hidden && !this.hidden) {
|
|
125
122
|
continue;
|
|
126
123
|
}
|
|
127
124
|
}
|
|
128
|
-
catch (e) {
|
|
129
|
-
|
|
130
|
-
const existingSubTopics = topics[subtopic];
|
|
131
|
-
let subtopicCommands = [];
|
|
132
|
-
if (existingSubTopics) {
|
|
133
|
-
subtopicCommands = (0, ts_types_1.isArray)(existingSubTopics) ? existingSubTopics : [existingSubTopics];
|
|
125
|
+
catch (e) {
|
|
126
|
+
// It means no meta so it isn't hidden, although it should always fail before here with no meta found
|
|
134
127
|
}
|
|
135
|
-
|
|
136
|
-
subtopicCommands.
|
|
137
|
-
|
|
128
|
+
command.subtopic = subtopic;
|
|
129
|
+
const subtopicCommands = existingTopicsForTopLevel.get(subtopic) ?? [];
|
|
130
|
+
existingTopicsForTopLevel.set(subtopic, [...subtopicCommands, command]);
|
|
138
131
|
}
|
|
139
|
-
topLevelTopics
|
|
132
|
+
topLevelTopics.set(topLevelTopic, existingTopicsForTopLevel);
|
|
140
133
|
}
|
|
141
134
|
}
|
|
142
135
|
return topLevelTopics;
|
|
@@ -145,12 +138,11 @@ class Docs {
|
|
|
145
138
|
const topicsAndSubtopics = this.groupTopicsAndSubtopics(commands);
|
|
146
139
|
await new cli_reference_1.CLIReference().write();
|
|
147
140
|
await new help_reference_1.HelpReference().write();
|
|
148
|
-
const topics = Object.keys(topicsAndSubtopics);
|
|
149
141
|
// Generate one base file with all top-level topics.
|
|
150
|
-
await new base_ditamap_1.BaseDitamap(
|
|
151
|
-
for (const topic of
|
|
142
|
+
await new base_ditamap_1.BaseDitamap(Array.from(topicsAndSubtopics.keys())).write();
|
|
143
|
+
for (const [topic, subtopics] of topicsAndSubtopics.entries()) {
|
|
152
144
|
utils_1.events.emit('topic', { topic });
|
|
153
|
-
|
|
145
|
+
// eslint-disable-next-line no-await-in-loop
|
|
154
146
|
await this.populateTopic(topic, subtopics);
|
|
155
147
|
}
|
|
156
148
|
}
|
|
@@ -163,32 +155,28 @@ class Docs {
|
|
|
163
155
|
let currentMeta;
|
|
164
156
|
for (part of commandParts) {
|
|
165
157
|
if (currentMeta) {
|
|
166
|
-
const subtopics =
|
|
167
|
-
currentMeta = (
|
|
158
|
+
const subtopics = currentMeta.subtopics;
|
|
159
|
+
currentMeta = subtopics?.get(part);
|
|
168
160
|
}
|
|
169
161
|
else {
|
|
170
|
-
currentMeta =
|
|
162
|
+
currentMeta = this.topicMeta.get(part);
|
|
171
163
|
}
|
|
172
164
|
// Collect all tiers of the meta, so the command will also pick up the topic state (isPilot, etc) if applicable
|
|
173
165
|
Object.assign({}, commandMeta, currentMeta);
|
|
174
166
|
}
|
|
175
167
|
}
|
|
176
168
|
catch (error) {
|
|
169
|
+
// @ts-expect-error: part may be undefined
|
|
177
170
|
if (commandId.endsWith(part)) {
|
|
178
171
|
// This means there wasn't meta information going all the way down to the command, which is ok.
|
|
179
172
|
return commandMeta;
|
|
180
173
|
}
|
|
181
|
-
else {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
if (!commandMeta.description) {
|
|
188
|
-
commandMeta.description = command.description;
|
|
189
|
-
commandMeta.longDescription = command.longDescription || (0, utils_1.punctuate)(command.description);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
174
|
+
else if (commandsInTopic !== 1) {
|
|
175
|
+
utils_1.events.emit('warning', `subtopic "${part}" meta not found for command ${commandId}`);
|
|
176
|
+
}
|
|
177
|
+
else if (!commandMeta.description) {
|
|
178
|
+
commandMeta.description = command.description;
|
|
179
|
+
commandMeta.longDescription = (command.longDescription ? command.longDescription : (0, utils_1.punctuate)(command.description));
|
|
192
180
|
}
|
|
193
181
|
}
|
|
194
182
|
return commandMeta;
|