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/README.md +9 -4
- package/lib/bin/dpdm.js +7 -4
- package/lib/bin/dpdm.js.map +1 -1
- package/lib/bin/dpdm.mjs +6 -3
- package/lib/bin/dpdm.mjs.map +1 -1
- package/lib/consts.d.ts +3 -3
- package/lib/consts.js +1 -1
- package/lib/consts.js.map +1 -1
- package/lib/parser.js +3 -4
- package/lib/parser.js.map +1 -1
- package/lib/parser.mjs +1 -1
- package/lib/parser.mjs.map +1 -1
- package/lib/utils.d.ts +1 -0
- package/lib/utils.js +22 -10
- package/lib/utils.js.map +1 -1
- package/lib/utils.mjs +11 -0
- package/lib/utils.mjs.map +1 -1
- package/lib/utils.spec.js +165 -5
- package/lib/utils.spec.js.map +1 -1
- package/lib/utils.spec.mjs +166 -6
- package/lib/utils.spec.mjs.map +1 -1
- package/package.json +21 -16
- package/src/bin/dpdm.ts +10 -2
- package/src/parser.ts +1 -1
- package/src/utils.spec.ts +206 -6
- package/src/utils.ts +13 -1
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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/
|
|
23
|
-
(0, path_1.join)(__dirname, '../node_modules/
|
|
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
|
package/lib/utils.spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../src/utils.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+BAAqC;AACrC,
|
|
1
|
+
{"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../src/utils.spec.ts"],"names":[],"mappings":"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"}
|
package/lib/utils.spec.mjs
CHANGED
|
@@ -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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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/
|
|
21
|
-
join(__dirname, '../node_modules/
|
|
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
|
package/lib/utils.spec.mjs.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../src/utils.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dpdm",
|
|
3
|
-
"version": "3.
|
|
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.
|
|
55
|
-
"@types/
|
|
56
|
-
"@types/
|
|
57
|
-
"husky": "^
|
|
58
|
-
"jest": "^29.
|
|
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": "^
|
|
61
|
-
"pretty-quick": "^
|
|
62
|
-
"ts-jest": "^29.
|
|
63
|
-
"ts-node": "^10.9.
|
|
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.
|
|
68
|
-
"glob": "^
|
|
68
|
+
"fs-extra": "^11.2.0",
|
|
69
|
+
"glob": "^10.3.10",
|
|
69
70
|
"ora": "^5.4.1",
|
|
70
|
-
"tslib": "^2.
|
|
71
|
-
"typescript": "^5.
|
|
72
|
-
"yargs": "^17.7.
|
|
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(
|
|
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(
|