dpdm 3.13.1 → 3.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/utils.spec.js CHANGED
@@ -5,24 +5,184 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const tslib_1 = require("tslib");
8
+ const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
8
9
  const path_1 = require("path");
9
10
  const utils_1 = require("./utils");
11
+ const consts_1 = require("./consts");
10
12
  describe('util', () => {
11
13
  it('should resolve correctly', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
12
14
  const ext = ['', '.js', '.jsx', '.ts', '.tsx', '.json'];
13
15
  const local = yield (0, utils_1.simpleResolver)(__dirname, './bin/dpdm', ext);
14
16
  const index = yield (0, utils_1.simpleResolver)(__dirname, '.', ext);
15
- // dependents on yarn.lock
16
- const pkg = yield (0, utils_1.simpleResolver)(__dirname, 'string_decoder', ext);
17
- const deepPkg = yield (0, utils_1.simpleResolver)((0, path_1.dirname)(pkg), 'safe-buffer', ext);
17
+ yield fs_extra_1.default.outputJSON('node_modules/dpdm-ut-parent/package.json', {
18
+ name: 'dpdm-ut-parent',
19
+ version: '1.0.0',
20
+ main: 'index.js',
21
+ dependencies: {
22
+ 'dpdm-ut-deep': '^1.0.0',
23
+ },
24
+ });
25
+ yield fs_extra_1.default.outputFile('node_modules/dpdm-ut-parent/index.js', '');
26
+ yield fs_extra_1.default.outputJSON('node_modules/dpdm-ut-parent/node_modules/dpdm-ut-deep/package.json', {
27
+ name: 'dpdm-ut-deep',
28
+ version: '1.0.0',
29
+ main: 'index.js',
30
+ });
31
+ yield fs_extra_1.default.outputFile('node_modules/dpdm-ut-parent/node_modules/dpdm-ut-deep/index.js', '');
32
+ yield fs_extra_1.default.outputJSON('node_modules/dpdm-ut-deep/package.json', {
33
+ name: 'dpdm-ut-deep',
34
+ version: '2.0.0',
35
+ main: 'index.js',
36
+ });
37
+ yield fs_extra_1.default.outputFile('node_modules/dpdm-ut-deep/index.js', '');
38
+ const pkg = yield (0, utils_1.simpleResolver)(__dirname, 'dpdm-ut-parent', ext);
39
+ const deepPkg = yield (0, utils_1.simpleResolver)((0, path_1.dirname)(pkg), 'dpdm-ut-deep', ext);
18
40
  const notFound = yield (0, utils_1.simpleResolver)(__dirname, './utils.tsx', ext);
19
41
  expect([local, index, pkg, deepPkg, notFound]).toEqual([
20
42
  (0, path_1.join)(__dirname, 'bin/dpdm.ts'),
21
43
  (0, path_1.join)(__dirname, 'index.ts'),
22
- (0, path_1.join)(__dirname, '../node_modules/string_decoder/lib/string_decoder.js'),
23
- (0, path_1.join)(__dirname, '../node_modules/string_decoder/node_modules/safe-buffer/index.js'),
44
+ (0, path_1.join)(__dirname, '../node_modules/dpdm-ut-parent/index.js'),
45
+ (0, path_1.join)(__dirname, '../node_modules/dpdm-ut-parent/node_modules/dpdm-ut-deep/index.js'),
24
46
  null,
25
47
  ]);
26
48
  }));
