import "@js-temporal/polyfill";
import "urlpattern-polyfill";
globalThis.addEventListener = () => {};
import { t as formatSemVer } from "./semver-CgD82xxg.mjs";
//#region src/nodeinfo/types.ts
/**
* Converts a {@link NodeInfo} object to a JSON value.
* @param nodeInfo The {@link NodeInfo} object to convert.
* @returns The JSON value that complies with the NodeInfo schema.
* @throws {TypeError} If the {@link NodeInfo} object is invalid.
*/
function nodeInfoToJson(nodeInfo) {
	if (!nodeInfo.software.name.match(/^[a-z0-9-]+$/)) throw new TypeError("Invalid software name.");
	if (nodeInfo.protocols.length < 1) throw new TypeError("At least one protocol must be supported.");
	if (nodeInfo.usage.users.total != null && (nodeInfo.usage.users.total < 0 || !Number.isInteger(nodeInfo.usage.users.total))) throw new TypeError("Invalid total users.");
	if (nodeInfo.usage.users.activeHalfyear != null && (nodeInfo.usage.users.activeHalfyear < 0 || !Number.isInteger(nodeInfo.usage.users.activeHalfyear))) throw new TypeError("Invalid active halfyear users.");
	if (nodeInfo.usage.users.activeMonth != null && (nodeInfo.usage.users.activeMonth < 0 || !Number.isInteger(nodeInfo.usage.users.activeMonth))) throw new TypeError("Invalid active month users.");
	if (nodeInfo.usage.localPosts < 0 || !Number.isInteger(nodeInfo.usage.localPosts)) throw new TypeError("Invalid local posts.");
	if (nodeInfo.usage.localComments < 0 || !Number.isInteger(nodeInfo.usage.localComments)) throw new TypeError("Invalid local comments.");
	return {
		"$schema": "http://nodeinfo.diaspora.software/ns/schema/2.1#",
		version: "2.1",
		software: {
			name: nodeInfo.software.name,
			version: formatSemVer(nodeInfo.software.version),
			repository: nodeInfo.software.repository?.href,
			homepage: nodeInfo.software.homepage?.href
		},
		protocols: nodeInfo.protocols,
		services: nodeInfo.services == null ? {
			inbound: [],
			outbound: []
		} : {
			inbound: nodeInfo.services.inbound ?? [],
			outbound: nodeInfo.services.outbound ?? []
		},
		openRegistrations: nodeInfo.openRegistrations ?? false,
		usage: {
			users: nodeInfo.usage.users,
			localPosts: nodeInfo.usage.localPosts,
			localComments: nodeInfo.usage.localComments
		},
		metadata: nodeInfo.metadata ?? {}
	};
}
//#endregion
export { nodeInfoToJson as t };
