@fedify/fedify 1.6.1-dev.851 → 1.6.1-dev.869

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.
Files changed (83) hide show
  1. package/dist/_virtual/rolldown_runtime.js +26 -1
  2. package/dist/codegen/schema.js +5 -4
  3. package/dist/deno.js +15 -2
  4. package/dist/federation/builder.js +12 -12
  5. package/dist/federation/builder.test.js +1 -0
  6. package/dist/federation/inbox.js +6 -1
  7. package/dist/federation/middleware.test.js +62 -53
  8. package/dist/federation/router.d.ts +1 -0
  9. package/dist/federation/router.js +19 -1
  10. package/dist/federation/router.test.js +15 -0
  11. package/dist/federation/send.test.js +8 -10
  12. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/_common/constants.js +1 -7
  13. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/_common/dirname.js +1 -1
  14. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/_common/from_file_url.js +1 -1
  15. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/_common/normalize.js +1 -1
  16. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/dirname.js +1 -32
  17. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/join.js +1 -32
  18. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/mod.js +0 -2
  19. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/posix/_util.js +1 -1
  20. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/posix/dirname.js +2 -2
  21. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/posix/from_file_url.js +1 -1
  22. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/posix/normalize.js +2 -2
  23. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/windows/from_file_url.js +1 -1
  24. package/dist/node_modules/.pnpm/@jsr_std__url@1.0.0-rc.3/node_modules/@jsr/std__url/dirname.js +1 -1
  25. package/dist/node_modules/.pnpm/@jsr_std__url@1.0.0-rc.3/node_modules/@jsr/std__url/join.js +1 -1
  26. package/dist/node_modules/.pnpm/dequal@2.0.3/node_modules/dequal/dist/index.js +68 -0
  27. package/dist/node_modules/.pnpm/fetch-mock@12.5.2/node_modules/fetch-mock/dist/esm/CallHistory.js +94 -0
  28. package/dist/node_modules/.pnpm/fetch-mock@12.5.2/node_modules/fetch-mock/dist/esm/FetchMock.js +143 -0
  29. package/dist/node_modules/.pnpm/fetch-mock@12.5.2/node_modules/fetch-mock/dist/esm/IsSubsetOf.js +103 -0
  30. package/dist/node_modules/.pnpm/fetch-mock@12.5.2/node_modules/fetch-mock/dist/esm/Matchers.js +195 -0
  31. package/dist/node_modules/.pnpm/fetch-mock@12.5.2/node_modules/fetch-mock/dist/esm/RequestUtils.js +83 -0
  32. package/dist/node_modules/.pnpm/fetch-mock@12.5.2/node_modules/fetch-mock/dist/esm/Route.js +137 -0
  33. package/dist/node_modules/.pnpm/fetch-mock@12.5.2/node_modules/fetch-mock/dist/esm/Router.js +181 -0
  34. package/dist/node_modules/.pnpm/fetch-mock@12.5.2/node_modules/fetch-mock/dist/esm/StatusTextMap.js +73 -0
  35. package/dist/node_modules/.pnpm/fetch-mock@12.5.2/node_modules/fetch-mock/dist/esm/TypeDescriptor.js +97 -0
  36. package/dist/node_modules/.pnpm/fetch-mock@12.5.2/node_modules/fetch-mock/dist/esm/index.js +11 -0
  37. package/dist/node_modules/.pnpm/glob-to-regexp@0.4.1/node_modules/glob-to-regexp/index.js +87 -0
  38. package/dist/node_modules/.pnpm/regexparam@3.0.0/node_modules/regexparam/dist/index.js +37 -0
  39. package/dist/runtime/authdocloader.test.js +5 -5
  40. package/dist/runtime/docloader.js +1 -1
  41. package/dist/runtime/docloader.test.js +8 -0
  42. package/dist/sig/key.js +7 -2
  43. package/dist/testing/docloader.js +34 -15
  44. package/dist/testing/fixtures/example.com/{hong-gildong → hong-gildong.json} +1 -1
  45. package/dist/testing/fixtures/example.com/{object → object.json} +1 -1
  46. package/dist/testing/fixtures/example.com/person.js +29 -0
  47. package/dist/testing/fixtures/example.com/person2.js +48 -0
  48. package/dist/testing/fixtures/example.com/{test → test.json} +1 -1
  49. package/dist/testing/fixtures/w3id.org/security/data-integrity/{v1 → v1.json} +1 -1
  50. package/dist/testing/fixtures/w3id.org/security/{v1 → v1.json} +9 -9
  51. package/dist/testing/mod.d.ts +11 -0
  52. package/dist/testing/mod.js +44 -38
  53. package/dist/vocab/lookup.test.js +30 -35
  54. package/dist/vocab/vocab.js +176 -176
  55. package/dist/vocab/vocab.test.js +2 -2
  56. package/package.json +8 -3
  57. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/windows/_util.js +0 -19
  58. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/windows/dirname.js +0 -75
  59. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/windows/join.js +0 -54
  60. package/dist/node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/windows/normalize.js +0 -87
  61. /package/dist/testing/fixtures/activitypub.academy/users/{brauca_darradiul → brauca_darradiul.json} +0 -0
  62. /package/dist/testing/fixtures/example.com/{announce → announce.json} +0 -0
  63. /package/dist/testing/fixtures/example.com/{collection → collection.json} +0 -0
  64. /package/dist/testing/fixtures/example.com/{create → create.json} +0 -0
  65. /package/dist/testing/fixtures/example.com/{cross-origin-actor → cross-origin-actor.json} +0 -0
  66. /package/dist/testing/fixtures/example.com/{invite → invite.json} +0 -0
  67. /package/dist/testing/fixtures/example.com/{key → key.json} +0 -0
  68. /package/dist/testing/fixtures/example.com/{key2 → key2.json} +0 -0
  69. /package/dist/testing/fixtures/example.com/{orderedcollectionpage → orderedcollectionpage.json} +0 -0
  70. /package/dist/testing/fixtures/example.com/paged/{a → a.json} +0 -0
  71. /package/dist/testing/fixtures/example.com/paged/{b → b.json} +0 -0
  72. /package/dist/testing/fixtures/example.com/{paged-collection → paged-collection.json} +0 -0
  73. /package/dist/testing/fixtures/example.com/{person → person.json} +0 -0
  74. /package/dist/testing/fixtures/example.com/{person2 → person2.json} +0 -0
  75. /package/dist/testing/fixtures/example.com/users/{handle → handle.json} +0 -0
  76. /package/dist/testing/fixtures/example.com/{wrong-type → wrong-type.json} +0 -0
  77. /package/dist/testing/fixtures/remote.domain/users/{bob → bob.json} +0 -0
  78. /package/dist/testing/fixtures/server.example/users/{alice → alice.json} +0 -0
  79. /package/dist/testing/fixtures/w3id.org/identity/{v1 → v1.json} +0 -0
  80. /package/dist/testing/fixtures/w3id.org/security/multikey/{v1 → v1.json} +0 -0
  81. /package/dist/testing/fixtures/wizard.casa/users/{hongminhee → hongminhee.json} +0 -0
  82. /package/dist/testing/fixtures/www.w3.org/ns/{activitystreams → activitystreams.json} +0 -0
  83. /package/dist/testing/fixtures/www.w3.org/ns/did/{v1 → v1.json} +0 -0
