@razorwind/core 0.0.15 → 0.0.16

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/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./schema-qGVCMtQR.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 re=require("smol-toml"),ie=require("yaml");var ae=`0.0.15`;const oe=e.r.partial(),C=(0,a.createDefu)((e,t,n)=>Array.isArray(n)?(e[t]=n,!0):!1);function se(e,t){return(0,m.isAbsolute)(t)?t:(0,m.resolve)(e,t)}function ce(e){return Array.isArray(e)?e.filter(f.isSetString):(0,f.isSetString)(e)?[e]:[]}function le(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 w(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 T(e){if(!(0,d.isSetObject)(e))return;let t=oe.safeParse(e);if(t.success)return Object.keys(t.data).length>0?t.data:void 0}function E(e){return(0,d.isSetObject)(e)&&`path`in e}async function ue(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=le(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;E(a)?c=w(a):(0,d.isSetObject)(a)&&(o=T(a),`files`in a&&(c=w(a.files)));let p=C(o??{},r);return c?.length&&(p.files=c),Object.keys(p).length>0?p:void 0}async function de(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(E(n)||Array.isArray(n)){let e=w(n);if(e)return{files:e}}return T(n)}async function fe(t){let n=await ue(t),r=await de(t);if(!n&&!r)return;let i=C(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 pe(e){let t={},n=ce(e.options.componentsPath);for(let r of n){let n=se(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 fe((0,u.joinPaths)(n,r.name));e&&(t[e.name]=e)}}catch{continue}}return t}const D=b.default.homedir();async function O(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:D,name:`razorwind`,envName:t.mode,dotenv:!0,jitiOptions:i})]),m=(0,a.defu)({cwd:e,envPaths:{...r,home:D}},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 m.componentsPath=(0,f.isSetString)(m.componentsPath)?(0,h.findFilePath)(m.componentsPath):e;return Array.isArray(m.plugins)||(m.plugins=[]),m}const me=[`razorwind-json`,`razorwind-yaml`,`razorwind-toml`,`razorwind-css`],k=[`json`,`json5`,`jsonc`,`yaml`,`yml`,`toml`,`css`,`js`,`mjs`,`cjs`,`ts`,`mts`,`cts`],he=k.join(`,`),ge=[`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`],_e=`**/*.{${he}}`,ve=/^(light|dark|dim|dimmed|high-contrast|hc|default|base|theme)([._-].+)?$/i,ye={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`},be=/^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,A=/^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,j=/^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,M=/^oklch\(\s*([+\d.]+%?|none)\s+([+\d.]+|none)\s+([+\d.]+|none)(?:\s*\/\s*([+\d.]+%?))?\s*\)$/i,N=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(px|rem|em|%|vh|vw|vmin|vmax|ch|ex|cm|mm|in|pt|pc)$/i,xe=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(ms|s)$/i,Se=/^cubic-bezier\(\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*\)$/i,Ce=/^var\(\s*(--[\w-]+)\s*(?:,\s*(?:\S.*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))?\)\s*$/i,we=/^\{[^{}]+\}$/,Te={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},P=new Set([`px`,`rem`]);function F(e){return Math.min(1,Math.max(0,e))}function I(e,t=100){let n=e.trim();if(n.endsWith(`%`))return F(Number.parseFloat(n)/t);let r=Number.parseFloat(n);return F(r>1?r/255:r)}function Ee(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 De(e){let t=Ee(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 Oe(e){return`{${e.replace(/^--/,``).split(`-`).filter(Boolean).join(`.`)}}`}function L(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function R(e){for(let t=e.length-1;t>=0;t--){let n=e[t]?.toLowerCase();if(!n)continue;let r=ye[n];if(r)return r}}function z(e,n=[]){let r=R(n);if(typeof e==`string`){let t=e.trim();if(we.test(t))return{value:t,type:r};let i=t.match(Ce);if(i?.[1])return{value:Oe(i[1]),type:r};if(be.test(t))return{value:De(t),type:`color`};let a=t.match(A);if(a){let e=[I(a[1]),I(a[2]),I(a[3])],t=a[4]?a[4].endsWith(`%`)?F(Number.parseFloat(a[4])/100):F(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(j);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(`%`)?F(Number.parseFloat(o[4])/100):F(Number.parseFloat(o[4]))}:{}},type:`color`};let s=t.match(M);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(`%`)?F(Number.parseFloat(s[4])/100):F(Number.parseFloat(s[4]))}:{}},type:`color`}}let c=t.match(N);if(c){let e=c[2].toLowerCase(),n=Number.parseFloat(c[1]);return P.has(e)?{value:{value:n,unit:e},type:`dimension`}:{value:t,type:r===`dimension`?void 0:r}}let l=t.match(xe);if(l)return{value:{value:Number.parseFloat(l[1]),unit:l[2].toLowerCase()},type:`duration`};let u=t.match(Se);if(u)return{value:[Number.parseFloat(u[1]),Number.parseFloat(u[2]),Number.parseFloat(u[3]),Number.parseFloat(u[4])],type:`cubicBezier`};let d=Te[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`}:P.has(t)?{value:e,type:`dimension`}:{value:e,type:r}}}return{value:e,type:r}}function ke(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=z(n.$value,t);n.$value=e.value,!(`$type`in n)&&e.type&&(n.$type=e.type)}return n}function B(e,n=[]){if(Array.isArray(e))return e.map((e,t)=>B(e,[...n,String(t)]));if(!t.isObject(e))return e;if(L(e))return ke(e,n);let r={};for(let[t,i]of Object.entries(e)){if(t.startsWith(`$`)){r[t]=i;continue}r[t]=B(i,[...n,t])}if(!(`$type`in r)){let e=R(n);e&&n.length>0&&(r.$type=e)}return r}function Ae(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)?L(i)&&(a[r]={DEFAULT:i}):a[r]={},a=a[r]}let o=e.at(-1),s=z(i,e),c={$value:s.value,...s.type?{$type:s.type}:{}},l=a[o];t.isObject(l)&&!L(l)?l.DEFAULT=c:a[o]=c}return B(n)}const je=/(--[A-Z_][\w-]*)\s*:\s*([^;}{]+?)(?=\s*(?:;|\}|$))/gi;function V(e){let t={},n=e.replace(/\/\*[\s\S]*?\*\//g,``);for(let e of n.matchAll(je)){let n=e[1],r=e[2]?.trim();!n||!r||(t[n]=r)}return Ae(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 B(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,ie.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,re.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})=>B(V(e))}];function Fe(){return Object.fromEntries(W.map(({name:e,pattern:t,parser:n})=>[e,{pattern:t,parser:n}]))}function G(e){return B(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;for(let i of e){for(let e of i.parsers??[])t.registerParser({name:e.name??`${i.name}-parser-${n}`,pattern:e.pattern,parser:({contents:t})=>e.parser(t)}),n++;for(let e of i.preprocessors??[])t.registerPreprocessor((0,_.isFunction)(e)?{name:`${i.name}-preprocessor-${r}`,preprocessor:e}:{name:e.name??`${i.name}-preprocessor-${r}`,preprocessor:e.preprocessor}),r++}}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 k.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,_e)}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 ge){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(ve)?.[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:[...me,...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:ae,tags:[`razorwind`,`dtcg`]},schema:(0,r.defineSchema)({schema:e.t}),input:async e=>{let t=(0,r.useExecution)();if(t.options=await O(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 pe(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)){let i=await r.generate(e,t.options);n=(0,a.defu)(i,n)}return n}});exports.defineConfig=qe,exports.definePlugin=n.definePlugin,exports.generator=Je,exports.resolveConfig=O;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./schema-qGVCMtQR.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 re=require("smol-toml"),ie=require("yaml");var ae=`0.0.16`;const oe=e.r.partial(),C=(0,a.createDefu)((e,t,n)=>Array.isArray(n)?(e[t]=n,!0):!1);function se(e,t){return(0,m.isAbsolute)(t)?t:(0,m.resolve)(e,t)}function ce(e){return Array.isArray(e)?e.filter(f.isSetString):(0,f.isSetString)(e)?[e]:[]}function le(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 w(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 T(e){if(!(0,d.isSetObject)(e))return;let t=oe.safeParse(e);if(t.success)return Object.keys(t.data).length>0?t.data:void 0}function E(e){return(0,d.isSetObject)(e)&&`path`in e}async function ue(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=le(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;E(a)?c=w(a):(0,d.isSetObject)(a)&&(o=T(a),`files`in a&&(c=w(a.files)));let p=C(o??{},r);return c?.length&&(p.files=c),Object.keys(p).length>0?p:void 0}async function de(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(E(n)||Array.isArray(n)){let e=w(n);if(e)return{files:e}}return T(n)}async function fe(t){let n=await ue(t),r=await de(t);if(!n&&!r)return;let i=C(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 pe(e){let t={},n=ce(e.options.componentsPath);for(let r of n){let n=se(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 fe((0,u.joinPaths)(n,r.name));e&&(t[e.name]=e)}}catch{continue}}return t}const D=b.default.homedir();async function O(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:D,name:`razorwind`,envName:t.mode,dotenv:!0,jitiOptions:i})]),m=(0,a.defu)({cwd:e,envPaths:{...r,home:D}},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 m.componentsPath=(0,f.isSetString)(m.componentsPath)?(0,h.findFilePath)(m.componentsPath):e;return Array.isArray(m.plugins)||(m.plugins=[]),m}const me=[`razorwind-json`,`razorwind-yaml`,`razorwind-toml`,`razorwind-css`],k=[`json`,`json5`,`jsonc`,`yaml`,`yml`,`toml`,`css`,`js`,`mjs`,`cjs`,`ts`,`mts`,`cts`],he=k.join(`,`),ge=[`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`],_e=`**/*.{${he}}`,ve=/^(light|dark|dim|dimmed|high-contrast|hc|default|base|theme)([._-].+)?$/i,ye={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`},be=/^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,A=/^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,j=/^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,M=/^oklch\(\s*([+\d.]+%?|none)\s+([+\d.]+|none)\s+([+\d.]+|none)(?:\s*\/\s*([+\d.]+%?))?\s*\)$/i,N=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(px|rem|em|%|vh|vw|vmin|vmax|ch|ex|cm|mm|in|pt|pc)$/i,xe=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(ms|s)$/i,Se=/^cubic-bezier\(\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*\)$/i,Ce=/^var\(\s*(--[\w-]+)\s*(?:,\s*(?:\S.*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))?\)\s*$/i,we=/^\{[^{}]+\}$/,Te={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},P=new Set([`px`,`rem`]);function F(e){return Math.min(1,Math.max(0,e))}function I(e,t=100){let n=e.trim();if(n.endsWith(`%`))return F(Number.parseFloat(n)/t);let r=Number.parseFloat(n);return F(r>1?r/255:r)}function Ee(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 De(e){let t=Ee(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 Oe(e){return`{${e.replace(/^--/,``).split(`-`).filter(Boolean).join(`.`)}}`}function L(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function R(e){for(let t=e.length-1;t>=0;t--){let n=e[t]?.toLowerCase();if(!n)continue;let r=ye[n];if(r)return r}}function z(e,n=[]){let r=R(n);if(typeof e==`string`){let t=e.trim();if(we.test(t))return{value:t,type:r};let i=t.match(Ce);if(i?.[1])return{value:Oe(i[1]),type:r};if(be.test(t))return{value:De(t),type:`color`};let a=t.match(A);if(a){let e=[I(a[1]),I(a[2]),I(a[3])],t=a[4]?a[4].endsWith(`%`)?F(Number.parseFloat(a[4])/100):F(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(j);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(`%`)?F(Number.parseFloat(o[4])/100):F(Number.parseFloat(o[4]))}:{}},type:`color`};let s=t.match(M);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(`%`)?F(Number.parseFloat(s[4])/100):F(Number.parseFloat(s[4]))}:{}},type:`color`}}let c=t.match(N);if(c){let e=c[2].toLowerCase(),n=Number.parseFloat(c[1]);return P.has(e)?{value:{value:n,unit:e},type:`dimension`}:{value:t,type:r===`dimension`?void 0:r}}let l=t.match(xe);if(l)return{value:{value:Number.parseFloat(l[1]),unit:l[2].toLowerCase()},type:`duration`};let u=t.match(Se);if(u)return{value:[Number.parseFloat(u[1]),Number.parseFloat(u[2]),Number.parseFloat(u[3]),Number.parseFloat(u[4])],type:`cubicBezier`};let d=Te[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`}:P.has(t)?{value:e,type:`dimension`}:{value:e,type:r}}}return{value:e,type:r}}function ke(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=z(n.$value,t);n.$value=e.value,!(`$type`in n)&&e.type&&(n.$type=e.type)}return n}function B(e,n=[]){if(Array.isArray(e))return e.map((e,t)=>B(e,[...n,String(t)]));if(!t.isObject(e))return e;if(L(e))return ke(e,n);let r={};for(let[t,i]of Object.entries(e)){if(t.startsWith(`$`)){r[t]=i;continue}r[t]=B(i,[...n,t])}if(!(`$type`in r)){let e=R(n);e&&n.length>0&&(r.$type=e)}return r}function Ae(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)?L(i)&&(a[r]={DEFAULT:i}):a[r]={},a=a[r]}let o=e.at(-1),s=z(i,e),c={$value:s.value,...s.type?{$type:s.type}:{}},l=a[o];t.isObject(l)&&!L(l)?l.DEFAULT=c:a[o]=c}return B(n)}const je=/(--[A-Z_][\w-]*)\s*:\s*([^;}{]+?)(?=\s*(?:;|\}|$))/gi;function V(e){let t={},n=e.replace(/\/\*[\s\S]*?\*\//g,``);for(let e of n.matchAll(je)){let n=e[1],r=e[2]?.trim();!n||!r||(t[n]=r)}return Ae(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 B(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,ie.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,re.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})=>B(V(e))}];function Fe(){return Object.fromEntries(W.map(({name:e,pattern:t,parser:n})=>[e,{pattern:t,parser:n}]))}function G(e){return B(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;for(let i of e){for(let e of i.parsers??[])t.registerParser({name:e.name??`${i.name}-parser-${n}`,pattern:e.pattern,parser:({contents:t})=>e.parser(t)}),n++;for(let e of i.preprocessors??[])t.registerPreprocessor((0,_.isFunction)(e)?{name:`${i.name}-preprocessor-${r}`,preprocessor:e}:{name:e.name??`${i.name}-preprocessor-${r}`,preprocessor:e.preprocessor}),r++}}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 k.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,_e)}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 ge){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(ve)?.[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:[...me,...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:ae,tags:[`razorwind`,`dtcg`]},schema:(0,r.defineSchema)({schema:e.t}),input:async e=>{let t=(0,r.useExecution)();if(t.options=await O(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 pe(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)){let i=await r.generate(e,t.options);n=(0,a.defu)(i,n)}return n}});exports.defineConfig=qe,exports.definePlugin=n.definePlugin,exports.generator=Je,exports.resolveConfig=O;
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
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 re from"node:os";import{importModule as ie}from"@stryke/fs/resolve";import ae from"fast-glob";import oe from"json5";import{parse as se}from"smol-toml";import{parse as ce}from"yaml";var le=`0.0.15`;const ue=e.partial(),E=l((e,t,n)=>Array.isArray(n)?(e[t]=n,!0):!1);function de(e,t){return y(t)?t:b(e,t)}function fe(e){return Array.isArray(e)?e.filter(_):_(e)?[e]:[]}function pe(e){if(_(e))return e;if(g(e)&&`url`in e&&_(e.url))return e.url}function D(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 O(e){if(!g(e))return;let t=ue.safeParse(e);if(t.success)return Object.keys(t.data).length>0?t.data:void 0}function k(e){return g(e)&&`path`in e}async function me(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=pe(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;k(a)?s=D(a):g(a)&&(o=O(a),`files`in a&&(s=D(a.files)));let c=E(o??{},r);return s?.length&&(c.files=s),Object.keys(c).length>0?c:void 0}async function he(e){let t=h(e,`component.json`);if(!f(t))return;let n;try{n=await m(t)}catch{return}if(k(n)||Array.isArray(n)){let e=D(n);if(e)return{files:e}}return O(n)}async function ge(t){let n=await me(t),r=await he(t);if(!n&&!r)return;let i=E(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 _e(e){let t={},n=fe(e.options.componentsPath);for(let r of n){let n=de(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 ge(h(n,r.name));e&&(t[e.name]=e)}}catch{continue}}return t}const A=re.homedir();async function j(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:A,name:`razorwind`,envName:t.mode,dotenv:!0,jitiOptions:i})]),d=u({cwd:e,envPaths:{...r,home:A}},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):e;return Array.isArray(d.plugins)||(d.plugins=[]),d}const ve=[`razorwind-json`,`razorwind-yaml`,`razorwind-toml`,`razorwind-css`],M=[`json`,`json5`,`jsonc`,`yaml`,`yml`,`toml`,`css`,`js`,`mjs`,`cjs`,`ts`,`mts`,`cts`],ye=M.join(`,`),be=[`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`],N=`**/*.{${ye}}`,xe=/^(light|dark|dim|dimmed|high-contrast|hc|default|base|theme)([._-].+)?$/i,Se={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`},Ce=/^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,we=/^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,Te=/^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,Ee=/^oklch\(\s*([+\d.]+%?|none)\s+([+\d.]+|none)\s+([+\d.]+|none)(?:\s*\/\s*([+\d.]+%?))?\s*\)$/i,De=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(px|rem|em|%|vh|vw|vmin|vmax|ch|ex|cm|mm|in|pt|pc)$/i,Oe=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(ms|s)$/i,ke=/^cubic-bezier\(\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*\)$/i,Ae=/^var\(\s*(--[\w-]+)\s*(?:,\s*(?:\S.*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))?\)\s*$/i,je=/^\{[^{}]+\}$/,Me={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},P=new Set([`px`,`rem`]);function F(e){return Math.min(1,Math.max(0,e))}function I(e,t=100){let n=e.trim();if(n.endsWith(`%`))return F(Number.parseFloat(n)/t);let r=Number.parseFloat(n);return F(r>1?r/255:r)}function Ne(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 Pe(e){let t=Ne(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 Fe(e){return`{${e.replace(/^--/,``).split(`-`).filter(Boolean).join(`.`)}}`}function L(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function R(e){for(let t=e.length-1;t>=0;t--){let n=e[t]?.toLowerCase();if(!n)continue;let r=Se[n];if(r)return r}}function z(e,t=[]){let n=R(t);if(typeof e==`string`){let r=e.trim();if(je.test(r))return{value:r,type:n};let i=r.match(Ae);if(i?.[1])return{value:Fe(i[1]),type:n};if(Ce.test(r))return{value:Pe(r),type:`color`};let a=r.match(we);if(a){let e=[I(a[1]),I(a[2]),I(a[3])],t=a[4]?a[4].endsWith(`%`)?F(Number.parseFloat(a[4])/100):F(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(Te);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(`%`)?F(Number.parseFloat(o[4])/100):F(Number.parseFloat(o[4]))}:{}},type:`color`};let s=r.match(Ee);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(`%`)?F(Number.parseFloat(s[4])/100):F(Number.parseFloat(s[4]))}:{}},type:`color`}}let c=r.match(De);if(c){let e=c[2].toLowerCase(),t=Number.parseFloat(c[1]);return P.has(e)?{value:{value:t,unit:e},type:`dimension`}:{value:r,type:n===`dimension`?void 0:n}}let l=r.match(Oe);if(l)return{value:{value:Number.parseFloat(l[1]),unit:l[2].toLowerCase()},type:`duration`};let u=r.match(ke);if(u)return{value:[Number.parseFloat(u[1]),Number.parseFloat(u[2]),Number.parseFloat(u[3]),Number.parseFloat(u[4])],type:`cubicBezier`};let d=Me[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`}:P.has(t)?{value:e,type:`dimension`}:{value:e,type:n}}}return{value:e,type:n}}function B(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=z(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(L(e))return B(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=R(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)?L(i)&&(a[n]={DEFAULT:i}):a[n]={},a=a[n]}let o=e.at(-1),s=z(i,e),c={$value:s.value,...s.type?{$type:s.type}:{}},l=a[o];r(l)&&!L(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(oe.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(ce(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(se(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;for(let i of e){for(let e of i.parsers??[])t.registerParser({name:e.name??`${i.name}-parser-${n}`,pattern:e.pattern,parser:({contents:t})=>e.parser(t)}),n++;for(let e of i.preprocessors??[])t.registerPreprocessor(C(e)?{name:`${i.name}-preprocessor-${r}`,preprocessor:e}:{name:e.name??`${i.name}-preprocessor-${r}`,preprocessor:e.preprocessor}),r++}}function q(e,t){return y(t)?t:b(e,t)}function J(e){return/\.([^.]+)$/.exec(e)?.[1]?.toLowerCase()??``}function Y(e){return M.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,N)}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 be){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(xe)?.[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 ie(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:[...ve,...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 ae(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:le,tags:[`razorwind`,`dtcg`]},schema:o({schema:n}),input:async e=>{let t=s();if(t.options=await j(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 _e(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)){let i=await r.generate(e,t.options);n=u(i,n)}return n}});export{et as defineConfig,i as definePlugin,tt as generator,j as resolveConfig};
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 re from"node:os";import{importModule as ie}from"@stryke/fs/resolve";import ae from"fast-glob";import oe from"json5";import{parse as se}from"smol-toml";import{parse as ce}from"yaml";var le=`0.0.16`;const ue=e.partial(),E=l((e,t,n)=>Array.isArray(n)?(e[t]=n,!0):!1);function de(e,t){return y(t)?t:b(e,t)}function fe(e){return Array.isArray(e)?e.filter(_):_(e)?[e]:[]}function pe(e){if(_(e))return e;if(g(e)&&`url`in e&&_(e.url))return e.url}function D(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 O(e){if(!g(e))return;let t=ue.safeParse(e);if(t.success)return Object.keys(t.data).length>0?t.data:void 0}function k(e){return g(e)&&`path`in e}async function me(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=pe(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;k(a)?s=D(a):g(a)&&(o=O(a),`files`in a&&(s=D(a.files)));let c=E(o??{},r);return s?.length&&(c.files=s),Object.keys(c).length>0?c:void 0}async function he(e){let t=h(e,`component.json`);if(!f(t))return;let n;try{n=await m(t)}catch{return}if(k(n)||Array.isArray(n)){let e=D(n);if(e)return{files:e}}return O(n)}async function ge(t){let n=await me(t),r=await he(t);if(!n&&!r)return;let i=E(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 _e(e){let t={},n=fe(e.options.componentsPath);for(let r of n){let n=de(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 ge(h(n,r.name));e&&(t[e.name]=e)}}catch{continue}}return t}const A=re.homedir();async function j(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:A,name:`razorwind`,envName:t.mode,dotenv:!0,jitiOptions:i})]),d=u({cwd:e,envPaths:{...r,home:A}},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):e;return Array.isArray(d.plugins)||(d.plugins=[]),d}const ve=[`razorwind-json`,`razorwind-yaml`,`razorwind-toml`,`razorwind-css`],M=[`json`,`json5`,`jsonc`,`yaml`,`yml`,`toml`,`css`,`js`,`mjs`,`cjs`,`ts`,`mts`,`cts`],ye=M.join(`,`),be=[`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`],N=`**/*.{${ye}}`,xe=/^(light|dark|dim|dimmed|high-contrast|hc|default|base|theme)([._-].+)?$/i,Se={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`},Ce=/^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,we=/^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,Te=/^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,Ee=/^oklch\(\s*([+\d.]+%?|none)\s+([+\d.]+|none)\s+([+\d.]+|none)(?:\s*\/\s*([+\d.]+%?))?\s*\)$/i,De=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(px|rem|em|%|vh|vw|vmin|vmax|ch|ex|cm|mm|in|pt|pc)$/i,Oe=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(ms|s)$/i,ke=/^cubic-bezier\(\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*\)$/i,Ae=/^var\(\s*(--[\w-]+)\s*(?:,\s*(?:\S.*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))?\)\s*$/i,je=/^\{[^{}]+\}$/,Me={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},P=new Set([`px`,`rem`]);function F(e){return Math.min(1,Math.max(0,e))}function I(e,t=100){let n=e.trim();if(n.endsWith(`%`))return F(Number.parseFloat(n)/t);let r=Number.parseFloat(n);return F(r>1?r/255:r)}function Ne(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 Pe(e){let t=Ne(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 Fe(e){return`{${e.replace(/^--/,``).split(`-`).filter(Boolean).join(`.`)}}`}function L(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function R(e){for(let t=e.length-1;t>=0;t--){let n=e[t]?.toLowerCase();if(!n)continue;let r=Se[n];if(r)return r}}function z(e,t=[]){let n=R(t);if(typeof e==`string`){let r=e.trim();if(je.test(r))return{value:r,type:n};let i=r.match(Ae);if(i?.[1])return{value:Fe(i[1]),type:n};if(Ce.test(r))return{value:Pe(r),type:`color`};let a=r.match(we);if(a){let e=[I(a[1]),I(a[2]),I(a[3])],t=a[4]?a[4].endsWith(`%`)?F(Number.parseFloat(a[4])/100):F(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(Te);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(`%`)?F(Number.parseFloat(o[4])/100):F(Number.parseFloat(o[4]))}:{}},type:`color`};let s=r.match(Ee);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(`%`)?F(Number.parseFloat(s[4])/100):F(Number.parseFloat(s[4]))}:{}},type:`color`}}let c=r.match(De);if(c){let e=c[2].toLowerCase(),t=Number.parseFloat(c[1]);return P.has(e)?{value:{value:t,unit:e},type:`dimension`}:{value:r,type:n===`dimension`?void 0:n}}let l=r.match(Oe);if(l)return{value:{value:Number.parseFloat(l[1]),unit:l[2].toLowerCase()},type:`duration`};let u=r.match(ke);if(u)return{value:[Number.parseFloat(u[1]),Number.parseFloat(u[2]),Number.parseFloat(u[3]),Number.parseFloat(u[4])],type:`cubicBezier`};let d=Me[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`}:P.has(t)?{value:e,type:`dimension`}:{value:e,type:n}}}return{value:e,type:n}}function B(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=z(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(L(e))return B(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=R(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)?L(i)&&(a[n]={DEFAULT:i}):a[n]={},a=a[n]}let o=e.at(-1),s=z(i,e),c={$value:s.value,...s.type?{$type:s.type}:{}},l=a[o];r(l)&&!L(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(oe.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(ce(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(se(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;for(let i of e){for(let e of i.parsers??[])t.registerParser({name:e.name??`${i.name}-parser-${n}`,pattern:e.pattern,parser:({contents:t})=>e.parser(t)}),n++;for(let e of i.preprocessors??[])t.registerPreprocessor(C(e)?{name:`${i.name}-preprocessor-${r}`,preprocessor:e}:{name:e.name??`${i.name}-preprocessor-${r}`,preprocessor:e.preprocessor}),r++}}function q(e,t){return y(t)?t:b(e,t)}function J(e){return/\.([^.]+)$/.exec(e)?.[1]?.toLowerCase()??``}function Y(e){return M.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,N)}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 be){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(xe)?.[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 ie(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:[...ve,...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 ae(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:le,tags:[`razorwind`,`dtcg`]},schema:o({schema:n}),input:async e=>{let t=s();if(t.options=await j(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 _e(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)){let i=await r.generate(e,t.options);n=u(i,n)}return n}});export{et as defineConfig,i as definePlugin,tt as generator,j as resolveConfig};
2
2
  //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@razorwind/core",
3
- "version": "0.0.15",
3
+ "version": "0.0.16",
4
4
  "private": false,
5
5
  "description": "💨 Razorwind is a unified set of tools that make creating design systems a breeze.",
6
6
  "keywords": ["razorwind", "storm-software"],
@@ -108,13 +108,13 @@
108
108
  "@power-plant/dtcg-schema": "^0.0.1",
109
109
  "@power-plant/schema": "^0.0.59",
110
110
  "@power-plant/utils": "^0.0.47",
111
- "@stryke/env": "^0.20.116",
112
- "@stryke/fs": "^0.33.99",
113
- "@stryke/path": "^0.29.25",
114
- "@stryke/string-format": "^0.17.40",
115
- "@stryke/type-checks": "^0.6.31",
116
- "@stryke/types": "^0.12.26",
117
- "@stryke/url": "^0.4.49",
111
+ "@stryke/env": "^0.20.117",
112
+ "@stryke/fs": "^0.33.100",
113
+ "@stryke/path": "^0.29.26",
114
+ "@stryke/string-format": "^0.17.41",
115
+ "@stryke/type-checks": "^0.6.32",
116
+ "@stryke/types": "^0.12.27",
117
+ "@stryke/url": "^0.4.50",
118
118
  "c12": "^3.3.4",
119
119
  "defu": "^6.1.7",
120
120
  "fast-glob": "^3.3.3",
@@ -126,10 +126,10 @@
126
126
  "zod": "^4.4.3"
127
127
  },
128
128
  "devDependencies": {
129
- "@powerlines/plugin-tsdown": "^0.1.579",
129
+ "@powerlines/plugin-tsdown": "^0.1.581",
130
130
  "@types/node": "^25.9.5",
131
131
  "typescript": "^6.0.3"
132
132
  },
133
133
  "publishConfig": { "access": "public" },
134
- "gitHead": "8960f1088d32b211c798cb1bf9c24ba605d677fc"
134
+ "gitHead": "6055ce9d20a4488ee965a471c76c51380e2e85af"
135
135
  }