refactor: generate procreate via node

This commit is contained in:
winston 2023-04-30 22:35:31 +02:00
parent 1392312ef6
commit 75d3875693
No known key found for this signature in database
GPG key ID: 3786770EDBC2B481
9 changed files with 96 additions and 57 deletions

1
.gitignore vendored
View file

@ -1,4 +1,3 @@
/dist/ /dist/
/node_modules/ /node_modules/
/palettes/
/*.tgz /*.tgz

View file

@ -62,6 +62,7 @@
"devDependencies": { "devDependencies": {
"ava": "^4.2.0", "ava": "^4.2.0",
"esbuild": "^0.14.42", "esbuild": "^0.14.42",
"procreate-swatches": "^0.1.1",
"standard-version": "^9.5.0", "standard-version": "^9.5.0",
"ts-node": "^10.9.1", "ts-node": "^10.9.1",
"tsup": "^6.7.0", "tsup": "^6.7.0",

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -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<string, Color>;
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));
}

View file

@ -1,20 +1,39 @@
import fs from "fs/promises"; import fs from "fs";
import crypto from "crypto"; import crypto from "crypto";
import { variants } from "@catppuccin/palette"; import { variants } from "@catppuccin/palette";
import url from "url"; import url from "url";
import path from "path"; import path from "path";
import { createSwatchesFile } from "procreate-swatches";
const root = path.resolve( const root = path.resolve(
url.fileURLToPath(new URL(".", import.meta.url)), url.fileURLToPath(new URL(".", import.meta.url)),
"..", "..",
"..", "..",
"palettes" "dist"
); );
const dateString = new Date() const dateString = new Date()
.toISOString() .toISOString()
.replace(/T/, " ") .replace(/T/, " ")
.replace(/\..+/, ""); .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 generateSip = (name, palette) => {
const data = { const data = {
cloud: true, cloud: true,
@ -47,33 +66,30 @@ const generateSip = (name, palette) => {
return JSON.stringify(data, null, 2); return JSON.stringify(data, null, 2);
}; };
const generateGimp = (name, palette) => { const generateProcreate = async (name, palette) => {
const n = Object.keys(palette).length; const rgbValues = Object.values(palette).map((colour) => [
const head = `GIMP Palette\n#Palette Name: ${name}\n#Colors: ${n}\n`; [colour.rgb.r, colour.rgb.g, colour.rgb.b],
const pad = (str) => str.toString().padStart(3, " "); "rgb",
const palette = Object.values(palette) ]);
.map((value) => { return await createSwatchesFile(name, rgbValues);
const v = [
pad(value.rgb.r),
pad(value.rgb.g),
pad(value.rgb.b),
value.hex,
];
return v.join(" ");
})
.join("\n");
return head + palette;
}; };
Object.entries(variants).map(([name, palette]) => { Object.entries(variants).map(async ([name, palette]) => {
name = `Catppuccin ${name.charAt(0).toUpperCase() + name.slice(1)}`; name = `Catppuccin ${name.charAt(0).toUpperCase() + name.slice(1)}`;
const sip = generateSip(name, palette); ["gimp", "sip", "procreate"].map((folder) =>
const gimp = generateGimp(name, palette); fs.mkdirSync(path.join(root, folder), { recursive: true })
const folders = ["sip", "gimp"]; );
folders.map((folder) => { fs.writeFileSync(
fs.mkdir(path.join(root, folder), { recursive: true }); path.resolve(root, `sip/${name}.palette`),
}); generateSip(name, palette)
fs.writeFile(path.resolve(root, `sip/${name}.palette`), sip); );
fs.writeFile(path.resolve(root, `gimp/${name}.gpl`), gimp); fs.writeFileSync(
path.resolve(root, `gimp/${name}.gpl`),
generateGimp(name, palette)
);
fs.writeFileSync(
path.resolve(root, `procreate/${name}.swatches`),
await generateProcreate(name, palette)
);
}); });

View file

@ -221,6 +221,18 @@
"@nodelib/fs.scandir" "2.1.5" "@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0" 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": "@tsconfig/node10@^1.0.7":
version "1.0.9" version "1.0.9"
resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" 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" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 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: imurmurhash@^0.1.4:
version "0.1.4" version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 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" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== 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: kind-of@^6.0.3:
version "6.0.3" version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 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: lilconfig@^2.0.5:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" 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" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 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: parse-json@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 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" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 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: punycode@^2.1.0:
version "2.3.0" version "2.3.0"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
@ -2325,6 +2372,11 @@ serialize-error@^7.0.1:
dependencies: dependencies:
type-fest "^0.13.1" 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: shebang-command@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"