import { literals, some, string } from "ts-matches" type NestedPath = `/${A}/${string}/${B}` type NestedPaths = NestedPath<"actions", "run" | "getInput"> // prettier-ignore type UnNestPaths = A extends `${infer A}/${infer B}` ? [...UnNestPaths, ... UnNestPaths] : [A] export function unNestPath(a: A): UnNestPaths { return a.split("/") as UnNestPaths } function isNestedPath(path: string): path is NestedPaths { const paths = path.split("/") if (paths.length !== 4) return false if (paths[1] === "actions" && (paths[3] === "run" || paths[3] === "getInput")) return true return false } export const jsonPath = some( literals( "/packageInit", "/packageUninit", "/backup/create", "/backup/restore", "/actions/metadata", "/properties", ), string.refine(isNestedPath, "isNestedPath"), ) export type JsonPath = typeof jsonPath._TYPE