@ms-cloudpack/package-utilities 1.2.0 → 1.2.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/CHANGELOG.json +37 -1
- package/CHANGELOG.md +11 -2
- package/lib/addExportsMapEntry.d.ts +37 -7
- package/lib/addExportsMapEntry.js +35 -50
- package/lib/addExportsMapEntry.js.map +1 -1
- package/lib/addExportsMapEntry.test.js +107 -20
- package/lib/addExportsMapEntry.test.js.map +1 -1
- package/lib/createExportsMap.js +29 -47
- package/lib/createExportsMap.js.map +1 -1
- package/lib/createExportsMap.test.js +158 -46
- package/lib/createExportsMap.test.js.map +1 -1
- package/lib/createImportMap.test.js +27 -25
- package/lib/createImportMap.test.js.map +1 -1
- package/lib/findFileInPackage.d.ts +20 -0
- package/lib/findFileInPackage.js +71 -0
- package/lib/findFileInPackage.js.map +1 -0
- package/lib/{resolveImportFromPackage.test.d.ts → findFileInPackage.test.d.ts} +0 -0
- package/lib/findFileInPackage.test.js +95 -0
- package/lib/findFileInPackage.test.js.map +1 -0
- package/lib/index.d.ts +1 -2
- package/lib/index.js +0 -1
- package/lib/index.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/package.json +3 -3
- package/lib/resolveImportFromPackage.test.js +0 -163
- package/lib/resolveImportFromPackage.test.js.map +0 -1
- package/lib/resolveImportFromPackagePath.d.ts +0 -27
- package/lib/resolveImportFromPackagePath.js +0 -126
- package/lib/resolveImportFromPackagePath.js.map +0 -1
|
@@ -1,116 +1,196 @@
|
|
|
1
1
|
import { describe, it, expect } from '@jest/globals';
|
|
2
2
|
import { createExportsMap } from './createExportsMap.js';
|
|
3
|
-
import { testScenariosPath } from './testPaths.js';
|
|
4
|
-
import path from 'path';
|
|
5
|
-
import { PackageDefinitions } from './PackageDefinitions.js';
|
|
6
3
|
import { createTestFileStructure } from '@ms-cloudpack/test-utilities';
|
|
7
|
-
const testGenerateExportsPath = path.join(testScenariosPath, 'test-generate-exports');
|
|
8
4
|
describe('createExportsMap', () => {
|
|
9
5
|
it('can return a blank import map for something with nothing to export', async () => {
|
|
10
|
-
|
|
6
|
+
const packagePath = await createTestFileStructure({
|
|
7
|
+
'package.json': {},
|
|
8
|
+
});
|
|
9
|
+
expect(await createExportsMap(packagePath)).toEqual({});
|
|
11
10
|
});
|
|
12
11
|
it('can generate an exports map for a package with an implicit index.js file', async () => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
const packagePath = await createTestFileStructure({
|
|
13
|
+
'package.json': {},
|
|
14
|
+
'index.js': '',
|
|
15
|
+
});
|
|
16
|
+
expect(await createExportsMap(packagePath)).toEqual({
|
|
17
|
+
'.': {
|
|
18
|
+
default: './index.js',
|
|
19
|
+
},
|
|
20
|
+
});
|
|
20
21
|
});
|
|
21
22
|
it('can generate an exports map for a package with a main export as esm', async () => {
|
|
22
|
-
|
|
23
|
+
const packagePath = await createTestFileStructure({
|
|
24
|
+
'package.json': {
|
|
25
|
+
type: 'module',
|
|
26
|
+
},
|
|
27
|
+
'index.js': '',
|
|
28
|
+
});
|
|
29
|
+
const exportsMap = await createExportsMap(packagePath);
|
|
30
|
+
expect(exportsMap).toEqual({
|
|
31
|
+
'.': {
|
|
32
|
+
import: './index.js',
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
it('can generate an exports map for a package with a main export as cjs and types', async () => {
|
|
37
|
+
const packagePath = await createTestFileStructure({
|
|
38
|
+
'package.json': { main: 'main', types: 'main.d.ts' },
|
|
39
|
+
'main.js': '',
|
|
40
|
+
'main.d.ts': '',
|
|
41
|
+
});
|
|
42
|
+
expect(await createExportsMap(packagePath)).toMatchInlineSnapshot(`
|
|
23
43
|
{
|
|
24
44
|
".": {
|
|
25
45
|
"default": "./main.js",
|
|
46
|
+
"types": "./main.d.ts",
|
|
26
47
|
},
|
|
27
48
|
}
|
|
28
49
|
`);
|
|
29
50
|
});
|
|
30
|
-
it('can generate an exports map for a package with a
|
|
31
|
-
|
|
51
|
+
it('can generate an exports map for a package with a module export', async () => {
|
|
52
|
+
const packagePath = await createTestFileStructure({
|
|
53
|
+
'package.json': { module: 'module', types: 'module.d.ts' },
|
|
54
|
+
'module.js': '',
|
|
55
|
+
'module.d.ts': '',
|
|
56
|
+
});
|
|
57
|
+
expect(await createExportsMap(packagePath)).toMatchInlineSnapshot(`
|
|
32
58
|
{
|
|
33
59
|
".": {
|
|
34
|
-
"
|
|
60
|
+
"import": "./module.js",
|
|
61
|
+
"types": "./module.d.ts",
|
|
35
62
|
},
|
|
36
63
|
}
|
|
37
64
|
`);
|
|
38
65
|
});
|
|
39
|
-
it('can generate an exports map for a package with a main
|
|
40
|
-
|
|
66
|
+
it('can generate an exports map for a package with a main, module, and browser entry', async () => {
|
|
67
|
+
const packagePath = await createTestFileStructure({
|
|
68
|
+
'package.json': {
|
|
69
|
+
name: 'browser-export',
|
|
70
|
+
main: 'main.js',
|
|
71
|
+
module: 'module.js',
|
|
72
|
+
browser: 'browser.js',
|
|
73
|
+
},
|
|
74
|
+
'main.js': '',
|
|
75
|
+
'module.js': '',
|
|
76
|
+
'browser.js': '',
|
|
77
|
+
});
|
|
78
|
+
expect(await createExportsMap(packagePath)).toMatchInlineSnapshot(`
|
|
41
79
|
{
|
|
42
80
|
".": {
|
|
81
|
+
"browser": "./browser.js",
|
|
43
82
|
"default": "./main.js",
|
|
44
|
-
"
|
|
83
|
+
"import": "./module.js",
|
|
45
84
|
},
|
|
46
85
|
}
|
|
47
86
|
`);
|
|
48
87
|
});
|
|
49
|
-
it('can
|
|
50
|
-
|
|
88
|
+
it('can expand browser mappings into additional entries', async () => {
|
|
89
|
+
const packagePath = await createTestFileStructure({
|
|
90
|
+
'package.json': {
|
|
91
|
+
name: 'browser-export',
|
|
92
|
+
main: 'main',
|
|
93
|
+
browser: {
|
|
94
|
+
main: 'browser.js',
|
|
95
|
+
foo: 'foo-browser.js',
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
'main.js': '',
|
|
99
|
+
'foo.js': '',
|
|
100
|
+
'foo-browser.js': '',
|
|
101
|
+
'browser.js': '',
|
|
102
|
+
});
|
|
103
|
+
expect(await createExportsMap(packagePath)).toMatchInlineSnapshot(`
|
|
51
104
|
{
|
|
52
105
|
".": {
|
|
53
|
-
"
|
|
106
|
+
"browser": "./browser.js",
|
|
107
|
+
"default": "./main.js",
|
|
108
|
+
},
|
|
109
|
+
"./foo": {
|
|
110
|
+
"browser": "./foo-browser.js",
|
|
54
111
|
},
|
|
55
112
|
}
|
|
56
113
|
`);
|
|
57
114
|
});
|
|
58
|
-
it('can generate an exports map for a package with a
|
|
59
|
-
const
|
|
115
|
+
it('can generate an exports map for a package with a type/source exports', async () => {
|
|
116
|
+
const packagePath = await createTestFileStructure({
|
|
60
117
|
'package.json': {
|
|
61
118
|
name: 'browser-export',
|
|
62
|
-
|
|
63
|
-
module: '
|
|
64
|
-
browser: 'browser.js',
|
|
119
|
+
typings: './lib/index.d.ts',
|
|
120
|
+
module: './lib/index.js',
|
|
65
121
|
},
|
|
66
|
-
'
|
|
67
|
-
'
|
|
68
|
-
'
|
|
122
|
+
'lib/index.js': '',
|
|
123
|
+
'lib/index.d.ts': '',
|
|
124
|
+
'src/index.tsx': '',
|
|
69
125
|
});
|
|
70
|
-
expect(await createExportsMap(
|
|
126
|
+
expect(await createExportsMap(packagePath)).toMatchInlineSnapshot(`
|
|
71
127
|
{
|
|
72
128
|
".": {
|
|
73
|
-
"
|
|
129
|
+
"import": "./lib/index.js",
|
|
130
|
+
"source": "./src/index.tsx",
|
|
131
|
+
"types": "./lib/index.d.ts",
|
|
74
132
|
},
|
|
75
133
|
}
|
|
76
134
|
`);
|
|
77
135
|
});
|
|
78
|
-
it('can generate an exports map for
|
|
79
|
-
|
|
136
|
+
it('can generate an exports map for an internal unbuilt package', async () => {
|
|
137
|
+
const packagePath = await createTestFileStructure({
|
|
138
|
+
'package.json': {
|
|
139
|
+
name: 'browser-export',
|
|
140
|
+
typings: './lib/index.d.ts',
|
|
141
|
+
module: './lib/index.js',
|
|
142
|
+
},
|
|
143
|
+
'src/index.tsx': '',
|
|
144
|
+
});
|
|
145
|
+
expect(await createExportsMap(packagePath)).toMatchInlineSnapshot(`
|
|
80
146
|
{
|
|
81
147
|
".": {
|
|
82
|
-
"
|
|
148
|
+
"import": "./lib/index.js",
|
|
83
149
|
"source": "./src/index.tsx",
|
|
84
150
|
"types": "./lib/index.d.ts",
|
|
85
151
|
},
|
|
86
152
|
}
|
|
87
153
|
`);
|
|
88
154
|
});
|
|
89
|
-
it('can generate an exports map
|
|
90
|
-
|
|
155
|
+
it('can generate an exports map and ignore a browser entry does not exist', async () => {
|
|
156
|
+
const testPath = await createTestFileStructure({
|
|
157
|
+
'package.json': {
|
|
158
|
+
main: 'main.js',
|
|
159
|
+
module: 'module.js',
|
|
160
|
+
browser: 'browser.js',
|
|
161
|
+
},
|
|
162
|
+
'main.js': '',
|
|
163
|
+
'module.js': '',
|
|
164
|
+
});
|
|
165
|
+
expect(await createExportsMap(testPath)).toMatchInlineSnapshot(`
|
|
91
166
|
{
|
|
92
167
|
".": {
|
|
93
|
-
"default": "./
|
|
94
|
-
"
|
|
95
|
-
"types": "./lib/index.d.ts",
|
|
168
|
+
"default": "./main.js",
|
|
169
|
+
"import": "./module.js",
|
|
96
170
|
},
|
|
97
171
|
}
|
|
98
172
|
`);
|
|
99
173
|
});
|
|
100
174
|
it('can generate an exports map for an external package with implicit type exports', async () => {
|
|
101
|
-
|
|
102
|
-
.
|
|
175
|
+
const packagePath = await createTestFileStructure({
|
|
176
|
+
'package.json': {
|
|
177
|
+
main: 'lib/main.js',
|
|
178
|
+
typings: 'typings/main.d.ts',
|
|
179
|
+
},
|
|
180
|
+
'lib/main.js': '',
|
|
181
|
+
'typings/main.d.ts': '',
|
|
182
|
+
});
|
|
183
|
+
expect(await createExportsMap(packagePath)).toMatchInlineSnapshot(`
|
|
103
184
|
{
|
|
104
185
|
".": {
|
|
105
186
|
"default": "./lib/main.js",
|
|
106
|
-
"types": "./
|
|
187
|
+
"types": "./typings/main.d.ts",
|
|
107
188
|
},
|
|
108
189
|
}
|
|
109
190
|
`);
|
|
110
191
|
});
|
|
111
192
|
it(`can find exports from browser-only packages like uuid@3.4.0`, async () => {
|
|
112
|
-
const
|
|
113
|
-
const testPath = await createTestFileStructure({
|
|
193
|
+
const packagePath = await createTestFileStructure({
|
|
114
194
|
'package.json': {
|
|
115
195
|
name: 'uuid',
|
|
116
196
|
browser: {
|
|
@@ -122,8 +202,11 @@ describe('createExportsMap', () => {
|
|
|
122
202
|
'lib/rng.js': '',
|
|
123
203
|
'lib/sha1.js': '',
|
|
124
204
|
'lib/md5.js': '',
|
|
205
|
+
'lib/rng-browser.js': '',
|
|
206
|
+
'lib/sha1-browser.js': '',
|
|
207
|
+
'lib/md5-browser.js': '',
|
|
125
208
|
});
|
|
126
|
-
const exportsMap = (await createExportsMap(
|
|
209
|
+
const exportsMap = (await createExportsMap(packagePath));
|
|
127
210
|
expect(typeof exportsMap).toEqual('object');
|
|
128
211
|
expect(exportsMap?.['.']).toBeUndefined();
|
|
129
212
|
expect(exportsMap).toMatchInlineSnapshot(`
|
|
@@ -141,5 +224,34 @@ describe('createExportsMap', () => {
|
|
|
141
224
|
`);
|
|
142
225
|
expect(Object.keys(exportsMap).length).toBeGreaterThan(0);
|
|
143
226
|
});
|
|
227
|
+
it(`can build an exports map for styled components`, async () => {
|
|
228
|
+
const packagePath = await createTestFileStructure({
|
|
229
|
+
'package.json': {
|
|
230
|
+
name: 'styled-components',
|
|
231
|
+
main: 'dist/sc.cjs.js',
|
|
232
|
+
module: 'dist/sc.esm.js',
|
|
233
|
+
browser: {
|
|
234
|
+
'./dist/sc.esm.js': './dist/sc.browser.esm.js',
|
|
235
|
+
'./dist/sc.cjs.js': './dist/sc.browser.cjs.js',
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
'dist/sc.cjs.js': '',
|
|
239
|
+
'dist/sc.esm.js': '',
|
|
240
|
+
'dist/sc.browser.cjs.js': '',
|
|
241
|
+
'dist/sc.browser.esm.js': '',
|
|
242
|
+
});
|
|
243
|
+
expect(await createExportsMap(packagePath)).toMatchInlineSnapshot(`
|
|
244
|
+
{
|
|
245
|
+
".": {
|
|
246
|
+
"browser": "./dist/sc.browser.esm.js",
|
|
247
|
+
"default": "./dist/sc.cjs.js",
|
|
248
|
+
"import": "./dist/sc.esm.js",
|
|
249
|
+
},
|
|
250
|
+
"./dist/sc.cjs": {
|
|
251
|
+
"browser": "./dist/sc.browser.cjs.js",
|
|
252
|
+
},
|
|
253
|
+
}
|
|
254
|
+
`);
|
|
255
|
+
});
|
|
144
256
|
});
|
|
145
257
|
//# sourceMappingURL=createExportsMap.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createExportsMap.test.js","sourceRoot":"","sources":["../src/createExportsMap.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"createExportsMap.test.js","sourceRoot":"","sources":["../src/createExportsMap.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
import { describe, it, expect } from '@jest/globals';
|
|
2
|
+
import { createTestFileStructure } from '@ms-cloudpack/test-utilities';
|
|
2
3
|
import { createImportMap } from './createImportMap.js';
|
|
3
4
|
import { PackageDefinitions } from './PackageDefinitions.js';
|
|
4
5
|
const defaultServer = 'http://localhost:8080';
|
|
5
6
|
describe('createImportMap', () => {
|
|
6
7
|
it('can generate an import map for a package with a main', async () => {
|
|
8
|
+
const testPath = await createTestFileStructure({
|
|
9
|
+
'package.json': {
|
|
10
|
+
name: 'foo',
|
|
11
|
+
version: '1.0.0',
|
|
12
|
+
main: './index.js',
|
|
13
|
+
},
|
|
14
|
+
'index.js': '',
|
|
15
|
+
});
|
|
7
16
|
const resolveMap = {
|
|
8
17
|
foo: {
|
|
9
18
|
name: 'foo',
|
|
10
19
|
version: '1.0.0',
|
|
11
|
-
path:
|
|
20
|
+
path: testPath,
|
|
12
21
|
requiredBy: {},
|
|
13
22
|
},
|
|
14
23
|
};
|
|
15
|
-
|
|
16
|
-
'/foo': {
|
|
17
|
-
name: 'foo',
|
|
18
|
-
version: '1.0.0',
|
|
19
|
-
main: './index.js',
|
|
20
|
-
},
|
|
21
|
-
});
|
|
22
|
-
expect(await createImportMap(resolveMap, defaultServer, { packages })).toMatchInlineSnapshot(`
|
|
24
|
+
expect(await createImportMap(resolveMap, defaultServer)).toMatchInlineSnapshot(`
|
|
23
25
|
{
|
|
24
26
|
"imports": {
|
|
25
27
|
"foo": "http://localhost:8080/foo@1.0.0/bundled/index.js",
|
|
@@ -50,12 +52,12 @@ describe('createImportMap', () => {
|
|
|
50
52
|
},
|
|
51
53
|
});
|
|
52
54
|
expect(await createImportMap(resolveMap, defaultServer, { packages })).toMatchInlineSnapshot(`
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
{
|
|
56
|
+
"imports": {
|
|
57
|
+
"foo": "http://localhost:8080/foo@1.0.0/unbundled/browser-esm.js",
|
|
58
|
+
},
|
|
59
|
+
}
|
|
60
|
+
`);
|
|
59
61
|
});
|
|
60
62
|
it('can return a bundled entry for internal packages with browser-esm', async () => {
|
|
61
63
|
const resolveMap = {
|
|
@@ -88,23 +90,23 @@ describe('createImportMap', () => {
|
|
|
88
90
|
`);
|
|
89
91
|
});
|
|
90
92
|
it('can generate an import map for a package and append a refresh version', async () => {
|
|
93
|
+
const testPath = await createTestFileStructure({
|
|
94
|
+
'package.json': {
|
|
95
|
+
name: 'foo',
|
|
96
|
+
version: '1.0.0',
|
|
97
|
+
main: './index.js',
|
|
98
|
+
},
|
|
99
|
+
'index.js': '',
|
|
100
|
+
});
|
|
91
101
|
const resolveMap = {
|
|
92
102
|
foo: {
|
|
93
103
|
name: 'foo',
|
|
94
104
|
version: '1.0.0',
|
|
95
|
-
path:
|
|
105
|
+
path: testPath,
|
|
96
106
|
requiredBy: {},
|
|
97
107
|
},
|
|
98
108
|
};
|
|
99
|
-
|
|
100
|
-
'/foo': {
|
|
101
|
-
name: 'foo',
|
|
102
|
-
version: '1.0.0',
|
|
103
|
-
main: './index.js',
|
|
104
|
-
},
|
|
105
|
-
});
|
|
106
|
-
const refreshVersion = 3;
|
|
107
|
-
expect(await createImportMap(resolveMap, defaultServer, { packages, refreshVersion })).toMatchInlineSnapshot(`
|
|
109
|
+
expect(await createImportMap(resolveMap, defaultServer, { refreshVersion: 3 })).toMatchInlineSnapshot(`
|
|
108
110
|
{
|
|
109
111
|
"imports": {
|
|
110
112
|
"foo": "http://localhost:8080/foo@1.0.0/v3/bundled/index.js",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createImportMap.test.js","sourceRoot":"","sources":["../src/createImportMap.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAE9C,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,
|
|
1
|
+
{"version":3,"file":"createImportMap.test.js","sourceRoot":"","sources":["../src/createImportMap.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare type FindFileInPackageOptions = {
|
|
2
|
+
packagePath: string;
|
|
3
|
+
filePath: string;
|
|
4
|
+
};
|
|
5
|
+
export declare type FindFileInPackageResult = {
|
|
6
|
+
filePath?: string;
|
|
7
|
+
typesPath?: string;
|
|
8
|
+
sourcePath?: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Given a requested partial filePath, resolves the relative path intermediate path if the file exists, with special
|
|
12
|
+
* consideration for internal packages, which may not have intermediate files but only source files. Paths returned
|
|
13
|
+
* are always relative and start with `./`.
|
|
14
|
+
*
|
|
15
|
+
* This helper is used in deriving if the given package.json entries are actual validate candidates when constructing an
|
|
16
|
+
* exports map from existing metadata. For example, a package.json may list `main` as `lib/index.js`. If this file
|
|
17
|
+
* exists, or in internal packages, if `src/index.tsx` exists, then this is a valid candidate. If the file does not
|
|
18
|
+
* exist, then we should not include it in the exports map.
|
|
19
|
+
*/
|
|
20
|
+
export declare function findFileInPackage(options: FindFileInPackageOptions): Promise<FindFileInPackageResult>;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { intermediateToSourcePath, isFile, sourceToIntermediatePath } from '@ms-cloudpack/path-utilities';
|
|
3
|
+
import { isExternalPackage } from './isExternalPackage.js';
|
|
4
|
+
import { safeRelativePath } from '@ms-cloudpack/path-string-parsing';
|
|
5
|
+
import { getExportsMap } from './getExportsMap.js';
|
|
6
|
+
import { flattenExportsMap } from './flattenExportsMap.js';
|
|
7
|
+
/**
|
|
8
|
+
* Given a requested partial filePath, resolves the relative path intermediate path if the file exists, with special
|
|
9
|
+
* consideration for internal packages, which may not have intermediate files but only source files. Paths returned
|
|
10
|
+
* are always relative and start with `./`.
|
|
11
|
+
*
|
|
12
|
+
* This helper is used in deriving if the given package.json entries are actual validate candidates when constructing an
|
|
13
|
+
* exports map from existing metadata. For example, a package.json may list `main` as `lib/index.js`. If this file
|
|
14
|
+
* exists, or in internal packages, if `src/index.tsx` exists, then this is a valid candidate. If the file does not
|
|
15
|
+
* exist, then we should not include it in the exports map.
|
|
16
|
+
*/
|
|
17
|
+
export async function findFileInPackage(options) {
|
|
18
|
+
const { packagePath } = options;
|
|
19
|
+
let filePath = safeRelativePath(options.filePath);
|
|
20
|
+
let sourcePath;
|
|
21
|
+
let typesPath;
|
|
22
|
+
const isInternal = !isExternalPackage(packagePath);
|
|
23
|
+
const candidates = [
|
|
24
|
+
filePath,
|
|
25
|
+
filePath + '.js',
|
|
26
|
+
safeRelativePath(path.join(filePath, 'index.js')),
|
|
27
|
+
safeRelativePath(path.join(filePath, 'package.json')),
|
|
28
|
+
];
|
|
29
|
+
// Try and find the intermediate file.
|
|
30
|
+
filePath = candidates.find((candidate) => isFile(path.join(packagePath, candidate)));
|
|
31
|
+
// For internal packages, try and find source/typings and convert to intermediate (which may be missing.)
|
|
32
|
+
if (isInternal) {
|
|
33
|
+
sourcePath = [...candidates.map((candidate) => intermediateToSourcePath(candidate, packagePath))].find((candidate) => candidate && isFile(path.join(packagePath, candidate)));
|
|
34
|
+
// If we couldn't find a unique source file, stick with the resolved intermediate file as the only known truth.
|
|
35
|
+
if (filePath && sourcePath === filePath) {
|
|
36
|
+
sourcePath = undefined;
|
|
37
|
+
}
|
|
38
|
+
if (sourcePath) {
|
|
39
|
+
if (!filePath) {
|
|
40
|
+
filePath = sourceToIntermediatePath(sourcePath);
|
|
41
|
+
}
|
|
42
|
+
typesPath = filePath && path.extname(filePath) === '.js' ? filePath.replace(/\.js$/, '.d.ts') : undefined;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const isNestedPackageDefinition = filePath && path.basename(filePath) === 'package.json' && path.basename(options.filePath) !== 'package.json';
|
|
46
|
+
const result = {};
|
|
47
|
+
if (isNestedPackageDefinition) {
|
|
48
|
+
const nestedDefinitionPath = path.dirname(path.join(packagePath, filePath));
|
|
49
|
+
const exportsMap = await getExportsMap(nestedDefinitionPath);
|
|
50
|
+
const entryPath = flattenExportsMap(exportsMap)['.'];
|
|
51
|
+
typesPath = flattenExportsMap(exportsMap, { conditions: ['types'] })['.'];
|
|
52
|
+
return {
|
|
53
|
+
...(await findFileInPackage({
|
|
54
|
+
packagePath,
|
|
55
|
+
filePath: safeRelativePath(path.relative(packagePath, path.join(nestedDefinitionPath, entryPath))),
|
|
56
|
+
})),
|
|
57
|
+
typesPath: safeRelativePath(path.relative(packagePath, path.join(nestedDefinitionPath, typesPath))),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
if (typesPath) {
|
|
61
|
+
result.typesPath = safeRelativePath(typesPath);
|
|
62
|
+
}
|
|
63
|
+
if (filePath) {
|
|
64
|
+
result.filePath = safeRelativePath(filePath);
|
|
65
|
+
}
|
|
66
|
+
if (sourcePath) {
|
|
67
|
+
result.sourcePath = safeRelativePath(sourcePath);
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=findFileInPackage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findFileInPackage.js","sourceRoot":"","sources":["../src/findFileInPackage.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { describe, it, expect } from '@jest/globals';
|
|
2
|
+
import { createTestFileStructure } from '@ms-cloudpack/test-utilities';
|
|
3
|
+
import { findFileInPackage } from './findFileInPackage.js';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
describe('findFileInPackage', () => {
|
|
6
|
+
it('can return undefined for missing files', async () => {
|
|
7
|
+
const packagePath = await createTestFileStructure({});
|
|
8
|
+
expect(await findFileInPackage({ packagePath, filePath: 'foo.js' })).toEqual({});
|
|
9
|
+
});
|
|
10
|
+
it('can find a file in a package', async () => {
|
|
11
|
+
const packagePath = await createTestFileStructure({ 'index.js': '', 'subpath/index.js': '' });
|
|
12
|
+
expect(await findFileInPackage({ packagePath, filePath: 'index.js' })).toEqual({ filePath: './index.js' });
|
|
13
|
+
expect(await findFileInPackage({ packagePath, filePath: 'index' })).toEqual({ filePath: './index.js' });
|
|
14
|
+
expect(await findFileInPackage({ packagePath, filePath: '.' })).toEqual({ filePath: './index.js' });
|
|
15
|
+
expect(await findFileInPackage({ packagePath, filePath: '' })).toEqual({ filePath: './index.js' });
|
|
16
|
+
expect(await findFileInPackage({ packagePath, filePath: 'subpath/index.js' })).toEqual({
|
|
17
|
+
filePath: './subpath/index.js',
|
|
18
|
+
});
|
|
19
|
+
expect(await findFileInPackage({ packagePath, filePath: 'subpath/index' })).toEqual({
|
|
20
|
+
filePath: './subpath/index.js',
|
|
21
|
+
});
|
|
22
|
+
expect(await findFileInPackage({ packagePath, filePath: 'subpath/' })).toEqual({ filePath: './subpath/index.js' });
|
|
23
|
+
expect(await findFileInPackage({ packagePath, filePath: 'subpath' })).toEqual({ filePath: './subpath/index.js' });
|
|
24
|
+
});
|
|
25
|
+
it('can find an intermediate path in an internal unbuilt package with only source files', async () => {
|
|
26
|
+
const packagePath = await createTestFileStructure({
|
|
27
|
+
'lib/index.js': '',
|
|
28
|
+
'src/ts.ts': '',
|
|
29
|
+
'src/bar/index.tsx': '',
|
|
30
|
+
});
|
|
31
|
+
expect(await findFileInPackage({ packagePath, filePath: 'lib/index' })).toEqual({ filePath: './lib/index.js' });
|
|
32
|
+
expect(await findFileInPackage({ packagePath, filePath: 'lib/ts' })).toEqual({
|
|
33
|
+
filePath: './lib/ts.js',
|
|
34
|
+
typesPath: './lib/ts.d.ts',
|
|
35
|
+
sourcePath: './src/ts.ts',
|
|
36
|
+
});
|
|
37
|
+
expect(await findFileInPackage({ packagePath, filePath: 'lib/ts.js' })).toEqual({
|
|
38
|
+
filePath: './lib/ts.js',
|
|
39
|
+
typesPath: './lib/ts.d.ts',
|
|
40
|
+
sourcePath: './src/ts.ts',
|
|
41
|
+
});
|
|
42
|
+
expect(await findFileInPackage({ packagePath, filePath: 'lib/bar' })).toEqual({
|
|
43
|
+
filePath: './lib/bar/index.js',
|
|
44
|
+
typesPath: './lib/bar/index.d.ts',
|
|
45
|
+
sourcePath: './src/bar/index.tsx',
|
|
46
|
+
});
|
|
47
|
+
expect(await findFileInPackage({ packagePath, filePath: 'lib/bar/index' })).toEqual({
|
|
48
|
+
filePath: './lib/bar/index.js',
|
|
49
|
+
typesPath: './lib/bar/index.d.ts',
|
|
50
|
+
sourcePath: './src/bar/index.tsx',
|
|
51
|
+
});
|
|
52
|
+
expect(await findFileInPackage({ packagePath, filePath: 'lib/bar/index.js' })).toEqual({
|
|
53
|
+
filePath: './lib/bar/index.js',
|
|
54
|
+
typesPath: './lib/bar/index.d.ts',
|
|
55
|
+
sourcePath: './src/bar/index.tsx',
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
it('returns undefined for external packages with only source files', async () => {
|
|
59
|
+
const repoPath = await createTestFileStructure({
|
|
60
|
+
'node_modules/foo/src/index.ts': '',
|
|
61
|
+
'node_modules/foo/src/bar/index.tsx': '',
|
|
62
|
+
});
|
|
63
|
+
const packagePath = path.join(repoPath, 'node_modules/foo');
|
|
64
|
+
expect(await findFileInPackage({ packagePath, filePath: 'lib/index.js' })).toEqual({});
|
|
65
|
+
expect(await findFileInPackage({ packagePath, filePath: 'lib' })).toEqual({});
|
|
66
|
+
expect(await findFileInPackage({ packagePath, filePath: 'lib/bar' })).toEqual({});
|
|
67
|
+
expect(await findFileInPackage({ packagePath, filePath: 'lib/bar/index.tsx' })).toEqual({});
|
|
68
|
+
});
|
|
69
|
+
it('can find a nested package, such as rtl-css-js/core', async () => {
|
|
70
|
+
const repoPath = await createTestFileStructure({
|
|
71
|
+
'node_modules/rtl-css-js/package.json': {
|
|
72
|
+
main: 'dist/cjs/index.js',
|
|
73
|
+
module: 'dist/esm/index.js',
|
|
74
|
+
types: 'types.d.ts',
|
|
75
|
+
},
|
|
76
|
+
'node_modules/rtl-css-js/dist/cjs/index.js': '',
|
|
77
|
+
'node_modules/rtl-css-js/dist/esm/index.js': '',
|
|
78
|
+
'node_modules/rtl-css-js/types.d.ts': '',
|
|
79
|
+
'node_modules/rtl-css-js/core/package.json': {
|
|
80
|
+
main: '../dist/cjs/core.js',
|
|
81
|
+
module: '../dist/esm/core.js',
|
|
82
|
+
types: '../core.d.ts',
|
|
83
|
+
},
|
|
84
|
+
'node_modules/rtl-css-js/dist/cjs/core.js': '',
|
|
85
|
+
'node_modules/rtl-css-js/dist/esm/core.js': '',
|
|
86
|
+
'node_modules/rtl-css-js/core.d.ts': '',
|
|
87
|
+
});
|
|
88
|
+
const packagePath = path.join(repoPath, 'node_modules/rtl-css-js');
|
|
89
|
+
expect(await findFileInPackage({ packagePath, filePath: './core' })).toEqual({
|
|
90
|
+
filePath: './dist/esm/core.js',
|
|
91
|
+
typesPath: './core.d.ts',
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=findFileInPackage.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findFileInPackage.test.js","sourceRoot":"","sources":["../src/findFileInPackage.test.ts"],"names":[],"mappings":"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"}
|