@razorwind/core 0.0.16 → 0.0.18

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.
@@ -165,51 +165,5 @@ type Config = RequiredKeys<UserConfig, "componentsPath" | "plugins"> & {
165
165
  };
166
166
  };
167
167
  //#endregion
168
- //#region src/plugin.d.ts
169
- /**
170
- * Type helper for Razorwind plugins (`parsers` / `preprocessors` + `extract` / `validate` / `generate`).
171
- *
172
- * Platform generation (`platforms`, transforms, formats, …) belongs on
173
- * `@razorwind/style-dictionary` plugin options — not on this interface.
174
- *
175
- * @see https://styledictionary.com/reference/api/
176
- *
177
- * @example
178
- * ```ts
179
- * import { definePlugin } from "@razorwind/core";
180
- *
181
- * // As a plugin
182
- * export default definePlugin({
183
- * name: "my-plugin",
184
- * parsers: [{ pattern: /\.foo$/, parser: contents => JSON.parse(contents) }],
185
- * extract: async (spec) => {
186
- * ...
187
- * },
188
- * validate: async () => {
189
- * ...
190
- * },
191
- * generate: async () => {
192
- * ...
193
- * }
194
- * });
195
- *
196
- * // As a plugin factory
197
- * export default definePlugin((options) => ({
198
- * name: "my-plugin",
199
- * extract: async (spec) => {
200
- * ...
201
- * },
202
- * validate: async () => {
203
- * ...
204
- * },
205
- * generate: async () => {
206
- * ...
207
- * }
208
- * }));
209
- * ```
210
- */
211
- declare function definePlugin(factory: (options?: any) => Plugin): (options?: any) => Plugin;
212
- declare function definePlugin(plugin: Plugin): Plugin;
213
- //#endregion
214
- export { UserConfigExport as a, UserConfigFnPromise as c, TokensParser as d, TokensPreprocessor as f, UserConfig as i, UserConfigParams as l, Config as n, UserConfigFn as o, Options as r, UserConfigFnObject as s, definePlugin as t, Plugin as u };
215
- //# sourceMappingURL=plugin-B1R5dPEv.d.mts.map
168
+ export { UserConfigFn as a, UserConfigParams as c, TokensPreprocessor as d, UserConfigExport as i, Plugin as l, Options as n, UserConfigFnObject as o, UserConfig as r, UserConfigFnPromise as s, Config as t, TokensParser as u };
169
+ //# sourceMappingURL=config-BYknAq7g.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-BYknAq7g.d.mts","names":[],"sources":["../src/types/plugin.ts","../src/types/config.ts"],"mappings":""}
@@ -165,51 +165,5 @@ type Config = RequiredKeys<UserConfig, "componentsPath" | "plugins"> & {
165
165
  };
166
166
  };
167
167
  //#endregion
168
- //#region src/plugin.d.ts
169
- /**
170
- * Type helper for Razorwind plugins (`parsers` / `preprocessors` + `extract` / `validate` / `generate`).
171
- *
172
- * Platform generation (`platforms`, transforms, formats, …) belongs on
173
- * `@razorwind/style-dictionary` plugin options — not on this interface.
174
- *
175
- * @see https://styledictionary.com/reference/api/
176
- *
177
- * @example
178
- * ```ts
179
- * import { definePlugin } from "@razorwind/core";
180
- *
181
- * // As a plugin
182
- * export default definePlugin({
183
- * name: "my-plugin",
184
- * parsers: [{ pattern: /\.foo$/, parser: contents => JSON.parse(contents) }],
185
- * extract: async (spec) => {
186
- * ...
187
- * },
188
- * validate: async () => {
189
- * ...
190
- * },
191
- * generate: async () => {
192
- * ...
193
- * }
194
- * });
195
- *
196
- * // As a plugin factory
197
- * export default definePlugin((options) => ({
198
- * name: "my-plugin",
199
- * extract: async (spec) => {
200
- * ...
201
- * },
202
- * validate: async () => {
203
- * ...
204
- * },
205
- * generate: async () => {
206
- * ...
207
- * }
208
- * }));
209
- * ```
210
- */
211
- declare function definePlugin(factory: (options?: any) => Plugin): (options?: any) => Plugin;
212
- declare function definePlugin(plugin: Plugin): Plugin;
213
- //#endregion
214
- export { UserConfigExport as a, UserConfigFnPromise as c, TokensParser as d, TokensPreprocessor as f, UserConfig as i, UserConfigParams as l, Config as n, UserConfigFn as o, Options as r, UserConfigFnObject as s, definePlugin as t, Plugin as u };
215
- //# sourceMappingURL=plugin-CCSoeiLW.d.cts.map
168
+ export { UserConfigFn as a, UserConfigParams as c, TokensPreprocessor as d, UserConfigExport as i, Plugin as l, Options as n, UserConfigFnObject as o, UserConfig as r, UserConfigFnPromise as s, Config as t, TokensParser as u };
169
+ //# sourceMappingURL=config-niJpQJza.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-niJpQJza.d.cts","names":[],"sources":["../src/types/plugin.ts","../src/types/config.ts"],"mappings":";;;;;;;;;;;;;;;UAgCiB;EACf;EACA,SAAS;EACT,SAAS,qBAAqB;;;;;;;;;KAUpB;EAEN;EACA,eAAe,YAAY,uBAAuB;MAElD,YAAY,uBAAuB;;;;;;;;;UAUxB;;;;;;;EAOf;;;;;;EAOA,UAAU;;;;;;EAOV,gBAAgB;;;;;;;;EAShB,WAAW,MAAM,QAAQ,QAAQ,WAAW,aAAa;;;;;;;;EASzD,YACE,MAAM,QACN,QAAQ,WACL,aAAa,eAAe;;;;;;;;EASjC,YAAY,MAAM,QAAQ,QAAQ,WAAW;;;;UCvF9B;;;;;;EAMf;;;;EAKA;;;;;;;;EASA;;;;;;EAOA;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BA;;UAGe,mBAAmB;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,SAAS,eAAe;EACjC,aAAa;EACb,UAAU;;UAGK;EACf;EACA;;KAGU,sBAAsB,QAAQ,eAAe;KAC7C,uBACV,QAAQ,qBACL,QAAQ,aAAa;KACd,gBACV,QAAQ,qBACL,aAAa,eAAe,QAAQ,aAAa;KAC1C,mBACR,aACA,eACA,QAAQ,aAAa,gBACrB,qBACA,sBACA;KAEQ,SAAS,aAAa;EAChC;EACA,UAAU;IACR"}
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.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;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BocRIvOZ.cjs"),t=require("./schema-D7jRSrC_.cjs"),n=require("./tokens-IRvI2l2K.cjs"),r=require("./plugin.cjs");let i=require("@power-plant/core"),a=require("@stryke/type-checks/is-empty-object"),o=require("defu"),s=require("style-dictionary");s=e.t(s,1);let c=require("@stryke/fs/exists"),l=require("@stryke/fs/is-file"),u=require("@stryke/fs/json"),d=require("@stryke/path/join"),f=require("@stryke/type-checks/is-set-object"),p=require("@stryke/type-checks/is-set-string"),m=require("node:fs/promises"),h=require("node:path"),g=require("@stryke/env"),_=require("@stryke/path/find"),v=require("@stryke/path/replace"),y=require("@stryke/type-checks/is-function"),b=require("c12"),x=require("jiti"),S=require("node:fs"),C=require("node:os");C=e.t(C,1);var w=`0.0.18`;const T=t.r.partial(),E=(0,o.createDefu)((e,t,n)=>Array.isArray(n)?(e[t]=n,!0):!1);function D(e,t){return(0,h.isAbsolute)(t)?t:(0,h.resolve)(e,t)}function O(e){return Array.isArray(e)?e.filter(p.isSetString):(0,p.isSetString)(e)?[e]:[]}function k(e){if((0,p.isSetString)(e))return e;if((0,f.isSetObject)(e)&&`url`in e&&(0,p.isSetString)(e.url))return e.url}function A(e){if(!e)return;let n=t.n.safeParse(e);if(n.success)return[n.data];if(!Array.isArray(e))return;let r=[];for(let n of e){let e=t.n.safeParse(n);e.success&&r.push(e.data)}return r.length>0?r:void 0}function j(e){if(!(0,f.isSetObject)(e))return;let t=T.safeParse(e);if(t.success)return Object.keys(t.data).length>0?t.data:void 0}function M(e){return(0,f.isSetObject)(e)&&`path`in e}async function N(e){let t=(0,d.joinPaths)(e,`package.json`);if(!(0,c.existsSync)(t))return;let n;try{n=await(0,u.readJsonFile)(t)}catch{return}let r={};(0,p.isSetString)(n.name)&&(r.name=n.name,r.title=n.name),(0,p.isSetString)(n.description)&&(r.description=n.description),(0,p.isSetString)(n.version)&&(r.version=n.version),(0,p.isSetString)(n.homepage)&&(r.homepage=n.homepage);let i=k(n.repository);if(i&&(r.repository=i),(0,f.isSetObject)(n.dependencies)&&(r.dependencies=n.dependencies),(0,f.isSetObject)(n.devDependencies)&&(r.devDependencies=n.devDependencies),Array.isArray(n.keywords)){let e=n.keywords.filter(p.isSetString);e.length>0&&(r.tags=e)}let a=n.razorwind,o,s;M(a)?s=A(a):(0,f.isSetObject)(a)&&(o=j(a),`files`in a&&(s=A(a.files)));let l=E(o??{},r);return s?.length&&(l.files=s),Object.keys(l).length>0?l:void 0}async function P(e){let t=(0,d.joinPaths)(e,`component.json`);if(!(0,c.existsSync)(t))return;let n;try{n=await(0,u.readJsonFile)(t)}catch{return}if(M(n)||Array.isArray(n)){let e=A(n);if(e)return{files:e}}return j(n)}async function F(e){let n=await N(e),r=await P(e);if(!n&&!r)return;let i=E(r??{},n??{}),a=(0,h.basename)(e),o=(0,p.isSetString)(i.name)?i.name:a,s=(0,p.isSetString)(i.title)?i.title:o,c=t.r.safeParse({...i,name:o,title:s});return c.success?c.data:void 0}async function I(e){let t={},n=O(e.options.componentsPath);for(let r of n){let n=D(e.cwd,r);if(!(!(0,c.existsSync)(n)||!(0,l.isDirectory)(n)))try{let e=await(0,m.readdir)(n,{withFileTypes:!0});for(let r of e){if(!r.isDirectory()||r.name.startsWith(`.`))continue;let e=await F((0,d.joinPaths)(n,r.name));e&&(t[e.name]=e)}}catch{continue}}return t}const L=C.default.homedir();async function R(e,t){let n=t.configFile&&(0,S.existsSync)((0,v.replacePath)(t.configFile,e))?(0,v.replacePath)(t.configFile,e):t.configFile&&(0,S.existsSync)(t.configFile)?t.configFile:(0,S.existsSync)((0,d.joinPaths)(e,`razorwind.${t.mode}.config.ts`))?(0,d.joinPaths)(e,`razorwind.${t.mode}.config.ts`):(0,S.existsSync)((0,d.joinPaths)(e,`razorwind.${t.mode}.config.js`))?(0,d.joinPaths)(e,`razorwind.${t.mode}.config.js`):(0,S.existsSync)((0,d.joinPaths)(e,`razorwind.${t.mode}.config.mts`))?(0,d.joinPaths)(e,`razorwind.${t.mode}.config.mts`):(0,S.existsSync)((0,d.joinPaths)(e,`razorwind.${t.mode}.config.mjs`))?(0,d.joinPaths)(e,`razorwind.${t.mode}.config.mjs`):(0,S.existsSync)((0,d.joinPaths)(e,`razorwind.config.ts`))?(0,d.joinPaths)(e,`razorwind.config.ts`):(0,S.existsSync)((0,d.joinPaths)(e,`razorwind.config.js`))?(0,d.joinPaths)(e,`razorwind.config.js`):(0,S.existsSync)((0,d.joinPaths)(e,`razorwind.config.mts`))?(0,d.joinPaths)(e,`razorwind.config.mts`):(0,S.existsSync)((0,d.joinPaths)(e,`razorwind.config.mjs`))?(0,d.joinPaths)(e,`razorwind.config.mjs`):void 0,r=(0,g.getEnvPaths)({orgId:`storm-software`,appId:`razorwind`,workspaceRoot:e}),i={fsCache:r.cache},a=(0,x.createJiti)(e,i),s={};if(n){let r=await a.import(a.esmResolve(n));if(r?.default){let i={};(0,y.isFunction)(r.default)?i=await Promise.resolve(r.default({cwd:e,mode:t.mode??`development`})):((0,f.isSetObject)(r.default)||Array.isArray(r.default))&&(i=r.default),((0,f.isSetObject)(i)||Array.isArray(i))&&(s={...i,configFile:n})}}let[c,l,u]=await Promise.all([(0,b.loadConfig)({cwd:e,name:`razorwind`,envName:t.mode,globalRc:!0,packageJson:`razorwind`,dotenv:!0,jitiOptions:i}),(0,b.loadConfig)({cwd:r.config,name:`razorwind`,envName:t.mode,dotenv:!0,jitiOptions:i}),(0,b.loadConfig)({cwd:L,name:`razorwind`,envName:t.mode,dotenv:!0,jitiOptions:i})]),m=(0,o.defu)({cwd:e,envPaths:{...r,home:L}},t,s,(0,f.isSetObject)(c?.config)?{...c.config}:{},(0,f.isSetObject)(l?.config)?{...l.config}:{},(0,f.isSetObject)(u?.config)?{...u.config}:{},{componentsPath:e,plugins:[]});if(Array.isArray(m.componentsPath)){let t=m.componentsPath.filter(p.isSetString).map(e=>(0,_.findFilePath)(e));m.componentsPath=t.length>0?t:e}else m.componentsPath=(0,p.isSetString)(m.componentsPath)?(0,_.findFilePath)(m.componentsPath):e;return Array.isArray(m.plugins)||(m.plugins=[]),m}function z(e){return e}const B=(0,i.defineGenerator)({meta:{name:`razorwind`,title:`Razorwind`,description:`A generator that uses Razorwind to generate design system code from design tokens and components.`,version:w,tags:[`razorwind`,`dtcg`]},schema:(0,i.defineSchema)({schema:t.t}),input:async e=>{let t=(0,i.useExecution)();if(t.options=await R(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.`);n.l(t.options.plugins,s.default);let r=t.options.tokens;(!r||(0,a.isEmptyObject)(r))&&(r=await n.t(t));let c={tokens:r??{},components:(0,o.defu)(t.options.components??{},await I(t)??{})};for(let e of t.options.plugins.filter(e=>e.extract))c=await e.extract(c,t.options);if(!c.tokens||(0,a.isEmptyObject)(c.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(c,t.options);return c},generator:async e=>{let t=(0,i.useExecution)(),n={};for(let r of t.options.plugins.filter(e=>e.generate)){let i=await r.generate(e,t.options);n=(0,o.defu)(i,n)}return n}});exports.defineConfig=z,exports.definePlugin=r.definePlugin,exports.generator=B,exports.resolveConfig=R;
package/dist/index.d.cts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { t as Schema } from "./schema-BNfl9Tsw.cjs";
2
2
  import "./index-CjW7STaT.cjs";
