@razorwind/core 0.0.13 → 0.0.14

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 C=require("smol-toml"),re=require("yaml");var ie=`0.0.13`;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 m.componentsPath=(0,f.isSetString)(m.componentsPath)?(0,h.findFilePath)(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)){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=k;
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 C=require("smol-toml"),re=require("yaml");var ie=`0.0.14`;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 m.componentsPath=(0,f.isSetString)(m.componentsPath)?(0,h.findFilePath)(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)){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=k;
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 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.13`;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):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)){let i=await r.generate(e,t.options);n=u(i,n)}return n}});export{et as defineConfig,i as definePlugin,tt as generator,M 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 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.14`;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):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)){let i=await r.generate(e,t.options);n=u(i,n)}return n}});export{et as defineConfig,i as definePlugin,tt as generator,M 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.13",
3
+ "version": "0.0.14",
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"],
@@ -132,5 +132,5 @@
132
132
  "typescript": "^6.0.3"
133
133
  },
134
134
  "publishConfig": { "access": "public" },
135
- "gitHead": "c8809ed75332698630354cdd342daae6a4535193"
135
+ "gitHead": "739f57ad461ee2890161452eed7c19dc70307d36"
136
136
  }