	[k in keyRequiringSchemaDefinition<d>]: NodeKeyImplementation<d, k>
}

type keyRequiringSchemaDefinition<d extends BaseNodeDeclaration> = Exclude<
	keyof d["normalizedSchema"],
	keyof BaseNormalizedSchema
>

export const defaultValueSerializer = (v: unknown): Json => {
	if (typeof v === "string" || typeof v === "boolean" || v === null) return v

	if (typeof v === "number") {
		if (Number.isNaN(v)) return "NaN"
		if (v === Number.POSITIVE_INFINITY) return "Infinity"
		if (v === Number.NEGATIVE_INFINITY) return "-Infinity"
		return v
	}

	return compileSerializedValue(v)
}

export type NodeKeyImplementation<
	d extends BaseNodeDeclaration,
	k extends keyof d["normalizedSchema"],
	instantiated = k extends keyof d["inner"] ? Exclude<d["inner"][k], undefined>
	:	never