3
- import { a as UserConfigExport, c as UserConfigFnPromise, d as TokensParser, f as TokensPreprocessor, i as UserConfig, l as UserConfigParams, n as Config, o as UserConfigFn, r as Options, s as UserConfigFnObject, t as definePlugin, u as Plugin } from "./plugin-CCSoeiLW.cjs";
3
+ import { a as UserConfigFn, c as UserConfigParams, d as TokensPreprocessor, i as UserConfigExport, l as Plugin, n as Options, o as UserConfigFnObject, r as UserConfig, s as UserConfigFnPromise, t as Config, u as TokensParser } from "./config-niJpQJza.cjs";
4
+ import { t as definePlugin } from "./plugin-CZz4yUV2.cjs";
4
5
  import StyleDictionary from "style-dictionary";
5
6
  import { GeneratorConfig } from "@power-plant/core";
6
7
  //#region src/lib/resolve-config.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/lib/resolve-config.ts","../src/config.ts","../src/types/base.ts","../src/index.ts"],"mappings":";;;;;;;;;;;;;iBA8CsB,cACpB,aACA,SAAS,UACR,QAAQ;;;;;;;;;;;;;;;;;;;;;;;iBCEK,aAAa,QAAQ,aAAa;iBAClC,aAAa,QAAQ,eAAe;iBACpC,aAAa,QAAQ,QAAQ,cAAc,QAAQ;iBACnD,aACd,QAAQ,QAAQ,gBACf,QAAQ;iBACK,aAAa,QAAQ,qBAAqB;iBAC1C,aAAa,QAAQ,sBAAsB;iBAC3C,aAAa,QAAQ,eAAe;iBACpC,aAAa,QAAQ,mBAAmB;;;KCvC5C,UAAU,oCAAoC,gBACxD,QACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;;YCGU;IACR,IAAI;;;;;;;;;cAaK,uCAAS,sBAAA,QAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/lib/resolve-config.ts","../src/config.ts","../src/types/base.ts","../src/index.ts"],"mappings":";;;;;;;;;;;;;;iBA8CsB,cACpB,aACA,SAAS,UACR,QAAQ;;;;;;;;;;;;;;;;;;;;;;;iBCEK,aAAa,QAAQ,aAAa;iBAClC,aAAa,QAAQ,eAAe;iBACpC,aAAa,QAAQ,QAAQ,cAAc,QAAQ;iBACnD,aACd,QAAQ,QAAQ,gBACf,QAAQ;iBACK,aAAa,QAAQ,qBAAqB;iBAC1C,aAAa,QAAQ,sBAAsB;iBAC3C,aAAa,QAAQ,eAAe;iBACpC,aAAa,QAAQ,mBAAmB;;;KCvC5C,UAAU,oCAAoC,gBACxD,QACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;;YCGU;IACR,IAAI;;;;;;;;;cAaK,uCAAS,sBAAA,QAAA"}
package/dist/index.d.mts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { t as Schema } from "./schema-BNfl9Tsw.mjs";
2
2
  import "./index--y-fo2Lr.mjs";
3
- import { a as UserConfigExport, c as UserConfigFnPromise, d as TokensParser, f as TokensPreprocessor, i as UserConfig, l as UserConfigParams, n as Config, o as UserConfigFn, r as Options, s as UserConfigFnObject, t as definePlugin, u as Plugin } from "./plugin-B1R5dPEv.mjs";
3
+ import { a as UserConfigFn, c as UserConfigParams, d as TokensPreprocessor, i as UserConfigExport, l as Plugin, n as Options, o as UserConfigFnObject, r as UserConfig, s as UserConfigFnPromise, t as Config, u as TokensParser } from "./config-BYknAq7g.mjs";
4
+ import { t as definePlugin } from "./plugin-CfYEjsU7.mjs";
4
5
  import { GeneratorConfig } from "@power-plant/core";
5
6
  import StyleDictionary from "style-dictionary";
