@razorwind/core 0.0.9 → 0.0.11

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.
Files changed (64) hide show
  1. package/dist/{index-COAOe8bR.d.cts → index-CjW7STaT.d.cts} +1 -1
  2. package/dist/index.cjs +1 -1
  3. package/dist/index.d.cts +58 -8
  4. package/dist/index.d.cts.map +1 -1
  5. package/dist/index.d.mts +58 -8
  6. package/dist/index.d.mts.map +1 -1
  7. package/dist/index.mjs +2 -1
  8. package/dist/index.mjs.map +1 -0
  9. package/dist/plugin-CUtxHXKj.d.cts +291 -0
  10. package/dist/plugin-CUtxHXKj.d.cts.map +1 -0
  11. package/dist/plugin-DNLmSRnE.d.mts +291 -0
  12. package/dist/plugin-DNLmSRnE.d.mts.map +1 -0
  13. package/dist/plugin.d.cts +2 -43
  14. package/dist/plugin.d.mts +2 -43
  15. package/dist/schema/index.cjs +1 -1
  16. package/dist/schema/index.d.cts +2 -2
  17. package/dist/{schema-1EWJvc56.d.cts → schema-BNfl9Tsw.d.cts} +2 -2
  18. package/dist/{schema-1EWJvc56.d.cts.map → schema-BNfl9Tsw.d.cts.map} +1 -1
  19. package/dist/schema-CkRpPBAO.cjs +1 -0
  20. package/dist/utils/index.cjs +1 -1
  21. package/dist/utils/index.d.cts +3 -6
  22. package/dist/utils/index.d.cts.map +1 -1
  23. package/dist/utils/index.d.mts +3 -6
  24. package/dist/utils/index.mjs +1 -1
  25. package/package.json +8 -50
  26. package/dist/config-DQHHeicR.d.mts +0 -85
  27. package/dist/config-DQHHeicR.d.mts.map +0 -1
  28. package/dist/config-Dj6RrLde.d.cts +0 -85
  29. package/dist/config-Dj6RrLde.d.cts.map +0 -1
  30. package/dist/config.cjs +0 -1
  31. package/dist/config.d.cts +0 -44
  32. package/dist/config.d.cts.map +0 -1
  33. package/dist/config.d.mts +0 -44
  34. package/dist/config.d.mts.map +0 -1
  35. package/dist/config.mjs +0 -2
  36. package/dist/config.mjs.map +0 -1
  37. package/dist/generator-BG_JjPA5.cjs +0 -1
  38. package/dist/generator-BlztRAZw.mjs +0 -2
  39. package/dist/generator-BlztRAZw.mjs.map +0 -1
  40. package/dist/generator-CZASa_I0.mjs +0 -2
  41. package/dist/generator-CZASa_I0.mjs.map +0 -1
  42. package/dist/generator-CnvMSx3I.cjs +0 -1
  43. package/dist/generator.cjs +0 -1
  44. package/dist/generator.d.cts +0 -13
  45. package/dist/generator.d.cts.map +0 -1
  46. package/dist/generator.d.mts +0 -13
  47. package/dist/generator.d.mts.map +0 -1
  48. package/dist/generator.mjs +0 -1
  49. package/dist/lib/tokens/index.cjs +0 -1
  50. package/dist/lib/tokens/index.d.cts +0 -150
  51. package/dist/lib/tokens/index.d.cts.map +0 -1
  52. package/dist/lib/tokens/index.d.mts +0 -150
  53. package/dist/lib/tokens/index.d.mts.map +0 -1
  54. package/dist/lib/tokens/index.mjs +0 -1
  55. package/dist/plugin.d.cts.map +0 -1
  56. package/dist/plugin.d.mts.map +0 -1
  57. package/dist/resolve-config-CBowa3KM.mjs +0 -2
  58. package/dist/resolve-config-CBowa3KM.mjs.map +0 -1
  59. package/dist/resolve-config-D7XXy_Qk.cjs +0 -1
  60. package/dist/rolldown-runtime-CMqjfN_6.cjs +0 -1
  61. package/dist/schema-CLeH9GGy.cjs +0 -1
  62. package/dist/tokens-B8Dv91EB.mjs +0 -2
  63. package/dist/tokens-B8Dv91EB.mjs.map +0 -1
  64. package/dist/tokens-CoQWg4mX.cjs +0 -1
@@ -1,3 +1,3 @@
1
- import "./schema-1EWJvc56.cjs";
1
+ import "./schema-BNfl9Tsw.cjs";
2
2
  import { Token, Tokens as Tokens$1, tokenSchema, tokensSchema } from "@power-plant/dtcg-schema";
