@fedify/vocab-runtime 2.1.1 → 2.2.0-dev.610

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/deno.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fedify/vocab-runtime",
3
- "version": "2.1.1",
3
+ "version": "2.2.0-dev.610+2d418352",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": "./src/mod.ts",
package/dist/mod.cjs CHANGED
@@ -4376,7 +4376,7 @@ var contexts_default = preloadedContexts;
4376
4376
  //#endregion
4377
4377
  //#region deno.json
4378
4378
  var name = "@fedify/vocab-runtime";
4379
- var version = "2.1.1";
4379
+ var version = "2.2.0-dev.610+2d418352";
4380
4380
  var license = "MIT";
4381
4381
  var exports$1 = {
4382
4382
  ".": "./src/mod.ts",
@@ -4851,9 +4851,10 @@ async function getRemoteDocument(url, response, fetch$1) {
4851
4851
  * @returns The document loader.
4852
4852
  * @since 1.3.0
4853
4853
  */
4854
- function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAgent } = {}) {
4854
+ function getDocumentLoader({ allowPrivateAddress, maxRedirection, skipPreloadedContexts, userAgent } = {}) {
4855
4855
  const tracerProvider = __opentelemetry_api.trace.getTracerProvider();
4856
4856
  const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
4857
+ const maximumRedirection = maxRedirection ?? DEFAULT_MAX_REDIRECTION;
4857
4858
  async function load(url, options, redirected = 0, visited = /* @__PURE__ */ new Set()) {
4858
4859
  options?.signal?.throwIfAborted();
4859
4860
  const currentUrl = new URL(url).href;
@@ -4888,7 +4889,7 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
4888
4889
  });
4889
4890
  span.setAttribute("http.response.status_code", response.status);
4890
4891
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
4891
- if (redirected >= DEFAULT_MAX_REDIRECTION) {
4892
+ if (redirected >= maximumRedirection) {
4892
4893
  logger.error("Too many redirections ({redirections}) while fetching document.", {
4893
4894
  redirections: redirected + 1,
4894
4895
  url: currentUrl
package/dist/mod.d.cts CHANGED
@@ -136,6 +136,12 @@ interface DocumentLoaderFactoryOptions {
136
136
  * If an object is given, it is passed to {@link getUserAgent} function.
137
137
  */
138
138
  userAgent?: GetUserAgentOptions | string;
139
+ /**
140
+ * The maximum number of redirections to follow.
141
+ * @default `20`
142
+ * @since 2.2.0
143
+ */
144
+ maxRedirection?: number;
139
145
  }
140
146
  /**
141
147
  * A factory function that creates an authenticated {@link DocumentLoader} for
@@ -190,6 +196,7 @@ interface GetDocumentLoaderOptions extends DocumentLoaderFactoryOptions {
190
196
  */
191
197
  declare function getDocumentLoader({
192
198
  allowPrivateAddress,
199
+ maxRedirection,
193
200
  skipPreloadedContexts,
194
201
  userAgent
195
202
  }?: GetDocumentLoaderOptions): DocumentLoader;
package/dist/mod.d.ts CHANGED
@@ -136,6 +136,12 @@ interface DocumentLoaderFactoryOptions {
136
136
  * If an object is given, it is passed to {@link getUserAgent} function.
137
137
  */
138
138
  userAgent?: GetUserAgentOptions | string;
139
+ /**
140
+ * The maximum number of redirections to follow.
141
+ * @default `20`
142
+ * @since 2.2.0
143
+ */
144
+ maxRedirection?: number;
139
145
  }
140
146
  /**
141
147
  * A factory function that creates an authenticated {@link DocumentLoader} for
@@ -190,6 +196,7 @@ interface GetDocumentLoaderOptions extends DocumentLoaderFactoryOptions {
190
196
  */
191
197
  declare function getDocumentLoader({
192
198
  allowPrivateAddress,
199
+ maxRedirection,
193
200
  skipPreloadedContexts,
194
201
  userAgent
195
202
  }?: GetDocumentLoaderOptions): DocumentLoader;
package/dist/mod.js CHANGED
@@ -4375,7 +4375,7 @@ var contexts_default = preloadedContexts;
4375
4375
  //#endregion
4376
4376
  //#region deno.json
4377
4377
  var name = "@fedify/vocab-runtime";
4378
- var version = "2.1.1";
4378
+ var version = "2.2.0-dev.610+2d418352";
4379
4379
  var license = "MIT";
4380
4380
  var exports = {
4381
4381
  ".": "./src/mod.ts",
@@ -4850,9 +4850,10 @@ async function getRemoteDocument(url, response, fetch$1) {
4850
4850
  * @returns The document loader.
4851
4851
  * @since 1.3.0
4852
4852
  */
4853
- function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAgent } = {}) {
4853
+ function getDocumentLoader({ allowPrivateAddress, maxRedirection, skipPreloadedContexts, userAgent } = {}) {
4854
4854
  const tracerProvider = trace.getTracerProvider();
4855
4855
  const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
4856
+ const maximumRedirection = maxRedirection ?? DEFAULT_MAX_REDIRECTION;
4856
4857
  async function load(url, options, redirected = 0, visited = /* @__PURE__ */ new Set()) {
4857
4858
  options?.signal?.throwIfAborted();
4858
4859
  const currentUrl = new URL(url).href;
@@ -4887,7 +4888,7 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
4887
4888
  });
4888
4889
  span.setAttribute("http.response.status_code", response.status);
4889
4890
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
4890
- if (redirected >= DEFAULT_MAX_REDIRECTION) {
4891
+ if (redirected >= maximumRedirection) {
4891
4892
  logger.error("Too many redirections ({redirections}) while fetching document.", {
4892
4893
  redirections: redirected + 1,
4893
4894
  url: currentUrl
@@ -1,6 +1,6 @@
1
1
  const require_chunk = require('./chunk-DWy1uDak.cjs');
2
- require('./docloader-RQoMNF99.cjs');
3
- require('./request-kJU0S4zp.cjs');
2
+ require('./docloader-CURjCgWO.cjs');
3
+ require('./request-CiyP8tfi.cjs');
4
4
  require('./link-DYNFAdNu.cjs');
5
5
  require('./url-DIjOdK8Q.cjs');
6
6
  require('./multicodec--6hQ74zI.cjs');
@@ -1,5 +1,5 @@
1
- import "./docloader-DIUeF-5W.js";
2
- import "./request-D6fgLaP4.js";
1
+ import "./docloader-aqHcQvoo.js";
2
+ import "./request-BXW3NJ6a.js";
3
3
  import "./link-C3q2TC2G.js";
4
4
  import "./url-CWEP9Zs9.js";
5
5
  import "./multicodec-Dq3IiOV4.js";
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-DWy1uDak.cjs');
2
- const require_request = require('./request-kJU0S4zp.cjs');
2
+ const require_request = require('./request-CiyP8tfi.cjs');
3
3
  const require_link = require('./link-DYNFAdNu.cjs');
4
4
  const require_url = require('./url-DIjOdK8Q.cjs');
5
5
  const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
@@ -4490,9 +4490,10 @@ async function getRemoteDocument(url, response, fetch$1) {
4490
4490
  * @returns The document loader.
4491
4491
  * @since 1.3.0
4492
4492
  */
4493
- function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAgent } = {}) {
4493
+ function getDocumentLoader({ allowPrivateAddress, maxRedirection, skipPreloadedContexts, userAgent } = {}) {
4494
4494
  const tracerProvider = __opentelemetry_api.trace.getTracerProvider();
4495
4495
  const tracer = tracerProvider.getTracer(require_request.deno_default.name, require_request.deno_default.version);
4496
+ const maximumRedirection = maxRedirection ?? DEFAULT_MAX_REDIRECTION;
4496
4497
  async function load(url, options, redirected = 0, visited = /* @__PURE__ */ new Set()) {
4497
4498
  options?.signal?.throwIfAborted();
4498
4499
  const currentUrl = new URL(url).href;
@@ -4527,7 +4528,7 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
4527
4528
  });
4528
4529
  span.setAttribute("http.response.status_code", response.status);
4529
4530
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
4530
- if (redirected >= DEFAULT_MAX_REDIRECTION) {
4531
+ if (redirected >= maximumRedirection) {
4531
4532
  logger.error("Too many redirections ({redirections}) while fetching document.", {
4532
4533
  redirections: redirected + 1,
4533
4534
  url: currentUrl
@@ -1,4 +1,4 @@
1
- import { FetchError, createActivityPubRequest, deno_default, logRequest } from "./request-D6fgLaP4.js";
1
+ import { FetchError, createActivityPubRequest, deno_default, logRequest } from "./request-BXW3NJ6a.js";
2
2
  import { HttpHeaderLink } from "./link-C3q2TC2G.js";
3
3
  import { UrlError, validatePublicUrl } from "./url-CWEP9Zs9.js";
4
4
  import { getLogger } from "@logtape/logtape";
@@ -4489,9 +4489,10 @@ async function getRemoteDocument(url, response, fetch$1) {
4489
4489
  * @returns The document loader.
4490
4490
  * @since 1.3.0
4491
4491
  */
4492
- function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAgent } = {}) {
4492
+ function getDocumentLoader({ allowPrivateAddress, maxRedirection, skipPreloadedContexts, userAgent } = {}) {
4493
4493
  const tracerProvider = trace.getTracerProvider();
4494
4494
  const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
4495
+ const maximumRedirection = maxRedirection ?? DEFAULT_MAX_REDIRECTION;
4495
4496
  async function load(url, options, redirected = 0, visited = /* @__PURE__ */ new Set()) {
4496
4497
  options?.signal?.throwIfAborted();
4497
4498
  const currentUrl = new URL(url).href;
@@ -4526,7 +4527,7 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
4526
4527
  });
4527
4528
  span.setAttribute("http.response.status_code", response.status);
4528
4529
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
4529
- if (redirected >= DEFAULT_MAX_REDIRECTION) {
4530
+ if (redirected >= maximumRedirection) {
4530
4531
  logger.error("Too many redirections ({redirections}) while fetching document.", {
4531
4532
  redirections: redirected + 1,
4532
4533
  url: currentUrl
@@ -1,6 +1,6 @@
1
1
  const require_chunk = require('./chunk-DWy1uDak.cjs');
2
- const require_docloader = require('./docloader-RQoMNF99.cjs');
3
- const require_request = require('./request-kJU0S4zp.cjs');
2
+ const require_docloader = require('./docloader-CURjCgWO.cjs');
3
+ const require_request = require('./request-CiyP8tfi.cjs');
4
4
  require('./link-DYNFAdNu.cjs');
5
5
  const require_url = require('./url-DIjOdK8Q.cjs');
6
6
  const node_assert = require_chunk.__toESM(require("node:assert"));
@@ -1526,6 +1526,12 @@ var esm_default = FetchMock_default;
1526
1526
  await (0, node_assert.rejects)(() => fetchDocumentLoader("https://example.com/too-many-redirects/0"), require_request.FetchError, "Too many redirections");
1527
1527
  (0, node_assert.deepStrictEqual)(redirectAttempts, 21);
1528
1528
  });
1529
+ await t.test("custom max redirection", async () => {
1530
+ redirectAttempts = 0;
1531
+ const loader = require_docloader.getDocumentLoader({ maxRedirection: 1 });
1532
+ await (0, node_assert.rejects)(() => loader("https://example.com/too-many-redirects/0"), require_request.FetchError, "Too many redirections");
1533
+ (0, node_assert.deepStrictEqual)(redirectAttempts, 2);
1534
+ });
1529
1535
  let loopAttempts = 0;
1530
1536
  esm_default.get("https://example.com/redirect-loop-a", () => {
1531
1537
  loopAttempts++;
@@ -1,5 +1,5 @@
1
- import { contexts_default, getDocumentLoader } from "./docloader-DIUeF-5W.js";
2
- import { FetchError } from "./request-D6fgLaP4.js";
1
+ import { contexts_default, getDocumentLoader } from "./docloader-aqHcQvoo.js";
2
+ import { FetchError } from "./request-BXW3NJ6a.js";
3
3
  import "./link-C3q2TC2G.js";
4
4
  import { UrlError } from "./url-CWEP9Zs9.js";
5
5
  import "node:module";
@@ -1552,6 +1552,12 @@ test("getDocumentLoader()", async (t) => {
1552
1552
  await rejects(() => fetchDocumentLoader("https://example.com/too-many-redirects/0"), FetchError, "Too many redirections");
1553
1553
  deepStrictEqual(redirectAttempts, 21);
1554
1554
  });
1555
+ await t.test("custom max redirection", async () => {
1556
+ redirectAttempts = 0;
1557
+ const loader = getDocumentLoader({ maxRedirection: 1 });
1558
+ await rejects(() => loader("https://example.com/too-many-redirects/0"), FetchError, "Too many redirections");
1559
+ deepStrictEqual(redirectAttempts, 2);
1560
+ });
1555
1561
  let loopAttempts = 0;
1556
1562
  esm_default.get("https://example.com/redirect-loop-a", () => {
1557
1563
  loopAttempts++;
@@ -2,7 +2,7 @@ import process from "node:process";
2
2
 
3
3
  //#region deno.json
4
4
  var name = "@fedify/vocab-runtime";
5
- var version = "2.1.1";
5
+ var version = "2.2.0-dev.610+2d418352";
6
6
  var license = "MIT";
7
7
  var exports = {
8
8
  ".": "./src/mod.ts",
@@ -3,7 +3,7 @@ const node_process = require_chunk.__toESM(require("node:process"));
3
3
 
4
4
  //#region deno.json
5
5
  var name = "@fedify/vocab-runtime";
6
- var version = "2.1.1";
6
+ var version = "2.2.0-dev.610+2d418352";
7
7
  var license = "MIT";
8
8
  var exports$1 = {
9
9
  ".": "./src/mod.ts",
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-DWy1uDak.cjs');
2
- const require_request = require('./request-kJU0S4zp.cjs');
2
+ const require_request = require('./request-CiyP8tfi.cjs');
3
3
  const node_assert = require_chunk.__toESM(require("node:assert"));
4
4
  const node_test = require_chunk.__toESM(require("node:test"));
5
5
  const node_process = require_chunk.__toESM(require("node:process"));
@@ -1,4 +1,4 @@
1
- import { deno_default, getUserAgent } from "./request-D6fgLaP4.js";
1
+ import { deno_default, getUserAgent } from "./request-BXW3NJ6a.js";
2
2
  import { deepStrictEqual } from "node:assert";
3
3
  import { test } from "node:test";
4
4
  import process from "node:process";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fedify/vocab-runtime",
3
- "version": "2.1.1",
3
+ "version": "2.2.0-dev.610+2d418352",
4
4
  "homepage": "https://fedify.dev/",
5
5
  "repository": {
6
6
  "type": "git",
@@ -391,6 +391,17 @@ test("getDocumentLoader()", async (t) => {
391
391
  deepStrictEqual(redirectAttempts, 21);
392
392
  });
393
393
 
394
+ await t.test("custom max redirection", async () => {
395
+ redirectAttempts = 0;
396
+ const loader = getDocumentLoader({ maxRedirection: 1 });
397
+ await rejects(
398
+ () => loader("https://example.com/too-many-redirects/0"),
399
+ FetchError,
400
+ "Too many redirections",
401
+ );
402
+ deepStrictEqual(redirectAttempts, 2);
403
+ });
404
+
394
405
  let loopAttempts = 0;
395
406
  fetchMock.get("https://example.com/redirect-loop-a", () => {
396
407
  loopAttempts++;
package/src/docloader.ts CHANGED
@@ -88,6 +88,13 @@ export interface DocumentLoaderFactoryOptions {
88
88
  * If an object is given, it is passed to {@link getUserAgent} function.
89
89
  */
90
90
  userAgent?: GetUserAgentOptions | string;
91
+
92
+ /**
93
+ * The maximum number of redirections to follow.
94
+ * @default `20`
95
+ * @since 2.2.0
96
+ */
97
+ maxRedirection?: number;
91
98
  }
92
99
 
93
100
  /**
@@ -285,11 +292,12 @@ export interface GetDocumentLoaderOptions extends DocumentLoaderFactoryOptions {
285
292
  * @since 1.3.0
286
293
  */
287
294
  export function getDocumentLoader(
288
- { allowPrivateAddress, skipPreloadedContexts, userAgent }:
295
+ { allowPrivateAddress, maxRedirection, skipPreloadedContexts, userAgent }:
289
296
  GetDocumentLoaderOptions = {},
290
297
  ): DocumentLoader {
291
298
  const tracerProvider = trace.getTracerProvider();
292
299
  const tracer = tracerProvider.getTracer(metadata.name, metadata.version);
300
+ const maximumRedirection = maxRedirection ?? DEFAULT_MAX_REDIRECTION;
293
301
 
294
302
  async function load(
295
303
  url: string,
@@ -348,7 +356,7 @@ export function getDocumentLoader(
348
356
  response.status >= 300 && response.status < 400 &&
349
357
  response.headers.has("Location")
350
358
  ) {
351
- if (redirected >= DEFAULT_MAX_REDIRECTION) {
359
+ if (redirected >= maximumRedirection) {
352
360
  logger.error(
353
361
  "Too many redirections ({redirections}) while fetching document.",
354
362
  { redirections: redirected + 1, url: currentUrl },