update, text, response

This commit is contained in:
2025-11-02 11:09:14 +01:00
parent 14776c86b0
commit eed8a4ddcf
2794 changed files with 156786 additions and 129204 deletions

187
node_modules/browserslist/index.js generated vendored
View File

@@ -1,12 +1,13 @@
var bbm = require('baseline-browser-mapping')
var jsReleases = require('node-releases/data/processed/envs.json')
var agents = require('caniuse-lite/dist/unpacker/agents').agents
var e2c = require('electron-to-chromium/versions')
var jsEOL = require('node-releases/data/release-schedule/release-schedule.json')
var path = require('path')
var e2c = require('electron-to-chromium/versions')
var BrowserslistError = require('./error')
var parse = require('./parse')
var env = require('./node') // Will load browser.js in webpack
var env = require('./node')
var parseWithoutCache = require('./parse') // Will load browser.js in webpack
var YEAR = 365.259641 * 24 * 60 * 60 * 1000
var ANDROID_EVERGREEN_FIRST = '37'
@@ -82,11 +83,11 @@ function generateFilter(sign, version) {
version = parseFloat(version)
if (sign === '>') {
return function (v) {
return parseFloat(v) > version
return parseLatestFloat(v) > version
}
} else if (sign === '>=') {
return function (v) {
return parseFloat(v) >= version
return parseLatestFloat(v) >= version
}
} else if (sign === '<') {
return function (v) {
@@ -97,6 +98,10 @@ function generateFilter(sign, version) {
return parseFloat(v) <= version
}
}
function parseLatestFloat(v) {
return parseFloat(v.split('-')[1] || v)
}
}
function generateSemverFilter(sign, version) {
@@ -249,9 +254,18 @@ function normalizeAndroidVersions(androidVersions, chromeVersions) {
.concat(chromeVersions.slice(iFirstEvergreen))
}
function copyObject(obj) {
var copy = {}
for (var key in obj) {
copy[key] = obj[key]
}
return copy
}
function normalizeAndroidData(android, chrome) {
android.released = normalizeAndroidVersions(android.released, chrome.released)
android.versions = normalizeAndroidVersions(android.versions, chrome.versions)
android.releaseDate = copyObject(android.releaseDate)
android.released.forEach(function (v) {
if (android.releaseDate[v] === undefined) {
android.releaseDate[v] = chrome.releaseDate[v]
@@ -298,15 +312,15 @@ function filterJumps(list, name, nVersions, context) {
return list.slice(jump - 1 - nVersions)
}
function isSupported(flags) {
function isSupported(flags, withPartial) {
return (
typeof flags === 'string' &&
(flags.indexOf('y') >= 0 || flags.indexOf('a') >= 0)
(flags.indexOf('y') >= 0 || (withPartial && flags.indexOf('a') >= 0))
)
}
function resolve(queries, context) {
return parse(QUERIES, queries).reduce(function (result, node, index) {
return parseQueries(queries).reduce(function (result, node, index) {
if (node.not && index === 0) {
throw new BrowserslistError(
'Write any browsers query (for instance, `defaults`) ' +
@@ -382,19 +396,27 @@ function checkQueries(queries) {
}
var cache = {}
var parseCache = {}
function browserslist(queries, opts) {
opts = prepareOpts(opts)
queries = prepareQueries(queries, opts)
checkQueries(queries)
var needsPath = parseQueries(queries).some(function (node) {
return QUERIES[node.type].needsPath
})
var context = {
ignoreUnknownVersions: opts.ignoreUnknownVersions,
dangerousExtend: opts.dangerousExtend,
throwOnMissing: opts.throwOnMissing,
mobileToDesktop: opts.mobileToDesktop,
path: opts.path,
env: opts.env
}
// Removing to avoid using context.path without marking query as needsPath
if (needsPath) {
context.path = opts.path
}
env.oldDataWarning(browserslist.data)
var stats = env.getStat(opts, browserslist.data)
@@ -428,11 +450,35 @@ function browserslist(queries, opts) {
return result
}
function parseQueries(queries) {
var cacheKey = JSON.stringify(queries)
if (cacheKey in parseCache) return parseCache[cacheKey]
var result = parseWithoutCache(QUERIES, queries)
if (!env.env.BROWSERSLIST_DISABLE_CACHE) {
parseCache[cacheKey] = result
}
return result
}
function loadCustomUsage(context, config) {
var stats = env.loadStat(context, config, browserslist.data)
if (stats) {
context.customUsage = {}
for (var browser in stats) {
fillUsage(context.customUsage, browser, stats[browser])
}
}
if (!context.customUsage) {
throw new BrowserslistError('Custom usage statistics was not provided')
}
return context.customUsage
}
browserslist.parse = function (queries, opts) {
opts = prepareOpts(opts)
queries = prepareQueries(queries, opts)
checkQueries(queries)
return parse(QUERIES, queries)
return parseQueries(queries)
}
// Will be filled by Can I Use data below
@@ -478,6 +524,7 @@ browserslist.versionAliases = {}
browserslist.clearCaches = env.clearCaches
browserslist.parseConfig = env.parseConfig
browserslist.readConfig = env.readConfig
browserslist.findConfigFile = env.findConfigFile
browserslist.findConfig = env.findConfig
browserslist.loadConfig = env.loadConfig
@@ -548,6 +595,33 @@ function sinceQuery(context, node) {
return filterByYear(Date.UTC(year, month, day, 0, 0, 0), context)
}
function bbmTransform(bbmVersions) {
var browsers = {
chrome: 'chrome',
chrome_android: 'and_chr',
edge: 'edge',
firefox: 'firefox',
firefox_android: 'and_ff',
safari: 'safari',
safari_ios: 'ios_saf',
webview_android: 'android',
samsunginternet_android: 'samsung',
opera_android: 'op_mob',
opera: 'opera',
qq_android: 'and_qq',
uc_android: 'and_uc',
kai_os: 'kaios'
}
return bbmVersions
.filter(function (version) {
return Object.keys(browsers).indexOf(version.browser) !== -1
})
.map(function (version) {
return browsers[version.browser] + ' >= ' + version.version
})
}
function coverQuery(context, node) {
var coverage = parseFloat(node.coverage)
var usage = browserslist.usage.global
@@ -567,19 +641,21 @@ function coverQuery(context, node) {
env.loadCountry(browserslist.usage, place, browserslist.data)
usage = browserslist.usage[place]
}
} else if (node.config) {
usage = loadCustomUsage(context, node.config)
}
var versions = Object.keys(usage).sort(function (a, b) {
return usage[b] - usage[a]
})
var coveraged = 0
var covered = 0
var result = []
var version
for (var i = 0; i < versions.length; i++) {
version = versions[i]
if (usage[version] === 0) break
coveraged += usage[version]
covered += usage[version]
result.push(version)
if (coveraged >= coverage) break
if (covered >= coverage) break
}
return result
}
@@ -713,7 +789,7 @@ var QUERIES = {
},
last_years: {
matches: ['years'],
regexp: /^last\s+(\d*.?\d+)\s+years?$/i,
regexp: /^last\s+((\d+\.)?\d+)\s+years?$/i,
select: function (context, node) {
return filterByYear(Date.now() - YEAR * node.years, context)
}
@@ -733,6 +809,54 @@ var QUERIES = {
regexp: /^since (\d+)-(\d+)-(\d+)$/i,
select: sinceQuery
},
baseline: {
matches: ['year', 'availability', 'date', 'downstream', 'kaios'],
// Matches:
// baseline 2024
// baseline newly available
// baseline widely available
// baseline widely available on 2024-06-01
// ...with downstream
// ...including kaios
regexp:
/^baseline\s+(?:(\d+)|(newly|widely)\s+available(?:\s+on\s+(\d{4}-\d{2}-\d{2}))?)?(\s+with\s+downstream)?(\s+including\s+kaios)?$/i,
select: function (context, node) {
var baselineVersions
var includeDownstream = !!node.downstream
var includeKaiOS = !!node.kaios
if (node.availability === 'newly' && node.date) {
throw new BrowserslistError(
'Using newly available with a date is not supported, please use "widely available on YYYY-MM-DD" and add 30 months to the date you specified.'
)
}
if (node.year) {
baselineVersions = bbm.getCompatibleVersions({
targetYear: node.year,
includeDownstreamBrowsers: includeDownstream,
includeKaiOS: includeKaiOS
})
} else if (node.date) {
baselineVersions = bbm.getCompatibleVersions({
widelyAvailableOnDate: node.date,
includeDownstreamBrowsers: includeDownstream,
includeKaiOS: includeKaiOS
})
} else if (node.availability === 'newly') {
var future30months = new Date().setMonth(new Date().getMonth() + 30)
baselineVersions = bbm.getCompatibleVersions({
widelyAvailableOnDate: future30months,
includeDownstreamBrowsers: includeDownstream,
includeKaiOS: includeKaiOS
})
} else {
baselineVersions = bbm.getCompatibleVersions({
includeDownstreamBrowsers: includeDownstream,
includeKaiOS: includeKaiOS
})
}
return resolve(bbmTransform(baselineVersions), context)
}
},
popularity: {
matches: ['sign', 'popularity'],
regexp: /^(>=?|<=?)\s*(\d+|\d+\.\d+|\.\d+)%$/,
@@ -798,17 +922,7 @@ var QUERIES = {
regexp: /^(>=?|<=?)\s*(\d+|\d+\.\d+|\.\d+)%\s+in\s+(\S+)\s+stats$/,
select: function (context, node) {
var popularity = parseFloat(node.popularity)
var stats = env.loadStat(context, node.config, browserslist.data)
if (stats) {
context.customUsage = {}
for (var browser in stats) {
fillUsage(context.customUsage, browser, stats[browser])
}
}
if (!context.customUsage) {
throw new BrowserslistError('Custom usage statistics was not provided')
}
var usage = context.customUsage
var usage = loadCustomUsage(context, node.config)
return Object.keys(usage).reduce(function (result, version) {
var percentage = usage[version]
if (percentage == null) {
@@ -882,26 +996,37 @@ var QUERIES = {
regexp: /^cover\s+(\d+|\d+\.\d+|\.\d+)%\s+in\s+(my\s+stats|(alt-)?\w\w)$/i,
select: coverQuery
},
cover_config: {
matches: ['coverage', 'config'],
regexp: /^cover\s+(\d+|\d+\.\d+|\.\d+)%\s+in\s+(\S+)\s+stats$/i,
select: coverQuery
},
supports: {
matches: ['feature'],
regexp: /^supports\s+([\w-]+)$/,
matches: ['supportType', 'feature'],
regexp: /^(?:(fully|partially)\s+)?supports\s+([\w-]+)$/,
select: function (context, node) {
env.loadFeature(browserslist.cache, node.feature)
var withPartial = node.supportType !== 'fully'
var features = browserslist.cache[node.feature]
var result = []
for (var name in features) {
var data = byName(name, context)
// Only check desktop when latest released mobile has support
var iMax = data.released.length - 1
while (iMax >= 0) {
if (data.released[iMax] in features[name]) break
iMax--
}
var checkDesktop =
context.mobileToDesktop &&
name in browserslist.desktopNames &&
isSupported(features[name][data.released.slice(-1)[0]])
isSupported(features[name][data.released[iMax]], withPartial)
data.versions.forEach(function (version) {
var flags = features[name][version]
if (flags === undefined && checkDesktop) {
flags = features[browserslist.desktopNames[name]][version]
}
if (isSupported(flags)) {
if (isSupported(flags, withPartial)) {
result.push(name + ' ' + version)
}
})
@@ -1001,7 +1126,7 @@ var QUERIES = {
matches: [],
regexp: /^(firefox|ff|fx)\s+esr$/i,
select: function () {
return ['firefox 102', 'firefox 115']
return ['firefox 140']
}
},
opera_mini_all: {
@@ -1113,6 +1238,7 @@ var QUERIES = {
browserslist_config: {
matches: [],
regexp: /^browserslist config$/i,
needsPath: true,
select: function (context) {
return browserslist(undefined, context)
}
@@ -1120,6 +1246,7 @@ var QUERIES = {
extends: {
matches: ['config'],
regexp: /^extends (.+)$/i,
needsPath: true,
select: function (context, node) {
return resolve(env.loadQueries(context, node.config), context)
}