From dbbfa07639763f339d86178cbb21ee922f311403 Mon Sep 17 00:00:00 2001 From: garronej Date: Sun, 19 Mar 2023 15:52:41 +0100 Subject: [PATCH] Feature new script: Eject-keycloak-page --- src/bin/eject-keycloak-page.ts | 38 +++++++++++++++++++++++++++ src/bin/tools/kebabCaseToSnakeCase.ts | 7 +++++ 2 files changed, 45 insertions(+) create mode 100644 src/bin/eject-keycloak-page.ts create mode 100644 src/bin/tools/kebabCaseToSnakeCase.ts diff --git a/src/bin/eject-keycloak-page.ts b/src/bin/eject-keycloak-page.ts new file mode 100644 index 00000000..f58cc598 --- /dev/null +++ b/src/bin/eject-keycloak-page.ts @@ -0,0 +1,38 @@ +#!/usr/bin/env node + +import { getProjectRoot } from "./tools/getProjectRoot"; +import cliSelect from "cli-select"; +import { loginThemePageIds, type PageId } from "./keycloakify/generateFtl/generateFtl"; +import { capitalize } from "tsafe/capitalize"; +import { readFile, writeFile } from "fs/promises"; +import { existsSync } from "fs"; +import { join as pathJoin, relative as pathRelative } from "path"; +import { kebabCaseToCamelCase } from "./tools/kebabCaseToSnakeCase"; + +(async () => { + const projectRootDir = getProjectRoot(); + + const { value: pageId } = await cliSelect({ + "values": [...loginThemePageIds] + }).catch(() => { + console.log("Aborting"); + + process.exit(-1); + }); + + const pageBasename = `${capitalize(kebabCaseToCamelCase(pageId))}.tsx`; + + console.log(pageId); + + const targetFilePath = pathJoin(process.cwd(), "src", "keycloak-theme", "pages", pageBasename); + + if (existsSync(targetFilePath)) { + console.log(`${pageId} is already ejected, ${pathRelative(process.cwd(), targetFilePath)} already exists`); + + process.exit(-1); + } + + writeFile(targetFilePath, await readFile(pathJoin(projectRootDir, "src", "pages", pageBasename))); + + console.log(`${pathRelative(process.cwd(), targetFilePath)} created`); +})(); diff --git a/src/bin/tools/kebabCaseToSnakeCase.ts b/src/bin/tools/kebabCaseToSnakeCase.ts new file mode 100644 index 00000000..95e3770e --- /dev/null +++ b/src/bin/tools/kebabCaseToSnakeCase.ts @@ -0,0 +1,7 @@ +import { capitalize } from "tsafe/capitalize"; + +export function kebabCaseToCamelCase(kebabCaseString: string): string { + const [first, ...rest] = kebabCaseString.split("-"); + + return [first, rest.map(capitalize)].join(""); +}