6
7
  //#region src/lib/resolve-config.d.ts
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.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};
1
+ import{a as e,i as t,r as n}from"./schema-Bxzw_P4l.mjs";import{l as r,t as i}from"./tokens-lbmSdrlF.mjs";import{definePlugin as a}from"./plugin.mjs";import{defineGenerator as o,defineSchema as s,useExecution as c}from"@power-plant/core";import{isEmptyObject as l}from"@stryke/type-checks/is-empty-object";import{createDefu as u,defu as d}from"defu";import f from"style-dictionary";import{existsSync as p}from"@stryke/fs/exists";import{isDirectory as m}from"@stryke/fs/is-file";import{readJsonFile as h}from"@stryke/fs/json";import{joinPaths as g}from"@stryke/path/join";import{isSetObject as _}from"@stryke/type-checks/is-set-object";import{isSetString as v}from"@stryke/type-checks/is-set-string";import{readdir as y}from"node:fs/promises";import{basename as b,isAbsolute as x,resolve as S}from"node:path";import{getEnvPaths as C}from"@stryke/env";import{findFilePath as w}from"@stryke/path/find";import{replacePath as T}from"@stryke/path/replace";import{isFunction as E}from"@stryke/type-checks/is-function";import{loadConfig as D}from"c12";import{createJiti as O}from"jiti";import{existsSync as k}from"node:fs";import A from"node:os";var j=`0.0.18`;const M=e.partial(),N=u((e,t,n)=>Array.isArray(n)?(e[t]=n,!0):!1);function P(e,t){return x(t)?t:S(e,t)}function F(e){return Array.isArray(e)?e.filter(v):v(e)?[e]:[]}function I(e){if(v(e))return e;if(_(e)&&`url`in e&&v(e.url))return e.url}function L(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 R(e){if(!_(e))return;let t=M.safeParse(e);if(t.success)return Object.keys(t.data).length>0?t.data:void 0}function z(e){return _(e)&&`path`in e}async function B(e){let t=g(e,`package.json`);if(!p(t))return;let n;try{n=await h(t)}catch{return}let r={};v(n.name)&&(r.name=n.name,r.title=n.name),v(n.description)&&(r.description=n.description),v(n.version)&&(r.version=n.version),v(n.homepage)&&(r.homepage=n.homepage);let i=I(n.repository);if(i&&(r.repository=i),_(n.dependencies)&&(r.dependencies=n.dependencies),_(n.devDependencies)&&(r.devDependencies=n.devDependencies),Array.isArray(n.keywords)){let e=n.keywords.filter(v);e.length>0&&(r.tags=e)}let a=n.razorwind,o,s;z(a)?s=L(a):_(a)&&(o=R(a),`files`in a&&(s=L(a.files)));let c=N(o??{},r);return s?.length&&(c.files=s),Object.keys(c).length>0?c:void 0}async function V(e){let t=g(e,`component.json`);if(!p(t))return;let n;try{n=await h(t)}catch{return}if(z(n)||Array.isArray(n)){let e=L(n);if(e)return{files:e}}return R(n)}async function H(t){let n=await B(t),r=await V(t);if(!n&&!r)return;let i=N(r??{},n??{}),a=b(t),o=v(i.name)?i.name:a,s=v(i.title)?i.title:o,c=e.safeParse({...i,name:o,title:s});return c.success?c.data:void 0}async function U(e){let t={},n=F(e.options.componentsPath);for(let r of n){let n=P(e.cwd,r);if(!(!p(n)||!m(n)))try{let e=await y(n,{withFileTypes:!0});for(let r of e){if(!r.isDirectory()||r.name.startsWith(`.`))continue;let e=await H(g(n,r.name));e&&(t[e.name]=e)}}catch{continue}}return t}const W=A.homedir();async function G(e,t){let n=t.configFile&&k(T(t.configFile,e))?T(t.configFile,e):t.configFile&&k(t.configFile)?t.configFile:k(g(e,`razorwind.${t.mode}.config.ts`))?g(e,`razorwind.${t.mode}.config.ts`):k(g(e,`razorwind.${t.mode}.config.js`))?g(e,`razorwind.${t.mode}.config.js`):k(g(e,`razorwind.${t.mode}.config.mts`))?g(e,`razorwind.${t.mode}.config.mts`):k(g(e,`razorwind.${t.mode}.config.mjs`))?g(e,`razorwind.${t.mode}.config.mjs`):k(g(e,`razorwind.config.ts`))?g(e,`razorwind.config.ts`):k(g(e,`razorwind.config.js`))?g(e,`razorwind.config.js`):k(g(e,`razorwind.config.mts`))?g(e,`razorwind.config.mts`):k(g(e,`razorwind.config.mjs`))?g(e,`razorwind.config.mjs`):void 0,r=C({orgId:`storm-software`,appId:`razorwind`,workspaceRoot:e}),i={fsCache:r.cache},a=O(e,i),o={};if(n){let r=await a.import(a.esmResolve(n));if(r?.default){let i={};E(r.default)?i=await Promise.resolve(r.default({cwd:e,mode:t.mode??`development`})):(_(r.default)||Array.isArray(r.default))&&(i=r.default),(_(i)||Array.isArray(i))&&(o={...i,configFile:n})}}let[s,c,l]=await Promise.all([D({cwd:e,name:`razorwind`,envName:t.mode,globalRc:!0,packageJson:`razorwind`,dotenv:!0,jitiOptions:i}),D({cwd:r.config,name:`razorwind`,envName:t.mode,dotenv:!0,jitiOptions:i}),D({cwd:W,name:`razorwind`,envName:t.mode,dotenv:!0,jitiOptions:i})]),u=d({cwd:e,envPaths:{...r,home:W}},t,o,_(s?.config)?{...s.config}:{},_(c?.config)?{...c.config}:{},_(l?.config)?{...l.config}:{},{componentsPath:e,plugins:[]});if(Array.isArray(u.componentsPath)){let t=u.componentsPath.filter(v).map(e=>w(e));u.componentsPath=t.length>0?t:e}else u.componentsPath=v(u.componentsPath)?w(u.componentsPath):e;return Array.isArray(u.plugins)||(u.plugins=[]),u}function K(e){return e}const q=o({meta:{name:`razorwind`,title:`Razorwind`,description:`A generator that uses Razorwind to generate design system code from design tokens and components.`,version:j,tags:[`razorwind`,`dtcg`]},schema:s({schema:n}),input:async e=>{let t=c();if(t.options=await G(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.`);r(t.options.plugins,f);let n=t.options.tokens;(!n||l(n))&&(n=await i(t));let a={tokens:n??{},components:d(t.options.components??{},await U(t)??{})};for(let e of t.options.plugins.filter(e=>e.extract))a=await e.extract(a,t.options);if(!a.tokens||l(a.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(a,t.options);return a},generator:async e=>{let t=c(),n={};for(let r of t.options.plugins.filter(e=>e.generate)){let i=await r.generate(e,t.options);n=d(i,n)}return n}});export{K as defineConfig,a as definePlugin,q as generator,G as resolveConfig};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../tokens-IRvI2l2K.cjs");exports.DEFAULT_TOKEN_PATH_CANDIDATES=e.g,exports.RAZORWIND_INFER_PREPROCESSOR=e.a,exports.THEME_BASENAME_PATTERN=e._,exports.TOKEN_DIRECTORY_GLOB=e.v,exports.TOKEN_FILE_EXTENSIONS=e.y,exports.TYPE_PATH_HINTS=e.x,exports.WINDIE_PARSERS=e.b,exports.razorwindParsers=e.b,exports.getRazorwindParserHooks=e.o,exports.getRazorwindPreprocessorHooks=e.s,exports.inferTypeFromPath=e.f,exports.inferValue=e.p,exports.loadTokens=e.t,exports.loadTokensOrThrow=e.n,exports.nestFlatTokens=e.m,exports.normalizeTokenTree=e.h,exports.parseCssCustomProperties=e.d,exports.razorwindInferPreprocessor=e.c,exports.registerRazorwindHooks=e.l,exports.registerRazorwindParsers=e.u,exports.resolveTokensSource=e.r,exports.themeKeyFromPath=e.i;
@@ -0,0 +1,169 @@
1
+ import { t as Schema } from "../../schema-BNfl9Tsw.cjs";
2
+ import "../../index-CjW7STaT.cjs";
3
+ import { l as Plugin, t as Config } from "../../config-niJpQJza.cjs";
4
+ import { Tokens } from "@power-plant/dtcg-schema";
5
+ import { ExecutionContext } from "@power-plant/core";
6
+ import { Hooks, Parser, PreprocessedTokens } from "style-dictionary/types";
7
+ //#region src/lib/tokens/constants.d.ts
8
+ /** Style Dictionary parser hook names registered by Razorwind. */
9
+ declare const TOKEN_PARSER_NAMES: readonly ["razorwind-json", "razorwind-yaml", "razorwind-toml", "razorwind-css"];
10
+ type RazorwindParserName = (typeof TOKEN_PARSER_NAMES)[number];
11
+ /** File extensions treated as design-token sources. */
12
+ declare const TOKEN_FILE_EXTENSIONS: readonly ["json", "json5", "jsonc", "yaml", "yml", "toml", "css", "js", "mjs", "cjs", "ts", "mts", "cts"];
13
+ /**
14
+ * Candidate paths checked when `tokensPath` is omitted.
15
+ * First existing file or directory wins.
16
+ */
17
+ declare const DEFAULT_TOKEN_PATH_CANDIDATES: readonly ["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"];
18
+ /** Glob appended when a tokens directory is resolved. */
19
+ declare const TOKEN_DIRECTORY_GLOB: string;
20
+ /** Theme-like basename patterns used to split multi-file sources into a record. */
21
+ declare const THEME_BASENAME_PATTERN: RegExp;
22
+ /** Path segment hints used when inferring `$type`. */
23
+ declare const TYPE_PATH_HINTS: Record<string, string>;
24
+ //#endregion
25
+ //#region src/lib/tokens/css.d.ts
26
+ /**
27
+ * Extract CSS custom properties from stylesheet text into a nested token tree.
28
+ * Handles `:root`, `[data-theme]`, and Tailwind v4 `@theme` blocks alike.
29
+ */
30
+ declare function parseCssCustomProperties(contents: string): Record<string, unknown>;
31
+ //#endregion
32
+ //#region src/lib/tokens/infer.d.ts
33
+ type InferredTokenType = "color" | "dimension" | "duration" | "fontFamily" | "fontWeight" | "number" | "cubicBezier" | "shadow" | "gradient" | "typography" | "strokeStyle" | "border" | "transition";
34
+ /**
35
+ * Infer DTCG `$type` from a path segment chain (e.g. `color.primary`).
36
+ */
37
+ declare function inferTypeFromPath(path: string[]): InferredTokenType | undefined;
38
+ /**
39
+ * Normalize a raw token value into DTCG-friendly shape + optional `$type`.
40
+ */
41
+ declare function inferValue(raw: unknown, path?: string[]): {
42
+ value: unknown;
43
+ type?: InferredTokenType;
44
+ };
45
+ /**
46
+ * Walk a token tree: promote legacy keys to DTCG and infer `$type` / `$value` shapes.
47
+ */
48
+ declare function normalizeTokenTree(input: unknown, path?: string[]): unknown;
49
+ /**
50
+ * Nest a flat map of dashed keys into a token tree.
51
+ * `--color-primary-500` / `color-primary-500` → `color.primary.500`.
52
+ *
53
+ * Scalar parents that also have children (e.g. `--radius` + `--radius-lg`) are
54
+ * preserved under `DEFAULT` so neither value is dropped.
55
+ */
56
+ declare function nestFlatTokens(flat: Record<string, unknown>): Record<string, unknown>;
57
+ //#endregion
58
+ //#region src/lib/tokens/resolve-path.d.ts
59
+ interface ResolveTokensPathOptions {
60
+ /**
61
+ * Working directory used to resolve relative paths.
62
+ */
63
+ cwd: string;
64
+ /**
65
+ * Explicit tokens file(s) or directory(ies) from config.
66
+ */
67
+ tokensPath?: string | string[];
68
+ /**
69
+ * Extra fallback paths (e.g. registry `tailwind.css`).
70
+ */
71
+ fallbackPaths?: Array<string | null | undefined>;
72
+ }
73
+ interface ResolvedTokensSource {
74
+ /**
75
+ * Absolute path to the resolved file or directory (if any).
76
+ *
77
+ * When multiple `tokensPath` entries are provided, this is the first
78
+ * resolved path (or the Style Dictionary config when that is the sole entry).
79
+ */
80
+ resolvedPath?: string;
81
+ /**
82
+ * Style Dictionary `source` globs.
83
+ */
84
+ source: string[];
85
+ /**
86
+ * How the path was discovered.
87
+ */
88
+ origin: "tokensPath" | "default" | "fallback" | "none";
89
+ }
90
+ /**
91
+ * Resolve Style Dictionary source globs from `tokensPath` or common defaults.
92
+ *
93
+ * When `tokensPath` is an array, each entry is resolved and the resulting
94
+ * source globs are merged. A Style Dictionary config file may only be used as
95
+ * the sole `tokensPath` entry.
96
+ */
97
+ declare function resolveTokensSource(options: ResolveTokensPathOptions): ResolvedTokensSource;
98
+ /**
99
+ * Detect theme-like basenames for splitting multi-file token sets.
100
+ */
101
+ declare function themeKeyFromPath(filePath: string): string | undefined;
102
+ //#endregion
103
+ //#region src/lib/tokens/load.d.ts
104
+ interface LoadTokensOptions extends ResolveTokensPathOptions {
105
+ /**
106
+ * When true, split theme-named files into a record keyed by theme.
107
+ *
108
+ * @defaultValue true
109
+ */
110
+ splitThemes?: boolean;
111
+ }
112
+ type LoadedTokens = Tokens | Record<string, Tokens>;
113
+ /**
114
+ * Load design tokens via Style Dictionary parser hooks.
115
+ *
116
+ * Resolution order:
117
+ * 1. Explicit `tokensPath` (file, directory, array of those, or SD config)
118
+ * 2. Common default paths (`tokens.json`, `tokens/`, …)
119
+ * 3. Fallback paths (e.g. registry Tailwind CSS)
120
+ */
121
+ declare function loadTokens(context: ExecutionContext<Schema, Config, void>): Promise<LoadedTokens>;
122
+ /**
123
+ * Convenience: load tokens or throw when nothing usable is found.
124
+ *
125
+ * @param config - The configuration object.
126
+ * @param options - The options for loading the tokens.
127
+ * @returns The loaded tokens.
128
+ * @throws An error if no design tokens are found.
129
+ * @throws An error if the tokens are not valid.
130
+ */
131
+ declare function loadTokensOrThrow(context: ExecutionContext<Schema, Config, void>): Promise<LoadedTokens>;
132
+ //#endregion
133
+ //#region src/lib/tokens/parsers.d.ts
134
+ /** Preprocessor name applied after all sources merge. */
135
+ declare const RAZORWIND_INFER_PREPROCESSOR = "razorwind-infer";
136
+ /** Target capable of registering Style Dictionary extraction hooks. */
137
+ interface StyleDictionaryRegisterTarget {
138
+ registerParser: (parser: Parser) => unknown;
139
+ registerPreprocessor: (preprocessor: {
140
+ name: string;
141
+ preprocessor: typeof razorwindInferPreprocessor;
142
+ }) => unknown;
143
+ }
144
+ /** Inline `hooks.parsers` map for Style Dictionary config. */
145
+ declare function getRazorwindParserHooks(): NonNullable<Hooks["parsers"]>;
146
+ /**
147
+ * Infer DTCG `$type` / normalize legacy keys after sources merge.
148
+ * Covers JS/TS modules that bypass custom file parsers.
149
+ */
150
+ declare function razorwindInferPreprocessor(dictionary: PreprocessedTokens): PreprocessedTokens;
151
+ /** Inline `hooks.preprocessors` map for Style Dictionary config. */
152
+ declare function getRazorwindPreprocessorHooks(): NonNullable<Hooks["preprocessors"]>;
153
+ /**
154
+ * Register Razorwind parsers + infer preprocessor on Style Dictionary,
155
+ * then register any extraction hooks contributed by plugins.
156
+ *
157
+ * Platform generation hooks (transforms, formats, …) are registered by
158
+ * `@razorwind/style-dictionary` during generate.
159
+ *
160
+ * @see https://styledictionary.com/reference/api/
161
+ */
162
+ declare function registerRazorwindHooks(plugins?: Plugin[], target?: StyleDictionaryRegisterTarget): void;
163
+ /**
164
+ * @deprecated Use {@link registerRazorwindHooks} instead.
165
+ */
166
+ declare const registerRazorwindParsers: typeof registerRazorwindHooks;
167
+ //#endregion
168
+ export { DEFAULT_TOKEN_PATH_CANDIDATES, type InferredTokenType, type LoadTokensOptions, type LoadedTokens, RAZORWIND_INFER_PREPROCESSOR, type RazorwindParserName, type ResolveTokensPathOptions, type ResolvedTokensSource, type StyleDictionaryRegisterTarget, THEME_BASENAME_PATTERN, TOKEN_DIRECTORY_GLOB, TOKEN_FILE_EXTENSIONS, TYPE_PATH_HINTS, TOKEN_PARSER_NAMES as WINDIE_PARSERS, TOKEN_PARSER_NAMES as razorwindParsers, getRazorwindParserHooks, getRazorwindPreprocessorHooks, inferTypeFromPath, inferValue, loadTokens, loadTokensOrThrow, nestFlatTokens, normalizeTokenTree, parseCssCustomProperties, razorwindInferPreprocessor, registerRazorwindHooks, registerRazorwindParsers, resolveTokensSource, themeKeyFromPath };
169
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/tokens/constants.ts","../../../src/lib/tokens/css.ts","../../../src/lib/tokens/infer.ts","../../../src/lib/tokens/resolve-path.ts","../../../src/lib/tokens/load.ts","../../../src/lib/tokens/parsers.ts"],"mappings":";;;;;;;;cAmBa;KAOD,8BAA8B;;cAG7B;;;;;cAsBA;;cAyBA;;cAGA,wBAAsB;;cAItB,iBAAiB;;;;;;;iBCvDd,yBACd,mBACC;;;KCgCS;;;;iBAmEI,kBACd,iBACC;;;;iBAiBa,WACd,cACA;EACG;EAAgB,OAAO;;;;;iBAsPZ,mBACd,gBACA;;;;;;;;iBA2Cc,eACd,MAAM,0BACL;;;UC9Zc;;;;EAIf;;;;EAKA;;;;EAKA,gBAAgB;;UAGD;;;;;;;EAOf;;;;EAKA;;;;EAKA;;;;;;;;;iBAyFc,oBACd,SAAS,2BACR;;;;iBAqFa,iBAAiB;;;UCzMhB,0BAA0B;;;;;;EAMzC;;KAGU,eAAe,SAAS,eAAe;;;;;;;;;iBA2I7B,WACpB,SAAS,iBAAiB,QAAQ,gBACjC,QAAQ;;;;;;;;;;iBAsCW,kBACpB,SAAS,iBAAiB,QAAQ,gBACjC,QAAQ;;;;cClME;;UAGI;EACf,iBAAiB,QAAQ;EACzB,uBAAuB;IACrB;IACA,qBAAqB;;;;iBAyET,2BAA2B,YAAY;;;;;iBAavC,2BACd,YAAY,qBACX;;iBAKa,iCAAiC,YAC/C;;;;;;;;;;iBAgBc,uBACd,UAAS,UACT,SAAQ;;;;cA6CG,iCAAwB"}
@@ -0,0 +1,169 @@
1
+ import { t as Schema } from "../../schema-BNfl9Tsw.mjs";
2
+ import "../../index--y-fo2Lr.mjs";
3
+ import { l as Plugin, t as Config } from "../../config-BYknAq7g.mjs";
4
+ import { ExecutionContext } from "@power-plant/core";
5
+ import { Tokens } from "@power-plant/dtcg-schema";
6
+ import { Hooks, Parser, PreprocessedTokens } from "style-dictionary/types";
7
+ //#region src/lib/tokens/constants.d.ts
8
+ /** Style Dictionary parser hook names registered by Razorwind. */
9
+ declare const TOKEN_PARSER_NAMES: readonly ["razorwind-json", "razorwind-yaml", "razorwind-toml", "razorwind-css"];
10
+ type RazorwindParserName = (typeof TOKEN_PARSER_NAMES)[number];
11
+ /** File extensions treated as design-token sources. */
12
+ declare const TOKEN_FILE_EXTENSIONS: readonly ["json", "json5", "jsonc", "yaml", "yml", "toml", "css", "js", "mjs", "cjs", "ts", "mts", "cts"];
13
+ /**
14
+ * Candidate paths checked when `tokensPath` is omitted.
15
+ * First existing file or directory wins.
16
+ */
17
+ declare const DEFAULT_TOKEN_PATH_CANDIDATES: readonly ["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"];
18
+ /** Glob appended when a tokens directory is resolved. */
19
+ declare const TOKEN_DIRECTORY_GLOB: string;
20
+ /** Theme-like basename patterns used to split multi-file sources into a record. */
21
+ declare const THEME_BASENAME_PATTERN: RegExp;
22
+ /** Path segment hints used when inferring `$type`. */
23
+ declare const TYPE_PATH_HINTS: Record<string, string>;
24
+ //#endregion
25
+ //#region src/lib/tokens/css.d.ts
26
+ /**
27
+ * Extract CSS custom properties from stylesheet text into a nested token tree.
28
+ * Handles `:root`, `[data-theme]`, and Tailwind v4 `@theme` blocks alike.
29
+ */
30
+ declare function parseCssCustomProperties(contents: string): Record<string, unknown>;
31
+ //#endregion
32
+ //#region src/lib/tokens/infer.d.ts
33
+ type InferredTokenType = "color" | "dimension" | "duration" | "fontFamily" | "fontWeight" | "number" | "cubicBezier" | "shadow" | "gradient" | "typography" | "strokeStyle" | "border" | "transition";
34
+ /**
35
+ * Infer DTCG `$type` from a path segment chain (e.g. `color.primary`).
36
+ */
37
+ declare function inferTypeFromPath(path: string[]): InferredTokenType | undefined;
38
+ /**
39
+ * Normalize a raw token value into DTCG-friendly shape + optional `$type`.
40
+ */
41
+ declare function inferValue(raw: unknown, path?: string[]): {
42
+ value: unknown;
43
+ type?: InferredTokenType;
44
+ };
45
+ /**
46
+ * Walk a token tree: promote legacy keys to DTCG and infer `$type` / `$value` shapes.
47
+ */
48
+ declare function normalizeTokenTree(input: unknown, path?: string[]): unknown;
49
+ /**
50
+ * Nest a flat map of dashed keys into a token tree.
51
+ * `--color-primary-500` / `color-primary-500` → `color.primary.500`.
52
+ *
53
+ * Scalar parents that also have children (e.g. `--radius` + `--radius-lg`) are
54
+ * preserved under `DEFAULT` so neither value is dropped.
55
+ */
56
+ declare function nestFlatTokens(flat: Record<string, unknown>): Record<string, unknown>;
57
+ //#endregion
58
+ //#region src/lib/tokens/resolve-path.d.ts
59
+ interface ResolveTokensPathOptions {
60
+ /**
61
+ * Working directory used to resolve relative paths.
62
+ */
63
+ cwd: string;
64
+ /**
65
+ * Explicit tokens file(s) or directory(ies) from config.
66
+ */
67
+ tokensPath?: string | string[];
68
+ /**
69
+ * Extra fallback paths (e.g. registry `tailwind.css`).
70
+ */
71
+ fallbackPaths?: Array<string | null | undefined>;
72
+ }
73
+ interface ResolvedTokensSource {
74
+ /**
75
+ * Absolute path to the resolved file or directory (if any).
76
+ *
77
+ * When multiple `tokensPath` entries are provided, this is the first
78
+ * resolved path (or the Style Dictionary config when that is the sole entry).
79
+ */
80
+ resolvedPath?: string;
81
+ /**
82
+ * Style Dictionary `source` globs.
83
+ */
84
+ source: string[];
85
+ /**
86
+ * How the path was discovered.
87
+ */
88
+ origin: "tokensPath" | "default" | "fallback" | "none";
89
+ }
90
+ /**
91
+ * Resolve Style Dictionary source globs from `tokensPath` or common defaults.
92
+ *
93
+ * When `tokensPath` is an array, each entry is resolved and the resulting
94
+ * source globs are merged. A Style Dictionary config file may only be used as
95
+ * the sole `tokensPath` entry.
96
+ */
97
+ declare function resolveTokensSource(options: ResolveTokensPathOptions): ResolvedTokensSource;
98
+ /**
99
+ * Detect theme-like basenames for splitting multi-file token sets.
100
+ */
101
+ declare function themeKeyFromPath(filePath: string): string | undefined;
102
+ //#endregion
103
+ //#region src/lib/tokens/load.d.ts
104
+ interface LoadTokensOptions extends ResolveTokensPathOptions {
105
+ /**
106
+ * When true, split theme-named files into a record keyed by theme.
107
+ *
108
+ * @defaultValue true
109
+ */
110
+ splitThemes?: boolean;
111
+ }
112
+ type LoadedTokens = Tokens | Record<string, Tokens>;
113
+ /**
114
+ * Load design tokens via Style Dictionary parser hooks.
115
+ *
116
+ * Resolution order:
117
+ * 1. Explicit `tokensPath` (file, directory, array of those, or SD config)
118
+ * 2. Common default paths (`tokens.json`, `tokens/`, …)
119
+ * 3. Fallback paths (e.g. registry Tailwind CSS)
120
+ */
121
+ declare function loadTokens(context: ExecutionContext<Schema, Config, void>): Promise<LoadedTokens>;
122
+ /**
123
+ * Convenience: load tokens or throw when nothing usable is found.
124
+ *
125
+ * @param config - The configuration object.
126
+ * @param options - The options for loading the tokens.
127
+ * @returns The loaded tokens.
128
+ * @throws An error if no design tokens are found.
129
+ * @throws An error if the tokens are not valid.
130
+ */
131
+ declare function loadTokensOrThrow(context: ExecutionContext<Schema, Config, void>): Promise<LoadedTokens>;
132
+ //#endregion
133
+ //#region src/lib/tokens/parsers.d.ts
134
+ /** Preprocessor name applied after all sources merge. */
135
+ declare const RAZORWIND_INFER_PREPROCESSOR = "razorwind-infer";
136
+ /** Target capable of registering Style Dictionary extraction hooks. */
137
+ interface StyleDictionaryRegisterTarget {
138
+ registerParser: (parser: Parser) => unknown;
139
+ registerPreprocessor: (preprocessor: {
140
+ name: string;
141
+ preprocessor: typeof razorwindInferPreprocessor;
142
+ }) => unknown;
143
+ }
144
+ /** Inline `hooks.parsers` map for Style Dictionary config. */
145
+ declare function getRazorwindParserHooks(): NonNullable<Hooks["parsers"]>;
146
+ /**
147
+ * Infer DTCG `$type` / normalize legacy keys after sources merge.
148
+ * Covers JS/TS modules that bypass custom file parsers.
149
+ */
150
+ declare function razorwindInferPreprocessor(dictionary: PreprocessedTokens): PreprocessedTokens;
151
+ /** Inline `hooks.preprocessors` map for Style Dictionary config. */
152
+ declare function getRazorwindPreprocessorHooks(): NonNullable<Hooks["preprocessors"]>;
153
+ /**
154
+ * Register Razorwind parsers + infer preprocessor on Style Dictionary,
155
+ * then register any extraction hooks contributed by plugins.
156
+ *
157
+ * Platform generation hooks (transforms, formats, …) are registered by
158
+ * `@razorwind/style-dictionary` during generate.
159
+ *
160
+ * @see https://styledictionary.com/reference/api/
161
+ */
162
+ declare function registerRazorwindHooks(plugins?: Plugin[], target?: StyleDictionaryRegisterTarget): void;
163
+ /**
164
+ * @deprecated Use {@link registerRazorwindHooks} instead.
165
+ */
166
+ declare const registerRazorwindParsers: typeof registerRazorwindHooks;
167
+ //#endregion
168
+ export { DEFAULT_TOKEN_PATH_CANDIDATES, type InferredTokenType, type LoadTokensOptions, type LoadedTokens, RAZORWIND_INFER_PREPROCESSOR, type RazorwindParserName, type ResolveTokensPathOptions, type ResolvedTokensSource, type StyleDictionaryRegisterTarget, THEME_BASENAME_PATTERN, TOKEN_DIRECTORY_GLOB, TOKEN_FILE_EXTENSIONS, TYPE_PATH_HINTS, TOKEN_PARSER_NAMES as WINDIE_PARSERS, TOKEN_PARSER_NAMES as razorwindParsers, getRazorwindParserHooks, getRazorwindPreprocessorHooks, inferTypeFromPath, inferValue, loadTokens, loadTokensOrThrow, nestFlatTokens, normalizeTokenTree, parseCssCustomProperties, razorwindInferPreprocessor, registerRazorwindHooks, registerRazorwindParsers, resolveTokensSource, themeKeyFromPath };
169
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/tokens/constants.ts","../../../src/lib/tokens/css.ts","../../../src/lib/tokens/infer.ts","../../../src/lib/tokens/resolve-path.ts","../../../src/lib/tokens/load.ts","../../../src/lib/tokens/parsers.ts"],"mappings":""}
@@ -0,0 +1 @@
1
+ import{_ as e,a as t,b as n,c as r,d as i,f as a,g as o,h as s,i as c,l,m as u,n as d,o as f,p,r as m,s as h,t as g,u as _,v,x as y,y as b}from"../../tokens-lbmSdrlF.mjs";export{o as DEFAULT_TOKEN_PATH_CANDIDATES,t as RAZORWIND_INFER_PREPROCESSOR,e as THEME_BASENAME_PATTERN,v as TOKEN_DIRECTORY_GLOB,b as TOKEN_FILE_EXTENSIONS,y as TYPE_PATH_HINTS,n as WINDIE_PARSERS,n as razorwindParsers,f as getRazorwindParserHooks,h as getRazorwindPreprocessorHooks,a as inferTypeFromPath,p as inferValue,g as loadTokens,d as loadTokensOrThrow,u as nestFlatTokens,s as normalizeTokenTree,i as parseCssCustomProperties,r as razorwindInferPreprocessor,l as registerRazorwindHooks,_ as registerRazorwindParsers,m as resolveTokensSource,c as themeKeyFromPath};
@@ -0,0 +1,49 @@
1
+ import { l as Plugin } from "./config-niJpQJza.cjs";
2
+ //#region src/plugin.d.ts
3
+ /**
4
+ * Type helper for Razorwind plugins (`parsers` / `preprocessors` + `extract` / `validate` / `generate`).
5
+ *
6
+ * Platform generation (`platforms`, transforms, formats, …) belongs on
7
+ * `@razorwind/style-dictionary` plugin options — not on this interface.
8
+ *
9
+ * @see https://styledictionary.com/reference/api/
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import { definePlugin } from "@razorwind/core";
14
+ *
15
+ * // As a plugin
16
+ * export default definePlugin({
17
+ * name: "my-plugin",
18
+ * parsers: [{ pattern: /\.foo$/, parser: contents => JSON.parse(contents) }],
19
+ * extract: async (spec) => {
20
+ * ...
21
+ * },
22
+ * validate: async () => {
23
+ * ...
24
+ * },
25
+ * generate: async () => {
26
+ * ...
27
+ * }
28
+ * });
29
+ *
30
+ * // As a plugin factory
31
+ * export default definePlugin((options) => ({
32
+ * name: "my-plugin",
33
+ * extract: async (spec) => {
34
+ * ...
35
+ * },
36
+ * validate: async () => {
37
+ * ...
38
+ * },
39
+ * generate: async () => {
40
+ * ...
41
+ * }
42
+ * }));
43
+ * ```
44
+ */
45
+ declare function definePlugin<TOptions>(factory: (options: TOptions) => Plugin, overrides?: Partial<Plugin>): (options?: TOptions) => Plugin;
46
+ declare function definePlugin(plugin: Plugin, overrides?: Partial<Plugin>): Plugin;
47
+ //#endregion
48
+ export { definePlugin as t };
49
+ //# sourceMappingURL=plugin-CZz4yUV2.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-CZz4yUV2.d.cts","names":[],"sources":["../src/plugin.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiEgB,aAAa,UAC3B,UAAU,SAAS,aAAa,QAChC,YAAY,QAAQ,WAClB,UAAU,aAAa;iBACX,aACd,QAAQ,QACR,YAAY,QAAQ,UACnB"}
@@ -0,0 +1,49 @@
1
+ import { l as Plugin } from "./config-BYknAq7g.mjs";
2
+ //#region src/plugin.d.ts
3
+ /**
4
+ * Type helper for Razorwind plugins (`parsers` / `preprocessors` + `extract` / `validate` / `generate`).
5
+ *
6
+ * Platform generation (`platforms`, transforms, formats, …) belongs on
7
+ * `@razorwind/style-dictionary` plugin options — not on this interface.
8
+ *
9
+ * @see https://styledictionary.com/reference/api/
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import { definePlugin } from "@razorwind/core";
14
+ *
15
+ * // As a plugin
16
+ * export default definePlugin({
17
+ * name: "my-plugin",
18
+ * parsers: [{ pattern: /\.foo$/, parser: contents => JSON.parse(contents) }],
19
+ * extract: async (spec) => {
20
+ * ...
21
+ * },
22
+ * validate: async () => {
23
+ * ...
24
+ * },
25
+ * generate: async () => {
26
+ * ...
27
+ * }
28
+ * });
29
+ *
30
+ * // As a plugin factory
31
+ * export default definePlugin((options) => ({
32
+ * name: "my-plugin",
33
+ * extract: async (spec) => {
34
+ * ...
35
+ * },
36
+ * validate: async () => {
37
+ * ...
38
+ * },
39
+ * generate: async () => {
40
+ * ...
41
+ * }
42
+ * }));
43
+ * ```
44
+ */
45
+ declare function definePlugin<TOptions>(factory: (options: TOptions) => Plugin, overrides?: Partial<Plugin>): (options?: TOptions) => Plugin;
46
+ declare function definePlugin(plugin: Plugin, overrides?: Partial<Plugin>): Plugin;
47
+ //#endregion
48
+ export { definePlugin as t };
49
+ //# sourceMappingURL=plugin-CfYEjsU7.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-CfYEjsU7.d.mts","names":[],"sources":["../src/plugin.ts"],"mappings":""}
package/dist/plugin.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(e){return e}exports.definePlugin=e;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@stryke/type-checks/is-function");function t(t,n){return(0,e.isFunction)(t)?e=>({...t(e),...n}):{...t,...n}}exports.definePlugin=t;
package/dist/plugin.d.cts CHANGED
@@ -1,2 +1,3 @@
1
- import { d as TokensParser, f as TokensPreprocessor, t as definePlugin, u as Plugin } from "./plugin-CCSoeiLW.cjs";
1
+ import { d as TokensPreprocessor, l as Plugin, u as TokensParser } from "./config-niJpQJza.cjs";
2
+ import { t as definePlugin } from "./plugin-CZz4yUV2.cjs";
2
3
  export { type Plugin, type TokensParser, type TokensPreprocessor, definePlugin };
package/dist/plugin.d.mts CHANGED
@@ -1,2 +1,3 @@
1
- import { d as TokensParser, f as TokensPreprocessor, t as definePlugin, u as Plugin } from "./plugin-B1R5dPEv.mjs";
1
+ import { d as TokensPreprocessor, l as Plugin, u as TokensParser } from "./config-BYknAq7g.mjs";
2
+ import { t as definePlugin } from "./plugin-CfYEjsU7.mjs";
2
3
  export { type Plugin, type TokensParser, type TokensPreprocessor, definePlugin };
package/dist/plugin.mjs CHANGED
@@ -1,2 +1,2 @@
1
- function e(e){return e}export{e as definePlugin};
1
+ import{isFunction as e}from"@stryke/type-checks/is-function";function t(t,n){return e(t)?e=>({...t(e),...n}):{...t,...n}}export{t as definePlugin};
2
2
  //# sourceMappingURL=plugin.mjs.map
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return s}});
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../schema-qGVCMtQR.cjs");let t=require("@power-plant/dtcg-schema");exports.componentFileSchema=e.n,exports.componentSchema=e.r,exports.componentsSchema=e.i,exports.schema=e.t,Object.defineProperty(exports,"tokenSchema",{enumerable:!0,get:function(){return t.tokenSchema}}),Object.defineProperty(exports,"tokensSchema",{enumerable:!0,get:function(){return t.tokensSchema}});
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../schema-D7jRSrC_.cjs");let t=require("@power-plant/dtcg-schema");exports.componentFileSchema=e.n,exports.componentSchema=e.r,exports.componentsSchema=e.i,exports.schema=e.t,Object.defineProperty(exports,"tokenSchema",{enumerable:!0,get:function(){return t.tokenSchema}}),Object.defineProperty(exports,"tokensSchema",{enumerable:!0,get:function(){return t.tokensSchema}});
@@ -0,0 +1 @@
1
+ const e=require("./rolldown-runtime-BocRIvOZ.cjs");let t=require("zod");t=e.t(t,1);let n=require("@power-plant/dtcg-schema");const r=t.z.object({path:t.z.string(),type:t.z.enum([`lib`,`block`,`component`,`ui`,`hook`,`theme`,`page`,`file`,`style`,`base`,`font`,`item`]),content:t.z.string().optional(),target:t.z.string().optional().describe(`The target path of the file. This is the path to the file in the project. Supports registry target placeholders @components/, @ui/, @lib/, and @hooks/, which resolve to the corresponding aliases configured in components.json. These placeholders are independent of the project's import prefix.`)}),i=t.z.object({name:t.z.string(),title:t.z.string(),type:t.z.enum([`block`,`component`,`ui`,`page`]).optional(),category:t.z.string().optional(),description:t.z.string().optional(),tags:t.z.array(t.z.string()).optional(),related:t.z.array(t.z.string()).optional(),since:t.z.string().optional(),version:t.z.string().optional(),repository:t.z.string().optional(),homepage:t.z.string().optional(),dependencies:t.z.record(t.z.string(),t.z.string()).optional(),devDependencies:t.z.record(t.z.string(),t.z.string()).optional(),registryDependencies:t.z.record(t.z.string(),t.z.string()).optional(),files:t.z.array(r).optional()}),a=t.z.record(t.z.string(),i),o=t.default.union([n.tokensSchema,t.default.record(t.default.string(),n.tokensSchema)]),s=t.default.object({tokens:o,components:a});Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return s}});
@@ -0,0 +1 @@
1
+ const e=require("./rolldown-runtime-BocRIvOZ.cjs"),t=require("./utils/index.cjs");let n=require("style-dictionary");n=e.t(n,1);let r=require("@stryke/fs/exists"),i=require("@stryke/fs/is-file"),a=require("@stryke/path/join"),o=require("@stryke/type-checks/is-set-string"),s=require("node:path"),c=require("@stryke/type-checks/is-function"),l=require("@stryke/fs/resolve"),u=require("fast-glob");u=e.t(u,1);let d=require("json5");d=e.t(d,1);let ee=require("smol-toml"),f=require("yaml");const p=[`razorwind-json`,`razorwind-yaml`,`razorwind-toml`,`razorwind-css`],m=[`json`,`json5`,`jsonc`,`yaml`,`yml`,`toml`,`css`,`js`,`mjs`,`cjs`,`ts`,`mts`,`cts`],h=m.join(`,`),g=[`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`],_=`**/*.{${h}}`,v=/^(light|dark|dim|dimmed|high-contrast|hc|default|base|theme)([._-].+)?$/i,y={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`},te=/^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,ne=/^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,re=/^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,ie=/^oklch\(\s*([+\d.]+%?|none)\s+([+\d.]+|none)\s+([+\d.]+|none)(?:\s*\/\s*([+\d.]+%?))?\s*\)$/i,ae=/^([+-]?(?:\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,se=/^cubic-bezier\(\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*\)$/i,b=/^var\(\s*(--[\w-]+)\s*(?:,\s*(?:\S.*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))?\)\s*$/i,x=/^\{[^{}]+\}$/,S={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},C=new Set([`px`,`rem`]);function w(e){return Math.min(1,Math.max(0,e))}function T(e,t=100){let n=e.trim();if(n.endsWith(`%`))return w(Number.parseFloat(n)/t);let r=Number.parseFloat(n);return w(r>1?r/255:r)}function ce(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 le(e){let t=ce(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 ue(e){return`{${e.replace(/^--/,``).split(`-`).filter(Boolean).join(`.`)}}`}function E(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function D(e){for(let t=e.length-1;t>=0;t--){let n=e[t]?.toLowerCase();if(!n)continue;let r=y[n];if(r)return r}}function O(e,n=[]){let r=D(n);if(typeof e==`string`){let t=e.trim();if(x.test(t))return{value:t,type:r};let i=t.match(b);if(i?.[1])return{value:ue(i[1]),type:r};if(te.test(t))return{value:le(t),type:`color`};let a=t.match(ne);if(a){let e=[T(a[1]),T(a[2]),T(a[3])],t=a[4]?a[4].endsWith(`%`)?w(Number.parseFloat(a[4])/100):w(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(re);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(`%`)?w(Number.parseFloat(o[4])/100):w(Number.parseFloat(o[4]))}:{}},type:`color`};let s=t.match(ie);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(`%`)?w(Number.parseFloat(s[4])/100):w(Number.parseFloat(s[4]))}:{}},type:`color`}}let c=t.match(ae);if(c){let e=c[2].toLowerCase(),n=Number.parseFloat(c[1]);return C.has(e)?{value:{value:n,unit:e},type:`dimension`}:{value:t,type:r===`dimension`?void 0:r}}let l=t.match(oe);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=S[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`}:C.has(t)?{value:e,type:`dimension`}:{value:e,type:r}}}return{value:e,type:r}}function de(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=O(n.$value,t);n.$value=e.value,!(`$type`in n)&&e.type&&(n.$type=e.type)}return n}function k(e,n=[]){if(Array.isArray(e))return e.map((e,t)=>k(e,[...n,String(t)]));if(!t.isObject(e))return e;if(E(e))return de(e,n);let r={};for(let[t,i]of Object.entries(e)){if(t.startsWith(`$`)){r[t]=i;continue}r[t]=k(i,[...n,t])}if(!(`$type`in r)){let e=D(n);e&&n.length>0&&(r.$type=e)}return r}function A(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)?E(i)&&(a[r]={DEFAULT:i}):a[r]={},a=a[r]}let o=e.at(-1),s=O(i,e),c={$value:s.value,...s.type?{$type:s.type}:{}},l=a[o];t.isObject(l)&&!E(l)?l.DEFAULT=c:a[o]=c}return k(n)}const fe=/(--[A-Z_][\w-]*)\s*:\s*([^;}{]+?)(?=\s*(?:;|\}|$))/gi;function j(e){let t={},n=e.replace(/\/\*[\s\S]*?\*\//g,``);for(let e of n.matchAll(fe)){let n=e[1],r=e[2]?.trim();!n||!r||(t[n]=r)}return A(t)}const M=`razorwind-infer`;function N(e){if(e==null)return{};if(typeof e!=`object`||Array.isArray(e))throw TypeError(`Token file must parse to a plain object.`);return k(e)}function P(e){try{return N(d.default.parse(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse JSON token file: ${t}`)}}function F(e){try{return N((0,f.parse)(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse YAML token file: ${t}`)}}function I(e){try{return N((0,ee.parse)(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse TOML token file: ${t}`)}}const L=[{name:`razorwind-json`,pattern:/\.json[c5]?$/i,parser:({contents:e})=>P(e)},{name:`razorwind-yaml`,pattern:/\.ya?ml$/i,parser:({contents:e})=>F(e)},{name:`razorwind-toml`,pattern:/\.toml$/i,parser:({contents:e})=>I(e)},{name:`razorwind-css`,pattern:/\.css$/i,parser:({contents:e})=>k(j(e))}];function R(){return Object.fromEntries(L.map(({name:e,pattern:t,parser:n})=>[e,{pattern:t,parser:n}]))}function z(e){return k(e)}function B(){return{[M]:z}}function V(e=[],t=n.default){for(let e of L)t.registerParser(e);t.registerPreprocessor({name:M,preprocessor:z});let r=0,i=0;for(let n of e){for(let e of n.parsers??[])t.registerParser({name:e.name??`${n.name}-parser-${r}`,pattern:e.pattern,parser:({contents:t})=>e.parser(t)}),r++;for(let e of n.preprocessors??[])t.registerPreprocessor((0,c.isFunction)(e)?{name:`${n.name}-preprocessor-${i}`,preprocessor:e}:{name:e.name??`${n.name}-preprocessor-${i}`,preprocessor:e.preprocessor}),i++}}const pe=V;function H(e,t){return(0,s.isAbsolute)(t)?t:(0,s.resolve)(e,t)}function U(e){return/\.([^.]+)$/.exec(e)?.[1]?.toLowerCase()??``}function W(e){return m.includes(U(e))}function G(e){let t=e.split(/[/\\]/).pop()?.toLowerCase()??``;return t.startsWith(`style-dictionary.config.`)||t.startsWith(`sd.config.`)}function K(e){return(0,a.joinPaths)(e,_)}function me(e){return Array.isArray(e)?e.filter(o.isSetString):(0,o.isSetString)(e)?[e]:[]}function he(e,t){let n=H(e,t);if(!(0,r.existsSync)(n))throw Error(`tokensPath "${t}" does not exist (resolved: ${n}).`);return(0,i.isDirectory)(n)?{resolvedPath:n,source:[K(n)],isStyleDictionaryConfig:!1}:G(n)?{resolvedPath:n,source:[],isStyleDictionaryConfig:!0}:{resolvedPath:n,source:[n],isStyleDictionaryConfig:!1}}function q(e){let{cwd:t,tokensPath:n,fallbackPaths:a=[]}=e,o=me(n);if(o.length>0){let e=o.map(e=>he(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 g){let n=H(t,e);if((0,r.existsSync)(n)){if((0,i.isDirectory)(n))return{resolvedPath:n,source:[K(n)],origin:`default`};if(G(n))return{resolvedPath:n,source:[],origin:`default`};if(W(n))return{resolvedPath:n,source:[n],origin:`default`}}}for(let e of a){if(!e)continue;let n=H(t,e);if(!(!(0,r.existsSync)(n)||(0,i.isDirectory)(n))&&(W(n)||U(n)===`css`))return{resolvedPath:n,source:[n],origin:`fallback`}}return{source:[],origin:`none`}}function J(e){return(e.split(/[/\\]/).pop()??``).replace(/\.[^.]+$/,``).match(v)?.[1]?.toLowerCase()}function ge(e){V(e.plugins,n.default)}function Y(e){return!e||typeof e!=`object`||Object.keys(e).length===0}async function _e(e){let t=await(0,l.importModule)(e);return t&&typeof t==`object`&&`default`in t&&t.default?t.default:t}async function X(e,t){ge(e);let r=new n.default({...t,parsers:[...p,...t.parsers??[]],preprocessors:[M,...t.preprocessors??[]],hooks:{...t.hooks,parsers:{...R(),...t.hooks?.parsers},preprocessors:{...B(),...t.hooks?.preprocessors}},usesDtcg:t.usesDtcg??!0,platforms:t.platforms??{}});return await r.hasInitialized,r}async function Z(e,t){return t.length===0?{}:(await X(e,{source:t})).tokens}async function Q(e){return(await(0,u.default)(e,{absolute:!0,onlyFiles:!0,unique:!0})).sort()}async function ve(e,t){let n=await Q(t);if(n.length===0)return{};let r=new Map,i=[];for(let e of n){let t=J(e);if(t){let n=r.get(t)??[];n.push(e),r.set(t,n)}else i.push(e)}if(r.size<2)return Z(e,t);let a={};if(i.length>0){let t=await Z(e,i);Y(t)||(a.base=t)}for(let[t,n]of r)a[t]=await Z(e,n);return a}async function $(e){let t=q(e.options);return t.resolvedPath&&(0,r.existsSync)(t.resolvedPath)&&/(?:^|[/\\])(?:style-dictionary|sd)\.config\./i.test((0,s.basename)(t.resolvedPath))?(e.sd=await X(e.options,await _e(t.resolvedPath)),e.sd.tokens):t.source.length===0?{}:e.options.splitThemes?ve(e.options,t.source):Z(e.options,t.source)}async function ye(e){let t=await $(e);if(Y(t)){let{tokensPath:t}=e.options,n=Array.isArray(t)?t.length>0?`tokensPath=[${t.map(e=>`"${e}"`).join(`, `)}]`:`default token paths / CSS fallbacks`:(0,o.isSetString)(t)?`tokensPath="${t}"`:`default token paths / CSS fallbacks`;throw Error(`No design tokens found via ${n}. Provide tokensPath or add a tokens file.`)}return t}Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return m}});
@@ -0,0 +1,2 @@
1
+ import{isObject as e}from"./utils/index.mjs";import t from"style-dictionary";import{existsSync as n}from"@stryke/fs/exists";import{isDirectory as r}from"@stryke/fs/is-file";import{joinPaths as i}from"@stryke/path/join";import{isSetString as a}from"@stryke/type-checks/is-set-string";import{basename as o,isAbsolute as s,resolve as c}from"node:path";import{isFunction as l}from"@stryke/type-checks/is-function";import{importModule as u}from"@stryke/fs/resolve";import d from"fast-glob";import ee from"json5";import{parse as te}from"smol-toml";import{parse as f}from"yaml";const p=[`razorwind-json`,`razorwind-yaml`,`razorwind-toml`,`razorwind-css`],m=[`json`,`json5`,`jsonc`,`yaml`,`yml`,`toml`,`css`,`js`,`mjs`,`cjs`,`ts`,`mts`,`cts`],ne=m.join(`,`),h=[`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`],g=`**/*.{${ne}}`,_=/^(light|dark|dim|dimmed|high-contrast|hc|default|base|theme)([._-].+)?$/i,v={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`},re=/^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,ie=/^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,ae=/^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,oe=/^oklch\(\s*([+\d.]+%?|none)\s+([+\d.]+|none)\s+([+\d.]+|none)(?:\s*\/\s*([+\d.]+%?))?\s*\)$/i,y=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(px|rem|em|%|vh|vw|vmin|vmax|ch|ex|cm|mm|in|pt|pc)$/i,b=/^([+-]?(?:\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,le=/^\{[^{}]+\}$/,ue={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},x=new Set([`px`,`rem`]);function S(e){return Math.min(1,Math.max(0,e))}function C(e,t=100){let n=e.trim();if(n.endsWith(`%`))return S(Number.parseFloat(n)/t);let r=Number.parseFloat(n);return S(r>1?r/255:r)}function w(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 T(e){let t=w(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 E(e){return`{${e.replace(/^--/,``).split(`-`).filter(Boolean).join(`.`)}}`}function D(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function O(e){for(let t=e.length-1;t>=0;t--){let n=e[t]?.toLowerCase();if(!n)continue;let r=v[n];if(r)return r}}function k(t,n=[]){let r=O(n);if(typeof t==`string`){let e=t.trim();if(le.test(e))return{value:e,type:r};let i=e.match(ce);if(i?.[1])return{value:E(i[1]),type:r};if(re.test(e))return{value:T(e),type:`color`};let a=e.match(ie);if(a){let e=[C(a[1]),C(a[2]),C(a[3])],t=a[4]?a[4].endsWith(`%`)?S(Number.parseFloat(a[4])/100):S(Number.parseFloat(a[4])):void 0;return{value:{colorSpace:`srgb`,components:e,...t===void 0||Number.isNaN(t)?{}:{alpha:t}},type:`color`}}let o=e.match(ae);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(`%`)?S(Number.parseFloat(o[4])/100):S(Number.parseFloat(o[4]))}:{}},type:`color`};let s=e.match(oe);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(`%`)?S(Number.parseFloat(s[4])/100):S(Number.parseFloat(s[4]))}:{}},type:`color`}}let c=e.match(y);if(c){let t=c[2].toLowerCase(),n=Number.parseFloat(c[1]);return x.has(t)?{value:{value:n,unit:t},type:`dimension`}:{value:e,type:r===`dimension`?void 0:r}}let l=e.match(b);if(l)return{value:{value:Number.parseFloat(l[1]),unit:l[2].toLowerCase()},type:`duration`};let u=e.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=ue[e.toLowerCase()];return d===void 0?r===`fontFamily`||/family|font|typeface/i.test(n.at(-1)??``)?e.includes(`,`)?{value:e.split(`,`).map(e=>e.trim().replace(/^["']|["']$/g,``)),type:`fontFamily`}:{value:e.replace(/^["']|["']$/g,``),type:`fontFamily`}:r===`color`&&!e.startsWith(`{`)?{value:e,type:void 0}:{value:e,type:r}:{value:d,type:`fontWeight`}}if(typeof t==`number`)return r===`fontWeight`?{value:t,type:`fontWeight`}:r===`duration`?{value:{value:t,unit:`ms`},type:`duration`}:r===`dimension`?{value:{value:t,unit:`px`},type:`dimension`}:{value:t,type:r??`number`};if(Array.isArray(t))return t.length===4&&t.every(e=>typeof e==`number`)&&(r===`cubicBezier`||n.some(e=>/ease|bezier/i.test(e)))?{value:t,type:`cubicBezier`}:t.every(e=>typeof e==`string`)?{value:t,type:r??`fontFamily`}:{value:t,type:r};if(e(t)){if(`colorSpace`in t&&`components`in t)return{value:t,type:`color`};if(`value`in t&&`unit`in t){let e=String(t.unit).toLowerCase();return e===`ms`||e===`s`?{value:t,type:`duration`}:x.has(e)?{value:t,type:`dimension`}:{value:t,type:r}}}return{value:t,type:r}}function de(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=k(n.$value,t);n.$value=e.value,!(`$type`in n)&&e.type&&(n.$type=e.type)}return n}function A(t,n=[]){if(Array.isArray(t))return t.map((e,t)=>A(e,[...n,String(t)]));if(!e(t))return t;if(D(t))return de(t,n);let r={};for(let[e,i]of Object.entries(t)){if(e.startsWith(`$`)){r[e]=i;continue}r[e]=A(i,[...n,e])}if(!(`$type`in r)){let e=O(n);e&&n.length>0&&(r.$type=e)}return r}function j(t){let n={};for(let[r,i]of Object.entries(t)){let t=r.replace(/^--/,``).split(/[-./]/).filter(Boolean);if(t.length===0)continue;let a=n;for(let n=0;n<t.length-1;n++){let r=t[n],i=a[r];e(i)?D(i)&&(a[r]={DEFAULT:i}):a[r]={},a=a[r]}let o=t.at(-1),s=k(i,t),c={$value:s.value,...s.type?{$type:s.type}:{}},l=a[o];e(l)&&!D(l)?l.DEFAULT=c:a[o]=c}return A(n)}const fe=/(--[A-Z_][\w-]*)\s*:\s*([^;}{]+?)(?=\s*(?:;|\}|$))/gi;function M(e){let t={},n=e.replace(/\/\*[\s\S]*?\*\//g,``);for(let e of n.matchAll(fe)){let n=e[1],r=e[2]?.trim();!n||!r||(t[n]=r)}return j(t)}const N=`razorwind-infer`;function P(e){if(e==null)return{};if(typeof e!=`object`||Array.isArray(e))throw TypeError(`Token file must parse to a plain object.`);return A(e)}function F(e){try{return P(ee.parse(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse JSON token file: ${t}`)}}function I(e){try{return P(f(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse YAML token file: ${t}`)}}function L(e){try{return P(te(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse TOML token file: ${t}`)}}const R=[{name:`razorwind-json`,pattern:/\.json[c5]?$/i,parser:({contents:e})=>F(e)},{name:`razorwind-yaml`,pattern:/\.ya?ml$/i,parser:({contents:e})=>I(e)},{name:`razorwind-toml`,pattern:/\.toml$/i,parser:({contents:e})=>L(e)},{name:`razorwind-css`,pattern:/\.css$/i,parser:({contents:e})=>A(M(e))}];function z(){return Object.fromEntries(R.map(({name:e,pattern:t,parser:n})=>[e,{pattern:t,parser:n}]))}function B(e){return A(e)}function V(){return{[N]:B}}function H(e=[],n=t){for(let e of R)n.registerParser(e);n.registerPreprocessor({name:N,preprocessor:B});let r=0,i=0;for(let t of e){for(let e of t.parsers??[])n.registerParser({name:e.name??`${t.name}-parser-${r}`,pattern:e.pattern,parser:({contents:t})=>e.parser(t)}),r++;for(let e of t.preprocessors??[])n.registerPreprocessor(l(e)?{name:`${t.name}-preprocessor-${i}`,preprocessor:e}:{name:e.name??`${t.name}-preprocessor-${i}`,preprocessor:e.preprocessor}),i++}}const pe=H;function U(e,t){return s(t)?t:c(e,t)}function W(e){return/\.([^.]+)$/.exec(e)?.[1]?.toLowerCase()??``}function G(e){return m.includes(W(e))}function K(e){let t=e.split(/[/\\]/).pop()?.toLowerCase()??``;return t.startsWith(`style-dictionary.config.`)||t.startsWith(`sd.config.`)}function q(e){return i(e,g)}function me(e){return Array.isArray(e)?e.filter(a):a(e)?[e]:[]}function he(e,t){let i=U(e,t);if(!n(i))throw Error(`tokensPath "${t}" does not exist (resolved: ${i}).`);return r(i)?{resolvedPath:i,source:[q(i)],isStyleDictionaryConfig:!1}:K(i)?{resolvedPath:i,source:[],isStyleDictionaryConfig:!0}:{resolvedPath:i,source:[i],isStyleDictionaryConfig:!1}}function J(e){let{cwd:t,tokensPath:i,fallbackPaths:a=[]}=e,o=me(i);if(o.length>0){let e=o.map(e=>he(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 h){let i=U(t,e);if(n(i)){if(r(i))return{resolvedPath:i,source:[q(i)],origin:`default`};if(K(i))return{resolvedPath:i,source:[],origin:`default`};if(G(i))return{resolvedPath:i,source:[i],origin:`default`}}}for(let e of a){if(!e)continue;let i=U(t,e);if(!(!n(i)||r(i))&&(G(i)||W(i)===`css`))return{resolvedPath:i,source:[i],origin:`fallback`}}return{source:[],origin:`none`}}function Y(e){return(e.split(/[/\\]/).pop()??``).replace(/\.[^.]+$/,``).match(_)?.[1]?.toLowerCase()}function ge(e){H(e.plugins,t)}function X(e){return!e||typeof e!=`object`||Object.keys(e).length===0}async function _e(e){let t=await u(e);return t&&typeof t==`object`&&`default`in t&&t.default?t.default:t}async function Z(e,n){ge(e);let r=new t({...n,parsers:[...p,...n.parsers??[]],preprocessors:[N,...n.preprocessors??[]],hooks:{...n.hooks,parsers:{...z(),...n.hooks?.parsers},preprocessors:{...V(),...n.hooks?.preprocessors}},usesDtcg:n.usesDtcg??!0,platforms:n.platforms??{}});return await r.hasInitialized,r}async function Q(e,t){return t.length===0?{}:(await Z(e,{source:t})).tokens}async function ve(e){return(await d(e,{absolute:!0,onlyFiles:!0,unique:!0})).sort()}async function ye(e,t){let n=await ve(t);if(n.length===0)return{};let r=new Map,i=[];for(let e of n){let t=Y(e);if(t){let n=r.get(t)??[];n.push(e),r.set(t,n)}else i.push(e)}if(r.size<2)return Q(e,t);let a={};if(i.length>0){let t=await Q(e,i);X(t)||(a.base=t)}for(let[t,n]of r)a[t]=await Q(e,n);return a}async function $(e){let t=J(e.options);return t.resolvedPath&&n(t.resolvedPath)&&/(?:^|[/\\])(?:style-dictionary|sd)\.config\./i.test(o(t.resolvedPath))?(e.sd=await Z(e.options,await _e(t.resolvedPath)),e.sd.tokens):t.source.length===0?{}:e.options.splitThemes?ye(e.options,t.source):Q(e.options,t.source)}async function be(e){let t=await $(e);if(X(t)){let{tokensPath:t}=e.options,n=Array.isArray(t)?t.length>0?`tokensPath=[${t.map(e=>`"${e}"`).join(`, `)}]`:`default token paths / CSS fallbacks`:a(t)?`tokensPath="${t}"`:`default token paths / CSS fallbacks`;throw Error(`No design tokens found via ${n}. Provide tokensPath or add a tokens file.`)}return t}export{_,N as a,p as b,B as c,M as d,O as f,h as g,A as h,Y as i,H as l,j as m,be as n,z as o,k as p,J as r,V as s,$ as t,pe as u,g as v,v as x,m as y};
2
+ //# sourceMappingURL=tokens-lbmSdrlF.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens-lbmSdrlF.mjs","names":[],"sources":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@razorwind/core",
3
- "version": "0.0.16",
3
+ "version": "0.0.18",
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"],
@@ -54,6 +54,20 @@
54
54
  "default": "./dist/index.mjs"
55
55
  }
56
56
  },
57
+ "./lib/tokens": {
58
+ "require": {
59
+ "types": "./dist/lib/tokens/index.d.cts",
60
+ "default": "./dist/lib/tokens/index.cjs"
61
+ },
62
+ "import": {
63
+ "types": "./dist/lib/tokens/index.d.mts",
64
+ "default": "./dist/lib/tokens/index.mjs"
65
+ },
66
+ "default": {
67
+ "types": "./dist/lib/tokens/index.d.mts",
68
+ "default": "./dist/lib/tokens/index.mjs"
69
+ }
70
+ },
57
71
  "./package.json": "./package.json",
58
72
  "./plugin": {
59
73
  "require": {
@@ -104,10 +118,10 @@
104
118
  "typings": "dist/index.d.mts",
105
119
  "files": ["dist"],
106
120
  "dependencies": {
107
- "@power-plant/core": "^0.0.61",
121
+ "@power-plant/core": "^0.0.63",
108
122
  "@power-plant/dtcg-schema": "^0.0.1",
109
- "@power-plant/schema": "^0.0.59",
110
- "@power-plant/utils": "^0.0.47",
123
+ "@power-plant/schema": "^0.0.61",
124
+ "@power-plant/utils": "^0.0.49",
111
125
  "@stryke/env": "^0.20.117",
112
126
  "@stryke/fs": "^0.33.100",
113
127
  "@stryke/path": "^0.29.26",
@@ -126,10 +140,10 @@
126
140
  "zod": "^4.4.3"
127
141
  },
128
142
  "devDependencies": {
129
- "@powerlines/plugin-tsdown": "^0.1.581",
143
+ "@powerlines/plugin-tsdown": "^0.1.582",
130
144
  "@types/node": "^25.9.5",
131
145
  "typescript": "^6.0.3"
132
146
  },
133
147
  "publishConfig": { "access": "public" },
134
- "gitHead": "6055ce9d20a4488ee965a471c76c51380e2e85af"
148
+ "gitHead": "ecac5026a8ff95f4e7a55188fc7a7848031fb0ca"
135
149
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-B1R5dPEv.d.mts","names":[],"sources":["../src/types/plugin.ts","../src/types/config.ts","../src/plugin.ts"],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-CCSoeiLW.d.cts","names":[],"sources":["../src/types/plugin.ts","../src/types/config.ts","../src/plugin.ts"],"mappings":";;;;;;;;;;;;;;;UAgCiB;EACf;EACA,SAAS;EACT,SAAS,qBAAqB;;;;;;;;;KAUpB;EAEN;EACA,eAAe,YAAY,uBAAuB;MAElD,YAAY,uBAAuB;;;;;;;;;UAUxB;;;;;;;EAOf;;;;;;EAOA,UAAU;;;;;;EAOV,gBAAgB;;;;;;;;EAShB,WAAW,MAAM,QAAQ,QAAQ,WAAW,aAAa;;;;;;;;EASzD,YACE,MAAM,QACN,QAAQ,WACL,aAAa,eAAe;;;;;;;;EASjC,YAAY,MAAM,QAAQ,QAAQ,WAAW;;;;UCvF9B;;;;;;EAMf;;;;EAKA;;;;;;;;EASA;;;;;;EAOA;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BA;;UAGe,mBAAmB;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,SAAS,eAAe;EACjC,aAAa;EACb,UAAU;;UAGK;EACf;EACA;;KAGU,sBAAsB,QAAQ,eAAe;KAC7C,uBACV,QAAQ,qBACL,QAAQ,aAAa;KACd,gBACV,QAAQ,qBACL,aAAa,eAAe,QAAQ,aAAa;KAC1C,mBACR,aACA,eACA,QAAQ,aAAa,gBACrB,qBACA,sBACA;KAEQ,SAAS,aAAa;EAChC;EACA,UAAU;IACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCvDY,aACd,UAAU,kBAAkB,UAC1B,kBAAkB;iBACN,aAAa,QAAQ,SAAS"}
@@ -1 +0,0 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));let c=require("zod");c=s(c,1);let l=require("@power-plant/dtcg-schema");const u=c.z.object({path:c.z.string(),type:c.z.enum([`lib`,`block`,`component`,`ui`,`hook`,`theme`,`page`,`file`,`style`,`base`,`font`,`item`]),content:c.z.string().optional(),target:c.z.string().optional().describe(`The target path of the file. This is the path to the file in the project. Supports registry target placeholders @components/, @ui/, @lib/, and @hooks/, which resolve to the corresponding aliases configured in components.json. These placeholders are independent of the project's import prefix.`)}),d=c.z.object({name:c.z.string(),title:c.z.string(),type:c.z.enum([`block`,`component`,`ui`,`page`]).optional(),category:c.z.string().optional(),description:c.z.string().optional(),tags:c.z.array(c.z.string()).optional(),related:c.z.array(c.z.string()).optional(),since:c.z.string().optional(),version:c.z.string().optional(),repository:c.z.string().optional(),homepage:c.z.string().optional(),dependencies:c.z.record(c.z.string(),c.z.string()).optional(),devDependencies:c.z.record(c.z.string(),c.z.string()).optional(),registryDependencies:c.z.record(c.z.string(),c.z.string()).optional(),files:c.z.array(u).optional()}),f=c.z.record(c.z.string(),d),p=c.default.union([l.tokensSchema,c.default.record(c.default.string(),l.tokensSchema)]),m=c.default.object({tokens:p,components:f});Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return m}});