@teambit/install 0.0.0-019dfe796cb827647fea4f5ea377789618005504

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 (77) hide show
  1. package/dist/esm.mjs +7 -0
  2. package/dist/exceptions/dependency-type-not-supported-in-policy.d.ts +4 -0
  3. package/dist/exceptions/dependency-type-not-supported-in-policy.js +21 -0
  4. package/dist/exceptions/dependency-type-not-supported-in-policy.js.map +1 -0
  5. package/dist/exceptions/index.d.ts +1 -0
  6. package/dist/exceptions/index.js +20 -0
  7. package/dist/exceptions/index.js.map +1 -0
  8. package/dist/index.d.ts +5 -0
  9. package/dist/index.js +35 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/install.aspect.d.ts +2 -0
  12. package/dist/install.aspect.js +18 -0
  13. package/dist/install.aspect.js.map +1 -0
  14. package/dist/install.cmd.d.ts +55 -0
  15. package/dist/install.cmd.js +170 -0
  16. package/dist/install.cmd.js.map +1 -0
  17. package/dist/install.main.runtime.d.ts +248 -0
  18. package/dist/install.main.runtime.js +1400 -0
  19. package/dist/install.main.runtime.js.map +1 -0
  20. package/dist/link/component-list-links.d.ts +10 -0
  21. package/dist/link/component-list-links.js +102 -0
  22. package/dist/link/component-list-links.js.map +1 -0
  23. package/dist/link/core-aspects-links.d.ts +7 -0
  24. package/dist/link/core-aspects-links.js +83 -0
  25. package/dist/link/core-aspects-links.js.map +1 -0
  26. package/dist/link/get-package-name-from-target.d.ts +1 -0
  27. package/dist/link/get-package-name-from-target.js +13 -0
  28. package/dist/link/get-package-name-from-target.js.map +1 -0
  29. package/dist/link/index.d.ts +1 -0
  30. package/dist/link/index.js +20 -0
  31. package/dist/link/index.js.map +1 -0
  32. package/dist/link/link-row.d.ts +12 -0
  33. package/dist/link/link-row.js +32 -0
  34. package/dist/link/link-row.js.map +1 -0
  35. package/dist/link/link-to-dir.d.ts +2 -0
  36. package/dist/link/link-to-dir.js +35 -0
  37. package/dist/link/link-to-dir.js.map +1 -0
  38. package/dist/link/link.cmd.d.ts +47 -0
  39. package/dist/link/link.cmd.js +145 -0
  40. package/dist/link/link.cmd.js.map +1 -0
  41. package/dist/link/nested-deps-in-nm-links.d.ts +7 -0
  42. package/dist/link/nested-deps-in-nm-links.js +59 -0
  43. package/dist/link/nested-deps-in-nm-links.js.map +1 -0
  44. package/dist/link/rewire-row.d.ts +6 -0
  45. package/dist/link/rewire-row.js +26 -0
  46. package/dist/link/rewire-row.js.map +1 -0
  47. package/dist/pick-outdated-pkgs.d.ts +12 -0
  48. package/dist/pick-outdated-pkgs.js +180 -0
  49. package/dist/pick-outdated-pkgs.js.map +1 -0
  50. package/dist/pick-outdated-pkgs.spec.d.ts +1 -0
  51. package/dist/pick-outdated-pkgs.spec.js +169 -0
  52. package/dist/pick-outdated-pkgs.spec.js.map +1 -0
  53. package/dist/preview-1756139709945.js +7 -0
  54. package/dist/uninstall.cmd.d.ts +12 -0
  55. package/dist/uninstall.cmd.js +26 -0
  56. package/dist/uninstall.cmd.js.map +1 -0
  57. package/dist/update.cmd.d.ts +26 -0
  58. package/dist/update.cmd.js +52 -0
  59. package/dist/update.cmd.js.map +1 -0
  60. package/esm.mjs +7 -0
  61. package/exceptions/dependency-type-not-supported-in-policy.ts +7 -0
  62. package/exceptions/index.ts +1 -0
  63. package/install.cmd.tsx +208 -0
  64. package/link/component-list-links.ts +79 -0
  65. package/link/core-aspects-links.ts +57 -0
  66. package/link/get-package-name-from-target.ts +5 -0
  67. package/link/index.ts +1 -0
  68. package/link/link-row.ts +20 -0
  69. package/link/link-to-dir.ts +13 -0
  70. package/link/link.cmd.ts +118 -0
  71. package/link/nested-deps-in-nm-links.ts +47 -0
  72. package/link/rewire-row.ts +17 -0
  73. package/package.json +96 -0
  74. package/types/asset.d.ts +41 -0
  75. package/types/style.d.ts +42 -0
  76. package/uninstall.cmd.tsx +18 -0
  77. package/update.cmd.tsx +67 -0
