@teambit/cli 0.0.0-387ca83bd6d05e8441bf8d4e938b4a402307cc6b

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.
Files changed (85) hide show
  1. package/cli.composition.tsx +7 -0
  2. package/cli.docs.mdx +12 -0
  3. package/dist/cli-parser.d.ts +38 -0
  4. package/dist/cli-parser.js +379 -0
  5. package/dist/cli-parser.js.map +1 -0
  6. package/dist/cli.aspect.d.ts +4 -0
  7. package/dist/cli.aspect.js +22 -0
  8. package/dist/cli.aspect.js.map +1 -0
  9. package/dist/cli.cmd.d.ts +32 -0
  10. package/dist/cli.cmd.js +151 -0
  11. package/dist/cli.cmd.js.map +1 -0
  12. package/dist/cli.composition.d.ts +1 -0
  13. package/dist/cli.composition.js +29 -0
  14. package/dist/cli.composition.js.map +1 -0
  15. package/dist/cli.docs.mdx +12 -0
  16. package/dist/cli.main.runtime.d.ts +86 -0
  17. package/dist/cli.main.runtime.js +304 -0
  18. package/dist/cli.main.runtime.js.map +1 -0
  19. package/dist/command-groups.d.ts +31 -0
  20. package/dist/command-groups.js +44 -0
  21. package/dist/command-groups.js.map +1 -0
  22. package/dist/command-helper.d.ts +25 -0
  23. package/dist/command-helper.js +59 -0
  24. package/dist/command-helper.js.map +1 -0
  25. package/dist/command-runner.d.ts +35 -0
  26. package/dist/command-runner.js +176 -0
  27. package/dist/command-runner.js.map +1 -0
  28. package/dist/command.d.ts +130 -0
  29. package/dist/command.js +3 -0
  30. package/dist/command.js.map +1 -0
  31. package/dist/completion.cmd.d.ts +9 -0
  32. package/dist/completion.cmd.js +22 -0
  33. package/dist/completion.cmd.js.map +1 -0
  34. package/dist/default-error-handler.d.ts +12 -0
  35. package/dist/default-error-handler.js +81 -0
  36. package/dist/default-error-handler.js.map +1 -0
  37. package/dist/esm.mjs +17 -0
  38. package/dist/exceptions/already-exists.d.ts +4 -0
  39. package/dist/exceptions/already-exists.js +21 -0
  40. package/dist/exceptions/already-exists.js.map +1 -0
  41. package/dist/exceptions/command-not-found.d.ts +7 -0
  42. package/dist/exceptions/command-not-found.js +44 -0
  43. package/dist/exceptions/command-not-found.js.map +1 -0
  44. package/dist/exceptions/index.d.ts +2 -0
  45. package/dist/exceptions/index.js +33 -0
  46. package/dist/exceptions/index.js.map +1 -0
  47. package/dist/exceptions/yargs-exit-workaround.d.ts +6 -0
  48. package/dist/exceptions/yargs-exit-workaround.js +23 -0
  49. package/dist/exceptions/yargs-exit-workaround.js.map +1 -0
  50. package/dist/generate-doc-md.d.ts +25 -0
  51. package/dist/generate-doc-md.js +151 -0
  52. package/dist/generate-doc-md.js.map +1 -0
  53. package/dist/get-command-id.d.ts +1 -0
  54. package/dist/get-command-id.js +11 -0
  55. package/dist/get-command-id.js.map +1 -0
  56. package/dist/global-flags.d.ts +7 -0
  57. package/dist/global-flags.js +24 -0
  58. package/dist/global-flags.js.map +1 -0
  59. package/dist/handle-errors.d.ts +3 -0
  60. package/dist/handle-errors.js +78 -0
  61. package/dist/handle-errors.js.map +1 -0
  62. package/dist/help.cmd.d.ts +15 -0
  63. package/dist/help.cmd.js +36 -0
  64. package/dist/help.cmd.js.map +1 -0
  65. package/dist/help.d.ts +3 -0
  66. package/dist/help.js +88 -0
  67. package/dist/help.js.map +1 -0
  68. package/dist/index.d.ts +12 -0
  69. package/dist/index.js +147 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/preview-1752165283597.js +7 -0
  72. package/dist/version.cmd.d.ts +13 -0
  73. package/dist/version.cmd.js +39 -0
  74. package/dist/version.cmd.js.map +1 -0
  75. package/dist/yargs-adapter.d.ts +22 -0
  76. package/dist/yargs-adapter.js +114 -0
  77. package/dist/yargs-adapter.js.map +1 -0
  78. package/esm.mjs +17 -0
  79. package/exceptions/already-exists.ts +7 -0
  80. package/exceptions/command-not-found.ts +22 -0
  81. package/exceptions/index.ts +2 -0
  82. package/exceptions/yargs-exit-workaround.ts +10 -0
  83. package/package.json +73 -0
  84. package/types/asset.d.ts +41 -0
  85. package/types/style.d.ts +42 -0
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CliGenerateCmd = exports.CliCmd = void 0;
7
+ function _legacy() {
8
+ const data = require("@teambit/legacy.logger");
9
+ _legacy = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _handleErrors() {
15
+ const data = require("./handle-errors");
16
+ _handleErrors = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ function _legacy2() {
22
+ const data = require("@teambit/legacy.consumer");
23
+ _legacy2 = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
28
+ function _bit() {
29
+ const data = require("@teambit/bit.get-bit-version");
30
+ _bit = function () {
31
+ return data;
32
+ };
33
+ return data;
34
+ }
35
+ function _readline() {
36
+ const data = _interopRequireDefault(require("readline"));
37
+ _readline = function () {
38
+ return data;
39
+ };
40
+ return data;
41
+ }
42
+ function _cliParser() {
43
+ const data = require("./cli-parser");
44
+ _cliParser = function () {
45
+ return data;
46
+ };
47
+ return data;
48
+ }
49
+ function _generateDocMd() {
50
+ const data = require("./generate-doc-md");
51
+ _generateDocMd = function () {
52
+ return data;
53
+ };
54
+ return data;
55
+ }
56
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
57
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
58
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
59
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // eslint-disable-next-line max-classes-per-file
60
+ class CliGenerateCmd {
61
+ constructor(cliMain) {
62
+ this.cliMain = cliMain;
63
+ _defineProperty(this, "name", 'generate');
64
+ _defineProperty(this, "description", 'generate an .md file with all commands details');
65
+ _defineProperty(this, "alias", '');
66
+ _defineProperty(this, "loader", false);
67
+ _defineProperty(this, "group", 'general');
68
+ _defineProperty(this, "options", [['', 'metadata', 'metadata/front-matter to place at the top of the .md file, enter as an object e.g. --metadata.id=cli --metadata.title=commands'], ['', 'docs', 'generate the cli-reference.docs.mdx file'], ['j', 'json', 'output the commands info as JSON']]);
69
+ _defineProperty(this, "private", true);
70
+ }
71
+ async report(args, {
72
+ metadata,
73
+ docs
74
+ }) {
75
+ if (docs) {
76
+ return `---
77
+ description: 'Bit command synopses. Bit version: ${(0, _bit().getBitVersion)()}'
78
+ labels: ['cli', 'mdx', 'docs']
79
+ ---`;
80
+ }
81
+ return new (_generateDocMd().GenerateCommandsDoc)(this.cliMain.commands, {
82
+ metadata
83
+ }).generate();
84
+ }
85
+ async json() {
86
+ return new (_generateDocMd().GenerateCommandsDoc)(this.cliMain.commands, {}).generateJson();
87
+ }
88
+ }
89
+ exports.CliGenerateCmd = CliGenerateCmd;
90
+ class CliCmd {
91
+ constructor(cliMain) {
92
+ this.cliMain = cliMain;
93
+ _defineProperty(this, "name", 'cli');
94
+ _defineProperty(this, "description", 'EXPERIMENTAL. enters bit cli program and generates commands list');
95
+ _defineProperty(this, "alias", '');
96
+ _defineProperty(this, "commands", []);
97
+ _defineProperty(this, "loader", false);
98
+ _defineProperty(this, "group", 'system');
99
+ _defineProperty(this, "options", []);
100
+ }
101
+ async report() {
102
+ _legacy().logger.isDaemon = true;
103
+ const rl = _readline().default.createInterface({
104
+ input: process.stdin,
105
+ output: process.stdout,
106
+ prompt: 'bit > ',
107
+ completer: (line, cb) => completer(line, cb, this.cliMain)
108
+ });
109
+ const cliParser = new (_cliParser().CLIParser)(this.cliMain.commands, this.cliMain.groups, this.cliMain.onCommandStartSlot);
110
+ rl.prompt();
111
+ return new Promise(resolve => {
112
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
113
+ rl.on('line', async line => {
114
+ const cmd = line.trim().split(' ');
115
+ try {
116
+ const commandRunner = await cliParser.parse(cmd);
117
+ await commandRunner.runCommand();
118
+ } catch (err) {
119
+ await (0, _handleErrors().handleErrorAndExit)(err, cmd[0]);
120
+ }
121
+ rl.prompt();
122
+ }).on('close', () => {
123
+ resolve('Have a great day!');
124
+ });
125
+ });
126
+ }
127
+ }
128
+ exports.CliCmd = CliCmd;
129
+ function completer(line, cb, cliMain) {
130
+ const lineSplit = line.split(' ');
131
+ let values = [];
132
+ if (lineSplit.length <= 1) {
133
+ values = completeCommand(line, cliMain);
134
+ cb(null, [values, line]);
135
+ }
136
+ (0, _legacy2().loadConsumerIfExist)().then(consumer => {
137
+ const comps = consumer?.bitmapIdsFromCurrentLane.map(id => id.toStringWithoutVersion()) || [];
138
+ values = comps.filter(c => c.includes(lineSplit[1]));
139
+ // eslint-disable-next-line promise/no-callback-in-promise
140
+ cb(null, [values, line]);
141
+ }).catch(err => {
142
+ // eslint-disable-next-line promise/no-callback-in-promise
143
+ cb(err, [[], line]);
144
+ });
145
+ }
146
+ function completeCommand(line, cliMain) {
147
+ const commands = cliMain.commands.filter(cmd => cmd.name.startsWith(line));
148
+ return commands.map(c => c.name).map(name => name.split(' ')[0]);
149
+ }
150
+
151
+ //# sourceMappingURL=cli.cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_legacy","data","require","_handleErrors","_legacy2","_bit","_readline","_interopRequireDefault","_cliParser","_generateDocMd","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","CliGenerateCmd","constructor","cliMain","report","args","metadata","docs","getBitVersion","GenerateCommandsDoc","commands","generate","json","generateJson","exports","CliCmd","legacyLogger","isDaemon","rl","readline","createInterface","input","process","stdin","output","stdout","prompt","completer","line","cb","cliParser","CLIParser","groups","onCommandStartSlot","Promise","resolve","on","cmd","trim","split","commandRunner","parse","runCommand","err","handleErrorAndExit","lineSplit","values","length","completeCommand","loadConsumerIfExist","then","consumer","comps","bitmapIdsFromCurrentLane","map","id","toStringWithoutVersion","filter","c","includes","catch","name","startsWith"],"sources":["cli.cmd.ts"],"sourcesContent":["// eslint-disable-next-line max-classes-per-file\nimport type { Command, CommandOptions } from './command';\nimport { logger as legacyLogger } from '@teambit/legacy.logger';\nimport { handleErrorAndExit } from './handle-errors';\nimport { loadConsumerIfExist } from '@teambit/legacy.consumer';\nimport { getBitVersion } from '@teambit/bit.get-bit-version';\nimport readline from 'readline';\nimport { CLIParser } from './cli-parser';\nimport { CLIMain } from './cli.main.runtime';\nimport { GenerateCommandsDoc, GenerateOpts } from './generate-doc-md';\n\nexport class CliGenerateCmd implements Command {\n name = 'generate';\n description = 'generate an .md file with all commands details';\n alias = '';\n loader = false;\n group = 'general';\n options = [\n [\n '',\n 'metadata',\n 'metadata/front-matter to place at the top of the .md file, enter as an object e.g. --metadata.id=cli --metadata.title=commands',\n ],\n ['', 'docs', 'generate the cli-reference.docs.mdx file'],\n ['j', 'json', 'output the commands info as JSON'],\n ] as CommandOptions;\n private = true;\n\n constructor(private cliMain: CLIMain) {}\n\n async report(args, { metadata, docs }: GenerateOpts & { docs?: boolean }): Promise<string> {\n if (docs) {\n return `---\ndescription: 'Bit command synopses. Bit version: ${getBitVersion()}'\nlabels: ['cli', 'mdx', 'docs']\n---`;\n }\n return new GenerateCommandsDoc(this.cliMain.commands, { metadata }).generate();\n }\n\n async json() {\n return new GenerateCommandsDoc(this.cliMain.commands, {}).generateJson();\n }\n}\n\nexport class CliCmd implements Command {\n name = 'cli';\n description = 'EXPERIMENTAL. enters bit cli program and generates commands list';\n alias = '';\n commands: Command[] = [];\n loader = false;\n group = 'system';\n options = [] as CommandOptions;\n\n constructor(private cliMain: CLIMain) {}\n\n async report(): Promise<string> {\n legacyLogger.isDaemon = true;\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: 'bit > ',\n completer: (line, cb) => completer(line, cb, this.cliMain),\n });\n\n const cliParser = new CLIParser(this.cliMain.commands, this.cliMain.groups, this.cliMain.onCommandStartSlot);\n\n rl.prompt();\n\n return new Promise((resolve) => {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n rl.on('line', async (line) => {\n const cmd = line.trim().split(' ');\n try {\n const commandRunner = await cliParser.parse(cmd);\n await commandRunner.runCommand();\n } catch (err: any) {\n await handleErrorAndExit(err, cmd[0]);\n }\n rl.prompt();\n }).on('close', () => {\n resolve('Have a great day!');\n });\n });\n }\n}\n\nfunction completer(line: string, cb: Function, cliMain: CLIMain) {\n const lineSplit = line.split(' ');\n let values: string[] = [];\n if (lineSplit.length <= 1) {\n values = completeCommand(line, cliMain);\n cb(null, [values, line]);\n }\n loadConsumerIfExist()\n .then((consumer) => {\n const comps = consumer?.bitmapIdsFromCurrentLane.map((id) => id.toStringWithoutVersion()) || [];\n values = comps.filter((c) => c.includes(lineSplit[1]));\n // eslint-disable-next-line promise/no-callback-in-promise\n cb(null, [values, line]);\n })\n .catch((err) => {\n // eslint-disable-next-line promise/no-callback-in-promise\n cb(err, [[], line]);\n });\n}\n\nfunction completeCommand(line: string, cliMain: CLIMain): string[] {\n const commands = cliMain.commands.filter((cmd) => cmd.name.startsWith(line));\n return commands.map((c) => c.name).map((name) => name.split(' ')[0]);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const Logo: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Logo = void 0;
7
+ function _react() {
8
+ const data = _interopRequireDefault(require("react"));
9
+ _react = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ const Logo = () => /*#__PURE__*/_react().default.createElement("div", {
16
+ style: {
17
+ height: '100%',
18
+ display: 'flex',
19
+ justifyContent: 'center'
20
+ }
21
+ }, /*#__PURE__*/_react().default.createElement("img", {
22
+ style: {
23
+ width: 70
24
+ },
25
+ src: "https://static.bit.dev/extensions-icons/cli.svg"
26
+ }));
27
+ exports.Logo = Logo;
28
+
29
+ //# sourceMappingURL=cli.composition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","data","_interopRequireDefault","require","e","__esModule","default","Logo","createElement","style","height","display","justifyContent","width","src","exports"],"sources":["cli.composition.tsx"],"sourcesContent":["import React from 'react';\n\nexport const Logo = () => (\n <div style={{ height: '100%', display: 'flex', justifyContent: 'center' }}>\n <img style={{ width: 70 }} src=\"https://static.bit.dev/extensions-icons/cli.svg\" />\n </div>\n);\n"],"mappings":";;;;;;AAAA,SAAAA,OAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA0B,SAAAC,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnB,MAAMG,IAAI,GAAGA,CAAA,kBAClBP,MAAA,GAAAM,OAAA,CAAAE,aAAA;EAAKC,KAAK,EAAE;IAAEC,MAAM,EAAE,MAAM;IAAEC,OAAO,EAAE,MAAM;IAAEC,cAAc,EAAE;EAAS;AAAE,gBACxEZ,MAAA,GAAAM,OAAA,CAAAE,aAAA;EAAKC,KAAK,EAAE;IAAEI,KAAK,EAAE;EAAG,CAAE;EAACC,GAAG,EAAC;AAAiD,CAAE,CAC/E,CACN;AAACC,OAAA,CAAAR,IAAA,GAAAA,IAAA","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ ---
2
+ description: Bit's command-line interface. Enables aspects to add and remove commands.
3
+ labels: ['cli', 'component']
4
+ ---
5
+
6
+ CLI Aspect manages the commands in the CLI. New commands are registered to this aspect with the necessary data such as, command-name, description and flags. Parsing the args from the CLI is done by Commander package.
7
+
8
+ ## Features
9
+
10
+ - Allow to register new commands
11
+ - Use commander commands.
12
+ - Render to stdout as string or as a React component by Ink.
@@ -0,0 +1,86 @@
1
+ import { SlotRegistry } from '@teambit/harmony';
2
+ import { CLIArgs, Flags, Command } from './command';
3
+ import { GroupsType } from './command-groups';
4
+ import { Logger, LoggerMain } from '@teambit/logger';
5
+ export type CommandList = Array<Command>;
6
+ export type OnStart = (hasWorkspace: boolean, currentCommand: string, commandObject?: Command) => Promise<void>;
7
+ export type OnCommandStart = (commandName: string, args: CLIArgs, flags: Flags) => Promise<void>;
8
+ export type OnBeforeExitFn = () => Promise<void>;
9
+ export type OnStartSlot = SlotRegistry<OnStart>;
10
+ export type OnCommandStartSlot = SlotRegistry<OnCommandStart>;
11
+ export type CommandsSlot = SlotRegistry<CommandList>;
12
+ export type OnBeforeExitSlot = SlotRegistry<OnBeforeExitFn>;
13
+ export declare class CLIMain {
14
+ private commandsSlot;
15
+ private onStartSlot;
16
+ readonly onCommandStartSlot: OnCommandStartSlot;
17
+ private onBeforeExitSlot;
18
+ private logger;
19
+ groups: GroupsType;
20
+ constructor(commandsSlot: CommandsSlot, onStartSlot: OnStartSlot, onCommandStartSlot: OnCommandStartSlot, onBeforeExitSlot: OnBeforeExitSlot, logger: Logger);
21
+ /**
22
+ * registers a new command in to the CLI.
23
+ */
24
+ register(...commands: CommandList): void;
25
+ /**
26
+ * helpful for having the same command name in different environments (e.g. legacy and non-legacy).
27
+ * for example `cli.unregister('tag');` removes the "bit tag" command.
28
+ */
29
+ unregister(commandName: string): void;
30
+ /**
31
+ * list of all registered commands. (legacy and new).
32
+ */
33
+ get commands(): CommandList;
34
+ /**
35
+ * get an instance of a registered command. (useful for aspects to modify and extend existing commands)
36
+ */
37
+ getCommand(name: string): Command | undefined;
38
+ getCommandByNameOrAlias(name: string): Command | undefined;
39
+ /**
40
+ * when running `bit help`, commands are grouped by categories.
41
+ * this method helps registering a new group by providing its name and a description.
42
+ * the name is what needs to be assigned to the `group` property of the Command interface.
43
+ * the description is what shown in the `bit help` output.
44
+ */
45
+ registerGroup(name: string, description: string): void;
46
+ /**
47
+ * onStart is when bootstrapping the CLI. (it happens before onCommandStart)
48
+ */
49
+ registerOnStart(onStartFn: OnStart): this;
50
+ /**
51
+ * onCommandStart is when a command is about to start and we have the command object and the parsed args and flags
52
+ * already. (it happens after onStart)
53
+ */
54
+ registerOnCommandStart(onCommandStartFn: OnCommandStart): this;
55
+ /**
56
+ * This will register a function to be called before the process exits.
57
+ * This will run only for "regular" exits
58
+ * e.g.
59
+ * yes - command run and finished successfully
60
+ * yes - command run and failed gracefully (code 1)
61
+ * not SIGKILL (kill -9)
62
+ * not SIGINT (Ctrl+C)
63
+ * not SIGTERM (kill)
64
+ * not uncaughtException
65
+ * not unhandledRejection
66
+ *
67
+ * @param onBeforeExitFn
68
+ * @returns
69
+ */
70
+ registerOnBeforeExit(onBeforeExitFn: OnBeforeExitFn): this;
71
+ /**
72
+ * execute commands registered to this aspect.
73
+ */
74
+ run(hasWorkspace: boolean): Promise<void>;
75
+ private invokeOnStart;
76
+ private setDefaults;
77
+ static dependencies: import("@teambit/harmony").Aspect[];
78
+ static runtime: import("@teambit/harmony").RuntimeDefinition;
79
+ static slots: (((registerFn: () => string) => SlotRegistry<CommandList>) | ((registerFn: () => string) => SlotRegistry<OnStart>) | ((registerFn: () => string) => SlotRegistry<OnCommandStart>))[];
80
+ static provider([loggerMain]: [LoggerMain], config: any, [commandsSlot, onStartSlot, onCommandStartSlot, onBeforeExitSlot]: [
81
+ CommandsSlot,
82
+ OnStartSlot,
83
+ OnCommandStartSlot,
84
+ OnBeforeExitSlot
85
+ ]): Promise<CLIMain>;
86
+ }
@@ -0,0 +1,304 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CLIMain = void 0;
7
+ function _harmony() {
8
+ const data = require("@teambit/harmony");
9
+ _harmony = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _legacy() {
15
+ const data = require("@teambit/legacy.logger");
16
+ _legacy = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ function _pMapSeries() {
22
+ const data = _interopRequireDefault(require("p-map-series"));
23
+ _pMapSeries = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
28
+ function _commandGroups() {
29
+ const data = require("./command-groups");
30
+ _commandGroups = function () {
31
+ return data;
32
+ };
33
+ return data;
34
+ }
35
+ function _hostInitializer() {
36
+ const data = require("@teambit/host-initializer");
37
+ _hostInitializer = function () {
38
+ return data;
39
+ };
40
+ return data;
41
+ }
42
+ function _legacy2() {
43
+ const data = require("@teambit/legacy.consumer");
44
+ _legacy2 = function () {
45
+ return data;
46
+ };
47
+ return data;
48
+ }
49
+ function _workspaceModules() {
50
+ const data = require("@teambit/workspace.modules.workspace-locator");
51
+ _workspaceModules = function () {
52
+ return data;
53
+ };
54
+ return data;
55
+ }
56
+ function _logger() {
57
+ const data = require("@teambit/logger");
58
+ _logger = function () {
59
+ return data;
60
+ };
61
+ return data;
62
+ }
63
+ function _lodash() {
64
+ const data = require("lodash");
65
+ _lodash = function () {
66
+ return data;
67
+ };
68
+ return data;
69
+ }
70
+ function _cli() {
71
+ const data = require("./cli.aspect");
72
+ _cli = function () {
73
+ return data;
74
+ };
75
+ return data;
76
+ }
77
+ function _getCommandId() {
78
+ const data = require("./get-command-id");
79
+ _getCommandId = function () {
80
+ return data;
81
+ };
82
+ return data;
83
+ }
84
+ function _cliParser() {
85
+ const data = require("./cli-parser");
86
+ _cliParser = function () {
87
+ return data;
88
+ };
89
+ return data;
90
+ }
91
+ function _completion() {
92
+ const data = require("./completion.cmd");
93
+ _completion = function () {
94
+ return data;
95
+ };
96
+ return data;
97
+ }
98
+ function _cli2() {
99
+ const data = require("./cli.cmd");
100
+ _cli2 = function () {
101
+ return data;
102
+ };
103
+ return data;
104
+ }
105
+ function _help() {
106
+ const data = require("./help.cmd");
107
+ _help = function () {
108
+ return data;
109
+ };
110
+ return data;
111
+ }
112
+ function _version() {
113
+ const data = require("./version.cmd");
114
+ _version = function () {
115
+ return data;
116
+ };
117
+ return data;
118
+ }
119
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
120
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
121
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
122
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
123
+ class CLIMain {
124
+ // if it's not cloned, it is cached across loadBit() instances
125
+ constructor(commandsSlot, onStartSlot, onCommandStartSlot, onBeforeExitSlot, logger) {
126
+ this.commandsSlot = commandsSlot;
127
+ this.onStartSlot = onStartSlot;
128
+ this.onCommandStartSlot = onCommandStartSlot;
129
+ this.onBeforeExitSlot = onBeforeExitSlot;
130
+ this.logger = logger;
131
+ _defineProperty(this, "groups", (0, _lodash().clone)(_commandGroups().groups));
132
+ }
133
+
134
+ /**
135
+ * registers a new command in to the CLI.
136
+ */
137
+ register(...commands) {
138
+ commands.forEach(command => {
139
+ this.setDefaults(command);
140
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
141
+ command.commands.forEach(cmd => this.setDefaults(cmd));
142
+ });
143
+ this.commandsSlot.register(commands);
144
+ }
145
+
146
+ /**
147
+ * helpful for having the same command name in different environments (e.g. legacy and non-legacy).
148
+ * for example `cli.unregister('tag');` removes the "bit tag" command.
149
+ */
150
+ unregister(commandName) {
151
+ this.commandsSlot.toArray().forEach(([aspectId, commands]) => {
152
+ const filteredCommands = commands.filter(command => {
153
+ return (0, _getCommandId().getCommandId)(command.name) !== commandName;
154
+ });
155
+ this.commandsSlot.map.set(aspectId, filteredCommands);
156
+ });
157
+ }
158
+
159
+ /**
160
+ * list of all registered commands. (legacy and new).
161
+ */
162
+ get commands() {
163
+ return this.commandsSlot.values().flat();
164
+ }
165
+
166
+ /**
167
+ * get an instance of a registered command. (useful for aspects to modify and extend existing commands)
168
+ */
169
+ getCommand(name) {
170
+ return this.commands.find(command => (0, _getCommandId().getCommandId)(command.name) === name);
171
+ }
172
+ getCommandByNameOrAlias(name) {
173
+ const command = this.getCommand(name);
174
+ if (command) return command;
175
+ return this.commands.find(cmd => cmd.alias === name);
176
+ }
177
+
178
+ /**
179
+ * when running `bit help`, commands are grouped by categories.
180
+ * this method helps registering a new group by providing its name and a description.
181
+ * the name is what needs to be assigned to the `group` property of the Command interface.
182
+ * the description is what shown in the `bit help` output.
183
+ */
184
+ registerGroup(name, description) {
185
+ if (this.groups[name]) {
186
+ this.logger.consoleWarning(`CLI group "${name}" is already registered`);
187
+ } else {
188
+ this.groups[name] = description;
189
+ }
190
+ }
191
+
192
+ /**
193
+ * onStart is when bootstrapping the CLI. (it happens before onCommandStart)
194
+ */
195
+ registerOnStart(onStartFn) {
196
+ this.onStartSlot.register(onStartFn);
197
+ return this;
198
+ }
199
+
200
+ /**
201
+ * onCommandStart is when a command is about to start and we have the command object and the parsed args and flags
202
+ * already. (it happens after onStart)
203
+ */
204
+ registerOnCommandStart(onCommandStartFn) {
205
+ this.onCommandStartSlot.register(onCommandStartFn);
206
+ return this;
207
+ }
208
+
209
+ /**
210
+ * This will register a function to be called before the process exits.
211
+ * This will run only for "regular" exits
212
+ * e.g.
213
+ * yes - command run and finished successfully
214
+ * yes - command run and failed gracefully (code 1)
215
+ * not SIGKILL (kill -9)
216
+ * not SIGINT (Ctrl+C)
217
+ * not SIGTERM (kill)
218
+ * not uncaughtException
219
+ * not unhandledRejection
220
+ *
221
+ * @param onBeforeExitFn
222
+ * @returns
223
+ */
224
+ registerOnBeforeExit(onBeforeExitFn) {
225
+ this.onBeforeExitSlot.register(onBeforeExitFn);
226
+ _legacy().logger.registerOnBeforeExitFn(onBeforeExitFn);
227
+ return this;
228
+ }
229
+
230
+ /**
231
+ * execute commands registered to this aspect.
232
+ */
233
+ async run(hasWorkspace) {
234
+ await this.invokeOnStart(hasWorkspace);
235
+ const CliParser = new (_cliParser().CLIParser)(this.commands, this.groups, this.onCommandStartSlot);
236
+ const commandRunner = await CliParser.parse();
237
+ await commandRunner.runCommand();
238
+ }
239
+ async invokeOnStart(hasWorkspace) {
240
+ const onStartFns = this.onStartSlot.values();
241
+ const foundCmd = (0, _cliParser().findCommandByArgv)(this.commands);
242
+ const currentCommandName = process.argv[2];
243
+ await (0, _pMapSeries().default)(onStartFns, onStart => onStart(hasWorkspace, currentCommandName, foundCmd));
244
+ }
245
+ setDefaults(command) {
246
+ command.alias = command.alias || '';
247
+ command.description = command.description || '';
248
+ command.extendedDescription = command.extendedDescription || '';
249
+ command.group = command.group || 'ungrouped';
250
+ command.options = command.options || [];
251
+ command.private = command.private || false;
252
+ command.commands = command.commands || [];
253
+ command.name = command.name.trim();
254
+ if (command.loader === undefined) {
255
+ command.loader = true;
256
+ }
257
+ if (command.loadAspects === undefined) {
258
+ command.loadAspects = true;
259
+ }
260
+ if (command.helpUrl && !isFullUrl(command.helpUrl)) {
261
+ command.helpUrl = `https://bit.dev/${command.helpUrl}`;
262
+ }
263
+ }
264
+ static async provider([loggerMain], config, [commandsSlot, onStartSlot, onCommandStartSlot, onBeforeExitSlot]) {
265
+ const logger = loggerMain.createLogger(_cli().CLIAspect.id);
266
+ const cliMain = new CLIMain(commandsSlot, onStartSlot, onCommandStartSlot, onBeforeExitSlot, logger);
267
+ await ensureWorkspaceAndScope();
268
+ const cliGenerateCmd = new (_cli2().CliGenerateCmd)(cliMain);
269
+ const cliCmd = new (_cli2().CliCmd)(cliMain);
270
+ const helpCmd = new (_help().HelpCmd)(cliMain);
271
+ cliCmd.commands.push(cliGenerateCmd);
272
+ cliMain.register(new (_completion().CompletionCmd)(), cliCmd, helpCmd, new (_version().VersionCmd)());
273
+ return cliMain;
274
+ }
275
+ }
276
+ exports.CLIMain = CLIMain;
277
+ _defineProperty(CLIMain, "dependencies", [_logger().LoggerAspect]);
278
+ _defineProperty(CLIMain, "runtime", _cli().MainRuntime);
279
+ _defineProperty(CLIMain, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
280
+ _cli().CLIAspect.addRuntime(CLIMain);
281
+
282
+ /**
283
+ * kind of a hack.
284
+ * in the legacy, this is running at the beginning and it take care of issues when Bit files are missing,
285
+ * such as ".bit".
286
+ * (to make this process better, you can easily remove it and run the e2e-tests. you'll see some failing)
287
+ */
288
+ async function ensureWorkspaceAndScope() {
289
+ try {
290
+ await (0, _legacy2().loadConsumerIfExist)();
291
+ } catch {
292
+ const potentialWsPath = process.cwd();
293
+ const consumerInfo = await (0, _workspaceModules().getWorkspaceInfo)(potentialWsPath);
294
+ if (consumerInfo && !consumerInfo.hasScope && consumerInfo.hasBitMap && consumerInfo.hasWorkspaceConfig) {
295
+ await _hostInitializer().HostInitializerMain.init(potentialWsPath);
296
+ }
297
+ // do nothing. it could fail for example with ScopeNotFound error, which is taken care of in "bit init".
298
+ }
299
+ }
300
+ function isFullUrl(url) {
301
+ return url.startsWith('http://') || url.startsWith('https://');
302
+ }
303
+
304
+ //# sourceMappingURL=cli.main.runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_harmony","data","require","_legacy","_pMapSeries","_interopRequireDefault","_commandGroups","_hostInitializer","_legacy2","_workspaceModules","_logger","_lodash","_cli","_getCommandId","_cliParser","_completion","_cli2","_help","_version","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","CLIMain","constructor","commandsSlot","onStartSlot","onCommandStartSlot","onBeforeExitSlot","logger","clone","groups","register","commands","forEach","command","setDefaults","cmd","unregister","commandName","toArray","aspectId","filteredCommands","filter","getCommandId","name","map","set","values","flat","getCommand","find","getCommandByNameOrAlias","alias","registerGroup","description","consoleWarning","registerOnStart","onStartFn","registerOnCommandStart","onCommandStartFn","registerOnBeforeExit","onBeforeExitFn","legacyLogger","registerOnBeforeExitFn","run","hasWorkspace","invokeOnStart","CliParser","CLIParser","commandRunner","parse","runCommand","onStartFns","foundCmd","findCommandByArgv","currentCommandName","process","argv","pMapSeries","onStart","extendedDescription","group","options","private","trim","loader","undefined","loadAspects","helpUrl","isFullUrl","provider","loggerMain","config","createLogger","CLIAspect","id","cliMain","ensureWorkspaceAndScope","cliGenerateCmd","CliGenerateCmd","cliCmd","CliCmd","helpCmd","HelpCmd","push","CompletionCmd","VersionCmd","exports","LoggerAspect","MainRuntime","Slot","withType","addRuntime","loadConsumerIfExist","potentialWsPath","cwd","consumerInfo","getWorkspaceInfo","hasScope","hasBitMap","hasWorkspaceConfig","HostInitializerMain","init","url","startsWith"],"sources":["cli.main.runtime.ts"],"sourcesContent":["import { Slot, SlotRegistry } from '@teambit/harmony';\nimport { logger as legacyLogger } from '@teambit/legacy.logger';\nimport { CLIArgs, Flags, Command } from './command';\nimport pMapSeries from 'p-map-series';\nimport { groups, GroupsType } from './command-groups';\nimport { HostInitializerMain } from '@teambit/host-initializer';\nimport { loadConsumerIfExist } from '@teambit/legacy.consumer';\nimport { getWorkspaceInfo } from '@teambit/workspace.modules.workspace-locator';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { clone } from 'lodash';\nimport { CLIAspect, MainRuntime } from './cli.aspect';\nimport { getCommandId } from './get-command-id';\nimport { CLIParser, findCommandByArgv } from './cli-parser';\nimport { CompletionCmd } from './completion.cmd';\nimport { CliCmd, CliGenerateCmd } from './cli.cmd';\nimport { HelpCmd } from './help.cmd';\nimport { VersionCmd } from './version.cmd';\n\nexport type CommandList = Array<Command>;\nexport type OnStart = (hasWorkspace: boolean, currentCommand: string, commandObject?: Command) => Promise<void>;\nexport type OnCommandStart = (commandName: string, args: CLIArgs, flags: Flags) => Promise<void>;\nexport type OnBeforeExitFn = () => Promise<void>;\n\nexport type OnStartSlot = SlotRegistry<OnStart>;\nexport type OnCommandStartSlot = SlotRegistry<OnCommandStart>;\nexport type CommandsSlot = SlotRegistry<CommandList>;\nexport type OnBeforeExitSlot = SlotRegistry<OnBeforeExitFn>;\n\nexport class CLIMain {\n public groups: GroupsType = clone(groups); // if it's not cloned, it is cached across loadBit() instances\n constructor(\n private commandsSlot: CommandsSlot,\n private onStartSlot: OnStartSlot,\n readonly onCommandStartSlot: OnCommandStartSlot,\n private onBeforeExitSlot: OnBeforeExitSlot,\n private logger: Logger\n ) {}\n\n /**\n * registers a new command in to the CLI.\n */\n register(...commands: CommandList) {\n commands.forEach((command) => {\n this.setDefaults(command);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n command.commands!.forEach((cmd) => this.setDefaults(cmd));\n });\n this.commandsSlot.register(commands);\n }\n\n /**\n * helpful for having the same command name in different environments (e.g. legacy and non-legacy).\n * for example `cli.unregister('tag');` removes the \"bit tag\" command.\n */\n unregister(commandName: string) {\n this.commandsSlot.toArray().forEach(([aspectId, commands]) => {\n const filteredCommands = commands.filter((command) => {\n return getCommandId(command.name) !== commandName;\n });\n this.commandsSlot.map.set(aspectId, filteredCommands);\n });\n }\n\n /**\n * list of all registered commands. (legacy and new).\n */\n get commands(): CommandList {\n return this.commandsSlot.values().flat();\n }\n\n /**\n * get an instance of a registered command. (useful for aspects to modify and extend existing commands)\n */\n getCommand(name: string): Command | undefined {\n return this.commands.find((command) => getCommandId(command.name) === name);\n }\n\n getCommandByNameOrAlias(name: string): Command | undefined {\n const command = this.getCommand(name);\n if (command) return command;\n return this.commands.find((cmd) => cmd.alias === name);\n }\n\n /**\n * when running `bit help`, commands are grouped by categories.\n * this method helps registering a new group by providing its name and a description.\n * the name is what needs to be assigned to the `group` property of the Command interface.\n * the description is what shown in the `bit help` output.\n */\n registerGroup(name: string, description: string) {\n if (this.groups[name]) {\n this.logger.consoleWarning(`CLI group \"${name}\" is already registered`);\n } else {\n this.groups[name] = description;\n }\n }\n\n /**\n * onStart is when bootstrapping the CLI. (it happens before onCommandStart)\n */\n registerOnStart(onStartFn: OnStart) {\n this.onStartSlot.register(onStartFn);\n return this;\n }\n\n /**\n * onCommandStart is when a command is about to start and we have the command object and the parsed args and flags\n * already. (it happens after onStart)\n */\n registerOnCommandStart(onCommandStartFn: OnCommandStart) {\n this.onCommandStartSlot.register(onCommandStartFn);\n return this;\n }\n\n /**\n * This will register a function to be called before the process exits.\n * This will run only for \"regular\" exits\n * e.g.\n * yes - command run and finished successfully\n * yes - command run and failed gracefully (code 1)\n * not SIGKILL (kill -9)\n * not SIGINT (Ctrl+C)\n * not SIGTERM (kill)\n * not uncaughtException\n * not unhandledRejection\n *\n * @param onBeforeExitFn\n * @returns\n */\n registerOnBeforeExit(onBeforeExitFn: OnBeforeExitFn) {\n this.onBeforeExitSlot.register(onBeforeExitFn);\n legacyLogger.registerOnBeforeExitFn(onBeforeExitFn);\n return this;\n }\n\n /**\n * execute commands registered to this aspect.\n */\n async run(hasWorkspace: boolean) {\n await this.invokeOnStart(hasWorkspace);\n const CliParser = new CLIParser(this.commands, this.groups, this.onCommandStartSlot);\n const commandRunner = await CliParser.parse();\n await commandRunner.runCommand();\n }\n\n private async invokeOnStart(hasWorkspace: boolean) {\n const onStartFns = this.onStartSlot.values();\n const foundCmd = findCommandByArgv(this.commands);\n const currentCommandName = process.argv[2];\n await pMapSeries(onStartFns, (onStart) => onStart(hasWorkspace, currentCommandName, foundCmd));\n }\n\n private setDefaults(command: Command) {\n command.alias = command.alias || '';\n command.description = command.description || '';\n command.extendedDescription = command.extendedDescription || '';\n command.group = command.group || 'ungrouped';\n command.options = command.options || [];\n command.private = command.private || false;\n command.commands = command.commands || [];\n command.name = command.name.trim();\n if (command.loader === undefined) {\n command.loader = true;\n }\n if (command.loadAspects === undefined) {\n command.loadAspects = true;\n }\n if (command.helpUrl && !isFullUrl(command.helpUrl)) {\n command.helpUrl = `https://bit.dev/${command.helpUrl}`;\n }\n }\n\n static dependencies = [LoggerAspect];\n static runtime = MainRuntime;\n static slots = [\n Slot.withType<CommandList>(),\n Slot.withType<OnStart>(),\n Slot.withType<OnCommandStart>(),\n Slot.withType<OnBeforeExitFn>(),\n ];\n\n static async provider(\n [loggerMain]: [LoggerMain],\n config,\n [commandsSlot, onStartSlot, onCommandStartSlot, onBeforeExitSlot]: [\n CommandsSlot,\n OnStartSlot,\n OnCommandStartSlot,\n OnBeforeExitSlot,\n ]\n ) {\n const logger = loggerMain.createLogger(CLIAspect.id);\n const cliMain = new CLIMain(commandsSlot, onStartSlot, onCommandStartSlot, onBeforeExitSlot, logger);\n await ensureWorkspaceAndScope();\n const cliGenerateCmd = new CliGenerateCmd(cliMain);\n const cliCmd = new CliCmd(cliMain);\n const helpCmd = new HelpCmd(cliMain);\n cliCmd.commands.push(cliGenerateCmd);\n cliMain.register(new CompletionCmd(), cliCmd, helpCmd, new VersionCmd());\n return cliMain;\n }\n}\n\nCLIAspect.addRuntime(CLIMain);\n\n/**\n * kind of a hack.\n * in the legacy, this is running at the beginning and it take care of issues when Bit files are missing,\n * such as \".bit\".\n * (to make this process better, you can easily remove it and run the e2e-tests. you'll see some failing)\n */\nasync function ensureWorkspaceAndScope() {\n try {\n await loadConsumerIfExist();\n } catch {\n const potentialWsPath = process.cwd();\n const consumerInfo = await getWorkspaceInfo(potentialWsPath);\n if (consumerInfo && !consumerInfo.hasScope && consumerInfo.hasBitMap && consumerInfo.hasWorkspaceConfig) {\n await HostInitializerMain.init(potentialWsPath);\n }\n // do nothing. it could fail for example with ScopeNotFound error, which is taken care of in \"bit init\".\n }\n}\n\nfunction isFullUrl(url: string) {\n return url.startsWith('http://') || url.startsWith('https://');\n}\n"],"mappings":"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","ignoreList":[]}