@teambit/workspace 0.0.567 → 0.0.571

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 (64) hide show
  1. package/__snapshots__/pick-outdated-pkgs.spec.ts.snap +88 -0
  2. package/component-config-file/component-config-file.ts +98 -0
  3. package/component-config-file/exceptions/already-exists.ts +7 -0
  4. package/component-config-file/exceptions/index.ts +1 -0
  5. package/component-config-file/index.ts +2 -0
  6. package/component-tree.widget.tsx +16 -0
  7. package/dist/__snapshots__/pick-outdated-pkgs.spec.js.snap +88 -0
  8. package/dist/__snapshots__/pick-outdated-pkgs.spec.ts.snap +88 -0
  9. package/dist/pick-outdated-pkgs.d.ts +12 -0
  10. package/dist/pick-outdated-pkgs.js +201 -0
  11. package/dist/pick-outdated-pkgs.js.map +1 -0
  12. package/dist/pick-outdated-pkgs.spec.d.ts +1 -0
  13. package/dist/pick-outdated-pkgs.spec.js +64 -0
  14. package/dist/pick-outdated-pkgs.spec.js.map +1 -0
  15. package/dist/update.cmd.js +3 -5
  16. package/dist/update.cmd.js.map +1 -1
  17. package/dist/workspace.d.ts +8 -1
  18. package/dist/workspace.js +29 -3
  19. package/dist/workspace.js.map +1 -1
  20. package/eject-conf.cmd.tsx +62 -0
  21. package/events/index.ts +3 -0
  22. package/events/on-component-add-event.ts +14 -0
  23. package/events/on-component-change-event.ts +14 -0
  24. package/events/on-component-removed-event.ts +14 -0
  25. package/exceptions/dependency-type-not-supported-in-policy.ts +7 -0
  26. package/exceptions/incorrect-env-aspect.ts +8 -0
  27. package/exceptions/index.ts +1 -0
  28. package/install.cmd.tsx +67 -0
  29. package/link/component-list-links.ts +50 -0
  30. package/link/core-aspects-links.ts +50 -0
  31. package/link/get-package-name-from-target.ts +5 -0
  32. package/link/index.ts +1 -0
  33. package/link/link-row.ts +20 -0
  34. package/link/link-to-dir.ts +13 -0
  35. package/link/link.cmd.ts +96 -0
  36. package/link/nested-deps-in-nm-links.ts +47 -0
  37. package/link/rewire-row.ts +17 -0
  38. package/list.cmd.tsx +30 -0
  39. package/package-tar/teambit-workspace-0.0.571.tgz +0 -0
  40. package/package.json +54 -65
  41. package/types/asset.d.ts +29 -0
  42. package/types/style.d.ts +42 -0
  43. package/ui/index.ts +1 -0
  44. package/ui/workspace/default-component.ts +7 -0
  45. package/ui/workspace/index.ts +1 -0
  46. package/ui/workspace/use-workspace.ts +193 -0
  47. package/ui/workspace/workspace-context.tsx +5 -0
  48. package/ui/workspace/workspace-model.ts +66 -0
  49. package/ui/workspace/workspace-overview/index.ts +1 -0
  50. package/ui/workspace/workspace-overview/workspace-overview.tsx +21 -0
  51. package/ui/workspace/workspace-provider.tsx +23 -0
  52. package/ui/workspace/workspace.tsx +99 -0
  53. package/ui/workspace-components-drawer/index.ts +1 -0
  54. package/ui/workspace-components-drawer/workspace-components.drawer.tsx +49 -0
  55. package/update.cmd.tsx +30 -0
  56. package/watch/check-types.ts +5 -0
  57. package/watch/output-formatter.ts +50 -0
  58. package/watch/watch.cmd.tsx +142 -0
  59. package/watch/watcher.ts +289 -0
  60. package/workspace-component/component-status.ts +67 -0
  61. package/workspace-component/index.ts +2 -0
  62. package/workspace-component/workspace-component-loader.ts +276 -0
  63. package/workspace-component/workspace-component.ts +51 -0
  64. package/workspace.ui.runtime.tsx +215 -0