package/dist/esm.mjs ADDED
@@ -0,0 +1,7 @@
1
+ // eslint-disable-next-line import/no-unresolved
2
+ import cjsModule from './index.js';
3
+
4
+ export const InstallAspect = cjsModule.InstallAspect;
5
+ export const getAnotherInstallRequiredOutput = cjsModule.getAnotherInstallRequiredOutput;
6
+
7
+ export default cjsModule;
@@ -0,0 +1,4 @@
1
+ import { BitError } from '@teambit/bit-error';
2
+ export declare class DependencyTypeNotSupportedInPolicy extends BitError {
3
+ constructor(type: string);
4
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DependencyTypeNotSupportedInPolicy = void 0;
7
+ function _bitError() {
8
+ const data = require("@teambit/bit-error");
9
+ _bitError = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ class DependencyTypeNotSupportedInPolicy extends _bitError().BitError {
15
+ constructor(type) {
16
+ super(`the workspace policy does not support ${type} dependencies`);
17
+ }
18
+ }
19
+ exports.DependencyTypeNotSupportedInPolicy = DependencyTypeNotSupportedInPolicy;
20
+
21
+ //# sourceMappingURL=dependency-type-not-supported-in-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_bitError","data","require","DependencyTypeNotSupportedInPolicy","BitError","constructor","type","exports"],"sources":["dependency-type-not-supported-in-policy.ts"],"sourcesContent":["import { BitError } from '@teambit/bit-error';\n\nexport class DependencyTypeNotSupportedInPolicy extends BitError {\n constructor(type: string) {\n super(`the workspace policy does not support ${type} dependencies`);\n }\n}\n"],"mappings":";;;;;;AAAA,SAAAA,UAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,SAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAME,kCAAkC,SAASC,oBAAQ,CAAC;EAC/DC,WAAWA,CAACC,IAAY,EAAE;IACxB,KAAK,CAAC,yCAAyCA,IAAI,eAAe,CAAC;EACrE;AACF;AAACC,OAAA,CAAAJ,kCAAA,GAAAA,kCAAA","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export { DependencyTypeNotSupportedInPolicy } from './dependency-type-not-supported-in-policy';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "DependencyTypeNotSupportedInPolicy", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _dependencyTypeNotSupportedInPolicy().DependencyTypeNotSupportedInPolicy;
10
+ }
11
+ });
12
+ function _dependencyTypeNotSupportedInPolicy() {
13
+ const data = require("./dependency-type-not-supported-in-policy");
14
+ _dependencyTypeNotSupportedInPolicy = function () {
15
+ return data;
16
+ };
17
+ return data;
18
+ }
19
+
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_dependencyTypeNotSupportedInPolicy","data","require"],"sources":["index.ts"],"sourcesContent":["export { DependencyTypeNotSupportedInPolicy } from './dependency-type-not-supported-in-policy';\n"],"mappings":";;;;;;;;;;;AAAA,SAAAA,oCAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,mCAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import { InstallAspect } from './install.aspect';
2
+ export { getAnotherInstallRequiredOutput } from './install.cmd';
3
+ export type { InstallMain } from './install.main.runtime';
4
+ export default InstallAspect;
5
+ export { InstallAspect };
package/dist/index.js ADDED
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "InstallAspect", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _install().InstallAspect;
10
+ }
11
+ });
12
+ exports.default = void 0;
13
+ Object.defineProperty(exports, "getAnotherInstallRequiredOutput", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _install2().getAnotherInstallRequiredOutput;
17
+ }
18
+ });
19
+ function _install() {
20
+ const data = require("./install.aspect");
21
+ _install = function () {
22
+ return data;
23
+ };
24
+ return data;
25
+ }
26
+ function _install2() {
27
+ const data = require("./install.cmd");
28
+ _install2 = function () {
29
+ return data;
30
+ };
31
+ return data;
32
+ }
33
+ var _default = exports.default = _install().InstallAspect;
34
+
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_install","data","require","_install2","_default","exports","default","InstallAspect"],"sources":["index.ts"],"sourcesContent":["import { InstallAspect } from './install.aspect';\n\nexport { getAnotherInstallRequiredOutput } from './install.cmd';\nexport type { InstallMain } from './install.main.runtime';\nexport default InstallAspect;\nexport { InstallAspect };\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAE,UAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,SAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAgE,IAAAG,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEjDC,wBAAa","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import { Aspect } from '@teambit/harmony';
2
+ export declare const InstallAspect: Aspect;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.InstallAspect = void 0;
7
+ function _harmony() {
8
+ const data = require("@teambit/harmony");
9
+ _harmony = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ const InstallAspect = exports.InstallAspect = _harmony().Aspect.create({
15
+ id: 'teambit.workspace/install'
16
+ });
17
+
18
+ //# sourceMappingURL=install.aspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_harmony","data","require","InstallAspect","exports","Aspect","create","id"],"sources":["install.aspect.ts"],"sourcesContent":["import { Aspect } from '@teambit/harmony';\n\nexport const InstallAspect = Aspect.create({\n id: 'teambit.workspace/install',\n});\n"],"mappings":";;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAME,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAGE,iBAAM,CAACC,MAAM,CAAC;EACzCC,EAAE,EAAE;AACN,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,55 @@
1
+ import type { Command, CommandOptions } from '@teambit/cli';
2
+ import type { WorkspaceDependencyLifecycleType } from '@teambit/dependency-resolver';
3
+ import type { Logger } from '@teambit/logger';
4
+ import type { Workspace } from '@teambit/workspace';
5
+ import type { InstallMain } from './install.main.runtime';
6
+ type InstallCmdOptions = {
7
+ type: WorkspaceDependencyLifecycleType;
8
+ skipDedupe: boolean;
9
+ skipImport: boolean;
10
+ skipCompile: boolean;
11
+ skipWriteConfigFiles: boolean;
12
+ update: boolean;
13
+ updateExisting: boolean;
14
+ savePrefix: string;
15
+ addMissingDeps: boolean;
16
+ skipUnavailable: boolean;
17
+ addMissingPeers: boolean;
18
+ noOptional: boolean;
19
+ recurringInstall: boolean;
20
+ lockfileOnly: boolean;
21
+ };
22
+ export default class InstallCmd implements Command {
23
+ private install;
24
+ /**
25
+ * workspace extension.
26
+ */
27
+ private workspace;
28
+ /**
29
+ * logger extension.
30
+ */
31
+ private logger;
32
+ name: string;
33
+ description: string;
34
+ extendedDescription: string;
35
+ helpUrl: string;
36
+ arguments: {
37
+ name: string;
38
+ description: string;
39
+ }[];
40
+ alias: string;
41
+ group: string;
42
+ options: CommandOptions;
43
+ constructor(install: InstallMain,
44
+ /**
45
+ * workspace extension.
46
+ */
47
+ workspace: Workspace,
48
+ /**
49
+ * logger extension.
50
+ */
51
+ logger: Logger);
52
+ report([packages]: [string[]], options: InstallCmdOptions): Promise<string>;
53
+ }
54
+ export declare function getAnotherInstallRequiredOutput(recurringInstall?: boolean, oldNonLoadedEnvs?: string[]): string;
55
+ export {};
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ exports.getAnotherInstallRequiredOutput = getAnotherInstallRequiredOutput;
8
+ function _validateNpmPackageName() {
9
+ const data = _interopRequireDefault(require("validate-npm-package-name"));
10
+ _validateNpmPackageName = function () {
11
+ return data;
12
+ };
13
+ return data;
14
+ }
15
+ function _chalk() {
16
+ const data = _interopRequireDefault(require("chalk"));
17
+ _chalk = function () {
18
+ return data;
19
+ };
20
+ return data;
21
+ }
22
+ function _workspace() {
23
+ const data = require("@teambit/workspace");
24
+ _workspace = function () {
25
+ return data;
26
+ };
27
+ return data;
28
+ }
29
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
30
+ 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; }
31
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
32
+ 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); }
33
+ const recurringInstallFlagName = 'recurring-install';
34
+ class InstallCmd {
35
+ constructor(install,
36
+ /**
37
+ * workspace extension.
38
+ */
39
+ workspace,
40
+ /**
41
+ * logger extension.
42
+ */
43
+ logger) {
44
+ this.install = install;
45
+ this.workspace = workspace;
46
+ this.logger = logger;
47
+ _defineProperty(this, "name", 'install [packages...]');
48
+ _defineProperty(this, "description", 'installs workspace dependencies');
49
+ _defineProperty(this, "extendedDescription", 'when no package is specified, all workspace dependencies are installed and all workspace components are imported.');
50
+ _defineProperty(this, "helpUrl", 'reference/dependencies/dependency-installation');
51
+ _defineProperty(this, "arguments", [{
52
+ name: 'packages...',
53
+ description: 'a list of packages to install (separated by spaces)'
54
+ }]);
55
+ _defineProperty(this, "alias", 'in');
56
+ _defineProperty(this, "group", 'dependencies');
57
+ _defineProperty(this, "options", [['t', 'type [lifecycleType]', '"runtime" (default) or "peer" (dev is not a valid option)'], ['u', 'update', 'update all dependencies to latest version according to their semver range'], ['', 'update-existing', 'DEPRECATED (not needed anymore, it is the default now). update existing dependencies version and types'], ['', 'save-prefix [savePrefix]', 'set the prefix to use when adding dependency to workspace.jsonc'], ['', 'skip-dedupe', 'do not dedupe dependencies on installation'], ['', 'skip-import', 'do not import bit objects post installation'], ['', 'skip-compile', 'do not compile components'], ['', 'skip-write-config-files', 'do not write config files (such as eslint, tsconfig, prettier, etc...)'], ['a', 'add-missing-deps', 'install all missing dependencies'], ['', 'skip-unavailable', 'when adding missing dependencies, skip those that are not found in the regisry'], ['', 'add-missing-peers', 'install all missing peer dependencies'], ['', recurringInstallFlagName, 'automatically run install again if there are non loaded old envs in your workspace'], ['', 'no-optional [noOptional]', 'do not install optional dependencies (works with pnpm only)'], ['', 'lockfile-only', 'dependencies are not written to node_modules. Only the lockfile is updated']]);
58
+ }
59
+ async report([packages = []], options) {
60
+ const startTime = Date.now();
61
+ if (!this.workspace) throw new (_workspace().OutsideWorkspaceError)();
62
+ if (options.updateExisting) {
63
+ this.logger.consoleWarning(`--update-existing is deprecated, please omit it. "bit install" will update existing dependencies by default`);
64
+ }
65
+ const validPackages = await Promise.all(packages.map(async pkg => {
66
+ const pkgName = extractPackageName(pkg);
67
+ if ((0, _validateNpmPackageName().default)(pkgName).validForNewPackages) {
68
+ return pkg;
69
+ }
70
+ // if this is a component-id, find the package name and use it instead.
71
+ try {
72
+ // Check if it's not a package name (doesn't start with @)
73
+ if (!pkgName.startsWith('@')) {
74
+ // Try to resolve it as a component ID
75
+ const componentId = await this.workspace.resolveComponentId(pkg);
76
+ // Get the package name for this component
77
+ const component = await this.workspace.get(componentId);
78
+ const componentPackageName = this.workspace.componentPackageName(component);
79
+ return componentPackageName;
80
+ }
81
+ } catch {
82
+ // If component resolution fails, fall through to original error
83
+ }
84
+ throw new Error(`the package name "${pkgName}" is invalid. please provide a valid package name.`);
85
+ }));
86
+ this.logger.console(`Resolving component dependencies for workspace: '${_chalk().default.cyan(this.workspace.name)}'`);
87
+ const installOpts = {
88
+ lifecycleType: options.addMissingPeers ? 'peer' : options.type,
89
+ dedupe: !options.skipDedupe,
90
+ import: !options.skipImport,
91
+ updateExisting: true,
92
+ savePrefix: options.savePrefix,
93
+ addMissingDeps: options.addMissingDeps,
94
+ skipUnavailable: options.skipUnavailable,
95
+ addMissingPeers: options.addMissingPeers,
96
+ compile: !options.skipCompile,
97
+ includeOptionalDeps: !options.noOptional,
98
+ writeConfigFiles: !options.skipWriteConfigFiles,
99
+ updateAll: options.update,
100
+ recurringInstall: options.recurringInstall,
101
+ lockfileOnly: options.lockfileOnly,
102
+ showExternalPackageManagerPrompt: true
103
+ };
104
+ const components = await this.install.install(validPackages, installOpts);
105
+ const endTime = Date.now();
106
+ const oldNonLoadedEnvs = this.install.getOldNonLoadedEnvs();
107
+ return formatOutput({
108
+ startTime,
109
+ endTime,
110
+ numOfComps: components.toArray().length.toString(),
111
+ recurringInstall: options[recurringInstallFlagName],
112
+ oldNonLoadedEnvs
113
+ });
114
+ }
115
+ }
116
+ exports.default = InstallCmd;
117
+ function calculateTime(startTime, endTime) {
118
+ const diff = endTime - startTime;
119
+ return diff / 1000;
120
+ }
121
+ function formatOutput({
122
+ numOfComps,
123
+ endTime,
124
+ startTime,
125
+ recurringInstall,
126
+ oldNonLoadedEnvs
127
+ }) {
128
+ const executionTime = calculateTime(startTime, endTime);
129
+ const summary = _chalk().default.green(`Successfully installed dependencies and compiled ${_chalk().default.cyan(numOfComps)} component(s) in ${_chalk().default.cyan(executionTime.toString())} seconds`);
130
+ const anotherInstallRequiredOutput = getAnotherInstallRequiredOutput(recurringInstall, oldNonLoadedEnvs);
131
+ return anotherInstallRequiredOutput ? `\n${anotherInstallRequiredOutput}\n\n${summary}` : `\n${summary}`;
132
+ }
133
+ function getAnotherInstallRequiredOutput(recurringInstall = false, oldNonLoadedEnvs = []) {
134
+ if (!oldNonLoadedEnvs.length) return '';
135
+ const oldNonLoadedEnvsStr = oldNonLoadedEnvs.join(', ');
136
+ const firstPart = `Bit was not able to install all dependencies. Please run "${_chalk().default.cyan('bit install')}" again `;
137
+ const flag = _chalk().default.cyan(`--${recurringInstallFlagName}`);
138
+ const suggestRecurringInstall = recurringInstall ? '' : `(or use the "${flag}" option next time).`;
139
+ const envsStr = `The following environments need to add support for "dependency policy" to fix the warning: ${_chalk().default.cyan(oldNonLoadedEnvsStr)}`;
140
+ const docsLink = `Read more about how to fix this issue in: https://bit.dev/blog/using-a-static-dependency-policy-in-a-legacy-env-lihfbt9b`;
141
+ const msg = `${firstPart}${suggestRecurringInstall}\n${envsStr}\n${docsLink}`;
142
+ return _chalk().default.yellow(msg);
143
+ }
144
+ function extractPackageName(packageString) {
145
+ if (!packageString) return '';
146
+
147
+ // Handle https and git protocols. We don't allow "file" protocol here. It won't work for the consumer.
148
+ const allowedPrefixes = ['https://', 'git:', 'git+ssh://', 'git+https://'];
149
+ if (allowedPrefixes.some(prefix => packageString.startsWith(prefix))) {
150
+ return packageString;
151
+ }
152
+
153
+ // If it's a scoped package
154
+ if (packageString.startsWith('@')) {
155
+ // Find the second '@' (first is for scope, second is for version/tag)
156
+ const atIndex = packageString.indexOf('@', 1);
157
+ if (atIndex === -1) return packageString;
158
+ const possibleVersion = packageString.slice(atIndex + 1);
159
+ // If the part after the second '@' contains a slash, it's not a version/tag
160
+ if (possibleVersion.includes('/')) return packageString;
161
+ return packageString.slice(0, atIndex);
162
+ }
163
+
164
+ // For unscoped packages, split at the last '@'
165
+ const lastAtIndex = packageString.lastIndexOf('@');
166
+ if (lastAtIndex <= 0) return packageString;
167
+ return packageString.slice(0, lastAtIndex);
168
+ }
169
+
170
+ //# sourceMappingURL=install.cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_validateNpmPackageName","data","_interopRequireDefault","require","_chalk","_workspace","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","recurringInstallFlagName","InstallCmd","constructor","install","workspace","logger","name","description","report","packages","options","startTime","Date","now","OutsideWorkspaceError","updateExisting","consoleWarning","validPackages","Promise","all","map","pkg","pkgName","extractPackageName","packageNameValidate","validForNewPackages","startsWith","componentId","resolveComponentId","component","get","componentPackageName","Error","console","chalk","cyan","installOpts","lifecycleType","addMissingPeers","type","dedupe","skipDedupe","import","skipImport","savePrefix","addMissingDeps","skipUnavailable","compile","skipCompile","includeOptionalDeps","noOptional","writeConfigFiles","skipWriteConfigFiles","updateAll","update","recurringInstall","lockfileOnly","showExternalPackageManagerPrompt","components","endTime","oldNonLoadedEnvs","getOldNonLoadedEnvs","formatOutput","numOfComps","toArray","length","toString","exports","calculateTime","diff","executionTime","summary","green","anotherInstallRequiredOutput","getAnotherInstallRequiredOutput","oldNonLoadedEnvsStr","join","firstPart","flag","suggestRecurringInstall","envsStr","docsLink","msg","yellow","packageString","allowedPrefixes","some","prefix","atIndex","indexOf","possibleVersion","slice","includes","lastAtIndex","lastIndexOf"],"sources":["install.cmd.tsx"],"sourcesContent":["import type { Command, CommandOptions } from '@teambit/cli';\nimport packageNameValidate from 'validate-npm-package-name';\nimport type { WorkspaceDependencyLifecycleType } from '@teambit/dependency-resolver';\nimport type { Logger } from '@teambit/logger';\nimport chalk from 'chalk';\nimport type { Workspace } from '@teambit/workspace';\nimport { OutsideWorkspaceError } from '@teambit/workspace';\nimport type { InstallMain, WorkspaceInstallOptions } from './install.main.runtime';\n\ntype InstallCmdOptions = {\n type: WorkspaceDependencyLifecycleType;\n skipDedupe: boolean;\n skipImport: boolean;\n skipCompile: boolean;\n skipWriteConfigFiles: boolean;\n update: boolean;\n updateExisting: boolean;\n savePrefix: string;\n addMissingDeps: boolean;\n skipUnavailable: boolean;\n addMissingPeers: boolean;\n noOptional: boolean;\n recurringInstall: boolean;\n lockfileOnly: boolean;\n};\n\ntype FormatOutputArgs = {\n numOfComps: string;\n startTime: number;\n endTime: number;\n oldNonLoadedEnvs: string[];\n recurringInstall: boolean;\n};\n\nconst recurringInstallFlagName = 'recurring-install';\n\nexport default class InstallCmd implements Command {\n name = 'install [packages...]';\n description = 'installs workspace dependencies';\n extendedDescription =\n 'when no package is specified, all workspace dependencies are installed and all workspace components are imported.';\n helpUrl = 'reference/dependencies/dependency-installation';\n arguments = [{ name: 'packages...', description: 'a list of packages to install (separated by spaces)' }];\n alias = 'in';\n group = 'dependencies';\n options = [\n ['t', 'type [lifecycleType]', '\"runtime\" (default) or \"peer\" (dev is not a valid option)'],\n ['u', 'update', 'update all dependencies to latest version according to their semver range'],\n [\n '',\n 'update-existing',\n 'DEPRECATED (not needed anymore, it is the default now). update existing dependencies version and types',\n ],\n ['', 'save-prefix [savePrefix]', 'set the prefix to use when adding dependency to workspace.jsonc'],\n ['', 'skip-dedupe', 'do not dedupe dependencies on installation'],\n ['', 'skip-import', 'do not import bit objects post installation'],\n ['', 'skip-compile', 'do not compile components'],\n ['', 'skip-write-config-files', 'do not write config files (such as eslint, tsconfig, prettier, etc...)'],\n ['a', 'add-missing-deps', 'install all missing dependencies'],\n ['', 'skip-unavailable', 'when adding missing dependencies, skip those that are not found in the regisry'],\n ['', 'add-missing-peers', 'install all missing peer dependencies'],\n [\n '',\n recurringInstallFlagName,\n 'automatically run install again if there are non loaded old envs in your workspace',\n ],\n ['', 'no-optional [noOptional]', 'do not install optional dependencies (works with pnpm only)'],\n ['', 'lockfile-only', 'dependencies are not written to node_modules. Only the lockfile is updated'],\n ] as CommandOptions;\n\n constructor(\n private install: InstallMain,\n /**\n * workspace extension.\n */\n private workspace: Workspace,\n\n /**\n * logger extension.\n */\n private logger: Logger\n ) {}\n\n async report([packages = []]: [string[]], options: InstallCmdOptions) {\n const startTime = Date.now();\n if (!this.workspace) throw new OutsideWorkspaceError();\n if (options.updateExisting) {\n this.logger.consoleWarning(\n `--update-existing is deprecated, please omit it. \"bit install\" will update existing dependencies by default`\n );\n }\n\n const validPackages = await Promise.all(\n packages.map(async (pkg) => {\n const pkgName = extractPackageName(pkg);\n if (packageNameValidate(pkgName).validForNewPackages) {\n return pkg;\n }\n // if this is a component-id, find the package name and use it instead.\n try {\n // Check if it's not a package name (doesn't start with @)\n if (!pkgName.startsWith('@')) {\n // Try to resolve it as a component ID\n const componentId = await this.workspace.resolveComponentId(pkg);\n // Get the package name for this component\n const component = await this.workspace.get(componentId);\n const componentPackageName = this.workspace.componentPackageName(component);\n return componentPackageName;\n }\n } catch {\n // If component resolution fails, fall through to original error\n }\n throw new Error(`the package name \"${pkgName}\" is invalid. please provide a valid package name.`);\n })\n );\n this.logger.console(`Resolving component dependencies for workspace: '${chalk.cyan(this.workspace.name)}'`);\n const installOpts: WorkspaceInstallOptions = {\n lifecycleType: options.addMissingPeers ? 'peer' : options.type,\n dedupe: !options.skipDedupe,\n import: !options.skipImport,\n updateExisting: true,\n savePrefix: options.savePrefix,\n addMissingDeps: options.addMissingDeps,\n skipUnavailable: options.skipUnavailable,\n addMissingPeers: options.addMissingPeers,\n compile: !options.skipCompile,\n includeOptionalDeps: !options.noOptional,\n writeConfigFiles: !options.skipWriteConfigFiles,\n updateAll: options.update,\n recurringInstall: options.recurringInstall,\n lockfileOnly: options.lockfileOnly,\n showExternalPackageManagerPrompt: true,\n };\n const components = await this.install.install(validPackages, installOpts);\n const endTime = Date.now();\n const oldNonLoadedEnvs = this.install.getOldNonLoadedEnvs();\n return formatOutput({\n startTime,\n endTime,\n numOfComps: components.toArray().length.toString(),\n recurringInstall: options[recurringInstallFlagName],\n oldNonLoadedEnvs,\n });\n }\n}\n\nfunction calculateTime(startTime: number, endTime: number) {\n const diff = endTime - startTime;\n return diff / 1000;\n}\n\nfunction formatOutput({\n numOfComps,\n endTime,\n startTime,\n recurringInstall,\n oldNonLoadedEnvs,\n}: FormatOutputArgs): string {\n const executionTime = calculateTime(startTime, endTime);\n const summary = chalk.green(\n `Successfully installed dependencies and compiled ${chalk.cyan(numOfComps)} component(s) in ${chalk.cyan(\n executionTime.toString()\n )} seconds`\n );\n const anotherInstallRequiredOutput = getAnotherInstallRequiredOutput(recurringInstall, oldNonLoadedEnvs);\n return anotherInstallRequiredOutput ? `\\n${anotherInstallRequiredOutput}\\n\\n${summary}` : `\\n${summary}`;\n}\n\nexport function getAnotherInstallRequiredOutput(recurringInstall = false, oldNonLoadedEnvs: string[] = []): string {\n if (!oldNonLoadedEnvs.length) return '';\n const oldNonLoadedEnvsStr = oldNonLoadedEnvs.join(', ');\n const firstPart = `Bit was not able to install all dependencies. Please run \"${chalk.cyan('bit install')}\" again `;\n const flag = chalk.cyan(`--${recurringInstallFlagName}`);\n const suggestRecurringInstall = recurringInstall ? '' : `(or use the \"${flag}\" option next time).`;\n const envsStr = `The following environments need to add support for \"dependency policy\" to fix the warning: ${chalk.cyan(\n oldNonLoadedEnvsStr\n )}`;\n const docsLink = `Read more about how to fix this issue in: https://bit.dev/blog/using-a-static-dependency-policy-in-a-legacy-env-lihfbt9b`;\n\n const msg = `${firstPart}${suggestRecurringInstall}\\n${envsStr}\\n${docsLink}`;\n return chalk.yellow(msg);\n}\n\nfunction extractPackageName(packageString: string): string {\n if (!packageString) return '';\n\n // Handle https and git protocols. We don't allow \"file\" protocol here. It won't work for the consumer.\n const allowedPrefixes = ['https://', 'git:', 'git+ssh://', 'git+https://'];\n if (allowedPrefixes.some((prefix) => packageString.startsWith(prefix))) {\n return packageString;\n }\n\n // If it's a scoped package\n if (packageString.startsWith('@')) {\n // Find the second '@' (first is for scope, second is for version/tag)\n const atIndex = packageString.indexOf('@', 1);\n if (atIndex === -1) return packageString;\n const possibleVersion = packageString.slice(atIndex + 1);\n // If the part after the second '@' contains a slash, it's not a version/tag\n if (possibleVersion.includes('/')) return packageString;\n return packageString.slice(0, atIndex);\n }\n\n // For unscoped packages, split at the last '@'\n const lastAtIndex = packageString.lastIndexOf('@');\n if (lastAtIndex <= 0) return packageString;\n return packageString.slice(0, lastAtIndex);\n}\n"],"mappings":";;;;;;;AACA,SAAAA,wBAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,uBAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAGA,SAAAG,OAAA;EAAA,MAAAH,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAC,MAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAI,WAAA;EAAA,MAAAJ,IAAA,GAAAE,OAAA;EAAAE,UAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA2D,SAAAC,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,gBAAAH,CAAA,EAAAI,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAJ,CAAA,GAAAO,MAAA,CAAAC,cAAA,CAAAR,CAAA,EAAAI,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAZ,CAAA,CAAAI,CAAA,IAAAC,CAAA,EAAAL,CAAA;AAAA,SAAAM,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAL,CAAA,GAAAK,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAhB,CAAA,QAAAa,CAAA,GAAAb,CAAA,CAAAiB,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA;AA4B3D,MAAMgB,wBAAwB,GAAG,mBAAmB;AAErC,MAAMC,UAAU,CAAoB;EAkCjDC,WAAWA,CACDC,OAAoB;EAC5B;AACJ;AACA;EACYC,SAAoB;EAE5B;AACJ;AACA;EACYC,MAAc,EACtB;IAAA,KAVQF,OAAoB,GAApBA,OAAoB;IAAA,KAIpBC,SAAoB,GAApBA,SAAoB;IAAA,KAKpBC,MAAc,GAAdA,MAAc;IAAAvB,eAAA,eA3CjB,uBAAuB;IAAAA,eAAA,sBAChB,iCAAiC;IAAAA,eAAA,8BAE7C,mHAAmH;IAAAA,eAAA,kBAC3G,gDAAgD;IAAAA,eAAA,oBAC9C,CAAC;MAAEwB,IAAI,EAAE,aAAa;MAAEC,WAAW,EAAE;IAAsD,CAAC,CAAC;IAAAzB,eAAA,gBACjG,IAAI;IAAAA,eAAA,gBACJ,cAAc;IAAAA,eAAA,kBACZ,CACR,CAAC,GAAG,EAAE,sBAAsB,EAAE,2DAA2D,CAAC,EAC1F,CAAC,GAAG,EAAE,QAAQ,EAAE,2EAA2E,CAAC,EAC5F,CACE,EAAE,EACF,iBAAiB,EACjB,wGAAwG,CACzG,EACD,CAAC,EAAE,EAAE,0BAA0B,EAAE,iEAAiE,CAAC,EACnG,CAAC,EAAE,EAAE,aAAa,EAAE,4CAA4C,CAAC,EACjE,CAAC,EAAE,EAAE,aAAa,EAAE,6CAA6C,CAAC,EAClE,CAAC,EAAE,EAAE,cAAc,EAAE,2BAA2B,CAAC,EACjD,CAAC,EAAE,EAAE,yBAAyB,EAAE,wEAAwE,CAAC,EACzG,CAAC,GAAG,EAAE,kBAAkB,EAAE,kCAAkC,CAAC,EAC7D,CAAC,EAAE,EAAE,kBAAkB,EAAE,gFAAgF,CAAC,EAC1G,CAAC,EAAE,EAAE,mBAAmB,EAAE,uCAAuC,CAAC,EAClE,CACE,EAAE,EACFkB,wBAAwB,EACxB,oFAAoF,CACrF,EACD,CAAC,EAAE,EAAE,0BAA0B,EAAE,6DAA6D,CAAC,EAC/F,CAAC,EAAE,EAAE,eAAe,EAAE,4EAA4E,CAAC,CACpG;EAaE;EAEH,MAAMQ,MAAMA,CAAC,CAACC,QAAQ,GAAG,EAAE,CAAa,EAAEC,OAA0B,EAAE;IACpE,MAAMC,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,CAACT,SAAS,EAAE,MAAM,KAAIU,kCAAqB,EAAC,CAAC;IACtD,IAAIJ,OAAO,CAACK,cAAc,EAAE;MAC1B,IAAI,CAACV,MAAM,CAACW,cAAc,CACxB,6GACF,CAAC;IACH;IAEA,MAAMC,aAAa,GAAG,MAAMC,OAAO,CAACC,GAAG,CACrCV,QAAQ,CAACW,GAAG,CAAC,MAAOC,GAAG,IAAK;MAC1B,MAAMC,OAAO,GAAGC,kBAAkB,CAACF,GAAG,CAAC;MACvC,IAAI,IAAAG,iCAAmB,EAACF,OAAO,CAAC,CAACG,mBAAmB,EAAE;QACpD,OAAOJ,GAAG;MACZ;MACA;MACA,IAAI;QACF;QACA,IAAI,CAACC,OAAO,CAACI,UAAU,CAAC,GAAG,CAAC,EAAE;UAC5B;UACA,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACvB,SAAS,CAACwB,kBAAkB,CAACP,GAAG,CAAC;UAChE;UACA,MAAMQ,SAAS,GAAG,MAAM,IAAI,CAACzB,SAAS,CAAC0B,GAAG,CAACH,WAAW,CAAC;UACvD,MAAMI,oBAAoB,GAAG,IAAI,CAAC3B,SAAS,CAAC2B,oBAAoB,CAACF,SAAS,CAAC;UAC3E,OAAOE,oBAAoB;QAC7B;MACF,CAAC,CAAC,MAAM;QACN;MAAA;MAEF,MAAM,IAAIC,KAAK,CAAC,qBAAqBV,OAAO,oDAAoD,CAAC;IACnG,CAAC,CACH,CAAC;IACD,IAAI,CAACjB,MAAM,CAAC4B,OAAO,CAAC,oDAAoDC,gBAAK,CAACC,IAAI,CAAC,IAAI,CAAC/B,SAAS,CAACE,IAAI,CAAC,GAAG,CAAC;IAC3G,MAAM8B,WAAoC,GAAG;MAC3CC,aAAa,EAAE3B,OAAO,CAAC4B,eAAe,GAAG,MAAM,GAAG5B,OAAO,CAAC6B,IAAI;MAC9DC,MAAM,EAAE,CAAC9B,OAAO,CAAC+B,UAAU;MAC3BC,MAAM,EAAE,CAAChC,OAAO,CAACiC,UAAU;MAC3B5B,cAAc,EAAE,IAAI;MACpB6B,UAAU,EAAElC,OAAO,CAACkC,UAAU;MAC9BC,cAAc,EAAEnC,OAAO,CAACmC,cAAc;MACtCC,eAAe,EAAEpC,OAAO,CAACoC,eAAe;MACxCR,eAAe,EAAE5B,OAAO,CAAC4B,eAAe;MACxCS,OAAO,EAAE,CAACrC,OAAO,CAACsC,WAAW;MAC7BC,mBAAmB,EAAE,CAACvC,OAAO,CAACwC,UAAU;MACxCC,gBAAgB,EAAE,CAACzC,OAAO,CAAC0C,oBAAoB;MAC/CC,SAAS,EAAE3C,OAAO,CAAC4C,MAAM;MACzBC,gBAAgB,EAAE7C,OAAO,CAAC6C,gBAAgB;MAC1CC,YAAY,EAAE9C,OAAO,CAAC8C,YAAY;MAClCC,gCAAgC,EAAE;IACpC,CAAC;IACD,MAAMC,UAAU,GAAG,MAAM,IAAI,CAACvD,OAAO,CAACA,OAAO,CAACc,aAAa,EAAEmB,WAAW,CAAC;IACzE,MAAMuB,OAAO,GAAG/C,IAAI,CAACC,GAAG,CAAC,CAAC;IAC1B,MAAM+C,gBAAgB,GAAG,IAAI,CAACzD,OAAO,CAAC0D,mBAAmB,CAAC,CAAC;IAC3D,OAAOC,YAAY,CAAC;MAClBnD,SAAS;MACTgD,OAAO;MACPI,UAAU,EAAEL,UAAU,CAACM,OAAO,CAAC,CAAC,CAACC,MAAM,CAACC,QAAQ,CAAC,CAAC;MAClDX,gBAAgB,EAAE7C,OAAO,CAACV,wBAAwB,CAAC;MACnD4D;IACF,CAAC,CAAC;EACJ;AACF;AAACO,OAAA,CAAAtF,OAAA,GAAAoB,UAAA;AAED,SAASmE,aAAaA,CAACzD,SAAiB,EAAEgD,OAAe,EAAE;EACzD,MAAMU,IAAI,GAAGV,OAAO,GAAGhD,SAAS;EAChC,OAAO0D,IAAI,GAAG,IAAI;AACpB;AAEA,SAASP,YAAYA,CAAC;EACpBC,UAAU;EACVJ,OAAO;EACPhD,SAAS;EACT4C,gBAAgB;EAChBK;AACgB,CAAC,EAAU;EAC3B,MAAMU,aAAa,GAAGF,aAAa,CAACzD,SAAS,EAAEgD,OAAO,CAAC;EACvD,MAAMY,OAAO,GAAGrC,gBAAK,CAACsC,KAAK,CACzB,oDAAoDtC,gBAAK,CAACC,IAAI,CAAC4B,UAAU,CAAC,oBAAoB7B,gBAAK,CAACC,IAAI,CACtGmC,aAAa,CAACJ,QAAQ,CAAC,CACzB,CAAC,UACH,CAAC;EACD,MAAMO,4BAA4B,GAAGC,+BAA+B,CAACnB,gBAAgB,EAAEK,gBAAgB,CAAC;EACxG,OAAOa,4BAA4B,GAAG,KAAKA,4BAA4B,OAAOF,OAAO,EAAE,GAAG,KAAKA,OAAO,EAAE;AAC1G;AAEO,SAASG,+BAA+BA,CAACnB,gBAAgB,GAAG,KAAK,EAAEK,gBAA0B,GAAG,EAAE,EAAU;EACjH,IAAI,CAACA,gBAAgB,CAACK,MAAM,EAAE,OAAO,EAAE;EACvC,MAAMU,mBAAmB,GAAGf,gBAAgB,CAACgB,IAAI,CAAC,IAAI,CAAC;EACvD,MAAMC,SAAS,GAAG,6DAA6D3C,gBAAK,CAACC,IAAI,CAAC,aAAa,CAAC,UAAU;EAClH,MAAM2C,IAAI,GAAG5C,gBAAK,CAACC,IAAI,CAAC,KAAKnC,wBAAwB,EAAE,CAAC;EACxD,MAAM+E,uBAAuB,GAAGxB,gBAAgB,GAAG,EAAE,GAAG,gBAAgBuB,IAAI,sBAAsB;EAClG,MAAME,OAAO,GAAG,8FAA8F9C,gBAAK,CAACC,IAAI,CACtHwC,mBACF,CAAC,EAAE;EACH,MAAMM,QAAQ,GAAG,0HAA0H;EAE3I,MAAMC,GAAG,GAAG,GAAGL,SAAS,GAAGE,uBAAuB,KAAKC,OAAO,KAAKC,QAAQ,EAAE;EAC7E,OAAO/C,gBAAK,CAACiD,MAAM,CAACD,GAAG,CAAC;AAC1B;AAEA,SAAS3D,kBAAkBA,CAAC6D,aAAqB,EAAU;EACzD,IAAI,CAACA,aAAa,EAAE,OAAO,EAAE;;EAE7B;EACA,MAAMC,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,CAAC;EAC1E,IAAIA,eAAe,CAACC,IAAI,CAAEC,MAAM,IAAKH,aAAa,CAAC1D,UAAU,CAAC6D,MAAM,CAAC,CAAC,EAAE;IACtE,OAAOH,aAAa;EACtB;;EAEA;EACA,IAAIA,aAAa,CAAC1D,UAAU,CAAC,GAAG,CAAC,EAAE;IACjC;IACA,MAAM8D,OAAO,GAAGJ,aAAa,CAACK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7C,IAAID,OAAO,KAAK,CAAC,CAAC,EAAE,OAAOJ,aAAa;IACxC,MAAMM,eAAe,GAAGN,aAAa,CAACO,KAAK,CAACH,OAAO,GAAG,CAAC,CAAC;IACxD;IACA,IAAIE,eAAe,CAACE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAOR,aAAa;IACvD,OAAOA,aAAa,CAACO,KAAK,CAAC,CAAC,EAAEH,OAAO,CAAC;EACxC;;EAEA;EACA,MAAMK,WAAW,GAAGT,aAAa,CAACU,WAAW,CAAC,GAAG,CAAC;EAClD,IAAID,WAAW,IAAI,CAAC,EAAE,OAAOT,aAAa;EAC1C,OAAOA,aAAa,CAACO,KAAK,CAAC,CAAC,EAAEE,WAAW,CAAC;AAC5C","ignoreList":[]}