@designid/tokens 0.4.6 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/watch.js CHANGED
@@ -1,3 +1,26 @@
1
1
  #!/usr/bin/env node
2
- import{exec as Jw}from"child_process";import{join as u}from"path";import Lw from"chokidar";import Qw from"colorjs.io";var{colorspace:Kw}=await U();var l=await q(),_=l.default,{tokens:Ow}=await U();import{spawnSync as i}from"child_process";import{existsSync as X,mkdirSync as k,readFileSync as a,unlinkSync as n,writeFileSync as Mw}from"fs";import{resolve as Rw,join as J,basename as jw,normalize as bw,relative as Dw,sep as pw,dirname as t}from"path";var Z=process.cwd(),{baseDir:Tw,distDir:vw}=await Y(),{tokenNamespace:o,dsNamespace:Vw,tokens:yw}=await U(),e=`${o}.icons`;async function ww($){let W=J($,"designid.config.ts");if(console.log("Compiling designid.config.ts with bun...",$),X(J($,"designid.config.js")))console.log("Removing existing designid.config.js file..."),n(J($,"designid.config.js"));if(X(W)){let g=i("bun",["build",W,"--outfile ./designid.config.js","--minify","--target","node","--packages","external"],{stdio:"inherit",cwd:".",shell:!0});if(g.status!==0)console.error("Failed to compile designid.config.js with bun."),process.exit(g.status??1);if(g.status===0)return new Promise((G)=>{setTimeout(()=>{console.log("designid.config.js compiled successfully."),G(!0)},1000)})}}function p($){if(!X($))k($,{recursive:!0})}async function C($,w=!1){let W=M(),g;if(W.endsWith(".json"))g=JSON.parse(a(W,"utf8").trim()??"{}");else{$=$??t(W)+"/";let G=T($);if(G&&(w||!X(G)))await ww($);if(g=await import(G),g.default)g=g.default}return g}async function x(){let{baseDir:$}=await Y(),w=process.cwd(),g=J(w,$),{buildDir:G,distDir:H}=await Y();try{p(J(g,G)),p(J(g,H))}catch(L){console.error("Error creating directories:",L)}return g}function T($){return $?J($,"designid.config.js"):Z?J(Z,"designid.config.js"):J(process.cwd(),"designid.config.js")}function M(){let $=process.argv.find((Q)=>Q.startsWith("--config=")),[,w]=$?.split("=")??[];if(w)return w;let W=process.cwd(),g=T(Z),G=J(W,"designid.config.ts"),H=X(g),L=X(G);if(H)return g;else if(L)return G;throw console.error("Config file not found"),new Error("Config file not found")}async function Y($=!1){let w=M(),g=(await C(Z,$)).$paths;if(!g)throw console.error("Project paths not found"),new Error("Project paths not found");return{configFile:w,...g}}async function U(){let w=(await C(Z)).$metaData;if(!w)throw console.error("Project metaData not found"),new Error("Project metaData not found");if(!w.colorspace)w.colorspace="hex";if(!w.fontNamespace)w.fontNamespace=`${w.dsNamespace}.font`;if(!w?.tokens?.css?.mediaQuery?.match)w={...w??{},tokens:{...w.tokens??{},css:{...w.tokens?.css??{},mediaQuery:{...w.tokens?.css?.mediaQuery??{},match:"[data-theme]"}}}};if(w?.tokens?.css?.mediaQuery&&typeof w.tokens.css.mediaQuery.separateThemeFiles!=="boolean")w.tokens.css.mediaQuery.separateThemeFiles=!1;if(!w.dsNamespace)w.dsNamespace=w.tokenNamespace;return{...w,icons:w.icons??{objectPath:e},dsNamespace:w.dsNamespace}}async function q(){return(await C(Z)).$modes??{default:"light"}}var uw=await q();var{icons:mw}=await U();var aw=await q();import{join as I}from"path";var{baseDir:ew,distDir:s,assets:B}=await Y(),{fontNamespace:w$}=await U(),S=await x(),$$=I(S,s,"css"),g$=B?.fonts?.sourceDir?I(S,B.fonts.sourceDir):null,N=I("assets","fonts"),h=B?.fonts?.distDir??N,W$=h===N?I(S,s,B?.fonts?.distDir??N):I(S,h);var d=await x(),{distDir:Yw,buildDir:qw}=await Y(),Xw=[/node_modules/,/dist/,/build/,u(d,Yw),u(d,qw)],Zw=Lw.watch(["**/*.tokens.json","designid.config.ts"],{ignored:Xw,persistent:!0}),c,xw=300,R=()=>{clearTimeout(c),c=setTimeout(()=>{console.clear(),process.stdout.write("\x1Bc"),console.log(`[${new Date().toLocaleTimeString()}] Changes detected. Re-building tokens...
3
- `);let $=(()=>{let H=process.argv.find((L)=>L.startsWith("--config="));return H?H.split("=")[1]:""})(),w=(()=>{return process.argv.find((H)=>H==="--dev")??null})(),W=$?`--config=${$}`:"",g=$?`CONFIG=${$}`:"",G=w?`make build ${g}`:`bun tokens-build ${W}`;Jw(G,(H,L,Q)=>{if(H){console.error(`Error executing build:tokens: ${H.message}`);return}if(Q)console.error(`stderr: ${Q}`);if(L)console.log(`stdout: ${L}`)})},xw)};Zw.on("change",R).on("add",R).on("unlink",R);console.log("Watching for changes in .tokens.json files...");
2
+ var z=($,Y)=>()=>($&&(Y=$($=0)),Y);import J0 from"colorjs.io";var j=z(()=>{B()});var p=z(()=>{B()});var k=z(()=>{B()});import{spawnSync as h$}from"child_process";import{existsSync as R,mkdirSync as v$,readFileSync as p$,unlinkSync as m$,writeFileSync as C0}from"fs";import{resolve as V0,join as L,basename as g0,normalize as T0,relative as y0,sep as f0,dirname as d$}from"path";async function u$(){return`${(await e()).$metaData?.tokenNamespace||"tokens"}.icons`}async function k$($){let W=L($,"designid.config.ts");if(R(L($,"designid.config.js")))m$(L($,"designid.config.js"));if(R(W)){let X=h$("bun",["build",W,"--outfile ./designid.config.js","--minify","--target","node","--packages","external"],{stdio:"inherit",cwd:".",shell:!0});if(X.status!==0)console.error("Failed to compile designid.config.js with bun."),process.exit(X.status??1);if(X.status===0)return new Promise((q)=>q(!0))}}async function V($="json"){let{tokenNamespace:Y}=await t();return`${Y}-design-system.tokens.svg${$==="d.ts"||$==="js"?".config":""}.${$}`}function E$($){if(!R($))v$($,{recursive:!0})}async function o($,Y=!1){let W=g(),X;if(W.endsWith(".json"))X=JSON.parse(p$(W,"utf8").trim()??"{}");else{$=$??d$(W)+"/";let q=B$($);if(q&&(Y||!R(q)))await k$($);if(X=await import(q),X.default)X=X.default}return X}async function F(){let{baseDir:$}=await M(),Y=process.cwd(),X=L(Y,$),{buildDir:q,distDir:Z}=await M();try{E$(L(X,q)),E$(L(X,Z))}catch(w){console.error("Error creating directories:",w)}return X}function B$($){return $?L($,"designid.config.js"):L(process.cwd(),"designid.config.js")}function g(){let $=process.argv.find((H)=>H.startsWith("--config=")),[,Y]=$?.split("=")??[];if(Y)return Y;let W=process.cwd(),X=B$(W),q=L(W,"designid.config.ts"),Z=R(X),w=R(q);if(Z)return X;else if(w)return q;throw console.error("Config file not found"),Error("Config file not found")}async function M($=!1){let Y=g(),X=(await o(process.cwd(),$)).$paths;if(!X)throw console.error("Project paths not found"),Error("Project paths not found");return{configFile:Y,...X}}async function t(){let Y=(await o(process.cwd())).$metaData;if(!Y)throw console.error("Project metaData not found"),Error("Project metaData not found");if(!Y.colorspace)Y.colorspace="hex";if(!Y.fontNamespace)Y.fontNamespace=`${Y.dsNamespace}.font`;if(!Y?.tokens?.css?.mediaQuery?.match)Y={...Y??{},tokens:{...Y.tokens??{},css:{...Y.tokens?.css??{},mediaQuery:{...Y.tokens?.css?.mediaQuery??{},match:"[data-theme]"}}}};if(Y?.tokens?.css?.mediaQuery&&typeof Y.tokens.css.mediaQuery.separateThemeFiles!=="boolean")Y.tokens.css.mediaQuery.separateThemeFiles=!1;if(!Y.dsNamespace)Y.dsNamespace=Y.tokenNamespace;let W=await u$();return{...Y,icons:Y.icons??{objectPath:W},dsNamespace:Y.dsNamespace}}async function e(){if(!l){let $=g();l=await o(process.cwd()),O$=$}return l}async function $$(){if(!r){let Y=(await e()).$metaData;if(!Y)throw console.error("Project metaData not found"),Error("Project metaData not found");if(!Y.dsNamespace)Y.dsNamespace=Y.tokenNamespace;let X=`${Y.tokenNamespace||"tokens"}.icons`;r={...Y,icons:Y.icons??{objectPath:X},dsNamespace:Y.dsNamespace}}return r}async function L$($=!1){if(!s){let W=(await e()).$paths;if(!W)throw console.error("Project paths not found"),Error("Project paths not found");s={configFile:O$,...W}}return s}async function T(){if(!i){let{distDir:$,assets:Y,buildDir:W}=await L$(!0),{fontNamespace:X,tokenNamespace:q,icons:Z}=await $$(),w=await F(),H=process.cwd(),E=L(H,$,"css");i={distDir:$,assets:Y,fontNamespace:X,__dirname:w,workspaceRoot:H,distCSSPath:E,buildDir:W,tokenNamespace:q,icons:Z}}return i}async function Y$(){if(!a){let{icons:$}=await $$();a=$}return a}var l=null,O$=null,r=null,s=null,i=null,a=null;var y=z(()=>{B()});var _$=z(()=>{y()});async function X$($){let Y=await Y$();$=$.replace(/<\?xml[^>]*\?>\s*/,""),$=$.replace(/<!DOCTYPE [^>]*>\s*/,"");let W=$.match(/<svg[^>]*>/),X=$.match(/viewBox="([\d\s.]+)"/),[q]=W??[],Z=q;if(q&&Z){let H=Y?.style?.fill,E=/id="[^"]*"/.test(q);if(!Z.includes("xmlns="))Z=Z.replace("<svg",'<svg xmlns="http://www.w3.org/2000/svg"');if(!E&&H)Z=Z.replace("<svg",`<svg id="${H}"`);else if(E&&H)Z=Z.replace(/id="[^"]*"/,`id="${H}"`)}if(X&&q&&Z){let H=X[1].split(" ").map(Number),E=H[2],_=H[3],U=Y?.size??24,Q=E/_*U;$=$.replace(/height="[\d.]+px?"/,`height="${U}px"`),$=$.replace(/width="[\d.]+px?"/,`width="${Q}px"`);let P=/width="[\d.]+(px)?"/.test(q),I=/height="[\d.]+(px)?"/.test(q);if(!P)Z=Z.replace("<svg",`<svg width="${Q}px"`);else Z=Z.replace(/width="[\d.]+(px)?"/,`width="${Q}px"`);if(!I)Z=Z.replace("<svg",`<svg height="${U}px"`);else Z=Z.replace(/height="[\d.]+(px)?"/,`height="${U}px"`);$=$.replace(q,Z)}if(!$?.match(/data-style="([^"]*)"/)&&Y?.style?.type)$=$.replace("<svg ",`<svg data-style="${Y.style.type}" `);return $}var w$=z(()=>{B()});var R$=z(()=>{y();B()});var Z$=z(()=>{B()});var M$=()=>{};import G2 from"colorjs.io";var W$=z(()=>{M$();j()});var f=z(()=>{B()});var q$=z(()=>{B()});import{readFileSync as o$,mkdirSync as t$}from"fs";import{writeFile as N$,readdir as e$,mkdir as $0}from"fs/promises";import{resolve as Y0,relative as x$,join as U$,dirname as X0}from"path";import Z0 from"lodash";async function F$($){let Y=await e$($,{withFileTypes:!0}),W=await Promise.all(Y.map((X)=>{let q=Y0($,X.name);return X.isDirectory()?F$(q):q}));return Array.prototype.concat(...W)}async function P$(){let{assets:$,icons:Y,tokenNamespace:W,__dirname:X,buildDir:q}=await T(),Z=U$(X,$?.icons?.sourceDir??"icons"),w="build",H=$?.icons?.distDir??"build",E=U$(X,H),_=U$(X,q,"icons");if(!$?.icons?.sourceDir){console.error("Skipping icon build: iconsDir is not defined in the project paths.");return}let U=(await F$(Z)).filter((G)=>G.endsWith(".svg")),I=(await Promise.all(U.map(async(G)=>{let K=o$(G,"utf8").replace(/(\s+(?=(?:[^"]*"[^"]*")*[^"]*$))/g," ").trim()??"";K=await X$(K);let A=x$(Z,G).split("/").pop(),S=(K.match(/name="(.*?)"/)??[])[1]??A?.replace(".svg",""),h=(K.match(/data-style="(.*?)"/)??[])[1],b$=(K.match(/description="(.*?)"/)??[])[1],[G$]=K.match(/<svg[^>]*>/)??[],[,V$]=G$?.match(/width="([\d.]+)(px)?"/)??[],[,g$]=G$?.match(/height="([\d.]+)(px)?"/)??[];if(h!=="animated"&&h!=="custom")return{path:G,folder:x$(Z,G).split("/").slice(0,-1).concat(S),file:A,style:h,content:K,name:S,dimensions:{width:Number(V$),height:Number(g$)},description:b$??""};return}))).filter((G)=>G!==void 0).reduce((G,K)=>{if(K?.style!=="animated"&&K?.style!=="custom"&&K)K$(G,K.folder.join("."),{$type:"icon",$name:K.name,$description:K.description,$style:K.style,$value:K.content,$dimensions:K.dimensions,...W0(G,K.folder.join("."))});return G},{}),N=Y?.objectPath??`${W}.icons`;Object.keys(I).forEach(async(G)=>{let K=`${_}/${G}`,A=`${K}/svg.${G}.tokens.json`;await $0(K,{recursive:!0});let S=K$({},`${N}${N?".":""}${G}`,I[G]);await N$(A,JSON.stringify(S,null,2),{flag:"w",encoding:"utf-8"})});let O=`${E}/tokens/${await V("json")}`,J=X0(O);t$(J,{recursive:!0});let x=K$({},N,I);await N$(O,JSON.stringify(x,null,2),{flag:"w",encoding:"utf-8"})}var K$,W0,x2;var S$=z(()=>{B();({set:K$,get:W0}=Z0);x2=P$().catch(($)=>{console.error($),process.exit(1)})});var j$=z(()=>{f()});var D$=z(()=>{S$();f();j$();W$();q$();Z$()});var B=z(()=>{j();p();k();j();y();_$();w$();R$();p();k();Z$();W$();f();q$();D$()});B();import{exec as L0}from"child_process";import{join as C$}from"path";import _0 from"chokidar";if(process.argv.includes("--help")||process.argv.includes("-h"))console.log(`
3
+ Watch Tokens - File watcher for design token changes
4
+
5
+ Usage:
6
+ bun src/scripts/watch-tokens.ts [options]
7
+
8
+ Options:
9
+ --config=<path> Path to config file
10
+ --dev Use make build instead of bun run build
11
+ --help, -h Show this help message
12
+
13
+ Example:
14
+ bun src/scripts/watch-tokens.ts
15
+ bun src/scripts/watch-tokens.ts --config=./custom-config.ts
16
+ bun src/scripts/watch-tokens.ts --dev
17
+ `),process.exit(0);async function w0(){let $=await F(),{distDir:Y,buildDir:W}=await M(),X=[/node_modules/,/dist/,/build/,C$($,Y),C$($,W)],q=_0.watch(["**/*.tokens.json","designid.config.ts"],{ignored:X,persistent:!0}),Z,w=300,H=!1,E=()=>{if(H){console.log(`[${new Date().toLocaleTimeString()}] Build already in progress, skipping...`);return}clearTimeout(Z),Z=setTimeout(()=>{H=!0,console.clear(),process.stdout.write("\x1Bc"),console.log(`[${new Date().toLocaleTimeString()}] Changes detected. Re-building tokens...
18
+ `);let U=(()=>{let O=process.argv.find((J)=>J.startsWith("--config="));return O?O.split("=")[1]:""})(),Q=(()=>{return process.argv.find((O)=>O==="--dev")??null})(),P=U?`--config=${U}`:"",I=U?`CONFIG=${U}`:"",N=Q?`make build ${I}`:`bun run build ${P}`;L0(N,{cwd:process.cwd()},(O,J,x)=>{if(H=!1,O){console.error(`
19
+ ❌ Build failed: ${O.message}`);return}if(x&&x.trim())console.warn(`⚠️ Warnings:
20
+ ${x}`);if(J&&J.trim()){let G=J.split(`
21
+ `).filter((K)=>{let A=K.trim();return A&&(A.includes("✅")||A.includes("❌")||A.includes("Generated")||A.includes("Build completed")||A.includes("PASSED")||A.includes("FAILED"))});if(G.length>0)console.log(`
22
+ ${G.join(`
23
+ `)}`)}console.log(`
24
+ ✅ Build completed at ${new Date().toLocaleTimeString()}
25
+ `)})},300)};q.on("ready",()=>{console.log("Watching for changes in .tokens.json files and designid.config.ts..."),console.log(`Working directory: ${process.cwd()}`),console.log(`Press Ctrl+C to stop watching
26
+ `)}).on("change",(U)=>{console.log(`Changed: ${U}`),E()}).on("add",(U)=>{console.log(`Added: ${U}`),E()}).on("unlink",(U)=>{console.log(`Deleted: ${U}`),E()}).on("error",(U)=>{console.error(`Watcher error: ${U}`)});let _=()=>{clearTimeout(Z),q.close().then(()=>{console.log("File watcher closed successfully"),process.exit(0)}).catch((U)=>{console.error("Error closing file watcher:",U),process.exit(1)})};process.on("SIGINT",_),process.on("SIGTERM",_),process.on("SIGHUP",_),process.on("uncaughtException",(U)=>{console.error("Uncaught Exception:",U),_()}),process.on("unhandledRejection",(U,Q)=>{console.error("Unhandled Rejection at:",Q,"reason:",U),_()})}w0().catch(($)=>{console.error("Error starting watch process:",$),process.exit(1)});
package/package.json CHANGED
@@ -1,21 +1,24 @@
1
1
  {
2
2
  "name": "@designid/tokens",
3
- "version": "0.4.6",
3
+ "version": "1.0.0",
4
4
  "author": "Isa Ozler",
5
5
  "packageManager": "bun@1.2.16",
6
6
  "license": "Apache-2.0",
7
7
  "scripts": {
8
8
  "prebuild": "bun install",
9
+ "build": "bun run src/cli/build-tokens.ts",
10
+ "build:cli": "bun run scripts/build-cli.ts",
9
11
  "lint": "bun run lint:prettier && bun run lint:fix",
10
12
  "lint:prettier": "prettier --write \"./**/*.tokens.json\"",
11
13
  "lint:fix": "eslint src --ext .ts,.tokens.json --fix",
12
- "prepare": "husky || true"
14
+ "prepare": "husky || true",
15
+ "prepack": "bun run build:cli"
13
16
  },
14
17
  "dependencies": {
15
18
  "chokidar": "^3.5.3",
16
19
  "colorjs.io": "^0.5.2",
17
20
  "globals": "^16.1.0",
18
- "style-dictionary": "^4.3.3"
21
+ "lodash": "^4.17.21"
19
22
  },
20
23
  "devDependencies": {
21
24
  "@eslint/js": "^9.27.0",
@@ -29,10 +32,9 @@
29
32
  "eslint-config-prettier": "^10.1.5",
30
33
  "eslint-define-config": "^2.1.0",
31
34
  "eslint-import-resolver-typescript": "^4.4.3",
32
- "eslint-plugin-import": "^2.31.0",
35
+ "eslint-plugin-import": "^2.32.0",
33
36
  "husky": "^9.1.7",
34
37
  "jiti": "^2.4.2",
35
- "lodash": "^4.17.21",
36
38
  "prettier": "3.5.3",
37
39
  "svelte": "^5.34.1",
38
40
  "ts-node": "^10.9.2",
@@ -43,7 +45,6 @@
43
45
  "husky",
44
46
  "eslint",
45
47
  "prettier",
46
- "style-dictionary",
47
48
  "bun",
48
49
  "chokidar",
49
50
  "colorjs.io",
@@ -60,18 +61,14 @@
60
61
  "eslint-import-resolver-typescript"
61
62
  ],
62
63
  "files": [
63
- "lib",
64
- "example/tokens",
65
64
  "README.md",
66
65
  "bin/build.js",
67
- "bin/build-icons.js",
68
66
  "bin/watch.js",
69
67
  "types"
70
68
  ],
71
69
  "bin": {
72
70
  "tokens-build": "./bin/build.js",
73
- "tokens-watch": "./bin/watch.js",
74
- "tokens-build-icons": "./bin/build-icons.js"
71
+ "tokens-watch": "./bin/watch.js"
75
72
  },
76
73
  "exports": {
77
74
  ".": {