import type { M } from "ts-algebra"; import type { JSONSchema } from "../../definitions"; import type { Join, Pop, Split } from "../../type-utils"; import type { ParseSchemaOptions } from "../index"; import type { ReferencingSchema } from "./index"; import type { ParseReference } from "./utils"; export type ParseExternalReferenceSchema = OPTIONS["references"] extends { [KEY in EXTERNAL_REFERENCE_ID]: JSONSchema; } ? ParseReference, OPTIONS, OPTIONS["references"][EXTERNAL_REFERENCE_ID], SUB_PATH> : OPTIONS extends { rootSchema: IdSchema; } ? ParseExternalReferenceWithoutDirectorySchema, OPTIONS, EXTERNAL_REFERENCE_ID, SUB_PATH> : M.Never; type ParseDirectory = Join>, "/">; type IdSchema = JSONSchema & { $id: string; }; type ParseExternalReferenceWithoutDirectorySchema, COMPLETE_REFERENCE extends string = Join<[ DIRECTORY, EXTERNAL_REFERENCE_ID ], "/">> = COMPLETE_REFERENCE extends keyof OPTIONS["references"] ? ParseReference : M.Never; export {};