convex
Version:
Client for the Convex Cloud
53 lines (49 loc) • 1.43 kB
text/typescript
export type InProjectSelector =
| { kind: "dev" }
| { kind: "prod" }
| { kind: "reference"; reference: string };
export type ParsedDeploymentSelector =
| { kind: "deploymentName"; deploymentName: string }
| { kind: "inCurrentProject"; selector: InProjectSelector }
| { kind: "inProject"; projectSlug: string; selector: InProjectSelector }
| {
kind: "inTeamProject";
teamSlug: string;
projectSlug: string;
selector: InProjectSelector;
};
function parseInProjectSelector(s: string): InProjectSelector {
if (s === "dev") return { kind: "dev" };
if (s === "prod") return { kind: "prod" };
return { kind: "reference", reference: s };
}
/**
* Parses the value of the `--deployment` CLI flag
*/
export function parseDeploymentSelector(
selector: string,
): ParsedDeploymentSelector {
if (/^[a-z]+-[a-z]+-[0-9]+$/.test(selector)) {
return { kind: "deploymentName", deploymentName: selector };
}
const parts = selector.split(":");
if (parts.length === 3) {
return {
kind: "inTeamProject",
teamSlug: parts[0],
projectSlug: parts[1],
selector: parseInProjectSelector(parts[2]),
};
}
if (parts.length === 2) {
return {
kind: "inProject",
projectSlug: parts[0],
selector: parseInProjectSelector(parts[1]),
};
}
return {
kind: "inCurrentProject",
selector: parseInProjectSelector(selector),
};
}