can output to toml
This commit is contained in:
parent
4726fe848b
commit
ab60e53cac
7 changed files with 258 additions and 51 deletions
49
.gitignore
vendored
49
.gitignore
vendored
|
@ -115,59 +115,10 @@ web_modules/
|
||||||
.next
|
.next
|
||||||
out
|
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
|
# Stores VSCode versions used for testing VSCode extensions
|
||||||
|
|
||||||
.vscode-test
|
.vscode-test
|
||||||
|
|
||||||
# yarn v2
|
|
||||||
|
|
||||||
.yarn/cache
|
|
||||||
.yarn/unplugged
|
|
||||||
.yarn/build-state.yml
|
|
||||||
.yarn/install-state.gz
|
|
||||||
.pnp.*
|
|
||||||
|
|
||||||
# IntelliJ based IDEs
|
# IntelliJ based IDEs
|
||||||
.idea
|
.idea
|
||||||
|
|
||||||
|
|
BIN
bun.lockb
BIN
bun.lockb
Binary file not shown.
138
dist/palette.toml
vendored
Normal file
138
dist/palette.toml
vendored
Normal file
|
@ -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"
|
||||||
|
|
16
index.ts
16
index.ts
|
@ -2,6 +2,7 @@
|
||||||
import { Command } from 'commander'
|
import { Command } from 'commander'
|
||||||
import previewList from './src/preview/cli-list'
|
import previewList from './src/preview/cli-list'
|
||||||
import previewSnippet from './src/preview/cli-snippet'
|
import previewSnippet from './src/preview/cli-snippet'
|
||||||
|
import buildTOML from './src/build/toml'
|
||||||
|
|
||||||
const program = new Command();
|
const program = new Command();
|
||||||
|
|
||||||
|
@ -12,8 +13,8 @@ program
|
||||||
|
|
||||||
program
|
program
|
||||||
.command('preview')
|
.command('preview')
|
||||||
.description('TODO')
|
.description('stdout some examples')
|
||||||
.option('-v, --verbose', 'additional Logs')
|
.option('-v, --verbose', 'additional logs')
|
||||||
.option('--no-list', 'do not show colors as a list')
|
.option('--no-list', 'do not show colors as a list')
|
||||||
.option('--no-snippet', 'do not a code snippet')
|
.option('--no-snippet', 'do not a code snippet')
|
||||||
.action((options) => {
|
.action((options) => {
|
||||||
|
@ -24,5 +25,16 @@ program
|
||||||
if (options.snippet) previewSnippet()
|
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();
|
program.parse();
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,17 @@
|
||||||
"name": "verdigris",
|
"name": "verdigris",
|
||||||
"module": "index.js",
|
"module": "index.js",
|
||||||
"type": "module",
|
"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": {
|
"devDependencies": {
|
||||||
"@types/bun": "latest",
|
"@types/bun": "latest",
|
||||||
|
"app-root-path": "^3.1.0",
|
||||||
"chalk": "^5.6.2",
|
"chalk": "^5.6.2",
|
||||||
"color-convert": "^3.1.2",
|
"color-convert": "^3.1.2",
|
||||||
"commander": "^14.0.1"
|
"commander": "^14.0.1"
|
||||||
|
|
70
src/build/toml.ts
Normal file
70
src/build/toml.ts
Normal file
|
@ -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 =
|
27
src/helpers/file.ts
Normal file
27
src/helpers/file.ts
Normal file
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue