Loading packages/fedify/src/codegen/class.ts +8 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ async function* generateClass( readonly #documentLoader?: DocumentLoader; readonly #contextLoader?: DocumentLoader; readonly #tracerProvider?: TracerProvider; protected readonly _baseUrl?: URL; readonly #warning?: { category: string[]; message: string; Loading Loading @@ -95,6 +96,13 @@ async function* generateClass( static ${emitOverride(typeUri, types)} get typeId(): URL { return new URL(${JSON.stringify(typeUri)}); } /** * The base URL used for resolving relative URLs in this object. */ ${emitOverride(typeUri, types)} get baseUrl(): URL | undefined { return this._baseUrl; } `; for await (const code of generateFields(typeUri, types)) yield code; for await (const code of generateConstructor(typeUri, types)) yield code; Loading packages/fedify/src/codegen/codec.ts +2 −0 Original line number Diff line number Diff line Loading @@ -287,6 +287,7 @@ export async function* generateDecoder( documentLoader?: DocumentLoader, contextLoader?: DocumentLoader, tracerProvider?: TracerProvider, baseUrl?: URL, } = {}, ): Promise<${type.name}> { const tracerProvider = options.tracerProvider ?? trace.getTracerProvider(); Loading Loading @@ -324,6 +325,7 @@ export async function* generateDecoder( documentLoader?: DocumentLoader, contextLoader?: DocumentLoader, tracerProvider?: TracerProvider, baseUrl?: URL, } = {}, ): Promise<${type.name}> { if (typeof json === "undefined") { Loading packages/fedify/src/codegen/constructor.ts +2 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ export async function* generateConstructor( documentLoader?: DocumentLoader, contextLoader?: DocumentLoader, tracerProvider?: TracerProvider, baseUrl?: URL, } = {}, ) { `; Loading @@ -97,6 +98,7 @@ export async function* generateConstructor( this.#documentLoader = options.documentLoader; this.#contextLoader = options.contextLoader; this.#tracerProvider = options.tracerProvider; this._baseUrl = options.baseUrl; if ("$warning" in options) { this.#warning = options.$warning as unknown as { category: string[]; Loading packages/fedify/src/codegen/property.ts +13 −6 Original line number Diff line number Diff line Loading @@ -64,7 +64,8 @@ async function* generateProperty( contextLoader?: DocumentLoader, suppressError?: boolean, tracerProvider?: TracerProvider, } = {} baseUrl?: URL } = {}, ): Promise<${getTypeNames(property.range, types)} | null> { const documentLoader = options.documentLoader ?? this._documentLoader ?? getDocumentLoader(); Loading @@ -76,6 +77,7 @@ async function* generateProperty( ${JSON.stringify(metadata.name)}, ${JSON.stringify(metadata.version)}, ); const baseUrl = options.baseUrl; return await tracer.startActiveSpan("activitypub.lookup_object", async (span) => { let fetchResult: RemoteDocument; try { Loading @@ -99,7 +101,7 @@ async function* generateProperty( try { const obj = await this.#${property.singularName}_fromJsonLd( document, { documentLoader, contextLoader, tracerProvider } { documentLoader, contextLoader, tracerProvider, baseUrl } ); span.setAttribute("activitypub.object.id", (obj.id ?? url).href); span.setAttribute( Loading Loading @@ -133,6 +135,7 @@ async function* generateProperty( documentLoader?: DocumentLoader, contextLoader?: DocumentLoader, tracerProvider?: TracerProvider, baseUrl?: URL } ): Promise<${getTypeNames(property.range, types)}> { const documentLoader = Loading @@ -141,6 +144,7 @@ async function* generateProperty( options.contextLoader ?? this._contextLoader ?? getDocumentLoader(); const tracerProvider = options.tracerProvider ?? this._tracerProvider ?? trace.getTracerProvider(); const baseUrl = options.baseUrl; `; for (const range of property.range) { if (!(range in types)) continue; Loading @@ -149,7 +153,7 @@ async function* generateProperty( try { return await ${rangeType.name}.fromJsonLd( jsonLd, { documentLoader, contextLoader, tracerProvider }, { documentLoader, contextLoader, tracerProvider, baseUrl }, ); } catch (e) { if (!(e instanceof TypeError)) throw e; Loading Loading @@ -190,6 +194,7 @@ async function* generateProperty( contextLoader?: DocumentLoader, suppressError?: boolean, tracerProvider?: TracerProvider, baseUrl?: URL } = {} ): Promise<${getTypeNames(property.range, types)} | null> { if (this._warning != null) { Loading Loading @@ -221,7 +226,7 @@ async function* generateProperty( ${JSON.stringify(property.compactName)}]; const obj = Array.isArray(prop) ? prop[0] : prop; if (obj != null && typeof obj === "object" && "@context" in obj) { return await this.#${property.singularName}_fromJsonLd(obj, options); return await this.#${property.singularName}_fromJsonLd(obj, {...options, baseUrl: options.baseUrl}); } } `; Loading Loading @@ -258,6 +263,7 @@ async function* generateProperty( contextLoader?: DocumentLoader, suppressError?: boolean, tracerProvider?: TracerProvider, baseUrl?: URL } = {} ): AsyncIterable<${getTypeNames(property.range, types)}> { if (this._warning != null) { Loading @@ -272,7 +278,7 @@ async function* generateProperty( if (v instanceof URL) { const fetched = await this.#fetch${pascalCase(property.singularName)}( v, options); v, {...options, baseUrl: options.baseUrl}); if (fetched == null) continue; vs[i] = fetched; this._cachedJsonLd = undefined; Loading @@ -292,7 +298,8 @@ async function* generateProperty( ${JSON.stringify(property.compactName)}]; const obj = Array.isArray(prop) ? prop[i] : prop; if (obj != null && typeof obj === "object" && "@context" in obj) { yield await this.#${property.singularName}_fromJsonLd(obj, options); yield await this.#${property.singularName}_fromJsonLd(obj, {...options, baseUrl: options.baseUrl }); continue; } } Loading packages/fedify/src/codegen/type.ts +6 −4 Original line number Diff line number Diff line Loading @@ -141,7 +141,7 @@ const scalarTypes: Record<string, ScalarType> = { dataCheck(v) { return `typeof ${v} === "object" && "@id" in ${v} && typeof ${v}["@id"] === "string" && ${v}["@id"] !== "" && ${v}["@id"] !== "/"`; && ${v}["@id"] !== ""`; }, decoder(v) { return `${v}["@id"].startsWith("at://") Loading @@ -157,6 +157,8 @@ const scalarTypes: Record<string, ScalarType> = { : "" ) ) : ${v}["@id"].startsWith("/") && options.baseUrl ? new URL(options.baseUrl + ${v}["@id"]) : new URL(${v}["@id"])`; }, }, Loading Loading @@ -307,10 +309,10 @@ const scalarTypes: Record<string, ScalarType> = { dataCheck(v) { return `typeof ${v} === "object" && "@value" in ${v} && typeof ${v}["@value"] === "string" && ${v}["@value"] !== "" && ${v}["@value"] !== "/"`; && ${v}["@value"] !== ""`; }, decoder(v) { return `new URL(${v}["@value"])`; return `${v}["@value"].startsWith("/") && options.baseUrl ? new URL(options.baseUrl + ${v}["@value"]) : new URL(${v}["@value"])`; }, }, "fedify:publicKey": { Loading Loading
packages/fedify/src/codegen/class.ts +8 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ async function* generateClass( readonly #documentLoader?: DocumentLoader; readonly #contextLoader?: DocumentLoader; readonly #tracerProvider?: TracerProvider; protected readonly _baseUrl?: URL; readonly #warning?: { category: string[]; message: string; Loading Loading @@ -95,6 +96,13 @@ async function* generateClass( static ${emitOverride(typeUri, types)} get typeId(): URL { return new URL(${JSON.stringify(typeUri)}); } /** * The base URL used for resolving relative URLs in this object. */ ${emitOverride(typeUri, types)} get baseUrl(): URL | undefined { return this._baseUrl; } `; for await (const code of generateFields(typeUri, types)) yield code; for await (const code of generateConstructor(typeUri, types)) yield code; Loading
packages/fedify/src/codegen/codec.ts +2 −0 Original line number Diff line number Diff line Loading @@ -287,6 +287,7 @@ export async function* generateDecoder( documentLoader?: DocumentLoader, contextLoader?: DocumentLoader, tracerProvider?: TracerProvider, baseUrl?: URL, } = {}, ): Promise<${type.name}> { const tracerProvider = options.tracerProvider ?? trace.getTracerProvider(); Loading Loading @@ -324,6 +325,7 @@ export async function* generateDecoder( documentLoader?: DocumentLoader, contextLoader?: DocumentLoader, tracerProvider?: TracerProvider, baseUrl?: URL, } = {}, ): Promise<${type.name}> { if (typeof json === "undefined") { Loading
packages/fedify/src/codegen/constructor.ts +2 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ export async function* generateConstructor( documentLoader?: DocumentLoader, contextLoader?: DocumentLoader, tracerProvider?: TracerProvider, baseUrl?: URL, } = {}, ) { `; Loading @@ -97,6 +98,7 @@ export async function* generateConstructor( this.#documentLoader = options.documentLoader; this.#contextLoader = options.contextLoader; this.#tracerProvider = options.tracerProvider; this._baseUrl = options.baseUrl; if ("$warning" in options) { this.#warning = options.$warning as unknown as { category: string[]; Loading
packages/fedify/src/codegen/property.ts +13 −6 Original line number Diff line number Diff line Loading @@ -64,7 +64,8 @@ async function* generateProperty( contextLoader?: DocumentLoader, suppressError?: boolean, tracerProvider?: TracerProvider, } = {} baseUrl?: URL } = {}, ): Promise<${getTypeNames(property.range, types)} | null> { const documentLoader = options.documentLoader ?? this._documentLoader ?? getDocumentLoader(); Loading @@ -76,6 +77,7 @@ async function* generateProperty( ${JSON.stringify(metadata.name)}, ${JSON.stringify(metadata.version)}, ); const baseUrl = options.baseUrl; return await tracer.startActiveSpan("activitypub.lookup_object", async (span) => { let fetchResult: RemoteDocument; try { Loading @@ -99,7 +101,7 @@ async function* generateProperty( try { const obj = await this.#${property.singularName}_fromJsonLd( document, { documentLoader, contextLoader, tracerProvider } { documentLoader, contextLoader, tracerProvider, baseUrl } ); span.setAttribute("activitypub.object.id", (obj.id ?? url).href); span.setAttribute( Loading Loading @@ -133,6 +135,7 @@ async function* generateProperty( documentLoader?: DocumentLoader, contextLoader?: DocumentLoader, tracerProvider?: TracerProvider, baseUrl?: URL } ): Promise<${getTypeNames(property.range, types)}> { const documentLoader = Loading @@ -141,6 +144,7 @@ async function* generateProperty( options.contextLoader ?? this._contextLoader ?? getDocumentLoader(); const tracerProvider = options.tracerProvider ?? this._tracerProvider ?? trace.getTracerProvider(); const baseUrl = options.baseUrl; `; for (const range of property.range) { if (!(range in types)) continue; Loading @@ -149,7 +153,7 @@ async function* generateProperty( try { return await ${rangeType.name}.fromJsonLd( jsonLd, { documentLoader, contextLoader, tracerProvider }, { documentLoader, contextLoader, tracerProvider, baseUrl }, ); } catch (e) { if (!(e instanceof TypeError)) throw e; Loading Loading @@ -190,6 +194,7 @@ async function* generateProperty( contextLoader?: DocumentLoader, suppressError?: boolean, tracerProvider?: TracerProvider, baseUrl?: URL } = {} ): Promise<${getTypeNames(property.range, types)} | null> { if (this._warning != null) { Loading Loading @@ -221,7 +226,7 @@ async function* generateProperty( ${JSON.stringify(property.compactName)}]; const obj = Array.isArray(prop) ? prop[0] : prop; if (obj != null && typeof obj === "object" && "@context" in obj) { return await this.#${property.singularName}_fromJsonLd(obj, options); return await this.#${property.singularName}_fromJsonLd(obj, {...options, baseUrl: options.baseUrl}); } } `; Loading Loading @@ -258,6 +263,7 @@ async function* generateProperty( contextLoader?: DocumentLoader, suppressError?: boolean, tracerProvider?: TracerProvider, baseUrl?: URL } = {} ): AsyncIterable<${getTypeNames(property.range, types)}> { if (this._warning != null) { Loading @@ -272,7 +278,7 @@ async function* generateProperty( if (v instanceof URL) { const fetched = await this.#fetch${pascalCase(property.singularName)}( v, options); v, {...options, baseUrl: options.baseUrl}); if (fetched == null) continue; vs[i] = fetched; this._cachedJsonLd = undefined; Loading @@ -292,7 +298,8 @@ async function* generateProperty( ${JSON.stringify(property.compactName)}]; const obj = Array.isArray(prop) ? prop[i] : prop; if (obj != null && typeof obj === "object" && "@context" in obj) { yield await this.#${property.singularName}_fromJsonLd(obj, options); yield await this.#${property.singularName}_fromJsonLd(obj, {...options, baseUrl: options.baseUrl }); continue; } } Loading
packages/fedify/src/codegen/type.ts +6 −4 Original line number Diff line number Diff line Loading @@ -141,7 +141,7 @@ const scalarTypes: Record<string, ScalarType> = { dataCheck(v) { return `typeof ${v} === "object" && "@id" in ${v} && typeof ${v}["@id"] === "string" && ${v}["@id"] !== "" && ${v}["@id"] !== "/"`; && ${v}["@id"] !== ""`; }, decoder(v) { return `${v}["@id"].startsWith("at://") Loading @@ -157,6 +157,8 @@ const scalarTypes: Record<string, ScalarType> = { : "" ) ) : ${v}["@id"].startsWith("/") && options.baseUrl ? new URL(options.baseUrl + ${v}["@id"]) : new URL(${v}["@id"])`; }, }, Loading Loading @@ -307,10 +309,10 @@ const scalarTypes: Record<string, ScalarType> = { dataCheck(v) { return `typeof ${v} === "object" && "@value" in ${v} && typeof ${v}["@value"] === "string" && ${v}["@value"] !== "" && ${v}["@value"] !== "/"`; && ${v}["@value"] !== ""`; }, decoder(v) { return `new URL(${v}["@value"])`; return `${v}["@value"].startsWith("/") && options.baseUrl ? new URL(options.baseUrl + ${v}["@value"]) : new URL(${v}["@value"])`; }, }, "fedify:publicKey": { Loading