react-native-node-api
Version:
Node-API for React Native
61 lines (60 loc) • 2.66 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.linkAndroidDir = linkAndroidDir;
const strict_1 = __importDefault(require("node:assert/strict"));
const node_fs_1 = __importDefault(require("node:fs"));
const node_path_1 = __importDefault(require("node:path"));
const path_utils_1 = require("../path-utils");
const link_modules_1 = require("./link-modules");
const ANDROID_ARCHITECTURES = [
"arm64-v8a",
"armeabi-v7a",
"x86_64",
"x86",
];
async function linkAndroidDir({ incremental, modulePath, naming, platform, }) {
const libraryName = (0, path_utils_1.getLibraryName)(modulePath, naming);
const outputPath = (0, link_modules_1.getLinkedModuleOutputPath)(platform, modulePath, naming);
if (incremental && node_fs_1.default.existsSync(outputPath)) {
const moduleModified = (0, path_utils_1.getLatestMtime)(modulePath);
const outputModified = (0, path_utils_1.getLatestMtime)(outputPath);
if (moduleModified < outputModified) {
return {
originalPath: modulePath,
libraryName,
outputPath,
skipped: true,
};
}
}
await node_fs_1.default.promises.rm(outputPath, { recursive: true, force: true });
await node_fs_1.default.promises.cp(modulePath, outputPath, { recursive: true });
for (const arch of ANDROID_ARCHITECTURES) {
const archPath = node_path_1.default.join(outputPath, arch);
if (!node_fs_1.default.existsSync(archPath)) {
// Skip missing architectures
continue;
}
const libraryDirents = await node_fs_1.default.promises.readdir(archPath, {
withFileTypes: true,
});
(0, strict_1.default)(libraryDirents.length === 1, "Expected exactly one library file");
const [libraryDirent] = libraryDirents;
(0, strict_1.default)(libraryDirent.isFile(), "Expected a library file");
const libraryPath = node_path_1.default.join(libraryDirent.parentPath, libraryDirent.name);
await node_fs_1.default.promises.rename(libraryPath, node_path_1.default.join(archPath, `lib${libraryName}.so`));
}
await node_fs_1.default.promises.rm(node_path_1.default.join(outputPath, path_utils_1.MAGIC_FILENAME), {
recursive: true,
});
// TODO: Update the DT_NEEDED entry in the .so files
return {
originalPath: modulePath,
outputPath,
libraryName,
skipped: false,
};
}