49
+ describe('When parsing circular', () => {
50
+ function dependencyFactory(id) {
51
+ return {
52
+ issuer: '',
53
+ request: '',
54
+ kind: consts_1.DependencyKind.StaticImport,
55
+ id,
56
+ };
57
+ }
58
+ describe('When tree is empty', () => {
59
+ const tree = {};
60
+ it('Should return empty array', () => {
61
+ const actual = (0, utils_1.parseCircular)(tree);
62
+ expect(actual.length).toBe(0);
63
+ });
64
+ });
65
+ describe('When tree has just a root with no dependencies', () => {
66
+ const tree = { a: [] };
67
+ it('Should return empty array', () => {
68
+ const actual = (0, utils_1.parseCircular)(tree);
69
+ expect(actual.length).toBe(0);
70
+ });
71
+ });
72
+ describe('When tree has 2 nodes, no cycle', () => {
73
+ const tree = { a: [dependencyFactory('b')], b: [] };
74
+ it('Should return empty array', () => {
75
+ const actual = (0, utils_1.parseCircular)(tree);
76
+ expect(actual.length).toBe(0);
77
+ });
78
+ });
79
+ describe('When tree has 2 nodes, with cycle', () => {
80
+ const id1 = 'a';
81
+ const id2 = 'b';
82
+ const tree = {
83
+ [id1]: [dependencyFactory(id2)],
84
+ [id2]: [dependencyFactory(id1)],
85
+ };
86
+ let actual;
87
+ beforeAll(() => {
88
+ actual = (0, utils_1.parseCircular)(tree);
89
+ });
90
+ it('Should return non-empty array', () => {
91
+ expect(actual.length).toBeGreaterThan(0);
92
+ });
93
+ it('Should count only one cycle', () => {
94
+ expect(actual.length).toBe(1);
95
+ });
96
+ it('Should include the ids involved in the cycle', () => {
97
+ expect(actual[0]).toMatchObject([id1, id2]);
98
+ });
99
+ });
100
+ describe('When tree has a deep cycle', () => {
101
+ const ids = ['a', 'b', 'c'];
102
+ const tree = {
103
+ [ids[0]]: [dependencyFactory(ids[1])],
104
+ [ids[1]]: [dependencyFactory(ids[2])],
105
+ [ids[2]]: [dependencyFactory(ids[0])],
106
+ };
107
+ let actual;
108
+ beforeAll(() => {
109
+ actual = (0, utils_1.parseCircular)(tree);
110
+ });
111
+ it('Should return non-empty array', () => {
112
+ expect(actual.length).toBeGreaterThan(0);
113
+ });
114
+ it('Should count only one cycle', () => {
115
+ expect(actual.length).toBe(1);
116
+ });
117
+ it('Should include the ids involved in the cycle', () => {
118
+ expect(actual[0]).toMatchObject(ids);
119
+ });
120
+ });
121
+ describe('When tree has 2 cycles with no intersection', () => {
122
+ const tree = {
123
+ left1: [dependencyFactory('left2')],
124
+ left2: [dependencyFactory('left1')],
125
+ right1: [dependencyFactory('right2')],
126
+ right2: [dependencyFactory('right1')],
127
+ };
128
+ let actual;
129
+ beforeAll(() => {
130
+ actual = (0, utils_1.parseCircular)(tree);
131
+ });
132
+ it('Should return non-empty array', () => {
133
+ expect(actual.length).toBeGreaterThan(0);
134
+ });
135
+ it('Should count two cycles', () => {
136
+ expect(actual.length).toBe(2);
137
+ });
138
+ it('Should include the ids involved in the cycle', () => {
139
+ expect(actual[0]).toMatchObject(['left1', 'left2']);
140
+ expect(actual[1]).toMatchObject(['right1', 'right2']);
141
+ });
142
+ });
143
+ describe('When tree has 2 cycles from common node', () => {
144
+ const tree = {
145
+ start: [dependencyFactory('left'), dependencyFactory('right')],
146
+ left: [dependencyFactory('start')],
147
+ right: [dependencyFactory('start')],
148
+ };
149
+ let actual;
150
+ beforeAll(() => {
151
+ actual = (0, utils_1.parseCircular)(tree);
152
+ });
153
+ it('Should return non-empty array', () => {
154
+ expect(actual.length).toBeGreaterThan(0);
155
+ });
156
+ it('Should count two cycles', () => {
157
+ expect(actual.length).toBe(2);
158
+ });
159
+ it('Should include the ids involved in the cycle', () => {
160
+ expect(actual[0]).toMatchObject(['start', 'left']);
161
+ expect(actual[1]).toMatchObject(['start', 'right']);
162
+ });
163
+ });
164
+ describe('When tree has 2 cycles with multi-node intersection', () => {
165
+ const tree = {
166
+ start: [dependencyFactory('mid')],
167
+ mid: [dependencyFactory('left'), dependencyFactory('right')],
168
+ left: [dependencyFactory('start')],
169
+ right: [dependencyFactory('start')],
170
+ };
171
+ let actual;
172
+ beforeAll(() => {
173
+ actual = (0, utils_1.parseCircular)(tree);
174
+ });
175
+ it('Should return non-empty array', () => {
176
+ expect(actual.length).toBeGreaterThan(0);
177
+ });
178
+ it('Should count two cycles', () => {
179
+ expect(actual.length).toBe(2);
180
+ });
181
+ it('Should include the ids involved in the cycle', () => {
182
+ expect(actual[0]).toMatchObject(['start', 'mid', 'left']);
183
+ expect(actual[1]).toMatchObject(['start', 'mid', 'right']);
184
+ });
185
+ });
186
+ });
27
187
  });
