diff --git a/.gitignore b/.gitignore index 9b1ee42..19dc4d8 100644 --- a/.gitignore +++ b/.gitignore @@ -115,59 +115,10 @@ web_modules/ .next out -# Nuxt.js build / generate output - -.nuxt -dist - -# Gatsby files - -# Comment in the public line in if your project uses Gatsby and not Next.js - -# https://nextjs.org/blog/next-9-1#public-directory-support - -# public - -# vuepress build output - -.vuepress/dist - -# vuepress v2.x temp and cache directory - -.temp - -# Docusaurus cache and generated files - -.docusaurus - -# Serverless directories - -.serverless/ - -# FuseBox cache - -.fusebox/ - -# DynamoDB Local files - -.dynamodb/ - -# TernJS port file - -.tern-port - # Stores VSCode versions used for testing VSCode extensions .vscode-test -# yarn v2 - -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - # IntelliJ based IDEs .idea diff --git a/bun.lockb b/bun.lockb index 5fed2ff..1bcf9f9 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/dist/palette.toml b/dist/palette.toml new file mode 100644 index 0000000..4f32a96 --- /dev/null +++ b/dist/palette.toml @@ -0,0 +1,138 @@ +name = verdigris +version = 0.0.1 +license = GPL-3.0-only +sourcecode = https://git.basking.monster/gaiety/verdigris + +[author] +name = Gaiety +email = ava+verdigris@gaiety.me +url = https://gaiety.me + +[colors] + +[colors.pit] +name = "Pit" +l = 20 +c = 3 +h = 350 +hex = "#201018" + +[colors.depths] +name = "Depths" +l = 27 +c = 3 +h = 350 +hex = "#322028" + +[colors.stope] +name = "Stope" +l = 34 +c = 3 +h = 350 +hex = "#44323A" + +[colors.text] +name = "Text" +l = 92 +c = 3 +h = 350 +hex = "#F5DDE7" + +[colors.dark_red] +name = "Dark Red" +l = 82 +c = 12 +h = 0 +hex = "#FFA3C1" + +[colors.light_red] +name = "Light Red" +l = 92 +c = 12 +h = 0 +hex = "#FFC3E1" + +[colors.dark_orange] +name = "Dark Orange" +l = 82 +c = 12 +h = 45 +hex = "#FFAB82" + +[colors.light_orange] +name = "Light Orange" +l = 92 +c = 12 +h = 45 +hex = "#FFCBA1" + +[colors.dark_yellow] +name = "Dark Yellow" +l = 82 +c = 12 +h = 90 +hex = "#E2C162" + +[colors.light_yellow] +name = "Light Yellow" +l = 92 +c = 12 +h = 90 +hex = "#FFE183" + +[colors.dark_green] +name = "Dark Green" +l = 82 +c = 12 +h = 135 +hex = "#A2D686" + +[colors.light_green] +name = "Light Green" +l = 92 +c = 12 +h = 135 +hex = "#C2F7A5" + +[colors.dark_teal] +name = "Dark Teal" +l = 82 +c = 12 +h = 180 +hex = "#5ADDC7" + +[colors.light_teal] +name = "Light Teal" +l = 92 +c = 12 +h = 180 +hex = "#7EFFE8" + +[colors.dark_blue] +name = "Dark Blue" +l = 82 +c = 12 +h = 270 +hex = "#A6C0FF" + +[colors.light_blue] +name = "Light Blue" +l = 92 +c = 12 +h = 270 +hex = "#C5E1FF" + +[colors.dark_purple] +name = "Dark Purple" +l = 82 +c = 12 +h = 315 +hex = "#E2ACFA" + +[colors.light_purple] +name = "Light Purple" +l = 92 +c = 12 +h = 315 +hex = "#FFCCFF" + \ No newline at end of file diff --git a/index.ts b/index.ts index 541ceff..861b38e 100644 --- a/index.ts +++ b/index.ts @@ -2,6 +2,7 @@ import { Command } from 'commander' import previewList from './src/preview/cli-list' import previewSnippet from './src/preview/cli-snippet' +import buildTOML from './src/build/toml' const program = new Command(); @@ -12,8 +13,8 @@ program program .command('preview') - .description('TODO') - .option('-v, --verbose', 'additional Logs') + .description('stdout some examples') + .option('-v, --verbose', 'additional logs') .option('--no-list', 'do not show colors as a list') .option('--no-snippet', 'do not a code snippet') .action((options) => { @@ -24,5 +25,16 @@ program if (options.snippet) previewSnippet() }); +program + .command('build') + .description('compile toml and other consumable formats') + .option('-v, --verbose', 'additional logs') + .action(async (options) => { + if (options.verbose) console.info('Building...') + const timer = process.hrtime() + await buildTOML() + console.info(`Built in ${timer[0]} seconds`) + }); + program.parse(); diff --git a/package.json b/package.json index b168dca..cbbd4ef 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,17 @@ "name": "verdigris", "module": "index.js", "type": "module", + "license": "GPL-3.0-only", + "version": "0.0.1", + "url": "https://git.basking.monster/gaiety/verdigris", + "author": { + "name": "Gaiety", + "email": "ava+verdigris@gaiety.me", + "url": "https://gaiety.me" + }, "devDependencies": { "@types/bun": "latest", + "app-root-path": "^3.1.0", "chalk": "^5.6.2", "color-convert": "^3.1.2", "commander": "^14.0.1" diff --git a/src/build/toml.ts b/src/build/toml.ts new file mode 100644 index 0000000..ded9724 --- /dev/null +++ b/src/build/toml.ts @@ -0,0 +1,70 @@ +import { name, version, license, url, author } from '../../package.json' +import appRoot from 'app-root-path' +import { rmFile, mkFilePath, appendToFile } from "../helpers/file" +import colors from '../palette' +import type color from '../helpers/color' + +const file = appRoot + '/dist/palette.toml' +const appendToTOML = async (content: string) => await appendToFile(file, content) + +export default async function(isVerbose = false) { + if (isVerbose) console.info('Removing previous build', file) + await rmFile(file) + if (isVerbose) console.info('Ensuring path and file exist', file) + await mkFilePath(file) + if (isVerbose) console.info('Writing header info to file', file) + await appendToTOML(headerTOML()) + if (isVerbose) console.info('Writing author info to file', file) + await appendToTOML(authorTOML()) + if (isVerbose) console.info('Writing color palette to file', file) + await appendToTOML(colorHeaderTOML()) + for (let index = 0; index < colors.length; index++) { + const color = colors[index] + if (isVerbose) console.info(`${color.name}…`, file) + await appendToTOML(colorTOML(color)) + } +} + +function headerTOML(): string { + return `name = ${name} +version = ${version} +license = ${license} +sourcecode = ${url} + ` +} + +function authorTOML(): string { + const { name, email, url } = author + + return ` +[author] +name = ${name} +email = ${email} +url = ${url} + ` +} +function colorHeaderTOML(): string { + return ` +[colors] + ` +} + +function colorTOML(color: color): string { + const { name, l, c, h } = color + return ` +[colors.${name.replaceAll(' ', '_').toLowerCase()}] +name = "${name}" +l = ${l} +c = ${c} +h = ${h} +hex = "${color.toHex()}" + ` +} + + +// [colors] +// +// [colors.bg] +// l = 0.2 +// c = 0.02 +// h = diff --git a/src/helpers/file.ts b/src/helpers/file.ts new file mode 100644 index 0000000..b30f0cd --- /dev/null +++ b/src/helpers/file.ts @@ -0,0 +1,27 @@ +import { appendFile, mkdir, rm } from 'node:fs/promises'; +import { dirname } from 'node:path' + +export async function mkFilePath(file: string) { + try { + await mkdir(dirname(file), { recursive: true }) + } catch (error) { + throw error + } +} + +export async function rmFile(file: string) { + try { + await rm(file) + } catch (error) { + throw error + } +} + +export async function appendToFile(file: string, content: string) { + try { + await appendFile(file, content) + } catch (error) { + throw error + } +} +