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 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 ownEnd = nestedOffset !== -1 ? authorityEnd + nestedOffset : head.length;
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 && !hasSecondMark) return url;
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
@@ -46,5 +46,5 @@
46
46
  "dependencies": {
47
47
  "entities": "^8.1.0"
48
48
  },
49
- "version": "2.11.0"
49
+ "version": "2.12.0"
50
50
  }