@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.
@@ -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;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAoC,MAAM,uBAAuB,CAAC;AAK/F;;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"}
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"}
@@ -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 { createRequire } from 'module';
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 ?? loadBrowserslist(cwd)
106
+ target: cliOptions.esbuildOptions?.target ?? browserslistToEsbuild(browserslist, cwd, MODERN_BROWSERSLIST_TARGET)
172
107
  }
173
108
  };
174
109
  };
@@ -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;AAMnE;;;;GAIG;AACH,QAAA,MAAM,eAAe,GAAI,aAAa,qBAAqB,KAAG,CAAC,CAAC,UAAU,CAAC,EAAE,UAAU,KAAK,UAAU,CA6NrG,CAAC;AAEF,eAAe,eAAe,CAAC;AAC/B,OAAO,EAAE,6BAA6B,EAAE,CAAC;AACzC,YAAY,EAAE,qBAAqB,IAAI,aAAa,EAAE,6BAA6B,IAAI,qBAAqB,EAAE,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 (!warnedTurbopack && process.env.TURBOPACK && !userOptions.disable && !process.env.SERWIST_SUPPRESS_TURBOPACK_WARNING) {
111
- warnedTurbopack = true;
112
- console.warn(`[@serwist/next] WARNING: You are using '@serwist/next' with \`next dev --turbopack\`, but Serwist doesn't support Turbopack at the moment. It is recommended that you set \`disable\` to \`process.env.NODE_ENV !== "production"\`. 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.`);
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,4 +1,2 @@
1
- /** @see https://esbuild.github.io/api/#target */
2
- export declare const SUPPORTED_ESBUILD_TARGETS: string[];
3
- export declare const UNSUPPORTED_BROWSERLIST_TARGETS: string[];
1
+ export {};
4
2
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/config/constants.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,eAAO,MAAM,yBAAyB,UAAmG,CAAC;AAE1I,eAAO,MAAM,+BAA+B,UAA0C,CAAC"}
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":"AAMA,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,EAAE,OAAO,OAAO,4EAKzD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,SAAS,MAAM,aAGnD,CAAC;AAmBF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,KAAG,MAAM,EAqDpD,CAAC"}
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.2",
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.2",
85
- "@serwist/utils": "9.5.2",
86
- "@serwist/webpack-plugin": "9.5.2",
87
- "@serwist/window": "9.5.2",
88
- "serwist": "9.5.2"
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.2",
102
- "@serwist/configs": "9.5.2"
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.2"
108
+ "@serwist/cli": "^9.5.4"
109
109
  },
110
110
  "peerDependenciesMeta": {
111
111
  "@serwist/cli": {
@@ -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, loadBrowserslist, loadNextConfig } from "./lib/config/utils.js";
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 ?? loadBrowserslist(cwd),
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 (!warnedTurbopack && process.env.TURBOPACK && !userOptions.disable && !process.env.SERWIST_SUPPRESS_TURBOPACK_WARNING) {
25
- warnedTurbopack = true;
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 Serwist doesn't support Turbopack at the moment. It is recommended that you set \`disable\` to \`process.env.NODE_ENV !== "production"\`. 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.`,
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"];
@@ -1,6 +1,4 @@
1
- import browserslist from "browserslist";
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
- };