mirror of
https://github.com/zhigang1992/react-native-paper.git
synced 2026-06-11 00:08:51 +08:00
64 lines
1.6 KiB
JavaScript
64 lines
1.6 KiB
JavaScript
/* @flow */
|
|
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
const types = require('babel-types');
|
|
const babylon = require('babylon');
|
|
|
|
const output = path.join(__dirname, '../dist/mappings.json');
|
|
const source = fs.readFileSync(require.resolve('..'), 'utf8');
|
|
const ast = babylon.parse(source, {
|
|
sourceType: 'module',
|
|
plugins: [
|
|
'jsx',
|
|
'flow',
|
|
'objectRestSpread',
|
|
'classProperties',
|
|
'asyncGenerators',
|
|
],
|
|
});
|
|
|
|
const relative = (value /* : string */) =>
|
|
path.relative(
|
|
path.resolve(__dirname, '..'),
|
|
path.resolve(path.dirname(require.resolve('..')), value)
|
|
);
|
|
|
|
const mappings = ast.program.body.reduce((acc, declaration, index, self) => {
|
|
if (types.isExportNamedDeclaration(declaration)) {
|
|
if (declaration.source) {
|
|
declaration.specifiers.forEach(specifier => {
|
|
acc[specifier.exported.name] = {
|
|
path: relative(declaration.source.value),
|
|
name: specifier.local.name,
|
|
};
|
|
});
|
|
} else {
|
|
declaration.specifiers.forEach(specifier => {
|
|
const name = specifier.exported.name;
|
|
|
|
self.forEach(it => {
|
|
if (
|
|
types.isImportDeclaration(it) &&
|
|
it.specifiers.some(
|
|
s =>
|
|
types.isImportNamespaceSpecifier(s) &&
|
|
s.local.name === specifier.local.name
|
|
)
|
|
) {
|
|
acc[name] = {
|
|
path: relative(it.source.value),
|
|
name: '*',
|
|
};
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
return acc;
|
|
}, {});
|
|
|
|
fs.existsSync(path.dirname(output)) || fs.mkdirSync(path.dirname(output));
|
|
fs.writeFileSync(output, JSON.stringify(mappings, null, 2));
|