28
188
  //# sourceMappingURL=utils.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../src/utils.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+BAAqC;AACrC,mCAAyC;AAEzC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,EAAE,CAAC,0BAA0B,EAAE,GAAS,EAAE;QACxC,MAAM,GAAG,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,IAAA,sBAAc,EAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,MAAM,IAAA,sBAAc,EAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACxD,0BAA0B;QAC1B,MAAM,GAAG,GAAG,MAAM,IAAA,sBAAc,EAAC,SAAS,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,MAAM,IAAA,sBAAc,EAAC,IAAA,cAAO,EAAC,GAAI,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,MAAM,IAAA,sBAAc,EAAC,SAAS,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;QACrE,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YACrD,IAAA,WAAI,EAAC,SAAS,EAAE,aAAa,CAAC;YAC9B,IAAA,WAAI,EAAC,SAAS,EAAE,UAAU,CAAC;YAC3B,IAAA,WAAI,EAAC,SAAS,EAAE,sDAAsD,CAAC;YACvE,IAAA,WAAI,EACF,SAAS,EACT,kEAAkE,CACnE;YACD,IAAI;SACL,CAAC,CAAC;IACL,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../src/utils.spec.ts"],"names":[],"mappings":"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"}
@@ -3,24 +3,184 @@
3
3
  * @since 2019-07-17 18:45:47
4
4
  */
5
5
  import { __awaiter } from "tslib";
6
+ import fs from 'fs-extra';
6
7
  import { dirname, join } from 'path';
