@frontfriend/tailwind 2.5.0 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +2 -2
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +2 -2
- package/dist/lib/core/token-processor.js +1 -1
- package/dist/lib/core/token-processor.js.map +3 -3
- package/dist/next.js +1 -1
- package/dist/next.js.map +3 -3
- package/dist/scripts/generate-icon-types.js +1 -1
- package/package.json +1 -1
- package/scripts/generate-icon-types.js +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var W=(t,n)=>()=>(n||t((n={exports:{}}).exports,n),n.exports);var q=W((K,O)=>{var D=require("fs"),E=require("path");function M(t={}){let n=t.projectRoot||process.cwd(),o=E.join(n,"node_modules",".cache","frontfriend","icons.json"),p=t.outputPath||E.join(n,"types","frontfriend.d.ts");D.existsSync(o)||(console.error('[FrontFriend] Error: icons.json not found. Please run "npx frontfriend
|
|
2
|
+
var W=(t,n)=>()=>(n||t((n={exports:{}}).exports,n),n.exports);var q=W((K,O)=>{var D=require("fs"),E=require("path");function M(t={}){let n=t.projectRoot||process.cwd(),o=E.join(n,"node_modules",".cache","frontfriend","icons.json"),p=t.outputPath||E.join(n,"types","frontfriend.d.ts");D.existsSync(o)||(console.error('[FrontFriend] Error: icons.json not found. Please run "npx frontfriend init" first.'),process.exit(1));try{let h=function(y){for(let f of Object.values(y))typeof f=="string"?d.add(f):typeof f=="object"&&f!==null&&h(f)},x=function(y,f=" "){let k=[];for(let[S,s]of Object.entries(y))typeof s=="string"?k.push(`${f}${S}: '${s}';`):typeof s=="object"&&s!==null&&(k.push(`${f}${S}: {`),k.push(x(s,f+" ")),k.push(`${f}};`));return k.join(`
|
|
3
3
|
`)};var a=h,m=x;let c=JSON.parse(D.readFileSync(o,"utf-8")),d=new Set;h(c);let e=Array.from(d).map(y=>`'${y}'`).join(" | "),i=`// Generated by @frontfriend/tailwind
|
|
4
4
|
// DO NOT EDIT THIS FILE MANUALLY
|
|
5
5
|
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
var y=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var D=y((de,F)=>{var m=require("fs");function L(e){try{let t=m.readFileSync(e,"utf8");return JSON.parse(t)}catch(t){if(t.code==="ENOENT")return null;throw t}}function q(e){try{return m.readFileSync(e,"utf8")}catch(t){if(t.code==="ENOENT")return null;throw t}}function P(e,t,i=2){let r=JSON.stringify(t,null,i);m.writeFileSync(e,r,"utf8")}function R(e,t){if(t==null||typeof t=="object"&&Object.keys(t).length===0||Array.isArray(t)&&t.length===0){let r=`module.exports = ${Array.isArray(t)?"[]":"{}"};`;m.writeFileSync(e,r,"utf8")}else{let i=`module.exports = ${JSON.stringify(t,null,2)};`;m.writeFileSync(e,i,"utf8")}}function K(e){return m.existsSync(e)}function Y(e){m.mkdirSync(e,{recursive:!0})}function M(e){m.rmSync(e,{recursive:!0,force:!0})}F.exports={readJsonFileSafe:L,readFileSafe:q,writeJsonFile:P,writeModuleExportsFile:R,fileExists:K,ensureDirectoryExists:Y,removeDirectory:M}});var N=y((pe,W)=>{W.exports={name:"dotenv",version:"16.6.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard",pretest:"npm run lint && npm run dts-check",test:"tap run --allow-empty-coverage --disable-coverage --timeout=60000","test:coverage":"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},homepage:"https://github.com/motdotla/dotenv#readme",funding:"https://dotenvx.com",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@types/node":"^18.11.3",decache:"^4.6.2",sinon:"^14.0.1",standard:"^17.0.0","standard-version":"^9.5.0",tap:"^19.2.0",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var V=y((ve,v)=>{var _=require("fs"),b=require("path"),J=require("os"),G=require("crypto"),U=N(),E=U.version,B=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function Q(e){let t={},i=e.toString();i=i.replace(/\r\n?/mg,`
|
|
2
2
|
`);let r;for(;(r=B.exec(i))!=null;){let l=r[1],a=r[2]||"";a=a.trim();let o=a[0];a=a.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),o==='"'&&(a=a.replace(/\\n/g,`
|
|
3
|
-
`),a=a.replace(/\\r/g,"\r")),t[l]=a}return t}function z(e){e=e||{};let t=j(e);e.path=t;let i=d.configDotenv(e);if(!i.parsed){let o=new Error(`MISSING_DATA: Cannot parse ${t} for an unknown reason`);throw o.code="MISSING_DATA",o}let r=k(e).split(","),l=r.length,a;for(let o=0;o<l;o++)try{let u=r[o].trim(),n=X(i,u);a=d.decrypt(n.ciphertext,n.key);break}catch(u){if(o+1>=l)throw u}return d.parse(a)}function H(e){console.log(`[dotenv@${E}][WARN] ${e}`)}function w(e){console.log(`[dotenv@${E}][DEBUG] ${e}`)}function $(e){console.log(`[dotenv@${E}] ${e}`)}function k(e){return e&&e.DOTENV_KEY&&e.DOTENV_KEY.length>0?e.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function X(e,t){let i;try{i=new URL(t)}catch(u){if(u.code==="ERR_INVALID_URL"){let n=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw n.code="INVALID_DOTENV_KEY",n}throw u}let r=i.password;if(!r){let u=new Error("INVALID_DOTENV_KEY: Missing key part");throw u.code="INVALID_DOTENV_KEY",u}let l=i.searchParams.get("environment");if(!l){let u=new Error("INVALID_DOTENV_KEY: Missing environment part");throw u.code="INVALID_DOTENV_KEY",u}let a=`DOTENV_VAULT_${l.toUpperCase()}`,o=e.parsed[a];if(!o){let u=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${a} in your .env.vault file.`);throw u.code="NOT_FOUND_DOTENV_ENVIRONMENT",u}return{ciphertext:o,key:r}}function j(e){let t=null;if(e&&e.path&&e.path.length>0)if(Array.isArray(e.path))for(let i of e.path)_.existsSync(i)&&(t=i.endsWith(".vault")?i:`${i}.vault`);else t=e.path.endsWith(".vault")?e.path:`${e.path}.vault`;else t=b.resolve(process.cwd(),".env.vault");return _.existsSync(t)?t:null}function O(e){return e[0]==="~"?b.join(J.homedir(),e.slice(1)):e}function Z(e){let t=!!(e&&e.debug),i=e&&"quiet"in e?e.quiet:!0;(t||!i)&&$("Loading env from encrypted .env.vault");let r=d._parseVault(e),l=process.env;return e&&e.processEnv!=null&&(l=e.processEnv),d.populate(l,r,e),{parsed:r}}function ee(e){let t=b.resolve(process.cwd(),".env"),i="utf8",r=!!(e&&e.debug),l=e&&"quiet"in e?e.quiet:!0;e&&e.encoding?i=e.encoding:r&&w("No encoding is specified. UTF-8 is used by default");let a=[t];if(e&&e.path)if(!Array.isArray(e.path))a=[O(e.path)];else{a=[];for(let s of e.path)a.push(O(s))}let o,u={};for(let s of a)try{let c=d.parse(_.readFileSync(s,{encoding:i}));d.populate(u,c,e)}catch(c){r&&w(`Failed to load ${s} ${c.message}`),o=c}let n=process.env;if(e&&e.processEnv!=null&&(n=e.processEnv),d.populate(n,u,e),r||!l){let s=Object.keys(u).length,c=[];for(let f of a)try{let p=b.relative(process.cwd(),f);c.push(p)}catch(p){r&&w(`Failed to load ${f} ${p.message}`),o=p}$(`injecting env (${s}) from ${c.join(",")}`)}return o?{parsed:u,error:o}:{parsed:u}}function te(e){if(k(e).length===0)return d.configDotenv(e);let t=j(e);return t?d._configVault(e):(H(`You set DOTENV_KEY but you are missing a .env.vault file at ${t}. Did you forget to build it?`),d.configDotenv(e))}function ne(e,t){let i=Buffer.from(t.slice(-64),"hex"),r=Buffer.from(e,"base64"),l=r.subarray(0,12),a=r.subarray(-16);r=r.subarray(12,-16);try{let o=G.createDecipheriv("aes-256-gcm",i,l);return o.setAuthTag(a),`${o.update(r)}${o.final()}`}catch(o){let u=o instanceof RangeError,n=o.message==="Invalid key length",s=o.message==="Unsupported state or unable to authenticate data";if(u||n){let c=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw c.code="INVALID_DOTENV_KEY",c}else if(s){let c=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw c.code="DECRYPTION_FAILED",c}else throw o}}function re(e,t,i={}){let r=!!(i&&i.debug),l=!!(i&&i.override);if(typeof t!="object"){let a=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw a.code="OBJECT_REQUIRED",a}for(let a of Object.keys(t))Object.prototype.hasOwnProperty.call(e,a)?(l===!0&&(e[a]=t[a]),r&&w(l===!0?`"${a}" is already defined and WAS overwritten`:`"${a}" is already defined and was NOT overwritten`)):e[a]=t[a]}var d={configDotenv:ee,_configVault:Z,_parseVault:z,config:te,decrypt:ne,parse:Q,populate:re};v.exports.configDotenv=d.configDotenv;v.exports._configVault=d._configVault;v.exports._parseVault=d._parseVault;v.exports.config=d.config;v.exports.decrypt=d.decrypt;v.exports.parse=d.parse;v.exports.populate=d.populate;v.exports=d});var S=y((ge,T)=>{var oe=require("path"),{fileExists:ie}=D();function ae(e=process.cwd()){let t=oe.join(e,".env.local");return ie(t)?(V().config({path:t}),console.log("\u{1F4C4} Loaded .env.local"),!0):!1}function se(e,t=void 0){return process.env[e]||t}function ce(e){return process.env[e]==="true"}T.exports={loadEnvLocal:ae,getEnvVar:se,isEnvTrue:ce}});var I=y((me,C)=>{C.exports=function(t){if(!t)return{};if(typeof t!="object")throw new Error("Config must be an object");return t}});var le=require("tailwindcss/plugin"),x;try{x=require("postcss")}catch{x=null}var g;if(typeof window>"u"&&typeof process<"u"&&process.versions&&process.versions.node){g=require("./lib/core/cache-manager");let{loadEnvLocal:e}=S();e()}function A(e){return Object.fromEntries(Object.entries(e).filter(([t])=>t!=="DEFAULT"))}var ue=le.withOptions(function(e={}){return function({addBase:t,addUtilities:i,theme:r,matchUtilities:l}){if(!g)return;let a=new g(process.cwd());if(!a.exists()){console.warn('[FrontFriend] No cache found. Please run "npx frontfriend setup" first.');return}a.isValid()||console.warn('[FrontFriend] Cache is expired. Please run "npx frontfriend setup" to refresh.');let o=a.load();if(!o){console.error("[FrontFriend] Failed to load cache.");return}let u={};if(o.variables)for(let[n,s]of Object.entries(o.variables))n.startsWith("--color-")&&!s.startsWith("hsl(")?u[n]=`hsl(${s})`:u[n]=s;if(o.semanticVariables)for(let[n,s]of Object.entries(o.semanticVariables))u[n]=s;if(t({":root":u}),o.semanticDarkVariables&&Object.keys(o.semanticDarkVariables).length>0&&(t({":root:not(.light)":o.semanticDarkVariables}),t({":root:not(.dark)":o.semanticVariables})),o.semanticVariables){let n={};for(let[s]of Object.entries(o.semanticVariables)){let c=s.match(/^--(bg|text|border|layer|overlay|icon)-(.+)$/);if(c){let[,f,p]=c,h=`.${f}-${p}`;f==="bg"||f==="layer"||f==="overlay"?n[h]={backgroundColor:`var(${s})`}:f==="text"?n[h]={color:`var(${s})`}:f==="border"?n[h]={borderColor:`var(${s})`}:f==="icon"&&(n[`.text-${f}-${p}`]={color:`var(${s})`},n[`.fill-${f}-${p}`]={fill:`var(${s})`})}}i(n)}if(o.tokens){if(o.tokens.backgroundColor){let n={};for(let[s,c]of Object.entries(o.tokens.backgroundColor))n[`.bg-${s}`]={backgroundColor:c};i(n)}if(o.tokens.textColor){let n={};for(let[s,c]of Object.entries(o.tokens.textColor))n[`.text-${s}`]={color:c};i(n)}if(o.tokens.borderColor){let n={};for(let[s,c]of Object.entries(o.tokens.borderColor))n[`.border-${s}`]={borderColor:c};i(n)}if(o.tokens.fill){let n={},s={};for(let[c,f]of Object.entries(o.tokens.fill))n[`.fill-${c}`]={fill:f},c.startsWith("icon-")&&(s[`.text-${c}`]={color:f});i(n),i(s)}if(o.tokens.fontFamily){let n={};for(let[s,c]of Object.entries(o.tokens.fontFamily))n[`.font-${s}`]={fontFamily:c};i(n)}}if(o.fonts&&o.fonts.length>0&&o.fonts.forEach(n=>{t({"@font-face":n})}),i({"@keyframes enter":r("keyframes.enter"),"@keyframes exit":r("keyframes.exit"),".animate-in":{animationName:"enter",animationDuration:r("animationDuration.DEFAULT"),"--tw-enter-opacity":"initial","--tw-enter-scale":"initial","--tw-enter-rotate":"initial","--tw-enter-translate-x":"initial","--tw-enter-translate-y":"initial"},".animate-out":{animationName:"exit",animationDuration:r("animationDuration.DEFAULT"),"--tw-exit-opacity":"initial","--tw-exit-scale":"initial","--tw-exit-rotate":"initial","--tw-exit-translate-x":"initial","--tw-exit-translate-y":"initial"}}),l({"fade-in":n=>({"--tw-enter-opacity":n}),"fade-out":n=>({"--tw-exit-opacity":n})},{values:r("animationOpacity")}),l({"zoom-in":n=>({"--tw-enter-scale":n}),"zoom-out":n=>({"--tw-exit-scale":n})},{values:r("animationScale")}),l({"spin-in":n=>({"--tw-enter-rotate":n}),"spin-out":n=>({"--tw-exit-rotate":n})},{values:r("animationRotate")}),l({"slide-in-from-top":n=>({"--tw-enter-translate-y":`-${n}`}),"slide-in-from-bottom":n=>({"--tw-enter-translate-y":n}),"slide-in-from-left":n=>({"--tw-enter-translate-x":`-${n}`}),"slide-in-from-right":n=>({"--tw-enter-translate-x":n}),"slide-out-to-top":n=>({"--tw-exit-translate-y":`-${n}`}),"slide-out-to-bottom":n=>({"--tw-exit-translate-y":n}),"slide-out-to-left":n=>({"--tw-exit-translate-x":`-${n}`}),"slide-out-to-right":n=>({"--tw-exit-translate-x":n})},{values:r("animationTranslate")}),l({duration:n=>({animationDuration:n})},{values:A(r("animationDuration"))}),l({delay:n=>({animationDelay:n})},{values:r("animationDelay")}),l({ease:n=>({animationTimingFunction:n})},{values:A(r("animationTimingFunction"))}),i({".running":{animationPlayState:"running"},".paused":{animationPlayState:"paused"}}),l({"fill-mode":n=>({animationFillMode:n})},{values:r("animationFillMode")}),l({direction:n=>({animationDirection:n})},{values:r("animationDirection")}),l({repeat:n=>({animationIterationCount:n})},{values:r("animationRepeat")}),o.custom&&o.custom.raw&&typeof o.custom.raw=="string"){let n=o.custom.raw.trim();if(!n){e.verbose&&console.warn("[FrontFriend] Empty custom CSS");return}if(!x){console.warn("[FrontFriend] PostCSS not available - custom CSS will not be added");return}try{let s=x.parse(n),c=[],f=[];s.each(p=>{if(p.type==="atrule"){c.push(p);return}if(p.type==="rule"){typeof p.selector=="string"&&p.selector.trim().startsWith(".")?f.push(p):c.push(p);return}p.type!=="comment"&&c.push(p)}),c.length>0&&t(c),f.length>0&&i(f),e.verbose&&console.log(`[FrontFriend] Added custom CSS: ${c.length} base rules, ${f.length} utility classes`)}catch(s){console.error("[FrontFriend] Failed to parse custom CSS:",s.message)}}e.verbose&&(console.log("[FrontFriend] Plugin loaded successfully"),console.log(`[FrontFriend] Colors: ${Object.keys(o.variables||{}).length}`),console.log(`[FrontFriend] Semantic vars: ${Object.keys(o.semanticVariables||{}).length}`),console.log(`[FrontFriend] Fonts: ${(o.fonts||[]).length}`),console.log(`[FrontFriend] Safelist classes: ${Array.isArray(o.safelist)?o.safelist.length:0}`))}},function(e={}){let t=null;if(g){let r=new g(process.cwd());t=r.exists()?r.load():null}let i=["./pages/**/*.{js,ts,jsx,tsx}","./components/**/*.{js,ts,jsx,tsx}","./app/**/*.{js,ts,jsx,tsx}","./src/**/*.{js,ts,jsx,tsx}","./stories/**/*.{js,ts,jsx,tsx}"];return e.verbose&&t&&(console.log("[FrontFriend] Cache loaded successfully"),t.safelist&&Array.isArray(t.safelist)&&console.log(`[FrontFriend] Loading ${t.safelist.length} classes for safelist`)),{theme:{extend:{colors:e.extendColors||{},animation:e.extendAnimations||{},spacing:{18:"4.5rem",88:"22rem",128:"32rem"},boxShadow:{"top-sm":"0 -1px 1px 0 rgba(0, 0, 0, 0.05)"},borderRadius:{"2xl":"1rem"},animationDelay:({theme:r})=>({...r("transitionDelay")}),animationDuration:({theme:r})=>({0:"0ms",...r("transitionDuration")}),animationTimingFunction:({theme:r})=>({...r("transitionTimingFunction")}),animationFillMode:{none:"none",forwards:"forwards",backwards:"backwards",both:"both"},animationDirection:{normal:"normal",reverse:"reverse",alternate:"alternate","alternate-reverse":"alternate-reverse"},animationOpacity:({theme:r})=>({DEFAULT:0,...r("opacity")}),animationTranslate:({theme:r})=>({DEFAULT:"100%",...r("translate")}),animationScale:({theme:r})=>({DEFAULT:0,...r("scale")}),animationRotate:({theme:r})=>({DEFAULT:"30deg",...r("rotate")}),animationRepeat:{0:"0",1:"1",infinite:"infinite"},keyframes:{enter:{from:{opacity:"var(--tw-enter-opacity, 1)",transform:"translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))"}},exit:{to:{opacity:"var(--tw-exit-opacity, 1)",transform:"translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))"}}}}},safelist:[...(t==null?void 0:t.safelist)||[],{pattern:/(text|fill)-icon-(neutral|positive|negative|warning|info|highlight|interactive|brand|inverse|onpositive|onnegative|onwarning|oninfo|onhighlight|oninteractive|onbrand)-(mid|strong|subtle|low)(-(neutral|hover|active|selected|disabled))?$/},{pattern:/^(layer-(below|surface|raised|popover|dialog|control)|overlay-(mid|strong|subtle|low))$/}],content:e.content||i}});module.exports=ue;Object.defineProperty(module.exports,"config",{get:function(){if(typeof __FF_CONFIG__<"u")return __FF_CONFIG__;if(typeof window<"u"&&window.__FF_CONFIG__)return window.__FF_CONFIG__;if(g)try{let e=new g(process.cwd());if(e.exists()){let t=e.load();if(t)return t.componentsConfig||null}}catch{}return null}});Object.defineProperty(module.exports,"iconSet",{get:function(){if(typeof __FF_ICONS__<"u")return __FF_ICONS__;if(typeof window<"u"&&window.__FF_ICONS__)return window.__FF_ICONS__;if(g)try{let e=new g(process.cwd());if(e.exists()){let t=e.load();if(t)return t.icons||null}}catch{}return null}});module.exports.ffdc=I();
|
|
3
|
+
`),a=a.replace(/\\r/g,"\r")),t[l]=a}return t}function z(e){e=e||{};let t=j(e);e.path=t;let i=d.configDotenv(e);if(!i.parsed){let o=new Error(`MISSING_DATA: Cannot parse ${t} for an unknown reason`);throw o.code="MISSING_DATA",o}let r=k(e).split(","),l=r.length,a;for(let o=0;o<l;o++)try{let u=r[o].trim(),n=X(i,u);a=d.decrypt(n.ciphertext,n.key);break}catch(u){if(o+1>=l)throw u}return d.parse(a)}function H(e){console.log(`[dotenv@${E}][WARN] ${e}`)}function w(e){console.log(`[dotenv@${E}][DEBUG] ${e}`)}function $(e){console.log(`[dotenv@${E}] ${e}`)}function k(e){return e&&e.DOTENV_KEY&&e.DOTENV_KEY.length>0?e.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function X(e,t){let i;try{i=new URL(t)}catch(u){if(u.code==="ERR_INVALID_URL"){let n=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw n.code="INVALID_DOTENV_KEY",n}throw u}let r=i.password;if(!r){let u=new Error("INVALID_DOTENV_KEY: Missing key part");throw u.code="INVALID_DOTENV_KEY",u}let l=i.searchParams.get("environment");if(!l){let u=new Error("INVALID_DOTENV_KEY: Missing environment part");throw u.code="INVALID_DOTENV_KEY",u}let a=`DOTENV_VAULT_${l.toUpperCase()}`,o=e.parsed[a];if(!o){let u=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${a} in your .env.vault file.`);throw u.code="NOT_FOUND_DOTENV_ENVIRONMENT",u}return{ciphertext:o,key:r}}function j(e){let t=null;if(e&&e.path&&e.path.length>0)if(Array.isArray(e.path))for(let i of e.path)_.existsSync(i)&&(t=i.endsWith(".vault")?i:`${i}.vault`);else t=e.path.endsWith(".vault")?e.path:`${e.path}.vault`;else t=b.resolve(process.cwd(),".env.vault");return _.existsSync(t)?t:null}function O(e){return e[0]==="~"?b.join(J.homedir(),e.slice(1)):e}function Z(e){let t=!!(e&&e.debug),i=e&&"quiet"in e?e.quiet:!0;(t||!i)&&$("Loading env from encrypted .env.vault");let r=d._parseVault(e),l=process.env;return e&&e.processEnv!=null&&(l=e.processEnv),d.populate(l,r,e),{parsed:r}}function ee(e){let t=b.resolve(process.cwd(),".env"),i="utf8",r=!!(e&&e.debug),l=e&&"quiet"in e?e.quiet:!0;e&&e.encoding?i=e.encoding:r&&w("No encoding is specified. UTF-8 is used by default");let a=[t];if(e&&e.path)if(!Array.isArray(e.path))a=[O(e.path)];else{a=[];for(let s of e.path)a.push(O(s))}let o,u={};for(let s of a)try{let c=d.parse(_.readFileSync(s,{encoding:i}));d.populate(u,c,e)}catch(c){r&&w(`Failed to load ${s} ${c.message}`),o=c}let n=process.env;if(e&&e.processEnv!=null&&(n=e.processEnv),d.populate(n,u,e),r||!l){let s=Object.keys(u).length,c=[];for(let f of a)try{let p=b.relative(process.cwd(),f);c.push(p)}catch(p){r&&w(`Failed to load ${f} ${p.message}`),o=p}$(`injecting env (${s}) from ${c.join(",")}`)}return o?{parsed:u,error:o}:{parsed:u}}function te(e){if(k(e).length===0)return d.configDotenv(e);let t=j(e);return t?d._configVault(e):(H(`You set DOTENV_KEY but you are missing a .env.vault file at ${t}. Did you forget to build it?`),d.configDotenv(e))}function ne(e,t){let i=Buffer.from(t.slice(-64),"hex"),r=Buffer.from(e,"base64"),l=r.subarray(0,12),a=r.subarray(-16);r=r.subarray(12,-16);try{let o=G.createDecipheriv("aes-256-gcm",i,l);return o.setAuthTag(a),`${o.update(r)}${o.final()}`}catch(o){let u=o instanceof RangeError,n=o.message==="Invalid key length",s=o.message==="Unsupported state or unable to authenticate data";if(u||n){let c=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw c.code="INVALID_DOTENV_KEY",c}else if(s){let c=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw c.code="DECRYPTION_FAILED",c}else throw o}}function re(e,t,i={}){let r=!!(i&&i.debug),l=!!(i&&i.override);if(typeof t!="object"){let a=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw a.code="OBJECT_REQUIRED",a}for(let a of Object.keys(t))Object.prototype.hasOwnProperty.call(e,a)?(l===!0&&(e[a]=t[a]),r&&w(l===!0?`"${a}" is already defined and WAS overwritten`:`"${a}" is already defined and was NOT overwritten`)):e[a]=t[a]}var d={configDotenv:ee,_configVault:Z,_parseVault:z,config:te,decrypt:ne,parse:Q,populate:re};v.exports.configDotenv=d.configDotenv;v.exports._configVault=d._configVault;v.exports._parseVault=d._parseVault;v.exports.config=d.config;v.exports.decrypt=d.decrypt;v.exports.parse=d.parse;v.exports.populate=d.populate;v.exports=d});var S=y((ge,T)=>{var oe=require("path"),{fileExists:ie}=D();function ae(e=process.cwd()){let t=oe.join(e,".env.local");return ie(t)?(V().config({path:t}),console.log("\u{1F4C4} Loaded .env.local"),!0):!1}function se(e,t=void 0){return process.env[e]||t}function ce(e){return process.env[e]==="true"}T.exports={loadEnvLocal:ae,getEnvVar:se,isEnvTrue:ce}});var I=y((me,C)=>{C.exports=function(t){if(!t)return{};if(typeof t!="object")throw new Error("Config must be an object");return t}});var le=require("tailwindcss/plugin"),x;try{x=require("postcss")}catch{x=null}var g;if(typeof window>"u"&&typeof process<"u"&&process.versions&&process.versions.node){g=require("./lib/core/cache-manager");let{loadEnvLocal:e}=S();e()}function A(e){return Object.fromEntries(Object.entries(e).filter(([t])=>t!=="DEFAULT"))}var ue=le.withOptions(function(e={}){return function({addBase:t,addUtilities:i,theme:r,matchUtilities:l}){if(!g)return;let a=new g(process.cwd());if(!a.exists()){console.warn('[FrontFriend] No cache found. Please run "npx frontfriend init" first.');return}a.isValid()||console.warn('[FrontFriend] Cache is expired. Please run "npx frontfriend init" to refresh.');let o=a.load();if(!o){console.error("[FrontFriend] Failed to load cache.");return}let u={};if(o.variables)for(let[n,s]of Object.entries(o.variables))n.startsWith("--color-")&&!s.startsWith("hsl(")?u[n]=`hsl(${s})`:u[n]=s;if(o.semanticVariables)for(let[n,s]of Object.entries(o.semanticVariables))u[n]=s;if(t({":root":u}),o.semanticDarkVariables&&Object.keys(o.semanticDarkVariables).length>0&&(t({":root:not(.light)":o.semanticDarkVariables}),t({":root:not(.dark)":o.semanticVariables})),o.semanticVariables){let n={};for(let[s]of Object.entries(o.semanticVariables)){let c=s.match(/^--(bg|text|border|layer|overlay|icon)-(.+)$/);if(c){let[,f,p]=c,h=`.${f}-${p}`;f==="bg"||f==="layer"||f==="overlay"?n[h]={backgroundColor:`var(${s})`}:f==="text"?n[h]={color:`var(${s})`}:f==="border"?n[h]={borderColor:`var(${s})`}:f==="icon"&&(n[`.text-${f}-${p}`]={color:`var(${s})`},n[`.fill-${f}-${p}`]={fill:`var(${s})`})}}i(n)}if(o.tokens){if(o.tokens.backgroundColor){let n={};for(let[s,c]of Object.entries(o.tokens.backgroundColor))n[`.bg-${s}`]={backgroundColor:c};i(n)}if(o.tokens.textColor){let n={};for(let[s,c]of Object.entries(o.tokens.textColor))n[`.text-${s}`]={color:c};i(n)}if(o.tokens.borderColor){let n={};for(let[s,c]of Object.entries(o.tokens.borderColor))n[`.border-${s}`]={borderColor:c};i(n)}if(o.tokens.fill){let n={},s={};for(let[c,f]of Object.entries(o.tokens.fill))n[`.fill-${c}`]={fill:f},c.startsWith("icon-")&&(s[`.text-${c}`]={color:f});i(n),i(s)}if(o.tokens.fontFamily){let n={};for(let[s,c]of Object.entries(o.tokens.fontFamily))n[`.font-${s}`]={fontFamily:c};i(n)}}if(o.fonts&&o.fonts.length>0&&o.fonts.forEach(n=>{t({"@font-face":n})}),i({"@keyframes enter":r("keyframes.enter"),"@keyframes exit":r("keyframes.exit"),".animate-in":{animationName:"enter",animationDuration:r("animationDuration.DEFAULT"),"--tw-enter-opacity":"initial","--tw-enter-scale":"initial","--tw-enter-rotate":"initial","--tw-enter-translate-x":"initial","--tw-enter-translate-y":"initial"},".animate-out":{animationName:"exit",animationDuration:r("animationDuration.DEFAULT"),"--tw-exit-opacity":"initial","--tw-exit-scale":"initial","--tw-exit-rotate":"initial","--tw-exit-translate-x":"initial","--tw-exit-translate-y":"initial"}}),l({"fade-in":n=>({"--tw-enter-opacity":n}),"fade-out":n=>({"--tw-exit-opacity":n})},{values:r("animationOpacity")}),l({"zoom-in":n=>({"--tw-enter-scale":n}),"zoom-out":n=>({"--tw-exit-scale":n})},{values:r("animationScale")}),l({"spin-in":n=>({"--tw-enter-rotate":n}),"spin-out":n=>({"--tw-exit-rotate":n})},{values:r("animationRotate")}),l({"slide-in-from-top":n=>({"--tw-enter-translate-y":`-${n}`}),"slide-in-from-bottom":n=>({"--tw-enter-translate-y":n}),"slide-in-from-left":n=>({"--tw-enter-translate-x":`-${n}`}),"slide-in-from-right":n=>({"--tw-enter-translate-x":n}),"slide-out-to-top":n=>({"--tw-exit-translate-y":`-${n}`}),"slide-out-to-bottom":n=>({"--tw-exit-translate-y":n}),"slide-out-to-left":n=>({"--tw-exit-translate-x":`-${n}`}),"slide-out-to-right":n=>({"--tw-exit-translate-x":n})},{values:r("animationTranslate")}),l({duration:n=>({animationDuration:n})},{values:A(r("animationDuration"))}),l({delay:n=>({animationDelay:n})},{values:r("animationDelay")}),l({ease:n=>({animationTimingFunction:n})},{values:A(r("animationTimingFunction"))}),i({".running":{animationPlayState:"running"},".paused":{animationPlayState:"paused"}}),l({"fill-mode":n=>({animationFillMode:n})},{values:r("animationFillMode")}),l({direction:n=>({animationDirection:n})},{values:r("animationDirection")}),l({repeat:n=>({animationIterationCount:n})},{values:r("animationRepeat")}),o.custom&&o.custom.raw&&typeof o.custom.raw=="string"){let n=o.custom.raw.trim();if(!n){e.verbose&&console.warn("[FrontFriend] Empty custom CSS");return}if(!x){console.warn("[FrontFriend] PostCSS not available - custom CSS will not be added");return}try{let s=x.parse(n),c=[],f=[];s.each(p=>{if(p.type==="atrule"){c.push(p);return}if(p.type==="rule"){typeof p.selector=="string"&&p.selector.trim().startsWith(".")?f.push(p):c.push(p);return}p.type!=="comment"&&c.push(p)}),c.length>0&&t(c),f.length>0&&i(f),e.verbose&&console.log(`[FrontFriend] Added custom CSS: ${c.length} base rules, ${f.length} utility classes`)}catch(s){console.error("[FrontFriend] Failed to parse custom CSS:",s.message)}}e.verbose&&(console.log("[FrontFriend] Plugin loaded successfully"),console.log(`[FrontFriend] Colors: ${Object.keys(o.variables||{}).length}`),console.log(`[FrontFriend] Semantic vars: ${Object.keys(o.semanticVariables||{}).length}`),console.log(`[FrontFriend] Fonts: ${(o.fonts||[]).length}`),console.log(`[FrontFriend] Safelist classes: ${Array.isArray(o.safelist)?o.safelist.length:0}`))}},function(e={}){let t=null;if(g){let r=new g(process.cwd());t=r.exists()?r.load():null}let i=["./pages/**/*.{js,ts,jsx,tsx}","./components/**/*.{js,ts,jsx,tsx}","./app/**/*.{js,ts,jsx,tsx}","./src/**/*.{js,ts,jsx,tsx}","./stories/**/*.{js,ts,jsx,tsx}"];return e.verbose&&t&&(console.log("[FrontFriend] Cache loaded successfully"),t.safelist&&Array.isArray(t.safelist)&&console.log(`[FrontFriend] Loading ${t.safelist.length} classes for safelist`)),{theme:{extend:{colors:e.extendColors||{},animation:e.extendAnimations||{},spacing:{18:"4.5rem",88:"22rem",128:"32rem"},boxShadow:{"top-sm":"0 -1px 1px 0 rgba(0, 0, 0, 0.05)"},borderRadius:{"2xl":"1rem"},animationDelay:({theme:r})=>({...r("transitionDelay")}),animationDuration:({theme:r})=>({0:"0ms",...r("transitionDuration")}),animationTimingFunction:({theme:r})=>({...r("transitionTimingFunction")}),animationFillMode:{none:"none",forwards:"forwards",backwards:"backwards",both:"both"},animationDirection:{normal:"normal",reverse:"reverse",alternate:"alternate","alternate-reverse":"alternate-reverse"},animationOpacity:({theme:r})=>({DEFAULT:0,...r("opacity")}),animationTranslate:({theme:r})=>({DEFAULT:"100%",...r("translate")}),animationScale:({theme:r})=>({DEFAULT:0,...r("scale")}),animationRotate:({theme:r})=>({DEFAULT:"30deg",...r("rotate")}),animationRepeat:{0:"0",1:"1",infinite:"infinite"},keyframes:{enter:{from:{opacity:"var(--tw-enter-opacity, 1)",transform:"translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))"}},exit:{to:{opacity:"var(--tw-exit-opacity, 1)",transform:"translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))"}}}}},safelist:[...(t==null?void 0:t.safelist)||[],{pattern:/(text|fill)-icon-(neutral|positive|negative|warning|info|highlight|interactive|brand|inverse|onpositive|onnegative|onwarning|oninfo|onhighlight|oninteractive|onbrand)-(mid|strong|subtle|low)(-(neutral|hover|active|selected|disabled))?$/},{pattern:/^(layer-(below|surface|raised|popover|dialog|control)|overlay-(mid|strong|subtle|low))$/}],content:e.content||i}});module.exports=ue;Object.defineProperty(module.exports,"config",{get:function(){if(typeof __FF_CONFIG__<"u")return __FF_CONFIG__;if(typeof window<"u"&&window.__FF_CONFIG__)return window.__FF_CONFIG__;if(g)try{let e=new g(process.cwd());if(e.exists()){let t=e.load();if(t)return t.componentsConfig||null}}catch{}return null}});Object.defineProperty(module.exports,"iconSet",{get:function(){if(typeof __FF_ICONS__<"u")return __FF_ICONS__;if(typeof window<"u"&&window.__FF_ICONS__)return window.__FF_ICONS__;if(g)try{let e=new g(process.cwd());if(e.exists()){let t=e.load();if(t)return t.icons||null}}catch{}return null}});module.exports.ffdc=I();
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../lib/core/file-utils.js", "../../../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv/package.json", "../../../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv/lib/main.js", "../lib/core/env-utils.js", "../ffdc.js", "../index.js"],
|
|
4
|
-
"sourcesContent": ["const fs = require('fs');\n\n/**\n * Read a JSON file safely, returning null if file doesn't exist\n * @param {string} filepath - Path to the JSON file\n * @returns {Object|null} Parsed JSON or null if file not found\n * @throws {Error} If JSON is invalid\n */\nfunction readJsonFileSafe(filepath) {\n try {\n const content = fs.readFileSync(filepath, 'utf8');\n return JSON.parse(content);\n } catch (error) {\n if (error.code === 'ENOENT') {\n return null; // File not found, return null like API would return 404\n }\n throw error;\n }\n}\n\n/**\n * Read a file safely, returning null if file doesn't exist\n * @param {string} filepath - Path to the file\n * @returns {string|null} File content or null if file not found\n * @throws {Error} For other file system errors\n */\nfunction readFileSafe(filepath) {\n try {\n return fs.readFileSync(filepath, 'utf8');\n } catch (error) {\n if (error.code === 'ENOENT') {\n return null; // File not found\n }\n throw error;\n }\n}\n\n/**\n * Write JSON data to a file with proper formatting\n * @param {string} filepath - Path to write the file\n * @param {Object} data - Data to write\n * @param {number} indent - Indentation level (default: 2)\n */\nfunction writeJsonFile(filepath, data, indent = 2) {\n const content = JSON.stringify(data, null, indent);\n fs.writeFileSync(filepath, content, 'utf8');\n}\n\n/**\n * Write module.exports file with JSON data\n * @param {string} filepath - Path to write the file\n * @param {Object} data - Data to export\n */\nfunction writeModuleExportsFile(filepath, data) {\n // Handle empty data cases\n if (data === null || data === undefined || \n (typeof data === 'object' && Object.keys(data).length === 0) ||\n (Array.isArray(data) && data.length === 0)) {\n const emptyContent = Array.isArray(data) ? '[]' : '{}';\n const content = `module.exports = ${emptyContent};`;\n fs.writeFileSync(filepath, content, 'utf8');\n } else {\n const content = `module.exports = ${JSON.stringify(data, null, 2)};`;\n fs.writeFileSync(filepath, content, 'utf8');\n }\n}\n\n/**\n * Check if a file exists\n * @param {string} filepath - Path to check\n * @returns {boolean} True if file exists\n */\nfunction fileExists(filepath) {\n return fs.existsSync(filepath);\n}\n\n/**\n * Create directory recursively\n * @param {string} dirpath - Directory path to create\n */\nfunction ensureDirectoryExists(dirpath) {\n fs.mkdirSync(dirpath, { recursive: true });\n}\n\n/**\n * Remove directory recursively\n * @param {string} dirpath - Directory path to remove\n */\nfunction removeDirectory(dirpath) {\n fs.rmSync(dirpath, { recursive: true, force: true });\n}\n\nmodule.exports = {\n readJsonFileSafe,\n readFileSafe,\n writeJsonFile,\n writeModuleExportsFile,\n fileExists,\n ensureDirectoryExists,\n removeDirectory\n};", "{\n \"name\": \"dotenv\",\n \"version\": \"16.6.1\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n", "const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = Boolean(options && options.debug)\n const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (debug || !quiet) {\n _log('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n const debug = Boolean(options && options.debug)\n const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsedAll, options)\n\n if (debug || !quiet) {\n const keysCount = Object.keys(parsedAll).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n }\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n }\n }\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n", "const path = require('path');\nconst { fileExists } = require('./file-utils');\n\n/**\n * Load .env.local file if it exists in the current working directory\n * @param {string} cwd - Current working directory (defaults to process.cwd())\n * @returns {boolean} True if .env.local was loaded\n */\nfunction loadEnvLocal(cwd = process.cwd()) {\n const envLocalPath = path.join(cwd, '.env.local');\n \n if (fileExists(envLocalPath)) {\n require('dotenv').config({ path: envLocalPath });\n console.log('\uD83D\uDCC4 Loaded .env.local');\n return true;\n }\n \n return false;\n}\n\n/**\n * Get an environment variable with optional default value\n * @param {string} name - Environment variable name\n * @param {string} defaultValue - Default value if not set\n * @returns {string|undefined} Environment variable value or default\n */\nfunction getEnvVar(name, defaultValue = undefined) {\n return process.env[name] || defaultValue;\n}\n\n/**\n * Check if an environment variable is set to 'true'\n * @param {string} name - Environment variable name\n * @returns {boolean} True if the env var is set to 'true'\n */\nfunction isEnvTrue(name) {\n return process.env[name] === 'true';\n}\n\nmodule.exports = {\n loadEnvLocal,\n getEnvVar,\n isEnvTrue\n};", "// ffdc.js - Simple config accessor\n// No base64 decoding, just returns the config object directly\n\nmodule.exports = function ffdc(config) {\n if (!config) {\n return {};\n }\n \n if (typeof config !== 'object') {\n throw new Error('Config must be an object');\n }\n \n return config;\n};", "const plugin = require('tailwindcss/plugin');\n\n// PostCSS is a peer dependency of Tailwind, so it should be available\n// We'll try to require it, but handle the case where it's not available\nlet postcss;\ntry {\n postcss = require('postcss');\n} catch (e) {\n // PostCSS not available - custom CSS parsing will be disabled\n postcss = null;\n}\n\nlet CacheManager;\nif (typeof window === 'undefined' && typeof process !== 'undefined' && process.versions && process.versions.node) {\n CacheManager = require('./lib/core/cache-manager');\n const { loadEnvLocal } = require('./lib/core/env-utils');\n // Load .env.local if it exists\n loadEnvLocal();\n}\n\nfunction filterDefault(values) {\n return Object.fromEntries(\n Object.entries(values).filter(([key]) => key !== \"DEFAULT\"),\n );\n}\n\nconst pluginExport = plugin.withOptions(\n function (options = {}) {\n return function ({ addBase, addUtilities, theme, matchUtilities }) {\n // 1. Load cache with CacheManager\n if (!CacheManager) {\n // should get cache in browser here\n return;\n }\n\n const cacheManager = new CacheManager(process.cwd());\n\n if (!cacheManager.exists()) {\n console.warn('[FrontFriend] No cache found. Please run \"npx frontfriend setup\" first.');\n return;\n }\n\n if (!cacheManager.isValid()) {\n console.warn('[FrontFriend] Cache is expired. Please run \"npx frontfriend setup\" to refresh.');\n }\n\n const cache = cacheManager.load();\n if (!cache) {\n console.error('[FrontFriend] Failed to load cache.');\n return;\n }\n\n // 2. Add CSS variables to :root\n const rootVars = {};\n\n // Add color variables\n if (cache.variables) {\n // Wrap HSL values in hsl() function\n for (const [key, value] of Object.entries(cache.variables)) {\n // Check if it's a color variable (contains HSL values)\n if (key.startsWith('--color-') && !value.startsWith('hsl(')) {\n rootVars[key] = `hsl(${value})`;\n } else {\n rootVars[key] = value;\n }\n }\n }\n\n // Add semantic variables (light mode)\n if (cache.semanticVariables) {\n for (const [key, value] of Object.entries(cache.semanticVariables)) {\n // Semantic variables point to color variables using var()\n // so we don't need to wrap them in hsl()\n rootVars[key] = value;\n }\n }\n\n // Add root styles\n addBase({\n ':root': rootVars\n });\n\n // 3. Add dark mode support\n if (cache.semanticDarkVariables && Object.keys(cache.semanticDarkVariables).length > 0) {\n addBase({\n ':root:not(.light)': cache.semanticDarkVariables\n });\n addBase({\n ':root:not(.dark)': cache.semanticVariables\n });\n }\n\n\n // 4. Generate semantic color utilities from semantic variables\n if (cache.semanticVariables) {\n const semanticUtilities = {};\n\n // Process semantic variables into utility classes\n for (const [cssVar] of Object.entries(cache.semanticVariables)) {\n // Convert CSS variable to utility class name\n // --bg-brand-mid-default -> bg-brand-mid\n // --text-brand-strong -> text-brand-strong\n // --border-neutral-subtle-hover -> border-neutral-subtle-hover\n\n const match = cssVar.match(/^--(bg|text|border|layer|overlay|icon)-(.+)$/);\n if (match) {\n const [, prefix, name] = match;\n const className = `.${prefix}-${name}`;\n\n if (prefix === 'bg' || prefix === 'layer' || prefix === 'overlay') {\n semanticUtilities[className] = {\n backgroundColor: `var(${cssVar})`\n };\n } else if (prefix === 'text') {\n semanticUtilities[className] = {\n color: `var(${cssVar})`\n };\n } else if (prefix === 'border') {\n semanticUtilities[className] = {\n borderColor: `var(${cssVar})`\n };\n } else if (prefix === 'icon') {\n // Icon tokens map to both text color and fill\n semanticUtilities[`.text-${prefix}-${name}`] = {\n color: `var(${cssVar})`\n };\n semanticUtilities[`.fill-${prefix}-${name}`] = {\n fill: `var(${cssVar})`\n };\n }\n }\n }\n\n addUtilities(semanticUtilities);\n }\n\n // 5. Generate utilities from tokens (semantic-based utilities)\n if (cache.tokens) {\n // Background colors\n if (cache.tokens.backgroundColor) {\n const bgUtilities = {};\n for (const [name, value] of Object.entries(cache.tokens.backgroundColor)) {\n // The value already contains hsl() wrapper from the processor\n bgUtilities[`.bg-${name}`] = {\n backgroundColor: value\n };\n }\n addUtilities(bgUtilities);\n }\n\n // Text colors\n if (cache.tokens.textColor) {\n const textUtilities = {};\n for (const [name, value] of Object.entries(cache.tokens.textColor)) {\n textUtilities[`.text-${name}`] = {\n color: value\n };\n }\n addUtilities(textUtilities);\n }\n\n // Border colors\n if (cache.tokens.borderColor) {\n const borderUtilities = {};\n for (const [name, value] of Object.entries(cache.tokens.borderColor)) {\n borderUtilities[`.border-${name}`] = {\n borderColor: value\n };\n }\n addUtilities(borderUtilities);\n }\n\n // Fill colors (for SVG icons)\n if (cache.tokens.fill) {\n const fillUtilities = {};\n const textIconUtilities = {};\n for (const [name, value] of Object.entries(cache.tokens.fill)) {\n fillUtilities[`.fill-${name}`] = {\n fill: value\n };\n // Also create text-icon utilities for icon color classes\n if (name.startsWith('icon-')) {\n textIconUtilities[`.text-${name}`] = {\n color: value\n };\n }\n }\n addUtilities(fillUtilities);\n addUtilities(textIconUtilities);\n }\n\n // Font family utilities\n if (cache.tokens.fontFamily) {\n const fontUtilities = {};\n for (const [name, value] of Object.entries(cache.tokens.fontFamily)) {\n fontUtilities[`.font-${name}`] = {\n fontFamily: value\n };\n }\n addUtilities(fontUtilities);\n }\n }\n\n // 6. Add font faces\n if (cache.fonts && cache.fonts.length > 0) {\n // Convert font objects to Tailwind-compatible format\n cache.fonts.forEach(fontFace => {\n // Tailwind expects each @font-face as a separate rule\n addBase({\n '@font-face': fontFace\n });\n });\n }\n\n // 7. Add enter/exit animation utilities\n addUtilities({\n \"@keyframes enter\": theme(\"keyframes.enter\"),\n \"@keyframes exit\": theme(\"keyframes.exit\"),\n \".animate-in\": {\n animationName: \"enter\",\n animationDuration: theme(\"animationDuration.DEFAULT\"),\n \"--tw-enter-opacity\": \"initial\",\n \"--tw-enter-scale\": \"initial\",\n \"--tw-enter-rotate\": \"initial\",\n \"--tw-enter-translate-x\": \"initial\",\n \"--tw-enter-translate-y\": \"initial\",\n },\n \".animate-out\": {\n animationName: \"exit\",\n animationDuration: theme(\"animationDuration.DEFAULT\"),\n \"--tw-exit-opacity\": \"initial\",\n \"--tw-exit-scale\": \"initial\",\n \"--tw-exit-rotate\": \"initial\",\n \"--tw-exit-translate-x\": \"initial\",\n \"--tw-exit-translate-y\": \"initial\",\n },\n });\n\n // 10. Add animation match utilities\n matchUtilities(\n {\n \"fade-in\": (value) => ({ \"--tw-enter-opacity\": value }),\n \"fade-out\": (value) => ({ \"--tw-exit-opacity\": value }),\n },\n { values: theme(\"animationOpacity\") }\n );\n\n matchUtilities(\n {\n \"zoom-in\": (value) => ({ \"--tw-enter-scale\": value }),\n \"zoom-out\": (value) => ({ \"--tw-exit-scale\": value }),\n },\n { values: theme(\"animationScale\") }\n );\n\n matchUtilities(\n {\n \"spin-in\": (value) => ({ \"--tw-enter-rotate\": value }),\n \"spin-out\": (value) => ({ \"--tw-exit-rotate\": value }),\n },\n { values: theme(\"animationRotate\") }\n );\n\n matchUtilities(\n {\n \"slide-in-from-top\": (value) => ({\n \"--tw-enter-translate-y\": `-${value}`,\n }),\n \"slide-in-from-bottom\": (value) => ({\n \"--tw-enter-translate-y\": value,\n }),\n \"slide-in-from-left\": (value) => ({\n \"--tw-enter-translate-x\": `-${value}`,\n }),\n \"slide-in-from-right\": (value) => ({\n \"--tw-enter-translate-x\": value,\n }),\n \"slide-out-to-top\": (value) => ({\n \"--tw-exit-translate-y\": `-${value}`,\n }),\n \"slide-out-to-bottom\": (value) => ({\n \"--tw-exit-translate-y\": value,\n }),\n \"slide-out-to-left\": (value) => ({\n \"--tw-exit-translate-x\": `-${value}`,\n }),\n \"slide-out-to-right\": (value) => ({\n \"--tw-exit-translate-x\": value,\n }),\n },\n { values: theme(\"animationTranslate\") }\n );\n\n // 11. Add animation control utilities\n matchUtilities(\n { duration: (value) => ({ animationDuration: value }) },\n { values: filterDefault(theme(\"animationDuration\")) }\n );\n\n matchUtilities(\n { delay: (value) => ({ animationDelay: value }) },\n { values: theme(\"animationDelay\") }\n );\n\n matchUtilities(\n { ease: (value) => ({ animationTimingFunction: value }) },\n { values: filterDefault(theme(\"animationTimingFunction\")) }\n );\n\n addUtilities({\n \".running\": { animationPlayState: \"running\" },\n \".paused\": { animationPlayState: \"paused\" },\n });\n\n matchUtilities(\n { \"fill-mode\": (value) => ({ animationFillMode: value }) },\n { values: theme(\"animationFillMode\") }\n );\n\n matchUtilities(\n { direction: (value) => ({ animationDirection: value }) },\n { values: theme(\"animationDirection\") }\n );\n\n matchUtilities(\n { repeat: (value) => ({ animationIterationCount: value }) },\n { values: theme(\"animationRepeat\") }\n );\n\n // 12. Add custom CSS\n if (cache.custom && cache.custom.raw && typeof cache.custom.raw === 'string') {\n const rawCss = cache.custom.raw.trim();\n \n if (!rawCss) {\n if (options.verbose) {\n console.warn('[FrontFriend] Empty custom CSS');\n }\n return;\n }\n\n // Check if PostCSS is available\n if (!postcss) {\n console.warn('[FrontFriend] PostCSS not available - custom CSS will not be added');\n return;\n }\n\n try {\n // Parse the CSS using PostCSS to get an AST\n const root = postcss.parse(rawCss);\n \n // Split nodes into base and utilities layers\n const baseNodes = [];\n const utilityNodes = [];\n \n root.each((node) => {\n // @keyframes, @font-face, @media, etc. go to base\n if (node.type === 'atrule') {\n // Special handling for @keyframes and other at-rules\n baseNodes.push(node);\n return;\n }\n \n // Regular rules\n if (node.type === 'rule') {\n // Class selectors starting with . go to utilities\n const isClassSelector = \n typeof node.selector === 'string' && \n node.selector.trim().startsWith('.');\n \n if (isClassSelector) {\n utilityNodes.push(node);\n } else {\n // Element selectors, IDs, attribute selectors, etc. go to base\n baseNodes.push(node);\n }\n return;\n }\n \n // Comments and other nodes go to base\n if (node.type !== 'comment') {\n baseNodes.push(node);\n }\n });\n \n // Add nodes to their respective layers\n // Tailwind accepts PostCSS nodes directly\n if (baseNodes.length > 0) {\n addBase(baseNodes);\n }\n \n if (utilityNodes.length > 0) {\n addUtilities(utilityNodes);\n }\n \n if (options.verbose) {\n console.log(`[FrontFriend] Added custom CSS: ${baseNodes.length} base rules, ${utilityNodes.length} utility classes`);\n }\n } catch (error) {\n console.error('[FrontFriend] Failed to parse custom CSS:', error.message);\n // Don't throw - just log the error and continue\n }\n }\n\n // Log success\n if (options.verbose) {\n console.log('[FrontFriend] Plugin loaded successfully');\n console.log(`[FrontFriend] Colors: ${Object.keys(cache.variables || {}).length}`);\n console.log(`[FrontFriend] Semantic vars: ${Object.keys(cache.semanticVariables || {}).length}`);\n console.log(`[FrontFriend] Fonts: ${(cache.fonts || []).length}`);\n console.log(`[FrontFriend] Safelist classes: ${Array.isArray(cache.safelist) ? cache.safelist.length : 0}`);\n }\n };\n },\n function (options = {}) {\n // Return theme configuration\n let cache = null;\n if (CacheManager) {\n const cacheManager = new CacheManager(process.cwd());\n cache = cacheManager.exists() ? cacheManager.load() : null;\n }\n\n // Default content paths matching the current-plugin approach\n const defaultContent = [\n './pages/**/*.{js,ts,jsx,tsx}',\n './components/**/*.{js,ts,jsx,tsx}',\n './app/**/*.{js,ts,jsx,tsx}',\n './src/**/*.{js,ts,jsx,tsx}',\n './stories/**/*.{js,ts,jsx,tsx}'\n ];\n\n // Log cache loading\n if (options.verbose && cache) {\n console.log('[FrontFriend] Cache loaded successfully');\n if (cache.safelist && Array.isArray(cache.safelist)) {\n console.log(`[FrontFriend] Loading ${cache.safelist.length} classes for safelist`);\n }\n }\n\n return {\n theme: {\n extend: {\n // Extend colors if needed\n colors: options.extendColors || {},\n // Extend animations if needed\n animation: options.extendAnimations || {},\n // Add custom spacing values\n spacing: {\n '18': '4.5rem',\n '88': '22rem',\n '128': '32rem'\n },\n // Add custom box shadows\n boxShadow: {\n 'top-sm': '0 -1px 1px 0 rgba(0, 0, 0, 0.05)'\n },\n // Add border radius values\n borderRadius: {\n '2xl': '1rem'\n },\n // Animation extensions\n animationDelay: ({ theme }) => ({\n ...theme(\"transitionDelay\"),\n }),\n animationDuration: ({ theme }) => ({\n 0: \"0ms\",\n ...theme(\"transitionDuration\"),\n }),\n animationTimingFunction: ({ theme }) => ({\n ...theme(\"transitionTimingFunction\"),\n }),\n animationFillMode: {\n none: \"none\",\n forwards: \"forwards\",\n backwards: \"backwards\",\n both: \"both\",\n },\n animationDirection: {\n normal: \"normal\",\n reverse: \"reverse\",\n alternate: \"alternate\",\n \"alternate-reverse\": \"alternate-reverse\",\n },\n animationOpacity: ({ theme }) => ({\n DEFAULT: 0,\n ...theme(\"opacity\"),\n }),\n animationTranslate: ({ theme }) => ({\n DEFAULT: \"100%\",\n ...theme(\"translate\"),\n }),\n animationScale: ({ theme }) => ({\n DEFAULT: 0,\n ...theme(\"scale\"),\n }),\n animationRotate: ({ theme }) => ({\n DEFAULT: \"30deg\",\n ...theme(\"rotate\"),\n }),\n animationRepeat: {\n 0: \"0\",\n 1: \"1\",\n infinite: \"infinite\",\n },\n keyframes: {\n enter: {\n from: {\n opacity: \"var(--tw-enter-opacity, 1)\",\n transform:\n \"translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))\",\n },\n },\n exit: {\n to: {\n opacity: \"var(--tw-exit-opacity, 1)\",\n transform:\n \"translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))\",\n },\n },\n },\n }\n },\n // Include safelist from cache and additional classes\n safelist: [\n ...(cache?.safelist || []),\n {\n pattern: /(text|fill)-icon-(neutral|positive|negative|warning|info|highlight|interactive|brand|inverse|onpositive|onnegative|onwarning|oninfo|onhighlight|oninteractive|onbrand)-(mid|strong|subtle|low)(-(neutral|hover|active|selected|disabled))?$/,\n },\n {\n pattern: /^(layer-(below|surface|raised|popover|dialog|control)|overlay-(mid|strong|subtle|low))$/,\n },\n ],\n // Set content paths - merge options with defaults\n content: options.content || defaultContent\n };\n }\n);\n\n// Default export is the plugin\nmodule.exports = pluginExport;\n\n// Export components config and icons with getter functions\n// This allows dynamic resolution at runtime\n\n// Create getter for config\nObject.defineProperty(module.exports, 'config', {\n get: function () {\n // Check for webpack-injected global variable\n if (typeof __FF_CONFIG__ !== 'undefined') {\n return __FF_CONFIG__;\n }\n\n // Check if we're in a browser environment\n if (typeof window !== 'undefined' && window.__FF_CONFIG__) {\n return window.__FF_CONFIG__;\n }\n\n // Node.js: load from cache\n if (CacheManager) {\n try {\n const cacheManager = new CacheManager(process.cwd());\n if (cacheManager.exists()) {\n const cache = cacheManager.load();\n if (cache) {\n return cache.componentsConfig || null;\n }\n }\n } catch (error) {\n // Config not available\n }\n }\n\n return null;\n }\n});\n\n// Create getter for iconSet\nObject.defineProperty(module.exports, 'iconSet', {\n get: function () {\n // Check for webpack-injected global variable\n if (typeof __FF_ICONS__ !== 'undefined') {\n return __FF_ICONS__;\n }\n\n // Check if we're in a browser environment\n if (typeof window !== 'undefined' && window.__FF_ICONS__) {\n return window.__FF_ICONS__;\n }\n\n // Node.js: load from cache\n if (CacheManager) {\n try {\n const cacheManager = new CacheManager(process.cwd());\n if (cacheManager.exists()) {\n const cache = cacheManager.load();\n if (cache) {\n return cache.icons || null;\n }\n }\n } catch (error) {\n // Icons not available\n }\n }\n\n return null;\n }\n});\n\n// Export ffdc utility\nmodule.exports.ffdc = require('./ffdc.js');"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["const fs = require('fs');\n\n/**\n * Read a JSON file safely, returning null if file doesn't exist\n * @param {string} filepath - Path to the JSON file\n * @returns {Object|null} Parsed JSON or null if file not found\n * @throws {Error} If JSON is invalid\n */\nfunction readJsonFileSafe(filepath) {\n try {\n const content = fs.readFileSync(filepath, 'utf8');\n return JSON.parse(content);\n } catch (error) {\n if (error.code === 'ENOENT') {\n return null; // File not found, return null like API would return 404\n }\n throw error;\n }\n}\n\n/**\n * Read a file safely, returning null if file doesn't exist\n * @param {string} filepath - Path to the file\n * @returns {string|null} File content or null if file not found\n * @throws {Error} For other file system errors\n */\nfunction readFileSafe(filepath) {\n try {\n return fs.readFileSync(filepath, 'utf8');\n } catch (error) {\n if (error.code === 'ENOENT') {\n return null; // File not found\n }\n throw error;\n }\n}\n\n/**\n * Write JSON data to a file with proper formatting\n * @param {string} filepath - Path to write the file\n * @param {Object} data - Data to write\n * @param {number} indent - Indentation level (default: 2)\n */\nfunction writeJsonFile(filepath, data, indent = 2) {\n const content = JSON.stringify(data, null, indent);\n fs.writeFileSync(filepath, content, 'utf8');\n}\n\n/**\n * Write module.exports file with JSON data\n * @param {string} filepath - Path to write the file\n * @param {Object} data - Data to export\n */\nfunction writeModuleExportsFile(filepath, data) {\n // Handle empty data cases\n if (data === null || data === undefined || \n (typeof data === 'object' && Object.keys(data).length === 0) ||\n (Array.isArray(data) && data.length === 0)) {\n const emptyContent = Array.isArray(data) ? '[]' : '{}';\n const content = `module.exports = ${emptyContent};`;\n fs.writeFileSync(filepath, content, 'utf8');\n } else {\n const content = `module.exports = ${JSON.stringify(data, null, 2)};`;\n fs.writeFileSync(filepath, content, 'utf8');\n }\n}\n\n/**\n * Check if a file exists\n * @param {string} filepath - Path to check\n * @returns {boolean} True if file exists\n */\nfunction fileExists(filepath) {\n return fs.existsSync(filepath);\n}\n\n/**\n * Create directory recursively\n * @param {string} dirpath - Directory path to create\n */\nfunction ensureDirectoryExists(dirpath) {\n fs.mkdirSync(dirpath, { recursive: true });\n}\n\n/**\n * Remove directory recursively\n * @param {string} dirpath - Directory path to remove\n */\nfunction removeDirectory(dirpath) {\n fs.rmSync(dirpath, { recursive: true, force: true });\n}\n\nmodule.exports = {\n readJsonFileSafe,\n readFileSafe,\n writeJsonFile,\n writeModuleExportsFile,\n fileExists,\n ensureDirectoryExists,\n removeDirectory\n};", "{\n \"name\": \"dotenv\",\n \"version\": \"16.6.1\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n", "const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = Boolean(options && options.debug)\n const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (debug || !quiet) {\n _log('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n const debug = Boolean(options && options.debug)\n const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsedAll, options)\n\n if (debug || !quiet) {\n const keysCount = Object.keys(parsedAll).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n }\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n }\n }\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n", "const path = require('path');\nconst { fileExists } = require('./file-utils');\n\n/**\n * Load .env.local file if it exists in the current working directory\n * @param {string} cwd - Current working directory (defaults to process.cwd())\n * @returns {boolean} True if .env.local was loaded\n */\nfunction loadEnvLocal(cwd = process.cwd()) {\n const envLocalPath = path.join(cwd, '.env.local');\n \n if (fileExists(envLocalPath)) {\n require('dotenv').config({ path: envLocalPath });\n console.log('\uD83D\uDCC4 Loaded .env.local');\n return true;\n }\n \n return false;\n}\n\n/**\n * Get an environment variable with optional default value\n * @param {string} name - Environment variable name\n * @param {string} defaultValue - Default value if not set\n * @returns {string|undefined} Environment variable value or default\n */\nfunction getEnvVar(name, defaultValue = undefined) {\n return process.env[name] || defaultValue;\n}\n\n/**\n * Check if an environment variable is set to 'true'\n * @param {string} name - Environment variable name\n * @returns {boolean} True if the env var is set to 'true'\n */\nfunction isEnvTrue(name) {\n return process.env[name] === 'true';\n}\n\nmodule.exports = {\n loadEnvLocal,\n getEnvVar,\n isEnvTrue\n};", "// ffdc.js - Simple config accessor\n// No base64 decoding, just returns the config object directly\n\nmodule.exports = function ffdc(config) {\n if (!config) {\n return {};\n }\n \n if (typeof config !== 'object') {\n throw new Error('Config must be an object');\n }\n \n return config;\n};", "const plugin = require('tailwindcss/plugin');\n\n// PostCSS is a peer dependency of Tailwind, so it should be available\n// We'll try to require it, but handle the case where it's not available\nlet postcss;\ntry {\n postcss = require('postcss');\n} catch (e) {\n // PostCSS not available - custom CSS parsing will be disabled\n postcss = null;\n}\n\nlet CacheManager;\nif (typeof window === 'undefined' && typeof process !== 'undefined' && process.versions && process.versions.node) {\n CacheManager = require('./lib/core/cache-manager');\n const { loadEnvLocal } = require('./lib/core/env-utils');\n // Load .env.local if it exists\n loadEnvLocal();\n}\n\nfunction filterDefault(values) {\n return Object.fromEntries(\n Object.entries(values).filter(([key]) => key !== \"DEFAULT\"),\n );\n}\n\nconst pluginExport = plugin.withOptions(\n function (options = {}) {\n return function ({ addBase, addUtilities, theme, matchUtilities }) {\n // 1. Load cache with CacheManager\n if (!CacheManager) {\n // should get cache in browser here\n return;\n }\n\n const cacheManager = new CacheManager(process.cwd());\n\n if (!cacheManager.exists()) {\n console.warn('[FrontFriend] No cache found. Please run \"npx frontfriend init\" first.');\n return;\n }\n\n if (!cacheManager.isValid()) {\n console.warn('[FrontFriend] Cache is expired. Please run \"npx frontfriend init\" to refresh.');\n }\n\n const cache = cacheManager.load();\n if (!cache) {\n console.error('[FrontFriend] Failed to load cache.');\n return;\n }\n\n // 2. Add CSS variables to :root\n const rootVars = {};\n\n // Add color variables\n if (cache.variables) {\n // Wrap HSL values in hsl() function\n for (const [key, value] of Object.entries(cache.variables)) {\n // Check if it's a color variable (contains HSL values)\n if (key.startsWith('--color-') && !value.startsWith('hsl(')) {\n rootVars[key] = `hsl(${value})`;\n } else {\n rootVars[key] = value;\n }\n }\n }\n\n // Add semantic variables (light mode)\n if (cache.semanticVariables) {\n for (const [key, value] of Object.entries(cache.semanticVariables)) {\n // Semantic variables point to color variables using var()\n // so we don't need to wrap them in hsl()\n rootVars[key] = value;\n }\n }\n\n // Add root styles\n addBase({\n ':root': rootVars\n });\n\n // 3. Add dark mode support\n if (cache.semanticDarkVariables && Object.keys(cache.semanticDarkVariables).length > 0) {\n addBase({\n ':root:not(.light)': cache.semanticDarkVariables\n });\n addBase({\n ':root:not(.dark)': cache.semanticVariables\n });\n }\n\n\n // 4. Generate semantic color utilities from semantic variables\n if (cache.semanticVariables) {\n const semanticUtilities = {};\n\n // Process semantic variables into utility classes\n for (const [cssVar] of Object.entries(cache.semanticVariables)) {\n // Convert CSS variable to utility class name\n // --bg-brand-mid-default -> bg-brand-mid\n // --text-brand-strong -> text-brand-strong\n // --border-neutral-subtle-hover -> border-neutral-subtle-hover\n\n const match = cssVar.match(/^--(bg|text|border|layer|overlay|icon)-(.+)$/);\n if (match) {\n const [, prefix, name] = match;\n const className = `.${prefix}-${name}`;\n\n if (prefix === 'bg' || prefix === 'layer' || prefix === 'overlay') {\n semanticUtilities[className] = {\n backgroundColor: `var(${cssVar})`\n };\n } else if (prefix === 'text') {\n semanticUtilities[className] = {\n color: `var(${cssVar})`\n };\n } else if (prefix === 'border') {\n semanticUtilities[className] = {\n borderColor: `var(${cssVar})`\n };\n } else if (prefix === 'icon') {\n // Icon tokens map to both text color and fill\n semanticUtilities[`.text-${prefix}-${name}`] = {\n color: `var(${cssVar})`\n };\n semanticUtilities[`.fill-${prefix}-${name}`] = {\n fill: `var(${cssVar})`\n };\n }\n }\n }\n\n addUtilities(semanticUtilities);\n }\n\n // 5. Generate utilities from tokens (semantic-based utilities)\n if (cache.tokens) {\n // Background colors\n if (cache.tokens.backgroundColor) {\n const bgUtilities = {};\n for (const [name, value] of Object.entries(cache.tokens.backgroundColor)) {\n // The value already contains hsl() wrapper from the processor\n bgUtilities[`.bg-${name}`] = {\n backgroundColor: value\n };\n }\n addUtilities(bgUtilities);\n }\n\n // Text colors\n if (cache.tokens.textColor) {\n const textUtilities = {};\n for (const [name, value] of Object.entries(cache.tokens.textColor)) {\n textUtilities[`.text-${name}`] = {\n color: value\n };\n }\n addUtilities(textUtilities);\n }\n\n // Border colors\n if (cache.tokens.borderColor) {\n const borderUtilities = {};\n for (const [name, value] of Object.entries(cache.tokens.borderColor)) {\n borderUtilities[`.border-${name}`] = {\n borderColor: value\n };\n }\n addUtilities(borderUtilities);\n }\n\n // Fill colors (for SVG icons)\n if (cache.tokens.fill) {\n const fillUtilities = {};\n const textIconUtilities = {};\n for (const [name, value] of Object.entries(cache.tokens.fill)) {\n fillUtilities[`.fill-${name}`] = {\n fill: value\n };\n // Also create text-icon utilities for icon color classes\n if (name.startsWith('icon-')) {\n textIconUtilities[`.text-${name}`] = {\n color: value\n };\n }\n }\n addUtilities(fillUtilities);\n addUtilities(textIconUtilities);\n }\n\n // Font family utilities\n if (cache.tokens.fontFamily) {\n const fontUtilities = {};\n for (const [name, value] of Object.entries(cache.tokens.fontFamily)) {\n fontUtilities[`.font-${name}`] = {\n fontFamily: value\n };\n }\n addUtilities(fontUtilities);\n }\n }\n\n // 6. Add font faces\n if (cache.fonts && cache.fonts.length > 0) {\n // Convert font objects to Tailwind-compatible format\n cache.fonts.forEach(fontFace => {\n // Tailwind expects each @font-face as a separate rule\n addBase({\n '@font-face': fontFace\n });\n });\n }\n\n // 7. Add enter/exit animation utilities\n addUtilities({\n \"@keyframes enter\": theme(\"keyframes.enter\"),\n \"@keyframes exit\": theme(\"keyframes.exit\"),\n \".animate-in\": {\n animationName: \"enter\",\n animationDuration: theme(\"animationDuration.DEFAULT\"),\n \"--tw-enter-opacity\": \"initial\",\n \"--tw-enter-scale\": \"initial\",\n \"--tw-enter-rotate\": \"initial\",\n \"--tw-enter-translate-x\": \"initial\",\n \"--tw-enter-translate-y\": \"initial\",\n },\n \".animate-out\": {\n animationName: \"exit\",\n animationDuration: theme(\"animationDuration.DEFAULT\"),\n \"--tw-exit-opacity\": \"initial\",\n \"--tw-exit-scale\": \"initial\",\n \"--tw-exit-rotate\": \"initial\",\n \"--tw-exit-translate-x\": \"initial\",\n \"--tw-exit-translate-y\": \"initial\",\n },\n });\n\n // 10. Add animation match utilities\n matchUtilities(\n {\n \"fade-in\": (value) => ({ \"--tw-enter-opacity\": value }),\n \"fade-out\": (value) => ({ \"--tw-exit-opacity\": value }),\n },\n { values: theme(\"animationOpacity\") }\n );\n\n matchUtilities(\n {\n \"zoom-in\": (value) => ({ \"--tw-enter-scale\": value }),\n \"zoom-out\": (value) => ({ \"--tw-exit-scale\": value }),\n },\n { values: theme(\"animationScale\") }\n );\n\n matchUtilities(\n {\n \"spin-in\": (value) => ({ \"--tw-enter-rotate\": value }),\n \"spin-out\": (value) => ({ \"--tw-exit-rotate\": value }),\n },\n { values: theme(\"animationRotate\") }\n );\n\n matchUtilities(\n {\n \"slide-in-from-top\": (value) => ({\n \"--tw-enter-translate-y\": `-${value}`,\n }),\n \"slide-in-from-bottom\": (value) => ({\n \"--tw-enter-translate-y\": value,\n }),\n \"slide-in-from-left\": (value) => ({\n \"--tw-enter-translate-x\": `-${value}`,\n }),\n \"slide-in-from-right\": (value) => ({\n \"--tw-enter-translate-x\": value,\n }),\n \"slide-out-to-top\": (value) => ({\n \"--tw-exit-translate-y\": `-${value}`,\n }),\n \"slide-out-to-bottom\": (value) => ({\n \"--tw-exit-translate-y\": value,\n }),\n \"slide-out-to-left\": (value) => ({\n \"--tw-exit-translate-x\": `-${value}`,\n }),\n \"slide-out-to-right\": (value) => ({\n \"--tw-exit-translate-x\": value,\n }),\n },\n { values: theme(\"animationTranslate\") }\n );\n\n // 11. Add animation control utilities\n matchUtilities(\n { duration: (value) => ({ animationDuration: value }) },\n { values: filterDefault(theme(\"animationDuration\")) }\n );\n\n matchUtilities(\n { delay: (value) => ({ animationDelay: value }) },\n { values: theme(\"animationDelay\") }\n );\n\n matchUtilities(\n { ease: (value) => ({ animationTimingFunction: value }) },\n { values: filterDefault(theme(\"animationTimingFunction\")) }\n );\n\n addUtilities({\n \".running\": { animationPlayState: \"running\" },\n \".paused\": { animationPlayState: \"paused\" },\n });\n\n matchUtilities(\n { \"fill-mode\": (value) => ({ animationFillMode: value }) },\n { values: theme(\"animationFillMode\") }\n );\n\n matchUtilities(\n { direction: (value) => ({ animationDirection: value }) },\n { values: theme(\"animationDirection\") }\n );\n\n matchUtilities(\n { repeat: (value) => ({ animationIterationCount: value }) },\n { values: theme(\"animationRepeat\") }\n );\n\n // 12. Add custom CSS\n if (cache.custom && cache.custom.raw && typeof cache.custom.raw === 'string') {\n const rawCss = cache.custom.raw.trim();\n \n if (!rawCss) {\n if (options.verbose) {\n console.warn('[FrontFriend] Empty custom CSS');\n }\n return;\n }\n\n // Check if PostCSS is available\n if (!postcss) {\n console.warn('[FrontFriend] PostCSS not available - custom CSS will not be added');\n return;\n }\n\n try {\n // Parse the CSS using PostCSS to get an AST\n const root = postcss.parse(rawCss);\n \n // Split nodes into base and utilities layers\n const baseNodes = [];\n const utilityNodes = [];\n \n root.each((node) => {\n // @keyframes, @font-face, @media, etc. go to base\n if (node.type === 'atrule') {\n // Special handling for @keyframes and other at-rules\n baseNodes.push(node);\n return;\n }\n \n // Regular rules\n if (node.type === 'rule') {\n // Class selectors starting with . go to utilities\n const isClassSelector = \n typeof node.selector === 'string' && \n node.selector.trim().startsWith('.');\n \n if (isClassSelector) {\n utilityNodes.push(node);\n } else {\n // Element selectors, IDs, attribute selectors, etc. go to base\n baseNodes.push(node);\n }\n return;\n }\n \n // Comments and other nodes go to base\n if (node.type !== 'comment') {\n baseNodes.push(node);\n }\n });\n \n // Add nodes to their respective layers\n // Tailwind accepts PostCSS nodes directly\n if (baseNodes.length > 0) {\n addBase(baseNodes);\n }\n \n if (utilityNodes.length > 0) {\n addUtilities(utilityNodes);\n }\n \n if (options.verbose) {\n console.log(`[FrontFriend] Added custom CSS: ${baseNodes.length} base rules, ${utilityNodes.length} utility classes`);\n }\n } catch (error) {\n console.error('[FrontFriend] Failed to parse custom CSS:', error.message);\n // Don't throw - just log the error and continue\n }\n }\n\n // Log success\n if (options.verbose) {\n console.log('[FrontFriend] Plugin loaded successfully');\n console.log(`[FrontFriend] Colors: ${Object.keys(cache.variables || {}).length}`);\n console.log(`[FrontFriend] Semantic vars: ${Object.keys(cache.semanticVariables || {}).length}`);\n console.log(`[FrontFriend] Fonts: ${(cache.fonts || []).length}`);\n console.log(`[FrontFriend] Safelist classes: ${Array.isArray(cache.safelist) ? cache.safelist.length : 0}`);\n }\n };\n },\n function (options = {}) {\n // Return theme configuration\n let cache = null;\n if (CacheManager) {\n const cacheManager = new CacheManager(process.cwd());\n cache = cacheManager.exists() ? cacheManager.load() : null;\n }\n\n // Default content paths matching the current-plugin approach\n const defaultContent = [\n './pages/**/*.{js,ts,jsx,tsx}',\n './components/**/*.{js,ts,jsx,tsx}',\n './app/**/*.{js,ts,jsx,tsx}',\n './src/**/*.{js,ts,jsx,tsx}',\n './stories/**/*.{js,ts,jsx,tsx}'\n ];\n\n // Log cache loading\n if (options.verbose && cache) {\n console.log('[FrontFriend] Cache loaded successfully');\n if (cache.safelist && Array.isArray(cache.safelist)) {\n console.log(`[FrontFriend] Loading ${cache.safelist.length} classes for safelist`);\n }\n }\n\n return {\n theme: {\n extend: {\n // Extend colors if needed\n colors: options.extendColors || {},\n // Extend animations if needed\n animation: options.extendAnimations || {},\n // Add custom spacing values\n spacing: {\n '18': '4.5rem',\n '88': '22rem',\n '128': '32rem'\n },\n // Add custom box shadows\n boxShadow: {\n 'top-sm': '0 -1px 1px 0 rgba(0, 0, 0, 0.05)'\n },\n // Add border radius values\n borderRadius: {\n '2xl': '1rem'\n },\n // Animation extensions\n animationDelay: ({ theme }) => ({\n ...theme(\"transitionDelay\"),\n }),\n animationDuration: ({ theme }) => ({\n 0: \"0ms\",\n ...theme(\"transitionDuration\"),\n }),\n animationTimingFunction: ({ theme }) => ({\n ...theme(\"transitionTimingFunction\"),\n }),\n animationFillMode: {\n none: \"none\",\n forwards: \"forwards\",\n backwards: \"backwards\",\n both: \"both\",\n },\n animationDirection: {\n normal: \"normal\",\n reverse: \"reverse\",\n alternate: \"alternate\",\n \"alternate-reverse\": \"alternate-reverse\",\n },\n animationOpacity: ({ theme }) => ({\n DEFAULT: 0,\n ...theme(\"opacity\"),\n }),\n animationTranslate: ({ theme }) => ({\n DEFAULT: \"100%\",\n ...theme(\"translate\"),\n }),\n animationScale: ({ theme }) => ({\n DEFAULT: 0,\n ...theme(\"scale\"),\n }),\n animationRotate: ({ theme }) => ({\n DEFAULT: \"30deg\",\n ...theme(\"rotate\"),\n }),\n animationRepeat: {\n 0: \"0\",\n 1: \"1\",\n infinite: \"infinite\",\n },\n keyframes: {\n enter: {\n from: {\n opacity: \"var(--tw-enter-opacity, 1)\",\n transform:\n \"translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))\",\n },\n },\n exit: {\n to: {\n opacity: \"var(--tw-exit-opacity, 1)\",\n transform:\n \"translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))\",\n },\n },\n },\n }\n },\n // Include safelist from cache and additional classes\n safelist: [\n ...(cache?.safelist || []),\n {\n pattern: /(text|fill)-icon-(neutral|positive|negative|warning|info|highlight|interactive|brand|inverse|onpositive|onnegative|onwarning|oninfo|onhighlight|oninteractive|onbrand)-(mid|strong|subtle|low)(-(neutral|hover|active|selected|disabled))?$/,\n },\n {\n pattern: /^(layer-(below|surface|raised|popover|dialog|control)|overlay-(mid|strong|subtle|low))$/,\n },\n ],\n // Set content paths - merge options with defaults\n content: options.content || defaultContent\n };\n }\n);\n\n// Default export is the plugin\nmodule.exports = pluginExport;\n\n// Export components config and icons with getter functions\n// This allows dynamic resolution at runtime\n\n// Create getter for config\nObject.defineProperty(module.exports, 'config', {\n get: function () {\n // Check for webpack-injected global variable\n if (typeof __FF_CONFIG__ !== 'undefined') {\n return __FF_CONFIG__;\n }\n\n // Check if we're in a browser environment\n if (typeof window !== 'undefined' && window.__FF_CONFIG__) {\n return window.__FF_CONFIG__;\n }\n\n // Node.js: load from cache\n if (CacheManager) {\n try {\n const cacheManager = new CacheManager(process.cwd());\n if (cacheManager.exists()) {\n const cache = cacheManager.load();\n if (cache) {\n return cache.componentsConfig || null;\n }\n }\n } catch (error) {\n // Config not available\n }\n }\n\n return null;\n }\n});\n\n// Create getter for iconSet\nObject.defineProperty(module.exports, 'iconSet', {\n get: function () {\n // Check for webpack-injected global variable\n if (typeof __FF_ICONS__ !== 'undefined') {\n return __FF_ICONS__;\n }\n\n // Check if we're in a browser environment\n if (typeof window !== 'undefined' && window.__FF_ICONS__) {\n return window.__FF_ICONS__;\n }\n\n // Node.js: load from cache\n if (CacheManager) {\n try {\n const cacheManager = new CacheManager(process.cwd());\n if (cacheManager.exists()) {\n const cache = cacheManager.load();\n if (cache) {\n return cache.icons || null;\n }\n }\n } catch (error) {\n // Icons not available\n }\n }\n\n return null;\n }\n});\n\n// Export ffdc utility\nmodule.exports.ffdc = require('./ffdc.js');"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["require_file_utils", "__commonJSMin", "exports", "module", "fs", "readJsonFileSafe", "filepath", "content", "error", "readFileSafe", "writeJsonFile", "data", "indent", "writeModuleExportsFile", "fileExists", "ensureDirectoryExists", "dirpath", "removeDirectory", "require_package", "__commonJSMin", "exports", "module", "require_main", "__commonJSMin", "exports", "module", "fs", "path", "os", "crypto", "packageJson", "version", "LINE", "parse", "src", "obj", "lines", "match", "key", "value", "maybeQuote", "_parseVault", "options", "vaultPath", "_vaultPath", "result", "DotenvModule", "err", "keys", "_dotenvKey", "length", "decrypted", "i", "attrs", "_instructions", "error", "_warn", "message", "_debug", "_log", "dotenvKey", "uri", "environment", "environmentKey", "ciphertext", "possibleVaultPath", "filepath", "_resolveHome", "envPath", "_configVault", "debug", "quiet", "parsed", "processEnv", "configDotenv", "dotenvPath", "encoding", "optionPaths", "lastError", "parsedAll", "e", "keysCount", "shortPaths", "filePath", "relative", "config", "decrypt", "encrypted", "keyStr", "nonce", "authTag", "aesgcm", "isRange", "invalidKeyLength", "decryptionFailed", "populate", "override", "require_env_utils", "__commonJSMin", "exports", "module", "path", "fileExists", "loadEnvLocal", "cwd", "envLocalPath", "getEnvVar", "name", "defaultValue", "isEnvTrue", "require_ffdc", "__commonJSMin", "exports", "module", "config", "plugin", "postcss", "CacheManager", "loadEnvLocal", "filterDefault", "values", "key", "pluginExport", "options", "addBase", "addUtilities", "theme", "matchUtilities", "cacheManager", "cache", "rootVars", "value", "semanticUtilities", "cssVar", "match", "prefix", "name", "className", "bgUtilities", "textUtilities", "borderUtilities", "fillUtilities", "textIconUtilities", "fontUtilities", "fontFace", "rawCss", "root", "baseNodes", "utilityNodes", "node", "error", "defaultContent"]
|
|
7
7
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var o=typeof window<"u"&&typeof window.document<"u",
|
|
1
|
+
var o=typeof window<"u"&&typeof window.document<"u",c=typeof process<"u"&&process.versions&&process.versions.node,s=function(){return o&&console.warn("[FrontFriend] The Tailwind plugin cannot be used directly in browser environments"),{}};function d(e){return!e||typeof e!="object"?new Proxy({},{get(n,_){return new Proxy({},{get(i,f){return new Proxy({},{get(){return""}})}})}}):e}var r=null,t=null;function F(){if(typeof __FF_CONFIG__<"u")return __FF_CONFIG__;if(typeof process<"u"&&process.env&&process.env.__FF_CONFIG__)try{return JSON.parse(process.env.__FF_CONFIG__)}catch{console.warn("[FrontFriend] Failed to parse __FF_CONFIG__ from environment")}return o&&window.__FF_CONFIG__?window.__FF_CONFIG__:null}function u(){if(typeof __FF_ICONS__<"u")return __FF_ICONS__;if(typeof process<"u"&&process.env&&process.env.__FF_ICONS__)try{return JSON.parse(process.env.__FF_ICONS__)}catch{console.warn("[FrontFriend] Failed to parse __FF_ICONS__ from environment")}return o&&window.__FF_ICONS__?window.__FF_ICONS__:null}var p=new Proxy({},{get(e,n){return r||(r=F()),r&&n in r?r[n]:new Proxy({},{get(_,i){return new Proxy({},{get(){return""}})}})}}),w=new Proxy({},{get(e,n){return t||(t=u()),t&&n in t?t[n]:null}}),l=s;export{p as config,l as default,d as ffdc,w as iconSet};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../index.mjs"],
|
|
4
|
-
"sourcesContent": ["// ES Module wrapper for frontfriend-tailwind\n// This file provides ES module exports for browser environments\n\n// Determine environment\nconst isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nconst isNode = typeof process !== 'undefined' && process.versions && process.versions.node;\n\n// Default plugin stub for browser\nconst plugin = function() {\n if (isBrowser) {\n console.warn('[FrontFriend] The Tailwind plugin cannot be used directly in browser environments');\n }\n return {};\n};\n\n// The ffdc function - with graceful fallback for SSR\nexport function ffdc(config) {\n // During SSR or initial load, config might not be available yet\n // Return a proxy that provides empty objects/strings for any property access\n if (!config || typeof config !== 'object') {\n return new Proxy({}, {\n get(target, prop) {\n // Return another proxy for nested property access\n return new Proxy({}, {\n get(target2, prop2) {\n // For deeply nested properties, return empty string or another proxy\n return new Proxy({}, {\n get() {\n return '';\n }\n });\n }\n });\n }\n });\n }\n \n return config;\n}\n\n// In browser environments, config and iconSet must be provided by the build system\n// (e.g., Vite plugin, webpack plugin, etc.) or loaded from a global variable\nlet _config = null;\nlet _iconSet = null;\n\n// Function to get config - tries multiple sources\nfunction getConfig() {\n // Try global variable first (webpack DefinePlugin)\n if (typeof __FF_CONFIG__ !== 'undefined') {\n return __FF_CONFIG__;\n }\n // Try window global\n if (isBrowser && window.__FF_CONFIG__) {\n return window.__FF_CONFIG__;\n }\n return null;\n}\n\n// Function to get icons - tries multiple sources\nfunction getIcons() {\n // Try global variable first (webpack DefinePlugin)\n if (typeof __FF_ICONS__ !== 'undefined') {\n return __FF_ICONS__;\n }\n // Try window global\n if (isBrowser && window.__FF_ICONS__) {\n return window.__FF_ICONS__;\n }\n return null;\n}\n\n// Export config - returns empty object if not loaded\nexport const config = new Proxy({}, {\n get(target, prop) {\n // Try to get config if not already loaded\n if (!_config) {\n _config = getConfig();\n }\n \n if (_config && prop in _config) {\n return _config[prop];\n }\n \n // Return a proxy that provides empty objects for any nested access\n // This prevents errors when accessing nested properties during SSR\n return new Proxy({}, {\n get(target2, prop2) {\n return new Proxy({}, {\n get() {\n return '';\n }\n });\n }\n });\n }\n});\n\n// Export iconSet - returns null if not loaded\nexport const iconSet = new Proxy({}, {\n get(target, prop) {\n // Try to get icons if not already loaded\n if (!_iconSet) {\n _iconSet = getIcons();\n }\n \n if (_iconSet && prop in _iconSet) {\n return _iconSet[prop];\n }\n return null;\n }\n});\n\n// Default export\nexport default plugin;"],
|
|
5
|
-
"mappings": "AAIA,IAAMA,EAAY,OAAO,OAAW,KAAe,OAAO,OAAO,SAAa,IACxEC,EAAS,OAAO,QAAY,KAAe,QAAQ,UAAY,QAAQ,SAAS,KAGhFC,EAAS,UAAW,CACxB,OAAIF,GACF,QAAQ,KAAK,mFAAmF,EAE3F,CAAC,CACV,EAGO,SAASG,EAAKC,EAAQ,CAG3B,MAAI,CAACA,GAAU,OAAOA,GAAW,SACxB,IAAI,MAAM,CAAC,EAAG,CACnB,IAAIC,EAAQC,EAAM,CAEhB,OAAO,IAAI,MAAM,CAAC,EAAG,CACnB,IAAIC,EAASC,EAAO,CAElB,OAAO,IAAI,MAAM,CAAC,EAAG,CACnB,KAAM,CACJ,MAAO,EACT,CACF,CAAC,CACH,CACF,CAAC,CACH,CACF,CAAC,EAGIJ,CACT,CAIA,IAAIK,EAAU,KACVC,EAAW,KAGf,SAASC,GAAY,CAEnB,
|
|
4
|
+
"sourcesContent": ["// ES Module wrapper for frontfriend-tailwind\n// This file provides ES module exports for browser environments\n\n// Determine environment\nconst isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nconst isNode = typeof process !== 'undefined' && process.versions && process.versions.node;\n\n// Default plugin stub for browser\nconst plugin = function() {\n if (isBrowser) {\n console.warn('[FrontFriend] The Tailwind plugin cannot be used directly in browser environments');\n }\n return {};\n};\n\n// The ffdc function - with graceful fallback for SSR\nexport function ffdc(config) {\n // During SSR or initial load, config might not be available yet\n // Return a proxy that provides empty objects/strings for any property access\n if (!config || typeof config !== 'object') {\n return new Proxy({}, {\n get(target, prop) {\n // Return another proxy for nested property access\n return new Proxy({}, {\n get(target2, prop2) {\n // For deeply nested properties, return empty string or another proxy\n return new Proxy({}, {\n get() {\n return '';\n }\n });\n }\n });\n }\n });\n }\n \n return config;\n}\n\n// In browser environments, config and iconSet must be provided by the build system\n// (e.g., Vite plugin, webpack plugin, etc.) or loaded from a global variable\nlet _config = null;\nlet _iconSet = null;\n\n// Function to get config - tries multiple sources\nfunction getConfig() {\n // Try global variable first (webpack DefinePlugin)\n if (typeof __FF_CONFIG__ !== 'undefined') {\n return __FF_CONFIG__;\n }\n // Try environment variable (Turbopack compatibility)\n if (typeof process !== 'undefined' && process.env && process.env.__FF_CONFIG__) {\n try {\n return JSON.parse(process.env.__FF_CONFIG__);\n } catch (e) {\n console.warn('[FrontFriend] Failed to parse __FF_CONFIG__ from environment');\n }\n }\n // Try window global\n if (isBrowser && window.__FF_CONFIG__) {\n return window.__FF_CONFIG__;\n }\n return null;\n}\n\n// Function to get icons - tries multiple sources\nfunction getIcons() {\n // Try global variable first (webpack DefinePlugin)\n if (typeof __FF_ICONS__ !== 'undefined') {\n return __FF_ICONS__;\n }\n // Try environment variable (Turbopack compatibility)\n if (typeof process !== 'undefined' && process.env && process.env.__FF_ICONS__) {\n try {\n return JSON.parse(process.env.__FF_ICONS__);\n } catch (e) {\n console.warn('[FrontFriend] Failed to parse __FF_ICONS__ from environment');\n }\n }\n // Try window global\n if (isBrowser && window.__FF_ICONS__) {\n return window.__FF_ICONS__;\n }\n return null;\n}\n\n// Export config - returns empty object if not loaded\nexport const config = new Proxy({}, {\n get(target, prop) {\n // Try to get config if not already loaded\n if (!_config) {\n _config = getConfig();\n }\n \n if (_config && prop in _config) {\n return _config[prop];\n }\n \n // Return a proxy that provides empty objects for any nested access\n // This prevents errors when accessing nested properties during SSR\n return new Proxy({}, {\n get(target2, prop2) {\n return new Proxy({}, {\n get() {\n return '';\n }\n });\n }\n });\n }\n});\n\n// Export iconSet - returns null if not loaded\nexport const iconSet = new Proxy({}, {\n get(target, prop) {\n // Try to get icons if not already loaded\n if (!_iconSet) {\n _iconSet = getIcons();\n }\n \n if (_iconSet && prop in _iconSet) {\n return _iconSet[prop];\n }\n return null;\n }\n});\n\n// Default export\nexport default plugin;"],
|
|
5
|
+
"mappings": "AAIA,IAAMA,EAAY,OAAO,OAAW,KAAe,OAAO,OAAO,SAAa,IACxEC,EAAS,OAAO,QAAY,KAAe,QAAQ,UAAY,QAAQ,SAAS,KAGhFC,EAAS,UAAW,CACxB,OAAIF,GACF,QAAQ,KAAK,mFAAmF,EAE3F,CAAC,CACV,EAGO,SAASG,EAAKC,EAAQ,CAG3B,MAAI,CAACA,GAAU,OAAOA,GAAW,SACxB,IAAI,MAAM,CAAC,EAAG,CACnB,IAAIC,EAAQC,EAAM,CAEhB,OAAO,IAAI,MAAM,CAAC,EAAG,CACnB,IAAIC,EAASC,EAAO,CAElB,OAAO,IAAI,MAAM,CAAC,EAAG,CACnB,KAAM,CACJ,MAAO,EACT,CACF,CAAC,CACH,CACF,CAAC,CACH,CACF,CAAC,EAGIJ,CACT,CAIA,IAAIK,EAAU,KACVC,EAAW,KAGf,SAASC,GAAY,CAEnB,GAAI,OAAO,cAAkB,IAC3B,OAAO,cAGT,GAAI,OAAO,QAAY,KAAe,QAAQ,KAAO,QAAQ,IAAI,cAC/D,GAAI,CACF,OAAO,KAAK,MAAM,QAAQ,IAAI,aAAa,CAC7C,MAAY,CACV,QAAQ,KAAK,8DAA8D,CAC7E,CAGF,OAAIX,GAAa,OAAO,cACf,OAAO,cAET,IACT,CAGA,SAASY,GAAW,CAElB,GAAI,OAAO,aAAiB,IAC1B,OAAO,aAGT,GAAI,OAAO,QAAY,KAAe,QAAQ,KAAO,QAAQ,IAAI,aAC/D,GAAI,CACF,OAAO,KAAK,MAAM,QAAQ,IAAI,YAAY,CAC5C,MAAY,CACV,QAAQ,KAAK,6DAA6D,CAC5E,CAGF,OAAIZ,GAAa,OAAO,aACf,OAAO,aAET,IACT,CAGO,IAAMI,EAAS,IAAI,MAAM,CAAC,EAAG,CAClC,IAAIC,EAAQC,EAAM,CAMhB,OAJKG,IACHA,EAAUE,EAAU,GAGlBF,GAAWH,KAAQG,EACdA,EAAQH,CAAI,EAKd,IAAI,MAAM,CAAC,EAAG,CACnB,IAAIC,EAASC,EAAO,CAClB,OAAO,IAAI,MAAM,CAAC,EAAG,CACnB,KAAM,CACJ,MAAO,EACT,CACF,CAAC,CACH,CACF,CAAC,CACH,CACF,CAAC,EAGYK,EAAU,IAAI,MAAM,CAAC,EAAG,CACnC,IAAIR,EAAQC,EAAM,CAMhB,OAJKI,IACHA,EAAWE,EAAS,GAGlBF,GAAYJ,KAAQI,EACfA,EAASJ,CAAI,EAEf,IACT,CACF,CAAC,EAGMQ,EAAQZ",
|
|
6
6
|
"names": ["isBrowser", "isNode", "plugin", "ffdc", "config", "target", "prop", "target2", "prop2", "_config", "_iconSet", "getConfig", "getIcons", "iconSet", "frontfriend_tailwind_default"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var V=(
|
|
1
|
+
var V=(d,e)=>()=>(e||d((e={exports:{}}).exports,e),e.exports);var x=V((S,O)=>{var v=class extends Error{constructor(e,s,o){super(e),this.name="APIError",this.statusCode=s,this.url=o,this.code=`API_${s}`}},C=class extends Error{constructor(e,s){super(e),this.name="CacheError",this.operation=s,this.code=`CACHE_${s.toUpperCase()}`}},k=class extends Error{constructor(e,s){super(e),this.name="ConfigError",this.field=s,this.code=`CONFIG_${s.toUpperCase()}`}},F=class extends Error{constructor(e,s){super(e),this.name="ProcessingError",this.token=s,this.code="PROCESSING_ERROR"}};O.exports={APIError:v,CacheError:C,ConfigError:k,ProcessingError:F}});var N=require("color"),w=require("https"),{ProcessingError:W}=x(),g=class{hexToHsl(e){try{let s=N(e),o=s.hsl(),t=Math.round(o.hue()),n=Math.round(o.saturationl()),l=Math.round(o.lightness()),i=s.alpha();if(i<1){let a=Math.round(i*100)/100;return`${t} ${n}% ${l}% / ${a}`}return`${t} ${n}% ${l}%`}catch(s){throw new W(`Failed to convert color ${e}: ${s.message}`,e)}}processColors(e){let s={},o={},t={backgroundColor:{},textColor:{},borderColor:{}};if(!e||typeof e!="object")return console.log(" \u26A0\uFE0F No valid color data to process"),{variables:s,colorMap:o,utilities:t};let n=(l,i="")=>{for(let[a,c]of Object.entries(l))if(c&&typeof c=="object")if(c.$value){let r=i?`${i}-${a}`:a,u=`--color-${r}`,f=this.hexToHsl(c.$value);s[u]=f,o[r]=u,t.backgroundColor[r]=`hsl(var(${u}))`,t.textColor[r]=`hsl(var(${u}))`,t.borderColor[r]=`hsl(var(${u}))`}else{let r=i?`${i}-${a}`:a;n(c,r)}};return e&&(e.colors?n(e.colors):n(e)),{variables:s,colorMap:o,utilities:t}}processSemanticTokens(e,s){let o={},t={backgroundColor:{},textColor:{},borderColor:{}},n=a=>a.replace(/ /g,"").replace(/\./g,"-").toLowerCase(),l=a=>{if(typeof a!="string")return null;let c=a.match(/^\{(.+)\}$/);if(!c)return null;let r=c[1].split(".");return r[0]==="colors"&&r.length>1?r[1]==="colors"&&r.length>2?r.slice(2).join("-"):r.slice(1).join("-"):r.join("-")},i=(a,c)=>{if(e[a])for(let[r,u]of Object.entries(e[a])){if(r==="disabled"){let f=l(u.$value);if(f){let m=s[f];if(m){let h=`--${a}-disabled`;o[h]=`var(${m})`,t[c].disabled=`var(${h})`}}continue}for(let[f,m]of Object.entries(u))for(let[h,p]of Object.entries(m)){let $=n(`${r}-${f}-${h}`);$.endsWith("-default")&&($=$.slice(0,-8));let y=`--${a}-${$}`,j=l(p.$value);if(j){let b=s[j];b&&(o[y]=`var(${b})`,t[c][$]=`var(${y})`)}else if(p.$value){let b=this.hexToHsl(p.$value);o[y]=b,t[c][$]=`hsl(var(${y}))`}}}};if(i("bg","backgroundColor"),i("text","textColor"),i("border","borderColor"),e.layer)for(let[a,c]of Object.entries(e.layer)){let r=`--layer-${a}`,u=l(c.$value);if(u){let f=u.replace(/\./g,"-").toLowerCase();if(f.endsWith("-default")&&(f=f.slice(0,-8)),f.startsWith("bg-")||f.startsWith("text-")||f.startsWith("border-")){let m=`--${f}`;o[r]=`var(${m})`,t.backgroundColor[`layer-${a}`]=`var(${r})`}else{let m=s[f];m&&(o[r]=`var(${m})`,t.backgroundColor[`layer-${a}`]=`var(${r})`)}}else if(c.$value){let f=this.hexToHsl(c.$value);o[r]=f,t.backgroundColor[`layer-${a}`]=`hsl(var(${r}))`}}if(e.overlay)for(let[a,c]of Object.entries(e.overlay)){let r=`--overlay-${a}`;c.$value&&(o[r]=c.$value,t.backgroundColor[`overlay-${a}`]=`var(${r})`)}if(e.icon){t.fill||(t.fill={});for(let[a,c]of Object.entries(e.icon)){if(a==="disabled"){let r=l(c.$value);if(r){let u=s[r];if(u){let f="--icon-disabled";o[f]=`var(${u})`,t.textColor["icon-disabled"]=`var(${f})`,t.fill["icon-disabled"]=`var(${f})`}}continue}for(let[r,u]of Object.entries(c))for(let[f,m]of Object.entries(u)){let h=n(`icon-${a}-${r}-${f}`);h.endsWith("-default")&&(h=h.slice(0,-8));let p=`--${h}`,$=l(m.$value);if($){let y=s[$];y&&(o[p]=`var(${y})`,t.textColor[h]=`var(${p})`,t.fill[h]=`var(${p})`)}}}}return{semanticVariables:o,tokens:t}}async fetchFontCss(e){return new Promise((s,o)=>{w.get(e,t=>{let n="";if(t.statusCode!==200){o(new Error(`Failed to fetch font CSS: ${t.statusCode}`));return}t.on("data",l=>{n+=l}),t.on("end",()=>{s(n)}),t.on("error",l=>{o(l)})}).on("error",t=>{o(t)})})}parseFontFaces(e){let s=/@font-face\s*{([^}]+)}/g,o=[],t;for(;(t=s.exec(e))!==null;){let n=t[1].trim().split(";").filter(Boolean),l={};n.forEach(i=>{let a=i.indexOf(":");if(a!==-1){let c=i.slice(0,a).trim(),r=i.slice(a+1).trim();c==="font-family"?l[c]=r.replace(/["']/g,""):l[c]=r}}),l.src&&(l.src=l.src.replace(/url\(["']?/,"url('").replace(/["']?\)/,"')")),o.push(l)}return o}async processFonts(e){let s=[];if(!e||typeof e!="object")return s;let o=Object.keys(e).filter(t=>t.startsWith("font"));for(let t of o){let n=e[t];if(typeof n=="string"&&n.startsWith("http"))try{let l=await this.fetchFontCss(n),i=this.parseFontFaces(l);i.length>0&&s.push(...i)}catch(l){console.warn(`Failed to process font ${t}:`,l.message)}}return s}processFontFamilies(e){let s={};if(!e||!e.font||!e.font.family)return s;let o=e.font.family;for(let[t,n]of Object.entries(o))if(n&&n.$value){let l=t.toLowerCase(),i=n.$value;typeof i=="string"&&i.startsWith("{")&&i.endsWith("}")&&(i=i.slice(1,-1));let a=c=>c.split(" ").map(r=>r.charAt(0).toUpperCase()+r.slice(1).toLowerCase()).join(" ");if(i.includes(","))s[l]=i;else{let c=a(i);c.includes(" ")&&!c.startsWith('"')&&!c.startsWith("'")?s[l]=`"${c}", sans-serif`:s[l]=`${c}, sans-serif`}}return s}processAnimations(e){let s={},o={};if(!e||typeof e!="object")return{keyframes:s,animations:o};for(let[t,n]of Object.entries(e))if(n&&typeof n=="object"){let l=`${t}`;if(n.keyframes){let a={};for(let[c,r]of Object.entries(n.keyframes))r&&typeof r=="object"&&(a[c]=r);s[l]=a}let i=[l,n.duration||"1s",n.easing||"ease",n.delay||"0s",n.iterations||"1",n.direction||"normal",n.fillMode||"none"].join(" ");o[t]=i}return{keyframes:s,animations:o}}generateSafelistClasses(e){let s=[];if(e.backgroundColor)for(let o of Object.keys(e.backgroundColor))s.push(`bg-${o}`);if(e.textColor)for(let o of Object.keys(e.textColor))s.push(`text-${o}`);if(e.borderColor)for(let o of Object.keys(e.borderColor))s.push(`border-${o}`);if(e.fill)for(let o of Object.keys(e.fill))s.push(`fill-${o}`),o.startsWith("icon-")&&s.push(`text-${o}`);if(e.fontFamily)for(let o of Object.keys(e.fontFamily))s.push(`font-${o}`);if(e.animations)for(let o of Object.keys(e.animations))s.push(`animate-${o}`);return s}extractClassesFromComponentsConfig(e){let s=new Set,o=n=>{typeof n=="string"&&n.split(/\s+/).filter(i=>i.length>0).forEach(i=>{s.add(i)})},t=n=>{if(!(!n||typeof n!="object"))for(let l in n){let i=n[l];typeof i=="string"?o(i):typeof i=="object"&&t(i)}};return e&&t(e),Array.from(s).sort()}processCustomCss(e){return!e||typeof e!="string"?{}:{raw:e}}async process(e){try{let s={variables:{},semanticVariables:{},semanticDarkVariables:{},utilities:{},fontFaces:[],keyframes:{},animations:{},safelist:[],metadata:{},custom:e.customCss?this.processCustomCss(e.customCss):{}},o=null;if(e.tokens&&typeof e.tokens=="object"){let t=e.tokens;o=t["Global Colors/Default"]||t["Global Colors"]||t.colors||t}else e.colors&&(o=e.colors);if(o){let t=this.processColors(o);s.variables={...s.variables,...t.variables},s.utilities={...s.utilities,...t.utilities},s.colorMap=t.colorMap||{}}else s.colorMap={};if(e.semantic&&s.colorMap){let t=this.processSemanticTokens(e.semantic,s.colorMap);s.semanticVariables=t.semanticVariables,t.tokens&&(s.tokens=t.tokens,s.utilities=t.tokens)}if(e.semanticDark&&s.colorMap){let t=this.processSemanticTokens(e.semanticDark,s.colorMap);s.semanticDarkVariables=t.semanticVariables}if(e.fonts&&(s.fontFaces=await this.processFonts(e.fonts)),e.globalTokens&&(s.fontFamilies=this.processFontFamilies(e.globalTokens),s.fontFamilies&&(s.utilities.fontFamily||(s.utilities.fontFamily={}),Object.assign(s.utilities.fontFamily,s.fontFamilies))),e.animations){let t=this.processAnimations(e.animations);s.keyframes=t.keyframes,s.animations=t.animations}return s.safelist=this.generateSafelistClasses(s.tokens||s.utilities),s.metadata={timestamp:new Date().toISOString(),version:e.version||"2.0.0",ffId:e.ffId},s}catch(s){throw console.error("Error processing tokens:",s),s}}};module.exports=g;
|
|
2
2
|
//# sourceMappingURL=token-processor.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../lib/core/errors.js", "../../../lib/core/token-processor.js"],
|
|
4
|
-
"sourcesContent": ["class APIError extends Error {\n constructor(message, statusCode, url) {\n super(message);\n this.name = 'APIError';\n this.statusCode = statusCode;\n this.url = url;\n this.code = `API_${statusCode}`;\n }\n}\n\nclass CacheError extends Error {\n constructor(message, operation) {\n super(message);\n this.name = 'CacheError';\n this.operation = operation;\n this.code = `CACHE_${operation.toUpperCase()}`;\n }\n}\n\nclass ConfigError extends Error {\n constructor(message, field) {\n super(message);\n this.name = 'ConfigError';\n this.field = field;\n this.code = `CONFIG_${field.toUpperCase()}`;\n }\n}\n\nclass ProcessingError extends Error {\n constructor(message, token) {\n super(message);\n this.name = 'ProcessingError';\n this.token = token;\n this.code = 'PROCESSING_ERROR';\n }\n}\n\nmodule.exports = {\n APIError,\n CacheError,\n ConfigError,\n ProcessingError\n};", "const Color = require('color');\nconst https = require('https');\nconst { ProcessingError } = require('./errors');\n\nclass TokenProcessor {\n /**\n * Convert hex color to HSL format for Tailwind CSS\n * @param {string} hex - Hex color value\n * @returns {string} HSL string in format \"H S% L%\"\n */\n hexToHsl(hex) {\n try {\n const color = Color(hex);\n const hsl = color.hsl();\n \n // Get HSL values\n const h = Math.round(hsl.hue());\n const s = Math.round(hsl.saturationl());\n const l = Math.round(hsl.lightness());\n \n // Handle alpha channel if present\n const alpha = color.alpha();\n if (alpha < 1) {\n // Round alpha to 2 decimal places\n const roundedAlpha = Math.round(alpha * 100) / 100;\n return `${h} ${s}% ${l}% / ${roundedAlpha}`;\n }\n \n return `${h} ${s}% ${l}%`;\n } catch (error) {\n throw new ProcessingError(`Failed to convert color ${hex}: ${error.message}`, hex);\n }\n }\n\n /**\n * Process color tokens into CSS variables\n * @param {Object} colorsData - Color tokens data\n * @returns {Object} Processed variables and color map\n */\n processColors(colorsData) {\n const variables = {};\n const colorMap = {};\n const utilities = {\n backgroundColor: {},\n textColor: {},\n borderColor: {}\n };\n\n // Check if we have valid color data\n if (!colorsData || typeof colorsData !== 'object') {\n console.log(' \u26A0\uFE0F No valid color data to process');\n return { variables, colorMap, utilities };\n }\n\n // Recursive function to process nested color structures\n const processColorGroup = (obj, prefix = '') => {\n for (const [key, value] of Object.entries(obj)) {\n if (value && typeof value === 'object') {\n if (value.$value) {\n // This is a color value\n const colorName = prefix ? `${prefix}-${key}` : key;\n const varName = `--color-${colorName}`;\n \n // Convert hex to HSL\n const hslValue = this.hexToHsl(value.$value);\n variables[varName] = hslValue;\n colorMap[colorName] = varName;\n \n // Generate Tailwind utilities\n utilities.backgroundColor[colorName] = `hsl(var(${varName}))`;\n utilities.textColor[colorName] = `hsl(var(${varName}))`;\n utilities.borderColor[colorName] = `hsl(var(${varName}))`;\n } else {\n // Nested structure, recurse\n const newPrefix = prefix ? `${prefix}-${key}` : key;\n processColorGroup(value, newPrefix);\n }\n }\n }\n };\n\n // Process colors - handle both nested and flat structures\n if (colorsData) {\n if (colorsData.colors) {\n processColorGroup(colorsData.colors);\n } else {\n // Direct color structure\n processColorGroup(colorsData);\n }\n }\n\n return {\n variables,\n colorMap,\n utilities\n };\n }\n\n /**\n * Process semantic tokens that reference other tokens\n * @param {Object} semanticData - Semantic tokens data\n * @param {Object} colorMap - Map of color names to CSS variables\n * @returns {Object} Semantic CSS variables and token utilities\n */\n processSemanticTokens(semanticData, colorMap) {\n const semanticVariables = {};\n const tokens = {\n backgroundColor: {},\n textColor: {},\n borderColor: {}\n };\n\n // Format token name (similar to current plugin)\n const formatTokenName = (name) => {\n return name.replace(/ /g, '').replace(/\\./g, '-').toLowerCase();\n };\n\n // Extract token reference from string like \"{colors.primary.500}\"\n const extractReference = (refString) => {\n // Handle non-string values\n if (typeof refString !== 'string') return null;\n \n const match = refString.match(/^\\{(.+)\\}$/);\n if (!match) return null;\n \n // Split the reference path and remove the first part if it's \"colors\"\n const parts = match[1].split('.');\n if (parts[0] === 'colors' && parts.length > 1) {\n // Check if second part is also \"colors\" (nested structure)\n if (parts[1] === 'colors' && parts.length > 2) {\n return parts.slice(2).join('-');\n }\n return parts.slice(1).join('-');\n }\n return parts.join('-');\n };\n\n // Process semantic category (bg, text, border)\n const processCategory = (category, outputCategory) => {\n if (!semanticData[category]) return;\n\n for (const [key, value] of Object.entries(semanticData[category])) {\n if (key === 'disabled') {\n // Handle disabled state specially\n const reference = extractReference(value.$value);\n if (reference) {\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n const varName = `--${category}-disabled`;\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens[outputCategory]['disabled'] = `var(${varName})`;\n }\n }\n continue;\n }\n\n // Process nested structure (e.g., neutral -> low -> default)\n for (const [mainKey, mainValue] of Object.entries(value)) {\n for (const [stateKey, stateValue] of Object.entries(mainValue)) {\n let tokenKey = formatTokenName(`${key}-${mainKey}-${stateKey}`);\n \n // Remove '-default' suffix for cleaner class names\n if (tokenKey.endsWith('-default')) {\n tokenKey = tokenKey.slice(0, -8);\n }\n\n const varName = `--${category}-${tokenKey}`;\n \n // Check if it's a reference\n const reference = extractReference(stateValue.$value);\n if (reference) {\n // Look up the referenced color variable\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens[outputCategory][tokenKey] = `var(${varName})`;\n }\n } else if (stateValue.$value) {\n // Direct hex value - convert to HSL\n const hslValue = this.hexToHsl(stateValue.$value);\n semanticVariables[varName] = hslValue;\n tokens[outputCategory][tokenKey] = `hsl(var(${varName}))`;\n }\n }\n }\n }\n };\n\n // Process semantic categories\n processCategory('bg', 'backgroundColor');\n processCategory('text', 'textColor');\n processCategory('border', 'borderColor');\n\n // Process layer tokens\n if (semanticData.layer) {\n for (const [layerKey, layerValue] of Object.entries(semanticData.layer)) {\n const varName = `--layer-${layerKey}`;\n const reference = extractReference(layerValue.$value);\n \n if (reference) {\n // Format the reference to match semantic token naming\n let formattedRef = reference.replace(/\\./g, '-').toLowerCase();\n \n // Remove -default suffix if present\n if (formattedRef.endsWith('-default')) {\n formattedRef = formattedRef.slice(0, -8);\n }\n \n // Check if it's a semantic reference (e.g., bg-neutral-subtle)\n if (formattedRef.startsWith('bg-') || formattedRef.startsWith('text-') || formattedRef.startsWith('border-')) {\n // It's referencing a semantic token\n const semanticVar = `--${formattedRef}`;\n semanticVariables[varName] = `var(${semanticVar})`;\n tokens.backgroundColor[`layer-${layerKey}`] = `var(${varName})`;\n } else {\n // It's referencing a color token\n const referencedVar = colorMap[formattedRef];\n if (referencedVar) {\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens.backgroundColor[`layer-${layerKey}`] = `var(${varName})`;\n }\n }\n } else if (layerValue.$value) {\n // Direct value\n const hslValue = this.hexToHsl(layerValue.$value);\n semanticVariables[varName] = hslValue;\n tokens.backgroundColor[`layer-${layerKey}`] = `hsl(var(${varName}))`;\n }\n }\n }\n\n // Process overlay tokens\n if (semanticData.overlay) {\n for (const [overlayKey, overlayValue] of Object.entries(semanticData.overlay)) {\n const varName = `--overlay-${overlayKey}`;\n \n if (overlayValue.$value) {\n // Overlay values are hex colors with alpha, keep them as-is\n semanticVariables[varName] = overlayValue.$value;\n tokens.backgroundColor[`overlay-${overlayKey}`] = `var(${varName})`;\n }\n }\n }\n\n // Process icon tokens (map to text and fill colors)\n if (semanticData.icon) {\n // Ensure fill property exists\n if (!tokens.fill) {\n tokens.fill = {};\n }\n \n for (const [iconKey, iconValue] of Object.entries(semanticData.icon)) {\n if (iconKey === 'disabled') {\n const reference = extractReference(iconValue.$value);\n if (reference) {\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n const varName = `--icon-disabled`;\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens.textColor['icon-disabled'] = `var(${varName})`;\n tokens.fill['icon-disabled'] = `var(${varName})`;\n }\n }\n continue;\n }\n\n for (const [mainKey, mainValue] of Object.entries(iconValue)) {\n for (const [stateKey, stateValue] of Object.entries(mainValue)) {\n let tokenKey = formatTokenName(`icon-${iconKey}-${mainKey}-${stateKey}`);\n if (tokenKey.endsWith('-default')) {\n tokenKey = tokenKey.slice(0, -8);\n }\n\n const varName = `--${tokenKey}`;\n const reference = extractReference(stateValue.$value);\n \n if (reference) {\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens.textColor[tokenKey] = `var(${varName})`;\n tokens.fill[tokenKey] = `var(${varName})`;\n }\n }\n }\n }\n }\n }\n\n return { semanticVariables, tokens };\n }\n\n /**\n * Fetch CSS from URL and parse font-face rules\n * @param {string} url - Font CSS URL\n * @returns {Promise<string>} Font face CSS\n */\n async fetchFontCss(url) {\n return new Promise((resolve, reject) => {\n https.get(url, (response) => {\n let data = '';\n \n if (response.statusCode !== 200) {\n reject(new Error(`Failed to fetch font CSS: ${response.statusCode}`));\n return;\n }\n\n response.on('data', (chunk) => {\n data += chunk;\n });\n\n response.on('end', () => {\n resolve(data);\n });\n\n response.on('error', (error) => {\n reject(error);\n });\n }).on('error', (error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Parse font-face CSS into structured objects\n * @param {string} css - CSS text containing @font-face rules\n * @returns {Array} Array of font-face objects\n */\n parseFontFaces(css) {\n const fontFaceRegex = /@font-face\\s*{([^}]+)}/g;\n const fontFaces = [];\n let match;\n\n while ((match = fontFaceRegex.exec(css)) !== null) {\n const fontProperties = match[1].trim().split(';').filter(Boolean);\n const fontObj = {};\n\n fontProperties.forEach(prop => {\n const colonIndex = prop.indexOf(':');\n if (colonIndex !== -1) {\n const key = prop.slice(0, colonIndex).trim();\n const value = prop.slice(colonIndex + 1).trim();\n \n // Clean up quotes from font-family\n if (key === 'font-family') {\n fontObj[key] = value.replace(/[\"']/g, '');\n } else {\n fontObj[key] = value;\n }\n }\n });\n\n // Ensure src URLs are properly quoted\n if (fontObj['src']) {\n fontObj['src'] = fontObj['src']\n .replace(/url\\([\"']?/, 'url(\\'')\n .replace(/[\"']?\\)/, '\\')');\n }\n\n fontFaces.push(fontObj);\n }\n\n return fontFaces;\n }\n\n /**\n * Process fonts data\n * @param {Object} fontData - Font URLs object\n * @returns {Promise<Array>} Array of font-face objects\n */\n async processFonts(fontData) {\n const fontFaces = [];\n\n if (!fontData || typeof fontData !== 'object') {\n return fontFaces;\n }\n\n // Process each font URL (font, font2, etc.)\n const fontFields = Object.keys(fontData).filter(key => key.startsWith('font'));\n \n for (const field of fontFields) {\n const url = fontData[field];\n if (typeof url === 'string' && url.startsWith('http')) {\n try {\n const css = await this.fetchFontCss(url);\n const parsedFonts = this.parseFontFaces(css);\n \n if (parsedFonts.length > 0) {\n fontFaces.push(...parsedFonts);\n }\n } catch (error) {\n console.warn(`Failed to process font ${field}:`, error.message);\n }\n }\n }\n\n return fontFaces;\n }\n\n /**\n * Process font family tokens\n * @param {Object} globalTokens - Global tokens data containing font families\n * @returns {Object} Font family utilities\n */\n processFontFamilies(globalTokens) {\n const fontFamilyUtilities = {};\n \n if (!globalTokens || !globalTokens.font || !globalTokens.font.family) {\n return fontFamilyUtilities;\n }\n\n const fontFamilies = globalTokens.font.family;\n \n // Process each font family (primary, secondary, etc.)\n for (const [key, value] of Object.entries(fontFamilies)) {\n if (value && value.$value) {\n // Format the key (e.g., primary -> primary)\n const fontKey = key.toLowerCase();\n \n // Extract font family value\n let fontFamilyValue = value.$value;\n \n // If it's a reference, extract it\n if (typeof fontFamilyValue === 'string' && fontFamilyValue.startsWith('{') && fontFamilyValue.endsWith('}')) {\n // This is a reference, but for font families we usually have direct values\n fontFamilyValue = fontFamilyValue.slice(1, -1);\n }\n \n // Store the font family utility\n // Store the font family utility - ensure proper quoting for multi-word fonts\n // For Tailwind, we need to format font families properly\n \n // Capitalize the first letter of each word in font names for proper rendering\n const capitalizeFontName = (name) => {\n return name.split(' ').map(word => \n word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n ).join(' ');\n };\n \n // Check if it's already a font stack or needs quoting\n if (fontFamilyValue.includes(',')) {\n // It's already a font stack, use as is\n fontFamilyUtilities[fontKey] = fontFamilyValue;\n } else {\n // Capitalize the font name\n const capitalizedFont = capitalizeFontName(fontFamilyValue);\n \n if (capitalizedFont.includes(' ') && !capitalizedFont.startsWith('\"') && !capitalizedFont.startsWith(\"'\")) {\n // Multi-word font needs quotes, add generic fallback\n fontFamilyUtilities[fontKey] = `\"${capitalizedFont}\", sans-serif`;\n } else {\n // Single word font, add generic fallback\n fontFamilyUtilities[fontKey] = `${capitalizedFont}, sans-serif`;\n }\n }\n }\n }\n \n return fontFamilyUtilities;\n }\n\n /**\n * Process animations data\n * @param {Object} animationData - Animation definitions\n * @returns {Object} Keyframes and animation utilities\n */\n processAnimations(animationData) {\n const keyframes = {};\n const animations = {};\n\n if (!animationData || typeof animationData !== 'object') {\n return { keyframes, animations };\n }\n\n // Process each animation\n for (const [name, definition] of Object.entries(animationData)) {\n if (definition && typeof definition === 'object') {\n // Generate keyframe name\n const keyframeName = `${name}`;\n \n // Process keyframe steps\n if (definition.keyframes) {\n const keyframeSteps = {};\n \n for (const [step, props] of Object.entries(definition.keyframes)) {\n if (props && typeof props === 'object') {\n keyframeSteps[step] = props;\n }\n }\n \n keyframes[keyframeName] = keyframeSteps;\n }\n\n // Create animation utility\n const animationValue = [\n keyframeName,\n definition.duration || '1s',\n definition.easing || 'ease',\n definition.delay || '0s',\n definition.iterations || '1',\n definition.direction || 'normal',\n definition.fillMode || 'none'\n ].join(' ');\n\n animations[name] = animationValue;\n }\n }\n\n return { keyframes, animations };\n }\n\n /**\n * Generate safelist classes for Tailwind\n * @param {Object} tokens - All processed tokens\n * @returns {Array} Safelist patterns\n */\n generateSafelistClasses(tokens) {\n const safelist = [];\n const variants = ['hover:', 'focus:', 'active:', 'disabled:', 'dark:'];\n\n // Add semantic token utilities (bg-, text-, border-)\n if (tokens.backgroundColor) {\n for (const tokenName of Object.keys(tokens.backgroundColor)) {\n safelist.push(`bg-${tokenName}`);\n \n // Add variants\n variants.forEach(variant => {\n safelist.push(`${variant}bg-${tokenName}`);\n });\n }\n }\n\n if (tokens.textColor) {\n for (const tokenName of Object.keys(tokens.textColor)) {\n safelist.push(`text-${tokenName}`);\n \n // Add variants\n variants.forEach(variant => {\n safelist.push(`${variant}text-${tokenName}`);\n });\n }\n }\n\n if (tokens.borderColor) {\n for (const tokenName of Object.keys(tokens.borderColor)) {\n safelist.push(`border-${tokenName}`);\n \n // Add variants\n variants.forEach(variant => {\n safelist.push(`${variant}border-${tokenName}`);\n });\n }\n }\n\n // Add fill utilities (for icons)\n if (tokens.fill) {\n for (const tokenName of Object.keys(tokens.fill)) {\n safelist.push(`fill-${tokenName}`);\n \n // Also add text-icon-* classes\n if (tokenName.startsWith('icon-')) {\n safelist.push(`text-${tokenName}`);\n }\n }\n }\n\n // Add font family utilities\n if (tokens.fontFamily) {\n for (const fontName of Object.keys(tokens.fontFamily)) {\n safelist.push(`font-${fontName}`);\n }\n }\n\n // Add animation classes\n if (tokens.animations) {\n for (const animationName of Object.keys(tokens.animations)) {\n safelist.push(`animate-${animationName}`);\n }\n }\n\n return safelist;\n }\n\n /**\n * Extract unique classes from components configuration\n * @param {Object} componentsConfig - Components configuration object\n * @returns {Array} Array of unique class names\n */\n extractClassesFromComponentsConfig(componentsConfig) {\n const classSet = new Set();\n\n // Helper function to extract classes from a string\n const extractClasses = (classString) => {\n if (typeof classString === 'string') {\n // Split by spaces and filter out empty strings\n const classes = classString.split(/\\s+/).filter(c => c.length > 0);\n classes.forEach(cls => {\n // Skip variant selectors like [&>svg]:absolute\n classSet.add(cls);\n });\n }\n };\n\n // Recursive function to traverse the config object\n const traverse = (obj) => {\n if (!obj || typeof obj !== 'object') return;\n\n for (const key in obj) {\n const value = obj[key];\n \n if (typeof value === 'string') {\n extractClasses(value);\n } else if (typeof value === 'object') {\n traverse(value);\n }\n }\n };\n\n // Process the components config\n if (componentsConfig) {\n traverse(componentsConfig);\n }\n\n // Convert set to array and sort\n return Array.from(classSet).sort();\n }\n\n /**\n * Process custom CSS into a format compatible with Tailwind's addBase\n * @param {string} css - Raw CSS string\n * @returns {Object} CSS rules as object for Tailwind addBase\n */\n processCustomCss(css) {\n if (!css || typeof css !== 'string') {\n return {};\n }\n\n // Simply return the raw CSS as a string that can be added via addBase\n return { raw: css };\n }\n\n /**\n * Main orchestration method to process all token data\n * @param {Object} data - Complete token data from API\n * @returns {Promise<Object>} Processed token data\n */\n async process(data) {\n try {\n const result = {\n variables: {},\n semanticVariables: {},\n semanticDarkVariables: {},\n utilities: {},\n fontFaces: [],\n keyframes: {},\n animations: {},\n safelist: [],\n metadata: {},\n custom: data.customCss ? this.processCustomCss(data.customCss) : {}\n };\n\n // Handle different token formats (new vs legacy)\n let colorData = null;\n \n // Check if we have tokens in the new format\n if (data.tokens && typeof data.tokens === 'object') {\n // New format from processed-tokens endpoint\n const tokens = data.tokens;\n \n // Extract color data from various possible locations\n colorData = tokens['Global Colors/Default'] || \n tokens['Global Colors'] || \n tokens['colors'] ||\n tokens;\n } else if (data.colors) {\n // Legacy format or direct colors data\n colorData = data.colors;\n }\n\n // Process colors\n if (colorData) {\n const colorResult = this.processColors(colorData);\n result.variables = { ...result.variables, ...colorResult.variables };\n result.utilities = { ...result.utilities, ...colorResult.utilities };\n result.colorMap = colorResult.colorMap || {};\n } else {\n result.colorMap = {};\n }\n\n // Process semantic tokens (light mode)\n if (data.semantic && result.colorMap) {\n const semanticResult = this.processSemanticTokens(data.semantic, result.colorMap);\n result.semanticVariables = semanticResult.semanticVariables;\n // Merge tokens into utilities\n if (semanticResult.tokens) {\n result.tokens = semanticResult.tokens;\n // Replace color utilities with semantic token utilities\n result.utilities = semanticResult.tokens;\n }\n }\n\n // Process semantic tokens (dark mode)\n if (data.semanticDark && result.colorMap) {\n const semanticDarkResult = this.processSemanticTokens(data.semanticDark, result.colorMap);\n result.semanticDarkVariables = semanticDarkResult.semanticVariables;\n }\n\n // Process fonts\n if (data.fonts) {\n result.fontFaces = await this.processFonts(data.fonts);\n }\n\n // Process font families from global tokens\n if (data.globalTokens) {\n result.fontFamilies = this.processFontFamilies(data.globalTokens);\n \n // Add font family utilities\n if (result.fontFamilies) {\n if (!result.utilities.fontFamily) {\n result.utilities.fontFamily = {};\n }\n Object.assign(result.utilities.fontFamily, result.fontFamilies);\n }\n }\n\n // Process animations\n if (data.animations) {\n const animationResult = this.processAnimations(data.animations);\n result.keyframes = animationResult.keyframes;\n result.animations = animationResult.animations;\n }\n\n // Generate safelist from semantic tokens (not colorMap)\n // Pass the tokens object that contains backgroundColor, textColor, etc.\n result.safelist = this.generateSafelistClasses(result.tokens || result.utilities);\n\n // Add metadata\n result.metadata = {\n timestamp: new Date().toISOString(),\n version: data.version || '2.0.0',\n ffId: data.ffId\n };\n\n return result;\n } catch (error) {\n console.error('Error processing tokens:', error);\n throw error;\n }\n }\n}\n\nmodule.exports = TokenProcessor;"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["require_errors", "__commonJSMin", "exports", "module", "APIError", "message", "statusCode", "url", "CacheError", "operation", "ConfigError", "field", "ProcessingError", "token", "Color", "https", "ProcessingError", "TokenProcessor", "hex", "color", "hsl", "h", "s", "alpha", "roundedAlpha", "error", "colorsData", "variables", "colorMap", "utilities", "processColorGroup", "obj", "prefix", "key", "value", "colorName", "varName", "hslValue", "newPrefix", "semanticData", "semanticVariables", "tokens", "formatTokenName", "name", "extractReference", "refString", "match", "parts", "processCategory", "category", "outputCategory", "reference", "referencedVar", "mainKey", "mainValue", "stateKey", "stateValue", "tokenKey", "layerKey", "layerValue", "formattedRef", "semanticVar", "overlayKey", "overlayValue", "iconKey", "iconValue", "url", "resolve", "reject", "response", "data", "chunk", "css", "fontFaceRegex", "fontFaces", "fontProperties", "fontObj", "prop", "colonIndex", "fontData", "fontFields", "field", "parsedFonts", "globalTokens", "fontFamilyUtilities", "fontFamilies", "fontKey", "fontFamilyValue", "capitalizeFontName", "word", "capitalizedFont", "animationData", "keyframes", "animations", "definition", "keyframeName", "keyframeSteps", "step", "props", "animationValue", "safelist", "
|
|
4
|
+
"sourcesContent": ["class APIError extends Error {\n constructor(message, statusCode, url) {\n super(message);\n this.name = 'APIError';\n this.statusCode = statusCode;\n this.url = url;\n this.code = `API_${statusCode}`;\n }\n}\n\nclass CacheError extends Error {\n constructor(message, operation) {\n super(message);\n this.name = 'CacheError';\n this.operation = operation;\n this.code = `CACHE_${operation.toUpperCase()}`;\n }\n}\n\nclass ConfigError extends Error {\n constructor(message, field) {\n super(message);\n this.name = 'ConfigError';\n this.field = field;\n this.code = `CONFIG_${field.toUpperCase()}`;\n }\n}\n\nclass ProcessingError extends Error {\n constructor(message, token) {\n super(message);\n this.name = 'ProcessingError';\n this.token = token;\n this.code = 'PROCESSING_ERROR';\n }\n}\n\nmodule.exports = {\n APIError,\n CacheError,\n ConfigError,\n ProcessingError\n};", "const Color = require('color');\nconst https = require('https');\nconst { ProcessingError } = require('./errors');\n\nclass TokenProcessor {\n /**\n * Convert hex color to HSL format for Tailwind CSS\n * @param {string} hex - Hex color value\n * @returns {string} HSL string in format \"H S% L%\"\n */\n hexToHsl(hex) {\n try {\n const color = Color(hex);\n const hsl = color.hsl();\n \n // Get HSL values\n const h = Math.round(hsl.hue());\n const s = Math.round(hsl.saturationl());\n const l = Math.round(hsl.lightness());\n \n // Handle alpha channel if present\n const alpha = color.alpha();\n if (alpha < 1) {\n // Round alpha to 2 decimal places\n const roundedAlpha = Math.round(alpha * 100) / 100;\n return `${h} ${s}% ${l}% / ${roundedAlpha}`;\n }\n \n return `${h} ${s}% ${l}%`;\n } catch (error) {\n throw new ProcessingError(`Failed to convert color ${hex}: ${error.message}`, hex);\n }\n }\n\n /**\n * Process color tokens into CSS variables\n * @param {Object} colorsData - Color tokens data\n * @returns {Object} Processed variables and color map\n */\n processColors(colorsData) {\n const variables = {};\n const colorMap = {};\n const utilities = {\n backgroundColor: {},\n textColor: {},\n borderColor: {}\n };\n\n // Check if we have valid color data\n if (!colorsData || typeof colorsData !== 'object') {\n console.log(' \u26A0\uFE0F No valid color data to process');\n return { variables, colorMap, utilities };\n }\n\n // Recursive function to process nested color structures\n const processColorGroup = (obj, prefix = '') => {\n for (const [key, value] of Object.entries(obj)) {\n if (value && typeof value === 'object') {\n if (value.$value) {\n // This is a color value\n const colorName = prefix ? `${prefix}-${key}` : key;\n const varName = `--color-${colorName}`;\n \n // Convert hex to HSL\n const hslValue = this.hexToHsl(value.$value);\n variables[varName] = hslValue;\n colorMap[colorName] = varName;\n \n // Generate Tailwind utilities\n utilities.backgroundColor[colorName] = `hsl(var(${varName}))`;\n utilities.textColor[colorName] = `hsl(var(${varName}))`;\n utilities.borderColor[colorName] = `hsl(var(${varName}))`;\n } else {\n // Nested structure, recurse\n const newPrefix = prefix ? `${prefix}-${key}` : key;\n processColorGroup(value, newPrefix);\n }\n }\n }\n };\n\n // Process colors - handle both nested and flat structures\n if (colorsData) {\n if (colorsData.colors) {\n processColorGroup(colorsData.colors);\n } else {\n // Direct color structure\n processColorGroup(colorsData);\n }\n }\n\n return {\n variables,\n colorMap,\n utilities\n };\n }\n\n /**\n * Process semantic tokens that reference other tokens\n * @param {Object} semanticData - Semantic tokens data\n * @param {Object} colorMap - Map of color names to CSS variables\n * @returns {Object} Semantic CSS variables and token utilities\n */\n processSemanticTokens(semanticData, colorMap) {\n const semanticVariables = {};\n const tokens = {\n backgroundColor: {},\n textColor: {},\n borderColor: {}\n };\n\n // Format token name (similar to current plugin)\n const formatTokenName = (name) => {\n return name.replace(/ /g, '').replace(/\\./g, '-').toLowerCase();\n };\n\n // Extract token reference from string like \"{colors.primary.500}\"\n const extractReference = (refString) => {\n // Handle non-string values\n if (typeof refString !== 'string') return null;\n \n const match = refString.match(/^\\{(.+)\\}$/);\n if (!match) return null;\n \n // Split the reference path and remove the first part if it's \"colors\"\n const parts = match[1].split('.');\n if (parts[0] === 'colors' && parts.length > 1) {\n // Check if second part is also \"colors\" (nested structure)\n if (parts[1] === 'colors' && parts.length > 2) {\n return parts.slice(2).join('-');\n }\n return parts.slice(1).join('-');\n }\n return parts.join('-');\n };\n\n // Process semantic category (bg, text, border)\n const processCategory = (category, outputCategory) => {\n if (!semanticData[category]) return;\n\n for (const [key, value] of Object.entries(semanticData[category])) {\n if (key === 'disabled') {\n // Handle disabled state specially\n const reference = extractReference(value.$value);\n if (reference) {\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n const varName = `--${category}-disabled`;\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens[outputCategory]['disabled'] = `var(${varName})`;\n }\n }\n continue;\n }\n\n // Process nested structure (e.g., neutral -> low -> default)\n for (const [mainKey, mainValue] of Object.entries(value)) {\n for (const [stateKey, stateValue] of Object.entries(mainValue)) {\n let tokenKey = formatTokenName(`${key}-${mainKey}-${stateKey}`);\n \n // Remove '-default' suffix for cleaner class names\n if (tokenKey.endsWith('-default')) {\n tokenKey = tokenKey.slice(0, -8);\n }\n\n const varName = `--${category}-${tokenKey}`;\n \n // Check if it's a reference\n const reference = extractReference(stateValue.$value);\n if (reference) {\n // Look up the referenced color variable\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens[outputCategory][tokenKey] = `var(${varName})`;\n }\n } else if (stateValue.$value) {\n // Direct hex value - convert to HSL\n const hslValue = this.hexToHsl(stateValue.$value);\n semanticVariables[varName] = hslValue;\n tokens[outputCategory][tokenKey] = `hsl(var(${varName}))`;\n }\n }\n }\n }\n };\n\n // Process semantic categories\n processCategory('bg', 'backgroundColor');\n processCategory('text', 'textColor');\n processCategory('border', 'borderColor');\n\n // Process layer tokens\n if (semanticData.layer) {\n for (const [layerKey, layerValue] of Object.entries(semanticData.layer)) {\n const varName = `--layer-${layerKey}`;\n const reference = extractReference(layerValue.$value);\n \n if (reference) {\n // Format the reference to match semantic token naming\n let formattedRef = reference.replace(/\\./g, '-').toLowerCase();\n \n // Remove -default suffix if present\n if (formattedRef.endsWith('-default')) {\n formattedRef = formattedRef.slice(0, -8);\n }\n \n // Check if it's a semantic reference (e.g., bg-neutral-subtle)\n if (formattedRef.startsWith('bg-') || formattedRef.startsWith('text-') || formattedRef.startsWith('border-')) {\n // It's referencing a semantic token\n const semanticVar = `--${formattedRef}`;\n semanticVariables[varName] = `var(${semanticVar})`;\n tokens.backgroundColor[`layer-${layerKey}`] = `var(${varName})`;\n } else {\n // It's referencing a color token\n const referencedVar = colorMap[formattedRef];\n if (referencedVar) {\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens.backgroundColor[`layer-${layerKey}`] = `var(${varName})`;\n }\n }\n } else if (layerValue.$value) {\n // Direct value\n const hslValue = this.hexToHsl(layerValue.$value);\n semanticVariables[varName] = hslValue;\n tokens.backgroundColor[`layer-${layerKey}`] = `hsl(var(${varName}))`;\n }\n }\n }\n\n // Process overlay tokens\n if (semanticData.overlay) {\n for (const [overlayKey, overlayValue] of Object.entries(semanticData.overlay)) {\n const varName = `--overlay-${overlayKey}`;\n \n if (overlayValue.$value) {\n // Overlay values are hex colors with alpha, keep them as-is\n semanticVariables[varName] = overlayValue.$value;\n tokens.backgroundColor[`overlay-${overlayKey}`] = `var(${varName})`;\n }\n }\n }\n\n // Process icon tokens (map to text and fill colors)\n if (semanticData.icon) {\n // Ensure fill property exists\n if (!tokens.fill) {\n tokens.fill = {};\n }\n \n for (const [iconKey, iconValue] of Object.entries(semanticData.icon)) {\n if (iconKey === 'disabled') {\n const reference = extractReference(iconValue.$value);\n if (reference) {\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n const varName = `--icon-disabled`;\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens.textColor['icon-disabled'] = `var(${varName})`;\n tokens.fill['icon-disabled'] = `var(${varName})`;\n }\n }\n continue;\n }\n\n for (const [mainKey, mainValue] of Object.entries(iconValue)) {\n for (const [stateKey, stateValue] of Object.entries(mainValue)) {\n let tokenKey = formatTokenName(`icon-${iconKey}-${mainKey}-${stateKey}`);\n if (tokenKey.endsWith('-default')) {\n tokenKey = tokenKey.slice(0, -8);\n }\n\n const varName = `--${tokenKey}`;\n const reference = extractReference(stateValue.$value);\n \n if (reference) {\n const referencedVar = colorMap[reference];\n if (referencedVar) {\n semanticVariables[varName] = `var(${referencedVar})`;\n tokens.textColor[tokenKey] = `var(${varName})`;\n tokens.fill[tokenKey] = `var(${varName})`;\n }\n }\n }\n }\n }\n }\n\n return { semanticVariables, tokens };\n }\n\n /**\n * Fetch CSS from URL and parse font-face rules\n * @param {string} url - Font CSS URL\n * @returns {Promise<string>} Font face CSS\n */\n async fetchFontCss(url) {\n return new Promise((resolve, reject) => {\n https.get(url, (response) => {\n let data = '';\n \n if (response.statusCode !== 200) {\n reject(new Error(`Failed to fetch font CSS: ${response.statusCode}`));\n return;\n }\n\n response.on('data', (chunk) => {\n data += chunk;\n });\n\n response.on('end', () => {\n resolve(data);\n });\n\n response.on('error', (error) => {\n reject(error);\n });\n }).on('error', (error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Parse font-face CSS into structured objects\n * @param {string} css - CSS text containing @font-face rules\n * @returns {Array} Array of font-face objects\n */\n parseFontFaces(css) {\n const fontFaceRegex = /@font-face\\s*{([^}]+)}/g;\n const fontFaces = [];\n let match;\n\n while ((match = fontFaceRegex.exec(css)) !== null) {\n const fontProperties = match[1].trim().split(';').filter(Boolean);\n const fontObj = {};\n\n fontProperties.forEach(prop => {\n const colonIndex = prop.indexOf(':');\n if (colonIndex !== -1) {\n const key = prop.slice(0, colonIndex).trim();\n const value = prop.slice(colonIndex + 1).trim();\n \n // Clean up quotes from font-family\n if (key === 'font-family') {\n fontObj[key] = value.replace(/[\"']/g, '');\n } else {\n fontObj[key] = value;\n }\n }\n });\n\n // Ensure src URLs are properly quoted\n if (fontObj['src']) {\n fontObj['src'] = fontObj['src']\n .replace(/url\\([\"']?/, 'url(\\'')\n .replace(/[\"']?\\)/, '\\')');\n }\n\n fontFaces.push(fontObj);\n }\n\n return fontFaces;\n }\n\n /**\n * Process fonts data\n * @param {Object} fontData - Font URLs object\n * @returns {Promise<Array>} Array of font-face objects\n */\n async processFonts(fontData) {\n const fontFaces = [];\n\n if (!fontData || typeof fontData !== 'object') {\n return fontFaces;\n }\n\n // Process each font URL (font, font2, etc.)\n const fontFields = Object.keys(fontData).filter(key => key.startsWith('font'));\n \n for (const field of fontFields) {\n const url = fontData[field];\n if (typeof url === 'string' && url.startsWith('http')) {\n try {\n const css = await this.fetchFontCss(url);\n const parsedFonts = this.parseFontFaces(css);\n \n if (parsedFonts.length > 0) {\n fontFaces.push(...parsedFonts);\n }\n } catch (error) {\n console.warn(`Failed to process font ${field}:`, error.message);\n }\n }\n }\n\n return fontFaces;\n }\n\n /**\n * Process font family tokens\n * @param {Object} globalTokens - Global tokens data containing font families\n * @returns {Object} Font family utilities\n */\n processFontFamilies(globalTokens) {\n const fontFamilyUtilities = {};\n \n if (!globalTokens || !globalTokens.font || !globalTokens.font.family) {\n return fontFamilyUtilities;\n }\n\n const fontFamilies = globalTokens.font.family;\n \n // Process each font family (primary, secondary, etc.)\n for (const [key, value] of Object.entries(fontFamilies)) {\n if (value && value.$value) {\n // Format the key (e.g., primary -> primary)\n const fontKey = key.toLowerCase();\n \n // Extract font family value\n let fontFamilyValue = value.$value;\n \n // If it's a reference, extract it\n if (typeof fontFamilyValue === 'string' && fontFamilyValue.startsWith('{') && fontFamilyValue.endsWith('}')) {\n // This is a reference, but for font families we usually have direct values\n fontFamilyValue = fontFamilyValue.slice(1, -1);\n }\n \n // Store the font family utility\n // Store the font family utility - ensure proper quoting for multi-word fonts\n // For Tailwind, we need to format font families properly\n \n // Capitalize the first letter of each word in font names for proper rendering\n const capitalizeFontName = (name) => {\n return name.split(' ').map(word => \n word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n ).join(' ');\n };\n \n // Check if it's already a font stack or needs quoting\n if (fontFamilyValue.includes(',')) {\n // It's already a font stack, use as is\n fontFamilyUtilities[fontKey] = fontFamilyValue;\n } else {\n // Capitalize the font name\n const capitalizedFont = capitalizeFontName(fontFamilyValue);\n \n if (capitalizedFont.includes(' ') && !capitalizedFont.startsWith('\"') && !capitalizedFont.startsWith(\"'\")) {\n // Multi-word font needs quotes, add generic fallback\n fontFamilyUtilities[fontKey] = `\"${capitalizedFont}\", sans-serif`;\n } else {\n // Single word font, add generic fallback\n fontFamilyUtilities[fontKey] = `${capitalizedFont}, sans-serif`;\n }\n }\n }\n }\n \n return fontFamilyUtilities;\n }\n\n /**\n * Process animations data\n * @param {Object} animationData - Animation definitions\n * @returns {Object} Keyframes and animation utilities\n */\n processAnimations(animationData) {\n const keyframes = {};\n const animations = {};\n\n if (!animationData || typeof animationData !== 'object') {\n return { keyframes, animations };\n }\n\n // Process each animation\n for (const [name, definition] of Object.entries(animationData)) {\n if (definition && typeof definition === 'object') {\n // Generate keyframe name\n const keyframeName = `${name}`;\n \n // Process keyframe steps\n if (definition.keyframes) {\n const keyframeSteps = {};\n \n for (const [step, props] of Object.entries(definition.keyframes)) {\n if (props && typeof props === 'object') {\n keyframeSteps[step] = props;\n }\n }\n \n keyframes[keyframeName] = keyframeSteps;\n }\n\n // Create animation utility\n const animationValue = [\n keyframeName,\n definition.duration || '1s',\n definition.easing || 'ease',\n definition.delay || '0s',\n definition.iterations || '1',\n definition.direction || 'normal',\n definition.fillMode || 'none'\n ].join(' ');\n\n animations[name] = animationValue;\n }\n }\n\n return { keyframes, animations };\n }\n\n /**\n * Generate safelist classes for Tailwind\n * @param {Object} tokens - All processed tokens\n * @returns {Array} Safelist patterns\n */\n generateSafelistClasses(tokens) {\n const safelist = [];\n\n // Add semantic token utilities (bg-, text-, border-)\n // Note: Only base classes are added to safelist. Variants (hover:, focus:, etc.)\n // are detected by Tailwind's JIT when actually used in components.\n // This prevents generation of invalid CSS selector combinations with Turbopack.\n if (tokens.backgroundColor) {\n for (const tokenName of Object.keys(tokens.backgroundColor)) {\n safelist.push(`bg-${tokenName}`);\n }\n }\n\n if (tokens.textColor) {\n for (const tokenName of Object.keys(tokens.textColor)) {\n safelist.push(`text-${tokenName}`);\n }\n }\n\n if (tokens.borderColor) {\n for (const tokenName of Object.keys(tokens.borderColor)) {\n safelist.push(`border-${tokenName}`);\n }\n }\n\n // Add fill utilities (for icons)\n if (tokens.fill) {\n for (const tokenName of Object.keys(tokens.fill)) {\n safelist.push(`fill-${tokenName}`);\n \n // Also add text-icon-* classes\n if (tokenName.startsWith('icon-')) {\n safelist.push(`text-${tokenName}`);\n }\n }\n }\n\n // Add font family utilities\n if (tokens.fontFamily) {\n for (const fontName of Object.keys(tokens.fontFamily)) {\n safelist.push(`font-${fontName}`);\n }\n }\n\n // Add animation classes\n if (tokens.animations) {\n for (const animationName of Object.keys(tokens.animations)) {\n safelist.push(`animate-${animationName}`);\n }\n }\n\n return safelist;\n }\n\n /**\n * Extract unique classes from components configuration\n * @param {Object} componentsConfig - Components configuration object\n * @returns {Array} Array of unique class names\n */\n extractClassesFromComponentsConfig(componentsConfig) {\n const classSet = new Set();\n\n // Helper function to extract classes from a string\n const extractClasses = (classString) => {\n if (typeof classString === 'string') {\n // Split by spaces and filter out empty strings\n const classes = classString.split(/\\s+/).filter(c => c.length > 0);\n classes.forEach(cls => {\n // Skip variant selectors like [&>svg]:absolute\n classSet.add(cls);\n });\n }\n };\n\n // Recursive function to traverse the config object\n const traverse = (obj) => {\n if (!obj || typeof obj !== 'object') return;\n\n for (const key in obj) {\n const value = obj[key];\n \n if (typeof value === 'string') {\n extractClasses(value);\n } else if (typeof value === 'object') {\n traverse(value);\n }\n }\n };\n\n // Process the components config\n if (componentsConfig) {\n traverse(componentsConfig);\n }\n\n // Convert set to array and sort\n return Array.from(classSet).sort();\n }\n\n /**\n * Process custom CSS into a format compatible with Tailwind's addBase\n * @param {string} css - Raw CSS string\n * @returns {Object} CSS rules as object for Tailwind addBase\n */\n processCustomCss(css) {\n if (!css || typeof css !== 'string') {\n return {};\n }\n\n // Simply return the raw CSS as a string that can be added via addBase\n return { raw: css };\n }\n\n /**\n * Main orchestration method to process all token data\n * @param {Object} data - Complete token data from API\n * @returns {Promise<Object>} Processed token data\n */\n async process(data) {\n try {\n const result = {\n variables: {},\n semanticVariables: {},\n semanticDarkVariables: {},\n utilities: {},\n fontFaces: [],\n keyframes: {},\n animations: {},\n safelist: [],\n metadata: {},\n custom: data.customCss ? this.processCustomCss(data.customCss) : {}\n };\n\n // Handle different token formats (new vs legacy)\n let colorData = null;\n \n // Check if we have tokens in the new format\n if (data.tokens && typeof data.tokens === 'object') {\n // New format from processed-tokens endpoint\n const tokens = data.tokens;\n \n // Extract color data from various possible locations\n colorData = tokens['Global Colors/Default'] || \n tokens['Global Colors'] || \n tokens['colors'] ||\n tokens;\n } else if (data.colors) {\n // Legacy format or direct colors data\n colorData = data.colors;\n }\n\n // Process colors\n if (colorData) {\n const colorResult = this.processColors(colorData);\n result.variables = { ...result.variables, ...colorResult.variables };\n result.utilities = { ...result.utilities, ...colorResult.utilities };\n result.colorMap = colorResult.colorMap || {};\n } else {\n result.colorMap = {};\n }\n\n // Process semantic tokens (light mode)\n if (data.semantic && result.colorMap) {\n const semanticResult = this.processSemanticTokens(data.semantic, result.colorMap);\n result.semanticVariables = semanticResult.semanticVariables;\n // Merge tokens into utilities\n if (semanticResult.tokens) {\n result.tokens = semanticResult.tokens;\n // Replace color utilities with semantic token utilities\n result.utilities = semanticResult.tokens;\n }\n }\n\n // Process semantic tokens (dark mode)\n if (data.semanticDark && result.colorMap) {\n const semanticDarkResult = this.processSemanticTokens(data.semanticDark, result.colorMap);\n result.semanticDarkVariables = semanticDarkResult.semanticVariables;\n }\n\n // Process fonts\n if (data.fonts) {\n result.fontFaces = await this.processFonts(data.fonts);\n }\n\n // Process font families from global tokens\n if (data.globalTokens) {\n result.fontFamilies = this.processFontFamilies(data.globalTokens);\n \n // Add font family utilities\n if (result.fontFamilies) {\n if (!result.utilities.fontFamily) {\n result.utilities.fontFamily = {};\n }\n Object.assign(result.utilities.fontFamily, result.fontFamilies);\n }\n }\n\n // Process animations\n if (data.animations) {\n const animationResult = this.processAnimations(data.animations);\n result.keyframes = animationResult.keyframes;\n result.animations = animationResult.animations;\n }\n\n // Generate safelist from semantic tokens (not colorMap)\n // Pass the tokens object that contains backgroundColor, textColor, etc.\n result.safelist = this.generateSafelistClasses(result.tokens || result.utilities);\n\n // Add metadata\n result.metadata = {\n timestamp: new Date().toISOString(),\n version: data.version || '2.0.0',\n ffId: data.ffId\n };\n\n return result;\n } catch (error) {\n console.error('Error processing tokens:', error);\n throw error;\n }\n }\n}\n\nmodule.exports = TokenProcessor;"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["require_errors", "__commonJSMin", "exports", "module", "APIError", "message", "statusCode", "url", "CacheError", "operation", "ConfigError", "field", "ProcessingError", "token", "Color", "https", "ProcessingError", "TokenProcessor", "hex", "color", "hsl", "h", "s", "alpha", "roundedAlpha", "error", "colorsData", "variables", "colorMap", "utilities", "processColorGroup", "obj", "prefix", "key", "value", "colorName", "varName", "hslValue", "newPrefix", "semanticData", "semanticVariables", "tokens", "formatTokenName", "name", "extractReference", "refString", "match", "parts", "processCategory", "category", "outputCategory", "reference", "referencedVar", "mainKey", "mainValue", "stateKey", "stateValue", "tokenKey", "layerKey", "layerValue", "formattedRef", "semanticVar", "overlayKey", "overlayValue", "iconKey", "iconValue", "url", "resolve", "reject", "response", "data", "chunk", "css", "fontFaceRegex", "fontFaces", "fontProperties", "fontObj", "prop", "colonIndex", "fontData", "fontFields", "field", "parsedFonts", "globalTokens", "fontFamilyUtilities", "fontFamilies", "fontKey", "fontFamilyValue", "capitalizeFontName", "word", "capitalizedFont", "animationData", "keyframes", "animations", "definition", "keyframeName", "keyframeSteps", "step", "props", "animationValue", "safelist", "tokenName", "fontName", "animationName", "componentsConfig", "classSet", "extractClasses", "classString", "c", "cls", "traverse", "result", "colorData", "colorResult", "semanticResult", "semanticDarkResult", "animationResult"]
|
|
7
7
|
}
|
package/dist/next.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var u=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports);var S=u((X,
|
|
1
|
+
var u=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports);var S=u((X,m)=>{var L="https://app.frontfriend.dev",k="https://tokens-studio-donux.up.railway.app/api",T=".cache/frontfriend",J={JS:["tokens.js","variables.js","semanticVariables.js","semanticDarkVariables.js","safelist.js","custom.js"],JSON:["fonts.json","icons.json","components-config.json","version.json","metadata.json"]},b={FF_ID:"FF_ID",FF_API_URL:"FF_API_URL",FF_USE_LOCAL:"FF_USE_LOCAL"};m.exports={DEFAULT_API_URL:L,LEGACY_API_URL:k,CACHE_DIR_NAME:T,CACHE_TTL_DAYS:7,CACHE_TTL_MS:6048e5,CACHE_FILES:J,ENV_VARS:b}});var C=u((Z,y)=>{var h=class extends Error{constructor(e,t,n){super(e),this.name="APIError",this.statusCode=t,this.url=n,this.code=`API_${t}`}},_=class extends Error{constructor(e,t){super(e),this.name="CacheError",this.operation=t,this.code=`CACHE_${t.toUpperCase()}`}},p=class extends Error{constructor(e,t){super(e),this.name="ConfigError",this.field=t,this.code=`CONFIG_${t.toUpperCase()}`}},d=class extends Error{constructor(e,t){super(e),this.name="ProcessingError",this.token=t,this.code="PROCESSING_ERROR"}};y.exports={APIError:h,CacheError:_,ConfigError:p,ProcessingError:d}});var A=u((ee,E)=>{var c=require("fs");function P(s){try{let e=c.readFileSync(s,"utf8");return JSON.parse(e)}catch(e){if(e.code==="ENOENT")return null;throw e}}function H(s){try{return c.readFileSync(s,"utf8")}catch(e){if(e.code==="ENOENT")return null;throw e}}function R(s,e,t=2){let n=JSON.stringify(e,null,t);c.writeFileSync(s,n,"utf8")}function M(s,e){if(e==null||typeof e=="object"&&Object.keys(e).length===0||Array.isArray(e)&&e.length===0){let n=`module.exports = ${Array.isArray(e)?"[]":"{}"};`;c.writeFileSync(s,n,"utf8")}else{let t=`module.exports = ${JSON.stringify(e,null,2)};`;c.writeFileSync(s,t,"utf8")}}function U(s){return c.existsSync(s)}function $(s){c.mkdirSync(s,{recursive:!0})}function V(s){c.rmSync(s,{recursive:!0,force:!0})}E.exports={readJsonFileSafe:P,readFileSafe:H,writeJsonFile:R,writeModuleExportsFile:M,fileExists:U,ensureDirectoryExists:$,removeDirectory:V}});var v=u((te,O)=>{var a=require("path"),{CACHE_DIR_NAME:q,CACHE_TTL_MS:G,CACHE_FILES:j}=S(),{CacheError:D}=C(),{readJsonFileSafe:w,readFileSafe:Y,writeJsonFile:x,writeModuleExportsFile:N,fileExists:g,ensureDirectoryExists:z,removeDirectory:B}=A(),F=class{constructor(e=process.cwd()){this.appRoot=e,this.cacheDir=a.join(e,"node_modules",q),this.metadataFile=a.join(this.cacheDir,"metadata.json"),this.maxAge=G}getCacheDir(){return this.cacheDir}exists(){return g(this.cacheDir)}isValid(){if(!this.exists())return!1;try{let e=w(this.metadataFile);if(!e)return!1;let t=new Date(e.timestamp).getTime();return Date.now()-t<this.maxAge}catch{return!1}}load(){if(!this.exists())return null;try{let e={};for(let t of j.JS){let n=a.join(this.cacheDir,t);if(g(n)){let r=t.replace(".js","");try{let o=Y(n);if(o!==null){let l={},i={exports:l};new Function("module","exports",o)(i,l),e[r]=i.exports}}catch{}}}for(let t of j.JSON){let n=a.join(this.cacheDir,t),r=t.replace(".json",""),o=w(n);o!==null&&(e[r]=o)}return e["components-config"]&&(e.componentsConfig=e["components-config"],delete e["components-config"]),e.cls&&!e.safelist&&(e.safelist=e.cls,delete e.cls),e}catch(e){throw new D(`Failed to load cache: ${e.message}`,"read")}}save(e){var t,n;try{z(this.cacheDir);let r={timestamp:new Date().toISOString(),version:((t=e.metadata)==null?void 0:t.version)||"2.0.0",ffId:(n=e.metadata)==null?void 0:n.ffId};x(this.metadataFile,r);let o=["tokens","variables","semanticVariables","semanticDarkVariables","safelist","custom"];for(let i of o)if(e[i]!==void 0){let f=a.join(this.cacheDir,`${i}.js`);N(f,e[i])}if(e.safelist&&Array.isArray(e.safelist)){let i=a.join(this.cacheDir,"safelist.js");N(i,e.safelist)}let l={fonts:e.fonts,icons:e.icons||e.iconSet,"components-config":e.componentsConfig,version:e.version};for(let[i,f]of Object.entries(l))if(f!==void 0){let I=a.join(this.cacheDir,`${i}.json`);x(I,f)}}catch(r){throw new D(`Failed to save cache: ${r.message}`,"write")}}clear(){this.exists()&&B(this.cacheDir)}};O.exports=F});var K=v();function Q(s={}){let e=new K(process.cwd()),t=null;return e.exists()?t=e.load():console.warn('[FrontFriend Next.js] No cache found. Please run "npx frontfriend init" first.'),{...s,env:{...s.env,__FF_CONFIG__:t?JSON.stringify(t.componentsConfig||null):"null",__FF_ICONS__:t?JSON.stringify(t.icons||null):"null"},webpack:(n,r)=>{if(typeof s.webpack=="function"&&(n=s.webpack(n,r)),!t)return n;let{webpack:o}=r,l=o.DefinePlugin,i={__FF_CONFIG__:JSON.stringify(t.componentsConfig||null),__FF_ICONS__:JSON.stringify(t.icons||null)};return n.plugins=n.plugins||[],n.plugins.push(new l(i)),r.dev&&!r.isServer&&console.log("[FrontFriend Next.js] Injected configuration and icons into client build"),n}}}module.exports=Q;
|
|
2
2
|
//# sourceMappingURL=next.js.map
|
package/dist/next.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../lib/core/constants.js", "../lib/core/errors.js", "../lib/core/file-utils.js", "../lib/core/cache-manager.js", "../next.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * Configuration constants for FrontFriend Tailwind v2\n */\n\n// API Configuration\nconst DEFAULT_API_URL = 'https://app.frontfriend.dev';\nconst LEGACY_API_URL = 'https://tokens-studio-donux.up.railway.app/api';\n\n// Cache Configuration\nconst CACHE_DIR_NAME = '.cache/frontfriend';\nconst CACHE_TTL_DAYS = 7;\nconst CACHE_TTL_MS = CACHE_TTL_DAYS * 24 * 60 * 60 * 1000;\n\n// File names\nconst CACHE_FILES = {\n JS: [\n 'tokens.js',\n 'variables.js',\n 'semanticVariables.js',\n 'semanticDarkVariables.js',\n 'safelist.js',\n 'custom.js'\n ],\n JSON: [\n 'fonts.json',\n 'icons.json',\n 'components-config.json',\n 'version.json',\n 'metadata.json'\n ]\n};\n\n// Environment variables\nconst ENV_VARS = {\n FF_ID: 'FF_ID',\n FF_API_URL: 'FF_API_URL',\n FF_USE_LOCAL: 'FF_USE_LOCAL'\n};\n\nmodule.exports = {\n DEFAULT_API_URL,\n LEGACY_API_URL,\n CACHE_DIR_NAME,\n CACHE_TTL_DAYS,\n CACHE_TTL_MS,\n CACHE_FILES,\n ENV_VARS\n};", "class APIError extends Error {\n constructor(message, statusCode, url) {\n super(message);\n this.name = 'APIError';\n this.statusCode = statusCode;\n this.url = url;\n this.code = `API_${statusCode}`;\n }\n}\n\nclass CacheError extends Error {\n constructor(message, operation) {\n super(message);\n this.name = 'CacheError';\n this.operation = operation;\n this.code = `CACHE_${operation.toUpperCase()}`;\n }\n}\n\nclass ConfigError extends Error {\n constructor(message, field) {\n super(message);\n this.name = 'ConfigError';\n this.field = field;\n this.code = `CONFIG_${field.toUpperCase()}`;\n }\n}\n\nclass ProcessingError extends Error {\n constructor(message, token) {\n super(message);\n this.name = 'ProcessingError';\n this.token = token;\n this.code = 'PROCESSING_ERROR';\n }\n}\n\nmodule.exports = {\n APIError,\n CacheError,\n ConfigError,\n ProcessingError\n};", "const fs = require('fs');\n\n/**\n * Read a JSON file safely, returning null if file doesn't exist\n * @param {string} filepath - Path to the JSON file\n * @returns {Object|null} Parsed JSON or null if file not found\n * @throws {Error} If JSON is invalid\n */\nfunction readJsonFileSafe(filepath) {\n try {\n const content = fs.readFileSync(filepath, 'utf8');\n return JSON.parse(content);\n } catch (error) {\n if (error.code === 'ENOENT') {\n return null; // File not found, return null like API would return 404\n }\n throw error;\n }\n}\n\n/**\n * Read a file safely, returning null if file doesn't exist\n * @param {string} filepath - Path to the file\n * @returns {string|null} File content or null if file not found\n * @throws {Error} For other file system errors\n */\nfunction readFileSafe(filepath) {\n try {\n return fs.readFileSync(filepath, 'utf8');\n } catch (error) {\n if (error.code === 'ENOENT') {\n return null; // File not found\n }\n throw error;\n }\n}\n\n/**\n * Write JSON data to a file with proper formatting\n * @param {string} filepath - Path to write the file\n * @param {Object} data - Data to write\n * @param {number} indent - Indentation level (default: 2)\n */\nfunction writeJsonFile(filepath, data, indent = 2) {\n const content = JSON.stringify(data, null, indent);\n fs.writeFileSync(filepath, content, 'utf8');\n}\n\n/**\n * Write module.exports file with JSON data\n * @param {string} filepath - Path to write the file\n * @param {Object} data - Data to export\n */\nfunction writeModuleExportsFile(filepath, data) {\n // Handle empty data cases\n if (data === null || data === undefined || \n (typeof data === 'object' && Object.keys(data).length === 0) ||\n (Array.isArray(data) && data.length === 0)) {\n const emptyContent = Array.isArray(data) ? '[]' : '{}';\n const content = `module.exports = ${emptyContent};`;\n fs.writeFileSync(filepath, content, 'utf8');\n } else {\n const content = `module.exports = ${JSON.stringify(data, null, 2)};`;\n fs.writeFileSync(filepath, content, 'utf8');\n }\n}\n\n/**\n * Check if a file exists\n * @param {string} filepath - Path to check\n * @returns {boolean} True if file exists\n */\nfunction fileExists(filepath) {\n return fs.existsSync(filepath);\n}\n\n/**\n * Create directory recursively\n * @param {string} dirpath - Directory path to create\n */\nfunction ensureDirectoryExists(dirpath) {\n fs.mkdirSync(dirpath, { recursive: true });\n}\n\n/**\n * Remove directory recursively\n * @param {string} dirpath - Directory path to remove\n */\nfunction removeDirectory(dirpath) {\n fs.rmSync(dirpath, { recursive: true, force: true });\n}\n\nmodule.exports = {\n readJsonFileSafe,\n readFileSafe,\n writeJsonFile,\n writeModuleExportsFile,\n fileExists,\n ensureDirectoryExists,\n removeDirectory\n};", "const path = require('path');\nconst { CACHE_DIR_NAME, CACHE_TTL_MS, CACHE_FILES } = require('./constants');\nconst { CacheError } = require('./errors');\nconst { readJsonFileSafe, readFileSafe, writeJsonFile, writeModuleExportsFile, fileExists, ensureDirectoryExists, removeDirectory } = require('./file-utils');\n\nclass CacheManager {\n constructor(appRoot = process.cwd()) {\n this.appRoot = appRoot;\n this.cacheDir = path.join(appRoot, 'node_modules', CACHE_DIR_NAME);\n this.metadataFile = path.join(this.cacheDir, 'metadata.json');\n this.maxAge = CACHE_TTL_MS;\n }\n\n /**\n * Get the cache directory path\n * @returns {string} Cache directory path\n */\n getCacheDir() {\n return this.cacheDir;\n }\n\n /**\n * Check if cache directory exists\n * @returns {boolean} True if cache exists\n */\n exists() {\n return fileExists(this.cacheDir);\n }\n\n /**\n * Check if cache is valid (exists and not expired)\n * @returns {boolean} True if cache is valid\n */\n isValid() {\n if (!this.exists()) {\n return false;\n }\n\n try {\n const metadata = readJsonFileSafe(this.metadataFile);\n if (!metadata) {\n return false;\n }\n\n const timestamp = new Date(metadata.timestamp).getTime();\n const now = Date.now();\n \n return (now - timestamp) < this.maxAge;\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Load all cached data\n * @returns {Object|null} Cached data object or null if not found\n */\n load() {\n if (!this.exists()) {\n return null;\n }\n\n try {\n const data = {};\n \n // Load all .js files\n for (const file of CACHE_FILES.JS) {\n const filePath = path.join(this.cacheDir, file);\n if (fileExists(filePath)) {\n // Remove .js extension for key\n const key = file.replace('.js', '');\n try {\n // Use a more secure approach - parse the exported data\n const content = readFileSafe(filePath);\n if (content !== null) {\n // Create a safe evaluation context\n const moduleExports = {};\n const fakeModule = { exports: moduleExports };\n \n // Use Function constructor to evaluate in isolated scope\n const evalFunc = new Function('module', 'exports', content);\n evalFunc(fakeModule, moduleExports);\n \n data[key] = fakeModule.exports;\n }\n } catch (e) {\n // Skip files that can't be parsed\n }\n }\n }\n\n // Load all .json files\n for (const file of CACHE_FILES.JSON) {\n const filePath = path.join(this.cacheDir, file);\n const key = file.replace('.json', '');\n const content = readJsonFileSafe(filePath);\n if (content !== null) {\n data[key] = content;\n }\n }\n\n // Rename components-config to componentsConfig for consistency\n if (data['components-config']) {\n data.componentsConfig = data['components-config'];\n delete data['components-config'];\n }\n\n // Backward compatibility: rename cls to safelist if present\n if (data.cls && !data.safelist) {\n data.safelist = data.cls;\n delete data.cls;\n }\n\n return data;\n } catch (error) {\n throw new CacheError(`Failed to load cache: ${error.message}`, 'read');\n }\n }\n\n /**\n * Save data to cache\n * @param {Object} data - Data object to save\n * @throws {Error} If save operation fails\n */\n save(data) {\n try {\n // Create cache directory\n ensureDirectoryExists(this.cacheDir);\n\n // Save metadata first\n const metadata = {\n timestamp: new Date().toISOString(),\n version: data.metadata?.version || '2.0.0',\n ffId: data.metadata?.ffId\n };\n writeJsonFile(this.metadataFile, metadata);\n\n // Save .js files\n const jsFiles = [\n 'tokens',\n 'variables',\n 'semanticVariables',\n 'semanticDarkVariables',\n 'safelist',\n 'custom'\n ];\n\n for (const key of jsFiles) {\n if (data[key] !== undefined) {\n const filePath = path.join(this.cacheDir, `${key}.js`);\n writeModuleExportsFile(filePath, data[key]);\n }\n }\n \n // Also check for safelist specifically since it might be an array\n if (data.safelist && Array.isArray(data.safelist)) {\n const safelistPath = path.join(this.cacheDir, 'safelist.js');\n writeModuleExportsFile(safelistPath, data.safelist);\n }\n\n // Save .json files\n const jsonData = {\n fonts: data.fonts,\n icons: data.icons || data.iconSet,\n 'components-config': data.componentsConfig,\n version: data.version\n };\n\n for (const [key, value] of Object.entries(jsonData)) {\n if (value !== undefined) {\n const filePath = path.join(this.cacheDir, `${key}.json`);\n writeJsonFile(filePath, value);\n }\n }\n } catch (error) {\n throw new CacheError(`Failed to save cache: ${error.message}`, 'write');\n }\n }\n\n /**\n * Clear the cache directory\n */\n clear() {\n if (this.exists()) {\n removeDirectory(this.cacheDir);\n }\n }\n}\n\nmodule.exports = CacheManager;", "const CacheManager = require('./lib/core/cache-manager');\n\nfunction frontfriend(nextConfig = {}) {\n return {\n ...nextConfig,\n webpack: (config, options) => {\n // 1. Call existing webpack config if provided\n if (typeof nextConfig.webpack === 'function') {\n config = nextConfig.webpack(config, options);\n }\n\n // 2. Load cache with CacheManager\n const cacheManager = new CacheManager(process.cwd());\n \n if (!cacheManager.exists()) {\n console.warn('[FrontFriend Next.js] No cache found. Please run \"npx frontfriend init\" first.');\n return config;\n }\n\n const cache = cacheManager.load();\n if (!cache) {\n console.error('[FrontFriend Next.js] Failed to load cache.');\n return config;\n }\n\n // 4. Use webpack.DefinePlugin from options (works with both webpack 4 and 5)\n const { webpack } = options;\n const DefinePlugin = webpack.DefinePlugin;\n\n // 5. Inject __FF_CONFIG__ and __FF_ICONS__ as globals\n const definitions = {\n __FF_CONFIG__: JSON.stringify(cache.componentsConfig || null),\n __FF_ICONS__: JSON.stringify(cache.icons || null)\n };\n\n // Add DefinePlugin to plugins array\n config.plugins = config.plugins || [];\n config.plugins.push(new DefinePlugin(definitions));\n\n // Log success in development\n if (options.dev && !options.isServer) {\n console.log('[FrontFriend Next.js] Injected configuration and icons into client build');\n }\n\n // 6. Return modified config\n return config;\n }\n };\n}\n\nmodule.exports = frontfriend;"],
|
|
5
|
-
"mappings": "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
|
|
6
|
-
"names": ["require_constants", "__commonJSMin", "exports", "module", "DEFAULT_API_URL", "LEGACY_API_URL", "CACHE_DIR_NAME", "CACHE_FILES", "ENV_VARS", "require_errors", "__commonJSMin", "exports", "module", "APIError", "message", "statusCode", "url", "CacheError", "operation", "ConfigError", "field", "ProcessingError", "token", "require_file_utils", "__commonJSMin", "exports", "module", "fs", "readJsonFileSafe", "filepath", "content", "error", "readFileSafe", "writeJsonFile", "data", "indent", "writeModuleExportsFile", "fileExists", "ensureDirectoryExists", "dirpath", "removeDirectory", "require_cache_manager", "__commonJSMin", "exports", "module", "path", "CACHE_DIR_NAME", "CACHE_TTL_MS", "CACHE_FILES", "CacheError", "readJsonFileSafe", "readFileSafe", "writeJsonFile", "writeModuleExportsFile", "fileExists", "ensureDirectoryExists", "removeDirectory", "CacheManager", "appRoot", "metadata", "timestamp", "data", "file", "filePath", "key", "content", "moduleExports", "fakeModule", "error", "_a", "_b", "jsFiles", "safelistPath", "jsonData", "value", "CacheManager", "frontfriend", "nextConfig", "
|
|
4
|
+
"sourcesContent": ["/**\n * Configuration constants for FrontFriend Tailwind v2\n */\n\n// API Configuration\nconst DEFAULT_API_URL = 'https://app.frontfriend.dev';\nconst LEGACY_API_URL = 'https://tokens-studio-donux.up.railway.app/api';\n\n// Cache Configuration\nconst CACHE_DIR_NAME = '.cache/frontfriend';\nconst CACHE_TTL_DAYS = 7;\nconst CACHE_TTL_MS = CACHE_TTL_DAYS * 24 * 60 * 60 * 1000;\n\n// File names\nconst CACHE_FILES = {\n JS: [\n 'tokens.js',\n 'variables.js',\n 'semanticVariables.js',\n 'semanticDarkVariables.js',\n 'safelist.js',\n 'custom.js'\n ],\n JSON: [\n 'fonts.json',\n 'icons.json',\n 'components-config.json',\n 'version.json',\n 'metadata.json'\n ]\n};\n\n// Environment variables\nconst ENV_VARS = {\n FF_ID: 'FF_ID',\n FF_API_URL: 'FF_API_URL',\n FF_USE_LOCAL: 'FF_USE_LOCAL'\n};\n\nmodule.exports = {\n DEFAULT_API_URL,\n LEGACY_API_URL,\n CACHE_DIR_NAME,\n CACHE_TTL_DAYS,\n CACHE_TTL_MS,\n CACHE_FILES,\n ENV_VARS\n};", "class APIError extends Error {\n constructor(message, statusCode, url) {\n super(message);\n this.name = 'APIError';\n this.statusCode = statusCode;\n this.url = url;\n this.code = `API_${statusCode}`;\n }\n}\n\nclass CacheError extends Error {\n constructor(message, operation) {\n super(message);\n this.name = 'CacheError';\n this.operation = operation;\n this.code = `CACHE_${operation.toUpperCase()}`;\n }\n}\n\nclass ConfigError extends Error {\n constructor(message, field) {\n super(message);\n this.name = 'ConfigError';\n this.field = field;\n this.code = `CONFIG_${field.toUpperCase()}`;\n }\n}\n\nclass ProcessingError extends Error {\n constructor(message, token) {\n super(message);\n this.name = 'ProcessingError';\n this.token = token;\n this.code = 'PROCESSING_ERROR';\n }\n}\n\nmodule.exports = {\n APIError,\n CacheError,\n ConfigError,\n ProcessingError\n};", "const fs = require('fs');\n\n/**\n * Read a JSON file safely, returning null if file doesn't exist\n * @param {string} filepath - Path to the JSON file\n * @returns {Object|null} Parsed JSON or null if file not found\n * @throws {Error} If JSON is invalid\n */\nfunction readJsonFileSafe(filepath) {\n try {\n const content = fs.readFileSync(filepath, 'utf8');\n return JSON.parse(content);\n } catch (error) {\n if (error.code === 'ENOENT') {\n return null; // File not found, return null like API would return 404\n }\n throw error;\n }\n}\n\n/**\n * Read a file safely, returning null if file doesn't exist\n * @param {string} filepath - Path to the file\n * @returns {string|null} File content or null if file not found\n * @throws {Error} For other file system errors\n */\nfunction readFileSafe(filepath) {\n try {\n return fs.readFileSync(filepath, 'utf8');\n } catch (error) {\n if (error.code === 'ENOENT') {\n return null; // File not found\n }\n throw error;\n }\n}\n\n/**\n * Write JSON data to a file with proper formatting\n * @param {string} filepath - Path to write the file\n * @param {Object} data - Data to write\n * @param {number} indent - Indentation level (default: 2)\n */\nfunction writeJsonFile(filepath, data, indent = 2) {\n const content = JSON.stringify(data, null, indent);\n fs.writeFileSync(filepath, content, 'utf8');\n}\n\n/**\n * Write module.exports file with JSON data\n * @param {string} filepath - Path to write the file\n * @param {Object} data - Data to export\n */\nfunction writeModuleExportsFile(filepath, data) {\n // Handle empty data cases\n if (data === null || data === undefined || \n (typeof data === 'object' && Object.keys(data).length === 0) ||\n (Array.isArray(data) && data.length === 0)) {\n const emptyContent = Array.isArray(data) ? '[]' : '{}';\n const content = `module.exports = ${emptyContent};`;\n fs.writeFileSync(filepath, content, 'utf8');\n } else {\n const content = `module.exports = ${JSON.stringify(data, null, 2)};`;\n fs.writeFileSync(filepath, content, 'utf8');\n }\n}\n\n/**\n * Check if a file exists\n * @param {string} filepath - Path to check\n * @returns {boolean} True if file exists\n */\nfunction fileExists(filepath) {\n return fs.existsSync(filepath);\n}\n\n/**\n * Create directory recursively\n * @param {string} dirpath - Directory path to create\n */\nfunction ensureDirectoryExists(dirpath) {\n fs.mkdirSync(dirpath, { recursive: true });\n}\n\n/**\n * Remove directory recursively\n * @param {string} dirpath - Directory path to remove\n */\nfunction removeDirectory(dirpath) {\n fs.rmSync(dirpath, { recursive: true, force: true });\n}\n\nmodule.exports = {\n readJsonFileSafe,\n readFileSafe,\n writeJsonFile,\n writeModuleExportsFile,\n fileExists,\n ensureDirectoryExists,\n removeDirectory\n};", "const path = require('path');\nconst { CACHE_DIR_NAME, CACHE_TTL_MS, CACHE_FILES } = require('./constants');\nconst { CacheError } = require('./errors');\nconst { readJsonFileSafe, readFileSafe, writeJsonFile, writeModuleExportsFile, fileExists, ensureDirectoryExists, removeDirectory } = require('./file-utils');\n\nclass CacheManager {\n constructor(appRoot = process.cwd()) {\n this.appRoot = appRoot;\n this.cacheDir = path.join(appRoot, 'node_modules', CACHE_DIR_NAME);\n this.metadataFile = path.join(this.cacheDir, 'metadata.json');\n this.maxAge = CACHE_TTL_MS;\n }\n\n /**\n * Get the cache directory path\n * @returns {string} Cache directory path\n */\n getCacheDir() {\n return this.cacheDir;\n }\n\n /**\n * Check if cache directory exists\n * @returns {boolean} True if cache exists\n */\n exists() {\n return fileExists(this.cacheDir);\n }\n\n /**\n * Check if cache is valid (exists and not expired)\n * @returns {boolean} True if cache is valid\n */\n isValid() {\n if (!this.exists()) {\n return false;\n }\n\n try {\n const metadata = readJsonFileSafe(this.metadataFile);\n if (!metadata) {\n return false;\n }\n\n const timestamp = new Date(metadata.timestamp).getTime();\n const now = Date.now();\n \n return (now - timestamp) < this.maxAge;\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Load all cached data\n * @returns {Object|null} Cached data object or null if not found\n */\n load() {\n if (!this.exists()) {\n return null;\n }\n\n try {\n const data = {};\n \n // Load all .js files\n for (const file of CACHE_FILES.JS) {\n const filePath = path.join(this.cacheDir, file);\n if (fileExists(filePath)) {\n // Remove .js extension for key\n const key = file.replace('.js', '');\n try {\n // Use a more secure approach - parse the exported data\n const content = readFileSafe(filePath);\n if (content !== null) {\n // Create a safe evaluation context\n const moduleExports = {};\n const fakeModule = { exports: moduleExports };\n \n // Use Function constructor to evaluate in isolated scope\n const evalFunc = new Function('module', 'exports', content);\n evalFunc(fakeModule, moduleExports);\n \n data[key] = fakeModule.exports;\n }\n } catch (e) {\n // Skip files that can't be parsed\n }\n }\n }\n\n // Load all .json files\n for (const file of CACHE_FILES.JSON) {\n const filePath = path.join(this.cacheDir, file);\n const key = file.replace('.json', '');\n const content = readJsonFileSafe(filePath);\n if (content !== null) {\n data[key] = content;\n }\n }\n\n // Rename components-config to componentsConfig for consistency\n if (data['components-config']) {\n data.componentsConfig = data['components-config'];\n delete data['components-config'];\n }\n\n // Backward compatibility: rename cls to safelist if present\n if (data.cls && !data.safelist) {\n data.safelist = data.cls;\n delete data.cls;\n }\n\n return data;\n } catch (error) {\n throw new CacheError(`Failed to load cache: ${error.message}`, 'read');\n }\n }\n\n /**\n * Save data to cache\n * @param {Object} data - Data object to save\n * @throws {Error} If save operation fails\n */\n save(data) {\n try {\n // Create cache directory\n ensureDirectoryExists(this.cacheDir);\n\n // Save metadata first\n const metadata = {\n timestamp: new Date().toISOString(),\n version: data.metadata?.version || '2.0.0',\n ffId: data.metadata?.ffId\n };\n writeJsonFile(this.metadataFile, metadata);\n\n // Save .js files\n const jsFiles = [\n 'tokens',\n 'variables',\n 'semanticVariables',\n 'semanticDarkVariables',\n 'safelist',\n 'custom'\n ];\n\n for (const key of jsFiles) {\n if (data[key] !== undefined) {\n const filePath = path.join(this.cacheDir, `${key}.js`);\n writeModuleExportsFile(filePath, data[key]);\n }\n }\n \n // Also check for safelist specifically since it might be an array\n if (data.safelist && Array.isArray(data.safelist)) {\n const safelistPath = path.join(this.cacheDir, 'safelist.js');\n writeModuleExportsFile(safelistPath, data.safelist);\n }\n\n // Save .json files\n const jsonData = {\n fonts: data.fonts,\n icons: data.icons || data.iconSet,\n 'components-config': data.componentsConfig,\n version: data.version\n };\n\n for (const [key, value] of Object.entries(jsonData)) {\n if (value !== undefined) {\n const filePath = path.join(this.cacheDir, `${key}.json`);\n writeJsonFile(filePath, value);\n }\n }\n } catch (error) {\n throw new CacheError(`Failed to save cache: ${error.message}`, 'write');\n }\n }\n\n /**\n * Clear the cache directory\n */\n clear() {\n if (this.exists()) {\n removeDirectory(this.cacheDir);\n }\n }\n}\n\nmodule.exports = CacheManager;", "const CacheManager = require('./lib/core/cache-manager');\n\nfunction frontfriend(nextConfig = {}) {\n // Load cache once at config time\n const cacheManager = new CacheManager(process.cwd());\n let cache = null;\n\n if (cacheManager.exists()) {\n cache = cacheManager.load();\n } else {\n console.warn('[FrontFriend Next.js] No cache found. Please run \"npx frontfriend init\" first.');\n }\n\n return {\n ...nextConfig,\n // Environment variables work with both webpack and Turbopack\n env: {\n ...nextConfig.env,\n // Inject config as environment variables for Turbopack compatibility\n __FF_CONFIG__: cache ? JSON.stringify(cache.componentsConfig || null) : 'null',\n __FF_ICONS__: cache ? JSON.stringify(cache.icons || null) : 'null',\n },\n webpack: (config, options) => {\n // 1. Call existing webpack config if provided\n if (typeof nextConfig.webpack === 'function') {\n config = nextConfig.webpack(config, options);\n }\n\n if (!cache) {\n return config;\n }\n\n // 4. Use webpack.DefinePlugin from options (works with both webpack 4 and 5)\n // This is for webpack - Turbopack will use the env vars above\n const { webpack } = options;\n const DefinePlugin = webpack.DefinePlugin;\n\n // 5. Inject __FF_CONFIG__ and __FF_ICONS__ as globals for webpack\n const definitions = {\n __FF_CONFIG__: JSON.stringify(cache.componentsConfig || null),\n __FF_ICONS__: JSON.stringify(cache.icons || null)\n };\n\n // Add DefinePlugin to plugins array\n config.plugins = config.plugins || [];\n config.plugins.push(new DefinePlugin(definitions));\n\n // Log success in development\n if (options.dev && !options.isServer) {\n console.log('[FrontFriend Next.js] Injected configuration and icons into client build');\n }\n\n // 6. Return modified config\n return config;\n }\n };\n}\n\nmodule.exports = frontfriend;"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["require_constants", "__commonJSMin", "exports", "module", "DEFAULT_API_URL", "LEGACY_API_URL", "CACHE_DIR_NAME", "CACHE_FILES", "ENV_VARS", "require_errors", "__commonJSMin", "exports", "module", "APIError", "message", "statusCode", "url", "CacheError", "operation", "ConfigError", "field", "ProcessingError", "token", "require_file_utils", "__commonJSMin", "exports", "module", "fs", "readJsonFileSafe", "filepath", "content", "error", "readFileSafe", "writeJsonFile", "data", "indent", "writeModuleExportsFile", "fileExists", "ensureDirectoryExists", "dirpath", "removeDirectory", "require_cache_manager", "__commonJSMin", "exports", "module", "path", "CACHE_DIR_NAME", "CACHE_TTL_MS", "CACHE_FILES", "CacheError", "readJsonFileSafe", "readFileSafe", "writeJsonFile", "writeModuleExportsFile", "fileExists", "ensureDirectoryExists", "removeDirectory", "CacheManager", "appRoot", "metadata", "timestamp", "data", "file", "filePath", "key", "content", "moduleExports", "fakeModule", "error", "_a", "_b", "jsFiles", "safelistPath", "jsonData", "value", "CacheManager", "frontfriend", "nextConfig", "cacheManager", "cache", "config", "options", "webpack", "DefinePlugin", "definitions"]
|
|
7
7
|
}
|
|
@@ -15,7 +15,7 @@ function generateIconTypes(options = {}) {
|
|
|
15
15
|
|
|
16
16
|
// Check if icons.json exists
|
|
17
17
|
if (!fs.existsSync(iconsPath)) {
|
|
18
|
-
console.error('[FrontFriend] Error: icons.json not found. Please run "npx frontfriend
|
|
18
|
+
console.error('[FrontFriend] Error: icons.json not found. Please run "npx frontfriend init" first.');
|
|
19
19
|
process.exit(1);
|
|
20
20
|
}
|
|
21
21
|
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@ function generateIconTypes(options = {}) {
|
|
|
15
15
|
|
|
16
16
|
// Check if icons.json exists
|
|
17
17
|
if (!fs.existsSync(iconsPath)) {
|
|
18
|
-
console.error('[FrontFriend] Error: icons.json not found. Please run "npx frontfriend
|
|
18
|
+
console.error('[FrontFriend] Error: icons.json not found. Please run "npx frontfriend init" first.');
|
|
19
19
|
process.exit(1);
|
|
20
20
|
}
|
|
21
21
|
|