3
3
  export { tokensSchema as i, Tokens$1 as n, tokenSchema as r, Token as t };
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./plugin.cjs"),t=require("./resolve-config-D7XXy_Qk.cjs"),n=require("./config.cjs"),r=require("./generator-CnvMSx3I.cjs"),i=require("./schema-CLeH9GGy.cjs"),a=require("./utils/index.cjs");let o=require("@power-plant/dtcg-schema");exports.componentFileSchema=i.n,exports.componentSchema=i.r,exports.componentsSchema=i.i,exports.createDocument=a.createDocument,exports.defineConfig=n.defineConfig,exports.definePlugin=e.definePlugin,exports.formatColorValue=a.formatColorValue,exports.formatDimensionValue=a.formatDimensionValue,exports.formatTokenValue=a.formatTokenValue,exports.generator=r.t,exports.isPlainObject=a.isPlainObject,exports.resolveConfig=t.t,exports.schema=i.t,exports.toCssVar=a.toCssVar,Object.defineProperty(exports,"tokenSchema",{enumerable:!0,get:function(){return o.tokenSchema}}),Object.defineProperty(exports,"tokensSchema",{enumerable:!0,get:function(){return o.tokensSchema}});
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./schema-CkRpPBAO.cjs"),t=require("./utils/index.cjs"),n=require("./plugin.cjs");let r=require("@power-plant/core"),i=require("@stryke/type-checks/is-empty-object"),a=require("defu"),o=require("style-dictionary");o=e.a(o,1);let s=require("@stryke/fs/exists"),c=require("@stryke/fs/is-file"),l=require("@stryke/fs/json"),u=require("@stryke/path/join"),d=require("@stryke/type-checks/is-set-object"),f=require("@stryke/type-checks/is-set-string"),p=require("node:fs/promises"),m=require("node:path"),ee=require("@stryke/env"),h=require("@stryke/path/find"),g=require("@stryke/path/replace"),_=require("@stryke/type-checks/is-function"),v=require("c12"),te=require("jiti"),y=require("node:fs"),b=require("node:os");b=e.a(b,1);let ne=require("@stryke/fs/resolve"),x=require("fast-glob");x=e.a(x,1);let S=require("json5");S=e.a(S,1);let C=require("smol-toml"),re=require("yaml");var ie=`0.0.11`;const ae=e.r.partial(),w=(0,a.createDefu)((e,t,n)=>Array.isArray(n)?(e[t]=n,!0):!1);function oe(e,t){return(0,m.isAbsolute)(t)?t:(0,m.resolve)(e,t)}function se(e){return Array.isArray(e)?e.filter(f.isSetString):(0,f.isSetString)(e)?[e]:[]}function ce(e){if((0,f.isSetString)(e))return e;if((0,d.isSetObject)(e)&&`url`in e&&(0,f.isSetString)(e.url))return e.url}function T(t){if(!t)return;let n=e.n.safeParse(t);if(n.success)return[n.data];if(!Array.isArray(t))return;let r=[];for(let n of t){let t=e.n.safeParse(n);t.success&&r.push(t.data)}return r.length>0?r:void 0}function E(e){if(!(0,d.isSetObject)(e))return;let t=ae.safeParse(e);if(t.success)return Object.keys(t.data).length>0?t.data:void 0}function D(e){return(0,d.isSetObject)(e)&&`path`in e}async function le(e){let t=(0,u.joinPaths)(e,`package.json`);if(!(0,s.existsSync)(t))return;let n;try{n=await(0,l.readJsonFile)(t)}catch{return}let r={};(0,f.isSetString)(n.name)&&(r.name=n.name,r.title=n.name),(0,f.isSetString)(n.description)&&(r.description=n.description),(0,f.isSetString)(n.version)&&(r.version=n.version),(0,f.isSetString)(n.homepage)&&(r.homepage=n.homepage);let i=ce(n.repository);if(i&&(r.repository=i),(0,d.isSetObject)(n.dependencies)&&(r.dependencies=n.dependencies),(0,d.isSetObject)(n.devDependencies)&&(r.devDependencies=n.devDependencies),Array.isArray(n.keywords)){let e=n.keywords.filter(f.isSetString);e.length>0&&(r.tags=e)}let a=n.razorwind,o,c;D(a)?c=T(a):(0,d.isSetObject)(a)&&(o=E(a),`files`in a&&(c=T(a.files)));let p=w(o??{},r);return c?.length&&(p.files=c),Object.keys(p).length>0?p:void 0}async function ue(e){let t=(0,u.joinPaths)(e,`component.json`);if(!(0,s.existsSync)(t))return;let n;try{n=await(0,l.readJsonFile)(t)}catch{return}if(D(n)||Array.isArray(n)){let e=T(n);if(e)return{files:e}}return E(n)}async function de(t){let n=await le(t),r=await ue(t);if(!n&&!r)return;let i=w(r??{},n??{}),a=(0,m.basename)(t),o=(0,f.isSetString)(i.name)?i.name:a,s=(0,f.isSetString)(i.title)?i.title:o,c=e.r.safeParse({...i,name:o,title:s});return c.success?c.data:void 0}async function fe(e){let t={},n=se(e.options.componentsPath);for(let r of n){let n=oe(e.cwd,r);if(!(!(0,s.existsSync)(n)||!(0,c.isDirectory)(n)))try{let e=await(0,p.readdir)(n,{withFileTypes:!0});for(let r of e){if(!r.isDirectory()||r.name.startsWith(`.`))continue;let e=await de((0,u.joinPaths)(n,r.name));e&&(t[e.name]=e)}}catch{continue}}return t}const O=b.default.homedir();async function k(e,t){let n=t.configFile&&(0,y.existsSync)((0,g.replacePath)(t.configFile,e))?(0,g.replacePath)(t.configFile,e):t.configFile&&(0,y.existsSync)(t.configFile)?t.configFile:(0,y.existsSync)((0,u.joinPaths)(e,`razorwind.${t.mode}.config.ts`))?(0,u.joinPaths)(e,`razorwind.${t.mode}.config.ts`):(0,y.existsSync)((0,u.joinPaths)(e,`razorwind.${t.mode}.config.js`))?(0,u.joinPaths)(e,`razorwind.${t.mode}.config.js`):(0,y.existsSync)((0,u.joinPaths)(e,`razorwind.${t.mode}.config.mts`))?(0,u.joinPaths)(e,`razorwind.${t.mode}.config.mts`):(0,y.existsSync)((0,u.joinPaths)(e,`razorwind.${t.mode}.config.mjs`))?(0,u.joinPaths)(e,`razorwind.${t.mode}.config.mjs`):(0,y.existsSync)((0,u.joinPaths)(e,`razorwind.config.ts`))?(0,u.joinPaths)(e,`razorwind.config.ts`):(0,y.existsSync)((0,u.joinPaths)(e,`razorwind.config.js`))?(0,u.joinPaths)(e,`razorwind.config.js`):(0,y.existsSync)((0,u.joinPaths)(e,`razorwind.config.mts`))?(0,u.joinPaths)(e,`razorwind.config.mts`):(0,y.existsSync)((0,u.joinPaths)(e,`razorwind.config.mjs`))?(0,u.joinPaths)(e,`razorwind.config.mjs`):void 0,r=(0,ee.getEnvPaths)({orgId:`storm-software`,appId:`razorwind`,workspaceRoot:e}),i={fsCache:r.cache},o=(0,te.createJiti)(e,i),s={};if(n){let r=await o.import(o.esmResolve(n));if(r?.default){let i={};(0,_.isFunction)(r.default)?i=await Promise.resolve(r.default({cwd:e,mode:t.mode??`development`})):((0,d.isSetObject)(r.default)||Array.isArray(r.default))&&(i=r.default),((0,d.isSetObject)(i)||Array.isArray(i))&&(s={...i,configFile:n})}}let[c,l,p]=await Promise.all([(0,v.loadConfig)({cwd:e,name:`razorwind`,envName:t.mode,globalRc:!0,packageJson:`razorwind`,dotenv:!0,jitiOptions:i}),(0,v.loadConfig)({cwd:r.config,name:`razorwind`,envName:t.mode,dotenv:!0,jitiOptions:i}),(0,v.loadConfig)({cwd:O,name:`razorwind`,envName:t.mode,dotenv:!0,jitiOptions:i})]),m=(0,a.defu)({cwd:e,envPaths:{...r,home:O}},t,s,(0,d.isSetObject)(c?.config)?{...c.config}:{},(0,d.isSetObject)(l?.config)?{...l.config}:{},(0,d.isSetObject)(p?.config)?{...p.config}:{},{componentsPath:e,plugins:[]});if(Array.isArray(m.componentsPath)){let t=m.componentsPath.filter(f.isSetString).map(e=>(0,h.findFilePath)(e));m.componentsPath=t.length>0?t:e}else(0,f.isSetString)(m.componentsPath)?m.componentsPath=(0,h.findFilePath)(m.componentsPath):m.componentsPath=e;return Array.isArray(m.plugins)||(m.plugins=[]),m}const pe=[`razorwind-json`,`razorwind-yaml`,`razorwind-toml`,`razorwind-css`],A=[`json`,`json5`,`jsonc`,`yaml`,`yml`,`toml`,`css`,`js`,`mjs`,`cjs`,`ts`,`mts`,`cts`],me=A.join(`,`),he=[`tokens.json`,`tokens.json5`,`tokens.jsonc`,`tokens.yaml`,`tokens.yml`,`tokens.toml`,`tokens.css`,`design-tokens.json`,`design-tokens.yaml`,`design-tokens.yml`,`tokens`,`design-tokens`,`src/tokens`,`src/design-tokens`,`packages/tokens`,`style-dictionary.config.js`,`style-dictionary.config.mjs`,`style-dictionary.config.ts`,`sd.config.js`,`sd.config.mjs`,`sd.config.ts`],ge=`**/*.{${me}}`,_e=/^(light|dark|dim|dimmed|high-contrast|hc|default|base|theme)([._-].+)?$/i,ve={color:`color`,colours:`color`,colors:`color`,colour:`color`,palette:`color`,bg:`color`,background:`color`,foreground:`color`,fg:`color`,border:`color`,fill:`color`,stroke:`color`,spacing:`dimension`,space:`dimension`,size:`dimension`,sizes:`dimension`,sizing:`dimension`,gap:`dimension`,radius:`dimension`,radii:`dimension`,rounded:`dimension`,width:`dimension`,height:`dimension`,dimension:`dimension`,dimensions:`dimension`,duration:`duration`,durations:`duration`,time:`duration`,delay:`duration`,animation:`duration`,motion:`duration`,transition:`duration`,font:`fontFamily`,fonts:`fontFamily`,fontfamily:`fontFamily`,"font-family":`fontFamily`,typeface:`fontFamily`,fontweight:`fontWeight`,"font-weight":`fontWeight`,weight:`fontWeight`,opacity:`number`,opacities:`number`,zindex:`number`,"z-index":`number`,lineheight:`number`,"line-height":`number`,letterspacing:`dimension`,"letter-spacing":`dimension`,shadow:`shadow`,shadows:`shadow`,elevation:`shadow`,gradient:`gradient`,gradients:`gradient`,typography:`typography`,text:`typography`,cubicbezier:`cubicBezier`,easing:`cubicBezier`,ease:`cubicBezier`},ye=/^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,j=/^rgba?\(\s*([+\d.]+%?)[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+%?)[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+%?)(?:\s*[,/]\s*([+\d.]+%?))?\s*\)$/i,M=/^hsla?\(\s*([+\d.]+)[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+)%[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+)%(?:\s*[,/]\s*([+\d.]+%?))?\s*\)$/i,N=/^oklch\(\s*([+\d.]+%?|none)\s+([+\d.]+|none)\s+([+\d.]+|none)(?:\s*\/\s*([+\d.]+%?))?\s*\)$/i,P=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(px|rem|em|%|vh|vw|vmin|vmax|ch|ex|cm|mm|in|pt|pc)$/i,be=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(ms|s)$/i,xe=/^cubic-bezier\(\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*\)$/i,Se=/^var\(\s*(--[\w-]+)\s*(?:,\s*(?:\S.*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))?\)\s*$/i,Ce=/^\{[^{}]+\}$/,we={thin:100,hairline:100,extralight:200,"extra-light":200,ultralight:200,light:300,normal:400,regular:400,book:400,medium:500,semibold:600,"semi-bold":600,demibold:600,bold:700,extrabold:800,"extra-bold":800,ultrabold:800,black:900,heavy:900},F=new Set([`px`,`rem`]);function I(e){return Math.min(1,Math.max(0,e))}function L(e,t=100){let n=e.trim();if(n.endsWith(`%`))return I(Number.parseFloat(n)/t);let r=Number.parseFloat(n);return I(r>1?r/255:r)}function Te(e){let t=e.slice(1);return t.length===3||t.length===4?`#${[...t].map(e=>e+e).join(``)}`:(e.length===7||e.length,e)}function Ee(e){let t=Te(e.toLowerCase()).slice(1),n=Number.parseInt(t.slice(0,2),16)/255,r=Number.parseInt(t.slice(2,4),16)/255,i=Number.parseInt(t.slice(4,6),16)/255,a=t.length===8?Number.parseInt(t.slice(6,8),16)/255:void 0;return{colorSpace:`srgb`,components:[n,r,i],...a===void 0||a===1?{}:{alpha:a},hex:`#${t.slice(0,6)}`}}function De(e){return`{${e.replace(/^--/,``).split(`-`).filter(Boolean).join(`.`)}}`}function R(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function z(e){for(let t=e.length-1;t>=0;t--){let n=e[t]?.toLowerCase();if(!n)continue;let r=ve[n];if(r)return r}}function B(e,n=[]){let r=z(n);if(typeof e==`string`){let t=e.trim();if(Ce.test(t))return{value:t,type:r};let i=t.match(Se);if(i?.[1])return{value:De(i[1]),type:r};if(ye.test(t))return{value:Ee(t),type:`color`};let a=t.match(j);if(a){let e=[L(a[1]),L(a[2]),L(a[3])],t=a[4]?a[4].endsWith(`%`)?I(Number.parseFloat(a[4])/100):I(Number.parseFloat(a[4])):void 0;return{value:{colorSpace:`srgb`,components:e,...t===void 0||Number.isNaN(t)?{}:{alpha:t}},type:`color`}}let o=t.match(M);if(o)return{value:{colorSpace:`hsl`,components:[Number.parseFloat(o[1]),Number.parseFloat(o[2]),Number.parseFloat(o[3])],...o[4]?{alpha:o[4].endsWith(`%`)?I(Number.parseFloat(o[4])/100):I(Number.parseFloat(o[4]))}:{}},type:`color`};let s=t.match(N);if(s){let e=e=>e===`none`?`none`:e.endsWith(`%`)?Number.parseFloat(e)/100:Number.parseFloat(e);return{value:{colorSpace:`oklch`,components:[e(s[1]),e(s[2]),e(s[3])],...s[4]?{alpha:s[4].endsWith(`%`)?I(Number.parseFloat(s[4])/100):I(Number.parseFloat(s[4]))}:{}},type:`color`}}let c=t.match(P);if(c){let e=c[2].toLowerCase(),n=Number.parseFloat(c[1]);return F.has(e)?{value:{value:n,unit:e},type:`dimension`}:{value:t,type:r===`dimension`?void 0:r}}let l=t.match(be);if(l)return{value:{value:Number.parseFloat(l[1]),unit:l[2].toLowerCase()},type:`duration`};let u=t.match(xe);if(u)return{value:[Number.parseFloat(u[1]),Number.parseFloat(u[2]),Number.parseFloat(u[3]),Number.parseFloat(u[4])],type:`cubicBezier`};let d=we[t.toLowerCase()];return d===void 0?r===`fontFamily`||/family|font|typeface/i.test(n.at(-1)??``)?t.includes(`,`)?{value:t.split(`,`).map(e=>e.trim().replace(/^["']|["']$/g,``)),type:`fontFamily`}:{value:t.replace(/^["']|["']$/g,``),type:`fontFamily`}:r===`color`&&!t.startsWith(`{`)?{value:t,type:void 0}:{value:t,type:r}:{value:d,type:`fontWeight`}}if(typeof e==`number`)return r===`fontWeight`?{value:e,type:`fontWeight`}:r===`duration`?{value:{value:e,unit:`ms`},type:`duration`}:r===`dimension`?{value:{value:e,unit:`px`},type:`dimension`}:{value:e,type:r??`number`};if(Array.isArray(e))return e.length===4&&e.every(e=>typeof e==`number`)&&(r===`cubicBezier`||n.some(e=>/ease|bezier/i.test(e)))?{value:e,type:`cubicBezier`}:e.every(e=>typeof e==`string`)?{value:e,type:r??`fontFamily`}:{value:e,type:r};if(t.isObject(e)){if(`colorSpace`in e&&`components`in e)return{value:e,type:`color`};if(`value`in e&&`unit`in e){let t=String(e.unit).toLowerCase();return t===`ms`||t===`s`?{value:e,type:`duration`}:F.has(t)?{value:e,type:`dimension`}:{value:e,type:r}}}return{value:e,type:r}}function Oe(e,t){let n={...e};if(`value`in n&&!(`$value`in n)&&(n.$value=n.value,delete n.value),`type`in n&&!(`$type`in n)&&(n.$type=n.type,delete n.type),`comment`in n&&!(`$description`in n)&&(n.$description=n.comment,delete n.comment),`description`in n&&!(`$description`in n)&&(n.$description=n.description,delete n.description),`ref`in n&&!(`$ref`in n)&&(n.$ref=n.ref,delete n.ref),`$value`in n){let e=B(n.$value,t);n.$value=e.value,!(`$type`in n)&&e.type&&(n.$type=e.type)}return n}function V(e,n=[]){if(Array.isArray(e))return e.map((e,t)=>V(e,[...n,String(t)]));if(!t.isObject(e))return e;if(R(e))return Oe(e,n);let r={};for(let[t,i]of Object.entries(e)){if(t.startsWith(`$`)){r[t]=i;continue}r[t]=V(i,[...n,t])}if(!(`$type`in r)){let e=z(n);e&&n.length>0&&(r.$type=e)}return r}function ke(e){let n={};for(let[r,i]of Object.entries(e)){let e=r.replace(/^--/,``).split(/[-./]/).filter(Boolean);if(e.length===0)continue;let a=n;for(let n=0;n<e.length-1;n++){let r=e[n],i=a[r];t.isObject(i)?R(i)&&(a[r]={DEFAULT:i}):a[r]={},a=a[r]}let o=e.at(-1),s=B(i,e),c={$value:s.value,...s.type?{$type:s.type}:{}},l=a[o];t.isObject(l)&&!R(l)?l.DEFAULT=c:a[o]=c}return V(n)}const Ae=/(--[A-Z_][\w-]*)\s*:\s*([^;}{]+?)(?=\s*(?:;|\}|$))/gi;function je(e){let t={},n=e.replace(/\/\*[\s\S]*?\*\//g,``);for(let e of n.matchAll(Ae)){let n=e[1],r=e[2]?.trim();!n||!r||(t[n]=r)}return ke(t)}const H=`razorwind-infer`;function U(e){if(e==null)return{};if(typeof e!=`object`||Array.isArray(e))throw TypeError(`Token file must parse to a plain object.`);return V(e)}function Me(e){try{return U(S.default.parse(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse JSON token file: ${t}`)}}function Ne(e){try{return U((0,re.parse)(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse YAML token file: ${t}`)}}function Pe(e){try{return U((0,C.parse)(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse TOML token file: ${t}`)}}const W=[{name:`razorwind-json`,pattern:/\.json[c5]?$/i,parser:({contents:e})=>Me(e)},{name:`razorwind-yaml`,pattern:/\.ya?ml$/i,parser:({contents:e})=>Ne(e)},{name:`razorwind-toml`,pattern:/\.toml$/i,parser:({contents:e})=>Pe(e)},{name:`razorwind-css`,pattern:/\.css$/i,parser:({contents:e})=>V(je(e))}];function Fe(){return Object.fromEntries(W.map(({name:e,pattern:t,parser:n})=>[e,{pattern:t,parser:n}]))}function G(e){return V(e)}function Ie(){return{[H]:G}}function K(e=[],t=o.default){for(let e of W)t.registerParser(e);t.registerPreprocessor({name:H,preprocessor:G});let n=0,r=0,i=0,a=0,s=0,c=0,l=0,u=0;for(let o of e){for(let e of o.parsers??[])t.registerParser({name:e.name??`${o.name}-parser-${n}`,pattern:e.pattern,parser:({contents:t})=>e.parser(t)}),n++;for(let e of o.preprocessors??[])t.registerPreprocessor((0,_.isFunction)(e)?{name:`${o.name}-preprocessor-${r}`,preprocessor:e}:{name:e.name??`${o.name}-preprocessor-${r}`,preprocessor:e.preprocessor}),r++;for(let e of o.transforms??[])t.registerTransform({...e,name:e.name??`${o.name}-transform-${i}`}),i++;for(let e of o.transformGroups??[])t.registerTransformGroup({name:e.name??`${o.name}-transform-group-${a}`,transforms:e.transforms}),a++;for(let e of o.formats??[])t.registerFormat({...e,name:e.name??`${o.name}-format-${s}`}),s++;for(let e of o.filters??[])t.registerFilter((0,_.isFunction)(e)?{name:`${o.name}-filter-${c}`,filter:e}:{name:e.name??`${o.name}-filter-${c}`,filter:e.filter}),c++;for(let e of o.fileHeaders??[])t.registerFileHeader((0,_.isFunction)(e)?{name:`${o.name}-file-header-${l}`,fileHeader:e}:{name:e.name??`${o.name}-file-header-${l}`,fileHeader:e.fileHeader}),l++;for(let e of o.actions??[])t.registerAction({...e,name:e.name??`${o.name}-action-${u}`}),u++}}function q(e,t){return(0,m.isAbsolute)(t)?t:(0,m.resolve)(e,t)}function J(e){return/\.([^.]+)$/.exec(e)?.[1]?.toLowerCase()??``}function Y(e){return A.includes(J(e))}function X(e){let t=e.split(/[/\\]/).pop()?.toLowerCase()??``;return t.startsWith(`style-dictionary.config.`)||t.startsWith(`sd.config.`)}function Z(e){return(0,u.joinPaths)(e,ge)}function Le(e){return Array.isArray(e)?e.filter(f.isSetString):(0,f.isSetString)(e)?[e]:[]}function Re(e,t){let n=q(e,t);if(!(0,s.existsSync)(n))throw Error(`tokensPath "${t}" does not exist (resolved: ${n}).`);return(0,c.isDirectory)(n)?{resolvedPath:n,source:[Z(n)],isStyleDictionaryConfig:!1}:X(n)?{resolvedPath:n,source:[],isStyleDictionaryConfig:!0}:{resolvedPath:n,source:[n],isStyleDictionaryConfig:!1}}function ze(e){let{cwd:t,tokensPath:n,fallbackPaths:r=[]}=e,i=Le(n);if(i.length>0){let e=i.map(e=>Re(t,e)),n=e.filter(e=>e.isStyleDictionaryConfig);if(n.length>0){if(e.length>1)throw Error(`tokensPath cannot mix Style Dictionary config files with other token sources.`);return{resolvedPath:n[0].resolvedPath,source:[],origin:`tokensPath`}}return{resolvedPath:e[0]?.resolvedPath,source:e.flatMap(e=>e.source),origin:`tokensPath`}}for(let e of he){let n=q(t,e);if((0,s.existsSync)(n)){if((0,c.isDirectory)(n))return{resolvedPath:n,source:[Z(n)],origin:`default`};if(X(n))return{resolvedPath:n,source:[],origin:`default`};if(Y(n))return{resolvedPath:n,source:[n],origin:`default`}}}for(let e of r){if(!e)continue;let n=q(t,e);if(!(!(0,s.existsSync)(n)||(0,c.isDirectory)(n))&&(Y(n)||J(n)===`css`))return{resolvedPath:n,source:[n],origin:`fallback`}}return{source:[],origin:`none`}}function Be(e){return(e.split(/[/\\]/).pop()??``).replace(/\.[^.]+$/,``).match(_e)?.[1]?.toLowerCase()}function Ve(e){K(e.plugins,o.default)}function He(e){return!e||typeof e!=`object`||Object.keys(e).length===0}async function Ue(e){let t=await(0,ne.importModule)(e);return t&&typeof t==`object`&&`default`in t&&t.default?t.default:t}async function Q(e,t){Ve(e);let n=new o.default({...t,parsers:[...pe,...t.parsers??[]],preprocessors:[H,...t.preprocessors??[]],hooks:{...t.hooks,parsers:{...Fe(),...t.hooks?.parsers},preprocessors:{...Ie(),...t.hooks?.preprocessors}},usesDtcg:t.usesDtcg??!0,platforms:t.platforms??{}});return await n.hasInitialized,n}async function $(e,t){return t.length===0?{}:(await Q(e,{source:t})).tokens}async function We(e){return(await(0,x.default)(e,{absolute:!0,onlyFiles:!0,unique:!0})).sort()}async function Ge(e,t){let n=await We(t);if(n.length===0)return{};let r=new Map,i=[];for(let e of n){let t=Be(e);if(t){let n=r.get(t)??[];n.push(e),r.set(t,n)}else i.push(e)}if(r.size<2)return $(e,t);let a={};if(i.length>0){let t=await $(e,i);He(t)||(a.base=t)}for(let[t,n]of r)a[t]=await $(e,n);return a}async function Ke(e){let t=ze(e.options);return t.resolvedPath&&(0,s.existsSync)(t.resolvedPath)&&/(?:^|[/\\])(?:style-dictionary|sd)\.config\./i.test((0,m.basename)(t.resolvedPath))?(e.sd=await Q(e.options,await Ue(t.resolvedPath)),e.sd.tokens):t.source.length===0?{}:e.options.splitThemes?Ge(e.options,t.source):$(e.options,t.source)}function qe(e){return e}const Je=(0,r.defineGenerator)({meta:{name:`razorwind`,title:`Razorwind`,description:`A generator that uses Razorwind to generate design system code from design tokens and components.`,version:ie,tags:[`razorwind`,`dtcg`]},schema:(0,r.defineSchema)({schema:e.t}),input:async e=>{let t=(0,r.useExecution)();if(t.options=await k(t.cwd,e),t.options.plugins.length===0)throw Error(`Razorwind will not generate any code - no plugins configured. Please add at least one plugin to the configuration.`);K(t.options.plugins,o.default);let n=t.options.tokens;(!n||(0,i.isEmptyObject)(n))&&(n=await Ke(t));let s={tokens:n??{},components:(0,a.defu)(t.options.components??{},await fe(t)??{})};for(let e of t.options.plugins.filter(e=>e.extract))s=await e.extract(s,t.options);if(!s.tokens||(0,i.isEmptyObject)(s.tokens))throw Error(`Unable to load design tokens for the current workspace. Please ensure that Razorwind is configured correctly and that the tokens are available.`);for(let e of t.options.plugins.filter(e=>e.validate))await e.validate(s,t.options);return s},generator:async e=>{let t=(0,r.useExecution)(),n={};for(let r of t.options.plugins.filter(e=>e.generate))n=(0,a.defu)(await r.generate(e,t.options),n);return n}});exports.defineConfig=qe,exports.definePlugin=n.definePlugin,exports.generator=Je,exports.resolveConfig=k;
package/dist/index.d.cts CHANGED
@@ -1,11 +1,48 @@
1
- import { a as Components, c as componentsSchema, i as ComponentFile, n as schema, o as componentFileSchema, r as Component, s as componentSchema, t as Schema } from "./schema-1EWJvc56.cjs";
2
- import { a as UserConfigFn, c as UserConfigParams, d as TokensPreprocessor, i as UserConfigExport, l as Plugin, n as Options, o as UserConfigFnObject, r as UserConfig, s as UserConfigFnPromise, t as Config, u as TokensParser } from "./config-Dj6RrLde.cjs";
3
- import { definePlugin } from "./plugin.cjs";
4
- import { defineConfig, resolveConfig } from "./config.cjs";
5
- import { i as tokensSchema, n as Tokens, r as tokenSchema, t as Token } from "./index-COAOe8bR.cjs";
6
- import { generator } from "./generator.cjs";
7
- import { createDocument, formatColorValue, formatDimensionValue, formatTokenValue, isPlainObject, toCssVar } from "./utils/index.cjs";
1
+ import { t as Schema } from "./schema-BNfl9Tsw.cjs";
2
+ import "./index-CjW7STaT.cjs";
3
+ import { _ as TokensTransform, a as UserConfigExport, c as UserConfigFnPromise, d as TokensAction, f as TokensFileHeader, g as TokensPreprocessor, h as TokensParser, i as UserConfig, l as UserConfigParams, m as TokensFormat, n as Config, o as UserConfigFn, p as TokensFilter, r as Options, s as UserConfigFnObject, t as definePlugin, u as Plugin, v as TokensTransformGroup } from "./plugin-CUtxHXKj.cjs";
4
+ import StyleDictionary from "style-dictionary";
8
5
  import { GeneratorConfig } from "@power-plant/core";
6
+ //#region src/lib/resolve-config.d.ts
7
+ /**
8
+ * Loads the user configuration file for the project.
9
+ *
10
+ * @param cwd - The current working directory.
11
+ * @param options - The options for the configuration.
12
+ * @returns The resolved configuration.
13
+ */
14
+ declare function resolveConfig(cwd: string, options: Options): Promise<Config>;
15
+ //#endregion
16
+ //#region src/config.d.ts
17
+ /**
18
+ * Type helper to make it easier to use `razorwind.config.ts` files. Accepts a direct {@link UserConfig} object, or a function that returns it. The function receives a {@link ConfigParams} object.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * import { defineConfig } from '@razorwind/core';
23
+ *
24
+ * export default defineConfig({
25
+ * // Your configuration here
26
+ * });
27
+ *
28
+ * // Or with a function
29
+ * export default defineConfig((env) => {
30
+ * console.log(`Running command: ${env.command} in mode: ${env.mode}`);
31
+ * return {
32
+ * // Your configuration here
33
+ * };
34
+ * });
35
+ * ```
36
+ */
37
+ declare function defineConfig(config: UserConfig): UserConfig;
38
+ declare function defineConfig(config: UserConfig[]): UserConfig[];
39
+ declare function defineConfig(config: Promise<UserConfig>): Promise<UserConfig>;
40
+ declare function defineConfig(config: Promise<UserConfig[]>): Promise<UserConfig[]>;
41
+ declare function defineConfig(config: UserConfigFnObject): UserConfigFnObject;
42
+ declare function defineConfig(config: UserConfigFnPromise): UserConfigFnPromise;
43
+ declare function defineConfig(config: UserConfigFn): UserConfigFn;
44
+ declare function defineConfig(config: UserConfigExport): UserConfigExport;
45
+ //#endregion
9
46
  //#region src/types/base.d.ts
10
47
  type Generator<TOptions extends object = object> = GeneratorConfig<Schema, TOptions> & {
11
48
  name: string;
@@ -18,5 +55,18 @@ type Generator<TOptions extends object = object> = GeneratorConfig<Schema, TOpti
18
55
  tags: string[];
19
56
  };
20
57
  //#endregion
21
- export { type Component, type ComponentFile, type Components, type Config, type Generator, type Options, type Plugin, type Schema, type Token, type Tokens, type TokensParser, type TokensPreprocessor, type UserConfig, type UserConfigExport, type UserConfigFn, type UserConfigFnObject, type UserConfigFnPromise, type UserConfigParams, componentFileSchema, componentSchema, componentsSchema, createDocument, defineConfig, definePlugin, formatColorValue, formatDimensionValue, formatTokenValue, generator, isPlainObject, resolveConfig, schema, toCssVar, tokenSchema, tokensSchema };
58
+ //#region src/index.d.ts
59
+ declare module "@power-plant/core" {
60
+ interface Context {
61
+ sd: StyleDictionary;
62
+ }
63
+ }
64
+ /**
65
+ * A Power Plant generator for Razorwind.
66
+ *
67
+ * Orchestrates configured {@link Plugin}s: Style Dictionary hooks, then `extract` → `validate` on input, then `generate`.
68
+ */
69
+ declare const generator: import("@power-plant/core").GeneratorConfigObject<Schema, Options, void>;
70
+ //#endregion
71
+ export { type Config, type Generator, type Options, type Plugin, type TokensAction, type TokensFileHeader, type TokensFilter, type TokensFormat, type TokensParser, type TokensPreprocessor, type TokensTransform, type TokensTransformGroup, type UserConfig, type UserConfigExport, type UserConfigFn, type UserConfigFnObject, type UserConfigFnPromise, type UserConfigParams, defineConfig, definePlugin, generator, resolveConfig };
22
72
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types/base.ts"],"mappings":";;;;;;;;;KAqBY,UAAU,oCAAoC,gBACxD,QACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/lib/resolve-config.ts","../src/config.ts","../src/types/base.ts","../src/index.ts"],"mappings":";;;;;;;;;;;;;iBA8CsB,cACpB,aACA,SAAS,UACR,QAAQ;;;;;;;;;;;;;;;;;;;;;;;iBCEK,aAAa,QAAQ,aAAa;iBAClC,aAAa,QAAQ,eAAe;iBACpC,aAAa,QAAQ,QAAQ,cAAc,QAAQ;iBACnD,aACd,QAAQ,QAAQ,gBACf,QAAQ;iBACK,aAAa,QAAQ,qBAAqB;iBAC1C,aAAa,QAAQ,sBAAsB;iBAC3C,aAAa,QAAQ,eAAe;iBACpC,aAAa,QAAQ,mBAAmB;;;KCvC5C,UAAU,oCAAoC,gBACxD,QACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;;YCGU;IACR,IAAI;;;;;;;;cAYK,uCAAS,sBAAA,QAAA"}
package/dist/index.d.mts CHANGED
@@ -1,11 +1,48 @@
1
- import { a as Components, c as componentsSchema, i as ComponentFile, n as schema, o as componentFileSchema, r as Component, s as componentSchema, t as Schema } from "./schema-BNfl9Tsw.mjs";
2
- import { a as UserConfigFn, c as UserConfigParams, d as TokensPreprocessor, i as UserConfigExport, l as Plugin, n as Options, o as UserConfigFnObject, r as UserConfig, s as UserConfigFnPromise, t as Config, u as TokensParser } from "./config-DQHHeicR.mjs";
3
- import { definePlugin } from "./plugin.mjs";
4
- import { defineConfig, resolveConfig } from "./config.mjs";
5
- import { i as tokensSchema, n as Tokens, r as tokenSchema, t as Token } from "./index--y-fo2Lr.mjs";
6
- import { generator } from "./generator.mjs";
7
- import { createDocument, formatColorValue, formatDimensionValue, formatTokenValue, isPlainObject, toCssVar } from "./utils/index.mjs";
1
+ import { t as Schema } from "./schema-BNfl9Tsw.mjs";
2
+ import "./index--y-fo2Lr.mjs";
3
+ import { _ as TokensTransform, a as UserConfigExport, c as UserConfigFnPromise, d as TokensAction, f as TokensFileHeader, g as TokensPreprocessor, h as TokensParser, i as UserConfig, l as UserConfigParams, m as TokensFormat, n as Config, o as UserConfigFn, p as TokensFilter, r as Options, s as UserConfigFnObject, t as definePlugin, u as Plugin, v as TokensTransformGroup } from "./plugin-DNLmSRnE.mjs";
8
4
  import { GeneratorConfig } from "@power-plant/core";
5
+ import StyleDictionary from "style-dictionary";
6
+ //#region src/lib/resolve-config.d.ts
7
+ /**
8
+ * Loads the user configuration file for the project.
9
+ *
10
+ * @param cwd - The current working directory.
11
+ * @param options - The options for the configuration.
12
+ * @returns The resolved configuration.
13
+ */
14
+ declare function resolveConfig(cwd: string, options: Options): Promise<Config>;
15
+ //#endregion
16
+ //#region src/config.d.ts
17
+ /**
18
+ * Type helper to make it easier to use `razorwind.config.ts` files. Accepts a direct {@link UserConfig} object, or a function that returns it. The function receives a {@link ConfigParams} object.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * import { defineConfig } from '@razorwind/core';
23
+ *
24
+ * export default defineConfig({
25
+ * // Your configuration here
26
+ * });
27
+ *
28
+ * // Or with a function
29
+ * export default defineConfig((env) => {
30
+ * console.log(`Running command: ${env.command} in mode: ${env.mode}`);
31
+ * return {
32
+ * // Your configuration here
33
+ * };
34
+ * });
35
+ * ```
36
+ */
37
+ declare function defineConfig(config: UserConfig): UserConfig;
38
+ declare function defineConfig(config: UserConfig[]): UserConfig[];
39
+ declare function defineConfig(config: Promise<UserConfig>): Promise<UserConfig>;
40
+ declare function defineConfig(config: Promise<UserConfig[]>): Promise<UserConfig[]>;
41
+ declare function defineConfig(config: UserConfigFnObject): UserConfigFnObject;
42
+ declare function defineConfig(config: UserConfigFnPromise): UserConfigFnPromise;
43
+ declare function defineConfig(config: UserConfigFn): UserConfigFn;
44
+ declare function defineConfig(config: UserConfigExport): UserConfigExport;
45
+ //#endregion
9
46
  //#region src/types/base.d.ts
10
47
  type Generator<TOptions extends object = object> = GeneratorConfig<Schema, TOptions> & {
11
48
  name: string;
@@ -18,5 +55,18 @@ type Generator<TOptions extends object = object> = GeneratorConfig<Schema, TOpti
18
55
  tags: string[];
19
56
  };
20
57
  //#endregion
21
- export { type Component, type ComponentFile, type Components, type Config, type Generator, type Options, type Plugin, type Schema, type Token, type Tokens, type TokensParser, type TokensPreprocessor, type UserConfig, type UserConfigExport, type UserConfigFn, type UserConfigFnObject, type UserConfigFnPromise, type UserConfigParams, componentFileSchema, componentSchema, componentsSchema, createDocument, defineConfig, definePlugin, formatColorValue, formatDimensionValue, formatTokenValue, generator, isPlainObject, resolveConfig, schema, toCssVar, tokenSchema, tokensSchema };
58
+ //#region src/index.d.ts
59
+ declare module "@power-plant/core" {
60
+ interface Context {
61
+ sd: StyleDictionary;
62
+ }
63
+ }
64
+ /**
65
+ * A Power Plant generator for Razorwind.
66
+ *
67
+ * Orchestrates configured {@link Plugin}s: Style Dictionary hooks, then `extract` → `validate` on input, then `generate`.
68
+ */
69
+ declare const generator: import("@power-plant/core").GeneratorConfigObject<Schema, Options, void>;
70
+ //#endregion
71
+ export { type Config, type Generator, type Options, type Plugin, type TokensAction, type TokensFileHeader, type TokensFilter, type TokensFormat, type TokensParser, type TokensPreprocessor, type TokensTransform, type TokensTransformGroup, type UserConfig, type UserConfigExport, type UserConfigFn, type UserConfigFnObject, type UserConfigFnPromise, type UserConfigParams, defineConfig, definePlugin, generator, resolveConfig };
22
72
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types/base.ts"],"mappings":""}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/lib/resolve-config.ts","../src/config.ts","../src/types/base.ts","../src/index.ts"],"mappings":""}
package/dist/index.mjs CHANGED
@@ -1 +1,2 @@
1
- import{definePlugin as e}from"./plugin.mjs";import{t}from"./resolve-config-CBowa3KM.mjs";import{defineConfig as n}from"./config.mjs";import{t as r}from"./generator-CZASa_I0.mjs";import{a as i,i as a,n as o,o as s,r as c,t as l}from"./schema-Bxzw_P4l.mjs";import{createDocument as u,formatColorValue as d,formatDimensionValue as f,formatTokenValue as p,isPlainObject as m,toCssVar as h}from"./utils/index.mjs";export{a as componentFileSchema,i as componentSchema,s as componentsSchema,u as createDocument,n as defineConfig,e as definePlugin,d as formatColorValue,f as formatDimensionValue,p as formatTokenValue,r as generator,m as isPlainObject,t as resolveConfig,c as schema,h as toCssVar,l as tokenSchema,o as tokensSchema};
1
+ import{a as e,i as t,r as n}from"./schema-Bxzw_P4l.mjs";import{isObject as r}from"./utils/index.mjs";import{definePlugin as i}from"./plugin.mjs";import{defineGenerator as a,defineSchema as o,useExecution as s}from"@power-plant/core";import{isEmptyObject as c}from"@stryke/type-checks/is-empty-object";import{createDefu as l,defu as u}from"defu";import d from"style-dictionary";import{existsSync as f}from"@stryke/fs/exists";import{isDirectory as p}from"@stryke/fs/is-file";import{readJsonFile as m}from"@stryke/fs/json";import{joinPaths as h}from"@stryke/path/join";import{isSetObject as g}from"@stryke/type-checks/is-set-object";import{isSetString as _}from"@stryke/type-checks/is-set-string";import{readdir as ee}from"node:fs/promises";import{basename as v,isAbsolute as y,resolve as b}from"node:path";import{getEnvPaths as te}from"@stryke/env";import{findFilePath as x}from"@stryke/path/find";import{replacePath as S}from"@stryke/path/replace";import{isFunction as C}from"@stryke/type-checks/is-function";import{loadConfig as w}from"c12";import{createJiti as ne}from"jiti";import{existsSync as T}from"node:fs";import E from"node:os";import{importModule as re}from"@stryke/fs/resolve";import ie from"fast-glob";import ae from"json5";import{parse as oe}from"smol-toml";import{parse as se}from"yaml";var ce=`0.0.11`;const le=e.partial(),D=l((e,t,n)=>Array.isArray(n)?(e[t]=n,!0):!1);function ue(e,t){return y(t)?t:b(e,t)}function de(e){return Array.isArray(e)?e.filter(_):_(e)?[e]:[]}function fe(e){if(_(e))return e;if(g(e)&&`url`in e&&_(e.url))return e.url}function O(e){if(!e)return;let n=t.safeParse(e);if(n.success)return[n.data];if(!Array.isArray(e))return;let r=[];for(let n of e){let e=t.safeParse(n);e.success&&r.push(e.data)}return r.length>0?r:void 0}function k(e){if(!g(e))return;let t=le.safeParse(e);if(t.success)return Object.keys(t.data).length>0?t.data:void 0}function A(e){return g(e)&&`path`in e}async function pe(e){let t=h(e,`package.json`);if(!f(t))return;let n;try{n=await m(t)}catch{return}let r={};_(n.name)&&(r.name=n.name,r.title=n.name),_(n.description)&&(r.description=n.description),_(n.version)&&(r.version=n.version),_(n.homepage)&&(r.homepage=n.homepage);let i=fe(n.repository);if(i&&(r.repository=i),g(n.dependencies)&&(r.dependencies=n.dependencies),g(n.devDependencies)&&(r.devDependencies=n.devDependencies),Array.isArray(n.keywords)){let e=n.keywords.filter(_);e.length>0&&(r.tags=e)}let a=n.razorwind,o,s;A(a)?s=O(a):g(a)&&(o=k(a),`files`in a&&(s=O(a.files)));let c=D(o??{},r);return s?.length&&(c.files=s),Object.keys(c).length>0?c:void 0}async function me(e){let t=h(e,`component.json`);if(!f(t))return;let n;try{n=await m(t)}catch{return}if(A(n)||Array.isArray(n)){let e=O(n);if(e)return{files:e}}return k(n)}async function he(t){let n=await pe(t),r=await me(t);if(!n&&!r)return;let i=D(r??{},n??{}),a=v(t),o=_(i.name)?i.name:a,s=_(i.title)?i.title:o,c=e.safeParse({...i,name:o,title:s});return c.success?c.data:void 0}async function ge(e){let t={},n=de(e.options.componentsPath);for(let r of n){let n=ue(e.cwd,r);if(!(!f(n)||!p(n)))try{let e=await ee(n,{withFileTypes:!0});for(let r of e){if(!r.isDirectory()||r.name.startsWith(`.`))continue;let e=await he(h(n,r.name));e&&(t[e.name]=e)}}catch{continue}}return t}const j=E.homedir();async function M(e,t){let n=t.configFile&&T(S(t.configFile,e))?S(t.configFile,e):t.configFile&&T(t.configFile)?t.configFile:T(h(e,`razorwind.${t.mode}.config.ts`))?h(e,`razorwind.${t.mode}.config.ts`):T(h(e,`razorwind.${t.mode}.config.js`))?h(e,`razorwind.${t.mode}.config.js`):T(h(e,`razorwind.${t.mode}.config.mts`))?h(e,`razorwind.${t.mode}.config.mts`):T(h(e,`razorwind.${t.mode}.config.mjs`))?h(e,`razorwind.${t.mode}.config.mjs`):T(h(e,`razorwind.config.ts`))?h(e,`razorwind.config.ts`):T(h(e,`razorwind.config.js`))?h(e,`razorwind.config.js`):T(h(e,`razorwind.config.mts`))?h(e,`razorwind.config.mts`):T(h(e,`razorwind.config.mjs`))?h(e,`razorwind.config.mjs`):void 0,r=te({orgId:`storm-software`,appId:`razorwind`,workspaceRoot:e}),i={fsCache:r.cache},a=ne(e,i),o={};if(n){let r=await a.import(a.esmResolve(n));if(r?.default){let i={};C(r.default)?i=await Promise.resolve(r.default({cwd:e,mode:t.mode??`development`})):(g(r.default)||Array.isArray(r.default))&&(i=r.default),(g(i)||Array.isArray(i))&&(o={...i,configFile:n})}}let[s,c,l]=await Promise.all([w({cwd:e,name:`razorwind`,envName:t.mode,globalRc:!0,packageJson:`razorwind`,dotenv:!0,jitiOptions:i}),w({cwd:r.config,name:`razorwind`,envName:t.mode,dotenv:!0,jitiOptions:i}),w({cwd:j,name:`razorwind`,envName:t.mode,dotenv:!0,jitiOptions:i})]),d=u({cwd:e,envPaths:{...r,home:j}},t,o,g(s?.config)?{...s.config}:{},g(c?.config)?{...c.config}:{},g(l?.config)?{...l.config}:{},{componentsPath:e,plugins:[]});if(Array.isArray(d.componentsPath)){let t=d.componentsPath.filter(_).map(e=>x(e));d.componentsPath=t.length>0?t:e}else _(d.componentsPath)?d.componentsPath=x(d.componentsPath):d.componentsPath=e;return Array.isArray(d.plugins)||(d.plugins=[]),d}const _e=[`razorwind-json`,`razorwind-yaml`,`razorwind-toml`,`razorwind-css`],N=[`json`,`json5`,`jsonc`,`yaml`,`yml`,`toml`,`css`,`js`,`mjs`,`cjs`,`ts`,`mts`,`cts`],ve=N.join(`,`),ye=[`tokens.json`,`tokens.json5`,`tokens.jsonc`,`tokens.yaml`,`tokens.yml`,`tokens.toml`,`tokens.css`,`design-tokens.json`,`design-tokens.yaml`,`design-tokens.yml`,`tokens`,`design-tokens`,`src/tokens`,`src/design-tokens`,`packages/tokens`,`style-dictionary.config.js`,`style-dictionary.config.mjs`,`style-dictionary.config.ts`,`sd.config.js`,`sd.config.mjs`,`sd.config.ts`],P=`**/*.{${ve}}`,be=/^(light|dark|dim|dimmed|high-contrast|hc|default|base|theme)([._-].+)?$/i,xe={color:`color`,colours:`color`,colors:`color`,colour:`color`,palette:`color`,bg:`color`,background:`color`,foreground:`color`,fg:`color`,border:`color`,fill:`color`,stroke:`color`,spacing:`dimension`,space:`dimension`,size:`dimension`,sizes:`dimension`,sizing:`dimension`,gap:`dimension`,radius:`dimension`,radii:`dimension`,rounded:`dimension`,width:`dimension`,height:`dimension`,dimension:`dimension`,dimensions:`dimension`,duration:`duration`,durations:`duration`,time:`duration`,delay:`duration`,animation:`duration`,motion:`duration`,transition:`duration`,font:`fontFamily`,fonts:`fontFamily`,fontfamily:`fontFamily`,"font-family":`fontFamily`,typeface:`fontFamily`,fontweight:`fontWeight`,"font-weight":`fontWeight`,weight:`fontWeight`,opacity:`number`,opacities:`number`,zindex:`number`,"z-index":`number`,lineheight:`number`,"line-height":`number`,letterspacing:`dimension`,"letter-spacing":`dimension`,shadow:`shadow`,shadows:`shadow`,elevation:`shadow`,gradient:`gradient`,gradients:`gradient`,typography:`typography`,text:`typography`,cubicbezier:`cubicBezier`,easing:`cubicBezier`,ease:`cubicBezier`},Se=/^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,Ce=/^rgba?\(\s*([+\d.]+%?)[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+%?)[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+%?)(?:\s*[,/]\s*([+\d.]+%?))?\s*\)$/i,we=/^hsla?\(\s*([+\d.]+)[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+)%[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+)%(?:\s*[,/]\s*([+\d.]+%?))?\s*\)$/i,Te=/^oklch\(\s*([+\d.]+%?|none)\s+([+\d.]+|none)\s+([+\d.]+|none)(?:\s*\/\s*([+\d.]+%?))?\s*\)$/i,Ee=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(px|rem|em|%|vh|vw|vmin|vmax|ch|ex|cm|mm|in|pt|pc)$/i,De=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(ms|s)$/i,Oe=/^cubic-bezier\(\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*\)$/i,ke=/^var\(\s*(--[\w-]+)\s*(?:,\s*(?:\S.*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))?\)\s*$/i,Ae=/^\{[^{}]+\}$/,je={thin:100,hairline:100,extralight:200,"extra-light":200,ultralight:200,light:300,normal:400,regular:400,book:400,medium:500,semibold:600,"semi-bold":600,demibold:600,bold:700,extrabold:800,"extra-bold":800,ultrabold:800,black:900,heavy:900},F=new Set([`px`,`rem`]);function I(e){return Math.min(1,Math.max(0,e))}function L(e,t=100){let n=e.trim();if(n.endsWith(`%`))return I(Number.parseFloat(n)/t);let r=Number.parseFloat(n);return I(r>1?r/255:r)}function Me(e){let t=e.slice(1);return t.length===3||t.length===4?`#${[...t].map(e=>e+e).join(``)}`:(e.length===7||e.length,e)}function Ne(e){let t=Me(e.toLowerCase()).slice(1),n=Number.parseInt(t.slice(0,2),16)/255,r=Number.parseInt(t.slice(2,4),16)/255,i=Number.parseInt(t.slice(4,6),16)/255,a=t.length===8?Number.parseInt(t.slice(6,8),16)/255:void 0;return{colorSpace:`srgb`,components:[n,r,i],...a===void 0||a===1?{}:{alpha:a},hex:`#${t.slice(0,6)}`}}function Pe(e){return`{${e.replace(/^--/,``).split(`-`).filter(Boolean).join(`.`)}}`}function R(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function z(e){for(let t=e.length-1;t>=0;t--){let n=e[t]?.toLowerCase();if(!n)continue;let r=xe[n];if(r)return r}}function B(e,t=[]){let n=z(t);if(typeof e==`string`){let r=e.trim();if(Ae.test(r))return{value:r,type:n};let i=r.match(ke);if(i?.[1])return{value:Pe(i[1]),type:n};if(Se.test(r))return{value:Ne(r),type:`color`};let a=r.match(Ce);if(a){let e=[L(a[1]),L(a[2]),L(a[3])],t=a[4]?a[4].endsWith(`%`)?I(Number.parseFloat(a[4])/100):I(Number.parseFloat(a[4])):void 0;return{value:{colorSpace:`srgb`,components:e,...t===void 0||Number.isNaN(t)?{}:{alpha:t}},type:`color`}}let o=r.match(we);if(o)return{value:{colorSpace:`hsl`,components:[Number.parseFloat(o[1]),Number.parseFloat(o[2]),Number.parseFloat(o[3])],...o[4]?{alpha:o[4].endsWith(`%`)?I(Number.parseFloat(o[4])/100):I(Number.parseFloat(o[4]))}:{}},type:`color`};let s=r.match(Te);if(s){let e=e=>e===`none`?`none`:e.endsWith(`%`)?Number.parseFloat(e)/100:Number.parseFloat(e);return{value:{colorSpace:`oklch`,components:[e(s[1]),e(s[2]),e(s[3])],...s[4]?{alpha:s[4].endsWith(`%`)?I(Number.parseFloat(s[4])/100):I(Number.parseFloat(s[4]))}:{}},type:`color`}}let c=r.match(Ee);if(c){let e=c[2].toLowerCase(),t=Number.parseFloat(c[1]);return F.has(e)?{value:{value:t,unit:e},type:`dimension`}:{value:r,type:n===`dimension`?void 0:n}}let l=r.match(De);if(l)return{value:{value:Number.parseFloat(l[1]),unit:l[2].toLowerCase()},type:`duration`};let u=r.match(Oe);if(u)return{value:[Number.parseFloat(u[1]),Number.parseFloat(u[2]),Number.parseFloat(u[3]),Number.parseFloat(u[4])],type:`cubicBezier`};let d=je[r.toLowerCase()];return d===void 0?n===`fontFamily`||/family|font|typeface/i.test(t.at(-1)??``)?r.includes(`,`)?{value:r.split(`,`).map(e=>e.trim().replace(/^["']|["']$/g,``)),type:`fontFamily`}:{value:r.replace(/^["']|["']$/g,``),type:`fontFamily`}:n===`color`&&!r.startsWith(`{`)?{value:r,type:void 0}:{value:r,type:n}:{value:d,type:`fontWeight`}}if(typeof e==`number`)return n===`fontWeight`?{value:e,type:`fontWeight`}:n===`duration`?{value:{value:e,unit:`ms`},type:`duration`}:n===`dimension`?{value:{value:e,unit:`px`},type:`dimension`}:{value:e,type:n??`number`};if(Array.isArray(e))return e.length===4&&e.every(e=>typeof e==`number`)&&(n===`cubicBezier`||t.some(e=>/ease|bezier/i.test(e)))?{value:e,type:`cubicBezier`}:e.every(e=>typeof e==`string`)?{value:e,type:n??`fontFamily`}:{value:e,type:n};if(r(e)){if(`colorSpace`in e&&`components`in e)return{value:e,type:`color`};if(`value`in e&&`unit`in e){let t=String(e.unit).toLowerCase();return t===`ms`||t===`s`?{value:e,type:`duration`}:F.has(t)?{value:e,type:`dimension`}:{value:e,type:n}}}return{value:e,type:n}}function Fe(e,t){let n={...e};if(`value`in n&&!(`$value`in n)&&(n.$value=n.value,delete n.value),`type`in n&&!(`$type`in n)&&(n.$type=n.type,delete n.type),`comment`in n&&!(`$description`in n)&&(n.$description=n.comment,delete n.comment),`description`in n&&!(`$description`in n)&&(n.$description=n.description,delete n.description),`ref`in n&&!(`$ref`in n)&&(n.$ref=n.ref,delete n.ref),`$value`in n){let e=B(n.$value,t);n.$value=e.value,!(`$type`in n)&&e.type&&(n.$type=e.type)}return n}function V(e,t=[]){if(Array.isArray(e))return e.map((e,n)=>V(e,[...t,String(n)]));if(!r(e))return e;if(R(e))return Fe(e,t);let n={};for(let[r,i]of Object.entries(e)){if(r.startsWith(`$`)){n[r]=i;continue}n[r]=V(i,[...t,r])}if(!(`$type`in n)){let e=z(t);e&&t.length>0&&(n.$type=e)}return n}function Ie(e){let t={};for(let[n,i]of Object.entries(e)){let e=n.replace(/^--/,``).split(/[-./]/).filter(Boolean);if(e.length===0)continue;let a=t;for(let t=0;t<e.length-1;t++){let n=e[t],i=a[n];r(i)?R(i)&&(a[n]={DEFAULT:i}):a[n]={},a=a[n]}let o=e.at(-1),s=B(i,e),c={$value:s.value,...s.type?{$type:s.type}:{}},l=a[o];r(l)&&!R(l)?l.DEFAULT=c:a[o]=c}return V(t)}const Le=/(--[A-Z_][\w-]*)\s*:\s*([^;}{]+?)(?=\s*(?:;|\}|$))/gi;function Re(e){let t={},n=e.replace(/\/\*[\s\S]*?\*\//g,``);for(let e of n.matchAll(Le)){let n=e[1],r=e[2]?.trim();!n||!r||(t[n]=r)}return Ie(t)}const H=`razorwind-infer`;function U(e){if(e==null)return{};if(typeof e!=`object`||Array.isArray(e))throw TypeError(`Token file must parse to a plain object.`);return V(e)}function ze(e){try{return U(ae.parse(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse JSON token file: ${t}`)}}function Be(e){try{return U(se(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse YAML token file: ${t}`)}}function Ve(e){try{return U(oe(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse TOML token file: ${t}`)}}const W=[{name:`razorwind-json`,pattern:/\.json[c5]?$/i,parser:({contents:e})=>ze(e)},{name:`razorwind-yaml`,pattern:/\.ya?ml$/i,parser:({contents:e})=>Be(e)},{name:`razorwind-toml`,pattern:/\.toml$/i,parser:({contents:e})=>Ve(e)},{name:`razorwind-css`,pattern:/\.css$/i,parser:({contents:e})=>V(Re(e))}];function He(){return Object.fromEntries(W.map(({name:e,pattern:t,parser:n})=>[e,{pattern:t,parser:n}]))}function G(e){return V(e)}function Ue(){return{[H]:G}}function K(e=[],t=d){for(let e of W)t.registerParser(e);t.registerPreprocessor({name:H,preprocessor:G});let n=0,r=0,i=0,a=0,o=0,s=0,c=0,l=0;for(let u of e){for(let e of u.parsers??[])t.registerParser({name:e.name??`${u.name}-parser-${n}`,pattern:e.pattern,parser:({contents:t})=>e.parser(t)}),n++;for(let e of u.preprocessors??[])t.registerPreprocessor(C(e)?{name:`${u.name}-preprocessor-${r}`,preprocessor:e}:{name:e.name??`${u.name}-preprocessor-${r}`,preprocessor:e.preprocessor}),r++;for(let e of u.transforms??[])t.registerTransform({...e,name:e.name??`${u.name}-transform-${i}`}),i++;for(let e of u.transformGroups??[])t.registerTransformGroup({name:e.name??`${u.name}-transform-group-${a}`,transforms:e.transforms}),a++;for(let e of u.formats??[])t.registerFormat({...e,name:e.name??`${u.name}-format-${o}`}),o++;for(let e of u.filters??[])t.registerFilter(C(e)?{name:`${u.name}-filter-${s}`,filter:e}:{name:e.name??`${u.name}-filter-${s}`,filter:e.filter}),s++;for(let e of u.fileHeaders??[])t.registerFileHeader(C(e)?{name:`${u.name}-file-header-${c}`,fileHeader:e}:{name:e.name??`${u.name}-file-header-${c}`,fileHeader:e.fileHeader}),c++;for(let e of u.actions??[])t.registerAction({...e,name:e.name??`${u.name}-action-${l}`}),l++}}function q(e,t){return y(t)?t:b(e,t)}function J(e){return/\.([^.]+)$/.exec(e)?.[1]?.toLowerCase()??``}function Y(e){return N.includes(J(e))}function X(e){let t=e.split(/[/\\]/).pop()?.toLowerCase()??``;return t.startsWith(`style-dictionary.config.`)||t.startsWith(`sd.config.`)}function Z(e){return h(e,P)}function We(e){return Array.isArray(e)?e.filter(_):_(e)?[e]:[]}function Ge(e,t){let n=q(e,t);if(!f(n))throw Error(`tokensPath "${t}" does not exist (resolved: ${n}).`);return p(n)?{resolvedPath:n,source:[Z(n)],isStyleDictionaryConfig:!1}:X(n)?{resolvedPath:n,source:[],isStyleDictionaryConfig:!0}:{resolvedPath:n,source:[n],isStyleDictionaryConfig:!1}}function Ke(e){let{cwd:t,tokensPath:n,fallbackPaths:r=[]}=e,i=We(n);if(i.length>0){let e=i.map(e=>Ge(t,e)),n=e.filter(e=>e.isStyleDictionaryConfig);if(n.length>0){if(e.length>1)throw Error(`tokensPath cannot mix Style Dictionary config files with other token sources.`);return{resolvedPath:n[0].resolvedPath,source:[],origin:`tokensPath`}}return{resolvedPath:e[0]?.resolvedPath,source:e.flatMap(e=>e.source),origin:`tokensPath`}}for(let e of ye){let n=q(t,e);if(f(n)){if(p(n))return{resolvedPath:n,source:[Z(n)],origin:`default`};if(X(n))return{resolvedPath:n,source:[],origin:`default`};if(Y(n))return{resolvedPath:n,source:[n],origin:`default`}}}for(let e of r){if(!e)continue;let n=q(t,e);if(!(!f(n)||p(n))&&(Y(n)||J(n)===`css`))return{resolvedPath:n,source:[n],origin:`fallback`}}return{source:[],origin:`none`}}function qe(e){return(e.split(/[/\\]/).pop()??``).replace(/\.[^.]+$/,``).match(be)?.[1]?.toLowerCase()}function Je(e){K(e.plugins,d)}function Ye(e){return!e||typeof e!=`object`||Object.keys(e).length===0}async function Xe(e){let t=await re(e);return t&&typeof t==`object`&&`default`in t&&t.default?t.default:t}async function Q(e,t){Je(e);let n=new d({...t,parsers:[..._e,...t.parsers??[]],preprocessors:[H,...t.preprocessors??[]],hooks:{...t.hooks,parsers:{...He(),...t.hooks?.parsers},preprocessors:{...Ue(),...t.hooks?.preprocessors}},usesDtcg:t.usesDtcg??!0,platforms:t.platforms??{}});return await n.hasInitialized,n}async function $(e,t){return t.length===0?{}:(await Q(e,{source:t})).tokens}async function Ze(e){return(await ie(e,{absolute:!0,onlyFiles:!0,unique:!0})).sort()}async function Qe(e,t){let n=await Ze(t);if(n.length===0)return{};let r=new Map,i=[];for(let e of n){let t=qe(e);if(t){let n=r.get(t)??[];n.push(e),r.set(t,n)}else i.push(e)}if(r.size<2)return $(e,t);let a={};if(i.length>0){let t=await $(e,i);Ye(t)||(a.base=t)}for(let[t,n]of r)a[t]=await $(e,n);return a}async function $e(e){let t=Ke(e.options);return t.resolvedPath&&f(t.resolvedPath)&&/(?:^|[/\\])(?:style-dictionary|sd)\.config\./i.test(v(t.resolvedPath))?(e.sd=await Q(e.options,await Xe(t.resolvedPath)),e.sd.tokens):t.source.length===0?{}:e.options.splitThemes?Qe(e.options,t.source):$(e.options,t.source)}function et(e){return e}const tt=a({meta:{name:`razorwind`,title:`Razorwind`,description:`A generator that uses Razorwind to generate design system code from design tokens and components.`,version:ce,tags:[`razorwind`,`dtcg`]},schema:o({schema:n}),input:async e=>{let t=s();if(t.options=await M(t.cwd,e),t.options.plugins.length===0)throw Error(`Razorwind will not generate any code - no plugins configured. Please add at least one plugin to the configuration.`);K(t.options.plugins,d);let n=t.options.tokens;(!n||c(n))&&(n=await $e(t));let r={tokens:n??{},components:u(t.options.components??{},await ge(t)??{})};for(let e of t.options.plugins.filter(e=>e.extract))r=await e.extract(r,t.options);if(!r.tokens||c(r.tokens))throw Error(`Unable to load design tokens for the current workspace. Please ensure that Razorwind is configured correctly and that the tokens are available.`);for(let e of t.options.plugins.filter(e=>e.validate))await e.validate(r,t.options);return r},generator:async e=>{let t=s(),n={};for(let r of t.options.plugins.filter(e=>e.generate))n=u(await r.generate(e,t.options),n);return n}});export{et as defineConfig,i as definePlugin,tt as generator,M as resolveConfig};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":[],"mappings":""}
@@ -0,0 +1,291 @@
1
+ import { a as Components, t as Schema } from "./schema-BNfl9Tsw.cjs";
2
+ import { PreprocessedTokens } from "style-dictionary";
3
+ import { Tokens } from "@power-plant/dtcg-schema";
4
+ import { EnvPaths } from "@stryke/env";
5
+ import { MaybePromise, RequiredKeys } from "@stryke/types/base";
6
+ import { GeneratedDocument } from "@power-plant/core";
7
+ import { Action, DesignTokens, FileHeader, Filter, Format, Transform } from "style-dictionary/types";
8
+ //#region src/types/plugin.d.ts
9
+ /**
10
+ * Style Dictionary parser hook contributed by a plugin.
11
+ *
12
+ * @see https://styledictionary.com/reference/hooks/parsers/
13
+ */
14
+ interface TokensParser {
15
+ name?: string;
16
+ pattern: RegExp;
17
+ parser: (contents: string) => DesignTokens;
18
+ }
19
+ /**
20
+ * Style Dictionary preprocessor hook contributed by a plugin.
21
+ *
22
+ * @see https://styledictionary.com/reference/hooks/preprocessors/
23
+ */
24
+ type TokensPreprocessor = {
25
+ name?: string;
26
+ preprocessor: (dictionary: PreprocessedTokens) => PreprocessedTokens;
27
+ } | ((dictionary: PreprocessedTokens) => PreprocessedTokens);
28
+ /**
29
+ * Style Dictionary transform hook contributed by a plugin.
30
+ *
31
+ * @see https://styledictionary.com/reference/hooks/transforms/
32
+ */
33
+ type TokensTransform = Omit<Transform, "name"> & {
34
+ name?: string;
35
+ };
36
+ /**
37
+ * Style Dictionary transform group hook contributed by a plugin.
38
+ *
39
+ * @see https://styledictionary.com/reference/hooks/transform-groups/
40
+ */
41
+ interface TokensTransformGroup {
42
+ name?: string;
43
+ transforms: string[];
44
+ }
45
+ /**
46
+ * Style Dictionary format hook contributed by a plugin.
47
+ *
48
+ * @see https://styledictionary.com/reference/hooks/formats/
49
+ */
50
+ type TokensFormat = Omit<Format, "name"> & {
51
+ name?: string;
52
+ };
53
+ /**
54
+ * Style Dictionary filter hook contributed by a plugin.
55
+ *
56
+ * @see https://styledictionary.com/reference/hooks/filters/
57
+ */
58
+ type TokensFilter = (Omit<Filter, "name"> & {
59
+ name?: string;
60
+ }) | Filter["filter"];
61
+ /**
62
+ * Style Dictionary file header hook contributed by a plugin.
63
+ *
64
+ * @see https://styledictionary.com/reference/hooks/file-headers/
65
+ */
66
+ type TokensFileHeader = {
67
+ name?: string;
68
+ fileHeader: FileHeader;
69
+ } | FileHeader;
70
+ /**
71
+ * Style Dictionary action hook contributed by a plugin.
72
+ *
73
+ * @see https://styledictionary.com/reference/hooks/actions/
74
+ */
75
+ type TokensAction = Omit<Action, "name"> & {
76
+ name?: string;
77
+ };
78
+ /**
79
+ * Razorwind plugin: Style Dictionary hooks plus extract / generate / validate.
80
+ *
81
+ * @see https://styledictionary.com/reference/api/
82
+ */
83
+ interface Plugin {
84
+ /**
85
+ * The name of the plugin.
86
+ *
87
+ * @remarks
88
+ * The name of the plugin is used to identify the plugin in the configuration and to generate the plugin's documentation.
89
+ */
90
+ name: string;
91
+ /**
92
+ * Custom file parsers registered with Style Dictionary to load token sources.
93
+ *
94
+ * @see https://styledictionary.com/reference/hooks/parsers/
95
+ */
96
+ parsers?: TokensParser[];
97
+ /**
98
+ * Preprocessors that run on the merged token dictionary before transforms.
99
+ *
100
+ * @see https://styledictionary.com/reference/hooks/preprocessors/
101
+ */
102
+ preprocessors?: TokensPreprocessor[];
103
+ /**
104
+ * Transforms that modify token names, attributes, or values per platform.
105
+ *
106
+ * @see https://styledictionary.com/reference/hooks/transforms/
107
+ */
108
+ transforms?: TokensTransform[];
109
+ /**
110
+ * Named groups of transforms applied together in platform configuration.
111
+ *
112
+ * @see https://styledictionary.com/reference/hooks/transform-groups/
113
+ */
114
+ transformGroups?: TokensTransformGroup[];
115
+ /**
116
+ * Output formats that turn the transformed dictionary into file contents.
117
+ *
118
+ * @see https://styledictionary.com/reference/hooks/formats/
119
+ */
120
+ formats?: TokensFormat[];
121
+ /**
122
+ * Filters that decide which tokens are included in a platform or format.
123
+ *
124
+ * @see https://styledictionary.com/reference/hooks/filters/
125
+ */
126
+ filters?: TokensFilter[];
127
+ /**
128
+ * File header generators that add build metadata comments to output files.
129
+ *
130
+ * @see https://styledictionary.com/reference/hooks/file-headers/
131
+ */
132
+ fileHeaders?: TokensFileHeader[];
133
+ /**
134
+ * Post-build actions such as copying assets or running follow-up scripts.
135
+ *
136
+ * @see https://styledictionary.com/reference/hooks/actions/
137
+ */
138
+ actions?: TokensAction[];
139
+ /**
140
+ * Extract the design tokens from the source files.
141
+ *
142
+ * @param spec - The schema of the design tokens.
143
+ * @param config - The configuration of the project.
144
+ * @returns The schema of the design tokens.
145
+ */
146
+ extract?: (spec: Schema, config: Config) => MaybePromise<Schema>;
147
+ /**
148
+ * Generate the design system code from the design tokens.
149
+ *
150
+ * @param spec - The schema of the design tokens.
151
+ * @param config - The configuration of the project.
152
+ * @returns The generated code.
153
+ */
154
+ generate?: (spec: Schema, config: Config) => MaybePromise<Record<string, GeneratedDocument>>;
155
+ /**
156
+ * Validate the design tokens.
157
+ *
158
+ * @param spec - The schema of the design tokens.
159
+ * @param config - The configuration of the project.
160
+ * @throws An error if the design tokens are invalid.
161
+ */
162
+ validate?: (spec: Schema, config: Config) => MaybePromise<void>;
163
+ }
164
+ //#endregion
165
+ //#region src/types/config.d.ts
166
+ interface Options {
167
+ /**
168
+ * The directory or file containing a Razorwind configuration file.
169
+ *
170
+ * @defaultValue "razorwind.config.ts"
171
+ */
172
+ configFile?: string;
173
+ /**
174
+ * The path(s) to directories containing component directories or files.
175
+ */
176
+ componentsPath?: string | string[];
177
+ /**
178
+ * The directory(ies) or file(s) containing the tokens.
179
+ *
180
+ * @see https://styledictionary.com/info/tokens/
181
+ *
182
+ * @defaultValue "tokens.json" (or "tokens" directory)
183
+ */
184
+ tokensPath?: string | string[];
185
+ /**
186
+ * The mode to use for the configuration.
187
+ *
188
+ * @defaultValue "production"
189
+ */
190
+ mode?: "development" | "test" | "production";
191
+ /**
192
+ * Whether to split multi-file token sources into a record keyed by theme.
193
+ *
194
+ * @remarks
195
+ * When `true`, each resolved source file is inspected for a theme-like basename. The recognized names include (case-insensitive):
196
+ * - `light`
197
+ * - `dark`
198
+ * - `dim`
199
+ * - `dimmed`
200
+ * - `high-contrast`
201
+ * - `hc`
202
+ * - `default`
203
+ * - `base`
204
+ * - `theme`
205
+ *
206
+ * The basename is optionally followed by a suffix separated by `.`, `_`, or `-` (for example `light.json`, `dark-mode.tokens.json`, `theme.custom.yaml`).
207
+ *
208
+ * Files that match are grouped under that theme key. Non-theme files are merged into a shared `base` entry when at least two distinct themes are detected. If fewer than two themes are found, all sources are merged into a single {@link Tokens} object instead of a record.
209
+ *
210
+ * When `false`, every source file is merged into one flat {@link Tokens} object regardless of filename.
211
+ *
212
+ * Basename detection uses {@link ../lib/tokens/constants#THEME_BASENAME_PATTERN}.
213
+ *
214
+ * @defaultValue true
215
+ */
216
+ splitThemes?: boolean;
217
+ }
218
+ interface UserConfig extends Options {
219
+ name?: string;
220
+ title?: string;
221
+ version?: string;
222
+ description?: string;
223
+ author?: string;
224
+ license?: string;
225
+ repository?: string;
226
+ homepage?: string;
227
+ tags?: string[];
228
+ tokens?: Tokens | Record<string, Tokens>;
229
+ components?: Components;
230
+ plugins?: Plugin[];
231
+ }
232
+ interface UserConfigParams {
233
+ cwd: string;
234
+ mode: string;
235
+ }
236
+ type UserConfigFnObject = (config: UserConfig) => UserConfig;
237
+ type UserConfigFnPromise = (params: UserConfigParams) => Promise<UserConfig | UserConfig[]>;
238
+ type UserConfigFn = (params: UserConfigParams) => UserConfig | UserConfig[] | Promise<UserConfig | UserConfig[]>;
239
+ type UserConfigExport = UserConfig | UserConfig[] | Promise<UserConfig | UserConfig[]> | UserConfigFnObject | UserConfigFnPromise | UserConfigFn;
240
+ type Config = RequiredKeys<UserConfig, "componentsPath" | "plugins"> & {
241
+ cwd: string;
242
+ envPaths: EnvPaths & {
243
+ home: string;
244
+ };
245
+ };
246
+ //#endregion
247
+ //#region src/plugin.d.ts
248
+ /**
249
+ * Type helper for Razorwind plugins (Style Dictionary hooks + `extract` / `validate` / `generate`).
250
+ *
251
+ * @see https://styledictionary.com/reference/api/
252
+ *
253
+ * @example
254
+ * ```ts
255
+ * import { definePlugin } from "@razorwind/core";
256
+ *
257
+ * // As a plugin
258
+ * export default definePlugin({
259
+ * name: "my-plugin",
260
+ * transforms: [{ name: "size/px", type: "value", transform: (t) => t }],
261
+ * extract: async (spec) => {
262
+ * ...
263
+ * },
264
+ * validate: async () => {
265
+ * ...
266
+ * },
267
+ * generate: async () => {
268
+ * ...
269
+ * }
270
+ * });
271
+ *
272
+ * // As a plugin factory
273
+ * export default definePlugin((options) => ({
274
+ * name: "my-plugin",
275
+ * extract: async (spec) => {
276
+ * ...
277
+ * },
278
+ * validate: async () => {
279
+ * ...
280
+ * },
281
+ * generate: async () => {
282
+ * ...
283
+ * }
284
+ * }));
285
+ * ```
286
+ */
287
+ declare function definePlugin(factory: (options?: any) => Plugin): (options?: any) => Plugin;
288
+ declare function definePlugin(plugin: Plugin): Plugin;
289
+ //#endregion
290
+ export { TokensTransform as _, UserConfigExport as a, UserConfigFnPromise as c, TokensAction as d, TokensFileHeader as f, TokensPreprocessor as g, TokensParser as h, UserConfig as i, UserConfigParams as l, TokensFormat as m, Config as n, UserConfigFn as o, TokensFilter as p, Options as r, UserConfigFnObject as s, definePlugin as t, Plugin as u, TokensTransformGroup as v };
291
+ //# sourceMappingURL=plugin-CUtxHXKj.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-CUtxHXKj.d.cts","names":[],"sources":["../src/types/plugin.ts","../src/types/config.ts","../src/plugin.ts"],"mappings":";;;;;;;;;;;;;UAqCiB;EACf;EACA,SAAS;EACT,SAAS,qBAAqB;;;;;;;KAQpB;EAEN;EACA,eAAe,YAAY,uBAAuB;MAElD,YAAY,uBAAuB;;;;;;KAO7B,kBAAkB,KAAK;EAAuB;;;;;;;UAOzC;EACf;EACA;;;;;;;KAQU,eAAe,KAAK;EAAoB;;;;;;;KAOxC,gBACT,KAAK;EAAoB;KAAmB;;;;;;KAOnC;EAEN;EACA,YAAY;IAEd;;;;;;KAOQ,eAAe,KAAK;EAAoB;;;;;;;UAOnC;;;;;;;EAOf;;;;;;EAOA,UAAU;;;;;;EAOV,gBAAgB;;;;;;EAOhB,aAAa;;;;;;EAOb,kBAAkB;;;;;;EAOlB,UAAU;;;;;;EAOV,UAAU;;;;;;EAOV,cAAc;;;;;;EAOd,UAAU;;;;;;;;EASV,WAAW,MAAM,QAAQ,QAAQ,WAAW,aAAa;;;;;;;;EASzD,YACE,MAAM,QACN,QAAQ,WACL,aAAa,eAAe;;;;;;;;EASjC,YAAY,MAAM,QAAQ,QAAQ,WAAW;;;;UCpL9B;;;;;;EAMf;;;;EAKA;;;;;;;;EASA;;;;;;EAOA;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BA;;UAGe,mBAAmB;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,SAAS,eAAe;EACjC,aAAa;EACb,UAAU;;UAGK;EACf;EACA;;KAGU,sBAAsB,QAAQ,eAAe;KAC7C,uBACV,QAAQ,qBACL,QAAQ,aAAa;KACd,gBACV,QAAQ,qBACL,aAAa,eAAe,QAAQ,aAAa;KAC1C,mBACR,aACA,eACA,QAAQ,aAAa,gBACrB,qBACA,sBACA;KAEQ,SAAS,aAAa;EAChC;EACA,UAAU;IACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBC1DY,aACd,UAAU,kBAAkB,UAC1B,kBAAkB;iBACN,aAAa,QAAQ,SAAS"}