import type { ParsedPattern, Token } from './parse.ts'; export type Stringify = T['hostname'] extends Token[] ? `${StringifyTokens}://${StringifyTokens}${StringifyPort}${StringifyPathname}${StringifySearch}` : `${StringifyPathname}${StringifySearch}`; type StringifyTokens = T extends undefined ? '' : T extends [] ? '' : T extends [infer Head extends Token, ...infer Tail extends Token[]] ? `${StringifyToken}${StringifyTokens}` : never; type StringifyToken = T extends { type: 'text'; value: infer V extends string; } ? V : T extends { type: 'variable'; name: infer N extends string; } ? `:${N}` : T extends { type: 'wildcard'; name: infer N extends string; } ? `*${N}` : T extends { type: 'wildcard'; } ? '*' : T extends { type: 'separator'; } ? Sep : T extends { type: 'optional'; tokens: infer Tokens extends Token[]; } ? `(${StringifyTokens})` : never; type StringifyPathname = T extends undefined ? '/' : T extends [] ? '/' : T extends Token[] ? StartsWithSeparator extends true ? `${StringifyTokens}` : `/${StringifyTokens}` : never; type StringifyPort = T extends string ? `:${T}` : ''; type StringifySearch = T extends string ? `?${T}` : ''; export type StartsWithSeparator = T extends [] ? false : T extends [{ type: 'separator'; }, ...Token[]] ? true : T extends [{ type: 'optional'; tokens: infer Tokens extends Token[]; }, ...Token[]] ? StartsWithSeparator : false; export {}; //# sourceMappingURL=stringify.d.ts.map