test
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
mol
2024-07-06 22:23:31 +08:00
parent 08173d8497
commit 263cb5ef03
1663 changed files with 526884 additions and 0 deletions

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2016 Lukas Geiger
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,186 @@
[
{
"runtime": "node",
"target": "11.0.0",
"lts": false,
"future": false,
"abi": "67"
},
{
"runtime": "node",
"target": "12.0.0",
"lts": [
"2019-10-21",
"2020-11-30"
],
"future": false,
"abi": "72"
},
{
"runtime": "node",
"target": "13.0.0",
"lts": false,
"future": false,
"abi": "79"
},
{
"runtime": "node",
"target": "14.0.0",
"lts": [
"2020-10-27",
"2021-10-19"
],
"future": false,
"abi": "83"
},
{
"runtime": "node",
"target": "15.0.0",
"lts": false,
"future": false,
"abi": "88"
},
{
"runtime": "node",
"target": "16.0.0",
"lts": [
"2021-10-26",
"2022-10-18"
],
"future": false,
"abi": "93"
},
{
"runtime": "node",
"target": "17.0.0",
"lts": false,
"future": false,
"abi": "102"
},
{
"abi": "70",
"future": false,
"lts": false,
"runtime": "electron",
"target": "5.0.0-beta.9"
},
{
"abi": "73",
"future": false,
"lts": false,
"runtime": "electron",
"target": "6.0.0-beta.1"
},
{
"abi": "75",
"future": false,
"lts": false,
"runtime": "electron",
"target": "7.0.0-beta.1"
},
{
"abi": "76",
"future": false,
"lts": false,
"runtime": "electron",
"target": "8.0.0-beta.1"
},
{
"abi": "76",
"future": false,
"lts": false,
"runtime": "electron",
"target": "9.0.0-beta.1"
},
{
"abi": "80",
"future": false,
"lts": false,
"runtime": "electron",
"target": "9.0.0-beta.2"
},
{
"abi": "82",
"future": false,
"lts": false,
"runtime": "electron",
"target": "10.0.0-beta.1"
},
{
"abi": "82",
"future": false,
"lts": false,
"runtime": "electron",
"target": "11.0.0-beta.1"
},
{
"abi": "85",
"future": false,
"lts": false,
"runtime": "electron",
"target": "11.0.0-beta.11"
},
{
"abi": "87",
"future": false,
"lts": false,
"runtime": "electron",
"target": "12.0.0-beta.1"
},
{
"abi": "89",
"future": false,
"lts": false,
"runtime": "electron",
"target": "13.0.0-beta.2"
},
{
"abi": "89",
"future": false,
"lts": false,
"runtime": "electron",
"target": "15.0.0-alpha.1"
},
{
"abi": "89",
"future": false,
"lts": false,
"runtime": "electron",
"target": "14.0.0-beta.1"
},
{
"abi": "97",
"future": false,
"lts": false,
"runtime": "electron",
"target": "14.0.2"
},
{
"abi": "98",
"future": false,
"lts": false,
"runtime": "electron",
"target": "15.0.0-beta.7"
},
{
"abi": "99",
"future": false,
"lts": false,
"runtime": "electron",
"target": "16.0.0-alpha.1"
},
{
"abi": "101",
"future": false,
"lts": false,
"runtime": "electron",
"target": "17.0.0-alpha.1"
},
{
"abi": "103",
"future": true,
"lts": false,
"runtime": "electron",
"target": "18.0.0-alpha.1"
}
]

View File

