UNPKG

cnpmcore

Version:
247 lines 21.9 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodePreGypBinary = void 0; const tegg_1 = require("@eggjs/tegg"); const Binary_1 = require("../../enum/Binary"); const binaries_1 = __importDefault(require("../../../../config/binaries")); const path_1 = require("path"); const AbstractBinary_1 = require("./AbstractBinary"); let NodePreGypBinary = class NodePreGypBinary extends AbstractBinary_1.AbstractBinary { async initFetch() { // do nothing return; } // https://github.com/mapbox/node-pre-gyp async fetch(dir, binaryName) { const binaryConfig = binaries_1.default[binaryName]; const npmPackageName = binaryConfig.options?.npmPackageName ?? binaryName; const pkgUrl = `https://registry.npmjs.com/${npmPackageName}`; const data = await this.requestJSON(pkgUrl); const dirItems = { '/': [], }; const nodeABIVersions = await this.listNodeABIVersions(); const nodePlatforms = this.listNodePlatforms(); const nodeArchs = this.listNodeArchs(binaryConfig); const nodeLibcs = this.listNodeLibcs(); for (const version in data.versions) { const date = data.time[version]; const pkgVersion = data.versions[version]; if (!pkgVersion.binary) continue; // https://github.com/mapbox/node-pre-gyp#package_name // defaults to {module_name}-v{version}-{node_abi}-{platform}-{arch}.tar.gz let binaryFile = pkgVersion.binary.package_name || '{module_name}-v{version}-{node_abi}-{platform}-{arch}.tar.gz'; if (!binaryFile) continue; const moduleName = pkgVersion.binary.module_name || pkgVersion.name; binaryFile = binaryFile.replace('{version}', version) .replace('{module_name}', moduleName); let currentDir = dirItems['/']; let versionPrefix = ''; let remotePath = pkgVersion.binary.remote_path; const napiVersions = pkgVersion.binary.napi_versions ?? []; if (binaryConfig.options?.requiredNapiVersions && napiVersions.length === 0) continue; if (remotePath?.includes('{version}')) { const dirName = remotePath.includes('v{version}') ? `v${version}` : version; versionPrefix = `/${dirName}`; dirItems['/'].push({ name: `${dirName}/`, date, size: '-', isDir: true, url: '', }); currentDir = dirItems[`/${dirName}/`] = []; } // https://node-precompiled-binaries.grpc.io/?delimiter=/&prefix=grpc/v1.24.11/ // https://github.com/grpc/grpc-node/blob/grpc%401.24.x/packages/grpc-native-core/package.json#L50 // "binary": { // "module_name": "grpc_node", // "module_path": "src/node/extension_binary/{node_abi}-{platform}-{arch}-{libc}", // "host": "https://node-precompiled-binaries.grpc.io/", // "remote_path": "{name}/v{version}", // "package_name": "{node_abi}-{platform}-{arch}-{libc}.tar.gz" // }, if (binaryFile.includes('{node_abi}') && binaryFile.includes('{platform}') && binaryFile.includes('{arch}') && binaryFile.includes('{libc}')) { for (const nodeAbi of nodeABIVersions) { for (const platform of nodePlatforms) { const archs = nodeArchs[platform]; const libcs = nodeLibcs[platform]; for (const arch of archs) { for (const libc of libcs) { const name = binaryFile.replace('{node_abi}', `node-v${nodeAbi}`) .replace('{platform}', platform) .replace('{arch}', arch) .replace('{libc}', libc); currentDir.push({ name, date, size: '-', isDir: false, url: `${binaryConfig.distUrl}/${binaryName}${versionPrefix}/${name}`, ignoreDownloadStatuses: [404], }); } } } } } else if (binaryFile.includes('{node_abi}') && binaryFile.includes('{platform}') && binaryFile.includes('{arch}')) { for (const nodeAbi of nodeABIVersions) { for (const platform of nodePlatforms) { const archs = nodeArchs[platform]; for (const arch of archs) { const name = binaryFile.replace('{node_abi}', `node-v${nodeAbi}`) .replace('{platform}', platform) .replace('{arch}', arch); currentDir.push({ name, date, size: '-', isDir: false, url: `${binaryConfig.distUrl}/${binaryName}${versionPrefix}/${name}`, ignoreDownloadStatuses: [404], }); } } } } else if (binaryFile.includes('{platform}-{arch}-{node_napi_label}-{libc}') && napiVersions.length > 0) { // https://skia-canvas.s3.us-east-1.amazonaws.com/v0.9.30/darwin-arm64-napi-v6-unknown.tar.gz // https://github.com/samizdatco/skia-canvas/blob/2a75801d7cce3b4e4e6ad015a173daefaa8465e6/package.json#L48 // "binary": { // "module_name": "index", // "module_path": "./lib/v{napi_build_version}", // "remote_path": "./v{version}", // "package_name": "{platform}-{arch}-{node_napi_label}-{libc}.tar.gz", // "host": "https://skia-canvas.s3.us-east-1.amazonaws.com", // "napi_versions": [ // 6 // ] // }, for (const platform of nodePlatforms) { const archs = nodeArchs[platform]; const libcs = nodeLibcs[platform]; for (const arch of archs) { for (const libc of libcs) { for (const napiVersion of napiVersions) { const name = binaryFile.replace('{platform}', platform) .replace('{arch}', arch) .replace('{node_napi_label}', `napi-v${napiVersion}`) .replace('{libc}', libc); currentDir.push({ name, date, size: '-', isDir: false, url: `${binaryConfig.distUrl}${versionPrefix}/${name}`, ignoreDownloadStatuses: [404, 403], }); } } } } } else if (binaryFile.includes('{platform}-{arch}-{node_napi_label}')) { // "_id": "skia-canvas@0.9.22", // "binary": { // "module_name": "index", // "module_path": "./lib/v{napi_build_version}", // "remote_path": "./v{version}", // "package_name": "{platform}-{arch}-{node_napi_label}.tar.gz", // "host": "https://skia-canvas.s3.us-east-1.amazonaws.com", // "napi_versions": [ // 6 // ] // }, for (const platform of nodePlatforms) { const archs = nodeArchs[platform]; for (const arch of archs) { for (const napiVersion of napiVersions) { const binaryFileName = binaryFile.replace('{platform}', platform) .replace('{arch}', arch) .replace('{node_napi_label}', napiVersion); remotePath = remotePath.replace('{module_name}', moduleName) .replace('{name}', binaryName) .replace('{version}', version) .replace('{configuration}', 'Release'); const binaryFilePath = (0, path_1.join)('/', remotePath, binaryFileName); const remoteUrl = `${binaryConfig.distUrl}${binaryFilePath}`; currentDir.push({ name: binaryFileName, date, size: '-', isDir: false, url: remoteUrl, ignoreDownloadStatuses: [404], }); } } } } else if (binaryFile.includes('{platform}') && binaryFile.includes('{arch}')) { // https://github.com/grpc/grpc-node/blob/master/packages/grpc-tools/package.json#L29 // "binary": { // "module_name": "grpc_tools", // "host": "https://node-precompiled-binaries.grpc.io/", // "remote_path": "{name}/v{version}", // "package_name": "{platform}-{arch}.tar.gz", // "module_path": "bin" // }, // handle {configuration} // "binary": { // "module_name": "wrtc", // "module_path": "./build/{configuration}/", // "remote_path": "./{module_name}/v{version}/{configuration}/", // "package_name": "{platform}-{arch}.tar.gz", // "host": "https://node-webrtc.s3.amazonaws.com" // }, for (const platform of nodePlatforms) { const archs = nodeArchs[platform]; for (const arch of archs) { const binaryFileName = binaryFile.replace('{platform}', platform) .replace('{arch}', arch); remotePath = remotePath.replace('{module_name}', moduleName) .replace('{name}', binaryName) .replace('{version}', version) .replace('{configuration}', 'Release'); const binaryFilePath = (0, path_1.join)('/', remotePath, binaryFileName); const remoteUrl = `${binaryConfig.distUrl}${binaryFilePath}`; currentDir.push({ name: binaryFileName, date, size: '-', isDir: false, url: remoteUrl, ignoreDownloadStatuses: [404], }); } } } } return { items: dirItems[dir] }; } }; exports.NodePreGypBinary = NodePreGypBinary; exports.NodePreGypBinary = NodePreGypBinary = __decorate([ (0, tegg_1.SingletonProto)(), (0, AbstractBinary_1.BinaryAdapter)(Binary_1.BinaryType.NodePreGyp) ], NodePreGypBinary); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9kZVByZUd5cEJpbmFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2FwcC9jb21tb24vYWRhcHRlci9iaW5hcnkvTm9kZVByZUd5cEJpbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzQ0FBNkM7QUFDN0MsOENBQStDO0FBQy9DLDJFQUFtRTtBQUNuRSwrQkFBNEI7QUFDNUIscURBQTBGO0FBSW5GLElBQU0sZ0JBQWdCLEdBQXRCLE1BQU0sZ0JBQWlCLFNBQVEsK0JBQWM7SUFDbEQsS0FBSyxDQUFDLFNBQVM7UUFDYixhQUFhO1FBQ2IsT0FBTztJQUNULENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFXLEVBQUUsVUFBc0I7UUFDN0MsTUFBTSxZQUFZLEdBQUcsa0JBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsT0FBTyxFQUFFLGNBQWMsSUFBSSxVQUFVLENBQUM7UUFDMUUsTUFBTSxNQUFNLEdBQUcsOEJBQThCLGNBQWMsRUFBRSxDQUFDO1FBQzlELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxNQUFNLFFBQVEsR0FFVjtZQUNGLEdBQUcsRUFBRSxFQUFFO1NBQ1IsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDekQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ25D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