From 8b70f735fc5dc1f3914b0a284b1366c503a59278 Mon Sep 17 00:00:00 2001 From: Ava Gaiety W Date: Sat, 20 Sep 2025 12:31:11 -0600 Subject: [PATCH] yaml builds, and tests for builds --- .mise.toml | 2 +- bun.lockb | Bin 5238 -> 7401 bytes dist/palette.yml | 22 ++++++++++++++ index.ts | 2 ++ package.json | 3 +- src/build/toml.ts | 15 ++++------ src/build/yaml.ts | 62 ++++++++++++++++++++++++++++++++++++++++ tests/dist/yaml.test.ts | 25 ++++++++++++++++ 8 files changed, 120 insertions(+), 11 deletions(-) create mode 100644 dist/palette.yml create mode 100644 src/build/yaml.ts create mode 100644 tests/dist/yaml.test.ts diff --git a/.mise.toml b/.mise.toml index a94d1ed..85bea15 100644 --- a/.mise.toml +++ b/.mise.toml @@ -1,2 +1,2 @@ [tools] -bun = "latest" +bun = "1.2.22" diff --git a/bun.lockb b/bun.lockb index 1bcf9f96649427ddf5697f3925c561bcc30a186e..e26b0b3321d71d7f22fc75accc009ad6caaa8064 100755 GIT binary patch delta 2207 zcmcIldr(wW7{B-KF1yRJFBatC8X%;ru)FL6x(l)43o;ZROb}qGEGrQE0CqLN0GUZ# z9W(HtDVhn=gwIkiM<&fiO+gHUEMvyU;AkO)_{cO1`_A3H8B^1Lotblg=X;*-e&>AO zd88Q7*Q%!6?AE75=kk&}HteW)JLp1C+RmFVW&M2QUS^KIGJchu%#aiGkkzFJRVB$> zgzL*Eh&3j=qrhw7uZduCcrr`vAzya2pCNfgeRaef4R93 zcvE4DfS%x%4) zONqFfcX?l5hcjnU1wTAuLf_c-}XC8U(Bv&B` z>EvgDqiAqQp+?qp=`NsV00lsJ!=%t6ax$tVdBO)kz3P^5fE$jv{8W-4w7_KpM@{Rk zb#owIf<%oJtw$XrQ3Gk9?vtnwz(Aou_>@y9lQMW6fZWV>dq%sd2<(O$p-=;;Xj!O_ zGH{B)TO7Jd#ZjkOD3fKNMp>uWw}?|a;K=C+~yY!ztEHY)h$ImzxP93>Kpv!s)l_5 zoV~O5q|MXqxIXv@2|fI)8iiDvv1!l2k*#ux-$^^m+0vAHH;zz*&pUMS%yDz%(HE1? zT~{V1cP&`=rRbwh)(l^rujX?-_g+nXrG58c7o>(HM#ZCm_y#b8-ER*m>rAYF+*TaX zJ9uO?#a5$h_@sS7a7&SW!^b`exA*Vr4?MTzkAT6)e0i9&dxhg``RoDth^-`G$HhJ(cU^MUy3YTe{_+POmb0x zM>4+Z_RR8iwhGM7{2hhC~z@B zyQIqz_M(dj7Zxs#SD=65QH#wdEyfbCzFqhXv3tA~cE@ak zYxI=cZT&b@E-DNmv!hfRRpj%|%QQhAnH{MD85$DFtC)73QydnbAQ0<7h|RRm8~S%5 zz17<{c`isa(W*$5hF}uQbYPHZ!6xeYBf<1!imU_!9Yn!A7fg4i$ZYIP5AiWC3e&(r z6sd~Akuz@#)5<}DgVR9&rjSAGKaF`jRuAP}bb1d?q(}%|rG@C3*P~9I`R=5n@p_7! z3MsPI zXj=b`OT$9zNw&xdElz0Woa{X8q82u$y(&^Oxi=om1TVU(iW36fa7#CO({6L1W z8>=nXq@+(Lr@*SF7w(v4Gy$eGD)DheBC#|`N*@dGX;k8yB$S4tUnCDg$L0o9#xh{n ND9{aQ{Ykos`V*!~Js$u7 delta 901 zcmbtSUr3Wt6u~dTGx>ff^CQ9(suWkd#5n)e=XV5UUtOZ%+5zojV-phUguLH8!L?8mp8WBKigS_l-b0A+ZU9oQa#O#6+$Qy zdJ)lBC?QISsZ8JC0Lt##J!PT$N4)C4i)bOg(b2K-e43R}mr-93)qBiY@psMrYIU~; zKCD?ghnnCVcR`*{iztJzE+QrwOdz~uu#BMNu!9ibFrkl#8yuGP5yMl=+XW?kmoNzk z8zSZyJ`lu*bihSOj0;#cL_|rz4uYhEa6`De0pBJjBE%HTND9)wknAR8%uF>i4sPS2 zlPFZ8|2q>DjahhMjziLz_PRv@6nxeQZE0$!oEjaam9EX_2|3aMBd>JtUd+q<26zpF&`(_jmkFoj=PJX+(GTrpmBRGa>evB-0&{T)m<#1Z{iv await appendToFile(file, content export default async function(isVerbose = false): Promise { if (isVerbose) console.info('Removing previous build', file) - await rmFile(file) + try { + await rmFile(file) + } catch (error) { + console.info('TOML: Previous build already removed') + } if (isVerbose) console.info('Ensuring path and file exist', file) await mkFilePath(file) if (isVerbose) console.info('Writing header info to file', file) @@ -46,6 +50,7 @@ email = "${email}" url = "${url}" ` } + function colorHeaderTOML(): string { return ` [colors] @@ -63,11 +68,3 @@ h = ${h} hex = "${color.toHex()}" ` } - - -// [colors] -// -// [colors.bg] -// l = 0.2 -// c = 0.02 -// h = diff --git a/src/build/yaml.ts b/src/build/yaml.ts new file mode 100644 index 0000000..be9f441 --- /dev/null +++ b/src/build/yaml.ts @@ -0,0 +1,62 @@ +import { name, version, license, url, author } from '../../package.json' +import appRoot from 'app-root-path' +import { rmFile, mkFilePath, appendToFile } from "../helpers/file" +import { toSnakeCase } from '../helpers/string' +import colors from '../palette' +import type color from '../helpers/color' + +const file = appRoot + '/dist/palette.yml' +const appendToYAML = async (content: string) => await appendToFile(file, content) + +export default async function(isVerbose = false): Promise { + if (isVerbose) console.info('Removing previous build', file) + try { + await rmFile(file) + } catch (error) { + console.info('YAML: Previous build already removed') + } + if (isVerbose) console.info('Ensuring path and file exist', file) + await mkFilePath(file) + if (isVerbose) console.info('Writing header info to file', file) + await appendToYAML(headerYAML()) + if (isVerbose) console.info('Writing author info to file', file) + await appendToYAML(authorYAML()) + if (isVerbose) console.info('Writing color palette to file', file) + await appendToYAML(colorHeaderYAML()) + for (let index = 0; index < colors.length; index++) { + const color = colors[index] + if (isVerbose) console.info(`${color.name}…`, file) + await appendToYAML(colorYAML(color)) + } + + return file +} + +function headerYAML(): string { + return `name: "${name}" +version: "${version}" +license: "${license}" +sourcecode: "${url}" + ` +} + +function authorYAML(): string { + const { name, email, url } = author + + return ` +author: + name: "${name}" + email: "${email}" + url: "${url}" + ` +} + +function colorHeaderYAML(): string { + return ` +common:` +} + +function colorYAML(color: color): string { + return ` + ${toSnakeCase(color.name)}: "${color.toHex()}"` +} diff --git a/tests/dist/yaml.test.ts b/tests/dist/yaml.test.ts new file mode 100644 index 0000000..bb68bca --- /dev/null +++ b/tests/dist/yaml.test.ts @@ -0,0 +1,25 @@ +import { name, version, license, url, author } from '../../package.json' +import { expect, test } from 'bun:test' +import colors from '../../src/palette' +import { toSnakeCase } from '../../src/helpers/string' +import data from '../../dist/palette.yml' + +test('has header info', () => { + expect(data.name).toBe(name) + expect(data.version).toBe(version) + expect(data.license).toBe(license) + expect(data.sourcecode).toBe(url) + + expect(data.author.name).toBe(author.name) + expect(data.author.email).toBe(author.email) + expect(data.author.url).toBe(author.url) +}) + +test('has expected colors', () => { + colors.forEach(color => { + const dataColor = data.common[toSnakeCase(color.name)] + + expect(dataColor).toBe(color.toHex()) + }) +}) +