@serwist/next 9.5.2 → 9.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.config.d.ts.map +1 -1
- package/dist/index.config.js +3 -68
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -4
- package/dist/lib/config/constants.d.ts +1 -3
- package/dist/lib/config/constants.d.ts.map +1 -1
- package/dist/lib/config/utils.d.ts +0 -7
- package/dist/lib/config/utils.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/index.config.ts +5 -2
- package/src/index.ts +13 -5
- package/src/lib/config/constants.ts +0 -4
- package/src/lib/config/utils.ts +1 -81
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.config.d.ts","sourceRoot":"","sources":["../src/index.config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.config.d.ts","sourceRoot":"","sources":["../src/index.config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAkB,MAAM,uBAAuB,CAAC;AAK7E;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB;;;;OAIG;IACH,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5G;;;;OAIG;IACH,cAAc,EAAE,CACd,eAAe,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,EAC7F,OAAO,CAAC,EAAE,cAAc,KACrB,OAAO,CAAC,YAAY,CAAC,CAAC;CAC5B;AAED,eAAO,MAAM,OAAO,EAAE,OA6ErB,CAAC;AAOF,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC,YAAY,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/index.config.js
CHANGED
|
@@ -1,28 +1,10 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { rebasePath } from '@serwist/build';
|
|
4
|
-
import {
|
|
4
|
+
import { browserslistToEsbuild } from '@serwist/utils';
|
|
5
5
|
import browserslist from 'browserslist';
|
|
6
6
|
import { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_BUILD, MODERN_BROWSERSLIST_TARGET } from 'next/constants.js';
|
|
7
|
-
|
|
8
|
-
const SUPPORTED_ESBUILD_TARGETS = [
|
|
9
|
-
"chrome",
|
|
10
|
-
"deno",
|
|
11
|
-
"edge",
|
|
12
|
-
"firefox",
|
|
13
|
-
"hermes",
|
|
14
|
-
"ie",
|
|
15
|
-
"ios",
|
|
16
|
-
"node",
|
|
17
|
-
"opera",
|
|
18
|
-
"rhino",
|
|
19
|
-
"safari"
|
|
20
|
-
];
|
|
21
|
-
const UNSUPPORTED_BROWSERLIST_TARGETS = [
|
|
22
|
-
"android 4",
|
|
23
|
-
"android 3",
|
|
24
|
-
"android 2"
|
|
25
|
-
];
|
|
7
|
+
import { createRequire } from 'module';
|
|
26
8
|
|
|
27
9
|
const __require = createRequire(import.meta.url);
|
|
28
10
|
const nextConfig = __require("next/dist/server/config.js");
|
|
@@ -36,53 +18,6 @@ const generateGlobPatterns = (distDir)=>[
|
|
|
36
18
|
`${distDir}static/**/*.{js,css,html,ico,apng,png,avif,jpg,jpeg,jfif,pjpeg,pjp,gif,svg,webp,json,webmanifest}`,
|
|
37
19
|
"public/**/*"
|
|
38
20
|
];
|
|
39
|
-
const compare = (a, b)=>{
|
|
40
|
-
if (a < b) return -1;
|
|
41
|
-
if (a > b) return 1;
|
|
42
|
-
return 0;
|
|
43
|
-
};
|
|
44
|
-
const compareSemver = (a, b)=>{
|
|
45
|
-
return compare(Number.parseInt(a[0], 10), Number.parseInt(b[0], 10)) || compare(Number.parseInt(a[1] || "0", 10), Number.parseInt(b[1] || "0", 10)) || compare(Number.parseInt(a[2] || "0", 10), Number.parseInt(b[2] || "0", 10));
|
|
46
|
-
};
|
|
47
|
-
const loadBrowserslist = (cwd)=>{
|
|
48
|
-
const browserslistConfig = browserslist.loadConfig({
|
|
49
|
-
path: cwd
|
|
50
|
-
}) ?? MODERN_BROWSERSLIST_TARGET;
|
|
51
|
-
return browserslist(browserslistConfig).filter((query)=>!UNSUPPORTED_BROWSERLIST_TARGETS.some((target)=>query.startsWith(target))).map((query)=>{
|
|
52
|
-
const modified = query === "safari TP" ? browserslist("last 1 safari version")[0] : query;
|
|
53
|
-
const split = modified.split(" ");
|
|
54
|
-
if (split[0] === "android" || split[0] === "and_chr") {
|
|
55
|
-
split[0] = "chrome";
|
|
56
|
-
}
|
|
57
|
-
if (split[0] === "and_ff") {
|
|
58
|
-
split[0] = "firefox";
|
|
59
|
-
}
|
|
60
|
-
if (split[0] === "ios_saf" || split[0] === "ios") {
|
|
61
|
-
split[0] = "safari";
|
|
62
|
-
}
|
|
63
|
-
if (split[1].includes("-")) {
|
|
64
|
-
split[1] = split[1].slice(0, split[1].indexOf("-"));
|
|
65
|
-
}
|
|
66
|
-
if (split[1].endsWith(".0")) {
|
|
67
|
-
split[1] = split[1].slice(0, -2);
|
|
68
|
-
}
|
|
69
|
-
return split;
|
|
70
|
-
}).filter((split)=>SUPPORTED_ESBUILD_TARGETS.includes(split[0]) && /^\d+(\.\d+)*$/.test(split[1])).sort((a, b)=>{
|
|
71
|
-
if (a[0] === b[0]) {
|
|
72
|
-
return compareSemver(b[1].split("."), a[1].split("."));
|
|
73
|
-
} else {
|
|
74
|
-
return compare(a[0], b[0]);
|
|
75
|
-
}
|
|
76
|
-
}).reduce((acc, browser)=>{
|
|
77
|
-
const existingIndex = acc.findIndex((br)=>br[0] === browser[0]);
|
|
78
|
-
if (existingIndex !== -1) {
|
|
79
|
-
acc[existingIndex][1] = browser[1];
|
|
80
|
-
} else {
|
|
81
|
-
acc.push(browser);
|
|
82
|
-
}
|
|
83
|
-
return acc;
|
|
84
|
-
}, []).map((split)=>split.join(""));
|
|
85
|
-
};
|
|
86
21
|
|
|
87
22
|
const _cwd = process.cwd();
|
|
88
23
|
const _isDev = process.env.NODE_ENV === "development";
|
|
@@ -168,7 +103,7 @@ const serwist = async (options, nextConfig, { cwd = _cwd, isDev = _isDev } = {})
|
|
|
168
103
|
],
|
|
169
104
|
esbuildOptions: {
|
|
170
105
|
...cliOptions.esbuildOptions,
|
|
171
|
-
target: cliOptions.esbuildOptions?.target ??
|
|
106
|
+
target: cliOptions.esbuildOptions?.target ?? browserslistToEsbuild(browserslist, cwd, MODERN_BROWSERSLIST_TARGET)
|
|
172
107
|
}
|
|
173
108
|
};
|
|
174
109
|
};
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAIvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAIvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAInE;;;;GAIG;AACH,QAAA,MAAM,eAAe,GAAI,aAAa,qBAAqB,KAAG,CAAC,CAAC,UAAU,CAAC,EAAE,UAAU,KAAK,UAAU,CAuOrG,CAAC;AAEF,eAAe,eAAe,CAAC;AAC/B,OAAO,EAAE,6BAA6B,EAAE,CAAC;AACzC,YAAY,EAAE,qBAAqB,IAAI,aAAa,EAAE,6BAA6B,IAAI,qBAAqB,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -105,11 +105,20 @@ const validateInjectManifestOptions = (input)=>{
|
|
|
105
105
|
};
|
|
106
106
|
|
|
107
107
|
const dirname = "__dirname" in globalThis ? __dirname : fileURLToPath(new URL(".", import.meta.url));
|
|
108
|
-
let warnedTurbopack = false;
|
|
109
108
|
const withSerwistInit = (userOptions)=>{
|
|
110
|
-
if (!
|
|
111
|
-
|
|
112
|
-
console.warn(`[@serwist/next] WARNING: You are using '@serwist/next' with \`next dev --turbopack\`, but
|
|
109
|
+
if (!process.env.SERWIST_SUPPRESS_TURBOPACK_WARNING && process.env.TURBOPACK && !userOptions.disable) {
|
|
110
|
+
process.env.SERWIST_SUPPRESS_TURBOPACK_WARNING = "1";
|
|
111
|
+
console.warn(`[@serwist/next] WARNING: You are using '@serwist/next' with \`next dev --turbopack\`, but it doesn't support Turbopack. Do one of the following:
|
|
112
|
+
|
|
113
|
+
- Set \`disable\` to \`process.env.NODE_ENV !== "production"\`.
|
|
114
|
+
|
|
115
|
+
- Use webpack by running \`next dev --webpack\` instead of \`next dev --turbopack\`.
|
|
116
|
+
|
|
117
|
+
- Migrate to '@serwist/turbopack' which has experimental support for Turbopack. See https://serwist.pages.dev/docs/next/turbo for more information.
|
|
118
|
+
|
|
119
|
+
- Migrate to configurator mode which has support for Turbopack. See https://serwist.pages.dev/docs/next/config for more information.
|
|
120
|
+
|
|
121
|
+
Follow https://github.com/serwist/serwist/issues/54 for progress on Serwist + Turbopack. You can also suppress this warning by setting SERWIST_SUPPRESS_TURBOPACK_WARNING=1.\n`);
|
|
113
122
|
}
|
|
114
123
|
return (nextConfig = {})=>({
|
|
115
124
|
...nextConfig,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/config/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/config/constants.ts"],"names":[],"mappings":""}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
1
|
export declare const loadNextConfig: (cwd: string, isDev: boolean) => Promise<import("next/dist/server/config-shared.js").NextConfigComplete>;
|
|
2
2
|
export declare const generateGlobPatterns: (distDir: string) => string[];
|
|
3
|
-
/**
|
|
4
|
-
* Loads and converts Browserslist into esbuild's `target` option.
|
|
5
|
-
*
|
|
6
|
-
* @param cwd
|
|
7
|
-
* @returns
|
|
8
|
-
*/
|
|
9
|
-
export declare const loadBrowserslist: (cwd: string) => string[];
|
|
10
3
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/config/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/config/utils.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,EAAE,OAAO,OAAO,4EAKzD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,SAAS,MAAM,aAGnD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serwist/next",
|
|
3
|
-
"version": "9.5.
|
|
3
|
+
"version": "9.5.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A module that integrates Serwist into your Next.js application.",
|
|
6
6
|
"files": [
|
|
@@ -81,11 +81,11 @@
|
|
|
81
81
|
"kolorist": "1.8.0",
|
|
82
82
|
"semver": "7.7.3",
|
|
83
83
|
"zod": "4.3.6",
|
|
84
|
-
"@serwist/build": "9.5.
|
|
85
|
-
"@serwist/utils": "9.5.
|
|
86
|
-
"@serwist/webpack-plugin": "9.5.
|
|
87
|
-
"@serwist/window": "9.5.
|
|
88
|
-
"serwist": "9.5.
|
|
84
|
+
"@serwist/build": "9.5.4",
|
|
85
|
+
"@serwist/utils": "9.5.4",
|
|
86
|
+
"@serwist/webpack-plugin": "9.5.4",
|
|
87
|
+
"@serwist/window": "9.5.4",
|
|
88
|
+
"serwist": "9.5.4"
|
|
89
89
|
},
|
|
90
90
|
"devDependencies": {
|
|
91
91
|
"@types/node": "25.1.0",
|
|
@@ -98,14 +98,14 @@
|
|
|
98
98
|
"type-fest": "5.4.2",
|
|
99
99
|
"typescript": "5.9.3",
|
|
100
100
|
"webpack": "5.104.1",
|
|
101
|
-
"@serwist/cli": "9.5.
|
|
102
|
-
"@serwist/configs": "9.5.
|
|
101
|
+
"@serwist/cli": "9.5.4",
|
|
102
|
+
"@serwist/configs": "9.5.4"
|
|
103
103
|
},
|
|
104
104
|
"peerDependencies": {
|
|
105
105
|
"next": ">=14.0.0",
|
|
106
106
|
"react": ">=18.0.0",
|
|
107
107
|
"typescript": ">=5.0.0",
|
|
108
|
-
"@serwist/cli": "^9.5.
|
|
108
|
+
"@serwist/cli": "^9.5.4"
|
|
109
109
|
},
|
|
110
110
|
"peerDependenciesMeta": {
|
|
111
111
|
"@serwist/cli": {
|
package/src/index.config.ts
CHANGED
|
@@ -2,9 +2,12 @@ import fs from "node:fs";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { rebasePath } from "@serwist/build";
|
|
4
4
|
import type { BuildOptions } from "@serwist/cli";
|
|
5
|
+
import { browserslistToEsbuild } from "@serwist/utils";
|
|
6
|
+
import browserslist from "browserslist";
|
|
7
|
+
import { MODERN_BROWSERSLIST_TARGET } from "next/constants.js";
|
|
5
8
|
import type { NextConfigComplete } from "next/dist/server/config-shared.js";
|
|
6
9
|
import type { SerwistOptions } from "./lib/config/types.js";
|
|
7
|
-
import { generateGlobPatterns,
|
|
10
|
+
import { generateGlobPatterns, loadNextConfig } from "./lib/config/utils.js";
|
|
8
11
|
|
|
9
12
|
const _cwd = process.cwd();
|
|
10
13
|
const _isDev = process.env.NODE_ENV === "development";
|
|
@@ -116,7 +119,7 @@ export const serwist: Serwist = async (options, nextConfig, { cwd = _cwd, isDev
|
|
|
116
119
|
],
|
|
117
120
|
esbuildOptions: {
|
|
118
121
|
...cliOptions.esbuildOptions,
|
|
119
|
-
target: cliOptions.esbuildOptions?.target ??
|
|
122
|
+
target: cliOptions.esbuildOptions?.target ?? browserslistToEsbuild(browserslist, cwd, MODERN_BROWSERSLIST_TARGET),
|
|
120
123
|
},
|
|
121
124
|
};
|
|
122
125
|
};
|
package/src/index.ts
CHANGED
|
@@ -13,18 +13,26 @@ import { validateInjectManifestOptions } from "./lib/validator.js";
|
|
|
13
13
|
|
|
14
14
|
const dirname = "__dirname" in globalThis ? __dirname : fileURLToPath(new URL(".", import.meta.url));
|
|
15
15
|
|
|
16
|
-
let warnedTurbopack = false;
|
|
17
|
-
|
|
18
16
|
/**
|
|
19
17
|
* Integrates Serwist into your Next.js app.
|
|
20
18
|
* @param userOptions
|
|
21
19
|
* @returns
|
|
22
20
|
*/
|
|
23
21
|
const withSerwistInit = (userOptions: InjectManifestOptions): ((nextConfig?: NextConfig) => NextConfig) => {
|
|
24
|
-
if (!
|
|
25
|
-
|
|
22
|
+
if (!process.env.SERWIST_SUPPRESS_TURBOPACK_WARNING && process.env.TURBOPACK && !userOptions.disable) {
|
|
23
|
+
process.env.SERWIST_SUPPRESS_TURBOPACK_WARNING = "1";
|
|
26
24
|
console.warn(
|
|
27
|
-
`[@serwist/next] WARNING: You are using '@serwist/next' with \`next dev --turbopack\`, but
|
|
25
|
+
`[@serwist/next] WARNING: You are using '@serwist/next' with \`next dev --turbopack\`, but it doesn't support Turbopack. Do one of the following:
|
|
26
|
+
|
|
27
|
+
- Set \`disable\` to \`process.env.NODE_ENV !== "production"\`.
|
|
28
|
+
|
|
29
|
+
- Use webpack by running \`next dev --webpack\` instead of \`next dev --turbopack\`.
|
|
30
|
+
|
|
31
|
+
- Migrate to '@serwist/turbopack' which has experimental support for Turbopack. See https://serwist.pages.dev/docs/next/turbo for more information.
|
|
32
|
+
|
|
33
|
+
- Migrate to configurator mode which has support for Turbopack. See https://serwist.pages.dev/docs/next/config for more information.
|
|
34
|
+
|
|
35
|
+
Follow https://github.com/serwist/serwist/issues/54 for progress on Serwist + Turbopack. You can also suppress this warning by setting SERWIST_SUPPRESS_TURBOPACK_WARNING=1.\n`,
|
|
28
36
|
);
|
|
29
37
|
}
|
|
30
38
|
return (nextConfig = {}) => ({
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
/** @see https://esbuild.github.io/api/#target */
|
|
2
|
-
export const SUPPORTED_ESBUILD_TARGETS = ["chrome", "deno", "edge", "firefox", "hermes", "ie", "ios", "node", "opera", "rhino", "safari"];
|
|
3
|
-
|
|
4
|
-
export const UNSUPPORTED_BROWSERLIST_TARGETS = ["android 4", "android 3", "android 2"];
|
package/src/lib/config/utils.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { MODERN_BROWSERSLIST_TARGET, PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_BUILD } from "next/constants.js";
|
|
3
|
-
import { SUPPORTED_ESBUILD_TARGETS, UNSUPPORTED_BROWSERLIST_TARGETS } from "./constants.js";
|
|
1
|
+
import { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_BUILD } from "next/constants.js";
|
|
4
2
|
|
|
5
3
|
import nextConfig = require("next/dist/server/config.js");
|
|
6
4
|
|
|
@@ -15,81 +13,3 @@ export const generateGlobPatterns = (distDir: string) => [
|
|
|
15
13
|
`${distDir}static/**/*.{js,css,html,ico,apng,png,avif,jpg,jpeg,jfif,pjpeg,pjp,gif,svg,webp,json,webmanifest}`,
|
|
16
14
|
"public/**/*",
|
|
17
15
|
];
|
|
18
|
-
|
|
19
|
-
// Source: https://github.com/browserslist/browserslist/blob/5cad191bc1a1e5beb7768ca263503cc15d0dcc7d/index.js#L139-L151
|
|
20
|
-
// License: MIT
|
|
21
|
-
const compare = <T extends string | number>(a: T, b: T) => {
|
|
22
|
-
if (a < b) return -1;
|
|
23
|
-
if (a > b) return +1;
|
|
24
|
-
return 0;
|
|
25
|
-
};
|
|
26
|
-
const compareSemver = (a: string[], b: string[]) => {
|
|
27
|
-
return (
|
|
28
|
-
compare(Number.parseInt(a[0], 10), Number.parseInt(b[0], 10)) ||
|
|
29
|
-
compare(Number.parseInt(a[1] || "0", 10), Number.parseInt(b[1] || "0", 10)) ||
|
|
30
|
-
compare(Number.parseInt(a[2] || "0", 10), Number.parseInt(b[2] || "0", 10))
|
|
31
|
-
);
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
// Original: https://github.com/marcofugaro/browserslist-to-esbuild/blob/0875f1a4ec71f206a634ba406c3528ca5ecf04de/src/index.js
|
|
35
|
-
// License: MIT
|
|
36
|
-
/**
|
|
37
|
-
* Loads and converts Browserslist into esbuild's `target` option.
|
|
38
|
-
*
|
|
39
|
-
* @param cwd
|
|
40
|
-
* @returns
|
|
41
|
-
*/
|
|
42
|
-
export const loadBrowserslist = (cwd: string): string[] => {
|
|
43
|
-
const browserslistConfig = browserslist.loadConfig({ path: cwd }) ?? MODERN_BROWSERSLIST_TARGET;
|
|
44
|
-
return (
|
|
45
|
-
browserslist(browserslistConfig)
|
|
46
|
-
// Filter out legacy Android webview to avoid converting them into Chrome targets
|
|
47
|
-
.filter((query) => !UNSUPPORTED_BROWSERLIST_TARGETS.some((target) => query.startsWith(target)))
|
|
48
|
-
.map((query) => {
|
|
49
|
-
const modified = query === "safari TP" ? browserslist("last 1 safari version")[0] : query;
|
|
50
|
-
const split = modified.split(" ");
|
|
51
|
-
// https://github.com/browserslist/browserslist/blob/5cad191bc1a1e5beb7768ca263503cc15d0dcc7d/README.md?plain=1#L329-L350
|
|
52
|
-
// https://esbuild.github.io/api/#target
|
|
53
|
-
if (split[0] === "android" || split[0] === "and_chr") {
|
|
54
|
-
split[0] = "chrome";
|
|
55
|
-
}
|
|
56
|
-
if (split[0] === "and_ff") {
|
|
57
|
-
split[0] = "firefox";
|
|
58
|
-
}
|
|
59
|
-
if (split[0] === "ios_saf" || split[0] === "ios") {
|
|
60
|
-
split[0] = "safari";
|
|
61
|
-
}
|
|
62
|
-
// Remove upper version bound
|
|
63
|
-
if (split[1].includes("-")) {
|
|
64
|
-
split[1] = split[1].slice(0, split[1].indexOf("-"));
|
|
65
|
-
}
|
|
66
|
-
// Trim ending .0
|
|
67
|
-
if (split[1].endsWith(".0")) {
|
|
68
|
-
split[1] = split[1].slice(0, -2);
|
|
69
|
-
}
|
|
70
|
-
return split;
|
|
71
|
-
})
|
|
72
|
-
// Remove unsupported browsers and invalid versions
|
|
73
|
-
.filter((split) => SUPPORTED_ESBUILD_TARGETS.includes(split[0]) && /^\d+(\.\d+)*$/.test(split[1]))
|
|
74
|
-
// Re-sort the result such that the oldest versions end up the latest, same as how
|
|
75
|
-
// Browserslist does it.
|
|
76
|
-
.sort((a, b) => {
|
|
77
|
-
if (a[0] === b[0]) {
|
|
78
|
-
return compareSemver(b[1].split("."), a[1].split("."));
|
|
79
|
-
} else {
|
|
80
|
-
return compare(a[0], b[0]);
|
|
81
|
-
}
|
|
82
|
-
})
|
|
83
|
-
// Only pick the oldest included version for each browser to avoid duplications.
|
|
84
|
-
.reduce((acc, browser) => {
|
|
85
|
-
const existingIndex = acc.findIndex((br) => br[0] === browser[0]);
|
|
86
|
-
if (existingIndex !== -1) {
|
|
87
|
-
acc[existingIndex][1] = browser[1];
|
|
88
|
-
} else {
|
|
89
|
-
acc.push(browser);
|
|
90
|
-
}
|
|
91
|
-
return acc;
|
|
92
|
-
}, [] as string[][])
|
|
93
|
-
.map((split) => split.join(""))
|
|
94
|
-
);
|
|
95
|
-
};
|