From 75d387569309612f954fcc17437c3018f9e46db8 Mon Sep 17 00:00:00 2001 From: winston Date: Sun, 30 Apr 2023 22:35:31 +0200 Subject: [PATCH] refactor: generate procreate via node --- .gitignore | 1 - package.json | 1 + procreate/Catppuccin Frappe.swatches | Bin 3183 -> 0 bytes procreate/Catppuccin Latte.swatches | Bin 3120 -> 0 bytes procreate/Catppuccin Macchiato.swatches | Bin 3149 -> 0 bytes procreate/Catppuccin Mocha.swatches | Bin 3150 -> 0 bytes procreate/build.ts | 29 ---------- src/scripts/build_palettes.mjs | 70 +++++++++++++++--------- yarn.lock | 52 ++++++++++++++++++ 9 files changed, 96 insertions(+), 57 deletions(-) delete mode 100644 procreate/Catppuccin Frappe.swatches delete mode 100644 procreate/Catppuccin Latte.swatches delete mode 100644 procreate/Catppuccin Macchiato.swatches delete mode 100644 procreate/Catppuccin Mocha.swatches delete mode 100755 procreate/build.ts diff --git a/.gitignore b/.gitignore index 854c10a..9c6519f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ /dist/ /node_modules/ -/palettes/ /*.tgz diff --git a/package.json b/package.json index fadd137..94ff376 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "devDependencies": { "ava": "^4.2.0", "esbuild": "^0.14.42", + "procreate-swatches": "^0.1.1", "standard-version": "^9.5.0", "ts-node": "^10.9.1", "tsup": "^6.7.0", diff --git a/procreate/Catppuccin Frappe.swatches b/procreate/Catppuccin Frappe.swatches deleted file mode 100644 index ba9e130a9cb057ac1bde4af7047cb5eb99b11e92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3183 zcmbVPyKWpe6qOS@MdEa+4QFa$LEaZhrAQGVjT!+)s=&o$Ay|r?)k3?13&THRARig{ z2XeTt8Im^4gfq)oX*qLv&pkYsb9MRk<8RM$`{%>ozy0|7=O-V(J3Gst@A1DEZ^!NO z=6bXEb91+PH>}3Lu7``^mvOsZKP;EGtLMMokL&gIa6W7fBZrIM-wihp80Hp^q6RNh zA24p*KHQJn+q+dB;YEz1OUVaTWsB#-ANRMfZnmrI%_a{>lAKTGLKOBK{P{4xS>KGq z1->os-rU{4SdYsL_Wt|`TVs&(7M%qmi^&DWBq|Ip8g*bSVkjEsT?R&?n7DCb5i;Ty zR4p0>QJ12_upZE0QT=pE4GM;wu!KnFq9w&ct4QZul4=iVN@lYU?kOV`2D54EF`x$3 z7>N~wybsn1%8`OMCnNdZgFRMin89&!awBaN78G7@oZN`W_d;+ZvQ@^A$hJ)(@E!Ng1_qerkkG6HE{rtVXij*>@d@vMmuM;T{4R?PnpCS(3s z42QnqmRwXd4{u<=x&|_oBI>GWb6)Yi2@`C=8NnX~g)23fHZxpQKdiPduh2rZY|UaJ zl(TR;*)>&EbHUz=Hs`fdxFtKahKNx?C7oImss4}B4P#46jQ!QFZ#~ML{_}h`D}O)Z zf3N-=H_MCj_2R?&YV~PYjendEC&O>!=KA_}xx8Hc`f}WC&WHK1-YpzX-h3J^Zn26M z#JL)Qv2NVl-i({et5sQ%q&jpyyt}!4f3aDeuh-?iD_auEPBC*3n-Am1>x*$X3G-oj z_3`TF)%Cb6SfA&6)E2@hM6skw8e_tDOfmF$^k6L9%q@yW4jwb%nMqt(j5QtRDP|6) z$w=He3g^@j*TMi4K*eruxHJty;A?+rFr%>~Je`%y6P|yN%SF}{h~+R(F_sAkR~Mi*!GhRrRD zTga5VFtd?misnS>#!c0@<}4CKGZKkNrkH-L1$D6fa0VmA6dd~5&any9VrY?S*=bjJ zLY^%}+09_A&YP#K7MWN>ik6|^T8CZXNU}utXPkm$XNhbAp#&q`t}%S?Bw(*NOAmu6 z5+xT3A-JeFkdQD_N+G)=Z`@Rh9qj84vB1IbFo!+hnF*I>C=>!Nd4LN|aI<71sbc-MjE0X9i>4`Kqnof3zV}SosC*3CyRL=!V=G{P-7dTMg$N4t#jHhrM5*Za|!EV`zmFCH%1pyuz` z-snAI`PAr=I3={REE(aVd0Ep?zRPH9R8+=(dvX5l!|!Lq@!`+Eo)h%X* zMTmKPs9{>ayS?dmSDW=PfnszCMy@$hBJz3n+s)M|1tIf@`>wY<4y_+9UD~!xOKD5GMqO6>Qn8hTq0b^k~dsgzmccV-}V>HRc z$FT<0kc|_i9ECkJfo2YgLdaRjQ}#;D#4bJ>J^^}S=}b+ao`>s0h3>C+%9K;UwPaRH z!gy1IMnH`OZjsl=MURBvEPay-aWg^xiEmPIG%*bjFUF9Pxuqb1r>JbCDXM@ZjLS9X zL8JdrQzA0r#NtkZpRK7T6dQen%6sIbXo3GvHF}Kjdm;|ORX>4BD)6QfYc}WsElN}? zU6EU=%2{F@J!`I<7)E|ZwRZ>zl`sNlZh)k;43THh$TV^N`0BA66^_i14YSJi3^i))KlPM zLMiT7WbFbji5A0QM8Qg;0EEFZ$_g>Kwvq2!&}}4&LOO$|F|1h;wM>rBEk;!|@)R>4L;Fr; zoZny~2r7Pj)|iK-8qLhX9qN}v^C;?vW^Dr<*4>lkr$pf)%Zi4%e=)@zY=1g?Xz>=J zj*>Vlx=WD!6(+ffA(KNi=wB67N=TgFf|(sTjz%;DgTa}lb0d?Ek1C6b^ z)-2Qgiwd-AkOWhW_FZkh!L^oT5-E$QBLN~-8m(dWd%7c5BOB}jM~@1%P*^K_V%D{^-^5F~1%AsH&rVyE`mwd&V*7v~SY j`Dym=yZ^h}g5yx!3tXH(`fm8<0Ul5B{~z2i%w`_}!$?zk diff --git a/procreate/Catppuccin Mocha.swatches b/procreate/Catppuccin Mocha.swatches deleted file mode 100644 index 049e096f397e707882a8fbc092fb0b190563d8bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3150 zcmb_fO>1OD6zy@;#fUq9fV_2Rs&3t{ir~hL5QGeaD{;}&1QQv%L%M^DVg88VpYl(* z_6H1jUMKy!>J>xE!RksSjA;%@ zCrTQLq`~~}td_=PU?3@n%qn=#I+O{QlMs;_1!dC~)Rl}SWDhA*PbimJ@JLZcp2oES zt>0-(&n&n?8MhhUCy0AjaI>Xya6>fa$exo%3lzy3Op2lf)t-a~O{N~BWJX30I;*40 zZ8#56oS?d>MZCD4ra|sC3}uV%CMcB<0MKwdMv{;hM7D<;G-}1iTeaq3?4DgwYH@sM zokXt+WK{Fh6~YE37Gq8{u|z1AQ&RF29a)}%78%UQXb&i)Dutuqo;texs2G(j#;pH~ zbO4$BH1NzCRNxe-Iz#Qni0sda!kQ`v>LIEj5wj;VfoKUCt1(&HO8f}9Dnky%oWoF# zDY-Z-$0Gc@<#zJbk!2S(atacU>l_jl>Pdr&7}$r_S*y~|(E8I_Rm$aTWD}Lj*@V^) z-u76L(V&11%rxykcw@s;b2S?KDZ3)tSC^Y>Vl-QYYf2CpUIS_z5!a9s48sxQxmNX| zbxfw$#}s`j20%MOt}Q48lwkyqYi^k8sed45eHlGAtcSMM@XQR8cY*CGsW&zNA1O-` zvhGMIix+JR_tYgxk;%oTwE<=HiwZ?+P~*oKU=7-MdxG~D zv+=(;owg2{?bGg4m=;i;(`+%vgH~xSACB(N?=CN%ee%`f!^i)__kwAuz6@MmeD?Wx Q#d;kCd diff --git a/procreate/build.ts b/procreate/build.ts deleted file mode 100755 index b8d773c..0000000 --- a/procreate/build.ts +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env deno run --allow-read --allow-write --allow-env -import { createSwatchesFile } from "npm:procreate-swatches"; - -const capitalize = (str: string) => str[0].toUpperCase() + str.slice(1); - -type Color = { - hex: string; - rgb: string; - hsl: string; -}; -type Palette = Record; - -const library: Palette[] = JSON.parse( - await Deno.readTextFile("../palette.json"), -); - -for (const palette in library) { - const colours: Palette = library[palette]; - - const rgbValues = Object.values(colours).map((colour) => [ - colour.rgb.match(/\d+/g), - "rgb", - ]); - - const name = `Catppuccin ${capitalize(palette)}`; - const data: ArrayBuffer = await createSwatchesFile(name, rgbValues); - - Deno.writeFileSync(`./${name}.swatches`, new Uint8Array(data)); -} diff --git a/src/scripts/build_palettes.mjs b/src/scripts/build_palettes.mjs index aa736d4..ea60573 100644 --- a/src/scripts/build_palettes.mjs +++ b/src/scripts/build_palettes.mjs @@ -1,20 +1,39 @@ -import fs from "fs/promises"; +import fs from "fs"; import crypto from "crypto"; import { variants } from "@catppuccin/palette"; import url from "url"; import path from "path"; +import { createSwatchesFile } from "procreate-swatches"; const root = path.resolve( url.fileURLToPath(new URL(".", import.meta.url)), "..", "..", - "palettes" + "dist" ); const dateString = new Date() .toISOString() .replace(/T/, " ") .replace(/\..+/, ""); +const generateGimp = (name, palette) => { + const n = Object.keys(palette).length; + const head = `GIMP Palette\n#Palette Name: ${name}\n#Colors: ${n}\n`; + const pad = (str) => str.toString().padStart(3, " "); + const body = Object.values(palette) + .map((value) => { + const v = [ + pad(value.rgb.r), + pad(value.rgb.g), + pad(value.rgb.b), + value.hex, + ]; + return v.join(" "); + }) + .join("\n"); + return head + body; +}; + const generateSip = (name, palette) => { const data = { cloud: true, @@ -47,33 +66,30 @@ const generateSip = (name, palette) => { return JSON.stringify(data, null, 2); }; -const generateGimp = (name, palette) => { - const n = Object.keys(palette).length; - const head = `GIMP Palette\n#Palette Name: ${name}\n#Colors: ${n}\n`; - const pad = (str) => str.toString().padStart(3, " "); - const palette = Object.values(palette) - .map((value) => { - const v = [ - pad(value.rgb.r), - pad(value.rgb.g), - pad(value.rgb.b), - value.hex, - ]; - return v.join(" "); - }) - .join("\n"); - return head + palette; +const generateProcreate = async (name, palette) => { + const rgbValues = Object.values(palette).map((colour) => [ + [colour.rgb.r, colour.rgb.g, colour.rgb.b], + "rgb", + ]); + return await createSwatchesFile(name, rgbValues); }; -Object.entries(variants).map(([name, palette]) => { +Object.entries(variants).map(async ([name, palette]) => { name = `Catppuccin ${name.charAt(0).toUpperCase() + name.slice(1)}`; - const sip = generateSip(name, palette); - const gimp = generateGimp(name, palette); - const folders = ["sip", "gimp"]; - folders.map((folder) => { - fs.mkdir(path.join(root, folder), { recursive: true }); - }); - fs.writeFile(path.resolve(root, `sip/${name}.palette`), sip); - fs.writeFile(path.resolve(root, `gimp/${name}.gpl`), gimp); + ["gimp", "sip", "procreate"].map((folder) => + fs.mkdirSync(path.join(root, folder), { recursive: true }) + ); + fs.writeFileSync( + path.resolve(root, `sip/${name}.palette`), + generateSip(name, palette) + ); + fs.writeFileSync( + path.resolve(root, `gimp/${name}.gpl`), + generateGimp(name, palette) + ); + fs.writeFileSync( + path.resolve(root, `procreate/${name}.swatches`), + await generateProcreate(name, palette) + ); }); diff --git a/yarn.lock b/yarn.lock index 9229bbf..e50c0a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -221,6 +221,18 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@szydlovski/color-convert@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@szydlovski/color-convert/-/color-convert-0.1.3.tgz#9b7b2e05d97f02b52f0be599f6ec78fe753de521" + integrity sha512-An3T2Q4LEaSjnU8ullD04lCshYA/+6k9avQCs1hmxyuwEA6UHh6Da/ue1+MFxYYG4I9eODct1a/kuFmDyRazlg== + +"@szydlovski/zip@^0.1.0": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@szydlovski/zip/-/zip-0.1.2.tgz#98f960ef8fd6b162dba136078badc28a8d2a58dd" + integrity sha512-hoQ3wrEYosEOT3LepTwdX+nhlFqjqioftbHXSmGxm863ZxVJUyp7uedYjIqUoGmKheAAM9EHXFHGydxfZlwUhg== + dependencies: + jszip "^3.5.0" + "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" @@ -1439,6 +1451,11 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -1628,11 +1645,28 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== +jszip@^3.5.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + lilconfig@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" @@ -2026,6 +2060,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -2146,6 +2185,14 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +procreate-swatches@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/procreate-swatches/-/procreate-swatches-0.1.1.tgz#212dc3ad7af7139a308f77132bded08bd460d8d2" + integrity sha512-8urk7+DmqspwH5/ZYAlSwqrX/L1p3fl/waohI8EKwnELyPfKtf1/2EG6r1AZ0Zh3sctnmDJeui0DMPUm3iwlzQ== + dependencies: + "@szydlovski/color-convert" "^0.1.3" + "@szydlovski/zip" "^0.1.0" + punycode@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" @@ -2325,6 +2372,11 @@ serialize-error@^7.0.1: dependencies: type-fest "^0.13.1" +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"