@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.
@@ -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
- expect(await createExportsMap(path.join(testGenerateExportsPath, 'no-exports'))).toEqual({});
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
- expect(await createExportsMap(path.join(testGenerateExportsPath, 'implicit-export'))).toMatchInlineSnapshot(`
14
- {
15
- ".": {
16
- "default": "./index.js",
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
- expect(await createExportsMap(path.join(testGenerateExportsPath, 'main-export-esm'))).toMatchInlineSnapshot(`
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 main export as cjs', async () => {
31
- expect(await createExportsMap(path.join(testGenerateExportsPath, 'main-export-cjs'))).toMatchInlineSnapshot(`
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
- "default": "./main.js",
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 export as cjs and types', async () => {
40
- expect(await createExportsMap(path.join(testGenerateExportsPath, 'main-export-cjs-types'))).toMatchInlineSnapshot(`
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
- "types": "./index.d.ts",
83
+ "import": "./module.js",
45
84
  },
46
85
  }
47
86
  `);
48
87
  });
49
- it('can generate an exports map for a package with a module export', async () => {
50
- expect(await createExportsMap(path.join(testGenerateExportsPath, 'module-export'))).toMatchInlineSnapshot(`
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
- "default": "./module.js",
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 browser export', async () => {
59
- const testPath = await createTestFileStructure({
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
- main: 'main.js',
63
- module: 'module.js',
64
- browser: 'browser.js',
119
+ typings: './lib/index.d.ts',
120
+ module: './lib/index.js',
65
121
  },
66
- 'main.js': '',
67
- 'module.js': '',
68
- 'browser.js': '',
122
+ 'lib/index.js': '',
123
+ 'lib/index.d.ts': '',
124
+ 'src/index.tsx': '',
69
125
  });
70
- expect(await createExportsMap(testPath)).toMatchInlineSnapshot(`
126
+ expect(await createExportsMap(packagePath)).toMatchInlineSnapshot(`
71
127
  {
72
128
  ".": {
73
- "default": "./browser.js",
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 a package with a type/source exports', async () => {
79
- expect(await createExportsMap(path.join(testGenerateExportsPath, 'sources-export'))).toMatchInlineSnapshot(`
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
- "default": "./lib/index.js",
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 for an internal unbuilt package', async () => {
90
- expect(await createExportsMap(path.join(testGenerateExportsPath, 'main-export-unbuilt'))).toMatchInlineSnapshot(`
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": "./lib/index.js",
94
- "source": "./src/index.ts",
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
- expect(await createExportsMap(path.join(testGenerateExportsPath, 'node_modules/ext-esm-types')))
102
- .toMatchInlineSnapshot(`
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": "./lib/main.d.ts",
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 packages = new PackageDefinitions();
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(testPath, { packages }));
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":"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"}
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: '/foo',
20
+ path: testPath,
12
21
  requiredBy: {},
13
22
  },
14
23
  };
15
- const packages = new PackageDefinitions({
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
- "imports": {
55
- "foo": "http://localhost:8080/foo@1.0.0/unbundled/browser-esm.js",
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: '/foo',
105
+ path: testPath,
96
106
  requiredBy: {},
97
107
  },
98
108
  };
99
- const packages = new PackageDefinitions({
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":"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"}
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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"}
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAEtD,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAC,CAAC;QAE9F,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QAC3G,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QACxG,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QACpG,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QACnG,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACrF,QAAQ,EAAE,oBAAoB;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAClF,QAAQ,EAAE,oBAAoB;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACnH,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAC;IACpH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;QACnG,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAAC;YAChD,cAAc,EAAE,EAAE;YAClB,WAAW,EAAE,EAAE;YACf,mBAAmB,EAAE,EAAE;SACxB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAChH,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3E,QAAQ,EAAE,aAAa;YACvB,SAAS,EAAE,eAAe;YAC1B,UAAU,EAAE,aAAa;SAC1B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9E,QAAQ,EAAE,aAAa;YACvB,SAAS,EAAE,eAAe;YAC1B,UAAU,EAAE,aAAa;SAC1B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5E,QAAQ,EAAE,oBAAoB;YAC9B,SAAS,EAAE,sBAAsB;YACjC,UAAU,EAAE,qBAAqB;SAClC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAClF,QAAQ,EAAE,oBAAoB;YAC9B,SAAS,EAAE,sBAAsB;YACjC,UAAU,EAAE,qBAAqB;SAClC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACrF,QAAQ,EAAE,oBAAoB;YAC9B,SAAS,EAAE,sBAAsB;YACjC,UAAU,EAAE,qBAAqB;SAClC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC;YAC7C,+BAA+B,EAAE,EAAE;YACnC,oCAAoC,EAAE,EAAE;SACzC,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAE5D,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9E,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClF,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC;YAC7C,sCAAsC,EAAE;gBACtC,IAAI,EAAE,mBAAmB;gBACzB,MAAM,EAAE,mBAAmB;gBAC3B,KAAK,EAAE,YAAY;aACpB;YACD,2CAA2C,EAAE,EAAE;YAC/C,2CAA2C,EAAE,EAAE;YAC/C,oCAAoC,EAAE,EAAE;YAExC,2CAA2C,EAAE;gBAC3C,IAAI,EAAE,qBAAqB;gBAC3B,MAAM,EAAE,qBAAqB;gBAC7B,KAAK,EAAE,cAAc;aACtB;YACD,0CAA0C,EAAE,EAAE;YAC9C,0CAA0C,EAAE,EAAE;YAC9C,mCAAmC,EAAE,EAAE;SACxC,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC;QAEnE,MAAM,CAAC,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3E,QAAQ,EAAE,oBAAoB;YAC9B,SAAS,EAAE,aAAa;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}