import e from"postcss-value-parser";import t from"path";import{pathToFileURL as r}from"url";import{parse as o}from"postcss";import{promises as s}from"fs";function n(e){const t=e.selector?e:e.parent;return/(!\s*)?postcss-custom-properties:\s*off\b/i.test(t.toString())}function i(t,r){const o=new Map,s=new Map,i=new Map;t.nodes.slice().forEach((t=>{const i=p(t)?o:l(t)?s:null;i&&(t.nodes.slice().forEach((t=>{if(t.variable&&!n(t)){const{prop:o}=t;i.set(o,e(t.value)),r.preserve||t.remove()}})),r.preserve||!u(t)||n(t)||t.remove())}));for(const[e,t]of o.entries())i.set(e,t);for(const[e,t]of s.entries())i.set(e,t);return i}const a=/^html$/i,c=/^:root$/i,p=e=>"rule"===e.type&&e.selector.split(",").some((e=>a.test(e)))&&Object(e.nodes).length,l=e=>"rule"===e.type&&e.selector.split(",").some((e=>c.test(e)))&&Object(e.nodes).length,u=e=>0===Object(e.nodes).length;function f(t){const r=new Map;if("customProperties"in t)for(const[o,s]of Object.entries(t.customProperties))r.set(o,e(s.toString()));if("custom-properties"in t)for(const[o,s]of Object.entries(t["custom-properties"]))r.set(o,e(s.toString()));return r}async function m(e){let t;try{t=await import(e)}catch(o){t=await import(r(e).href)}return f("default"in t?t.default:t)}async function w(e){const r=(await Promise.all(e.map((async e=>{if(e instanceof Promise?e=await e:e instanceof Function&&(e=await e()),"string"==typeof e){const r=t.resolve(e);return{type:t.extname(r).slice(1).toLowerCase(),from:r}}if("customProperties"in e&&Object(e.customProperties)===e.customProperties)return e;if("custom-properties"in e&&Object(e["custom-properties"])===e["custom-properties"])return e;if("from"in e){const r=t.resolve(e.from);let o=e.type;return o||(o=t.extname(r).slice(1).toLowerCase()),{type:o,from:r}}return Object.keys(e).length,null})))).filter((e=>!!e)),n=await Promise.all(r.map((async e=>{if("type"in e&&"from"in e){if("css"===e.type||"pcss"===e.type)return await async function(e){const t=await s.readFile(e);return i(o(t,{from:e.toString()}),{preserve:!0})}(e.from);if("js"===e.type||"cjs"===e.type)return await m(e.from);if("mjs"===e.type)return await m(e.from);if("json"===e.type)return await async function(e){return f(await v(e))}(e.from);throw new Error("Invalid source type: "+e.type)}return f(e)}))),a=new Map;return n.forEach((e=>{for(const[t,r]of e.entries())a.set(t,r)})),a}const v=async e=>JSON.parse((await s.readFile(e)).toString());function y(e,t){return e.nodes&&e.nodes.length&&e.nodes.slice().forEach((r=>{if(j(r)){const[o,...s]=r.nodes.filter((e=>"div"!==e.type)),{value:n}=o,i=e.nodes.indexOf(r);if(t.has(n)){const r=t.get(n).nodes;!function(e,t,r){const o=new Map(t);o.delete(r),y(e,o)}({nodes:r},t,n),i>-1&&e.nodes.splice(i,1,...r)}else s.length&&(i>-1&&e.nodes.splice(i,1,...s),y(e,t))}else y(r,t)})),e.toString()}const d=/^var$/i,j=e=>"function"===e.type&&d.test(e.value)&&Object(e.nodes).length>0;var h=(t,r,o)=>{if($(t)&&!function(e){const t=e.prev();return Boolean(n(e)||t&&"comment"===t.type&&/(!\s*)?postcss-custom-properties:\s*ignore\s+next\b/i.test(t.text))}(t)){const s=t.value;let n=y(e(s),r);const i=new Set;for(;g.test(n)&&!i.has(n);){i.add(n);n=y(e(n),r)}if(n!==s)if(o.preserve){const e=t.cloneBefore({value:n});b(e)&&(e.raws.value.value=e.value.replace(x,"$1"),e.raws.value.raw=e.raws.value.value+e.raws.value.raw.replace(x,"$2"))}else t.value=n,b(t)&&(t.raws.value.value=t.value.replace(x,"$1"),t.raws.value.raw=t.raws.value.value+t.raws.value.raw.replace(x,"$2"))}};const O=/^--[A-z][\w-]*$/,g=/(^|[^\w-])var\([\W\w]+\)/,$=e=>!O.test(e.prop)&&g.test(e.value),b=e=>"value"in Object(Object(e.raws).value)&&"raw"in e.raws.value&&x.test(e.raws.value.raw),x=/^([\W\w]+)(\s*\/\*[\W\w]+?\*\/)$/;async function F(e,t,r){"css"===t&&await async function(e,t){const r=`:root {\n${Object.keys(t).reduce(((e,r)=>(e.push(`\t${r}: ${t[r]};`),e)),[]).join("\n")}\n}\n`;await s.writeFile(e,r)}(e,r),"scss"===t&&await async function(e,t){const r=`${Object.keys(t).reduce(((e,r)=>{const o=r.replace("--","$");return e.push(`${o}: ${t[r]};`),e}),[]).join("\n")}\n`;await s.writeFile(e,r)}(e,r),"js"===t&&await async function(e,t){const r=`module.exports = {\n\tcustomProperties: {\n${Object.keys(t).reduce(((e,r)=>(e.push(`\t\t'${S(r)}': '${S(t[r])}'`),e)),[]).join(",\n")}\n\t}\n};\n`;await s.writeFile(e,r)}(e,r),"json"===t&&await async function(e,t){const r=`${JSON.stringify({"custom-properties":t},null," ")}\n`;await s.writeFile(e,r)}(e,r),"mjs"===t&&await async function(e,t){const r=`export const customProperties = {\n${Object.keys(t).reduce(((e,r)=>(e.push(`\t'${S(r)}': '${S(t[r])}'`),e)),[]).join(",\n")}\n};\n`;await s.writeFile(e,r)}(e,r)}function P(e){const t={};for(const[r,o]of e.entries())t[r]=o.toString();return t}const S=e=>e.replace(/\\([\s\S])|(')/g,"\\$1$2").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),E=e=>{const r=!("preserve"in Object(e))||Boolean(e.preserve),o="overrideImportFromWithRoot"in Object(e)&&Boolean(e.overrideImportFromWithRoot);let s=[];Array.isArray(null==e?void 0:e.importFrom)?s=e.importFrom:null!=e&&e.importFrom&&(s=[e.importFrom]);let n=[];Array.isArray(null==e?void 0:e.exportTo)?n=e.exportTo:null!=e&&e.exportTo&&(n=[e.exportTo]);const a=w(s);let c=new Map;const p=0===s.length&&0===n.length;return{postcssPlugin:"postcss-custom-properties",prepare:()=>p?{Once:e=>{c=i(e,{preserve:r})},Declaration:e=>{h(e,c,{preserve:r})},OnceExit:()=>{c.clear()}}:{Once:async e=>{const s=(await a).entries(),p=i(e,{preserve:r}).entries();if(o)for(const[e,t]of[...s,...p])c.set(e,t);else for(const[e,t]of[...p,...s])c.set(e,t);await function(e,r){return Promise.all(r.map((async r=>{if(r instanceof Function)return void await r(P(e));if("string"==typeof r){const o=t.resolve(r),s=t.extname(o).slice(1).toLowerCase();return void await F(o,s,P(e))}let o={};if(o="toJSON"in r?r.toJSON(P(e)):P(e),"to"in r){const e=t.resolve(r.to);let s=r.type;return s||(s=t.extname(e).slice(1).toLowerCase()),void await F(e,s,o)}"customProperties"in r?r.customProperties=o:"custom-properties"in r&&(r["custom-properties"]=o)})))}(c,n)},Declaration:e=>{h(e,c,{preserve:r})},OnceExit:()=>{c.clear()}}}};E.postcss=!0;export{E as default};