@ -0,0 +1,179 @@
var semver = require('semver')
function getNextTarget (runtime, targets) {
if (targets == null) targets = allTargets
var latest = targets.filter(function (t) { return t.runtime === runtime }).slice(-1)[0]
var increment = runtime === 'electron' ? 'minor' : 'major'
var next = semver.inc(latest.target, increment)
// Electron releases appear in the registry in their beta form, sometimes there is
// no active beta line. During this time we need to double bump
if (runtime === 'electron' && semver.parse(latest.target).prerelease.length) {
next = semver.inc(next, 'major')
}
return next
}
function getAbi (target, runtime) {
if (target === String(Number(target))) return target
if (target) target = target.replace(/^v/, '')
if (!runtime) runtime = 'node'
if (runtime === 'node') {
if (!target) return process.versions.modules
if (target === process.versions.node) return process.versions.modules
}
var abi
var lastTarget
for (var i = 0; i < allTargets.length; i++) {
var t = allTargets[i]
if (t.runtime !== runtime) continue
if (semver.lte(t.target, target) && (!lastTarget || semver.gte(t.target, lastTarget))) {
abi = t.abi
lastTarget = t.target
}
}
if (abi && semver.lt(target, getNextTarget(runtime))) return abi
throw new Error('Could not detect abi for version ' + target + ' and runtime ' + runtime + '. Updating "node-abi" might help solve this issue if it is a new release of ' + runtime)
}
function getTarget (abi, runtime) {
if (abi && abi !== String(Number(abi))) return abi
if (!runtime) runtime = 'node'
if (runtime === 'node' && !abi) return process.versions.node
var match = allTargets
.filter(function (t) {
return t.abi === abi && t.runtime === runtime
})
.map(function (t) {
return t.target
})
if (match.length) {
var betaSeparatorIndex = match[0].indexOf("-")
return betaSeparatorIndex > -1
? match[0].substring(0, betaSeparatorIndex)
: match[0]
}
throw new Error('Could not detect target for abi ' + abi + ' and runtime ' + runtime)
}
function sortByTargetFn (a, b) {
var abiComp = Number(a.abi) - Number(b.abi)
if (abiComp !== 0) return abiComp
if (a.target < b.target) return -1
if (a.target > b.target) return 1
return 0
}
function loadGeneratedTargets () {
var registry = require('./abi_registry.json')
var targets = {
supported: [],
additional: [],
future: []
}
registry.forEach(function (item) {
var target = {
runtime: item.runtime,
target: item.target,
abi: item.abi
}
if (item.lts) {
var startDate = new Date(Date.parse(item.lts[0]))
var endDate = new Date(Date.parse(item.lts[1]))
var currentDate = new Date()
target.lts = startDate < currentDate && currentDate < endDate
} else {
target.lts = false
}
if (target.runtime === 'node-webkit') {
targets.additional.push(target)
} else if (item.future) {
targets.future.push(target)
} else {
targets.supported.push(target)
}
})
targets.supported.sort(sortByTargetFn)
targets.additional.sort(sortByTargetFn)
targets.future.sort(sortByTargetFn)
return targets
}
var generatedTargets = loadGeneratedTargets()
var supportedTargets = [
{runtime: 'node', target: '5.0.0', abi: '47', lts: false},
{runtime: 'node', target: '6.0.0', abi: '48', lts: false},
{runtime: 'node', target: '7.0.0', abi: '51', lts: false},
{runtime: 'node', target: '8.0.0', abi: '57', lts: false},
{runtime: 'node', target: '9.0.0', abi: '59', lts: false},
{runtime: 'node', target: '10.0.0', abi: '64', lts: new Date(2018, 10, 1) < new Date() && new Date() < new Date(2020, 4, 31)},
{runtime: 'electron', target: '0.36.0', abi: '47', lts: false},
{runtime: 'electron', target: '1.1.0', abi: '48', lts: false},
{runtime: 'electron', target: '1.3.0', abi: '49', lts: false},
{runtime: 'electron', target: '1.4.0', abi: '50', lts: false},
{runtime: 'electron', target: '1.5.0', abi: '51', lts: false},
{runtime: 'electron', target: '1.6.0', abi: '53', lts: false},
{runtime: 'electron', target: '1.7.0', abi: '54', lts: false},
{runtime: 'electron', target: '1.8.0', abi: '57', lts: false},
{runtime: 'electron', target: '2.0.0', abi: '57', lts: false},
{runtime: 'electron', target: '3.0.0', abi: '64', lts: false},
{runtime: 'electron', target: '4.0.0', abi: '64', lts: false},
{runtime: 'electron', target: '4.0.4', abi: '69', lts: false}
]
supportedTargets.push.apply(supportedTargets, generatedTargets.supported)
var additionalTargets = [
{runtime: 'node-webkit', target: '0.13.0', abi: '47', lts: false},
{runtime: 'node-webkit', target: '0.15.0', abi: '48', lts: false},
{runtime: 'node-webkit', target: '0.18.3', abi: '51', lts: false},
{runtime: 'node-webkit', target: '0.23.0', abi: '57', lts: false},
{runtime: 'node-webkit', target: '0.26.5', abi: '59', lts: false}
]
additionalTargets.push.apply(additionalTargets, generatedTargets.additional)
var deprecatedTargets = [
{runtime: 'node', target: '0.2.0', abi: '1', lts: false},
{runtime: 'node', target: '0.9.1', abi: '0x000A', lts: false},
{runtime: 'node', target: '0.9.9', abi: '0x000B', lts: false},
{runtime: 'node', target: '0.10.4', abi: '11', lts: false},
{runtime: 'node', target: '0.11.0', abi: '0x000C', lts: false},
{runtime: 'node', target: '0.11.8', abi: '13', lts: false},
{runtime: 'node', target: '0.11.11', abi: '14', lts: false},
{runtime: 'node', target: '1.0.0', abi: '42', lts: false},
{runtime: 'node', target: '1.1.0', abi: '43', lts: false},
{runtime: 'node', target: '2.0.0', abi: '44', lts: false},
{runtime: 'node', target: '3.0.0', abi: '45', lts: false},
{runtime: 'node', target: '4.0.0', abi: '46', lts: false},
{runtime: 'electron', target: '0.30.0', abi: '44', lts: false},
{runtime: 'electron', target: '0.31.0', abi: '45', lts: false},
{runtime: 'electron', target: '0.33.0', abi: '46', lts: false}
]
var futureTargets = generatedTargets.future
var allTargets = deprecatedTargets
.concat(supportedTargets)
.concat(additionalTargets)
.concat(futureTargets)
exports.getAbi = getAbi
exports.getTarget = getTarget
exports.deprecatedTargets = deprecatedTargets
exports.supportedTargets = supportedTargets
exports.additionalTargets = additionalTargets
exports.futureTargets = futureTargets
exports.allTargets = allTargets
exports._getNextTarget = getNextTarget

