@veloss/vite-t3-env
Version:
vite-t3-env plugin for vite
40 lines (34 loc) • 6.06 kB
JavaScript
;var Y=Object.create;var g=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var ne=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty;var ie=(e,t)=>{for(var n in t)g(e,n,{get:t[n],enumerable:!0})},k=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of te(t))!re.call(e,o)&&o!==n&&g(e,o,{get:()=>t[o],enumerable:!(r=ee(t,o))||r.enumerable});return e};var _=(e,t,n)=>(n=e!=null?Y(ne(e)):{},k(t||!e||!e.__esModule?g(n,"default",{value:e,enumerable:!0}):n,e)),oe=e=>k(g({},"__esModule",{value:!0}),e);var ve={};ie(ve,{t3EnvPlugin:()=>ce});module.exports=oe(ve);var $=_(require("path"),1),d=require("es-module-lexer"),H=require("vite");var y=_(require("path"),1),R=require("vite");var f=_(require("fs"),1),u=_(require("path"),1),V=require("find-up");var l=/^[a-zA-Z_$][a-zA-Z0-9_$]*$/,E=`// this file is generated \u2014 do not edit it
`,h="NPM_CONFIG_WORKSPACE_DIR",D="pnpm-workspace.yaml",M=new Set(["do","if","in","for","let","new","try","var","case","else","enum","eval","null","this","true","void","with","await","break","catch","class","const","false","super","throw","while","yield","delete","export","import","public","return","static","switch","typeof","default","extends","finally","package","private","continue","debugger","function","arguments","interface","protected","implements","instanceof"]),F="vite-env.d.ts",j="global.d.ts";function O(e,{prefix:t,ignore:n}){return Object.fromEntries(Object.entries(e).filter(([r])=>n&&r.startsWith(n)?!1:!t||r.startsWith(t)))}var W=new Map;function N(e,t){t!==W.get(e)&&ae(e,t)}function se(e){try{f.default.mkdirSync(e,{recursive:!0})}catch(t){if(t.code==="EEXIST")return;throw t}}function ae(e,t){W.set(e,t),se(u.default.dirname(e)),f.default.writeFileSync(e,t)}var L=new WeakMap;function x(e,...t){let n=L.get(e);if(!n){let o=/\n?([ \t]*)/.exec(e[0])?.[1],a=new RegExp(`^${o}`,"gm");n={strings:e.map(s=>s.replace(a,"")),indents:[]};let i=`
`;for(let s=0;s<t.length;s+=1){let c=n.strings[s],v=/\n([ \t]*)$/.exec(c);v&&(i=v[0]),n.indents[s]=i}L.set(e,n)}let r=n.strings[0];for(let o=0;o<t.length;o+=1)r+=String(t[o]).replace(/\n/g,n.indents[o])+n.strings[o+1];return r=r.trim(),r}var b=e=>f.default.existsSync(u.default.resolve(e,".env"));async function G(e){let t=process.env[h]??process.env[h.toLowerCase()],n=t?u.default.join(t,"pnpm-workspace.yaml"):await(0,V.findUp)([D,"pnpm-workspace.yml"],{cwd:await pe(e)});if(n?.endsWith(".yml")){let r=new Error;throw r.name="BAD_WORKSPACE_MANIFEST_NAME",r.message=`The workspace manifest file should be named "pnpm-workspace.yaml". File found: ${n}`,r}return n&&u.default.dirname(n)}async function pe(e){return new Promise(t=>{f.default.realpath.native(e,function(n,r){t(n!==null?e:r)})})}var K=async({resolvedRoot:e,userConfigEnvFile:t,viteConfigEnvDir:n})=>{if(t)return y.default.resolve(e,y.default.dirname(t));if(n)return(0,R.normalizePath)(y.default.resolve(e,n));if(b(e))return e;let r=await G(e);if(r&&b(r))return r;throw new Error(`The .env file does not exist in the root directory: ${e}`)},z=({userEnvPrefix:e,defaultPrefix:t})=>{let n=t,r;return typeof e=="string"?n=e:e&&(n=e.client??t,r=e.server),{server:r,client:n}},J=({envDir:e,prefix:t},n)=>{let r=(0,R.loadEnv)(n,e,"");return{public:O(r,{prefix:t.client,ignore:t.server}),private:O(r,{prefix:t.server,ignore:t.client})}};function T(e,t){let n=[];for(let r in t){if(!l.test(r)||M.has(r))continue;let o=`/** @type {import('${e}').${r}} */`,a=`export const ${r} = ${JSON.stringify(t[r])};`;n.push(`${o}
${a}`)}return E+n.join(`
`)}function A(e,t){let n=Object.keys(t[e]).filter(r=>l.test(r)).map(r=>`export const ${r}: string;`);return x`
declare module '$env/static/${e}' {
${n.join(`
`)}
}
`}var B={boolean:"boolean",string:"string",number:"number",array:"any[]",object:"Record<string, any>"};function U(e){let t=Object.keys(e).filter(n=>l.test(n)).map(n=>`readonly ${n}: ${B[typeof e[n]]||"any"};`);return x`
interface ImportMetaEnv {
${t.join(`
`)}
}
`}function X(e){let t=Object.keys(e).filter(n=>l.test(n)).map(n=>`readonly ${n}: ${B[typeof e[n]]||"any"};`);return x`
declare namespace NodeJS {
interface ProcessEnv {
[key: string]: string;
${t.join(`
`)}
}
}
`}var Z=e=>`
${E}
/// <reference types="vite/client" />
${U(e.public)}
${A("private",e)}
${A("public",e)}
`,q=e=>`
${E}
${X(e)}
`;var C="\0virtual:$env/static/private",I="\0virtual:$env/static/public";var Q=({envOptions:e,serverEnv:t,clientEnv:n,prefix:r})=>{let o="VITE_",a={private:{},public:{}};return[{name:"vite-plugin-t3-env",config:async(i,s)=>{let c=await K({resolvedRoot:(0,H.normalizePath)(i.root?$.default.resolve(i.root):process.cwd()),viteConfigEnvDir:i.envDir,userConfigEnvFile:e?.envFile}),v=z({userEnvPrefix:r,defaultPrefix:o}),p=J({envDir:c,prefix:v},s.mode),P=n(p.public,v.client),S=t?t(p.private):{};Object.assign(a,{private:S,public:P});let w={};for(let m of Object.keys(P))w[`import.meta.env.${m}`]=JSON.stringify(P[m]);for(let m of Object.keys(S))w[`process.env.${m}`]=JSON.stringify(S[m]);return{define:w,optimizeDeps:{exclude:["$env"]}}},async configResolved(i){await d.init,N($.default.resolve(i.root,F),Z(a)),N($.default.resolve(i.root,j),q(a.private))},enforce:"pre"},{name:"t3-env-virtual-modules",resolveId(i){if(i.startsWith("$env/"))return`\0virtual:${i}`},load(i){switch(i){case C:return T("$env/static/private",a.private);case I:return T("$env/static/public",a.public)}}},{name:"t3-env-private-module-server-only",transform(i,s,c){if(!c?.ssr)switch(s){case C:return{code:(0,d.parse)(i)[1].map(({n:p})=>p==="default"?"export default undefined;":`export const ${p} = undefined;`).join(`
`),map:null}}}},{name:"t3-env-public-module-client-only",transform(i,s,c){if(c?.ssr)switch(s){case I:return{code:(0,d.parse)(i)[1].map(({n:p})=>p==="default"?"export default undefined;":`export const ${p} = undefined;`).join(`
`),map:null}}}}]};var ce=e=>Q(e);0&&(module.exports={t3EnvPlugin});