7
- import { simpleResolver } from './utils';
8
+ import { parseCircular, simpleResolver } from './utils';
9
+ import { DependencyKind } from './consts';
8
10
  describe('util', () => {
9
11
  it('should resolve correctly', () => __awaiter(void 0, void 0, void 0, function* () {
10
12
  const ext = ['', '.js', '.jsx', '.ts', '.tsx', '.json'];
11
13
  const local = yield simpleResolver(__dirname, './bin/dpdm', ext);
12
14
  const index = yield simpleResolver(__dirname, '.', ext);
13
- // dependents on yarn.lock
14
- const pkg = yield simpleResolver(__dirname, 'string_decoder', ext);
15
- const deepPkg = yield simpleResolver(dirname(pkg), 'safe-buffer', ext);
15
+ yield fs.outputJSON('node_modules/dpdm-ut-parent/package.json', {
16
+ name: 'dpdm-ut-parent',
17
+ version: '1.0.0',
18
+ main: 'index.js',
19
+ dependencies: {
20
+ 'dpdm-ut-deep': '^1.0.0',
21
+ },
22
+ });
23
+ yield fs.outputFile('node_modules/dpdm-ut-parent/index.js', '');
24
+ yield fs.outputJSON('node_modules/dpdm-ut-parent/node_modules/dpdm-ut-deep/package.json', {
25
+ name: 'dpdm-ut-deep',
26
+ version: '1.0.0',
27
+ main: 'index.js',
28
+ });
29
+ yield fs.outputFile('node_modules/dpdm-ut-parent/node_modules/dpdm-ut-deep/index.js', '');
30
+ yield fs.outputJSON('node_modules/dpdm-ut-deep/package.json', {
31
+ name: 'dpdm-ut-deep',
32
+ version: '2.0.0',
33
+ main: 'index.js',
34
+ });
35
+ yield fs.outputFile('node_modules/dpdm-ut-deep/index.js', '');
36
+ const pkg = yield simpleResolver(__dirname, 'dpdm-ut-parent', ext);
37
+ const deepPkg = yield simpleResolver(dirname(pkg), 'dpdm-ut-deep', ext);
16
38
  const notFound = yield simpleResolver(__dirname, './utils.tsx', ext);
17
39
  expect([local, index, pkg, deepPkg, notFound]).toEqual([
18
40
  join(__dirname, 'bin/dpdm.ts'),
19
41
  join(__dirname, 'index.ts'),
20
- join(__dirname, '../node_modules/string_decoder/lib/string_decoder.js'),
21
- join(__dirname, '../node_modules/string_decoder/node_modules/safe-buffer/index.js'),
42
+ join(__dirname, '../node_modules/dpdm-ut-parent/index.js'),
43
+ join(__dirname, '../node_modules/dpdm-ut-parent/node_modules/dpdm-ut-deep/index.js'),
22
44
  null,
23
45
  ]);
24
46
  }));
47
+ describe('When parsing circular', () => {
48
+ function dependencyFactory(id) {
49
+ return {
50
+ issuer: '',
51
+ request: '',
52
+ kind: DependencyKind.StaticImport,
53
+ id,
54
+ };
55
+ }
56
+ describe('When tree is empty', () => {
57
+ const tree = {};
58
+ it('Should return empty array', () => {
59
+ const actual = parseCircular(tree);
60
+ expect(actual.length).toBe(0);
61
+ });
62
+ });
63
+ describe('When tree has just a root with no dependencies', () => {
64
+ const tree = { a: [] };
65
+ it('Should return empty array', () => {
66
+ const actual = parseCircular(tree);
67
+ expect(actual.length).toBe(0);
68
+ });
69
+ });
70
+ describe('When tree has 2 nodes, no cycle', () => {
71
+ const tree = { a: [dependencyFactory('b')], b: [] };
72
+ it('Should return empty array', () => {
73
+ const actual = parseCircular(tree);
74
+ expect(actual.length).toBe(0);
75
+ });
76
+ });
77
+ describe('When tree has 2 nodes, with cycle', () => {
78
+ const id1 = 'a';
79
+ const id2 = 'b';
80
+ const tree = {
81
+ [id1]: [dependencyFactory(id2)],
82
+ [id2]: [dependencyFactory(id1)],
83
+ };
84
+ let actual;
85
+ beforeAll(() => {
86
+ actual = parseCircular(tree);
87
+ });
88
+ it('Should return non-empty array', () => {
89
+ expect(actual.length).toBeGreaterThan(0);
90
+ });
91
+ it('Should count only one cycle', () => {
92
+ expect(actual.length).toBe(1);
93
+ });
94
+ it('Should include the ids involved in the cycle', () => {
95
+ expect(actual[0]).toMatchObject([id1, id2]);
96
+ });
97
+ });
98
+ describe('When tree has a deep cycle', () => {
99
+ const ids = ['a', 'b', 'c'];
100
+ const tree = {
101
+ [ids[0]]: [dependencyFactory(ids[1])],
102
+ [ids[1]]: [dependencyFactory(ids[2])],
103
+ [ids[2]]: [dependencyFactory(ids[0])],
104
+ };
105
+ let actual;
106
+ beforeAll(() => {
107
+ actual = parseCircular(tree);
108
+ });
109
+ it('Should return non-empty array', () => {
110
+ expect(actual.length).toBeGreaterThan(0);
111
+ });
112
+ it('Should count only one cycle', () => {
113
+ expect(actual.length).toBe(1);
114
+ });
115
+ it('Should include the ids involved in the cycle', () => {
116
+ expect(actual[0]).toMatchObject(ids);
117
+ });
118
+ });
119
+ describe('When tree has 2 cycles with no intersection', () => {
120
+ const tree = {
121
+ left1: [dependencyFactory('left2')],
122
+ left2: [dependencyFactory('left1')],
123
+ right1: [dependencyFactory('right2')],
124
+ right2: [dependencyFactory('right1')],
125
+ };
126
+ let actual;
127
+ beforeAll(() => {
128
+ actual = parseCircular(tree);
129
+ });
130
+ it('Should return non-empty array', () => {
131
+ expect(actual.length).toBeGreaterThan(0);
132
+ });
133
+ it('Should count two cycles', () => {
134
+ expect(actual.length).toBe(2);
135
+ });
136
+ it('Should include the ids involved in the cycle', () => {
137
+ expect(actual[0]).toMatchObject(['left1', 'left2']);
138
+ expect(actual[1]).toMatchObject(['right1', 'right2']);
139
+ });
140
+ });
141
+ describe('When tree has 2 cycles from common node', () => {
142
+ const tree = {
143
+ start: [dependencyFactory('left'), dependencyFactory('right')],
144
+ left: [dependencyFactory('start')],
145
+ right: [dependencyFactory('start')],
146
+ };
147
+ let actual;
148
+ beforeAll(() => {
149
+ actual = parseCircular(tree);
150
+ });
151
+ it('Should return non-empty array', () => {
152
+ expect(actual.length).toBeGreaterThan(0);
153
+ });
154
+ it('Should count two cycles', () => {
155
+ expect(actual.length).toBe(2);
156
+ });
157
+ it('Should include the ids involved in the cycle', () => {
158
+ expect(actual[0]).toMatchObject(['start', 'left']);
159
+ expect(actual[1]).toMatchObject(['start', 'right']);
160
+ });
161
+ });
162
+ describe('When tree has 2 cycles with multi-node intersection', () => {
163
+ const tree = {
164
+ start: [dependencyFactory('mid')],
165
+ mid: [dependencyFactory('left'), dependencyFactory('right')],
166
+ left: [dependencyFactory('start')],
167
+ right: [dependencyFactory('start')],
168
+ };
169
+ let actual;
170
+ beforeAll(() => {
171
+ actual = parseCircular(tree);
172
+ });
173
+ it('Should return non-empty array', () => {
174
+ expect(actual.length).toBeGreaterThan(0);
175
+ });
176
+ it('Should count two cycles', () => {
177
+ expect(actual.length).toBe(2);
178
+ });
179
+ it('Should include the ids involved in the cycle', () => {
180
+ expect(actual[0]).toMatchObject(['start', 'mid', 'left']);
181
+ expect(actual[1]).toMatchObject(['start', 'mid', 'right']);
182
+ });
183
+ });
184
+ });
25
185
  });
