UNPKG

bananas-commerce-admin

Version:

What's this, an admin for apes?

79 lines (64 loc) 2.14 kB
import { capitalize, nthIndexOf } from "../util"; /** * Parses an `operationId` returning app, view and action * * ## Examples * * `bananas.me:list` -> `{ app: "bananas", view: "me", action: "list" }` * * `bananas.login:create` -> `{ app: "bananas", view: "login", action: "create" }` * * `bananas.i18n:list` -> `{ app: "bananas", view: "i18n", action: "list" }` */ export function parseOperationId( operationId: string, ): { app: string; view: string; action: string } | undefined { const match = operationId.match(/^([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+):([a-zA-Z0-9_-]+)$/); if (match !== null) { return { app: match[1], view: match[2], action: match[3], }; } return undefined; } export function isNavigation(tags: string[]): boolean { return tags.includes("navigation"); } export function getPath(endpoint: string, method: string, action: string | undefined): string { return (method.toLowerCase() === "get" ? endpoint : `${endpoint}${action ?? ""}/`).replace( /{([^}]*)}/, ":$1", ); } function getBasePath(path: string): string { return path.substring(0, nthIndexOf(path, "/", 2, 1) + 1 || undefined); } export function getPage(path: string, action: string | undefined): string { const basePath = getBasePath(path); const relativeBasePath = basePath.slice(1); return `${relativeBasePath}${action}`; } export function getAppLabel(tags: string[]): string { return tags.filter((tag) => tag.startsWith("app:"))[0]?.split(":")[1]; } export function getView(id: string): string { return id.substring(id.indexOf(".") + 1, id.indexOf(":")); } export function getTitle(view: string, summary?: string): string { return summary ?? (view && capitalize(view.replace("_", " "))); } export function stripPathPrefix(path: string, prefix?: string) { if (prefix == null) { return path; } if (path.startsWith(prefix)) { return path.slice(prefix.length); } console.warn(`Path "${path}" does not start with api prefix "${prefix}"`); return path; } export function parentPath(schema: string) { return schema.substring(0, schema.lastIndexOf("/")); }