@@ -0,0 +1,97 @@
1
+
2
+ import { Temporal } from "@js-temporal/polyfill";
3
+ import { URLPattern } from "urlpattern-polyfill";
4
+
5
+ //#region node_modules/.pnpm/fetch-mock@12.5.2/node_modules/fetch-mock/dist/esm/TypeDescriptor.js
6
+ const valueTypes = new Set([
7
+ "boolean",
8
+ "number",
9
+ "null",
10
+ "string",
11
+ "undefined"
12
+ ]);
13
+ const referenceTypes = new Set([
14
+ "array",
15
+ "function",
16
+ "object",
17
+ "symbol"
18
+ ]);
19
+ const detectableTypes = new Set([
20
+ "boolean",
21
+ "function",
22
+ "number",
23
+ "string",
24
+ "symbol"
25
+ ]);
26
+ const typeConstructors = new Set([
27
+ Boolean,
28
+ Number,
29
+ String
30
+ ]);
31
+ var TypeDescriptor = class TypeDescriptor {
32
+ constructor(value) {
33
+ this.name = TypeDescriptor.of(value);
34
+ this.isValueType = TypeDescriptor.isValueType(value);
35
+ this.isReferenceType = TypeDescriptor.isReferenceType(value);
36
+ this.isArray = TypeDescriptor.isArray(value);
37
+ this.isBoolean = TypeDescriptor.isBoolean(value);
38
+ this.isFunction = TypeDescriptor.isFunction(value);
39
+ this.isNull = TypeDescriptor.isNull(value);
40
+ this.isNumber = TypeDescriptor.isNumber(value);
41
+ this.isObject = TypeDescriptor.isObject(value);
42
+ this.isString = TypeDescriptor.isString(value);
43
+ this.isSymbol = TypeDescriptor.isSymbol(value);
44
+ this.isUndefined = TypeDescriptor.isUndefined(value);
45
+ }
46
+ static of(value) {
47
+ if (value === null) return "null";
48
+ if (value === void 0) return "undefined";
49
+ const detectedType = typeof value;
50
+ if (detectableTypes.has(detectedType)) return detectedType;
51
+ if (detectedType === "object") {
52
+ if (Array.isArray(value)) return "array";
53
+ if (typeConstructors.has(value.constructor)) return value.constructor.name.toLowerCase();
54
+ return detectedType;
55
+ }
56
+ throw new Error("Failed due to an unknown type.");
57
+ }
58
+ static from(value) {
59
+ return new TypeDescriptor(value);
60
+ }
61
+ static isValueType(value) {
62
+ return valueTypes.has(TypeDescriptor.of(value));
63
+ }
64
+ static isReferenceType(value) {
65
+ return referenceTypes.has(TypeDescriptor.of(value));
66
+ }
67
+ static isArray(value) {
68
+ return TypeDescriptor.of(value) === "array";
69
+ }
70
+ static isBoolean(value) {
71
+ return TypeDescriptor.of(value) === "boolean";
72
+ }
73
+ static isFunction(value) {
74
+ return TypeDescriptor.of(value) === "function";
75
+ }
76
+ static isNull(value) {
77
+ return TypeDescriptor.of(value) === "null";
78
+ }
79
+ static isNumber(value) {
80
+ return TypeDescriptor.of(value) === "number";
81
+ }
82
+ static isObject(value) {
83
+ return TypeDescriptor.of(value) === "object";
84
+ }
85
+ static isString(value) {
86
+ return TypeDescriptor.of(value) === "string";
87
+ }
88
+ static isSymbol(value) {
89
+ return TypeDescriptor.of(value) === "symbol";
90
+ }
91
+ static isUndefined(value) {
92
+ return TypeDescriptor.of(value) === "undefined";
93
+ }
94
+ };
95
+
96
+ //#endregion
97
+ export { TypeDescriptor };
@@ -0,0 +1,11 @@
1
+
2
+ import { Temporal } from "@js-temporal/polyfill";
3
+ import { URLPattern } from "urlpattern-polyfill";
4
+
5
+ import { FetchMock, FetchMock_default, defaultFetchMockConfig } from "./FetchMock.js";
6
+
7
+ //#region node_modules/.pnpm/fetch-mock@12.5.2/node_modules/fetch-mock/dist/esm/index.js
8
+ var esm_default = FetchMock_default;
9
+
10
+ //#endregion
11
+ export { esm_default };
@@ -0,0 +1,87 @@
1
+
2
+ import { Temporal } from "@js-temporal/polyfill";
3
+ import { URLPattern } from "urlpattern-polyfill";
4
+
5
+ import { __commonJS } from "../../../../../_virtual/rolldown_runtime.js";
6
+
7
+ //#region node_modules/.pnpm/glob-to-regexp@0.4.1/node_modules/glob-to-regexp/index.js
8
+ var require_glob_to_regexp = __commonJS({ "node_modules/.pnpm/glob-to-regexp@0.4.1/node_modules/glob-to-regexp/index.js"(exports, module) {
9
+ module.exports = function(glob, opts) {
10
+ if (typeof glob !== "string") throw new TypeError("Expected a string");
11
+ var str = String(glob);
12
+ var reStr = "";
13
+ var extended = opts ? !!opts.extended : false;
14
+ var globstar = opts ? !!opts.globstar : false;
15
+ var inGroup = false;
16
+ var flags = opts && typeof opts.flags === "string" ? opts.flags : "";
17
+ var c;
18
+ for (var i = 0, len = str.length; i < len; i++) {
19
+ c = str[i];
20
+ switch (c) {
21
+ case "/":
22
+ case "$":
23
+ case "^":
24
+ case "+":
25
+ case ".":
26
+ case "(":
27
+ case ")":
28
+ case "=":
29
+ case "!":
30
+ case "|":
31
+ reStr += "\\" + c;
32
+ break;
33
+ case "?": if (extended) {
34
+ reStr += ".";
35
+ break;
36
+ }
37
+ case "[":
38
+ case "]": if (extended) {
39
+ reStr += c;
40
+ break;
41
+ }
42
+ case "{": if (extended) {
43
+ inGroup = true;
44
+ reStr += "(";
45
+ break;
46
+ }
47
+ case "}": if (extended) {
48
+ inGroup = false;
49
+ reStr += ")";
50
+ break;
51
+ }
52
+ case ",":
53
+ if (inGroup) {
54
+ reStr += "|";
55
+ break;
56
+ }
57
+ reStr += "\\" + c;
58
+ break;
59
+ case "*":
60
+ var prevChar = str[i - 1];
61
+ var starCount = 1;
62
+ while (str[i + 1] === "*") {
63
+ starCount++;
64
+ i++;
65
+ }
66
+ var nextChar = str[i + 1];
67
+ if (!globstar) reStr += ".*";
68
+ else {
69
+ var isGlobstar = starCount > 1 && (prevChar === "/" || prevChar === void 0) && (nextChar === "/" || nextChar === void 0);
70
+ if (isGlobstar) {
71
+ reStr += "((?:[^/]*(?:/|$))*)";
72
+ i++;
73
+ } else reStr += "([^/]*)";
74
+ }
75
+ break;
76
+ default: reStr += c;
77
+ }
78
+ }
79
+ if (!flags || !~flags.indexOf("g")) reStr = "^" + reStr + "$";
80
+ return new RegExp(reStr, flags);
81
+ };
82
+ } });
83
+
84
+ //#endregion
85
+ export default require_glob_to_regexp();
86
+
87
+ export { require_glob_to_regexp };
@@ -0,0 +1,37 @@
1
+
2
+ import { Temporal } from "@js-temporal/polyfill";
3
+ import { URLPattern } from "urlpattern-polyfill";
4
+
5
+ //#region node_modules/.pnpm/regexparam@3.0.0/node_modules/regexparam/dist/index.mjs
6
+ /**
7
+ * @param {string|RegExp} input The route pattern
8
+ * @param {boolean} [loose] Allow open-ended matching. Ignored with `RegExp` input.
9
+ */
10
+ function parse(input, loose) {
11
+ if (input instanceof RegExp) return {
12
+ keys: false,
13
+ pattern: input
14
+ };
15
+ var c, o, tmp, ext, keys = [], pattern = "", arr = input.split("/");
16
+ arr[0] || arr.shift();
17
+ while (tmp = arr.shift()) {
18
+ c = tmp[0];
19
+ if (c === "*") {
20
+ keys.push(c);
21
+ pattern += tmp[1] === "?" ? "(?:/(.*))?" : "/(.*)";
22
+ } else if (c === ":") {
23
+ o = tmp.indexOf("?", 1);
24
+ ext = tmp.indexOf(".", 1);
25
+ keys.push(tmp.substring(1, !!~o ? o : !!~ext ? ext : tmp.length));
26
+ pattern += !!~o && !~ext ? "(?:/([^/]+?))?" : "/([^/]+?)";
27
+ if (!!~ext) pattern += (!!~o ? "?" : "") + "\\" + tmp.substring(ext);
28
+ } else pattern += "/" + tmp;
29
+ }
30
+ return {
31
+ keys,
32
+ pattern: new RegExp("^" + pattern + (loose ? "(?=$|/)" : "/?$"), "i")
33
+ };
34
+ }
35
+
36
+ //#endregion
37
+ export { parse as parse$1 };
@@ -10,13 +10,13 @@ import { test } from "../testing/mod.js";
10
10
  import { assertRejects } from "../node_modules/.pnpm/@jsr_std__assert@0.226.0/node_modules/@jsr/std__assert/assert_rejects.js";