26
186
  //# sourceMappingURL=utils.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../src/utils.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,EAAE,CAAC,0BAA0B,EAAE,GAAS,EAAE;QACxC,MAAM,GAAG,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACxD,0BAA0B;QAC1B,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,GAAI,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;QACrE,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YACrD,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;YAC9B,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;YAC3B,IAAI,CAAC,SAAS,EAAE,sDAAsD,CAAC;YACvE,IAAI,CACF,SAAS,EACT,kEAAkE,CACnE;YACD,IAAI;SACL,CAAC,CAAC;IACL,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../src/utils.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,EAAE,CAAC,0BAA0B,EAAE,GAAS,EAAE;QACxC,MAAM,GAAG,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAExD,MAAM,EAAE,CAAC,UAAU,CAAC,0CAA0C,EAAE;YAC9D,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE;gBACZ,cAAc,EAAE,QAAQ;aACzB;SACF,CAAC,CAAC;QACH,MAAM,EAAE,CAAC,UAAU,CAAC,sCAAsC,EAAE,EAAE,CAAC,CAAC;QAEhE,MAAM,EAAE,CAAC,UAAU,CACjB,oEAAoE,EACpE;YACE,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,UAAU;SACjB,CACF,CAAC;QACF,MAAM,EAAE,CAAC,UAAU,CACjB,gEAAgE,EAChE,EAAE,CACH,CAAC;QAEF,MAAM,EAAE,CAAC,UAAU,CAAC,wCAAwC,EAAE;YAC5D,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;QACH,MAAM,EAAE,CAAC,UAAU,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;QAE9D,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,GAAI,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;QACrE,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YACrD,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;YAC9B,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;YAC3B,IAAI,CAAC,SAAS,EAAE,yCAAyC,CAAC;YAC1D,IAAI,CACF,SAAS,EACT,mEAAmE,CACpE;YACD,IAAI;SACL,CAAC,CAAC;IACL,CAAC,CAAA,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,SAAS,iBAAiB,CAAC,EAAU;YACnC,OAAO;gBACL,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,EAAE;gBACX,IAAI,EAAE,cAAc,CAAC,YAAY;gBACjC,EAAE;aACH,CAAC;QACJ,CAAC;QAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAClC,MAAM,IAAI,GAAG,EAAE,CAAC;YAChB,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;gBACnC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;gBACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;YAC9D,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;YACvB,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;gBACnC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;gBACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;YAC/C,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;YACpD,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;gBACnC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;gBACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;YACjD,MAAM,GAAG,GAAG,GAAG,CAAC;YAChB,MAAM,GAAG,GAAG,GAAG,CAAC;YAChB,MAAM,IAAI,GAAG;gBACX,CAAC,GAAG,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBAC/B,CAAC,GAAG,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;aAChC,CAAC;YAEF,IAAI,MAAuB,CAAC;YAC5B,SAAS,CAAC,GAAG,EAAE;gBACb,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;gBACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;gBACtD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;YAC1C,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAG;gBACX,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC,CAAC;YAEF,IAAI,MAAuB,CAAC;YAC5B,SAAS,CAAC,GAAG,EAAE;gBACb,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;gBACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;gBACtD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;YAC3D,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBACnC,KAAK,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBACnC,MAAM,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBACrC,MAAM,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;aACtC,CAAC;YAEF,IAAI,MAAuB,CAAC;YAC5B,SAAS,CAAC,GAAG,EAAE;gBACb,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;gBACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;gBACtD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBACpD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACvD,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAC9D,IAAI,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAClC,KAAK,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;aACpC,CAAC;YAEF,IAAI,MAAuB,CAAC;YAC5B,SAAS,CAAC,GAAG,EAAE;gBACb,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;gBACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;gBACtD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;gBACnD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,qDAAqD,EAAE,GAAG,EAAE;YACnE,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACjC,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAC5D,IAAI,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAClC,KAAK,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;aACpC,CAAC;YAEF,IAAI,MAAuB,CAAC;YAC5B,SAAS,CAAC,GAAG,EAAE;gBACb,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;gBACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;gBACtD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dpdm",