View File

@ -0,0 +1,39 @@
{
"name": "node-abi",
"version": "3.8.0",
"description": "Get the Node ABI for a given target and runtime, and vice versa.",
"main": "index.js",
"scripts": {
"semantic-release": "semantic-release",
"test": "tape test/index.js",
"update-abi-registry": "node --unhandled-rejections=strict scripts/update-abi-registry.js"
},
"repository": {
"type": "git",
"url": "https://github.com/lgeiger/node-abi.git"
},
"keywords": [
"node",
"electron",
"node_module_version",
"abi",
"v8"
],
"author": "Lukas Geiger",
"license": "MIT",
"bugs": {
"url": "https://github.com/lgeiger/node-abi/issues"
},
"homepage": "https://github.com/lgeiger/node-abi#readme",
"devDependencies": {
"@continuous-auth/semantic-release-npm": "^2.0.0",
"got": "^11.8.2",
"tape": "^5.3.1"
},
"dependencies": {
"semver": "^7.3.5"
},
"engines": {
"node": ">=10"
}
}

View File

@ -0,0 +1,119 @@
const got = require('got')
const path = require('path')
const semver = require('semver')
const { writeFile } = require('fs').promises
async function getJSONFromCDN (urlPath) {
const response = await got(`https://cdn.jsdelivr.net/gh/${urlPath}`)
return JSON.parse(response.body)
}
async function fetchElectronReleases () {
const response = await got(`https://electronjs.org/headers/index.json`)
return JSON.parse(response.body)
}
async function fetchNodeVersions () {
const schedule = await getJSONFromCDN('nodejs/Release/schedule.json')
const versions = {}
for (const [majorVersion, metadata] of Object.entries(schedule)) {
if (majorVersion.startsWith('v0')) {
continue
}
const version = `${majorVersion.slice(1)}.0.0`
const lts = metadata.hasOwnProperty('lts') ? [metadata.lts, metadata.maintenance] : false
versions[version] = {
runtime: 'node',
target: version,
lts: lts,
future: new Date(Date.parse(metadata.start)) > new Date()
}
}
return versions
}
async function fetchAbiVersions () {
return (await getJSONFromCDN('nodejs/node/doc/abi_version_registry.json'))
.NODE_MODULE_VERSION
.filter(({ modules }) => modules > 66)
}
function electronReleasesToTargets (releases) {
const versions = releases.map(({ version }) => version)
const versionsByModules = releases
.filter(release => Number(release.modules) >= 70)
.map(({ version, modules }) => ({
version,
modules,
}))
.filter(({ version }) => !version.includes('nightly'))
.sort((a, b) => Number(a.modules) - Number(b.modules))
.reduce(
(acc, { modules, version }) => ({
...acc,
[`${version.split('.')[0]}-${modules}`]: {
version,
modules,
}
}),
{}
)
return Object.entries(versionsByModules)
.map(
([major, {version, modules}]) => ({
abi: modules,
future: !versions.find(
v => {
const major = version.split(".")[0]
return semver.satisfies(
v,
/^[0-9]/.test(major) ? `>= ${major}` : major
)
}
),
lts: false,
runtime: 'electron',
target: version
})
)
}
function nodeVersionsToTargets (abiVersions, nodeVersions) {
return Object.values(
abiVersions
.filter(({ runtime }) => runtime === 'node')
.reduce(
(acc, abiVersion) => {
const { version: nodeVersion } = semver.coerce(abiVersion.versions)
return {
[nodeVersion]: {
...nodeVersions[nodeVersion],
abi: abiVersion.modules.toString(),
},
...acc,
};
},
{}
)
)
}
async function main () {
const nodeVersions = await fetchNodeVersions()
const abiVersions = await fetchAbiVersions()
const electronReleases = await fetchElectronReleases()
const electronTargets = electronReleasesToTargets(electronReleases)
const nodeTargets = nodeVersionsToTargets(abiVersions, nodeVersions)
const supportedTargets = [
...nodeTargets,
...electronTargets,
]
await writeFile(path.resolve(__dirname, '..', 'abi_registry.json'), JSON.stringify(supportedTargets, null, 2))
}
main()