trousse 2.11.0 → 2.12.0
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.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/urls.d.ts +2 -0
- package/dist/urls.js +17 -5
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -9,5 +9,5 @@ import { anyWordMatchesAnyOf, endsWithAnyOf, escapeRegex, getAnyOf, includesAnyO
|
|
|
9
9
|
import { createAcceptHeader, feedMimeTypes, genericFeedMimeTypes, genericHtmlMimeTypes, htmlMimeTypes } from "./mimes.js";
|
|
10
10
|
import { omit, pick, toMap, trimObject } from "./objects.js";
|
|
11
11
|
import { sleep } from "./timers.js";
|
|
12
|
-
import { addMissingProtocol, addMissingScheme, createUrlVariants, decodeSegment, fixMalformedProtocol, fixMalformedQuery, fixMalformedScheme, getPathSegments, getRegistrableDomain, getSubdomain, isHostOf, isHostOrSubdomainOf, isHttpUrl, isIpAddress, isSubdomainOf, normalizeUrl, parseUrl, resolveFeedProtocol, resolveFeedScheme, resolveUrl, stripWww, upgradeProtocol, upgradeScheme } from "./urls.js";
|
|
13
|
-
export { type AnyOf, type DeepOmit, type IsPlainObject, type MaybePromise, type NormalizeOptions, type Nullish, type PartialNullish, type Pattern, type RegistrableDomainOptions, type WeightedMimeType, addMissingProtocol, addMissingScheme, anyWordMatchesAnyOf, archiveExtensions, audioExtensions, codeExtensions, coerceArray, coerceBoolean, coerceDate, coerceNumber, coerceSingular, coerceString, createAcceptHeader, createUrlVariants, decodeSegment, documentExtensions, endsWithAnyOf, escapeHtml, escapeRegex, feedMimeTypes, fixMalformedProtocol, fixMalformedQuery, fixMalformedScheme, flashExtensions, fontExtensions, genericFeedMimeTypes, genericHtmlMimeTypes, getAnyOf, getPathSegments, getRegistrableDomain, getSubdomain, htmlMimeTypes, imageExtensions, includesAnyOf, installerExtensions, isAnyOf, isBoolean, isFunction, isHostOf, isHostOrSubdomainOf, isHttpUrl, isIpAddress, isJsonLike, isNonEmptyString, isNullish, isNumber, isObject, isParseableJson, isPlainObject, isPresent, isString, isSubdomainOf, isValidDate, normalizeUrl, omit, omitEmpty, parseUrl, pick, resolveFeedProtocol, resolveFeedScheme, resolveUrl, sleep, startsWithAnyOf, stripWww, subtitleExtensions, t, toMap, trimObject, tx, upgradeProtocol, upgradeScheme, videoExtensions };
|
|
12
|
+
import { addMissingProtocol, addMissingScheme, createUrlVariants, decodeSegment, fixMalformedProtocol, fixMalformedQuery, fixMalformedScheme, getPathSegments, getQueryParam, getQueryParams, getRegistrableDomain, getSubdomain, isHostOf, isHostOrSubdomainOf, isHttpUrl, isIpAddress, isSubdomainOf, normalizeUrl, parseUrl, resolveFeedProtocol, resolveFeedScheme, resolveUrl, stripWww, upgradeProtocol, upgradeScheme } from "./urls.js";
|
|
13
|
+
export { type AnyOf, type DeepOmit, type IsPlainObject, type MaybePromise, type NormalizeOptions, type Nullish, type PartialNullish, type Pattern, type RegistrableDomainOptions, type WeightedMimeType, addMissingProtocol, addMissingScheme, anyWordMatchesAnyOf, archiveExtensions, audioExtensions, codeExtensions, coerceArray, coerceBoolean, coerceDate, coerceNumber, coerceSingular, coerceString, createAcceptHeader, createUrlVariants, decodeSegment, documentExtensions, endsWithAnyOf, escapeHtml, escapeRegex, feedMimeTypes, fixMalformedProtocol, fixMalformedQuery, fixMalformedScheme, flashExtensions, fontExtensions, genericFeedMimeTypes, genericHtmlMimeTypes, getAnyOf, getPathSegments, getQueryParam, getQueryParams, getRegistrableDomain, getSubdomain, htmlMimeTypes, imageExtensions, includesAnyOf, installerExtensions, isAnyOf, isBoolean, isFunction, isHostOf, isHostOrSubdomainOf, isHttpUrl, isIpAddress, isJsonLike, isNonEmptyString, isNullish, isNumber, isObject, isParseableJson, isPlainObject, isPresent, isString, isSubdomainOf, isValidDate, normalizeUrl, omit, omitEmpty, parseUrl, pick, resolveFeedProtocol, resolveFeedScheme, resolveUrl, sleep, startsWithAnyOf, stripWww, subtitleExtensions, t, toMap, trimObject, tx, upgradeProtocol, upgradeScheme, videoExtensions };
|
package/dist/index.js
CHANGED
|
@@ -8,5 +8,5 @@ import { anyWordMatchesAnyOf, endsWithAnyOf, escapeRegex, getAnyOf, includesAnyO
|
|
|
8
8
|
import { createAcceptHeader, feedMimeTypes, genericFeedMimeTypes, genericHtmlMimeTypes, htmlMimeTypes } from "./mimes.js";
|
|
9
9
|
import { omit, pick, toMap, trimObject } from "./objects.js";
|
|
10
10
|
import { sleep } from "./timers.js";
|
|
11
|
-
import { addMissingProtocol, addMissingScheme, createUrlVariants, decodeSegment, fixMalformedProtocol, fixMalformedQuery, fixMalformedScheme, getPathSegments, getRegistrableDomain, getSubdomain, isHostOf, isHostOrSubdomainOf, isHttpUrl, isIpAddress, isSubdomainOf, normalizeUrl, parseUrl, resolveFeedProtocol, resolveFeedScheme, resolveUrl, stripWww, upgradeProtocol, upgradeScheme } from "./urls.js";
|
|
12
|
-
export { addMissingProtocol, addMissingScheme, anyWordMatchesAnyOf, archiveExtensions, audioExtensions, codeExtensions, coerceArray, coerceBoolean, coerceDate, coerceNumber, coerceSingular, coerceString, createAcceptHeader, createUrlVariants, decodeSegment, documentExtensions, endsWithAnyOf, escapeHtml, escapeRegex, feedMimeTypes, fixMalformedProtocol, fixMalformedQuery, fixMalformedScheme, flashExtensions, fontExtensions, genericFeedMimeTypes, genericHtmlMimeTypes, getAnyOf, getPathSegments, getRegistrableDomain, getSubdomain, htmlMimeTypes, imageExtensions, includesAnyOf, installerExtensions, isAnyOf, isBoolean, isFunction, isHostOf, isHostOrSubdomainOf, isHttpUrl, isIpAddress, isJsonLike, isNonEmptyString, isNullish, isNumber, isObject, isParseableJson, isPlainObject, isPresent, isString, isSubdomainOf, isValidDate, normalizeUrl, omit, omitEmpty, parseUrl, pick, resolveFeedProtocol, resolveFeedScheme, resolveUrl, sleep, startsWithAnyOf, stripWww, subtitleExtensions, t, toMap, trimObject, tx, upgradeProtocol, upgradeScheme, videoExtensions };
|
|
11
|
+
import { addMissingProtocol, addMissingScheme, createUrlVariants, decodeSegment, fixMalformedProtocol, fixMalformedQuery, fixMalformedScheme, getPathSegments, getQueryParam, getQueryParams, getRegistrableDomain, getSubdomain, isHostOf, isHostOrSubdomainOf, isHttpUrl, isIpAddress, isSubdomainOf, normalizeUrl, parseUrl, resolveFeedProtocol, resolveFeedScheme, resolveUrl, stripWww, upgradeProtocol, upgradeScheme } from "./urls.js";
|
|
12
|
+
export { addMissingProtocol, addMissingScheme, anyWordMatchesAnyOf, archiveExtensions, audioExtensions, codeExtensions, coerceArray, coerceBoolean, coerceDate, coerceNumber, coerceSingular, coerceString, createAcceptHeader, createUrlVariants, decodeSegment, documentExtensions, endsWithAnyOf, escapeHtml, escapeRegex, feedMimeTypes, fixMalformedProtocol, fixMalformedQuery, fixMalformedScheme, flashExtensions, fontExtensions, genericFeedMimeTypes, genericHtmlMimeTypes, getAnyOf, getPathSegments, getQueryParam, getQueryParams, getRegistrableDomain, getSubdomain, htmlMimeTypes, imageExtensions, includesAnyOf, installerExtensions, isAnyOf, isBoolean, isFunction, isHostOf, isHostOrSubdomainOf, isHttpUrl, isIpAddress, isJsonLike, isNonEmptyString, isNullish, isNumber, isObject, isParseableJson, isPlainObject, isPresent, isString, isSubdomainOf, isValidDate, normalizeUrl, omit, omitEmpty, parseUrl, pick, resolveFeedProtocol, resolveFeedScheme, resolveUrl, sleep, startsWithAnyOf, stripWww, subtitleExtensions, t, toMap, trimObject, tx, upgradeProtocol, upgradeScheme, videoExtensions };
|
package/dist/urls.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export declare const isHttpUrl: (url: string | URL) => boolean;
|
|
|
8
8
|
export declare const isHostOrSubdomainOf: (url: string | URL, domains: string | ReadonlyArray<string>) => boolean;
|
|
9
9
|
export declare const getSubdomain: (url: string | URL, domains: string | ReadonlyArray<string>) => string | undefined;
|
|
10
10
|
export declare const decodeSegment: (segment: string | undefined) => string | undefined;
|
|
11
|
+
export declare const getQueryParams: (params: URLSearchParams | undefined, name: string) => Array<string>;
|
|
12
|
+
export declare const getQueryParam: (params: URLSearchParams | undefined, name: string) => string | undefined;
|
|
11
13
|
export declare const fixMalformedScheme: (url: string) => string;
|
|
12
14
|
export declare const fixMalformedQuery: (url: string) => string;
|
|
13
15
|
export declare const resolveFeedScheme: (url: string, scheme?: 'http' | 'https') => string;
|
package/dist/urls.js
CHANGED
|
@@ -57,6 +57,16 @@ const decodeSegment = (segment) => {
|
|
|
57
57
|
return decodeURIComponent(segment);
|
|
58
58
|
} catch {}
|
|
59
59
|
};
|
|
60
|
+
const getQueryParams = (params, name) => {
|
|
61
|
+
const values = [];
|
|
62
|
+
if (!params) return values;
|
|
63
|
+
const lowercaseName = name.toLowerCase();
|
|
64
|
+
for (const [key, value] of params) if (key.toLowerCase() === lowercaseName) values.push(value);
|
|
65
|
+
return values;
|
|
66
|
+
};
|
|
67
|
+
const getQueryParam = (params, name) => {
|
|
68
|
+
return getQueryParams(params, name)[0];
|
|
69
|
+
};
|
|
60
70
|
const strippedParamsCache = /* @__PURE__ */ new WeakMap();
|
|
61
71
|
const getStrippedParamsSet = (params) => {
|
|
62
72
|
let cached = strippedParamsCache.get(params);
|
|
@@ -122,6 +132,8 @@ const fixMalformedScheme = (url) => {
|
|
|
122
132
|
};
|
|
123
133
|
const nestedUrlRegex = /[a-z][a-z\d+.-]*(?::|%3A)(?:\/\/|%2F%2F)|(?<=[=?&])(?:\/\/|%2F%2F)/i;
|
|
124
134
|
const httpOrSchemeRelativeRegex = /^(?:https?:)?\/\//i;
|
|
135
|
+
const lostSeparatorRegex = /(?<!\s)\s+(?=[A-Za-z_][\w.-]*=)/g;
|
|
136
|
+
const slashClosedValueRegex = /(=[^&/=]+)\/+(?=&|$)/g;
|
|
125
137
|
const fixMalformedQuery = (url) => {
|
|
126
138
|
if (!httpOrSchemeRelativeRegex.test(url)) return url;
|
|
127
139
|
const hashIndex = url.indexOf("#");
|
|
@@ -130,16 +142,15 @@ const fixMalformedQuery = (url) => {
|
|
|
130
142
|
const fragment = hasFragment ? url.slice(hashIndex) : "";
|
|
131
143
|
const authorityEnd = head.indexOf("//") + 2;
|
|
132
144
|
const nestedOffset = head.slice(authorityEnd).search(nestedUrlRegex);
|
|
133
|
-
const
|
|
145
|
+
const hasNestedUrl = nestedOffset !== -1;
|
|
146
|
+
const ownEnd = hasNestedUrl ? authorityEnd + nestedOffset : head.length;
|
|
134
147
|
const markIndex = head.indexOf("?");
|
|
135
148
|
const hasMark = markIndex !== -1 && markIndex < ownEnd;
|
|
136
|
-
const secondMarkIndex = hasMark ? head.indexOf("?", markIndex + 1) : -1;
|
|
137
|
-
const hasSecondMark = secondMarkIndex !== -1 && secondMarkIndex < ownEnd;
|
|
138
149
|
const pathIndex = head.indexOf("/", authorityEnd);
|
|
139
150
|
const pathEnd = hasMark ? markIndex : ownEnd;
|
|
140
151
|
const glueIndex = pathIndex !== -1 && pathIndex < pathEnd ? head.indexOf("&", pathIndex) : -1;
|
|
141
152
|
const isGlued = glueIndex !== -1 && glueIndex < pathEnd;
|
|
142
|
-
if (!isGlued && !
|
|
153
|
+
if (!isGlued && !hasMark) return url;
|
|
143
154
|
const queryIndex = isGlued ? glueIndex : markIndex;
|
|
144
155
|
const queryStart = queryIndex + (isGlued && head[glueIndex + 1] === "?" ? 2 : 1);
|
|
145
156
|
let query = "";
|
|
@@ -155,6 +166,7 @@ const fixMalformedQuery = (url) => {
|
|
|
155
166
|
if (character === "=") hasValue = true;
|
|
156
167
|
query += character;
|
|
157
168
|
}
|
|
169
|
+
if (!hasNestedUrl) query = query.replace(lostSeparatorRegex, "&").replace(slashClosedValueRegex, "$1");
|
|
158
170
|
return `${head.slice(0, queryIndex)}?${query}${head.slice(ownEnd)}${fragment}`;
|
|
159
171
|
};
|
|
160
172
|
const feedSchemes = [
|
|
@@ -393,4 +405,4 @@ const addMissingProtocol = addMissingScheme;
|
|
|
393
405
|
/** @deprecated Use `upgradeScheme` instead. */
|
|
394
406
|
const upgradeProtocol = upgradeScheme;
|
|
395
407
|
//#endregion
|
|
396
|
-
export { addMissingProtocol, addMissingScheme, createUrlVariants, decodeSegment, fixMalformedProtocol, fixMalformedQuery, fixMalformedScheme, getPathSegments, getRegistrableDomain, getSubdomain, isHostOf, isHostOrSubdomainOf, isHttpUrl, isIpAddress, isSubdomainOf, normalizeUrl, parseUrl, resolveFeedProtocol, resolveFeedScheme, resolveUrl, stripWww, upgradeProtocol, upgradeScheme };
|
|
408
|
+
export { addMissingProtocol, addMissingScheme, createUrlVariants, decodeSegment, fixMalformedProtocol, fixMalformedQuery, fixMalformedScheme, getPathSegments, getQueryParam, getQueryParams, getRegistrableDomain, getSubdomain, isHostOf, isHostOrSubdomainOf, isHttpUrl, isIpAddress, isSubdomainOf, normalizeUrl, parseUrl, resolveFeedProtocol, resolveFeedScheme, resolveUrl, stripWww, upgradeProtocol, upgradeScheme };
|
package/package.json
CHANGED