plekta 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import e from"chalk";import{Command as t}from"commander";import{checkForUpdate as n,checkForUpdateFresh as r,createCli as i,createSpinner as a,display as o,getPackageManager as s,onCancel as c,showTree as l,symbols as u,typedCommand as d}from"@plekta/utils";import{confirm as f,input as p}from"@inquirer/prompts";import{execFile as m}from"node:child_process";import{promisify as h}from"node:util";const g={name:`plekta`,version:`0.0.5`,description:`Description coming soon`,type:`module`,license:`MIT`,author:{name:`Osilama`,email:`thelastofinusa@gmail.com`,url:`https://thelastofinusa.vercel.app`},main:`./dist/index.mjs`,module:`./dist/index.mjs`,types:`./dist/index.d.ts`,exports:{".":{types:`./dist/index.d.ts`,import:`./dist/index.mjs`}},bin:{plekta:`./dist/index.mjs`},files:[`dist`,`README.md`],engines:{node:`>=18`},scripts:{build:`tsdown`,start:`bun run ./src/index.ts`,lint:`biome check .`,clean:`rm -rf .turbo dist node_modules`,"pack:dry":`bun run build && bun pm pack --dry-run`,prepublishOnly:`bun run build`,typecheck:`tsdown --noEmit`},dependencies:{"@inquirer/prompts":`^8.7.2`,"@plekta/utils":`^0.0.2`,chalk:`^6.0.0`,commander:`^15.0.0`,ora:`^9.4.1`},devDependencies:{"@plekta/tsconfig":`^0.0.0`,"@types/bun":`^1.4.3`,"@types/node":`^22.20.2`,tsdown:`0.22.14`}},{createCommandTitle:_,resolveCommandName:v}=i({name:g.name,aliases:[g.name]});var y=class extends Error{code;constructor(e,t){super(t),this.name=`TamioError`,this.code=e}};function b(t){if(t instanceof Error&&t.name===`ExitPromptError`)throw t;let n=t instanceof Error?t.message:String(t);return!(t instanceof y)&&process.env.TAMIO_DEBUG&&console.error(t),o.outro({title:n,color:e.red,symbol:`error`,exitType:1}),process.exit(1)}const x=()=>({definition:e=>d(e,`init`).description(`scaffold a new ${g.name} project`).argument(`[name]`,`name of the project directory (defaults to the current folder)`),handler:async(t,n)=>{let{commandTitle:r}=_({command:n,version:g.version});o.intro({title:r,color:e.cyan});let i=a(`cyan`),s=n?.args[0];try{let t=s||await p({message:`Where should your project live?`,default:`${g.name}-dApp`,validate:e=>e.trim()?!0:`directory name cannot be empty.`});i.succeed(`${e.cyan(t)} created successfully`),o.outro({title:r,color:e.magenta})}catch(e){i.stop(),b(e)}}}),S=()=>({definition:e=>d(e,`test`).description(`testing the cli command`).option(`-f, --flag`,`show flag in display`).option(`-d, --disk`,`show something`),handler:async(t,n)=>{let{commandTitle:r}=_({command:n,version:g.version});o.intro({title:r,color:e.magenta}),console.log({options:t}),o.outro({title:r,color:e.magenta})}}),C=h(m),w=()=>({definition:e=>d(e,`update`).description(`check and update to newest version`).option(`-y, --yes`,`skip update confirmation`),handler:async(t,n)=>{let i=s(),{commandTitle:c}=_({command:n,version:g.version});o.intro({title:c,color:e.cyan,symbol:`gear`});let d=a(`cyan`);d.start(`checking npm registry..`);let p=await r(g.name,g.version),m=()=>{l({headerTitle:`version status`,items:[{title:`latest: v${p.latest}`,description:`installed: v${p.current}`}],color:p.outdated?e.yellow:e.cyan})};if(!p.outdated)d.succeed(`already up to date`),console.log(),m(),console.log(),o.outro({title:`you're on the latest version (v${p.current}).`,color:e.green,symbol:`success`,margin:{top:!1}});else if(d.succeed(`new version found ${u.chevron} v${p.latest}`),console.log(),m(),console.log(),!t.yes&&!await f({message:`update to the latest version (v${p.latest})?`,default:!0}))o.outro({title:`update skipped.`,color:e.dim,symbol:`info`});else{d.start(`installing ${g.name}@${p.latest}..`);try{let[t,...n]=i.installer.split(` `);await C(t,[...n,`-g`,`${g.name}@${p.latest}`]),d.succeed(`updated ${g.name} to v${p.latest}`),o.outro({title:`successfully updated.`,color:e.green,symbol:`success`})}catch(t){d.fail(`failed to update ${g.name}.`);let n=t instanceof Error?t.message:`unknown update error.`;o.outro({title:n,color:e.red,symbol:`error`,exitType:1})}}}}),T={init:{register(e){x().definition(e).action((e,t)=>x().handler(e,t))}},test:{register(e){S().definition(e).action((e,t)=>S().handler(e,t))}},update:{register(e){w().definition(e).action((e,t)=>w().handler(e,t))}}},E=process.argv[2],D=/* @__PURE__ */ new Set([`update`,`-h`,`--help`]);async function O(){D.has(E)||await Promise.race([(async()=>{let t=v(),r=await n(g.name,g.version);r.outdated&&(console.log(),l({headerTitle:`update available`,items:[{title:`v${r.latest} is now available (current: v${r.current})`,description:`Run \`${t} update\` to upgrade to the latest version.`}],color:e.yellow}))})(),new Promise(e=>setTimeout(e,1500))]);let r=new t;r.name(g.name).description(g.description).version(g.version,`-v, --version`,`show version`),r.configureOutput({writeOut:e=>{if(e.trim()===g.version){let e=process.version;process.stdout.write(`v${g.version}\n${`${u.chevron} node ${e} (from PATH)`}\n`)}else process.stdout.write(e)}}),Object.values(T).forEach(e=>{e.register(r)}),await c(async()=>{await r.parseAsync(process.argv)})()}O();export{};
|
|
2
|
+
import{checkDirectory as e,checkForUpdate as t,checkForUpdateFresh as n,createCli as r,createSpinner as i,display as a,getPackageManager as o,onCancel as s,showTree as c,symbols as l,typedCommand as u}from"@plekta/utils";import d from"chalk";import{Command as f}from"commander";import{mkdir as p}from"node:fs/promises";import m from"node:path";import{confirm as h,input as g,select as _}from"@inquirer/prompts";import v from"node:fs";import y from"node:os";import{execFile as b}from"node:child_process";import{promisify as x}from"node:util";const S={english:{name:`English`,description:`Standard crystal clear English.`,global:{updateAvailableHeader:`update available`,updateAvailableTitle:(e,t)=>`v${e} is now available (current: v${t})`,updateAvailableDescription:e=>`Run \`${e} update\` to upgrade to the latest version.`,versionDescription:`show version`},lang:{definitionDescription:`configure CLI display language vibe`,selectPrompt:`Select your preferred CLI language vibe:`,updatedSuccess:`Language updated to`},init:{description:e=>`scaffold a new ${e} project`,argDescription:`name of the project directory`,promptDir:`Where should your project live?`,dirCreated:e=>`${d.cyan(e)} directory created.`,errors:{emptyName:`Directory name cannot be empty.`,notEmpty:e=>`Directory "${e}" already exists and is not empty.`,accessError:e=>`Unable to access directory "${e}". Please choose another path.`}},update:{description:`check and update to newest version`,optionYes:`skip update confirmation`,checkingRegistry:`checking npm registry..`,versionStatusHeader:`version status`,alreadyUpToDate:`already up to date`,alreadyLatestOutro:`you're on the latest version`,newVersionFound:`new version found`,confirmMessage:`update to the latest version`,skippedOutro:`update skipped.`,installingSpinner:`installing`,successSpinner:`updated`,successOutro:`successfully updated.`,failSpinner:`failed to update`,unknownError:`unknown update error.`},test:{description:`testing the cli command`,optionFlag:`show flag in display`,optionDisk:`show something`}},"gen-z":{name:`Gen-Z Slang`,description:`No cap, absolute rizz terminology fr fr.`,global:{updateAvailableHeader:`vibe check: update available`,updateAvailableTitle:(e,t)=>`v${e} is dropping rn (current: v${t})`,updateAvailableDescription:e=>`Run \`${e} update\` to get the drip bestie.`,versionDescription:`show version bestie`},lang:{definitionDescription:`vibe-check and switch your CLI language`,selectPrompt:`Pick your vibe bestie:`,updatedSuccess:`Vibe successfully updated to`},init:{description:e=>`cook up a fresh ${e} project no cap`,argDescription:`name of the project directory bestie`,promptDir:`Where we dropping this masterpiece?`,dirCreated:`brodie got cooked fr.`,errors:{emptyName:`Directory name cannot be ghosted, type something bestie.`,notEmpty:e=>`Directory "${e}" is already occupied, pick another spot bestie.`,accessError:e=>`Can't touch "${e}" rn, choose a different path.`}},update:{description:`check for major glow ups and update`,optionYes:`skip update confirmation bestie`,checkingRegistry:`vibe-checking npm registry rn..`,versionStatusHeader:`vibe check status`,alreadyUpToDate:`we so locked in, completely current no cap`,alreadyLatestOutro:`you're already at peak performance`,newVersionFound:`major glow up available bestie`,confirmMessage:`you tryna level up to this fresh drop`,skippedOutro:`we staying retro bestie, update skipped.`,installingSpinner:`installing the drip`,successSpinner:`upgraded`,successOutro:`w rizz, successfully updated no cap.`,failSpinner:`oof it flopped, failed to update`,unknownError:`major L, unknown update error.`},test:{description:`testing the cli command fr`,optionFlag:`show flag in display bestie`,optionDisk:`show something cool`}},shakespeare:{name:`Shakespearean`,description:`Hark! Verily speaketh in olden tongue.`,global:{updateAvailableHeader:`royal notice: update available`,updateAvailableTitle:(e,t)=>`v${e} hath arrived (current: v${t})`,updateAvailableDescription:e=>`Execute \`${e} update\` to claim the new vessel.`,versionDescription:`display version of thy vessel`},lang:{definitionDescription:`configure thy royal tongue for the CLI`,selectPrompt:`Choose thy preferred dialect, good sir:`,updatedSuccess:`Thy tongue hath been shifted unto`},init:{description:e=>`forge a noble ${e} enterprise`,argDescription:`the title of thy domain`,promptDir:`Whither shall thy noble enterprise be founded?`,dirCreated:`thy domain hath been wrought successfully.`,errors:{emptyName:`Thy directory name cannot be void.`,notEmpty:e=>`Thy domain "${e}" already exists and is not desolate.`,accessError:e=>`Alas, cannot reach "${e}". Choose another path.`}},update:{description:`consult the royal registry for newer designs`,optionYes:`bypass royal inquiry`,checkingRegistry:`consulting the royal registry of npm..`,versionStatusHeader:`royal status of vessels`,alreadyUpToDate:`thy vessel is already of the newest design`,alreadyLatestOutro:`thou art already upon the highest pinnacle`,newVersionFound:`behold! a fairer version hath arrived`,confirmMessage:`dost thou wish to ascend unto this newer realm`,skippedOutro:`very well, thy current state remaineth undisturbed.`,installingSpinner:`raising the sails for`,successSpinner:`ascended`,successOutro:`huzzah! triumphant ascension achieved.`,failSpinner:`alas! the enterprise of updating hath faltered for`,unknownError:`a mysterious woe befell the update.`},test:{description:`test the mock trials of the cli`,optionFlag:`display thy banner flag`,optionDisk:`reveal thy hidden relics`}},pirate:{name:`Pirate`,description:`Ahoy matey! Talk like a salty sea dog.`,global:{updateAvailableHeader:`horizon notice: update available`,updateAvailableTitle:(e,t)=>`v${e} be spotted on the radar (current: v${t})`,updateAvailableDescription:e=>`Run \`${e} update\` to hoist the new sails, matey!`,versionDescription:`show ship version`},lang:{definitionDescription:`set yer course and choose yer tongue, matey`,selectPrompt:`Choose yer preferred tongue, ye scurvy dog:`,updatedSuccess:`Language set to arrr`},init:{description:e=>`build a brand new ${e} treasure chest`,argDescription:`name of the treasure cove`,promptDir:`Where shall we anchor this new vessel?`,dirCreated:`cove carved out successfully, arrr!`,errors:{emptyName:`Yer cove name can't be empty water, matey!`,notEmpty:e=>`The cove "${e}" is already claimed by another crew!`,accessError:e=>`Can't drop anchor at "${e}". Pick another spot!`}},update:{description:`scan the horizon for newer charts`,optionYes:`skip the captain's warning`,checkingRegistry:`scouting the npm horizon..`,versionStatusHeader:`ship status log`,alreadyUpToDate:`yer ship is already seaworthy and up to date`,alreadyLatestOutro:`ye be sailing the newest ship on the seas`,newVersionFound:`treasure spotted on the horizon`,confirmMessage:`hoist the sails and update to the newest chart`,skippedOutro:`update abandoned to Davy Jones' locker.`,installingSpinner:`hoisting new rigging for`,successSpinner:`upgraded`,successOutro:`shiver me timbers, successfully updated!`,failSpinner:`mutiny! failed to update`,unknownError:`kraken attack! unknown update error.`},test:{description:`test the cannons of the CLI`,optionFlag:`fly the Jolly Roger flag`,optionDisk:`show treasures from the bilge`}}},C=(e,t=`english`,...n)=>{let r=S[t]||S.english,i=e.split(`.`),a=r;for(let t of i)if(a&&typeof a==`object`&&t in a)a=a[t];else{let t=S.english;for(let n of i)if(t&&typeof t==`object`&&n in t)t=t[n];else return e;a=t;break}return typeof a==`function`?a(...n):typeof a==`string`?a:e},w={name:`plekta`,version:`0.0.7`,description:`Description coming soon`,type:`module`,license:`MIT`,author:{name:`Osilama`,email:`thelastofinusa@gmail.com`,url:`https://thelastofinusa.vercel.app`},main:`./dist/index.mjs`,module:`./dist/index.mjs`,types:`./dist/index.d.ts`,exports:{".":{types:`./dist/index.d.ts`,import:`./dist/index.mjs`}},bin:{plekta:`./dist/index.mjs`},files:[`dist`,`README.md`],engines:{node:`>=18`},scripts:{build:`tsdown`,start:`bun run ./src/index.ts`,lint:`biome check .`,clean:`rm -rf .turbo dist node_modules`,"pack:dry":`bun run build && bun pm pack --dry-run`,prepublishOnly:`bun run build`,typecheck:`tsc --noEmit`},dependencies:{"@inquirer/prompts":`^8.7.2`,"@plekta/utils":`^0.0.4`,chalk:`^6.0.0`,commander:`^15.0.0`,ora:`^9.4.1`},devDependencies:{"@plekta/tsconfig":`^0.0.0`,"@types/bun":`^1.4.3`,"@types/node":`^22.20.2`,tsdown:`0.22.14`}},{createCommandTitle:T,resolveCommandName:E}=r({name:w.name,aliases:[w.name]});var D=class extends Error{code;constructor(e,t){super(t),this.name=`TamioError`,this.code=e}};function O(e){if(e instanceof Error&&e.name===`ExitPromptError`)throw e;let t=e instanceof Error?e.message:String(e);return!(e instanceof D)&&process.env.TAMIO_DEBUG&&console.error(e),a.outro({title:t,color:d.red,symbol:`error`,exitType:1}),process.exit(1)}const k=m.join(y.homedir(),`.${w.name}`),A=m.join(k,`config.json`),j={language:`english`},M=()=>{try{if(v.existsSync(A)){let e=v.readFileSync(A,`utf-8`);return{...j,...JSON.parse(e)}}}catch{}return j},N=e=>{try{v.existsSync(k)||v.mkdirSync(k,{recursive:!0});let t={...M(),...e};v.writeFileSync(A,JSON.stringify(t,null,2),`utf-8`)}catch(e){console.error(`Failed to save config:`,e)}},P=()=>{let{language:t}=M();return{definition:e=>u(e,`init`).description(C(`init.description`,t,w.name)).argument(`[name]`,C(`init.argDescription`,t)),handler:async(n,r)=>{let{commandTitle:o}=T({command:r,version:w.version});a.intro({title:o,color:d.cyan});let s=i(`cyan`);try{let n=async n=>{if(!n.trim())return C(`init.errors.emptyName`,t);try{let r=await e(n);return r.exists&&!r.isEmpty?C(`init.errors.notEmpty`,t,n):!0}catch{return C(`init.errors.accessError`,t,n)}},i=r?.args[0];if(i){let e=await n(i);if(e!==!0)throw Error(e)}else i=await g({message:C(`init.promptDir`,t),default:`${w.name}-dapp`,validate:n});let o=m.resolve(process.cwd(),i);await p(o,{recursive:!0}),s.succeed(C(`init.dirCreated`,t,i)),a.outro({title:`successfully`,color:d.green})}catch(e){s.stop(),O(e)}}}},F=()=>{let{language:e}=M();return{definition:t=>u(t,`lang`).description(C(`lang.definitionDescription`,e)).argument(`[language]`,`preferred CLI language (e.g., english, gen-z, shakespeare, pirate)`),handler:async(t,n)=>{let r=M(),{commandTitle:i}=T({command:n,version:w.version});a.intro({title:i,color:d.cyan});try{let t,i=n?.args[0]?.toLowerCase();if(i){if(i in S)t=i;else{c({headerTitle:`invalid language: "${n?.args[0]}"`,items:Object.entries(S).map(([e,t])=>({title:`${t.name}: ${d.cyan(e)}`,description:t.description})),color:d.red}),a.outro({title:`please use a valid language key (e.g. gen-z).`,color:d.red,symbol:`error`});return}}else t=await _({message:C(`lang.selectPrompt`,e),default:r.language||`english`,choices:Object.entries(S).map(([e,t])=>({name:t.name.toLowerCase()===`english`?`${t.name} (Default)`:t.name,value:e,description:t.description}))});N({language:t}),a.outro({title:`${C(`lang.updatedSuccess`,t)} ${S[t].name}!`,color:d.green,symbol:`success`,margin:{top:!i}})}catch(e){O(e)}}}},I=x(b),L=()=>{let{language:e}=M();return{definition:t=>u(t,`update`).description(C(`update.description`,e)).option(`-y, --yes`,C(`update.optionYes`,e)),handler:async(t,r)=>{let s=o(),{commandTitle:u}=T({command:r,version:w.version});a.intro({title:u,color:d.cyan,symbol:`gear`});let f=i(`cyan`);f.start(C(`update.checkingRegistry`,e));let p=await n(w.name,w.version),m=()=>{c({headerTitle:C(`update.versionStatusHeader`,e),items:[{title:`latest: v${p.latest}`,description:`installed: v${p.current}`}],color:p.outdated?d.yellow:d.cyan})};if(!p.outdated)f.succeed(C(`update.alreadyUpToDate`,e)),console.log(),m(),console.log(),a.outro({title:`${C(`update.alreadyLatestOutro`,e)} (v${p.current}).`,color:d.green,symbol:`success`,margin:{top:!1}});else if(f.succeed(`${C(`update.newVersionFound`,e)} ${l.chevron} v${p.latest}`),console.log(),m(),console.log(),!t.yes&&!await h({message:`${C(`update.confirmMessage`,e)} (v${p.latest})?`,default:!0}))a.outro({title:C(`update.skippedOutro`,e),color:d.dim,symbol:`info`});else{f.start(`${C(`update.installingSpinner`,e)} ${w.name}@${p.latest}..`);try{let[t,...n]=s.installer.split(` `);await I(t,[...n,`-g`,`${w.name}@${p.latest}`]),f.succeed(`${C(`update.successSpinner`,e)} ${w.name} to v${p.latest}`),a.outro({title:C(`update.successOutro`,e),color:d.green,symbol:`success`})}catch(t){f.fail(`${C(`update.failSpinner`,e)} ${w.name}.`);let n=t instanceof Error?t.message:C(`update.unknownError`,e);a.outro({title:n,color:d.red,symbol:`error`,exitType:1})}}}}},R={init:{register(e){P().definition(e).action((e,t)=>P().handler(e,t))}},lang:{register(e){F().definition(e).action((e,t)=>F().handler(e,t))}},update:{register(e){L().definition(e).action((e,t)=>L().handler(e,t))}}},z=process.argv[2],B=/* @__PURE__ */ new Set([`update`,`-h`,`--help`]);async function V(){let{language:e}=M();B.has(z)||await Promise.race([(async()=>{let n=E(),r=await t(w.name,w.version);r.outdated&&(console.log(),c({headerTitle:C(`global.updateAvailableHeader`,e),items:[{title:C(`global.updateAvailableTitle`,e,r.latest,r.current),description:C(`global.updateAvailableDescription`,e,n)}],color:d.yellow}))})(),new Promise(e=>setTimeout(e,1500))]);let n=new f;n.name(w.name).description(w.description).version(w.version,`-v, --version`,C(`global.versionDescription`,e)),n.configureOutput({writeOut:e=>{if(e.trim()===w.version){let e=process.version;process.stdout.write(`v${w.version}\n${`${l.chevron} node ${e} (from PATH)`}\n`)}else process.stdout.write(e)}}),Object.values(R).forEach(e=>{e.register(n)}),await s(async()=>{await n.parseAsync(process.argv)})()}V();export{};
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["packageJson","chalk","pkg","\"name\"","\"email\"","\"url\"","\"types\"","\"import\"","\"plekta\"","\"node\"","\"build\"","\"start\"","\"lint\"","\"clean\"","\"prepublishOnly\"","\"typecheck\"","\"chalk\"","\"commander\"","\"ora\"","\"tsdown\"","createCli","TamioError","message","code","exitWithError","error","display","initCommand","typedCommand","program","createCommandTitle","commandTitle","spinner","createSpinner","dir","command","directoryName","input","value","testCommand","execFileAsync","promisify","execFile","updateCommand","pm","getPackageManager","info","checkForUpdateFresh","renderVersionTree","showTree","symbols","options","confirm","executable","args","commandHandlers","invoked","SKIP_PASSIVE_CHECK","main","resolveCommandName","checkForUpdate","resolve","Command","str","nodeVersion","handler","onCancel"],"sources":["../package.json","../src/config/package.ts","../src/core/cli.ts","../src/core/errors.ts","../src/commands/handlers/init.helper.ts","../src/commands/handlers/test.handler.ts","../src/commands/handlers/update.handler.ts","../src/commands/index.ts","../src/index.ts"],"sourcesContent":["","import packageJson from \"../../package.json\";\n\nexport const pkg = { ...packageJson };\n","import { createCli } from \"@plekta/utils\";\nimport { pkg } from \"../config/package\";\n\nexport const { createCommandTitle, resolveCommandName } = createCli({\n name: pkg.name,\n aliases: [pkg.name],\n});\n","import chalk from \"chalk\";\nimport { display } from \"@plekta/utils\";\n\nexport type TamioErrorCode =\n | \"INVALID_PACKAGE_NAME\"\n | \"INVALID_VERSION\"\n | \"VERSION_NOT_FOUND\"\n | \"VERSION_EXISTS\"\n | \"INVALID_TRANSITION\"\n | \"NOTHING_TO_PUBLISH\"\n | \"ALREADY_PUBLISHED\"\n | \"VERSION_SKIPPED\"\n | \"CORRUPT_STORE\"\n | \"INVALID_PACKAGE_JSON\"\n | \"PACKAGE_PRIVATE\"\n | \"UNSUPPORTED_PACKAGE_MANAGER\"\n | \"BUILD_FAILED\"\n | \"PACK_FAILED\";\n\n/**\n * Every failure raised by \"@tamio/core\". The `code` is stable, so the CLI and\n * Studio can branch on it instead of matching message text.\n */\nexport class TamioError extends Error {\n readonly code: TamioErrorCode;\n\n constructor(code: TamioErrorCode, message: string) {\n super(message);\n this.name = \"TamioError\";\n this.code = code;\n }\n}\n\n/**\n * Print an error the way every command does, then exit with code 1.\n *\n * A cancelled prompt (Ctrl-C) is rethrown instead, so the shared\n * cancellation handler in index.ts can deal with it.\n */\nexport function exitWithError(error: unknown): never {\n if (error instanceof Error && error.name === \"ExitPromptError\") {\n throw error;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n\n // Unexpected errors (bugs, not Tamio's own checks) get their stack on request.\n if (!(error instanceof TamioError) && process.env.TAMIO_DEBUG) {\n console.error(error);\n }\n\n display.outro({\n title: message,\n color: chalk.red,\n symbol: \"error\",\n exitType: 1,\n });\n\n return process.exit(1);\n}\n","import { input } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport {\n createSpinner,\n display,\n type InferCommandOptions,\n typedCommand,\n} from \"@plekta/utils\";\nimport { pkg } from \"../../config/package\";\nimport { createCommandTitle } from \"../../core/cli\";\nimport { exitWithError } from \"../../core/errors\";\n\nexport const initCommand = () => {\n //? ==========================================\n //? COMMAND DEFINITION\n //? ==========================================\n const definition = (program: Command) =>\n typedCommand(program, \"init\")\n .description(`scaffold a new ${pkg.name} project`)\n .argument(\n \"[name]\",\n \"name of the project directory (defaults to the current folder)\",\n );\n\n //? ==========================================\n //? COMMAND HANDLER\n //? ==========================================\n const handler = async (\n _options: InferCommandOptions<ReturnType<typeof definition>>,\n command?: Command,\n ) => {\n const { commandTitle } = createCommandTitle({\n command,\n version: pkg.version,\n });\n\n display.intro({\n title: commandTitle,\n color: chalk.cyan,\n });\n\n const spinner = createSpinner(\"cyan\");\n const dir = command?.args[0];\n\n try {\n const directoryName =\n dir ||\n (await input({\n message: \"Where should your project live?\",\n default: `${pkg.name}-dApp`,\n validate: (value) => {\n if (!value.trim()) return \"directory name cannot be empty.\";\n return true;\n },\n }));\n\n spinner.succeed(`${chalk.cyan(directoryName)} created successfully`);\n\n display.outro({\n title: commandTitle,\n color: chalk.magenta,\n });\n } catch (error) {\n spinner.stop();\n exitWithError(error);\n }\n };\n\n return { definition, handler };\n};\n","import chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport {\n display,\n type InferCommandOptions,\n typedCommand,\n} from \"@plekta/utils\";\nimport { pkg } from \"../../config/package\";\nimport { createCommandTitle } from \"../../core/cli\";\n\nexport const testCommand = () => {\n //? ==========================================\n //? COMMAND DEFINITION\n //? ==========================================\n const definition = (program: Command) =>\n typedCommand(program, \"test\")\n .description(\"testing the cli command\")\n .option(\"-f, --flag\", \"show flag in display\")\n .option(\"-d, --disk\", \"show something\");\n\n //? ==========================================\n //? COMMAND HANDLER\n //? ==========================================\n const handler = async (\n options: InferCommandOptions<ReturnType<typeof definition>>,\n command?: Command,\n ) => {\n const { commandTitle } = createCommandTitle({\n command,\n version: pkg.version,\n });\n\n display.intro({\n title: commandTitle,\n color: chalk.magenta,\n });\n\n console.log({ options });\n\n display.outro({\n title: commandTitle,\n color: chalk.magenta,\n });\n };\n\n return { definition, handler };\n};\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { confirm } from \"@inquirer/prompts\";\nimport chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport {\n checkForUpdateFresh,\n createSpinner,\n display,\n getPackageManager,\n type InferCommandOptions,\n showTree,\n symbols,\n typedCommand,\n} from \"@plekta/utils\";\nimport { pkg } from \"../../config/package\";\nimport { createCommandTitle } from \"../../core/cli\";\n\nconst execFileAsync = promisify(execFile);\n\nexport const updateCommand = () => {\n //? ==========================================\n //? COMMAND DEFINITION\n //? ==========================================\n const definition = (program: Command) =>\n typedCommand(program, \"update\")\n .description(\"check and update to newest version\")\n .option(\"-y, --yes\", \"skip update confirmation\");\n\n //? ==========================================\n //? COMMAND HANDLER\n //? ==========================================\n const handler = async (\n options: InferCommandOptions<ReturnType<typeof definition>>,\n command?: Command,\n ) => {\n const pm = getPackageManager();\n\n const { commandTitle } = createCommandTitle({\n command,\n version: pkg.version,\n });\n\n display.intro({\n title: commandTitle,\n color: chalk.cyan,\n symbol: \"gear\",\n });\n\n const spinner = createSpinner(\"cyan\");\n spinner.start(\"checking npm registry..\");\n\n const info = await checkForUpdateFresh(pkg.name, pkg.version);\n\n const renderVersionTree = () => {\n showTree({\n headerTitle: \"version status\",\n items: [\n {\n title: `latest: v${info.latest}`,\n description: `installed: v${info.current}`,\n },\n ],\n color: info.outdated ? chalk.yellow : chalk.cyan,\n });\n };\n\n if (!info.outdated) {\n spinner.succeed(\"already up to date\");\n\n console.log();\n renderVersionTree();\n console.log();\n\n display.outro({\n title: `you're on the latest version (v${info.current}).`,\n color: chalk.green,\n symbol: \"success\",\n margin: { top: false },\n });\n\n return;\n }\n\n spinner.succeed(`new version found ${symbols.chevron} v${info.latest}`);\n\n console.log();\n renderVersionTree();\n console.log();\n\n if (!options.yes) {\n const shouldUpdate = await confirm({\n message: `update to the latest version (v${info.latest})?`,\n default: true,\n });\n\n if (!shouldUpdate) {\n display.outro({\n title: \"update skipped.\",\n color: chalk.dim,\n symbol: \"info\",\n });\n\n return;\n }\n }\n\n spinner.start(`installing ${pkg.name}@${info.latest}..`);\n\n try {\n const [executable, ...args] = pm.installer.split(\" \");\n\n await execFileAsync(executable, [\n ...args,\n \"-g\",\n `${pkg.name}@${info.latest}`,\n ]);\n\n spinner.succeed(`updated ${pkg.name} to v${info.latest}`);\n\n display.outro({\n title: \"successfully updated.\",\n color: chalk.green,\n symbol: \"success\",\n });\n } catch (error) {\n spinner.fail(`failed to update ${pkg.name}.`);\n\n const message =\n error instanceof Error ? error.message : \"unknown update error.\";\n\n display.outro({\n title: message,\n color: chalk.red,\n symbol: \"error\",\n exitType: 1,\n });\n }\n };\n\n return { definition, handler };\n};\n","import type { Command } from \"commander\";\nimport { initCommand } from \"./handlers/init.helper\";\nimport { testCommand } from \"./handlers/test.handler\";\nimport { updateCommand } from \"./handlers/update.handler\";\n\nexport const commandHandlers = {\n init: {\n register(program: Command) {\n initCommand()\n .definition(program)\n .action((options, command) => initCommand().handler(options, command));\n },\n },\n test: {\n register(program: Command) {\n testCommand()\n .definition(program)\n .action((options, command) => testCommand().handler(options, command));\n },\n },\n update: {\n register(program: Command) {\n updateCommand()\n .definition(program)\n .action((options, command) =>\n updateCommand().handler(options, command),\n );\n },\n },\n};\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport {\n checkForUpdate,\n onCancel,\n showTree,\n symbols,\n} from \"@plekta/utils\";\nimport { commandHandlers } from \"./commands\";\nimport { pkg } from \"./config/package\";\nimport { resolveCommandName } from \"./core/cli\";\n\nconst invoked = process.argv[2];\nconst SKIP_PASSIVE_CHECK = new Set([\"update\", \"-h\", \"--help\"]);\n\nasync function main() {\n if (!SKIP_PASSIVE_CHECK.has(invoked)) {\n await Promise.race([\n (async () => {\n const command = resolveCommandName();\n\n const info = await checkForUpdate(pkg.name, pkg.version);\n\n if (info.outdated) {\n console.log();\n\n showTree({\n headerTitle: \"update available\",\n items: [\n {\n title: `v${info.latest} is now available (current: v${info.current})`,\n description: `Run \\`${command} update\\` to upgrade to the latest version.`,\n },\n ],\n color: chalk.yellow,\n });\n }\n })(),\n new Promise((resolve) => setTimeout(resolve, 1500)),\n ]);\n }\n\n const program = new Command();\n\n program\n .name(pkg.name)\n .description(pkg.description)\n .version(pkg.version, \"-v, --version\", \"show version\");\n\n program.configureOutput({\n writeOut: (str) => {\n if (str.trim() === pkg.version) {\n const nodeVersion = process.version;\n\n process.stdout.write(\n `v${pkg.version}\\n${`${symbols.chevron} node ${nodeVersion} (from PATH)`}\\n`,\n );\n\n return;\n }\n\n process.stdout.write(str);\n },\n });\n\n Object.values(commandHandlers).forEach((handler) => {\n handler.register(program);\n });\n\n // Parse arguments inside the shared cancellation wrapper.\n await onCancel(async () => {\n await program.parseAsync(process.argv);\n })();\n}\n\nvoid main();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["packageJson","chalk","path","fs","os","languages","latest","current","command","value","t","args","langObj","lang","keys","pathKey","k","fallback","fk","pkg","\"name\"","\"email\"","\"url\"","\"types\"","\"import\"","\"plekta\"","\"node\"","\"build\"","\"start\"","\"lint\"","\"clean\"","\"prepublishOnly\"","\"typecheck\"","\"chalk\"","\"commander\"","\"ora\"","\"tsdown\"","createCli","TamioError","message","code","exitWithError","error","display","configDir","configFile","defaultConfig","getConfig","data","saveConfig","updated","newConfig","initCommand","typedCommand","program","language","createCommandTitle","commandTitle","spinner","createSpinner","validateDirectory","result","checkDirectory","directoryName","validation","input","directoryPath","mkdir","langCommand","currentConfig","selectedLang","inputLang","showTree","key","val","select","execFileAsync","promisify","execFile","updateCommand","pm","getPackageManager","info","checkForUpdateFresh","renderVersionTree","symbols","options","confirm","executable","commandHandlers","invoked","SKIP_PASSIVE_CHECK","main","resolveCommandName","checkForUpdate","resolve","Command","str","nodeVersion","handler","onCancel"],"sources":["../src/config/languages.ts","../package.json","../src/config/package.ts","../src/core/cli.ts","../src/core/errors.ts","../src/core/storage.ts","../src/commands/handlers/init.helper.ts","../src/commands/handlers/lang.handler.ts","../src/commands/handlers/update.handler.ts","../src/commands/index.ts","../src/index.ts"],"sourcesContent":["import chalk from \"chalk\";\n\nexport const languages = {\n english: {\n name: \"English\",\n description: \"Standard crystal clear English.\",\n global: {\n updateAvailableHeader: \"update available\",\n updateAvailableTitle: (latest: string, current: string) =>\n `v${latest} is now available (current: v${current})`,\n updateAvailableDescription: (command: string) =>\n `Run \\`${command} update\\` to upgrade to the latest version.`,\n versionDescription: \"show version\",\n },\n lang: {\n definitionDescription: \"configure CLI display language vibe\",\n selectPrompt: \"Select your preferred CLI language vibe:\",\n updatedSuccess: \"Language updated to\",\n },\n init: {\n description: (value: string) => `scaffold a new ${value} project`,\n argDescription: \"name of the project directory\",\n promptDir: \"Where should your project live?\",\n dirCreated: (value: string) => `${chalk.cyan(value)} directory created.`,\n errors: {\n emptyName: \"Directory name cannot be empty.\",\n notEmpty: (value: string) =>\n `Directory \"${value}\" already exists and is not empty.`,\n accessError: (value: string) =>\n `Unable to access directory \"${value}\". Please choose another path.`,\n },\n },\n update: {\n description: \"check and update to newest version\",\n optionYes: \"skip update confirmation\",\n checkingRegistry: \"checking npm registry..\",\n versionStatusHeader: \"version status\",\n alreadyUpToDate: \"already up to date\",\n alreadyLatestOutro: \"you're on the latest version\",\n newVersionFound: \"new version found\",\n confirmMessage: \"update to the latest version\",\n skippedOutro: \"update skipped.\",\n installingSpinner: \"installing\",\n successSpinner: \"updated\",\n successOutro: \"successfully updated.\",\n failSpinner: \"failed to update\",\n unknownError: \"unknown update error.\",\n },\n test: {\n description: \"testing the cli command\",\n optionFlag: \"show flag in display\",\n optionDisk: \"show something\",\n },\n },\n \"gen-z\": {\n name: \"Gen-Z Slang\",\n description: \"No cap, absolute rizz terminology fr fr.\",\n global: {\n updateAvailableHeader: \"vibe check: update available\",\n updateAvailableTitle: (latest: string, current: string) =>\n `v${latest} is dropping rn (current: v${current})`,\n updateAvailableDescription: (command: string) =>\n `Run \\`${command} update\\` to get the drip bestie.`,\n versionDescription: \"show version bestie\",\n },\n lang: {\n definitionDescription: \"vibe-check and switch your CLI language\",\n selectPrompt: \"Pick your vibe bestie:\",\n updatedSuccess: \"Vibe successfully updated to\",\n },\n init: {\n description: (value: string) => `cook up a fresh ${value} project no cap`,\n argDescription: \"name of the project directory bestie\",\n promptDir: \"Where we dropping this masterpiece?\",\n dirCreated: \"brodie got cooked fr.\",\n errors: {\n emptyName: \"Directory name cannot be ghosted, type something bestie.\",\n notEmpty: (value: string) =>\n `Directory \"${value}\" is already occupied, pick another spot bestie.`,\n accessError: (value: string) =>\n `Can't touch \"${value}\" rn, choose a different path.`,\n },\n },\n update: {\n description: \"check for major glow ups and update\",\n optionYes: \"skip update confirmation bestie\",\n checkingRegistry: \"vibe-checking npm registry rn..\",\n versionStatusHeader: \"vibe check status\",\n alreadyUpToDate: \"we so locked in, completely current no cap\",\n alreadyLatestOutro: \"you're already at peak performance\",\n newVersionFound: \"major glow up available bestie\",\n confirmMessage: \"you tryna level up to this fresh drop\",\n skippedOutro: \"we staying retro bestie, update skipped.\",\n installingSpinner: \"installing the drip\",\n successSpinner: \"upgraded\",\n successOutro: \"w rizz, successfully updated no cap.\",\n failSpinner: \"oof it flopped, failed to update\",\n unknownError: \"major L, unknown update error.\",\n },\n test: {\n description: \"testing the cli command fr\",\n optionFlag: \"show flag in display bestie\",\n optionDisk: \"show something cool\",\n },\n },\n shakespeare: {\n name: \"Shakespearean\",\n description: \"Hark! Verily speaketh in olden tongue.\",\n global: {\n updateAvailableHeader: \"royal notice: update available\",\n updateAvailableTitle: (latest: string, current: string) =>\n `v${latest} hath arrived (current: v${current})`,\n updateAvailableDescription: (command: string) =>\n `Execute \\`${command} update\\` to claim the new vessel.`,\n versionDescription: \"display version of thy vessel\",\n },\n lang: {\n definitionDescription: \"configure thy royal tongue for the CLI\",\n selectPrompt: \"Choose thy preferred dialect, good sir:\",\n updatedSuccess: \"Thy tongue hath been shifted unto\",\n },\n init: {\n description: (value: string) => `forge a noble ${value} enterprise`,\n argDescription: \"the title of thy domain\",\n promptDir: \"Whither shall thy noble enterprise be founded?\",\n dirCreated: \"thy domain hath been wrought successfully.\",\n errors: {\n emptyName: \"Thy directory name cannot be void.\",\n notEmpty: (value: string) =>\n `Thy domain \"${value}\" already exists and is not desolate.`,\n accessError: (value: string) =>\n `Alas, cannot reach \"${value}\". Choose another path.`,\n },\n },\n update: {\n description: \"consult the royal registry for newer designs\",\n optionYes: \"bypass royal inquiry\",\n checkingRegistry: \"consulting the royal registry of npm..\",\n versionStatusHeader: \"royal status of vessels\",\n alreadyUpToDate: \"thy vessel is already of the newest design\",\n alreadyLatestOutro: \"thou art already upon the highest pinnacle\",\n newVersionFound: \"behold! a fairer version hath arrived\",\n confirmMessage: \"dost thou wish to ascend unto this newer realm\",\n skippedOutro: \"very well, thy current state remaineth undisturbed.\",\n installingSpinner: \"raising the sails for\",\n successSpinner: \"ascended\",\n successOutro: \"huzzah! triumphant ascension achieved.\",\n failSpinner: \"alas! the enterprise of updating hath faltered for\",\n unknownError: \"a mysterious woe befell the update.\",\n },\n test: {\n description: \"test the mock trials of the cli\",\n optionFlag: \"display thy banner flag\",\n optionDisk: \"reveal thy hidden relics\",\n },\n },\n pirate: {\n name: \"Pirate\",\n description: \"Ahoy matey! Talk like a salty sea dog.\",\n global: {\n updateAvailableHeader: \"horizon notice: update available\",\n updateAvailableTitle: (latest: string, current: string) =>\n `v${latest} be spotted on the radar (current: v${current})`,\n updateAvailableDescription: (command: string) =>\n `Run \\`${command} update\\` to hoist the new sails, matey!`,\n versionDescription: \"show ship version\",\n },\n lang: {\n definitionDescription: \"set yer course and choose yer tongue, matey\",\n selectPrompt: \"Choose yer preferred tongue, ye scurvy dog:\",\n updatedSuccess: \"Language set to arrr\",\n },\n init: {\n description: (value: string) =>\n `build a brand new ${value} treasure chest`,\n argDescription: \"name of the treasure cove\",\n promptDir: \"Where shall we anchor this new vessel?\",\n dirCreated: \"cove carved out successfully, arrr!\",\n errors: {\n emptyName: \"Yer cove name can't be empty water, matey!\",\n notEmpty: (value: string) =>\n `The cove \"${value}\" is already claimed by another crew!`,\n accessError: (value: string) =>\n `Can't drop anchor at \"${value}\". Pick another spot!`,\n },\n },\n update: {\n description: \"scan the horizon for newer charts\",\n optionYes: \"skip the captain's warning\",\n checkingRegistry: \"scouting the npm horizon..\",\n versionStatusHeader: \"ship status log\",\n alreadyUpToDate: \"yer ship is already seaworthy and up to date\",\n alreadyLatestOutro: \"ye be sailing the newest ship on the seas\",\n newVersionFound: \"treasure spotted on the horizon\",\n confirmMessage: \"hoist the sails and update to the newest chart\",\n skippedOutro: \"update abandoned to Davy Jones' locker.\",\n installingSpinner: \"hoisting new rigging for\",\n successSpinner: \"upgraded\",\n successOutro: \"shiver me timbers, successfully updated!\",\n failSpinner: \"mutiny! failed to update\",\n unknownError: \"kraken attack! unknown update error.\",\n },\n test: {\n description: \"test the cannons of the CLI\",\n optionFlag: \"fly the Jolly Roger flag\",\n optionDisk: \"show treasures from the bilge\",\n },\n },\n} as const;\n\n// Automatically derives LanguageType from the languages object keys\nexport type LanguageType = keyof typeof languages;\n\n// Recursively builds union types of all dot-separated object paths for IntelliSense autocomplete\ntype DeepPaths<T> = T extends object\n ? {\n [K in keyof T]: K extends string\n ? T[K] extends (...args: any[]) => any\n ? K\n : T[K] extends string\n ? K\n : K | `${K}.${DeepPaths<T[K]>}`\n : never;\n }[keyof T]\n : never;\n\nexport type TranslationKey = DeepPaths<(typeof languages)[\"english\"]>;\n\nexport const t = (\n pathKey: TranslationKey | (string & {}),\n lang: LanguageType = \"english\",\n ...args: any[]\n): string => {\n const langObj = languages[lang] || languages.english;\n const keys = (pathKey as string).split(\".\");\n let current: any = langObj;\n\n for (const k of keys) {\n if (current && typeof current === \"object\" && k in current) {\n current = current[k];\n } else {\n let fallback: any = languages.english;\n for (const fk of keys) {\n if (fallback && typeof fallback === \"object\" && fk in fallback) {\n fallback = fallback[fk];\n } else {\n return pathKey;\n }\n }\n current = fallback;\n break;\n }\n }\n\n // If the value is a function, call it with the provided arguments\n if (typeof current === \"function\") {\n return current(...args);\n }\n\n return typeof current === \"string\" ? current : pathKey;\n};\n","","import packageJson from \"../../package.json\";\n\nexport const pkg = { ...packageJson };\n","import { createCli } from \"@plekta/utils\";\nimport { pkg } from \"../config/package\";\n\nexport const { createCommandTitle, resolveCommandName } = createCli({\n name: pkg.name,\n aliases: [pkg.name],\n});\n","import { display } from \"@plekta/utils\";\nimport chalk from \"chalk\";\n\nexport type TamioErrorCode =\n | \"INVALID_PACKAGE_NAME\"\n | \"INVALID_VERSION\"\n | \"VERSION_NOT_FOUND\"\n | \"VERSION_EXISTS\"\n | \"INVALID_TRANSITION\"\n | \"NOTHING_TO_PUBLISH\"\n | \"ALREADY_PUBLISHED\"\n | \"VERSION_SKIPPED\"\n | \"CORRUPT_STORE\"\n | \"INVALID_PACKAGE_JSON\"\n | \"PACKAGE_PRIVATE\"\n | \"UNSUPPORTED_PACKAGE_MANAGER\"\n | \"BUILD_FAILED\"\n | \"PACK_FAILED\";\n\n/**\n * Every failure raised by \"@tamio/core\". The `code` is stable, so the CLI and\n * Studio can branch on it instead of matching message text.\n */\nexport class TamioError extends Error {\n readonly code: TamioErrorCode;\n\n constructor(code: TamioErrorCode, message: string) {\n super(message);\n this.name = \"TamioError\";\n this.code = code;\n }\n}\n\n/**\n * Print an error the way every command does, then exit with code 1.\n *\n * A cancelled prompt (Ctrl-C) is rethrown instead, so the shared\n * cancellation handler in index.ts can deal with it.\n */\nexport function exitWithError(error: unknown): never {\n if (error instanceof Error && error.name === \"ExitPromptError\") {\n throw error;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n\n // Unexpected errors (bugs, not Tamio's own checks) get their stack on request.\n if (!(error instanceof TamioError) && process.env.TAMIO_DEBUG) {\n console.error(error);\n }\n\n display.outro({\n title: message,\n color: chalk.red,\n symbol: \"error\",\n exitType: 1,\n });\n\n return process.exit(1);\n}\n","import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport type { LanguageType } from \"../config/languages\";\nimport { pkg } from \"../config/package\";\n\nconst configDir = path.join(os.homedir(), `.${pkg.name}`);\nconst configFile = path.join(configDir, \"config.json\");\n\nexport interface Config {\n language: LanguageType;\n [key: string]: any;\n}\n\nconst defaultConfig: Config = {\n language: \"english\",\n};\n\nexport const getConfig = (): Config => {\n try {\n if (fs.existsSync(configFile)) {\n const data = fs.readFileSync(configFile, \"utf-8\");\n return { ...defaultConfig, ...JSON.parse(data) };\n }\n } catch {}\n return defaultConfig;\n};\n\nexport const saveConfig = (newConfig: Partial<Config>) => {\n try {\n if (!fs.existsSync(configDir)) {\n fs.mkdirSync(configDir, { recursive: true });\n }\n const current = getConfig();\n const updated = { ...current, ...newConfig };\n fs.writeFileSync(configFile, JSON.stringify(updated, null, 2), \"utf-8\");\n } catch (error) {\n console.error(\"Failed to save config:\", error);\n }\n};\n","import { mkdir } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { input } from \"@inquirer/prompts\";\nimport {\n checkDirectory,\n createSpinner,\n display,\n type InferCommandOptions,\n typedCommand,\n} from \"@plekta/utils\";\nimport chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport { t } from \"../../config/languages\";\nimport { pkg } from \"../../config/package\";\nimport { createCommandTitle } from \"../../core/cli\";\nimport { exitWithError } from \"../../core/errors\";\nimport { getConfig } from \"../../core/storage\";\n\nexport const initCommand = () => {\n const { language } = getConfig();\n\n const definition = (program: Command) =>\n typedCommand(program, \"init\")\n .description(t(\"init.description\", language, pkg.name))\n .argument(\"[name]\", t(\"init.argDescription\", language));\n\n const handler = async (\n _options: InferCommandOptions<ReturnType<typeof definition>>,\n command?: Command,\n ) => {\n const { commandTitle } = createCommandTitle({\n command,\n version: pkg.version,\n });\n\n display.intro({\n title: commandTitle,\n color: chalk.cyan,\n });\n\n const spinner = createSpinner(\"cyan\");\n\n try {\n const validateDirectory = async (value: string) => {\n if (!value.trim()) {\n return t(\"init.errors.emptyName\", language);\n }\n\n try {\n const result = await checkDirectory(value);\n\n if (result.exists && !result.isEmpty) {\n return t(\"init.errors.notEmpty\", language, value);\n }\n\n return true;\n } catch {\n return t(\"init.errors.accessError\", language, value);\n }\n };\n\n let directoryName = command?.args[0];\n\n if (directoryName) {\n const validation = await validateDirectory(directoryName);\n\n if (validation !== true) {\n throw new Error(validation);\n }\n } else {\n directoryName = await input({\n message: t(\"init.promptDir\", language),\n default: `${pkg.name}-dapp`,\n validate: validateDirectory,\n });\n }\n\n const directoryPath = path.resolve(process.cwd(), directoryName);\n\n await mkdir(directoryPath, { recursive: true });\n\n spinner.succeed(t(\"init.dirCreated\", language, directoryName));\n\n display.outro({\n title: \"successfully\",\n color: chalk.green,\n });\n } catch (error) {\n spinner.stop();\n exitWithError(error);\n }\n };\n\n return { definition, handler };\n};\n","import { select } from \"@inquirer/prompts\";\nimport {\n display,\n type InferCommandOptions,\n showTree,\n typedCommand,\n} from \"@plekta/utils\";\nimport chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport { type LanguageType, languages, t } from \"../../config/languages\";\nimport { pkg } from \"../../config/package\";\nimport { createCommandTitle } from \"../../core/cli\";\nimport { exitWithError } from \"../../core/errors\";\nimport { getConfig, saveConfig } from \"../../core/storage\";\n\nexport const langCommand = () => {\n const { language } = getConfig();\n\n const definition = (program: Command) =>\n typedCommand(program, \"lang\")\n .description(t(\"lang.definitionDescription\", language))\n .argument(\n \"[language]\",\n \"preferred CLI language (e.g., english, gen-z, shakespeare, pirate)\",\n );\n\n const handler = async (\n _options: InferCommandOptions<ReturnType<typeof definition>>,\n command?: Command,\n ) => {\n const currentConfig = getConfig();\n\n const { commandTitle } = createCommandTitle({\n command,\n version: pkg.version,\n });\n\n display.intro({\n title: commandTitle,\n color: chalk.cyan,\n });\n\n try {\n let selectedLang: LanguageType;\n const inputLang = command?.args[0]?.toLowerCase();\n\n if (inputLang) {\n if (inputLang in languages) {\n selectedLang = inputLang as LanguageType;\n } else {\n showTree({\n headerTitle: `invalid language: \"${command?.args[0]}\"`,\n items: Object.entries(languages).map(([key, val]) => ({\n title: `${val.name}: ${chalk.cyan(key)}`,\n description: val.description,\n })),\n color: chalk.red,\n });\n\n display.outro({\n title: \"please use a valid language key (e.g. gen-z).\",\n color: chalk.red,\n symbol: \"error\",\n });\n return;\n }\n } else {\n selectedLang = await select<LanguageType>({\n message: t(\"lang.selectPrompt\", language),\n default: currentConfig.language || \"english\",\n choices: Object.entries(languages).map(([key, val]) => ({\n name:\n val.name.toLowerCase() === \"english\"\n ? `${val.name} (Default)`\n : val.name,\n value: key as LanguageType,\n description: val.description,\n })),\n });\n }\n\n saveConfig({ language: selectedLang });\n\n display.outro({\n title: `${t(\"lang.updatedSuccess\", selectedLang)} ${languages[selectedLang].name}!`,\n color: chalk.green,\n symbol: \"success\",\n margin: { top: Boolean(!inputLang) },\n });\n } catch (error) {\n exitWithError(error);\n }\n };\n\n return { definition, handler };\n};\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { confirm } from \"@inquirer/prompts\";\nimport {\n checkForUpdateFresh,\n createSpinner,\n display,\n getPackageManager,\n type InferCommandOptions,\n showTree,\n symbols,\n typedCommand,\n} from \"@plekta/utils\";\nimport chalk from \"chalk\";\nimport type { Command } from \"commander\";\nimport { t } from \"../../config/languages\";\nimport { pkg } from \"../../config/package\";\nimport { createCommandTitle } from \"../../core/cli\";\nimport { getConfig } from \"../../core/storage\";\n\nconst execFileAsync = promisify(execFile);\n\nexport const updateCommand = () => {\n const { language } = getConfig();\n\n const definition = (program: Command) =>\n typedCommand(program, \"update\")\n .description(t(\"update.description\", language))\n .option(\"-y, --yes\", t(\"update.optionYes\", language));\n\n const handler = async (\n options: InferCommandOptions<ReturnType<typeof definition>>,\n command?: Command,\n ) => {\n const pm = getPackageManager();\n\n const { commandTitle } = createCommandTitle({\n command,\n version: pkg.version,\n });\n\n display.intro({\n title: commandTitle,\n color: chalk.cyan,\n symbol: \"gear\",\n });\n\n const spinner = createSpinner(\"cyan\");\n spinner.start(t(\"update.checkingRegistry\", language));\n\n const info = await checkForUpdateFresh(pkg.name, pkg.version);\n\n const renderVersionTree = () => {\n showTree({\n headerTitle: t(\"update.versionStatusHeader\", language),\n items: [\n {\n title: `latest: v${info.latest}`,\n description: `installed: v${info.current}`,\n },\n ],\n color: info.outdated ? chalk.yellow : chalk.cyan,\n });\n };\n\n if (!info.outdated) {\n spinner.succeed(t(\"update.alreadyUpToDate\", language));\n\n console.log();\n renderVersionTree();\n console.log();\n\n display.outro({\n title: `${t(\"update.alreadyLatestOutro\", language)} (v${info.current}).`,\n color: chalk.green,\n symbol: \"success\",\n margin: { top: false },\n });\n\n return;\n }\n\n spinner.succeed(\n `${t(\"update.newVersionFound\", language)} ${symbols.chevron} v${info.latest}`,\n );\n\n console.log();\n renderVersionTree();\n console.log();\n\n if (!options.yes) {\n const shouldUpdate = await confirm({\n message: `${t(\"update.confirmMessage\", language)} (v${info.latest})?`,\n default: true,\n });\n\n if (!shouldUpdate) {\n display.outro({\n title: t(\"update.skippedOutro\", language),\n color: chalk.dim,\n symbol: \"info\",\n });\n\n return;\n }\n }\n\n spinner.start(\n `${t(\"update.installingSpinner\", language)} ${pkg.name}@${info.latest}..`,\n );\n\n try {\n const [executable, ...args] = pm.installer.split(\" \");\n\n await execFileAsync(executable, [\n ...args,\n \"-g\",\n `${pkg.name}@${info.latest}`,\n ]);\n\n spinner.succeed(\n `${t(\"update.successSpinner\", language)} ${pkg.name} to v${info.latest}`,\n );\n\n display.outro({\n title: t(\"update.successOutro\", language),\n color: chalk.green,\n symbol: \"success\",\n });\n } catch (error) {\n spinner.fail(`${t(\"update.failSpinner\", language)} ${pkg.name}.`);\n\n const message =\n error instanceof Error\n ? error.message\n : t(\"update.unknownError\", language);\n\n display.outro({\n title: message,\n color: chalk.red,\n symbol: \"error\",\n exitType: 1,\n });\n }\n };\n\n return { definition, handler };\n};\n","import type { Command } from \"commander\";\nimport { initCommand } from \"./handlers/init.helper\";\nimport { langCommand } from \"./handlers/lang.handler\";\nimport { updateCommand } from \"./handlers/update.handler\";\n\nexport const commandHandlers = {\n init: {\n register(program: Command) {\n initCommand()\n .definition(program)\n .action((options, command) => initCommand().handler(options, command));\n },\n },\n lang: {\n register(program: Command) {\n langCommand()\n .definition(program)\n .action((options, command) => langCommand().handler(options, command));\n },\n },\n update: {\n register(program: Command) {\n updateCommand()\n .definition(program)\n .action((options, command) =>\n updateCommand().handler(options, command),\n );\n },\n },\n};\n","import { checkForUpdate, onCancel, showTree, symbols } from \"@plekta/utils\";\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { commandHandlers } from \"./commands\";\nimport { t } from \"./config/languages\";\nimport { pkg } from \"./config/package\";\nimport { resolveCommandName } from \"./core/cli\";\nimport { getConfig } from \"./core/storage\";\n\nconst invoked = process.argv[2];\nconst SKIP_PASSIVE_CHECK = new Set([\"update\", \"-h\", \"--help\"]);\n\nasync function main() {\n const { language } = getConfig();\n\n if (!SKIP_PASSIVE_CHECK.has(invoked)) {\n await Promise.race([\n (async () => {\n const command = resolveCommandName();\n\n const info = await checkForUpdate(pkg.name, pkg.version);\n\n if (info.outdated) {\n console.log();\n\n showTree({\n headerTitle: t(\"global.updateAvailableHeader\", language),\n items: [\n {\n title: t(\n \"global.updateAvailableTitle\",\n language,\n info.latest,\n info.current,\n ),\n description: t(\n \"global.updateAvailableDescription\",\n language,\n command,\n ),\n },\n ],\n color: chalk.yellow,\n });\n }\n })(),\n new Promise((resolve) => setTimeout(resolve, 1500)),\n ]);\n }\n\n const program = new Command();\n\n program\n .name(pkg.name)\n .description(pkg.description)\n .version(\n pkg.version,\n \"-v, --version\",\n t(\"global.versionDescription\", language),\n );\n\n program.configureOutput({\n writeOut: (str) => {\n if (str.trim() === pkg.version) {\n const nodeVersion = process.version;\n\n process.stdout.write(\n `v${pkg.version}\\n${`${symbols.chevron} node ${nodeVersion} (from PATH)`}\\n`,\n );\n\n return;\n }\n\n process.stdout.write(str);\n },\n });\n\n Object.values(commandHandlers).forEach((handler) => {\n handler.register(program);\n });\n\n // Parse arguments inside the shared cancellation wrapper.\n await onCancel(async () => {\n await program.parseAsync(process.argv);\n })();\n}\n\nvoid main();\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "plekta",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"description": "Description coming soon",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -35,11 +35,11 @@
|
|
|
35
35
|
"clean": "rm -rf .turbo dist node_modules",
|
|
36
36
|
"pack:dry": "bun run build && bun pm pack --dry-run",
|
|
37
37
|
"prepublishOnly": "bun run build",
|
|
38
|
-
"typecheck": "
|
|
38
|
+
"typecheck": "tsc --noEmit"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@inquirer/prompts": "^8.7.2",
|
|
42
|
-
"@plekta/utils": "^0.0.
|
|
42
|
+
"@plekta/utils": "^0.0.4",
|
|
43
43
|
"chalk": "^6.0.0",
|
|
44
44
|
"commander": "^15.0.0",
|
|
45
45
|
"ora": "^9.4.1"
|