react-native-builder-bob
Version:
CLI to build JavaScript files for React Native libraries
141 lines (140 loc) • 4.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.args = void 0;
exports.build = build;
var _arktype = require("arktype");
var _fsExtra = _interopRequireDefault(require("fs-extra"));
var _kleur = _interopRequireDefault(require("kleur"));
var _path = _interopRequireDefault(require("path"));
var _schema = require("./schema");
var _loadConfig = require("./utils/loadConfig");
var logger = _interopRequireWildcard(require("./utils/logger"));
var _workerize = require("./utils/workerize");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const args = exports.args = {
target: {
type: 'string',
description: 'The target to build',
choices: ['commonjs', 'module', 'typescript', 'codegen']
}
};
async function build(argv) {
const root = process.cwd();
const projectPackagePath = _path.default.resolve(root, 'package.json');
if (!(await _fsExtra.default.pathExists(projectPackagePath))) {
throw new Error(`Couldn't find a 'package.json' file in '${root}'. Are you in a project folder?`);
}
const result = (0, _loadConfig.loadConfig)(root);
if (!result?.config) {
throw new Error(`No configuration found. Run '${argv.$0} init' to create one automatically.`);
}
const parsed = (0, _schema.config)(result.config);
if (parsed instanceof _arktype.type.errors) {
throw new Error(`Invalid configuration in ${result.filepath}: ${parsed.summary}`);
}
const {
source,
output,
targets,
exclude
} = parsed;
const commonjs = targets.some(t => Array.isArray(t) ? t[0] === 'commonjs' : t === 'commonjs');
const module = targets.some(t => Array.isArray(t) ? t[0] === 'module' : t === 'module');
const variants = {
commonjs,
module
};
if (argv.target != null) {
await buildTarget({
root,
target: argv.target,
source,
output,
exclude,
config: parsed,
variants
});
} else {
await Promise.all(targets.map(async target => buildTarget({
root,
target: Array.isArray(target) ? target[0] : target,
source,
output,
exclude,
config: parsed,
variants
})));
}
}
async function buildTarget({
root,
target,
source,
output,
exclude,
config,
variants
}) {
const options = config.targets.map(t => Array.isArray(t) ? t : [t, undefined]).find(t => t[0] === target)?.[1];
const report = logger.grouped(target);
switch (target) {
case 'commonjs':
case 'module':
await (0, _workerize.run)(target, {
root,
source: _path.default.resolve(root, source),
output: _path.default.resolve(root, output, target),
exclude,
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
options: options,
variants,
report
});
break;
case 'typescript':
{
const esm = config.targets?.some(t => {
if (Array.isArray(t)) {
const [name, options] = t;
if (name === 'module') {
return options && 'esm' in options && options?.esm;
}
}
return false;
}) ?? false;
await (0, _workerize.run)('typescript', {
root,
source: _path.default.resolve(root, source),
output: _path.default.resolve(root, output, 'typescript'),
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
options: options,
esm,
variants,
report
});
}
break;
case 'codegen':
await (0, _workerize.run)('codegen', {
root,
source: _path.default.resolve(root, source),
report
});
break;
case 'custom':
await (0, _workerize.run)('custom', {
root,
source: _path.default.resolve(root, source),
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
options: options,
report
});
break;
default:
throw new Error(`Invalid target ${_kleur.default.blue(target)}.`);
}
}
//# sourceMappingURL=build.js.map