@@ -0,0 +1,88 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`makeOutdatedPkgChoices should render choices in correct order 1`] = `
4
+ Array [
5
+ Object {
6
+ "choices": Array [
7
+ Object {
8
+ "message": "foo (runtime) 1.0.0 ❯ 2.0.0 ",
9
+ "name": Object {
10
+ "currentRange": "1.0.0",
11
+ "latestRange": "2.0.0",
12
+ "name": "foo",
13
+ "source": "rootPolicy",
14
+ "targetField": "dependencies",
15
+ },
16
+ },
17
+ Object {
18
+ "message": "qar (runtime) 1.0.0 ❯ 1.1.0 ",
19
+ "name": Object {
20
+ "currentRange": "1.0.0",
21
+ "latestRange": "1.1.0",
22
+ "name": "qar",
23
+ "source": "rootPolicy",
24
+ "targetField": "dependencies",
25
+ },
26
+ },
27
+ Object {
28
+ "message": "zoo (dev) 1.0.0 ❯ 1.1.0 ",
29
+ "name": Object {
30
+ "currentRange": "1.0.0",
31
+ "latestRange": "1.1.0",
32
+ "name": "zoo",
33
+ "source": "rootPolicy",
34
+ "targetField": "devDependencies",
35
+ },
36
+ },
37
+ Object {
38
+ "message": "bar (peer) 1.0.0 ❯ 1.1.0 ",
39
+ "name": Object {
40
+ "currentRange": "1.0.0",
41
+ "latestRange": "1.1.0",
42
+ "name": "bar",
43
+ "source": "rootPolicy",
44
+ "targetField": "peerDependencies",
45
+ },
46
+ },
47
+ ],
48
+ "message": "Root policies",
49
+ },
50
+ ]
51
+ `;
52
+
53
+ exports[`makeOutdatedPkgChoices should render choices with context information 1`] = `
54
+ Array [
55
+ Object {
56
+ "choices": Array [
57
+ Object {
58
+ "message": "foo (runtime) 1.0.0 ❯ 2.0.0 ",
59
+ "name": Object {
60
+ "componentId": "comp1",
61
+ "currentRange": "1.0.0",
62
+ "latestRange": "2.0.0",
63
+ "name": "foo",
64
+ "source": "component",
65
+ "targetField": "dependencies",
66
+ },
67
+ },
68
+ ],
69
+ "message": "comp1 (component)",
70
+ },
71
+ Object {
72
+ "choices": Array [
73
+ Object {
74
+ "message": "bar (peer) 1.0.0 ❯ 1.1.0 ",
75
+ "name": Object {
76
+ "currentRange": "1.0.0",
77
+ "latestRange": "1.1.0",
78
+ "name": "bar",
79
+ "source": "variants",
80
+ "targetField": "peerDependencies",
81
+ "variantPattern": "{comp2}",
82
+ },
83
+ },
84
+ ],
85
+ "message": "{comp2} (variant)",
86
+ },
87
+ ]
88
+ `;
@@ -0,0 +1,98 @@
1
+ import { ComponentID, AspectList } from '@teambit/component';
2
+ import { COMPONENT_CONFIG_FILE_NAME } from '@teambit/legacy/dist/constants';
3
+ import { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';
4
+ import { PathOsBasedAbsolute } from '@teambit/legacy/dist/utils/path';
5
+ import detectIndent from 'detect-indent';
6
+ import detectNewline from 'detect-newline';
7
+ import fs from 'fs-extra';
8
+ import path from 'path';
9
+ import stringifyPackage from 'stringify-package';
10
+
11
+ import { AlreadyExistsError } from './exceptions';
12
+
13
+ interface ComponentConfigFileOptions {
14
+ indent: number;
15
+ newLine: '\r\n' | '\n' | undefined;
16
+ }
17
+
18
+ interface WriteConfigFileOptions {
19
+ override?: boolean;
20
+ }
21
+
22
+ interface ComponentConfigFileJson {
23
+ componentId: any;
24
+ // TODO: think if we want to change it to aspects
25
+ extensions: any;
26
+ propagate: boolean;
27
+ defaultScope?: string;
28
+ }
29
+
30
+ const DEFAULT_INDENT = 2;
31
+ const DEFAULT_NEWLINE = '\n';
32
+
33
+ export class ComponentConfigFile {
34
+ constructor(
35
+ public componentId: ComponentID,
36
+ public aspects: AspectList,
37
+ public propagate: boolean = false,
38
+ private options: ComponentConfigFileOptions = { indent: DEFAULT_INDENT, newLine: DEFAULT_NEWLINE },
39
+ public defaultScope?: string
40
+ ) {}
41
+
42
+ // TODO: remove consumer from here
43
+ static async load(
44
+ componentDir: PathOsBasedAbsolute,
45
+ aspectListFactory: (extensionDataList: ExtensionDataList) => Promise<AspectList>,
46
+ outsideDefaultScope?: string
47
+ ): Promise<ComponentConfigFile | undefined> {
48
+ const filePath = ComponentConfigFile.composePath(componentDir);
49
+ const isExist = await fs.pathExists(filePath);
50
+ if (!isExist) {
51
+ return undefined;
52
+ }
53
+ const content = await fs.readFile(filePath, 'utf-8');
54
+ const parsed: ComponentConfigFileJson = parseComponentJsonContent(content, componentDir);
55
+ const indent = detectIndent(content).amount;
56
+ const newLine = detectNewline(content);
57
+ const componentId = ComponentID.fromObject(parsed.componentId, parsed.defaultScope || outsideDefaultScope);
58
+ const aspects = await aspectListFactory(ExtensionDataList.fromConfigObject(parsed.extensions));
59
+
60
+ return new ComponentConfigFile(componentId, aspects, !!parsed.propagate, { indent, newLine }, parsed.defaultScope);
61
+ }
62
+
63
+ static composePath(componentRootFolder: string) {
64
+ return path.join(componentRootFolder, COMPONENT_CONFIG_FILE_NAME);
65
+ }
66
+
67
+ async write(componentDir: string, options: WriteConfigFileOptions = {}): Promise<void> {
68
+ const json = this.toJson();
69
+ const filePath = ComponentConfigFile.composePath(componentDir);
70
+ const isExist = await fs.pathExists(filePath);
71
+ if (isExist && !options.override) {
72
+ throw new AlreadyExistsError(filePath);
73
+ }
74
+ return fs.writeJsonSync(filePath, json, { spaces: this.options.indent, EOL: this.options.newLine });
75
+ }
76
+
77
+ toJson(): ComponentConfigFileJson {
78
+ return {
79
+ componentId: this.componentId.toObject(),
80
+ propagate: this.propagate,
81
+ defaultScope: this.defaultScope,
82
+ extensions: this.aspects.toConfigObject(),
83
+ };
84
+ }
85
+
86
+ toString(): string {
87
+ const json = this.toJson();
88
+ return stringifyPackage(json, this.options.indent, this.options.newLine);
89
+ }
90
+ }
91
+
92
+ function parseComponentJsonContent(str: string, dir: string) {
93
+ try {
94
+ return JSON.parse(str);
95
+ } catch (err: any) {
96
+ throw new Error(`failed parsing component.json file at ${dir}. original error: ${err.message}`);
97
+ }
98
+ }
@@ -0,0 +1,7 @@
1
+ import { BitError } from '@teambit/bit-error';
2
+
3
+ export class AlreadyExistsError extends BitError {
4
+ constructor(filePath: string) {
5
+ super(`config file at ${filePath} already exist. use override in case you want to override it`);
6
+ }
7
+ }
@@ -0,0 +1 @@
1
+ export { AlreadyExistsError } from './already-exists';
@@ -0,0 +1,2 @@
1
+ export { ComponentConfigFile } from './component-config-file';
2
+ export { AlreadyExistsError } from './exceptions';
@@ -0,0 +1,16 @@
1
+ import { ComponentTreeNode, ComponentTreeNodeProps } from '@teambit/component-tree';
2
+ import { ComponentStatusResolver } from '@teambit/component.ui.component-status-resolver';
3
+ import React, { useContext } from 'react';
4
+
5
+ import { WorkspaceContext } from './ui/workspace/workspace-context';
6
+
7
+ export class ComponentTreeWidget implements ComponentTreeNode {
8
+ widget = ({ component }: ComponentTreeNodeProps) => {
9
+ const workspace = useContext(WorkspaceContext);
10
+
11
+ const workspaceComponent = workspace.getComponent(component.id);
12
+ if (!workspaceComponent) return null;
13
+
14
+ return <ComponentStatusResolver status={workspaceComponent.status} issuesCount={workspaceComponent.issuesCount} />;
15
+ };
16
+ }
@@ -0,0 +1,88 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`makeOutdatedPkgChoices should render choices in correct order 1`] = `
4
+ Array [
5
+ Object {
6
+ "choices": Array [
7
+ Object {
8
+ "message": "foo (runtime) 1.0.0 ❯ 2.0.0 ",
9
+ "name": Object {
10
+ "currentRange": "1.0.0",
11
+ "latestRange": "2.0.0",
12
+ "name": "foo",
13
+ "source": "rootPolicy",
14
+ "targetField": "dependencies",
15
+ },
16
+ },
17
+ Object {
18
+ "message": "qar (runtime) 1.0.0 ❯ 1.1.0 ",
19
+ "name": Object {
20
+ "currentRange": "1.0.0",
21
+ "latestRange": "1.1.0",
22
+ "name": "qar",
23
+ "source": "rootPolicy",
24
+ "targetField": "dependencies",
25
+ },
26
+ },
27
+ Object {
28
+ "message": "zoo (dev) 1.0.0 ❯ 1.1.0 ",
29
+ "name": Object {
30
+ "currentRange": "1.0.0",
31
+ "latestRange": "1.1.0",
32
+ "name": "zoo",
33
+ "source": "rootPolicy",
34
+ "targetField": "devDependencies",
35
+ },
36
+ },
37
+ Object {
38
+ "message": "bar (peer) 1.0.0 ❯ 1.1.0 ",
39
+ "name": Object {
40
+ "currentRange": "1.0.0",
41
+ "latestRange": "1.1.0",
42
+ "name": "bar",
43
+ "source": "rootPolicy",
44
+ "targetField": "peerDependencies",
45
+ },
46
+ },
47
+ ],
48
+ "message": "Root policies",
49
+ },
50
+ ]
51
+ `;
52
+
53
+ exports[`makeOutdatedPkgChoices should render choices with context information 1`] = `
54
+ Array [
55
+ Object {
56
+ "choices": Array [
57
+ Object {
58
+ "message": "foo (runtime) 1.0.0 ❯ 2.0.0 ",
59
+ "name": Object {
60
+ "componentId": "comp1",
61
+ "currentRange": "1.0.0",
62
+ "latestRange": "2.0.0",
63
+ "name": "foo",
64
+ "source": "component",
65
+ "targetField": "dependencies",
66
+ },
67
+ },
68
+ ],
69
+ "message": "comp1 (component)",
70
+ },
71
+ Object {
72
+ "choices": Array [
73
+ Object {
74
+ "message": "bar (peer) 1.0.0 ❯ 1.1.0 ",
75
+ "name": Object {
76
+ "currentRange": "1.0.0",
77
+ "latestRange": "1.1.0",
78
+ "name": "bar",
79
+ "source": "variants",
80
+ "targetField": "peerDependencies",
81
+ "variantPattern": "{comp2}",
82
+ },
83
+ },
84
+ ],
85
+ "message": "{comp2} (variant)",
86
+ },
87
+ ]
88
+ `;
@@ -0,0 +1,88 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`makeOutdatedPkgChoices should render choices in correct order 1`] = `
4
+ Array [
5
+ Object {
6
+ "choices": Array [
7
+ Object {
8
+ "message": "foo (runtime) 1.0.0 ❯ 2.0.0 ",
9
+ "name": Object {
10
+ "currentRange": "1.0.0",
11
+ "latestRange": "2.0.0",
12
+ "name": "foo",
13
+ "source": "rootPolicy",
14
+ "targetField": "dependencies",
15
+ },
16
+ },
17
+ Object {
18
+ "message": "qar (runtime) 1.0.0 ❯ 1.1.0 ",
19
+ "name": Object {
20
+ "currentRange": "1.0.0",
21
+ "latestRange": "1.1.0",
22
+ "name": "qar",
23
+ "source": "rootPolicy",
24
+ "targetField": "dependencies",
25
+ },
26
+ },
27
+ Object {
28
+ "message": "zoo (dev) 1.0.0 ❯ 1.1.0 ",
29
+ "name": Object {
30
+ "currentRange": "1.0.0",
31
+ "latestRange": "1.1.0",
32
+ "name": "zoo",
33
+ "source": "rootPolicy",
34
+ "targetField": "devDependencies",
35
+ },
36
+ },
37
+ Object {
38
+ "message": "bar (peer) 1.0.0 ❯ 1.1.0 ",
39
+ "name": Object {
40
+ "currentRange": "1.0.0",
41
+ "latestRange": "1.1.0",
42
+ "name": "bar",
43
+ "source": "rootPolicy",
44
+ "targetField": "peerDependencies",
45
+ },
46
+ },
47
+ ],
48
+ "message": "Root policies",
49
+ },
50
+ ]
51
+ `;
52
+
53
+ exports[`makeOutdatedPkgChoices should render choices with context information 1`] = `
54
+ Array [
55
+ Object {
56
+ "choices": Array [
57
+ Object {
58
+ "message": "foo (runtime) 1.0.0 ❯ 2.0.0 ",
59
+ "name": Object {
60
+ "componentId": "comp1",
61
+ "currentRange": "1.0.0",
62
+ "latestRange": "2.0.0",
63
+ "name": "foo",
64
+ "source": "component",
65
+ "targetField": "dependencies",
66
+ },
67
+ },
68
+ ],
69
+ "message": "comp1 (component)",
70
+ },
71
+ Object {
72
+ "choices": Array [
73
+ Object {
74
+ "message": "bar (peer) 1.0.0 ❯ 1.1.0 ",
75
+ "name": Object {
76
+ "currentRange": "1.0.0",
77
+ "latestRange": "1.1.0",
78
+ "name": "bar",
79
+ "source": "variants",
80
+ "targetField": "peerDependencies",
81
+ "variantPattern": "{comp2}",
82
+ },
83
+ },
84
+ ],
85
+ "message": "{comp2} (variant)",
86
+ },
87
+ ]
88
+ `;
@@ -0,0 +1,12 @@
1
+ import { OutdatedPkg } from '@teambit/dependency-resolver';
2
+ /**
3
+ * Lets the user pick the packages that should be updated.
4
+ */
5
+ export declare function pickOutdatedPkgs(outdatedPkgs: OutdatedPkg[]): Promise<OutdatedPkg[]>;
6
+ /**
7
+ * Groups the outdated packages and makes choices for enquirer's prompt.
8
+ */
9
+ export declare function makeOutdatedPkgChoices(outdatedPkgs: OutdatedPkg[]): {
10
+ message: string;
11
+ choices: unknown;
12
+ }[];
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ require("core-js/modules/es.array.iterator.js");
6
+
7
+ require("core-js/modules/es.array.sort.js");
8
+
9
+ require("core-js/modules/es.promise.js");
10
+
11
+ require("core-js/modules/es.regexp.exec.js");
12
+
13
+ Object.defineProperty(exports, "__esModule", {
14
+ value: true
15
+ });
16
+ exports.makeOutdatedPkgChoices = makeOutdatedPkgChoices;
17
+ exports.pickOutdatedPkgs = pickOutdatedPkgs;
18
+
19
+ function _colorizeSemverDiff() {
20
+ const data = _interopRequireDefault(require("@pnpm/colorize-semver-diff"));
21
+
22
+ _colorizeSemverDiff = function () {
23
+ return data;
24
+ };
25
+
26
+ return data;
27
+ }
28
+
29
+ function _semverDiff() {
30
+ const data = _interopRequireDefault(require("@pnpm/semver-diff"));
31
+
32
+ _semverDiff = function () {
33
+ return data;
34
+ };
35
+
36
+ return data;
37
+ }
38
+
39
+ function _table() {
40
+ const data = require("table");
41
+
42
+ _table = function () {
43
+ return data;
44
+ };
45
+
46
+ return data;
47
+ }
48
+
49
+ function _chalk() {
50
+ const data = _interopRequireDefault(require("chalk"));
51
+
52
+ _chalk = function () {
53
+ return data;
54
+ };
55
+
56
+ return data;
57
+ }
58
+
59
+ function _enquirer() {
60
+ const data = require("enquirer");
61
+
62
+ _enquirer = function () {
63
+ return data;
64
+ };
65
+
66
+ return data;
67
+ }
68
+
69
+ /**
70
+ * Lets the user pick the packages that should be updated.
71
+ */
72
+ async function pickOutdatedPkgs(outdatedPkgs) {
73
+ const {
74
+ updateDependencies
75
+ } = await (0, _enquirer().prompt)({
76
+ choices: makeOutdatedPkgChoices(outdatedPkgs),
77
+ footer: '\nEnter to start updating. Ctrl-c to cancel.',
78
+ indicator: (state, choice) => ` ${choice.enabled ? '●' : '○'}`,
79
+ message: 'Choose which packages to update ' + `(Press ${_chalk().default.cyan('<space>')} to select, ` + `${_chalk().default.cyan('<a>')} to toggle all, ` + `${_chalk().default.cyan('<i>')} to invert selection)
80
+ ${_chalk().default.green('Green')} - indicates a semantically safe update
81
+ ${_chalk().default.red('Red')} - indicates a semantically breaking change`,
82
+ name: 'updateDependencies',
83
+ pointer: '❯',
84
+ styles: {
85
+ dark: _chalk().default.white,
86
+ em: _chalk().default.bgBlack.whiteBright,
87
+ success: _chalk().default.white
88
+ },
89
+ type: 'multiselect',
90
+
91
+ validate(value) {
92
+ if (value.length === 0) {
93
+ return 'You must choose at least one package.';
94
+ }
95
+
96
+ return true;
97
+ },
98
+
99
+ j() {
100
+ return this.down();
101
+ },
102
+
103
+ k() {
104
+ return this.up();
105
+ }
106
+
107
+ });
108
+ return updateDependencies.filter(updateDependency => typeof updateDependency !== 'string');
109
+ }
110
+
111
+ const DEP_TYPE_PRIORITY = {
112
+ dependencies: 0,
113
+ devDependencies: 1,
114
+ peerDependencies: 2
115
+ };
116
+ /**
117
+ * Groups the outdated packages and makes choices for enquirer's prompt.
118
+ */
119
+
120
+ function makeOutdatedPkgChoices(outdatedPkgs) {
121
+ outdatedPkgs.sort((pkg1, pkg2) => {
122
+ if (pkg1.targetField === pkg2.targetField) return pkg1.name.localeCompare(pkg2.name);
123
+ return DEP_TYPE_PRIORITY[pkg1.targetField] - DEP_TYPE_PRIORITY[pkg2.targetField];
124
+ });
125
+ const renderedTable = alignColumns(outdatedPkgsRows(outdatedPkgs));
126
+ const groupedChoices = {};
127
+ outdatedPkgs.forEach((outdatedPkg, index) => {
128
+ const context = renderContext(outdatedPkg);
129
+
130
+ if (!groupedChoices[context]) {
131
+ groupedChoices[context] = [];
132
+ }
133
+
134
+ groupedChoices[context].push({
135
+ message: renderedTable[index],
136
+ name: outdatedPkg
137
+ });
138
+ });
139
+ const choices = Object.entries(groupedChoices).map(([context, subChoices]) => ({
140
+ message: _chalk().default.cyan(context),
141
+ choices: subChoices
142
+ }));
143
+ return choices;
144
+ }
145
+
146
+ function renderContext(outdatedPkg) {
147
+ if (outdatedPkg.variantPattern) {
148
+ return `${outdatedPkg.variantPattern} (variant)`;
149
+ }
150
+
151
+ if (outdatedPkg.componentId) {
152
+ return `${outdatedPkg.componentId} (component)`;
153
+ }
154
+
155
+ return 'Root policies';
156
+ }
157
+
158
+ const TARGET_FIELD_TO_DEP_TYPE = {
159
+ devDependencies: 'dev',
160
+ dependencies: 'runtime',
161
+ peerDependencies: 'peer'
162
+ };
163
+
164
+ function outdatedPkgsRows(outdatedPkgs) {
165
+ return outdatedPkgs.map(outdatedPkg => {
166
+ const {
167
+ change,
168
+ diff
169
+ } = (0, _semverDiff().default)(outdatedPkg.currentRange, outdatedPkg.latestRange);
170
+ let colorizeChange = change !== null && change !== void 0 ? change : 'breaking';
171
+
172
+ if (change === 'feature') {
173
+ colorizeChange = 'fix';
174
+ }
175
+
176
+ const latest = (0, _colorizeSemverDiff().default)({
177
+ change: colorizeChange,
178
+ diff
179
+ });
180
+ return [outdatedPkg.name, _chalk().default.grey(`(${TARGET_FIELD_TO_DEP_TYPE[outdatedPkg.targetField]})`), outdatedPkg.currentRange, '❯', latest];
181
+ });
182
+ }
183
+
184
+ function alignColumns(rows) {
185
+ return (0, _table().table)(rows, {
186
+ border: (0, _table().getBorderCharacters)('void'),
187
+ columnDefault: {
188
+ paddingLeft: 0,
189
+ paddingRight: 1
190
+ },
191
+ columns: {
192
+ // This is the current range column
193
+ 2: {
194
+ alignment: 'right'
195
+ }
196
+ },
197
+ drawHorizontalLine: () => false
198
+ }).split('\n');
199
+ }
200
+
201
+ //# sourceMappingURL=pick-outdated-pkgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["pick-outdated-pkgs.ts"],"names":["pickOutdatedPkgs","outdatedPkgs","updateDependencies","choices","makeOutdatedPkgChoices","footer","indicator","state","choice","enabled","message","chalk","cyan","green","red","name","pointer","styles","dark","white","em","bgBlack","whiteBright","success","type","validate","value","length","j","down","k","up","filter","updateDependency","DEP_TYPE_PRIORITY","dependencies","devDependencies","peerDependencies","sort","pkg1","pkg2","targetField","localeCompare","renderedTable","alignColumns","outdatedPkgsRows","groupedChoices","forEach","outdatedPkg","index","context","renderContext","push","Object","entries","map","subChoices","variantPattern","componentId","TARGET_FIELD_TO_DEP_TYPE","change","diff","currentRange","latestRange","colorizeChange","latest","grey","rows","border","columnDefault","paddingLeft","paddingRight","columns","alignment","drawHorizontalLine","split"],"mappings":"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","sourcesContent":["import colorizeSemverDiff from '@pnpm/colorize-semver-diff';\nimport semverDiff from '@pnpm/semver-diff';\nimport { OutdatedPkg } from '@teambit/dependency-resolver';\nimport { getBorderCharacters, table } from 'table';\nimport chalk from 'chalk';\nimport { prompt } from 'enquirer';\n\n/**\n * Lets the user pick the packages that should be updated.\n */\nexport async function pickOutdatedPkgs(outdatedPkgs: OutdatedPkg[]): Promise<OutdatedPkg[]> {\n const { updateDependencies } = (await prompt({\n choices: makeOutdatedPkgChoices(outdatedPkgs),\n footer: '\\nEnter to start updating. Ctrl-c to cancel.',\n indicator: (state: any, choice: any) => ` ${choice.enabled ? '●' : '○'}`,\n message:\n 'Choose which packages to update ' +\n `(Press ${chalk.cyan('<space>')} to select, ` +\n `${chalk.cyan('<a>')} to toggle all, ` +\n `${chalk.cyan('<i>')} to invert selection)\n${chalk.green('Green')} - indicates a semantically safe update\n${chalk.red('Red')} - indicates a semantically breaking change`,\n name: 'updateDependencies',\n pointer: '❯',\n styles: {\n dark: chalk.white,\n em: chalk.bgBlack.whiteBright,\n success: chalk.white,\n },\n type: 'multiselect',\n validate(value: string[]) {\n if (value.length === 0) {\n return 'You must choose at least one package.';\n }\n return true;\n },\n j() {\n return this.down();\n },\n k() {\n return this.up();\n },\n } as any)) as { updateDependencies: Array<string | OutdatedPkg> };\n return updateDependencies.filter((updateDependency) => typeof updateDependency !== 'string') as OutdatedPkg[];\n}\n\nconst DEP_TYPE_PRIORITY = {\n dependencies: 0,\n devDependencies: 1,\n peerDependencies: 2,\n};\n\n/**\n * Groups the outdated packages and makes choices for enquirer's prompt.\n */\nexport function makeOutdatedPkgChoices(outdatedPkgs: OutdatedPkg[]) {\n outdatedPkgs.sort((pkg1, pkg2) => {\n if (pkg1.targetField === pkg2.targetField) return pkg1.name.localeCompare(pkg2.name);\n return DEP_TYPE_PRIORITY[pkg1.targetField] - DEP_TYPE_PRIORITY[pkg2.targetField];\n });\n const renderedTable = alignColumns(outdatedPkgsRows(outdatedPkgs));\n const groupedChoices = {};\n outdatedPkgs.forEach((outdatedPkg, index) => {\n const context = renderContext(outdatedPkg);\n if (!groupedChoices[context]) {\n groupedChoices[context] = [];\n }\n groupedChoices[context].push({\n message: renderedTable[index],\n name: outdatedPkg,\n });\n });\n const choices = Object.entries(groupedChoices).map(([context, subChoices]) => ({\n message: chalk.cyan(context),\n choices: subChoices,\n }));\n return choices;\n}\n\nfunction renderContext(outdatedPkg: OutdatedPkg) {\n if (outdatedPkg.variantPattern) {\n return `${outdatedPkg.variantPattern} (variant)`;\n }\n if (outdatedPkg.componentId) {\n return `${outdatedPkg.componentId} (component)`;\n }\n return 'Root policies';\n}\n\nconst TARGET_FIELD_TO_DEP_TYPE = {\n devDependencies: 'dev',\n dependencies: 'runtime',\n peerDependencies: 'peer',\n};\n\nfunction outdatedPkgsRows(outdatedPkgs: OutdatedPkg[]) {\n return outdatedPkgs.map((outdatedPkg) => {\n const { change, diff } = semverDiff(outdatedPkg.currentRange, outdatedPkg.latestRange);\n let colorizeChange = change ?? 'breaking';\n if (change === 'feature') {\n colorizeChange = 'fix';\n }\n const latest = colorizeSemverDiff({\n change: colorizeChange,\n diff,\n });\n return [\n outdatedPkg.name,\n chalk.grey(`(${TARGET_FIELD_TO_DEP_TYPE[outdatedPkg.targetField]})`),\n outdatedPkg.currentRange,\n '❯',\n latest,\n ];\n });\n}\n\nfunction alignColumns(rows: string[][]) {\n return table(rows, {\n border: getBorderCharacters('void'),\n columnDefault: {\n paddingLeft: 0,\n paddingRight: 1,\n },\n columns: {\n // This is the current range column\n 2: { alignment: 'right' },\n },\n drawHorizontalLine: () => false,\n }).split('\\n');\n}\n"]}
@@ -0,0 +1 @@
1
+ export {};