react-native-builder-bob 0.25.0-next.5 → 0.25.0
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/__tests__/index.test.js +0 -17
- package/lib/__tests__/index.test.js.map +1 -1
- package/lib/babel.js +7 -35
- package/lib/babel.js.map +1 -1
- package/package.json +2 -2
|
@@ -17,21 +17,4 @@ _globals.it.each(['imports', 'exports'])(`adds extension to %s`, async name => {
|
|
|
17
17
|
const expected = await _nodeFs.default.promises.readFile(_nodePath.default.resolve(__dirname, `../__fixtures__/project/code/$${name}-output.ts`), 'utf8');
|
|
18
18
|
(0, _globals.expect)(result?.code).toEqual(expected.trim());
|
|
19
19
|
});
|
|
20
|
-
(0, _globals.it)('replaces alias imports', async () => {
|
|
21
|
-
const filepath = _nodePath.default.resolve(__dirname, `../__fixtures__/project/code/$alias-input.ts`);
|
|
22
|
-
const result = await (0, _core.transformFileAsync)(filepath, {
|
|
23
|
-
cwd: __dirname,
|
|
24
|
-
configFile: false,
|
|
25
|
-
babelrc: false,
|
|
26
|
-
plugins: ['@babel/plugin-syntax-typescript', [require.resolve('../babel.ts'), {
|
|
27
|
-
alias: {
|
|
28
|
-
'@': '../__fixtures__/project',
|
|
29
|
-
'file': '../__fixtures__/project/f',
|
|
30
|
-
'something': 'another'
|
|
31
|
-
}
|
|
32
|
-
}]]
|
|
33
|
-
});
|
|
34
|
-
const expected = await _nodeFs.default.promises.readFile(_nodePath.default.resolve(__dirname, `../__fixtures__/project/code/$alias-output.ts`), 'utf8');
|
|
35
|
-
(0, _globals.expect)(result?.code).toEqual(expected.trim());
|
|
36
|
-
});
|
|
37
20
|
//# sourceMappingURL=index.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","names":["_globals","require","_core","_nodeFs","_interopRequireDefault","_nodePath","obj","__esModule","default","it","each","name","filepath","path","resolve","__dirname","result","transformFileAsync","configFile","babelrc","plugins","extension","expected","fs","promises","readFile","expect","code","toEqual","trim"
|
|
1
|
+
{"version":3,"file":"index.test.js","names":["_globals","require","_core","_nodeFs","_interopRequireDefault","_nodePath","obj","__esModule","default","it","each","name","filepath","path","resolve","__dirname","result","transformFileAsync","configFile","babelrc","plugins","extension","expected","fs","promises","readFile","expect","code","toEqual","trim"],"sources":["../../src/__tests__/index.test.ts"],"sourcesContent":["import { expect, it } from '@jest/globals';\nimport { transformFileAsync } from '@babel/core';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nit.each(['imports', 'exports'])(`adds extension to %s`, async (name) => {\n const filepath = path.resolve(\n __dirname,\n `../__fixtures__/project/code/$${name}-input.ts`\n );\n\n const result = await transformFileAsync(filepath, {\n configFile: false,\n babelrc: false,\n plugins: [\n '@babel/plugin-syntax-typescript',\n [require.resolve('../babel.ts'), { extension: 'mjs' }],\n ],\n });\n\n const expected = await fs.promises.readFile(\n path.resolve(__dirname, `../__fixtures__/project/code/$${name}-output.ts`),\n 'utf8'\n );\n\n expect(result?.code).toEqual(expected.trim());\n});\n"],"mappings":";;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,SAAA,GAAAD,sBAAA,CAAAH,OAAA;AAA6B,SAAAG,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE7BG,WAAE,CAACC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAE,sBAAqB,EAAE,MAAOC,IAAI,IAAK;EACtE,MAAMC,QAAQ,GAAGC,iBAAI,CAACC,OAAO,CAC3BC,SAAS,EACR,iCAAgCJ,IAAK,WACxC,CAAC;EAED,MAAMK,MAAM,GAAG,MAAM,IAAAC,wBAAkB,EAACL,QAAQ,EAAE;IAChDM,UAAU,EAAE,KAAK;IACjBC,OAAO,EAAE,KAAK;IACdC,OAAO,EAAE,CACP,iCAAiC,EACjC,CAACnB,OAAO,CAACa,OAAO,CAAC,aAAa,CAAC,EAAE;MAAEO,SAAS,EAAE;IAAM,CAAC,CAAC;EAE1D,CAAC,CAAC;EAEF,MAAMC,QAAQ,GAAG,MAAMC,eAAE,CAACC,QAAQ,CAACC,QAAQ,CACzCZ,iBAAI,CAACC,OAAO,CAACC,SAAS,EAAG,iCAAgCJ,IAAK,YAAW,CAAC,EAC1E,MACF,CAAC;EAED,IAAAe,eAAM,EAACV,MAAM,EAAEW,IAAI,CAAC,CAACC,OAAO,CAACN,QAAQ,CAACO,IAAI,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC"}
|
package/lib/babel.js
CHANGED
|
@@ -19,12 +19,8 @@ const isDirectory = filename => {
|
|
|
19
19
|
})?.isDirectory() ?? false;
|
|
20
20
|
return exists;
|
|
21
21
|
};
|
|
22
|
-
const isModule = (filename,
|
|
23
|
-
const exts = ['js', 'ts', 'jsx', 'tsx',
|
|
24
|
-
|
|
25
|
-
// Metro won't resolve these extensions if explicit extension is provided
|
|
26
|
-
// So we can't add extension to these files
|
|
27
|
-
const platforms = ['native', 'android', 'ios', 'windows', 'macos', 'visionos', 'web', 'tv', 'android.tv', 'ios.tv'];
|
|
22
|
+
const isModule = (filename, extension, platforms) => {
|
|
23
|
+
const exts = ['js', 'ts', 'jsx', 'tsx', extension];
|
|
28
24
|
return exts.some(ext => isFile(`${filename}.${ext}`) && platforms.every(platform => !isFile(`${filename}.${platform}.${ext}`)));
|
|
29
25
|
};
|
|
30
26
|
const isTypeImport = node => 'importKind' in node && node.importKind === 'type' || 'exportKind' in node && node.exportKind === 'type';
|
|
@@ -34,31 +30,10 @@ const assertFilename = filename => {
|
|
|
34
30
|
}
|
|
35
31
|
};
|
|
36
32
|
function _default(api, {
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
extension,
|
|
34
|
+
platforms = ['native', 'android', 'ios', 'windows', 'macos', 'visionos', 'web', 'tv', 'android.tv', 'ios.tv']
|
|
39
35
|
}) {
|
|
40
36
|
api.assertVersion(7);
|
|
41
|
-
function aliasImports({
|
|
42
|
-
node
|
|
43
|
-
}, state) {
|
|
44
|
-
if (alias == null ||
|
|
45
|
-
// Skip type imports as they'll be removed
|
|
46
|
-
isTypeImport(node) ||
|
|
47
|
-
// Skip imports without a source
|
|
48
|
-
!node.source?.value) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
assertFilename(state.filename);
|
|
52
|
-
const root = state.cwd;
|
|
53
|
-
const source = node.source.value;
|
|
54
|
-
for (const [key, value] of Object.entries(alias)) {
|
|
55
|
-
if (source === key || source.startsWith(`${key}/`)) {
|
|
56
|
-
const resolved = value.startsWith('.') ? _path.default.relative(_path.default.dirname(state.filename), _path.default.resolve(root, value)) : value;
|
|
57
|
-
node.source.value = source.replace(key, resolved);
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
37
|
function addExtension({
|
|
63
38
|
node
|
|
64
39
|
}, state) {
|
|
@@ -81,30 +56,27 @@ function _default(api, {
|
|
|
81
56
|
}
|
|
82
57
|
|
|
83
58
|
// Add extension if .ts file or file with extension exists
|
|
84
|
-
if (isModule(filename, extension)) {
|
|
59
|
+
if (isModule(filename, extension, platforms)) {
|
|
85
60
|
node.source.value += `.${extension}`;
|
|
86
61
|
return;
|
|
87
62
|
}
|
|
88
63
|
|
|
89
64
|
// Expand folder imports to index and add extension
|
|
90
|
-
if (isDirectory(filename) && isModule(_path.default.join(filename, 'index'), extension)) {
|
|
65
|
+
if (isDirectory(filename) && isModule(_path.default.join(filename, 'index'), extension, platforms)) {
|
|
91
66
|
node.source.value = node.source.value.replace(/\/?$/, `/index.${extension}`);
|
|
92
67
|
return;
|
|
93
68
|
}
|
|
94
69
|
}
|
|
95
70
|
return {
|
|
96
|
-
name: '
|
|
71
|
+
name: 'react-native-builder-bob',
|
|
97
72
|
visitor: {
|
|
98
73
|
ImportDeclaration(path, state) {
|
|
99
|
-
aliasImports(path, state);
|
|
100
74
|
addExtension(path, state);
|
|
101
75
|
},
|
|
102
76
|
ExportNamedDeclaration(path, state) {
|
|
103
|
-
aliasImports(path, state);
|
|
104
77
|
addExtension(path, state);
|
|
105
78
|
},
|
|
106
79
|
ExportAllDeclaration(path, state) {
|
|
107
|
-
aliasImports(path, state);
|
|
108
80
|
addExtension(path, state);
|
|
109
81
|
}
|
|
110
82
|
}
|
package/lib/babel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"babel.js","names":["_fs","_interopRequireDefault","require","_path","obj","__esModule","default","isFile","filename","exists","fs","lstatSync","throwIfNoEntry","isDirectory","isModule","
|
|
1
|
+
{"version":3,"file":"babel.js","names":["_fs","_interopRequireDefault","require","_path","obj","__esModule","default","isFile","filename","exists","fs","lstatSync","throwIfNoEntry","isDirectory","isModule","extension","platforms","exts","some","ext","every","platform","isTypeImport","node","importKind","exportKind","assertFilename","Error","_default","api","assertVersion","addExtension","state","source","value","startsWith","path","resolve","dirname","replace","join","name","visitor","ImportDeclaration","ExportNamedDeclaration","ExportAllDeclaration"],"sources":["../src/babel.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport type { ConfigAPI, NodePath, PluginObj, PluginPass } from '@babel/core';\nimport type {\n ImportDeclaration,\n ExportAllDeclaration,\n ExportNamedDeclaration,\n} from '@babel/types';\n\ntype Options = {\n /**\n * Extension to add to the imports\n * For commonjs use 'cjs' and for esm use 'mjs'\n * NodeJS requires explicit extension for esm\n * The `cjs` extension avoids disambiguity when package.json has \"type\": \"module\"\n */\n extension?: 'cjs' | 'mjs';\n /**\n * Out of tree platforms to support\n * For `import './file'`, we skip adding extension if `file.${platform}.ts` exists\n * This is necessary for the platform specific extensions to be resolve correctly\n * Bundlers won't resolve the platform specific extension if explicit extension is present\n */\n platforms?: string[];\n};\n\nconst isFile = (filename: string): boolean => {\n const exists =\n fs.lstatSync(filename, { throwIfNoEntry: false })?.isFile() ?? false;\n\n return exists;\n};\n\nconst isDirectory = (filename: string): boolean => {\n const exists =\n fs.lstatSync(filename, { throwIfNoEntry: false })?.isDirectory() ?? false;\n\n return exists;\n};\n\nconst isModule = (\n filename: string,\n extension: string,\n platforms: string[]\n): boolean => {\n const exts = ['js', 'ts', 'jsx', 'tsx', extension];\n\n return exts.some(\n (ext) =>\n isFile(`${filename}.${ext}`) &&\n platforms.every((platform) => !isFile(`${filename}.${platform}.${ext}`))\n );\n};\n\nconst isTypeImport = (\n node: ImportDeclaration | ExportNamedDeclaration | ExportAllDeclaration\n) =>\n ('importKind' in node && node.importKind === 'type') ||\n ('exportKind' in node && node.exportKind === 'type');\n\nconst assertFilename: (\n filename: string | null | undefined\n) => asserts filename is string = (filename) => {\n if (filename == null) {\n throw new Error(\"Couldn't find a filename for the current file.\");\n }\n};\n\nexport default function (\n api: ConfigAPI,\n {\n extension,\n platforms = [\n 'native',\n 'android',\n 'ios',\n 'windows',\n 'macos',\n 'visionos',\n 'web',\n 'tv',\n 'android.tv',\n 'ios.tv',\n ],\n }: Options\n): PluginObj {\n api.assertVersion(7);\n\n function addExtension(\n {\n node,\n }: NodePath<\n ImportDeclaration | ExportNamedDeclaration | ExportAllDeclaration\n >,\n state: PluginPass\n ) {\n if (\n extension == null ||\n // Skip type imports as they'll be removed\n isTypeImport(node) ||\n // Skip non-relative imports\n !node.source?.value.startsWith('.')\n ) {\n return;\n }\n\n assertFilename(state.filename);\n\n // Skip folder imports\n const filename = path.resolve(\n path.dirname(state.filename),\n node.source.value\n );\n\n // Replace .ts extension with .js if file with extension is explicitly imported\n if (isFile(filename)) {\n node.source.value = node.source.value.replace(/\\.tsx?$/, `.${extension}`);\n return;\n }\n\n // Add extension if .ts file or file with extension exists\n if (isModule(filename, extension, platforms)) {\n node.source.value += `.${extension}`;\n return;\n }\n\n // Expand folder imports to index and add extension\n if (\n isDirectory(filename) &&\n isModule(path.join(filename, 'index'), extension, platforms)\n ) {\n node.source.value = node.source.value.replace(\n /\\/?$/,\n `/index.${extension}`\n );\n return;\n }\n }\n\n return {\n name: 'react-native-builder-bob',\n visitor: {\n ImportDeclaration(path, state) {\n addExtension(path, state);\n },\n ExportNamedDeclaration(path, state) {\n addExtension(path, state);\n },\n ExportAllDeclaration(path, state) {\n addExtension(path, state);\n },\n },\n };\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-builder-bob",
|
|
3
|
-
"version": "0.25.0
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"description": "CLI to build JavaScript files for React Native libraries",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
@@ -80,5 +80,5 @@
|
|
|
80
80
|
"concurrently": "^7.2.2",
|
|
81
81
|
"jest": "^29.7.0"
|
|
82
82
|
},
|
|
83
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "a1bc1bae766336e4e0473a50d44f90cbc0c59b77"
|
|
84
84
|
}
|