@serwist/utils 9.5.2 → 9.5.3
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/browserslist.d.ts +9 -0
- package/dist/browserslist.d.ts.map +1 -0
- package/dist/compare.d.ts +2 -0
- package/dist/compare.d.ts.map +1 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +70 -1
- package/dist/{nonNullable.d.ts → non-nullable.d.ts} +1 -1
- package/dist/non-nullable.d.ts.map +1 -0
- package/dist/semver.d.ts +2 -0
- package/dist/semver.d.ts.map +1 -0
- package/dist/{toUnix.d.ts → to-unix.d.ts} +1 -1
- package/dist/to-unix.d.ts.map +1 -0
- package/package.json +11 -2
- package/src/browserslist.ts +67 -0
- package/src/compare.ts +5 -0
- package/src/constants.ts +4 -0
- package/src/index.ts +6 -2
- package/src/semver.ts +11 -0
- package/dist/nonNullable.d.ts.map +0 -1
- package/dist/toUnix.d.ts.map +0 -1
- /package/src/{nonNullable.ts → non-nullable.ts} +0 -0
- /package/src/{toUnix.ts → to-unix.ts} +0 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type Browserslist from "browserslist";
|
|
2
|
+
/**
|
|
3
|
+
* Loads and converts Browserslist into esbuild's `target` option.
|
|
4
|
+
*
|
|
5
|
+
* @param cwd
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
export declare const browserslistToEsbuild: (browserslist: typeof Browserslist, cwd: string, defaultBrowserslist: string[]) => string[];
|
|
9
|
+
//# sourceMappingURL=browserslist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserslist.d.ts","sourceRoot":"","sources":["../src/browserslist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,cAAc,CAAC;AAO7C;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,cAAc,OAAO,YAAY,EAAE,KAAK,MAAM,EAAE,qBAAqB,MAAM,EAAE,KAAG,MAAM,EAqD3H,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../src/compare.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,eAI5D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,eAAO,MAAM,yBAAyB,UAAmG,CAAC;AAE1I,eAAO,MAAM,+BAA+B,UAA0C,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import { nonNullable } from "./
|
|
1
|
+
import { nonNullable } from "./non-nullable.js";
|
|
2
2
|
import { parallel } from "./parallel.js";
|
|
3
|
-
import { toUnix } from "./
|
|
3
|
+
import { toUnix } from "./to-unix.js";
|
|
4
|
+
export { browserslistToEsbuild } from "./browserslist.js";
|
|
5
|
+
export { compare } from "./compare.js";
|
|
6
|
+
export { SUPPORTED_ESBUILD_TARGETS, UNSUPPORTED_BROWSERLIST_TARGETS } from "./constants.js";
|
|
7
|
+
export { compareSemver } from "./semver.js";
|
|
4
8
|
export { nonNullable, parallel, toUnix };
|
|
5
9
|
export type * from "./types.js";
|
|
6
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,yBAAyB,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAEzC,mBAAmB,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -28,4 +28,73 @@ const parallel = async (limit, array, func)=>{
|
|
|
28
28
|
|
|
29
29
|
const toUnix = (p)=>p.replace(/\\/g, "/").replace(/(?<!^)\/+/g, "/");
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
const compare = (a, b)=>{
|
|
32
|
+
if (a < b) return -1;
|
|
33
|
+
if (a > b) return 1;
|
|
34
|
+
return 0;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const SUPPORTED_ESBUILD_TARGETS = [
|
|
38
|
+
"chrome",
|
|
39
|
+
"deno",
|
|
40
|
+
"edge",
|
|
41
|
+
"firefox",
|
|
42
|
+
"hermes",
|
|
43
|
+
"ie",
|
|
44
|
+
"ios",
|
|
45
|
+
"node",
|
|
46
|
+
"opera",
|
|
47
|
+
"rhino",
|
|
48
|
+
"safari"
|
|
49
|
+
];
|
|
50
|
+
const UNSUPPORTED_BROWSERLIST_TARGETS = [
|
|
51
|
+
"android 4",
|
|
52
|
+
"android 3",
|
|
53
|
+
"android 2"
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
const compareSemver = (a, b)=>{
|
|
57
|
+
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));
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const browserslistToEsbuild = (browserslist, cwd, defaultBrowserslist)=>{
|
|
61
|
+
const browserslistConfig = browserslist.loadConfig({
|
|
62
|
+
path: cwd
|
|
63
|
+
}) ?? defaultBrowserslist;
|
|
64
|
+
return browserslist(browserslistConfig).filter((query)=>!UNSUPPORTED_BROWSERLIST_TARGETS.some((target)=>query.startsWith(target))).map((query)=>{
|
|
65
|
+
const modified = query === "safari TP" ? browserslist("last 1 safari version")[0] : query;
|
|
66
|
+
const split = modified.split(" ");
|
|
67
|
+
if (split[0] === "android" || split[0] === "and_chr") {
|
|
68
|
+
split[0] = "chrome";
|
|
69
|
+
}
|
|
70
|
+
if (split[0] === "and_ff") {
|
|
71
|
+
split[0] = "firefox";
|
|
72
|
+
}
|
|
73
|
+
if (split[0] === "ios_saf" || split[0] === "ios") {
|
|
74
|
+
split[0] = "safari";
|
|
75
|
+
}
|
|
76
|
+
if (split[1].includes("-")) {
|
|
77
|
+
split[1] = split[1].slice(0, split[1].indexOf("-"));
|
|
78
|
+
}
|
|
79
|
+
if (split[1].endsWith(".0")) {
|
|
80
|
+
split[1] = split[1].slice(0, -2);
|
|
81
|
+
}
|
|
82
|
+
return split;
|
|
83
|
+
}).filter((split)=>SUPPORTED_ESBUILD_TARGETS.includes(split[0]) && /^\d+(\.\d+)*$/.test(split[1])).sort((a, b)=>{
|
|
84
|
+
if (a[0] === b[0]) {
|
|
85
|
+
return compareSemver(b[1].split("."), a[1].split("."));
|
|
86
|
+
} else {
|
|
87
|
+
return compare(a[0], b[0]);
|
|
88
|
+
}
|
|
89
|
+
}).reduce((acc, browser)=>{
|
|
90
|
+
const existingIndex = acc.findIndex((br)=>br[0] === browser[0]);
|
|
91
|
+
if (existingIndex !== -1) {
|
|
92
|
+
acc[existingIndex][1] = browser[1];
|
|
93
|
+
} else {
|
|
94
|
+
acc.push(browser);
|
|
95
|
+
}
|
|
96
|
+
return acc;
|
|
97
|
+
}, []).map((split)=>split.join(""));
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export { SUPPORTED_ESBUILD_TARGETS, UNSUPPORTED_BROWSERLIST_TARGETS, browserslistToEsbuild, compare, compareSemver, nonNullable, parallel, toUnix };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const nonNullable: <T>(value: T) => value is NonNullable<T>;
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=non-nullable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"non-nullable.d.ts","sourceRoot":"","sources":["../src/non-nullable.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAA0C,CAAC"}
|
package/dist/semver.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semver.d.ts","sourceRoot":"","sources":["../src/semver.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,GAAI,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,eAMrD,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const toUnix: (p: string) => string;
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=to-unix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-unix.d.ts","sourceRoot":"","sources":["../src/to-unix.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,GAAI,GAAG,MAAM,WAAqD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serwist/utils",
|
|
3
|
-
"version": "9.5.
|
|
3
|
+
"version": "9.5.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "This module contains utilities used by Serwist packages.",
|
|
6
6
|
"files": [
|
|
@@ -29,9 +29,18 @@
|
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/common-tags": "1.8.4",
|
|
32
|
+
"browserslist": "4.28.1",
|
|
32
33
|
"rollup": "4.57.0",
|
|
33
34
|
"typescript": "5.9.3",
|
|
34
|
-
"@serwist/configs": "9.5.
|
|
35
|
+
"@serwist/configs": "9.5.3"
|
|
36
|
+
},
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"browserslist": ">=4"
|
|
39
|
+
},
|
|
40
|
+
"peerDependenciesMeta": {
|
|
41
|
+
"browserslist": {
|
|
42
|
+
"optional": true
|
|
43
|
+
}
|
|
35
44
|
},
|
|
36
45
|
"scripts": {
|
|
37
46
|
"build": "rimraf dist && NODE_ENV=production rollup --config rollup.config.js",
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type Browserslist from "browserslist";
|
|
2
|
+
import { compare } from "./compare.js";
|
|
3
|
+
import { SUPPORTED_ESBUILD_TARGETS, UNSUPPORTED_BROWSERLIST_TARGETS } from "./constants.js";
|
|
4
|
+
import { compareSemver } from "./semver.js";
|
|
5
|
+
|
|
6
|
+
// Original: https://github.com/marcofugaro/browserslist-to-esbuild/blob/0875f1a4ec71f206a634ba406c3528ca5ecf04de/src/index.js
|
|
7
|
+
// License: MIT
|
|
8
|
+
/**
|
|
9
|
+
* Loads and converts Browserslist into esbuild's `target` option.
|
|
10
|
+
*
|
|
11
|
+
* @param cwd
|
|
12
|
+
* @returns
|
|
13
|
+
*/
|
|
14
|
+
export const browserslistToEsbuild = (browserslist: typeof Browserslist, cwd: string, defaultBrowserslist: string[]): string[] => {
|
|
15
|
+
const browserslistConfig = browserslist.loadConfig({ path: cwd }) ?? defaultBrowserslist;
|
|
16
|
+
return (
|
|
17
|
+
browserslist(browserslistConfig)
|
|
18
|
+
// Filter out legacy Android webview to avoid converting them into Chrome targets
|
|
19
|
+
.filter((query) => !UNSUPPORTED_BROWSERLIST_TARGETS.some((target) => query.startsWith(target)))
|
|
20
|
+
.map((query) => {
|
|
21
|
+
const modified = query === "safari TP" ? browserslist("last 1 safari version")[0] : query;
|
|
22
|
+
const split = modified.split(" ");
|
|
23
|
+
// https://github.com/browserslist/browserslist/blob/5cad191bc1a1e5beb7768ca263503cc15d0dcc7d/README.md?plain=1#L329-L350
|
|
24
|
+
// https://esbuild.github.io/api/#target
|
|
25
|
+
if (split[0] === "android" || split[0] === "and_chr") {
|
|
26
|
+
split[0] = "chrome";
|
|
27
|
+
}
|
|
28
|
+
if (split[0] === "and_ff") {
|
|
29
|
+
split[0] = "firefox";
|
|
30
|
+
}
|
|
31
|
+
if (split[0] === "ios_saf" || split[0] === "ios") {
|
|
32
|
+
split[0] = "safari";
|
|
33
|
+
}
|
|
34
|
+
// Remove upper version bound
|
|
35
|
+
if (split[1].includes("-")) {
|
|
36
|
+
split[1] = split[1].slice(0, split[1].indexOf("-"));
|
|
37
|
+
}
|
|
38
|
+
// Trim ending .0
|
|
39
|
+
if (split[1].endsWith(".0")) {
|
|
40
|
+
split[1] = split[1].slice(0, -2);
|
|
41
|
+
}
|
|
42
|
+
return split;
|
|
43
|
+
})
|
|
44
|
+
// Remove unsupported browsers and invalid versions
|
|
45
|
+
.filter((split) => SUPPORTED_ESBUILD_TARGETS.includes(split[0]) && /^\d+(\.\d+)*$/.test(split[1]))
|
|
46
|
+
// Re-sort the result such that the oldest versions end up the latest, same as how
|
|
47
|
+
// Browserslist does it.
|
|
48
|
+
.sort((a, b) => {
|
|
49
|
+
if (a[0] === b[0]) {
|
|
50
|
+
return compareSemver(b[1].split("."), a[1].split("."));
|
|
51
|
+
} else {
|
|
52
|
+
return compare(a[0], b[0]);
|
|
53
|
+
}
|
|
54
|
+
})
|
|
55
|
+
// Only pick the oldest included version for each browser to avoid duplications.
|
|
56
|
+
.reduce((acc, browser) => {
|
|
57
|
+
const existingIndex = acc.findIndex((br) => br[0] === browser[0]);
|
|
58
|
+
if (existingIndex !== -1) {
|
|
59
|
+
acc[existingIndex][1] = browser[1];
|
|
60
|
+
} else {
|
|
61
|
+
acc.push(browser);
|
|
62
|
+
}
|
|
63
|
+
return acc;
|
|
64
|
+
}, [] as string[][])
|
|
65
|
+
.map((split) => split.join(""))
|
|
66
|
+
);
|
|
67
|
+
};
|
package/src/compare.ts
ADDED
package/src/constants.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
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/index.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import { nonNullable } from "./
|
|
1
|
+
import { nonNullable } from "./non-nullable.js";
|
|
2
2
|
import { parallel } from "./parallel.js";
|
|
3
|
-
import { toUnix } from "./
|
|
3
|
+
import { toUnix } from "./to-unix.js";
|
|
4
4
|
|
|
5
|
+
export { browserslistToEsbuild } from "./browserslist.js";
|
|
6
|
+
export { compare } from "./compare.js";
|
|
7
|
+
export { SUPPORTED_ESBUILD_TARGETS, UNSUPPORTED_BROWSERLIST_TARGETS } from "./constants.js";
|
|
8
|
+
export { compareSemver } from "./semver.js";
|
|
5
9
|
export { nonNullable, parallel, toUnix };
|
|
6
10
|
|
|
7
11
|
export type * from "./types.js";
|
package/src/semver.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Source: https://github.com/browserslist/browserslist/blob/5cad191bc1a1e5beb7768ca263503cc15d0dcc7d/index.js#L139-L151
|
|
2
|
+
// License: MIT
|
|
3
|
+
import { compare } from "./compare.js";
|
|
4
|
+
|
|
5
|
+
export const compareSemver = (a: string[], b: string[]) => {
|
|
6
|
+
return (
|
|
7
|
+
compare(Number.parseInt(a[0], 10), Number.parseInt(b[0], 10)) ||
|
|
8
|
+
compare(Number.parseInt(a[1] || "0", 10), Number.parseInt(b[1] || "0", 10)) ||
|
|
9
|
+
compare(Number.parseInt(a[2] || "0", 10), Number.parseInt(b[2] || "0", 10))
|
|
10
|
+
);
|
|
11
|
+
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nonNullable.d.ts","sourceRoot":"","sources":["../src/nonNullable.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAA0C,CAAC"}
|
package/dist/toUnix.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toUnix.d.ts","sourceRoot":"","sources":["../src/toUnix.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,GAAI,GAAG,MAAM,WAAqD,CAAC"}
|
|
File without changes
|
|
File without changes
|