3
- "version": "3.13.1",
3
+ "version": "3.15.1",
4
4
  "description": "Analyze circular dependencies in your JavaScript/TypeScript projects.",
5
5
  "keywords": [
6
6
  "circular",
@@ -51,25 +51,29 @@
51
51
  },
52
52
  "license": "MIT",
53
53
  "devDependencies": {
54
- "@types/fs-extra": "^11.0.1",
55
- "@types/yargs": "^17.0.23",
56
- "@types/jest": "^29.5.0",
57
- "husky": "^8.0.3",
58
- "jest": "^29.5.0",
54
+ "@types/fs-extra": "^11.0.4",
55
+ "@types/jest": "^29.5.13",
56
+ "@types/yargs": "^17.0.33",
57
+ "husky": "^9.1.6",
58
+ "jest": "^29.7.0",
59
+ "lint-staged": "^15.2.10",
59
60
  "npm-run-all": "^4.1.5",
60
- "prettier": "^2.8.6",
61
- "pretty-quick": "^3.1.3",
62
- "ts-jest": "^29.0.5",
63
- "ts-node": "^10.9.1"
61
+ "prettier": "^3.3.3",
62
+ "pretty-quick": "^4.0.0",
63
+ "ts-jest": "^29.2.5",
64
+ "ts-node": "^10.9.2"
64
65
  },