11
11
  import { mockDocumentLoader } from "../testing/docloader.js";
12
12
  import { rsaPrivateKey2 } from "../testing/keys.js";
13
- import { install, mock, uninstall } from "../node_modules/.pnpm/@jsr_hongminhee__deno-mock-fetch@0.3.2/node_modules/@jsr/hongminhee__deno-mock-fetch/mod.js";
13
+ import { esm_default } from "../node_modules/.pnpm/fetch-mock@12.5.2/node_modules/fetch-mock/dist/esm/index.js";
14
14
 
15
15
  //#region runtime/authdocloader.test.ts
16
16
  test("getAuthenticatedDocumentLoader()", async (t) => {
17
- install();
18
- mock("GET@/object", async (req) => {
19
- const v = await verifyRequest(req, {
17
+ esm_default.spyGlobal();
18
+ esm_default.get("begin:https://example.com/object", async (cl) => {
19
+ const v = await verifyRequest(cl.request, {
20
20
  documentLoader: mockDocumentLoader,
21
21
  contextLoader: mockDocumentLoader,
22
22
  currentTime: Temporal.Now.instant()
@@ -34,7 +34,7 @@ test("getAuthenticatedDocumentLoader()", async (t) => {
34
34
  document: true
35
35
  });
36
36
  });
37
- uninstall();
37
+ esm_default.hardReset();
38
38
  await t.step("deny non-HTTP/HTTPS", async () => {
39
39
  const loader = await getAuthenticatedDocumentLoader({
40
40
  keyId: new URL("https://example.com/key2"),
@@ -279,7 +279,7 @@ function kvCache({ loader, kv, prefix, rules }) {
279
279
  */
280
280
  function getUserAgent({ software, url } = {}) {
281
281
  const fedify = `Fedify/${deno_default.version}`;
282
- const runtime = globalThis.Deno?.version?.deno != null ? `Deno/${Deno.version.deno}` : globalThis.process?.versions?.bun != null ? `Bun/${process.versions.bun}` : globalThis.process?.versions?.node != null ? `Node.js/${process.versions.node}` : null;
282
+ const runtime = globalThis.Deno?.version?.deno != null ? `Deno/${Deno.version.deno}` : globalThis.process?.versions?.bun != null ? `Bun/${process.versions.bun}` : "navigator" in globalThis && navigator.userAgent === "Cloudflare-Workers" ? navigator.userAgent : globalThis.process?.versions?.node != null ? `Node.js/${process.versions.node}` : null;
283
283
  const userAgent = software == null ? [fedify] : [software, fedify];
284
284
  if (runtime != null) userAgent.push(runtime);
285
285
  if (url != null) userAgent.push(`+${url.toString()}`);
@@ -414,6 +414,14 @@ test("getUserAgent()", () => {
414
414
  software: "MyApp/1.0.0",
415
415
  url: new URL("https://example.com/")
416
416
  }), `MyApp/1.0.0 (Fedify/${deno_default.version}; Bun/${Bun.version}; +https://example.com/)`);
417
+ } else if (navigator.userAgent === "Cloudflare-Workers") {
418
+ assertEquals(getUserAgent(), `Fedify/${deno_default.version} (Cloudflare-Workers)`);
419
+ assertEquals(getUserAgent({ software: "MyApp/1.0.0" }), `MyApp/1.0.0 (Fedify/${deno_default.version}; Cloudflare-Workers)`);
420
+ assertEquals(getUserAgent({ url: "https://example.com/" }), `Fedify/${deno_default.version} (Cloudflare-Workers; +https://example.com/)`);
421
+ assertEquals(getUserAgent({
422
+ software: "MyApp/1.0.0",
423
+ url: new URL("https://example.com/")
424
+ }), `MyApp/1.0.0 (Fedify/${deno_default.version}; Cloudflare-Workers; +https://example.com/)`);
417
425
  } else {
418
426
  assertEquals(getUserAgent(), `Fedify/${deno_default.version} (Node.js/${process.versions.node})`);
419
427
  assertEquals(getUserAgent({ software: "MyApp/1.0.0" }), `MyApp/1.0.0 (Fedify/${deno_default.version}; Node.js/${process.versions.node})`);
package/dist/sig/key.js CHANGED
@@ -79,8 +79,13 @@ async function importJwk(jwk, type) {
79
79
  name: "RSASSA-PKCS1-v1_5",
80
80
  hash: "SHA-256"
81
81
  }, true, type === "public" ? ["verify"] : ["sign"]);
82
- else if (jwk.kty === "OKP" && jwk.crv === "Ed25519") key = await crypto.subtle.importKey("jwk", jwk, "Ed25519", true, type === "public" ? ["verify"] : ["sign"]);
83
- else throw new TypeError("Unsupported JWK format.");
82
+ else if (jwk.kty === "OKP" && jwk.crv === "Ed25519") {
83
+ if (navigator?.userAgent === "Cloudflare-Workers") {
84
+ jwk = { ...jwk };
85
+ delete jwk.alg;
86
+ }
87
+ key = await crypto.subtle.importKey("jwk", jwk, "Ed25519", true, type === "public" ? ["verify"] : ["sign"]);
88
+ } else throw new TypeError("Unsupported JWK format.");
84
89
  validateCryptoKey(key, type);
85
90
  return key;
86
91
  }
@@ -2,11 +2,7 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
- import { dirname } from "../node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/dirname.js";
6
- import { fromFileUrl } from "../node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/from_file_url.js";
7
- import { join } from "../node_modules/.pnpm/@jsr_std__path@1.0.9/node_modules/@jsr/std__path/join.js";
8
5
  import { getLogger } from "@logtape/logtape";
9
- import { readFileSync } from "node:fs";
10
6
 
11
7
  //#region testing/docloader.ts
12
8
  const logger = getLogger([
@@ -22,26 +18,49 @@ const logger = getLogger([
22
18
  * the file `testing/fixtures/http/example.com/foo/bar` (no suffix) and return
23
19
  * its content as the response.
24
20
  */
25
- function mockDocumentLoader(resource) {
21
+ async function mockDocumentLoader(resource) {
26
22
  const url = new URL(resource);
27
- const path = (url.host + url.pathname).split("/");
28
- if (url.search) path.push(url.search);
29
- const filePath = join(dirname(fromFileUrl(import.meta.url)), "fixtures", ...path);
30
- let content;
23
+ if ("navigator" in globalThis && navigator.userAgent === "Cloudflare-Workers") {
24
+ const testUrl = new URL(url);
25
+ testUrl.hostname += ".test";
26
+ const resp = await fetch(testUrl);
27
+ if (resp.ok) {
28
+ const document$1 = await resp.json();
29
+ logger.debug("Successfully fetched fixture {resource}: {status} {statusText}\n{body}", {
30
+ resource,
31
+ status: resp.status,
32
+ statusText: resp.statusText,
33
+ body: document$1
34
+ });
35
+ return {
36
+ contextUrl: null,
37
+ document: document$1,
38
+ documentUrl: resource
39
+ };
40
+ }
41
+ const error = await resp.text();
42
+ logger.error("Failed to fetch fixture {resource}: {error}", {
43
+ resource,
44
+ error
45
+ });
46
+ throw new Error(error);
47
+ }
48
+ const path = `./fixtures/${url.host}${url.pathname}.json`;
49
+ let document;
31
50
  try {
32
- content = readFileSync(filePath, { encoding: "utf-8" });
51
+ document = (await import(path, { with: { type: "json" } })).default;
33
52
  } catch (error) {
34
- logger.error("Failed to read fixture file {filePath}: {error}", {
35
- filePath,
53
+ logger.error("Failed to read fixture file {path}: {error}", {
54
+ path,
36
55
  error
37
56
  });
38
57
  throw error;
39
58
  }
40
- return Promise.resolve({
59
+ return {
41
60
  contextUrl: null,
42
- document: JSON.parse(content),
61
+ document,
43
62
  documentUrl: resource
44
- });
63
+ };
45
64
  }
46
65
 
47
66
  //#endregion
@@ -8,4 +8,4 @@
8
8
  "@value": "Hong Gildong"
9
9
  }
10
10
  ]
11
- }
11
+ }
@@ -3,4 +3,4 @@
3
3
  "type": "Object",
4
4
  "id": "https://example.com/object",
5
5
  "name": "Fetched object"
6
- }
6
+ }
@@ -0,0 +1,29 @@
1
+
2
+ import { Temporal } from "@js-temporal/polyfill";
3
+ import { URLPattern } from "urlpattern-polyfill";
4
+
5
+ //#region testing/fixtures/example.com/person.json
6
+ var __context = ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1"];
7
+ var id = "https://example.com/person";
8
+ var type = "Person";
9
+ var name = "John Doe";
10
+ var publicKey = [{
11
+ "id": "https://example.com/key",
12
+ "owner": "https://example.com/person",
13
+ "type": "CryptographicKey",
14
+ "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyIB9rotX8G6r6/6toT+x\n24BUiQ/HaPH1Em9dOt4c94s+OPFoEdH7DY7Iym9A8LlH4JaGF8KD38bLHWe1S4x0\njV3gHJKhK7veJfGZCKUENcQecBZ+YWUs5HWvUIX1vVB//0luHrg6BQKGOrSOE+WI\nAxyr0qsWCFfZzQrvSnUD2yvg1arJX2xhms14uxoRd5Kg9efKSCmmQaNEapicARUm\nFWrIEpGFa/nUUnqimssAGw1eZFqf3wA4TjhsuARBhGaJtv/3KEa016eMZxy3kDlO\njZnXZTaTgWkXdodwUvy8563fes3Al6BlcS2iJ9qbtha8rSm0FHqoUKH73JsLPKQI\nwQIDAQAB\n-----END PUBLIC KEY-----"
15
+ }, {
16
+ "id": "https://example.com/key2",
17
+ "type": "CryptographicKey",
18
+ "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoRmBtnxbdFutoRd1GLGw\nwGTrsqlRRWUe11hHQaoRLGf5LwQ0tIc6I9q+dynliw+2kxYsLn9SH2je6HcTYOol\ngW7F/cOWXZQN04b+OiYcU1ConAhLjmn4k1uKawJ614y0ScPNd8PQ+CljsnlPxbq9\nofaCMe2BV3B6y09aCuGFJ0nxn1/ubjmIBIWWFTAznoz1J9BhJDGyt3IO3ABy3f9z\nDVlR32L/n5VIkXnxkjUKdzMAOzYb62kuKOp1iznRTPrV71SNtivJMwSh/LVgBrmZ\njtIn/oim+KyX/fdLU3tQ7VClyqmJzyAjccOH6Qj6nFTPh+vX07gqN8IlLT2uye4w\nawIDAQAB\n-----END PUBLIC KEY-----"
19
+ }];
20
+ var person_default = {
21
+ "@context": __context,
22
+ id,
23
+ type,
24
+ name,
25
+ publicKey
26
+ };
27
+
28
+ //#endregion
29
+ export { person_default };
@@ -0,0 +1,48 @@
1
+
2
+ import { Temporal } from "@js-temporal/polyfill";
3
+ import { URLPattern } from "urlpattern-polyfill";
4
+
5
+ //#region testing/fixtures/example.com/person2.json
6
+ var __context = [
7
+ "https://www.w3.org/ns/activitystreams",
8
+ "https://w3id.org/security/v1",
9
+ "https://w3id.org/security/multikey/v1",
10
+ "https://w3id.org/security/data-integrity/v1",
11
+ "https://www.w3.org/ns/did/v1"
12
+ ];
13
+ var id = "https://example.com/person2";
14
+ var type = "Person";
15
+ var name = "Jane Doe";
16
+ var publicKey = [{
17
+ "id": "https://example.com/person2#key3",
18
+ "type": "CryptographicKey",
19
+ "owner": "https://example.com/person2",
20
+ "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4GUqWgdiYlN3Su5Gr4l6\ni+xRS8gDDVKZ718vpGk6eIpvqs33q430nRbHIzbHRXRaAhc/1++rUBcK0V4/kjZl\nCSzVtRgGU6HMkmjcD+uE56a8XbTczfltbEDj7afoEuB2F3UhQEWrSz+QJ29DPXaL\nMIa1Yv61NR2vxGqNbdtoMjDORMBYtg77CYbcFkiJHw65PDa7+f/yjLxuCRPye5L7\nhncN0UZuuFoRJmHNRLSg5omBad9WTvQXmSyXEhEdk9fHwlI022AqAzlWbT79hldc\nDSKGGLLbQIs1c3JZIG8G5i6Uh5Vy0Z7tSNBcxbhqoI9i9je4f/x/OPIVc19f04BE\n1LgWuHsftZzRgW9Sdqz53W83XxVdxlyHeywXOnstSWT11f8dkLyQUcHKTH+E6urb\nH+aiPLiRpYK8W7D9KTQA9kZ5JXaEuveBd5vJX7wakhbzAn8pWJU7GYIHNY38Ycok\nmivkU5pY8S2cKFMwY0b7ade3MComlir5P3ZYSjF+n6gRVsT96P+9mNfCu9gXt/f8\nXCyjKlH89kGwuJ7HhR8CuVdm0l+jYozVt6GsDy0hHYyn79NCCAEzP7ZbhBMR0T5V\nrkl+TIGXoJH9WFiz4VxO+NnglF6dNQjDS5IzYLoFRXIK1f3cmQiEB4FZmL70l9HL\nrgwR+Xys83xia79OqFDRezMCAwEAAQ==\n-----END PUBLIC KEY-----\n"
21
+ }, {
22
+ "id": "https://example.com/person2#key4",
23
+ "type": "CryptographicKey",
24
+ "owner": "https://example.com/person2",
25
+ "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEALR8epAGDe+cVq5p2Tx49CCfphpk1rNhkNoY9i+XEUfg=\n-----END PUBLIC KEY-----\n"
26
+ }];
27
+ var assertionMethod = [{
28
+ "id": "https://example.com/peson2#key3",
29
+ "type": "Multikey",
30
+ "controller": "https://example.com/person2",
31
+ "publicKeyMultibase": "zgghBUVkqmWS8e1j4aN2yowLAEkJC6wowB9wWmLRACYCok7UzstWcTBp3waKiDUM7wqL9bbBD9W9FvNaXEK2KPCZ9ffhvd5dxChJL9bdPQSrMwa28FEYMGDtcF1uocrYNmZm2dBBMaWrCu8U3s4PpVVhn4hsWDL8GLuE466pkJs9Hy8xmECoaaVgAZLiYDw2gwrjHDiX2i7aDHKfE7aSZWUWmC8nAGNZ7DX5pXoyXK3pxuaCWxNxXwPmaFwgKDyy9uhtBJ8znp9NZXkXHBTQe5uAi8GFwHY5asvqCmYPrAGWxcT6pdbZaJHdWkM7nw6apBHfakKs42oMqdBoJ2WkkresoT1qHrX2GW7gNP9PLtveF4vfEd6cwgHKQCdYgayG3muGfZiPvML75cyfkNrjkctvuQUfMxY9umbd2TG3V3mPnLrvQnqHpuRMZYtCn3nX1qfZaqFhTwT4NFPqVNLqvgR6k9vcuGXn6Ndaumhd5xtTK64jk3e2gPBit9iq6MrFUSoxNsbTty4kqcHAodtkK8CMSxUxbFP1kK3nyy8ZfeMgDCts1KboBcT2m5FMpQpYxKtNBfvhTuyeDDC34uhbY8itmTAnDwSr5mKrniwwDUGPZFejda51TYs1N9D9Ejzaw5Mvr8qN6wahHmsDBWTbWwV6YKVMD1MjAhJBUopWJWB5x6mEBAX25MssKfAEhJyDtqYWjq63uQHUJCsPJp"
32
+ }, {
33
+ "id": "https://example.com/person2#key4",
34
+ "type": "Multikey",
35
+ "controller": "https://example.com/person2",
36
+ "publicKeyMultibase": "z6MkhVPuyvgG1RkMv67azDqDCDERPXVrUg1i3qchXY5EACE3"
37
+ }];
38
+ var person2_default = {
39
+ "@context": __context,
40
+ id,
41
+ type,
42
+ name,
43
+ publicKey,
44
+ assertionMethod
45
+ };
46
+
47
+ //#endregion
48
+ export { person2_default };
@@ -2,4 +2,4 @@
2
2
  "https://example.com/prop/test": {
3
3
  "@value": "foo"
4
4
  }
5
- }
5
+ }
@@ -20,28 +20,28 @@
20
20
  "cipherAlgorithm": "sec:cipherAlgorithm",
21
21
  "cipherData": "sec:cipherData",
22
22
  "cipherKey": "sec:cipherKey",
23
- "created": {"@id": "dc:created", "@type": "xsd:dateTime"},
24
- "creator": {"@id": "dc:creator", "@type": "@id"},
23
+ "created": { "@id": "dc:created", "@type": "xsd:dateTime" },
24
+ "creator": { "@id": "dc:creator", "@type": "@id" },
25
25
  "digestAlgorithm": "sec:digestAlgorithm",
26
26
  "digestValue": "sec:digestValue",
27
27
  "domain": "sec:domain",
28
28
  "encryptionKey": "sec:encryptionKey",
29
- "expiration": {"@id": "sec:expiration", "@type": "xsd:dateTime"},
30
- "expires": {"@id": "sec:expiration", "@type": "xsd:dateTime"},
29
+ "expiration": { "@id": "sec:expiration", "@type": "xsd:dateTime" },
30
+ "expires": { "@id": "sec:expiration", "@type": "xsd:dateTime" },
31
31
  "initializationVector": "sec:initializationVector",
32
32
  "iterationCount": "sec:iterationCount",
33
33
  "nonce": "sec:nonce",
34
34
  "normalizationAlgorithm": "sec:normalizationAlgorithm",
35
- "owner": {"@id": "sec:owner", "@type": "@id"},
35
+ "owner": { "@id": "sec:owner", "@type": "@id" },
36
36
  "password": "sec:password",
37
- "privateKey": {"@id": "sec:privateKey", "@type": "@id"},
37
+ "privateKey": { "@id": "sec:privateKey", "@type": "@id" },
38
38
  "privateKeyPem": "sec:privateKeyPem",
39
- "publicKey": {"@id": "sec:publicKey", "@type": "@id"},
39
+ "publicKey": { "@id": "sec:publicKey", "@type": "@id" },
40
40
  "publicKeyBase58": "sec:publicKeyBase58",
41
41
  "publicKeyPem": "sec:publicKeyPem",
42
42
  "publicKeyWif": "sec:publicKeyWif",
43
- "publicKeyService": {"@id": "sec:publicKeyService", "@type": "@id"},
44
- "revoked": {"@id": "sec:revoked", "@type": "xsd:dateTime"},
43
+ "publicKeyService": { "@id": "sec:publicKeyService", "@type": "@id" },
44
+ "revoked": { "@id": "sec:revoked", "@type": "xsd:dateTime" },
45
45
  "salt": "sec:salt",
46
46
  "signature": "sec:signature",
47
47
  "signatureAlgorithm": "sec:signingAlgorithm",
@@ -0,0 +1,11 @@
1
+ import { Temporal } from "@js-temporal/polyfill";
2
+ import { URLPattern } from "urlpattern-polyfill";
3
+
4
+ //#region testing/mod.d.ts
5
+ declare const testDefinitions: Deno.TestDefinition[];
6
+ declare function test(options: Deno.TestDefinition): void;
7
+ declare function test(name: string, fn: (t: Deno.TestContext) => void | Promise<void>): void;
8
+ declare function test(name: string, options: Omit<Deno.TestDefinition, "fn" | "name">, fn: (t: Deno.TestContext) => void | Promise<void>): void;
9
+
10
+ //#endregion
11
+ export { test, testDefinitions };
@@ -2,11 +2,12 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
+ import { __require } from "../_virtual/rolldown_runtime.js";
5
6
  import { configure, getConsoleSink, reset } from "@logtape/logtape";
6
- import { test } from "node:test";
7
7
 
8
8
  //#region testing/mod.ts
9
- function test$1(name, options, fn) {
9
+ const testDefinitions = [];
10
+ function test(name, options, fn) {
10
11
  const def = typeof name === "string" ? typeof options === "function" ? {
11
12
  name,
12
13
  fn: options
@@ -15,37 +16,39 @@ function test$1(name, options, fn) {
15
16
  ...options,
16
17
  fn
17
18
  } : name;
18
- const func = def.fn;
19
- if ("Deno" in globalThis) Deno.test({
20
- ...def,
21
- async fn(t) {
22
- const records = [];
23
- await configure({
24
- sinks: {
25
- buffer(record) {
26
- if (record.category.length > 1 && record.category[0] === "logtape" && record.category[1] === "meta") return;
27
- records.push(record);
19
+ testDefinitions.push(def);
20
+ if ("Deno" in globalThis) {
21
+ const func = def.fn;
22
+ Deno.test({
23
+ ...def,
24
+ async fn(t) {
25
+ const records = [];
26
+ await configure({
27
+ sinks: {
28
+ buffer(record) {
29
+ if (record.category.length > 1 && record.category[0] === "logtape" && record.category[1] === "meta") return;
30
+ records.push(record);
31
+ },
32
+ console: getConsoleSink()
28
33
  },
29
- console: getConsoleSink()
30
- },
31
- filters: {},
32
- loggers: [{
33
- category: [],
34
- sinks: [Deno.env.get("LOG") === "always" ? "console" : "buffer"]
35
- }]
36
- });
37
- try {
38
- await func(t);
39
- } catch (e) {
40
- const consoleSink = getConsoleSink();
41
- for (const record of records) consoleSink(record);
42
- throw e;
43
- } finally {
44
- await reset();
34
+ filters: {},
35
+ loggers: [{
36
+ category: [],
37
+ sinks: [Deno.env.get("LOG") === "always" ? "console" : "buffer"]
38
+ }]
39
+ });
40
+ try {
41
+ await func(t);
42
+ } catch (e) {
43
+ const consoleSink = getConsoleSink();
44
+ for (const record of records) consoleSink(record);
45
+ throw e;
46
+ } finally {
47
+ await reset();
48
+ }
45
49
  }
46
- }
47
- });
48
- else if ("Bun" in globalThis) {
50
+ });
51
+ } else if ("Bun" in globalThis) {
49
52
  let failed = void 0;
50
53
  async function step(defOrNameOrFn, fn$2) {
51
54
  let def$1;
@@ -84,12 +87,15 @@ function test$1(name, options, fn) {
84
87
  if (def.ignore) bunTest.skip(def.name, fn$1);
85
88
  else if (def.only) bunTest.only(def.name, fn$1);
86
89
  else bunTest(def.name, fn$1);
87
- } else test(def.name, {
88
- only: def.only,
89
- skip: def.ignore
90
- }, async (t) => {
91
- await def.fn(intoDenoTestContext(def.name, t));
92
- });
90
+ } else try {
91
+ const { test: nodeTest } = __require("node:test");
92
+ nodeTest(def.name, {
93
+ only: def.only,
94
+ skip: def.ignore
95
+ }, async (t) => {
96
+ await def.fn(intoDenoTestContext(def.name, t));
97
+ });
98
+ } catch {}
93
99
  }
94
100
  function intoDenoTestContext(name, ctx) {
95
101
  async function step(defOrNameOrFn, fn) {
@@ -133,4 +139,4 @@ function caller() {
133
139
  }
134
140
 
135
141
  //#endregion
136
- export { test$1 as test };
142
+ export { test, testDefinitions };