From 2f49631ff7cc2416343c35c2ac2afdfdcfb1d609 Mon Sep 17 00:00:00 2001 From: Corentin Thomasset Date: Thu, 14 Apr 2022 00:50:16 +0200 Subject: [PATCH] chore(script): added tool create helper script --- scripts/create-tool.mjs | 79 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 scripts/create-tool.mjs diff --git a/scripts/create-tool.mjs b/scripts/create-tool.mjs new file mode 100644 index 00000000..a17bd633 --- /dev/null +++ b/scripts/create-tool.mjs @@ -0,0 +1,79 @@ +import { join, dirname } from 'path'; +import { fileURLToPath } from 'url'; +import { mkdir, readFile, writeFile } from 'fs/promises'; + +const currentDirname = dirname(fileURLToPath(import.meta.url)); + +const toolsDir = join(currentDirname, '..', 'src', 'tools'); +const toolName = process.argv[2]; + +if (!toolName) { + throw new Error('Please specify a toolname.'); +} + +const toolNameCamelCase = toolName.replace(/-./g, (x) => x[1].toUpperCase()); +const toolDir = join(toolsDir, toolName); + +await mkdir(toolDir); +console.log(`Directory created: ${toolDir}`); + +const createToolFile = async (name, content) => { + const filePath = join(toolDir, name); + await writeFile(filePath, content.trim()); + console.log(`File created: ${filePath}`); +}; + +createToolFile( + `${toolName}.vue`, + ` + + + + + +` +); + +createToolFile( + `index.ts`, + ` +import { ArrowsShuffle } from '@vicons/tabler'; +import type { ITool } from './../Tool'; + +export const tool: ITool = { + name: '${toolName}', + path: '/${toolName}', + description: '', + keywords: ['${toolName.split('-').join("', '")}'], + component: () => import('./${toolName}.vue'), + icon: ArrowsShuffle, +}; +` +); + +createToolFile(`${toolName}.service.ts`, ``); +createToolFile( + `${toolName}.service.test.ts`, + ` +import { expect, describe, it } from 'vitest'; +// import { } from './${toolName}.service'; +// +// describe('${toolName}', () => { +// +// }) +` +); + +const toolsIndex = join(toolsDir, 'index.ts'); +const indexContent = await readFile(toolsIndex, { encoding: 'utf-8' }).then((r) => r.split('\n')); + +indexContent.splice(3, 0, `import { tool as ${toolNameCamelCase} } from './${toolName}';`); +writeFile(toolsIndex, indexContent.join('\n')); +console.log(`Added import in: ${toolsIndex}`);