65
66
  "dependencies": {
66
67
  "chalk": "^4.1.2",
67
- "fs-extra": "^11.1.1",
68
- "glob": "^9.3.1",
68
+ "fs-extra": "^11.2.0",
69
+ "glob": "^10.3.10",
69
70
  "ora": "^5.4.1",
70
- "tslib": "^2.5.0",
71
- "typescript": "^5.0.2",
72
- "yargs": "^17.7.1"
71
+ "tslib": "^2.7.0",
72
+ "typescript": "^5.6.3",
73
+ "yargs": "^17.7.2"
74
+ },
75
+ "lint-staged": {
76
+ "**/*": "prettier --write --ignore-unknown"
73
77
  },
74
78
  "prettier": {
75
79
  "printWidth": 80,
@@ -83,5 +87,6 @@
83
87
  "jsxBracketSameLine": false,
84
88
  "arrowParens": "always",
85
89
  "endOfLine": "lf"
86
- }
90
+ },
91
+ "packageManager": "yarn@1.22.21+sha1.1959a18351b811cdeedbd484a8f86c3cc3bbaf72"
87
92
  }
package/src/bin/dpdm.ts CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  import chalk from 'chalk';
8
8
  import fs from 'fs-extra';
9
- import G from 'glob';
9
+ import * as G from 'glob';
10
10
  import ora from 'ora';
11
11
  import path from 'path';
12
12
  import yargs from 'yargs';
@@ -14,6 +14,7 @@ import { parseDependencyTree } from '../parser';
14
14
  import { ParseOptions } from '../types';
15
15
  import {
16
16
  defaultOptions,
17
+ isEmpty,
17
18
  parseCircular,
18
19
  parseWarnings,
19
20
  prettyCircular,
@@ -177,6 +178,9 @@ async function main() {
177
178
 
178
179
  parseDependencyTree(files, options)
179
180
  .then(async (tree) => {
181
+ if (isEmpty(tree)) {
182
+ throw new Error(`No entry files were matched.`);
183
+ }
180
184
  o.succeed(`[${ended}/${total}] Analyze done!`);
181
185
  const entriesDeep = await Promise.all(files.map((g) => G.glob(g)));
182
186
  const entries = await Promise.all(
@@ -207,7 +211,11 @@ async function main() {
207
211
  console.log('');
208
212
  }
209
213
  if (argv.circular) {
210
- console.log(chalk.bold.red('• Circular Dependencies'));
214
+ console.log(
215
+ chalk.bold[circulars.length === 0 ? 'green' : 'red'](
216
+ '• Circular Dependencies',
217
+ ),
218
+ );
211
219
  if (circulars.length === 0) {
212
220
  console.log(
213
221
  chalk.bold.green(
package/src/parser.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import fs from 'fs-extra';
7
- import G from 'glob';
7
+ import * as G from 'glob';
8
8
  import path from 'path';
9
9
  import ts from 'typescript';
10
10
  import { DependencyKind } from './consts';