@buildplease/core 1.1.0 → 1.1.1

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @buildplease/core
2
2
 
3
- Core is the shared foundation for BuildPlease applications. It provides framework-independent application primitives used by the other BuildPlease kits.
3
+ Core provides shared application primitives for BuildPlease kits.
4
4
 
5
5
  ## Installation
6
6
 
@@ -20,7 +20,7 @@ Node.js-specific APIs are available from `@buildplease/core/node`.
20
20
 
21
21
  ### Environment configuration
22
22
 
23
- Node applications use one BuildPlease convention: `environment.config.ts`.
23
+ Define application environment configuration in `environment.config.ts`:
24
24
 
25
25
  ```ts
26
26
  import { defineConfig, defineEnvironments, defineSource } from '@buildplease/core/node';
@@ -37,7 +37,14 @@ export default defineConfig(environments, {
37
37
  });
38
38
  ```
39
39
 
40
- Core owns config discovery, TypeScript loading, environment-file loading, source resolution, defaults, computed values, and reusable typed configuration contracts. Root configuration resolution always receives one explicit context containing both the selected environment and build metadata. Kits expose their own `defineConfig()` policy while using the same Core engine and loader.
40
+ Environment files are optional dotenv hookups. If a configured file is missing, BuildPlease continues with the existing process environment. Existing `process.env` values keep priority over dotenv values.
41
+
42
+ Select the BuildPlease environment when running a command:
43
+
44
+ ```bash
45
+ buildplease --env test -- <command>
46
+ buildplease --env production -- <command>
47
+ ```
41
48
 
42
49
  ## Features
43
50
 
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import { runMain } from '../dist/cli/index.mjs';
3
+
4
+ try {
5
+ process.exitCode = runMain(process.argv.slice(2));
6
+ } catch (error) {
7
+ process.stderr.write(`[BuildPlease] ${error instanceof Error ? error.message : String(error)}\n`);
8
+ process.exitCode = 1;
9
+ }
@@ -0,0 +1 @@
1
+ import{spawnSync as e}from"node:child_process";import{constants as t}from"node:os";const n=`Usage: buildplease --env <environment> -- <command> [arguments...]`;function r(r){let a=r.indexOf(`--`);if(a<0){if(r.length===1&&(r[0]===`--help`||r[0]===`-h`))return process.stdout.write(`${n}\n`),0;throw Error(`${n}\nMissing "--" command separator.`)}let o=r.slice(0,a);if(o.includes(`--help`)||o.includes(`-h`))return process.stdout.write(`${n}\n`),0;let s=r.slice(a+1),c=i(o),l=s[0];if(!l)throw Error(`${n}\nMissing command.`);let u=e(l,s.slice(1),{env:{...process.env,BUILDPLEASE_ENVIRONMENT:c},shell:process.platform===`win32`,stdio:`inherit`});if(u.error)throw u.error;return u.signal?128+(t.signals[u.signal]??0):u.status??1}function i(e){if(e.length!==2||e[0]!==`--env`)throw Error(`${n}\nExpected exactly one BuildPlease option: --env <environment>.`);let t=e[1]?.trim();if(!t)throw Error(`${n}\nEnvironment must not be empty.`);return t}export{r as runMain};
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(e,t,n)=>(s(e,t,`default`),n&&s(n,t,`default`)),l=(n,r,o)=>(o=n==null?{}:e(i(n)),s(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));let u=require("node:module"),d=require("consola"),f=require("consola/utils"),p=require("node:fs");p=l(p,1);let m=require("node:path");m=l(m,1);let ee=require("node:url"),h=require("@dotenvx/dotenvx");h=l(h,1);let te=require("jiti"),ne=require("inversify"),g=require("date-fns"),_=require("date-fns-tz"),v=require("ms");v=l(v,1);let y=require("pino");y=l(y,1);let b=require("zod");b=l(b,1);function re(e,t={}){let n=t.includePeers??!0,r=t.includeDependencies??!0,i=t.includeSubpaths??!0,a=t.includeNodeBuiltins??!0,o=t.allowPeerBundling??!1,s=Object.keys(e.peerDependencies??{}),c=Object.keys(e.dependencies??{}),l=S(t.bundle??[]),u=S(t.external??[]);le(u,l),de(l),o||ue(s,l);let d=new Set(l.map(w)),f=n?s.filter(e=>!d.has(e)):[],p=r?c.filter(e=>!d.has(e)):[];return{external:C([...a?ie():[],...x([...f,...p,...u],i)]),bundle:C(x(l,i))}}function ie(){let e=S(u.builtinModules.map(T)),t=e.map(e=>`node:${e}`);return C([...e,...t,/^node:/])}function x(e,t){return t?e.map(e=>ae(e)):[...e]}function ae(e){return se(e)?e:RegExp(`^${ce(e)}(?:/.*)?$`)}function S(e){return Array.from(new Set(e))}function C(e){let t=new Set,n=[];for(let r of e){let e=oe(r);t.has(e)||(t.add(e),n.push(r))}return n}function oe(e){return typeof e==`string`?`string:${e}`:`regexp:${e.source}/${e.flags}`}function w(e){if(e.startsWith(`@`)){let[t,n]=e.split(`/`);return t&&n?`${t}/${n}`:e}let[t]=e.split(`/`);return t??e}function T(e){return e.startsWith(`node:`)?e.slice(5):e}function se(e){return e.includes(`*`)||e.startsWith(`^`)||e.endsWith(`$`)}function ce(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function le(e,t){let n=new Set(e.map(w)),r=t.filter(e=>n.has(w(e)));if(r.length!==0)throw Error(`Packages cannot be both external and bundled: ${r.join(`, `)}`)}function ue(e,t){let n=new Set(e),r=t.filter(e=>n.has(w(e)));if(r.length!==0)throw Error(`Peer dependencies must stay external and cannot be bundled by default: ${r.join(`, `)}`)}function de(e){let t=new Set(u.builtinModules.map(T)),n=e.filter(e=>fe(e,t));if(n.length!==0)throw Error(`Node.js built-in modules cannot be bundled: ${n.join(`, `)}`)}function fe(e,t){let n=T(e),[r]=n.split(`/`);return r?t.has(r):t.has(n)}const pe=/\u001B\[[0-9;]*m/g;var me=class{instance;constructor(e={}){this.instance=(0,d.createConsola)({level:e.enabled===!1?-999:999,formatOptions:{colors:!0,date:!1}})}title(e,t,n=[]){this.printPanel({title:`${e} ${t}`.trim(),renderedTitle:`${f.colors.cyan(f.colors.bold(e))}${t?` ${f.colors.dim(t)}`:``}`,rows:n,formatValue:f.colors.green})}panel(e,t,n){this.printPanel({title:n===void 0?e:`${e} ${n}`,renderedTitle:`${f.colors.cyan(f.colors.bold(e))}${n===void 0?``:` ${f.colors.green(String(n))}`}`,rows:t,formatValue:f.colors.dim})}step(e,t){return`${f.colors.cyan(e.padEnd(10,` `))}${t}`}duration(e){return e<1e3?`${e}ms`:`${(e/1e3).toFixed(2)}s`}emptyLine(){this.instance.log(``)}log(e,...t){this.instance.log(e,...t)}info(e,...t){this.instance.info(e,...t)}start(e,...t){this.instance.start(e,...t)}success(e,...t){this.instance.success(e,...t)}warn(e,...t){this.instance.warn(e,...t)}error(e,...t){this.instance.error(e,...t)}debug(e,...t){this.instance.debug(e,...t)}printPanel(e){this.instance.log(this.formatPanel(e))}formatPanel(e){let t=this.getPanelWidth(e);return[this.formatPanelTop(e.renderedTitle,t),...e.rows.map(n=>this.formatPanelRow(n,t,e.formatValue)),this.formatPanelBottom(t)].join(`
2
- `)}formatPanelTop(e,t){let n=Math.max(1,t-this.visibleLength(e)-5);return`${f.colors.dim(`╭─`)} ${e} ${f.colors.dim(`─`.repeat(n))}${f.colors.dim(`╮`)}`}formatPanelBottom(e){return`${f.colors.dim(`╰`)}${f.colors.dim(`─`.repeat(e-2))}${f.colors.dim(`╯`)}`}formatPanelRow(e,t,n){let r=e.label.padEnd(14,` `),i=String(e.value),a=this.visibleLength(r)+this.visibleLength(i)+4,o=Math.max(0,t-a);return`${f.colors.dim(`│`)} ${f.colors.blue(r)}${n(i)}${` `.repeat(o)} ${f.colors.dim(`│`)}`}getPanelWidth(e){return Math.max(48,this.getTitleWidth(e),this.getRowsWidth(e.rows))}getTitleWidth(e){return this.visibleLength(e.title)+6}getRowsWidth(e){return Math.max(0,...e.map(e=>this.getRowWidth(e)))}getRowWidth(e){return 14+this.visibleLength(String(e.value))+4}visibleLength(e){return e.replace(pe,``).length}};const E=Symbol.for(`buildplease.environment-configuration.field`),D=Symbol.for(`buildplease.environment-configuration.contract`),O=Symbol.for(`buildplease.environment-configuration.binding`),k=Symbol.for(`buildplease.environment-configuration.config`),he={string(){return N((e,t)=>{if(typeof e!=`string`)throw Error(`${t} must be string.`);let n=e.trim();if(!n)throw Error(`${t} must not be empty.`);return n},{required:!0})},number(){return N((e,t)=>{let n=typeof e==`number`?e:Number(e);if(!Number.isFinite(n))throw Error(`${t} must be number.`);return n},{required:!0})},boolean(){return N((e,t)=>{if(typeof e==`boolean`)return e;if(typeof e==`string`){let t=e.trim().toLowerCase();if(t===`true`)return!0;if(t===`false`)return!1}throw Error(`${t} must be boolean.`)},{required:!0})},array(e){return N((t,n)=>{if(!Array.isArray(t))throw Error(`${n} must be array.`);return t.map((t,r)=>e.parse(t,`${n}[${r}]`))},{required:!0})},custom(){return N(e=>e,{required:!0})}};function ge(e,t){let n=e.trim();if(!n)throw Error(`Configuration key must not be empty.`);let r=(e=>{let t={contract:r,input:e};return Object.defineProperty(t,O,{value:!0}),t});return Object.defineProperties(r,{[D]:{value:!0},key:{value:n},schema:{value:t}}),r}function _e(e,t){let n={environments:e,input:t};return Object.defineProperty(n,k,{value:!0}),n}function A(e){return!!(e&&typeof e==`object`&&e[k]===!0)}function j(e){return!!(e&&typeof e==`object`&&e[E]===!0)}function ve(e){return typeof e==`function`&&e[D]===!0}function M(e){return!!(e&&typeof e==`object`&&e[O]===!0)}function N(e,t){let n={required:t.required,hasDefault:t.hasDefault??!1,defaultValue:t.defaultValue,parse:e,optional(){return N((t,n)=>{if(t!=null)return e(t,n)},{required:!1})},default(t){return N(e,{required:!1,hasDefault:!0,defaultValue:t})},map(n){let r=t.hasDefault&&t.defaultValue!==void 0?n(t.defaultValue):void 0;return N((t,r)=>n(e(t,r)),{required:t.required,hasDefault:t.hasDefault,defaultValue:r})}};return Object.defineProperty(n,E,{value:!0}),n}function P(e,t){if(m.default.isAbsolute(t))return m.default.normalize(t);let n;try{let t=new URL(e);if(t.protocol!==`file:`)throw Error(`Unsupported URL protocol "${t.protocol}"`);n=m.default.dirname((0,ee.fileURLToPath)(t))}catch{n=e}return m.default.resolve(n,t)}function ye(e,t={}){let n=P(process.cwd(),e);if(!p.default.existsSync(n))return;let r=p.default.statSync(n),{recursive:i=!0,force:a=!0,cleanOnly:o=!1}=t;if(o&&r.isDirectory()){for(let e of p.default.readdirSync(n))p.default.rmSync(m.default.join(n,e),{recursive:i,force:a});return}if(o&&r.isFile()){p.default.truncateSync(n,0);return}p.default.rmSync(n,{recursive:r.isDirectory()?i:!1,force:a,maxRetries:3,retryDelay:100})}function F(e){let t=P(process.cwd(),e),n=p.default.existsSync(t)&&p.default.statSync(t).isDirectory()?t:m.default.dirname(t);if(!p.default.existsSync(n))throw Error(`Directory "${n}" does not exist.`);return t}function be(e){let t=P(process.cwd(),e);m.default.extname(e)&&console.warn(`[createDirectory] Warning: "${e}" looks like a file path.`);try{if(!p.default.existsSync(t))p.default.mkdirSync(t,{recursive:!0});else if(!p.default.statSync(t).isDirectory())throw Error(`"${t}" exists but is not a directory.`);return t}catch(e){throw Error(`Failed to create directory "${t}": ${e.message}`)}}function xe(e,t=``){let n=P(process.cwd(),e);F(m.default.dirname(n));let r=Se(n);if(!r)p.default.writeFileSync(n,t,{encoding:`utf8`,flag:`w`});else{if(!r.isFile())throw Error(`"${n}" exists but is not a file.`);t&&p.default.writeFileSync(n,t,{encoding:`utf8`,flag:`a`})}return n}function Se(e){try{return p.default.statSync(e)}catch{return}}async function Ce(e,t={}){let n=P(process.cwd(),e),r;try{r=await p.promises.stat(n)}catch(e){if((t.force??!0)&&e.code===`ENOENT`)return;throw e}let{recursive:i=!0,force:a=!0,cleanOnly:o=!1}=t;if(o&&r.isDirectory()){let e=await p.promises.readdir(n);for(let t of e)await p.promises.rm(m.default.join(n,t),{recursive:i,force:a});return}if(o&&r.isFile()){await p.promises.truncate(n,0);return}await p.promises.rm(n,{recursive:r.isDirectory()?i:!1,force:a,maxRetries:3,retryDelay:100})}async function I(e){let t=P(process.cwd(),e),n;try{n=await p.promises.stat(t)}catch{}let r=n?.isDirectory()?t:m.default.dirname(t);try{if(!(await p.promises.stat(r)).isDirectory())throw Error(`"${r}" exists but is not a directory.`)}catch(e){throw e.code===`ENOENT`?Error(`Directory "${r}" does not exist.`):e}return t}async function we(e){let t=P(process.cwd(),e);m.default.extname(e)&&console.warn(`[createDirectory] Warning: "${e}" looks like a file path (has extension).`);try{let e;try{e=await p.promises.stat(t)}catch{}if(!e)await p.promises.mkdir(t,{recursive:!0});else if(!e.isDirectory())throw Error(`"${t}" exists but is not a directory.`);return t}catch(e){throw Error(`Failed to create directory "${t}": ${e.message}`)}}async function Te(e,t=``){let n=P(process.cwd(),e);await I(m.default.dirname(n));try{let e=await Ee(n);if(!e)await p.promises.writeFile(n,t,{encoding:`utf8`,flag:`w`});else{if(!e.isFile())throw Error(`"${n}" exists but is not a file.`);t&&await p.promises.writeFile(n,t,{encoding:`utf8`,flag:`a`})}return n}catch(e){throw Error(`Failed to create file "${n}": ${e.message}`)}}async function Ee(e){try{return await p.promises.stat(e)}catch(e){if(e.code===`ENOENT`)return;throw e}}function De(e){let t=Object.entries(e);if(!t.length)throw Error(`At least one environment must be defined.`);for(let[e,n]of t)Oe(e,n);return e}function L(e,t,n={}){let r=e[t];if(!r)throw Error(`Environment "${t}" is not defined.`);let i=P(n.baseDir?.trim()||process.cwd(),r.fileDir?.trim()||`.`);return{name:t,file:r.file.trim(),fileDir:i}}function Oe(e,t){if(!e.trim())throw Error(`Environment name must not be empty.`);if(typeof t.file!=`string`||!t.file.trim())throw Error(`Environment file must not be empty for "${e}".`)}function ke(e){return process.env[e]?.trim()||void 0}const R=Symbol.for(`buildplease.environment-configuration.source`);function Ae(e){return{env(e){return B(`env`,{name:e})},byEnvironment(e){return B(`by-environment`,{cases:e})},compute(e){return B(`compute`,{compute:e})},static(e){return B(`static`,{value:e})}}}function z(e){return!!(e&&typeof e==`object`&&e[R]===!0)}function B(e,t,n=[]){let r={kind:e,options:t,transforms:n,default(e){return B(`default`,{source:r,value:e})},map(r){return B(e,t,[...n,r])}};return Object.defineProperty(r,R,{value:!0}),r}async function je(e,t){let n=Fe(t,`config`);return W(e.input,n,`config`)}async function V(e,t,n={}){let r=Me(n);return U(e.schema,t,r,e.key)}async function H(e,t={}){return V(e.contract,e.input,t)}function Me(e){return{buildMetadata:e.buildMetadata,environment:e.environment}}async function U(e,t,n,r){if(j(e))return Ne(e,t,n,r);let i=await W(t,n,r)??{};if(!q(i))throw Error(`${r} must be object.`);let a={};for(let[t,o]of Object.entries(e))a[t]=await U(o,i[t],n,`${r}.${t}`);return a}async function Ne(e,t,n,r){let i=await W(t,n,r);if(i==null){if(e.hasDefault)return K(e.defaultValue);if(!e.required)return;throw Error(`Missing required configuration: ${r}`)}return e.parse(i,r)}async function W(e,t,n){if(z(e))return G(e,t,n);if(M(e))return H(e,t);if(Array.isArray(e))return Promise.all(e.map((e,r)=>W(e,t,`${n}[${r}]`)));if(q(e)){let r={};for(let[i,a]of Object.entries(e))r[i]=await W(a,t,`${n}.${i}`);return r}return e}async function G(e,t,n){let r;switch(e.kind){case`env`:{let{name:t}=e.options;r=ke(t);break}case`by-environment`:{let i=Pe(t,n),{cases:a}=e.options;if(!Object.prototype.hasOwnProperty.call(a,i.name))throw Error(`${n} has no value for environment "${i.name}".`);r=await W(a[i.name],t,n);break}case`compute`:{let i=Fe(t,n),{compute:a}=e.options;r=await a(i);break}case`static`:{let{value:t}=e.options;r=t;break}case`default`:{let{source:i,value:a}=e.options;r=await G(i,t,n)??K(a);break}}for(let t of e.transforms)r=await t(r);return r}function Pe(e,t){if(!e?.environment)throw Error(`${t} requires runtime environment.`);return e.environment}function Fe(e,t){if(!e?.environment)throw Error(`${t} requires runtime environment.`);if(!e.buildMetadata)throw Error(`${t} requires build metadata.`);return e}function K(e){if(Array.isArray(e))return e.map(e=>K(e));if(q(e)){let t={};for(let[n,r]of Object.entries(e))t[n]=K(r);return t}return e}function q(e){if(!e||typeof e!=`object`||Object.prototype.toString.call(e)!==`[object Object]`)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}const J=[`.ts`,`.mts`,`.cts`,`.js`,`.mjs`,`.cjs`];async function Ie(e={}){let t=Le(e.dir);try{let n=Re(t,e.config??`environment.config.ts`),r=await ze(t,n);if(!A(r))throw Error(`Environment config must be defined with defineConfig() (${n}).`);let i=r,a=e.environment?L(i.environments,e.environment,{baseDir:(0,m.dirname)(n)}):void 0;return a&&Be(a),{config:i,configFilePath:n,rootDir:t,environment:a}}catch(e){throw Error(`Failed to load environment config: ${e instanceof Error?e.message:String(e)}`)}}function Le(e){let t=e?P(process.cwd(),e):process.cwd();return F(t),t}function Re(e,t){let n=P(e,t);if(p.default.existsSync(n))return n;if(!J.some(e=>t.endsWith(e)))for(let e of J){let t=`${n}${e}`;if(p.default.existsSync(t))return t}throw Error(`Config file "${n}" does not exist.`)}async function ze(e,t){return(0,te.createJiti)(e,{interopDefault:!0,extensions:[...J],tsconfigPaths:!0}).import(t,{default:!0})}function Be(e){let t=P(e.fileDir,e.file);if(!p.default.existsSync(t))throw Error(`Environment file "${t}" does not exist.`);h.default.config({path:t}),process.env.NODE_ENV=e.name}const Ve=`${{name:`buildplease`,displayName:`BuildPlease`,scope:`@buildplease`}.name}.Core.DI`,He={DI:{Formatter:{UnitController:Symbol.for(`${Ve}.Formatter.UnitController`)},Logger:Symbol.for(`${Ve}.Logger`)}};function Ue(e){return e instanceof Error}function Y(e,t={}){if(e==null)return{};let{filterNull:n=!0,filterUndefined:r=!0,filterEmptyString:i=!1,filterEmptyObject:a=!1,filterEmptyArray:o=!1}=t;return Object.keys(e).reduce((s,c)=>{let l=e[c];return X(l)&&Object.getPrototypeOf(l)===null&&(l=void 0),We(l)&&(l=Y(l,t)),n&&l===null||r&&l===void 0||i&&l===``||a&&Z(l)||o&&Array.isArray(l)&&l.length===0||(s[c]=l),s},{})}function X(e){return typeof e==`object`&&!!e}function Z(e){return X(e)&&Object.keys(e).length===0}function We(e){return X(e)&&Object.getPrototypeOf(e)===Object.prototype}function Ge(e){return e==null||[`string`,`number`,`boolean`,`bigint`,`symbol`].includes(typeof e)}Array.prototype.isEmpty=function(){return this==null||this.length===0},String.prototype.capitalized=function(){let e=this==null?``:this.toString();return e.trim()?e.charAt(0).toUpperCase()+e.slice(1):``};var Ke=class{streetLine1;streetLine2;postalCode;state;city;country;countryCode;constructor(e){this.streetLine1=e.streetLine1,this.streetLine2=e.streetLine2,this.postalCode=e.postalCode,this.state=e.state,this.city=e.city,this.country=e.country,this.countryCode=e.countryCode}toJSON(){return Y({streetLine1:this.streetLine1,streetLine2:this.streetLine2,postalCode:this.postalCode,city:this.city,state:this.state,country:this.country,countryCode:this.countryCode},{filterNull:!0,filterUndefined:!0,filterEmptyString:!0})}formatted(){let e=(e,t)=>e.map(e=>e?.trim()).filter(e=>e&&e.length>0).join(t).trim(),t=this.streetLine1;return e([t,e([this.postalCode,this.city],` `),e([this.country],`, `)],`, `)}},qe=class{email;fb;ig;phone;web;constructor({email:e,fb:t,ig:n,phone:r,web:i}){this.email=e,this.fb=t,this.ig=n,this.phone=r,this.web=i}toJSON(){return Y({email:this.email,fb:this.fb,ig:this.ig,phone:this.phone,web:this.web},{filterNull:!0,filterUndefined:!0,filterEmptyString:!0})}},Je=o({DateFormat:()=>Xe,DateTime:()=>Ye});c(Je,require("date-fns"));var Ye=class e{date;constructor(e){if(!e){this.date=new Date;return}if(e instanceof Date){if(!(0,g.isValid)(e))throw Error(`Invalid date object`);this.date=e;return}let t=(0,g.parseISO)(e);if(!(0,g.isValid)(t))throw Error(`Invalid date string`);this.date=t}static fromUnixTimestamp(t,n){return new e((0,g.fromUnixTime)(t,n))}static now(){return new e(new Date)}toJSON(){return this.toISOString()}toDate(){return this.date}toUnixTimestamp(){return(0,g.getUnixTime)(this.date)}getTime(){return this.date.getTime()}toISOString(){return(0,g.formatISO)(this.date)}format(e,t){return(0,g.format)(this.date,e,t)}addingDuration(t){return new e((0,g.add)(this.date,t))}addingMilliseconds(t){return new e((0,g.addMilliseconds)(this.date,t))}addingSeconds(t){return new e((0,g.addSeconds)(this.date,t))}addingMinutes(t){return new e((0,g.addMinutes)(this.date,t))}addingHours(t){return new e((0,g.addHours)(this.date,t))}addingDays(t){return new e((0,g.addDays)(this.date,t))}addingWeeks(t){return new e((0,g.addWeeks)(this.date,t))}addingMonths(t){return new e((0,g.addMonths)(this.date,t))}addingYears(t){return new e((0,g.addYears)(this.date,t))}subtractingDuration(t){return new e((0,g.sub)(this.date,t))}subtractingMilliseconds(t){return new e((0,g.subMilliseconds)(this.date,t))}subtractingSeconds(t){return new e((0,g.subSeconds)(this.date,t))}subtractingMinutes(t){return new e((0,g.subMinutes)(this.date,t))}subtractingHours(t){return new e((0,g.subHours)(this.date,t))}subtractingDays(t){return new e((0,g.subDays)(this.date,t))}subtractingWeeks(t){return new e((0,g.subWeeks)(this.date,t))}subtractingMonths(t){return new e((0,g.subMonths)(this.date,t))}subtractingYears(t){return new e((0,g.subYears)(this.date,t))}differenceInMilliseconds(e){return(0,g.differenceInMilliseconds)(this.date,e.date)}differenceInSeconds(e){return(0,g.differenceInSeconds)(this.date,e.date)}differenceInMinutes(e){return(0,g.differenceInMinutes)(this.date,e.date)}differenceInHours(e){return(0,g.differenceInHours)(this.date,e.date)}differenceInDays(e){return(0,g.differenceInDays)(this.date,e.date)}differenceInWeeks(e){return(0,g.differenceInWeeks)(this.date,e.date)}differenceInMonths(e){return(0,g.differenceInMonths)(this.date,e.date)}differenceInYears(e){return(0,g.differenceInYears)(this.date,e.date)}isEqualTo(e){return(0,g.isEqual)(this.date,e.date)}isBefore(e){return(0,g.isBefore)(this.date,e.date)}isAfter(e){return(0,g.isAfter)(this.date,e.date)}compareTo(e){return(0,g.compareAsc)(this.date,e.date)}isSameDayAs(e){return(0,g.isSameDay)(this.date,e.date)}startOfDay(){return new e((0,g.startOfDay)(this.date))}endOfDay(){return new e((0,g.endOfDay)(this.date))}startOfWeek(){return new e((0,g.startOfWeek)(this.date))}endOfWeek(){return new e((0,g.endOfWeek)(this.date))}startOfMonth(){return new e((0,g.startOfMonth)(this.date))}endOfMonth(){return new e((0,g.endOfMonth)(this.date))}startOfYear(){return new e((0,g.startOfYear)(this.date))}endOfYear(){return new e((0,g.endOfYear)(this.date))}get dayOfMonth(){return(0,g.getDate)(this.date)}get dayOfWeek(){return(0,g.getDay)(this.date)}get month(){return(0,g.getMonth)(this.date)}get year(){return(0,g.getYear)(this.date)}get hours(){return(0,g.getHours)(this.date)}get minutes(){return(0,g.getMinutes)(this.date)}get seconds(){return(0,g.getSeconds)(this.date)}settingDayOfMonth(t){return new e((0,g.setDate)(this.date,t))}settingDayOfWeek(t){return new e((0,g.setDay)(this.date,t))}settingMonth(t){return new e((0,g.setMonth)(this.date,t))}settingYear(t){return new e((0,g.setYear)(this.date,t))}settingHours(t){return new e((0,g.setHours)(this.date,t))}settingMinutes(t){return new e((0,g.setMinutes)(this.date,t))}settingSeconds(t){return new e((0,g.setSeconds)(this.date,t))}};let Xe=function(e){return e.ISO_DATE=`yyyy-MM-dd`,e.ISO_DATETIME=`yyyy-MM-dd'T'HH:mm:ssXXX`,e.MM_DD_YYYY=`MM/dd/yyyy`,e.FULL_MONTH_DAY_YEAR=`MMMM d, yyyy`,e.ABBR_MONTH_DAY_YEAR=`MMM d, yyyy`,e.RFC_3339=`yyyy-MM-dd'T'HH:mm:ss.SSSxxx`,e.ALT_RSS=`d MMM yyyy HH:mm:ss ZZZ`,e.RSS=`EEE, d MMM yyyy HH:mm:ss ZZZ`,e.HTTP_HEADER=`EEE, dd MMM yyyy HH:mm:ss zzz`,e.STANDARD=`EEE MMM dd HH:mm:ss Z yyyy`,e.EXTENDED=`eee dd-MMM-yyyy GG HH:mm:ss.SSS zzz`,e}({});var Ze=class e{utc;timeZone;constructor(e,t){this.timeZone=e,this.utc=t??new Date}static fromUtc(t,n){return new e(n,t)}static fromLocalIso(t,n){let r=(0,_.fromZonedTime)(t,n);return new e(n,r)}format(e,t){return(0,_.formatInTimeZone)(this.utc,this.timeZone,e,t)}toLocalIsoMinutes(e){return this.format(`yyyy-MM-dd'T'HH:mm`,e)}toLocalIsoSeconds(e){return this.format(`yyyy-MM-dd'T'HH:mm:ss`,e)}toISOString(){return this.utc.toISOString()}toUnixTimestamp(){return Math.floor(this.utc.getTime()/1e3)}toZonedDate(){return(0,_.toZonedTime)(this.utc,this.timeZone)}timezoneOffsetMs(e){return(0,_.getTimezoneOffset)(this.timeZone,e??this.utc)}},Qe=class{value;constructor([e,t]){if(e<-180||e>180)throw Error(`Longitude must be between -180 and 180.`);if(t<-90||t>90)throw Error(`Latitude must be between -90 and 90.`);this.value=[e,t]}get longitude(){return this.value[0]}get latitude(){return this.value[1]}toJSON(){return this.value}},$e=class{type=`Point`;coordinates;bbox;constructor(e,t){this.coordinates=e,this.bbox=t}toJSON(){return{type:this.type,coordinates:this.coordinates.toJSON(),...this.bbox&&{bbox:this.bbox}}}},et=class{type=`MultiPoint`;coordinates;bbox;constructor(e,t){this.coordinates=e,this.bbox=t}toJSON(){return{type:this.type,coordinates:this.coordinates.map(e=>e.toJSON()),...this.bbox&&{bbox:this.bbox}}}},tt=class{type=`LineString`;coordinates;bbox;constructor(e,t){this.coordinates=e,this.bbox=t}toJSON(){return{type:this.type,coordinates:this.coordinates.map(e=>e.toJSON()),...this.bbox&&{bbox:this.bbox}}}},nt=class{type=`MultiLineString`;coordinates;bbox;constructor(e,t){this.coordinates=e,this.bbox=t}toJSON(){return{type:this.type,coordinates:this.coordinates.map(e=>e.map(e=>e.toJSON())),...this.bbox&&{bbox:this.bbox}}}},rt=class{type=`Polygon`;coordinates;bbox;constructor(e,t){this.coordinates=e,this.bbox=t}toJSON(){return{type:this.type,coordinates:this.coordinates.map(e=>e.map(e=>e.toJSON())),...this.bbox&&{bbox:this.bbox}}}},it=class{type=`MultiPolygon`;coordinates;bbox;constructor(e,t){this.coordinates=e,this.bbox=t}toJSON(){return{type:this.type,coordinates:this.coordinates.map(e=>e.map(e=>e.map(e=>e.toJSON()))),...this.bbox&&{bbox:this.bbox}}}};let at=function(e){return e.Point=`Point`,e.MultiPoint=`MultiPoint`,e.LineString=`LineString`,e.MultiLineString=`MultiLineString`,e.Polygon=`Polygon`,e.MultiPolygon=`MultiPolygon`,e}({});function ot(e){return Error(`Invalid ObjectId value: ${String(e)}`)}var st=class e{value;constructor(e){if(e==null)throw ot(e);let t=e.trim();if(t.length===0)throw ot(e);this.value=t,Object.freeze(this)}get asString(){return this.value}equals(t){return this.value===e.from(t).value}compare(t){let n=e.from(t).value;return this.value===n?0:this.value<n?-1:1}hash(){return this.value}toJSON(){return this.value}toString(){return this.value}[Symbol.toPrimitive](){return this.value}static from(t){return t instanceof e?t:new e(t)}static isValid(e){return typeof e==`string`&&e.trim().length>0}static toValueSet(t){let n=new Set;for(let r of t)n.add(e.from(r).value);return n}},ct=class{day;intervals;constructor(e,t){this.day=e,this.intervals=t}toJSON(){return Y({day:this.day,intervals:this.intervals},{filterNull:!0,filterUndefined:!0,filterEmptyString:!0})}},lt=class{_milliseconds;_long;constructor(e,t){if(this._long=t?.long===!0,e==null)throw Error(`Invalid interval format: ${e}`);if(typeof e==`number`)this._milliseconds=e;else{let t=(0,v.default)(e);if(t===void 0)throw Error(`Invalid interval format: ${e}`);this._milliseconds=t}}get milliseconds(){return this._milliseconds}get seconds(){return Math.floor(this._milliseconds/1e3)}get minutes(){return Math.floor(this._milliseconds/6e4)}get hours(){return Math.floor(this._milliseconds/36e5)}get days(){return Math.floor(this._milliseconds/864e5)}get weeks(){return Math.floor(this._milliseconds/6048e5)}get formatted(){return(0,v.default)(this._milliseconds,{long:this._long})}toString(){return(0,v.default)(this._milliseconds,{long:this._long})}toObject(){return{milliseconds:this._milliseconds,seconds:this.seconds,minutes:this.minutes,hours:this.hours,days:this.days,weeks:this.weeks}}};let ut=function(e){return e.Byte=`B`,e.Kilobyte=`KB`,e.Megabyte=`MB`,e.Gigabyte=`GB`,e.Terabyte=`TB`,e}({}),dt=function(e){return e.Millimeter=`mm`,e.Centimeter=`cm`,e.Meter=`m`,e.Kilometer=`km`,e}({}),ft=function(e){return e.Milligram=`mg`,e.Gram=`g`,e.Kilogram=`kg`,e.Tonne=`t`,e}({});c(o({Address:()=>Ke,ByteUnit:()=>ut,Contacts:()=>qe,Coordinates:()=>Qe,DateFormat:()=>Xe,DateTime:()=>Ye,DistanceUnit:()=>dt,GeoJsonType:()=>at,LineString:()=>tt,MultiLineString:()=>nt,MultiPoint:()=>et,MultiPolygon:()=>it,ObjectId:()=>st,OpeningHour:()=>ct,Point:()=>$e,Polygon:()=>rt,TimeInterval:()=>lt,WeightUnit:()=>ft,ZonedDateTime:()=>Ze}),Je);function pt(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let Q=class{formatBytes(e,t){let{inputUnit:n=`B`,outputUnit:r=`auto`,decimals:i=1}=t??{},a=e=>e===`B`?1:e===`KB`?1024:e===`MB`?1048576:e===`GB`?1073741824:1099511627776,o=e*a(n),s=r===`auto`?(()=>{for(let e of[`TB`,`GB`,`MB`,`KB`])if(o/a(e)>=1)return e;return`B`})():r,c=o/a(s),l=10**i;return{value:Math.round(c*l)/l,unit:s,bytes:o}}};Q=pt([(0,ne.injectable)()],Q);var mt=class{assemble(e){e.bind(He.DI.Formatter.UnitController).to(Q)}};function ht(){return[new mt]}let gt=function(e){return e.Critical=`CRITICAL`,e.Serious=`SERIOUS`,e.Important=`IMPORTANT`,e.Notice=`NOTICE`,e.Routine=`ROUTINE`,e}({});var _t=class{options;instance;constructor(e){this.options=e,this.instance=this.makeInstance()}info(e,t){this.log(`info`,e,t)}debug(e,t){this.log(`debug`,e,t)}trace(e,t){this.log(`trace`,e,t)}warn(e,t){this.log(`warn`,e,t)}error(e,t){this.log(`error`,e,t)}fatal(e,t){this.log(`fatal`,e,t)}child(e){return this.instance.child(e)}log(e,t,n){this.instance[e]({msg:t,...this.formatLogOptions(n)})}formatLogOptions(e){return e?this.normalizeObject({flag:e.flag,details:this.formatUnknown(e.details),error:this.formatUnknown(e.error),metadata:this.formatUnknown(e.metadata)}):{}}formatUnknown(e){if(Ue(e)){let t={type:e.constructor.name,message:e.message};this.options.debug&&e.stack&&(t.stack=e.stack);for(let[n,r]of Object.entries(e))n in t||(t[n]=r);let n=this.normalizeObject(t);return Z(n)?void 0:n}if(Buffer.isBuffer(e))return`[Buffer]`;if(e&&typeof e.pipe==`function`)return`[Stream]`;if(X(e))try{let t=JSON.stringify(e);if(t===void 0)return;let n=JSON.parse(t);if(Array.isArray(n))return n.length>0?n:void 0;if(X(n)){let e=this.normalizeObject(n);return Z(e)?void 0:e}return n}catch{return{type:`NonSerializableObject`}}return Ge(e)?e:String(e)}normalizeObject(e){return Y(Object.fromEntries(Object.entries(e)),{filterNull:!0,filterUndefined:!0,filterEmptyString:!0,filterEmptyArray:!0,filterEmptyObject:!0})}makeInstance(){if(!this.options.enabled)return(0,y.default)({enabled:!1,timestamp:!0});let e=this.options.transports,t={level:this.makeGlobalLogLevel(e),enabled:!0,timestamp:!0,transport:{targets:this.makeTransportTargets(e)}};return(0,y.default)(t)}makeTransportTargets(e){if(e.filter(e=>e.type===`console`).length>1)throw Error(`[Logger] Multiple console transports are not supported.`);return e.map(e=>{switch(e.type){case`console`:return this.makeConsoleTransportTarget(e);case`file`:return this.makeFileTransportTarget(e)}})}makeConsoleTransportTarget(e){return{target:`pino-pretty`,level:this.makeTransportLevel(e.level),options:e.pretty}}makeFileTransportTarget(e){let t=this.makeTransportLevel(e.level),n=m.default.isAbsolute(e.path)?m.default.normalize(e.path):P(process.cwd(),e.path);return F(m.default.dirname(n)),{target:`pino/file`,level:t,options:{destination:n}}}makeTransportLevel(e){return this.options.debug?`trace`:e??`info`}makeGlobalLogLevel(e){if(this.options.debug)return`trace`;let t=e.at(0);if(!t)return`info`;let n={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},r=this.makeTransportLevel(t.level);for(let t of e.slice(1)){let e=this.makeTransportLevel(t.level);n[e]<n[r]&&(r=e)}return r}},vt=class{options;constructor(e){this.options=e}assemble(e){e.bind(He.DI.Logger).toConstantValue(new _t(this.options))}};function yt(e={}){let t=e.logger??{enabled:!1};return[...ht(),new vt(t)]}const bt=b.default.string().trim().min(1).transform(e=>{let{prefix:t,base:n}=St(e),r=Ct(n);return{original:e,prefix:t,base:n,kebab:wt(r),snake:Tt(r),camel:Et(r),pascal:Dt(r)}}),xt=b.default.looseObject({name:bt,version:b.default.string().trim().min(1),private:b.default.boolean().optional(),type:b.default.enum([`module`,`commonjs`]).optional(),dependencies:b.default.record(b.default.string(),b.default.string()).default({}),peerDependencies:b.default.record(b.default.string(),b.default.string()).default({}),devDependencies:b.default.record(b.default.string(),b.default.string()).default({})});function St(e){let t=/^@([^/]+)\/(.+)$/.exec(e);return t&&t[2]?{prefix:t[1],base:t[2]}:{base:e}}function Ct(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/[^a-zA-Z0-9]+/g,` `).trim().toLowerCase();return t?t.split(/\s+/):[]}function wt(e){return e.join(`-`)}function Tt(e){return e.join(`_`)}function Et(e){if(e.length===0)return``;let[t,...n]=e;return t+n.map($).join(``)}function Dt(e){return e.map($).join(``)}function $(e){return e.length===0?``:e.charAt(0).toUpperCase()+e.slice(1)}function Ot(e){let t,n;try{t=p.default.readFileSync(e,`utf8`)}catch(t){throw Error(`Failed to read package.json at ${e}`,{cause:t})}try{n=JSON.parse(t)}catch(t){throw Error(`Failed to parse package.json at ${e}`,{cause:t})}try{return xt.parse(n)}catch(t){throw Error(`Invalid package.json at ${e}`,{cause:t})}}exports.Console=me,exports.ENVIRONMENT_CONFIG_FILE=`environment.config.ts`,exports.LogFlag=gt,exports.LoggerImpl=_t,exports.PackageJSONSchema=xt,exports.PackageNameSchema=bt,exports.coreNodeAssembly=yt,exports.createDirectory=be,exports.createDirectoryAsync=we,exports.createFile=xe,exports.createFileAsync=Te,exports.defineConfig=_e,exports.defineConfiguration=ge,exports.defineEnvironments=De,exports.defineSource=Ae,exports.ensureDirectory=F,exports.ensureDirectoryAsync=I,exports.field=he,exports.isConfigDefinition=A,exports.isConfigurationBinding=M,exports.isConfigurationContract=ve,exports.isConfigurationField=j,exports.isConfigurationSource=z,exports.loadConfig=Ie,exports.loadPackageJSON=Ot,exports.makeDependencyBundlingPolicy=re,exports.removePath=ye,exports.removePathAsync=Ce,exports.resolveConfig=je,exports.resolveConfiguration=V,exports.resolveConfigurationBinding=H,exports.resolveEnvironment=L,exports.resolvePath=P;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));let c=require("node:module"),l=require("consola"),u=require("consola/utils"),d=require("node:fs");d=s(d,1);let f=require("node:path");f=s(f,1);let p=require("node:url"),m=require("@dotenvx/dotenvx");m=s(m,1);let ee=require("jiti"),h=require("pino");h=s(h,1);let g=require("zod");g=s(g,1);function te(e,t={}){let n=t.includePeers??!0,r=t.includeDependencies??!0,i=t.includeSubpaths??!0,a=t.includeNodeBuiltins??!0,o=t.allowPeerBundling??!1,s=Object.keys(e.peerDependencies??{}),c=Object.keys(e.dependencies??{}),l=v(t.bundle??[]),u=v(t.external??[]);se(u,l),le(l),o||ce(s,l);let d=new Set(l.map(b)),f=n?s.filter(e=>!d.has(e)):[],p=r?c.filter(e=>!d.has(e)):[];return{external:y([...a?ne():[],..._([...f,...p,...u],i)]),bundle:y(_(l,i))}}function ne(){let e=v(c.builtinModules.map(x)),t=e.map(e=>`node:${e}`);return y([...e,...t,/^node:/])}function _(e,t){return t?e.map(e=>re(e)):[...e]}function re(e){return ae(e)?e:RegExp(`^${oe(e)}(?:/.*)?$`)}function v(e){return Array.from(new Set(e))}function y(e){let t=new Set,n=[];for(let r of e){let e=ie(r);t.has(e)||(t.add(e),n.push(r))}return n}function ie(e){return typeof e==`string`?`string:${e}`:`regexp:${e.source}/${e.flags}`}function b(e){if(e.startsWith(`@`)){let[t,n]=e.split(`/`);return t&&n?`${t}/${n}`:e}let[t]=e.split(`/`);return t??e}function x(e){return e.startsWith(`node:`)?e.slice(5):e}function ae(e){return e.includes(`*`)||e.startsWith(`^`)||e.endsWith(`$`)}function oe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function se(e,t){let n=new Set(e.map(b)),r=t.filter(e=>n.has(b(e)));if(r.length!==0)throw Error(`Packages cannot be both external and bundled: ${r.join(`, `)}`)}function ce(e,t){let n=new Set(e),r=t.filter(e=>n.has(b(e)));if(r.length!==0)throw Error(`Peer dependencies must stay external and cannot be bundled by default: ${r.join(`, `)}`)}function le(e){let t=new Set(c.builtinModules.map(x)),n=e.filter(e=>ue(e,t));if(n.length!==0)throw Error(`Node.js built-in modules cannot be bundled: ${n.join(`, `)}`)}function ue(e,t){let n=x(e),[r]=n.split(`/`);return r?t.has(r):t.has(n)}const de=/\u001B\[[0-9;]*m/g;var fe=class{instance;constructor(e={}){this.instance=(0,l.createConsola)({level:e.enabled===!1?-999:999,formatOptions:{colors:!0,date:!1}})}title(e,t,n=[]){this.printPanel({title:`${e} ${t}`.trim(),renderedTitle:`${u.colors.cyan(u.colors.bold(e))}${t?` ${u.colors.dim(t)}`:``}`,rows:n,formatValue:u.colors.green})}panel(e,t,n){this.printPanel({title:n===void 0?e:`${e} ${n}`,renderedTitle:`${u.colors.cyan(u.colors.bold(e))}${n===void 0?``:` ${u.colors.green(String(n))}`}`,rows:t,formatValue:u.colors.dim})}step(e,t){return`${u.colors.cyan(e.padEnd(10,` `))}${t}`}duration(e){return e<1e3?`${e}ms`:`${(e/1e3).toFixed(2)}s`}emptyLine(){this.instance.log(``)}log(e,...t){this.instance.log(e,...t)}info(e,...t){this.instance.info(e,...t)}start(e,...t){this.instance.start(e,...t)}success(e,...t){this.instance.success(e,...t)}warn(e,...t){this.instance.warn(e,...t)}error(e,...t){this.instance.error(e,...t)}debug(e,...t){this.instance.debug(e,...t)}printPanel(e){this.instance.log(this.formatPanel(e))}formatPanel(e){let t=this.getPanelWidth(e);return[this.formatPanelTop(e.renderedTitle,t),...e.rows.map(n=>this.formatPanelRow(n,t,e.formatValue)),this.formatPanelBottom(t)].join(`
2
+ `)}formatPanelTop(e,t){let n=Math.max(1,t-this.visibleLength(e)-5);return`${u.colors.dim(`╭─`)} ${e} ${u.colors.dim(`─`.repeat(n))}${u.colors.dim(`╮`)}`}formatPanelBottom(e){return`${u.colors.dim(`╰`)}${u.colors.dim(`─`.repeat(e-2))}${u.colors.dim(`╯`)}`}formatPanelRow(e,t,n){let r=e.label.padEnd(14,` `),i=String(e.value),a=this.visibleLength(r)+this.visibleLength(i)+4,o=Math.max(0,t-a);return`${u.colors.dim(`│`)} ${u.colors.blue(r)}${n(i)}${` `.repeat(o)} ${u.colors.dim(`│`)}`}getPanelWidth(e){return Math.max(48,this.getTitleWidth(e),this.getRowsWidth(e.rows))}getTitleWidth(e){return this.visibleLength(e.title)+6}getRowsWidth(e){return Math.max(0,...e.map(e=>this.getRowWidth(e)))}getRowWidth(e){return 14+this.visibleLength(String(e.value))+4}visibleLength(e){return e.replace(de,``).length}};function S(e,t){if(f.default.isAbsolute(t))return f.default.normalize(t);let n;try{let t=new URL(e);if(t.protocol!==`file:`)throw Error(`Unsupported URL protocol "${t.protocol}"`);n=f.default.dirname((0,p.fileURLToPath)(t))}catch{n=e}return f.default.resolve(n,t)}function pe(e,t={}){let n=S(process.cwd(),e);if(!d.default.existsSync(n))return;let r=d.default.statSync(n),{recursive:i=!0,force:a=!0,cleanOnly:o=!1}=t;if(o&&r.isDirectory()){for(let e of d.default.readdirSync(n))d.default.rmSync(f.default.join(n,e),{recursive:i,force:a});return}if(o&&r.isFile()){d.default.truncateSync(n,0);return}d.default.rmSync(n,{recursive:r.isDirectory()?i:!1,force:a,maxRetries:3,retryDelay:100})}function C(e){let t=S(process.cwd(),e),n=d.default.existsSync(t)&&d.default.statSync(t).isDirectory()?t:f.default.dirname(t);if(!d.default.existsSync(n))throw Error(`Directory "${n}" does not exist.`);return t}function me(e){let t=S(process.cwd(),e);f.default.extname(e)&&console.warn(`[createDirectory] Warning: "${e}" looks like a file path.`);try{if(!d.default.existsSync(t))d.default.mkdirSync(t,{recursive:!0});else if(!d.default.statSync(t).isDirectory())throw Error(`"${t}" exists but is not a directory.`);return t}catch(e){throw Error(`Failed to create directory "${t}": ${e.message}`)}}function he(e,t=``){let n=S(process.cwd(),e);C(f.default.dirname(n));let r=ge(n);if(!r)d.default.writeFileSync(n,t,{encoding:`utf8`,flag:`w`});else{if(!r.isFile())throw Error(`"${n}" exists but is not a file.`);t&&d.default.writeFileSync(n,t,{encoding:`utf8`,flag:`a`})}return n}function ge(e){try{return d.default.statSync(e)}catch{return}}async function _e(e,t={}){let n=S(process.cwd(),e),r;try{r=await d.promises.stat(n)}catch(e){if((t.force??!0)&&e.code===`ENOENT`)return;throw e}let{recursive:i=!0,force:a=!0,cleanOnly:o=!1}=t;if(o&&r.isDirectory()){let e=await d.promises.readdir(n);for(let t of e)await d.promises.rm(f.default.join(n,t),{recursive:i,force:a});return}if(o&&r.isFile()){await d.promises.truncate(n,0);return}await d.promises.rm(n,{recursive:r.isDirectory()?i:!1,force:a,maxRetries:3,retryDelay:100})}async function w(e){let t=S(process.cwd(),e),n;try{n=await d.promises.stat(t)}catch{}let r=n?.isDirectory()?t:f.default.dirname(t);try{if(!(await d.promises.stat(r)).isDirectory())throw Error(`"${r}" exists but is not a directory.`)}catch(e){throw e.code===`ENOENT`?Error(`Directory "${r}" does not exist.`):e}return t}async function ve(e){let t=S(process.cwd(),e);f.default.extname(e)&&console.warn(`[createDirectory] Warning: "${e}" looks like a file path (has extension).`);try{let e;try{e=await d.promises.stat(t)}catch{}if(!e)await d.promises.mkdir(t,{recursive:!0});else if(!e.isDirectory())throw Error(`"${t}" exists but is not a directory.`);return t}catch(e){throw Error(`Failed to create directory "${t}": ${e.message}`)}}async function ye(e,t=``){let n=S(process.cwd(),e);await w(f.default.dirname(n));try{let e=await be(n);if(!e)await d.promises.writeFile(n,t,{encoding:`utf8`,flag:`w`});else{if(!e.isFile())throw Error(`"${n}" exists but is not a file.`);t&&await d.promises.writeFile(n,t,{encoding:`utf8`,flag:`a`})}return n}catch(e){throw Error(`Failed to create file "${n}": ${e.message}`)}}async function be(e){try{return await d.promises.stat(e)}catch(e){if(e.code===`ENOENT`)return;throw e}}function T(e){if(!D(e))throw Error(`Environment registry must be an object.`);let t=Object.entries(e);if(!t.length)throw Error(`At least one environment must be defined.`);for(let[e,n]of t)xe(e,n);return e}function E(e,t,n={}){if(!Object.prototype.hasOwnProperty.call(e,t))throw Error(`Environment "${t}" is not defined.`);let r=e[t];if(!r)throw Error(`Environment "${t}" is not defined.`);let i=S(n.baseDir?.trim()||process.cwd(),r.fileDir?.trim()||`.`);return{name:t,file:r.file?.trim()||void 0,fileDir:i}}function xe(e,t){if(!e.trim())throw Error(`Environment name must not be empty.`);if(!D(t))throw Error(`Environment definition must be an object for "${e}".`);if(t.file!==void 0&&(typeof t.file!=`string`||!t.file.trim()))throw Error(`Environment file must not be empty for "${e}".`);if(t.fileDir!==void 0&&(typeof t.fileDir!=`string`||!t.fileDir.trim()))throw Error(`Environment file directory must not be empty for "${e}".`)}function D(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}const O=Symbol.for(`buildplease.environment-configuration.field`),k=Symbol.for(`buildplease.environment-configuration.contract`),A=Symbol.for(`buildplease.environment-configuration.binding`),j=Symbol.for(`buildplease.environment-configuration.config`),Se={string(){return F((e,t)=>{if(typeof e!=`string`)throw Error(`${t} must be string.`);let n=e.trim();if(!n)throw Error(`${t} must not be empty.`);return n},{required:!0})},number(){return F((e,t)=>{let n=typeof e==`number`?e:Number(e);if(!Number.isFinite(n))throw Error(`${t} must be number.`);return n},{required:!0})},boolean(){return F((e,t)=>{if(typeof e==`boolean`)return e;if(typeof e==`string`){let t=e.trim().toLowerCase();if(t===`true`)return!0;if(t===`false`)return!1}throw Error(`${t} must be boolean.`)},{required:!0})},array(e){return F((t,n)=>{if(!Array.isArray(t))throw Error(`${n} must be array.`);return t.map((t,r)=>e.parse(t,`${n}[${r}]`))},{required:!0})},custom(){return F(e=>e,{required:!0})}};function Ce(e,t){let n=e.trim();if(!n)throw Error(`Configuration key must not be empty.`);let r=(e=>{let t={contract:r,input:e};return Object.defineProperty(t,A,{value:!0}),t});return Object.defineProperties(r,{[k]:{value:!0},key:{value:n},schema:{value:t}}),r}function we(e,t){let n={environments:T(e),input:t};return Object.defineProperty(n,j,{value:!0}),n}function M(e){return!!(e&&typeof e==`object`&&e[j]===!0)}function N(e){return!!(e&&typeof e==`object`&&e[O]===!0)}function Te(e){return typeof e==`function`&&e[k]===!0}function P(e){return!!(e&&typeof e==`object`&&e[A]===!0)}function F(e,t){let n={required:t.required,hasDefault:t.hasDefault??!1,defaultValue:t.defaultValue,parse:e,optional(){return F((t,n)=>{if(t!=null)return e(t,n)},{required:!1})},default(t){return F(e,{required:!1,hasDefault:!0,defaultValue:t})},map(n){let r=t.hasDefault&&t.defaultValue!==void 0?n(t.defaultValue):void 0;return F((t,r)=>n(e(t,r)),{required:t.required,hasDefault:t.hasDefault,defaultValue:r})}};return Object.defineProperty(n,O,{value:!0}),n}function I(e){return process.env[e]?.trim()||void 0}function Ee(){let e=I(`BUILDPLEASE_ENVIRONMENT`);if(!e)throw Error(`BuildPlease environment is not selected.`);return e}const L=Symbol.for(`buildplease.environment-configuration.source`);function De(e){return{env(e){return z(`env`,{name:e})},byEnvironment(e){return z(`by-environment`,{cases:e})},compute(e){return z(`compute`,{compute:e})},static(e){return z(`static`,{value:e})}}}function R(e){return!!(e&&typeof e==`object`&&e[L]===!0)}function z(e,t,n=[]){let r={kind:e,options:t,transforms:n,default(e){return z(`default`,{source:r,value:e})},map(r){return z(e,t,[...n,r])}};return Object.defineProperty(r,L,{value:!0}),r}async function Oe(e={}){return H(e)}async function ke(e={}){let t=Ee(),n=await H(e);try{let e=E(n.config.environments,t,{baseDir:(0,f.dirname)(n.configFilePath)});return Ne(e),{...n,environment:e}}catch(e){throw U(e)}}async function Ae(e,t){let n=q(t,`config`);return G(e.input,n,`config`)}async function B(e,t,n={}){let r=Pe(n);return W(e.schema,t,r,e.key)}async function V(e,t={}){return B(e.contract,e.input,t)}async function H(e){let t=je(e.dir);try{let e=S(t,`environment.config.ts`);if(!d.default.existsSync(e))throw Error(`Config file "${e}" does not exist.`);let n=await Me(t,e);if(!M(n))throw Error(`Environment config must be defined with defineConfig() (${e}).`);return{config:n,configFilePath:e,rootDir:t}}catch(e){throw U(e)}}function je(e){let t=e?S(process.cwd(),e):process.cwd();return C(t),t}async function Me(e,t){return(0,ee.createJiti)(e,{interopDefault:!0,extensions:[`.ts`],tsconfigPaths:!0}).import(t,{default:!0})}function Ne(e){if(!e.file)return;let t=S(e.fileDir,e.file);d.default.existsSync(t)&&m.default.config({path:t,overload:!1,quiet:!0})}function U(e){return Error(`Failed to load environment config: ${e instanceof Error?e.message:String(e)}`,{cause:e})}function Pe(e){return{buildMetadata:e.buildMetadata,environment:e.environment}}async function W(e,t,n,r){if(N(e))return Fe(e,t,n,r);let i=await G(t,n,r)??{};if(!Y(i))throw Error(`${r} must be object.`);let a={};for(let[t,o]of Object.entries(e))a[t]=await W(o,i[t],n,`${r}.${t}`);return a}async function Fe(e,t,n,r){let i=await G(t,n,r);if(i==null){if(e.hasDefault)return J(e.defaultValue);if(!e.required)return;throw Error(`Missing required configuration: ${r}`)}return e.parse(i,r)}async function G(e,t,n){if(R(e))return K(e,t,n);if(P(e))return V(e,t);if(Array.isArray(e))return Promise.all(e.map((e,r)=>G(e,t,`${n}[${r}]`)));if(Y(e)){let r={};for(let[i,a]of Object.entries(e))r[i]=await G(a,t,`${n}.${i}`);return r}return e}async function K(e,t,n){let r;switch(e.kind){case`env`:{let{name:t}=e.options;r=I(t);break}case`by-environment`:{let i=Ie(t,n),{cases:a}=e.options;if(!Object.prototype.hasOwnProperty.call(a,i.name))throw Error(`${n} has no value for environment "${i.name}".`);r=await G(a[i.name],t,n);break}case`compute`:{let i=q(t,n),{compute:a}=e.options;r=await a(i);break}case`static`:{let{value:t}=e.options;r=t;break}case`default`:{let{source:i,value:a}=e.options;r=await K(i,t,n)??J(a);break}}for(let t of e.transforms)r=await t(r);return r}function Ie(e,t){if(!e?.environment)throw Error(`${t} requires runtime environment.`);return e.environment}function q(e,t){if(!e?.environment)throw Error(`${t} requires runtime environment.`);if(!e.buildMetadata)throw Error(`${t} requires build metadata.`);return e}function J(e){if(Array.isArray(e))return e.map(e=>J(e));if(Y(e)){let t={};for(let[n,r]of Object.entries(e))t[n]=J(r);return t}return e}function Y(e){if(!e||typeof e!=`object`||Object.prototype.toString.call(e)!==`[object Object]`)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}let Le=function(e){return e.Critical=`CRITICAL`,e.Serious=`SERIOUS`,e.Important=`IMPORTANT`,e.Notice=`NOTICE`,e.Routine=`ROUTINE`,e}({});function Re(e){return e instanceof Error}function ze(e,t={}){if(e==null)return{};let{filterNull:n=!0,filterUndefined:r=!0,filterEmptyString:i=!1,filterEmptyObject:a=!1,filterEmptyArray:o=!1}=t;return Object.keys(e).reduce((s,c)=>{let l=e[c];return X(l)&&Object.getPrototypeOf(l)===null&&(l=void 0),Be(l)&&(l=ze(l,t)),n&&l===null||r&&l===void 0||i&&l===``||a&&Z(l)||o&&Array.isArray(l)&&l.length===0||(s[c]=l),s},{})}function X(e){return typeof e==`object`&&!!e}function Z(e){return X(e)&&Object.keys(e).length===0}function Be(e){return X(e)&&Object.getPrototypeOf(e)===Object.prototype}function Ve(e){return e==null||[`string`,`number`,`boolean`,`bigint`,`symbol`].includes(typeof e)}Array.prototype.isEmpty=function(){return this==null||this.length===0},String.prototype.capitalized=function(){let e=this==null?``:this.toString();return e.trim()?e.charAt(0).toUpperCase()+e.slice(1):``};var He=class{options;instance;constructor(e){this.options=e,this.instance=this.makeInstance()}info(e,t){this.log(`info`,e,t)}debug(e,t){this.log(`debug`,e,t)}trace(e,t){this.log(`trace`,e,t)}warn(e,t){this.log(`warn`,e,t)}error(e,t){this.log(`error`,e,t)}fatal(e,t){this.log(`fatal`,e,t)}child(e){return this.instance.child(e)}log(e,t,n){this.instance[e]({msg:t,...this.formatLogOptions(n)})}formatLogOptions(e){return e?this.normalizeObject({flag:e.flag,details:this.formatUnknown(e.details),error:this.formatUnknown(e.error),metadata:this.formatUnknown(e.metadata)}):{}}formatUnknown(e){if(Re(e)){let t={type:e.constructor.name,message:e.message};this.options.debug&&e.stack&&(t.stack=e.stack);for(let[n,r]of Object.entries(e))n in t||(t[n]=r);let n=this.normalizeObject(t);return Z(n)?void 0:n}if(Buffer.isBuffer(e))return`[Buffer]`;if(e&&typeof e.pipe==`function`)return`[Stream]`;if(X(e))try{let t=JSON.stringify(e);if(t===void 0)return;let n=JSON.parse(t);if(Array.isArray(n))return n.length>0?n:void 0;if(X(n)){let e=this.normalizeObject(n);return Z(e)?void 0:e}return n}catch{return{type:`NonSerializableObject`}}return Ve(e)?e:String(e)}normalizeObject(e){return ze(Object.fromEntries(Object.entries(e)),{filterNull:!0,filterUndefined:!0,filterEmptyString:!0,filterEmptyArray:!0,filterEmptyObject:!0})}makeInstance(){if(!this.options.enabled)return(0,h.default)({enabled:!1,timestamp:!0});let e=this.options.transports,t={level:this.makeGlobalLogLevel(e),enabled:!0,timestamp:!0,transport:{targets:this.makeTransportTargets(e)}};return(0,h.default)(t)}makeTransportTargets(e){if(e.filter(e=>e.type===`console`).length>1)throw Error(`[Logger] Multiple console transports are not supported.`);return e.map(e=>{switch(e.type){case`console`:return this.makeConsoleTransportTarget(e);case`file`:return this.makeFileTransportTarget(e)}})}makeConsoleTransportTarget(e){return{target:`pino-pretty`,level:this.makeTransportLevel(e.level),options:e.pretty}}makeFileTransportTarget(e){let t=this.makeTransportLevel(e.level),n=f.default.isAbsolute(e.path)?f.default.normalize(e.path):S(process.cwd(),e.path);return C(f.default.dirname(n)),{target:`pino/file`,level:t,options:{destination:n}}}makeTransportLevel(e){return this.options.debug?`trace`:e??`info`}makeGlobalLogLevel(e){if(this.options.debug)return`trace`;let t=e.at(0);if(!t)return`info`;let n={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},r=this.makeTransportLevel(t.level);for(let t of e.slice(1)){let e=this.makeTransportLevel(t.level);n[e]<n[r]&&(r=e)}return r}};const Q=g.default.string().trim().min(1).transform(e=>{let{prefix:t,base:n}=We(e),r=Ge(n);return{original:e,prefix:t,base:n,kebab:Ke(r),snake:qe(r),camel:Je(r),pascal:Ye(r)}}),Ue=g.default.looseObject({name:Q,version:g.default.string().trim().min(1),private:g.default.boolean().optional(),type:g.default.enum([`module`,`commonjs`]).optional(),dependencies:g.default.record(g.default.string(),g.default.string()).default({}),peerDependencies:g.default.record(g.default.string(),g.default.string()).default({}),devDependencies:g.default.record(g.default.string(),g.default.string()).default({})});function We(e){let t=/^@([^/]+)\/(.+)$/.exec(e);return t&&t[2]?{prefix:t[1],base:t[2]}:{base:e}}function Ge(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/[^a-zA-Z0-9]+/g,` `).trim().toLowerCase();return t?t.split(/\s+/):[]}function Ke(e){return e.join(`-`)}function qe(e){return e.join(`_`)}function Je(e){if(e.length===0)return``;let[t,...n]=e;return t+n.map($).join(``)}function Ye(e){return e.map($).join(``)}function $(e){return e.length===0?``:e.charAt(0).toUpperCase()+e.slice(1)}function Xe(e){let t,n;try{t=d.default.readFileSync(e,`utf8`)}catch(t){throw Error(`Failed to read package.json at ${e}`,{cause:t})}try{n=JSON.parse(t)}catch(t){throw Error(`Failed to parse package.json at ${e}`,{cause:t})}try{return Ue.parse(n)}catch(t){throw Error(`Invalid package.json at ${e}`,{cause:t})}}exports.Console=fe,exports.LogFlag=Le,exports.LoggerImpl=He,exports.PackageJSONSchema=Ue,exports.PackageNameSchema=Q,exports.createDirectory=me,exports.createDirectoryAsync=ve,exports.createFile=he,exports.createFileAsync=ye,exports.defineConfig=we,exports.defineConfiguration=Ce,exports.defineEnvironments=T,exports.defineSource=De,exports.ensureDirectory=C,exports.ensureDirectoryAsync=w,exports.field=Se,exports.isConfigDefinition=M,exports.isConfigurationBinding=P,exports.isConfigurationContract=Te,exports.isConfigurationField=N,exports.isConfigurationSource=R,exports.loadEnvironmentConfig=Oe,exports.loadPackageJSON=Xe,exports.loadSelectedEnvironmentConfig=ke,exports.makeDependencyBundlingPolicy=te,exports.removePath=pe,exports.removePathAsync=_e,exports.resolveConfig=Ae,exports.resolveConfiguration=B,exports.resolveConfigurationBinding=V,exports.resolveEnvironment=E,exports.resolvePath=S;
@@ -1,6 +1,5 @@
1
1
  import { Bindings, Level, Logger as Logger$1 } from "pino";
2
2
  import { PrettyOptions } from "pino-pretty";
3
- import { Container } from "inversify";
4
3
  import z from "zod";
5
4
  //#region src-node/bundling/dependency-bundling-policy.d.ts
6
5
  /**
@@ -197,12 +196,20 @@ declare class Console {
197
196
  //#endregion
198
197
  //#region src-node/environment-configuration/environment.d.ts
199
198
  interface EnvironmentDefinition {
200
- readonly file: string;
199
+ /**
200
+ * Optional dotenv file associated with this environment.
201
+ *
202
+ * When the environment is selected, BuildPlease loads this file if it exists.
203
+ * Missing files are ignored, values already present in `process.env` keep
204
+ * priority. Configuration resolution and defaults decide how missing values are handled.
205
+ */
206
+ readonly file?: string;
207
+ /** Directory containing `file`, resolved relative to `environment.config.ts`. */
201
208
  readonly fileDir?: string;
202
209
  }
203
210
  interface EnvironmentConfig<Name extends string = string> {
204
211
  readonly name: Name;
205
- readonly file: string;
212
+ readonly file?: string;
206
213
  readonly fileDir: string;
207
214
  }
208
215
  type EnvironmentRegistry = Record<string, EnvironmentDefinition>;
@@ -300,121 +307,31 @@ type RequiredSchemaKeys<Schema extends object> = { [Key in keyof Schema]-?: IsSc
300
307
  type OptionalSchemaKeys<Schema extends object> = { [Key in keyof Schema]-?: IsSchemaInputRequired<Schema[Key]> extends true ? never : Key; }[keyof Schema];
301
308
  //#endregion
302
309
  //#region src-node/environment-configuration/engine.d.ts
303
- interface ResolveConfigurationOptions {
304
- readonly buildMetadata?: BuildMetadata;
305
- readonly environment?: EnvironmentConfig;
306
- }
307
- declare function resolveConfig<Config extends ConfigDefinition<any>>(config: Config, context: ConfigurationResolveContext<keyof Config['environments'] & string>): Promise<InferConfig<Config>>;
308
- declare function resolveConfiguration<Output, Schema extends ConfigurationSchema>(contract: ConfigurationContract<Output, Schema>, input: ConfigurationInputFromSchema<Schema> | undefined, options?: ResolveConfigurationOptions): Promise<Output>;
309
- declare function resolveConfigurationBinding<Output>(binding: ConfigurationBinding<Output>, options?: ResolveConfigurationOptions): Promise<Output>;
310
- //#endregion
311
- //#region src-node/environment-configuration/loader.d.ts
312
- declare const ENVIRONMENT_CONFIG_FILE = "environment.config.ts";
313
- interface LoadConfigOptions {
310
+ interface LoadEnvironmentConfigOptions {
314
311
  readonly dir?: string;
315
- readonly config?: string;
316
- readonly environment?: string;
317
312
  }
318
313
  interface LoadedConfig<Config extends ConfigDefinition = ConfigDefinition> {
319
314
  readonly config: Config;
320
315
  readonly configFilePath: string;
321
316
  readonly rootDir: string;
322
- readonly environment?: EnvironmentConfigFromRegistry<Config['environments']>;
323
317
  }
324
318
  interface LoadedEnvironmentConfig<Config extends ConfigDefinition = ConfigDefinition> extends LoadedConfig<Config> {
325
319
  readonly environment: EnvironmentConfigFromRegistry<Config['environments']>;
326
320
  }
327
- declare function loadConfig<Config extends ConfigDefinition = ConfigDefinition>(options: LoadConfigOptions & {
328
- readonly environment: string;
329
- }): Promise<LoadedEnvironmentConfig<Config>>;
330
- declare function loadConfig<Config extends ConfigDefinition = ConfigDefinition>(options?: LoadConfigOptions): Promise<LoadedConfig<Config>>;
331
- //#endregion
332
- //#region src-node/logger/log-flag.d.ts
333
- declare enum LogFlag {
334
- Critical = "CRITICAL",
335
- Serious = "SERIOUS",
336
- Important = "IMPORTANT",
337
- Notice = "NOTICE",
338
- Routine = "ROUTINE"
339
- }
340
- //#endregion
341
- //#region src-node/logger/log-options.d.ts
342
- interface LogOptions {
343
- readonly flag?: LogFlag;
344
- readonly details?: unknown;
345
- readonly error?: unknown;
346
- readonly metadata?: unknown;
347
- }
348
- //#endregion
349
- //#region src-node/logger/logger-options.d.ts
350
- interface BaseLoggerTransportOptions {
351
- readonly level?: Level;
352
- }
353
- interface LoggerConsoleTransportOptions extends BaseLoggerTransportOptions {
354
- readonly type: 'console';
355
- readonly target: 'pino-pretty';
356
- readonly pretty?: PrettyOptions;
357
- }
358
- interface LoggerFileTransportOptions extends BaseLoggerTransportOptions {
359
- readonly type: 'file';
360
- readonly path: string;
361
- }
362
- type LoggerTransportOptions = LoggerConsoleTransportOptions | LoggerFileTransportOptions;
363
- type LoggerOptions = {
364
- readonly enabled: false;
365
- readonly debug?: boolean;
366
- readonly transports?: never;
367
- } | {
368
- readonly enabled: true;
369
- readonly debug?: boolean;
370
- readonly transports: readonly [LoggerTransportOptions, ...LoggerTransportOptions[]];
371
- };
372
- //#endregion
373
- //#region src-node/logger/logger.d.ts
374
- interface Logger {
375
- readonly instance: Logger$1;
376
- info(title: string, options?: LogOptions): void;
377
- debug(title: string, options?: LogOptions): void;
378
- trace(title: string, options?: LogOptions): void;
379
- warn(title: string, options?: LogOptions): void;
380
- error(title: string, options?: LogOptions): void;
381
- fatal(title: string, options?: LogOptions): void;
382
- child(bindings: Bindings): Logger$1;
383
- }
384
- declare class LoggerImpl implements Logger {
385
- private readonly options;
386
- readonly instance: Logger$1;
387
- constructor(options: LoggerOptions);
388
- info(title: string, options?: LogOptions): void;
389
- debug(title: string, options?: LogOptions): void;
390
- trace(title: string, options?: LogOptions): void;
391
- warn(title: string, options?: LogOptions): void;
392
- error(title: string, options?: LogOptions): void;
393
- fatal(title: string, options?: LogOptions): void;
394
- child(bindings: Bindings): Logger$1;
395
- private log;
396
- private formatLogOptions;
397
- private formatUnknown;
398
- private normalizeObject;
399
- private makeInstance;
400
- private makeTransportTargets;
401
- private makeConsoleTransportTarget;
402
- private makeFileTransportTarget;
403
- private makeTransportLevel;
404
- private makeGlobalLogLevel;
405
- }
406
- //#endregion
407
- //#region src/di/assembly.d.ts
408
- type AssemblyContainer = Container;
409
- interface Assembly {
410
- assemble(container: AssemblyContainer): void;
411
- }
412
- //#endregion
413
- //#region src-node/di/core-node-assembly.d.ts
414
- interface CoreNodeAssemblyOptions {
415
- readonly logger?: LoggerOptions;
321
+ /** Load the conventional environment.config.ts definition without selecting an environment. */
322
+ declare function loadEnvironmentConfig<Config extends ConfigDefinition = ConfigDefinition>(options?: LoadEnvironmentConfigOptions): Promise<LoadedConfig<Config>>;
323
+ /**
324
+ * Load environment.config.ts and resolve the environment selected for the
325
+ * current BuildPlease process tree.
326
+ */
327
+ declare function loadSelectedEnvironmentConfig<Config extends ConfigDefinition = ConfigDefinition>(options?: LoadEnvironmentConfigOptions): Promise<LoadedEnvironmentConfig<Config>>;
328
+ interface ResolveConfigurationOptions {
329
+ readonly buildMetadata?: BuildMetadata;
330
+ readonly environment?: EnvironmentConfig;
416
331
  }
417
- declare function coreNodeAssembly(options?: CoreNodeAssemblyOptions): Assembly[];
332
+ declare function resolveConfig<Config extends ConfigDefinition<any>>(config: Config, context: ConfigurationResolveContext<keyof Config['environments'] & string>): Promise<InferConfig<Config>>;
333
+ declare function resolveConfiguration<Output, Schema extends ConfigurationSchema>(contract: ConfigurationContract<Output, Schema>, input: ConfigurationInputFromSchema<Schema> | undefined, options?: ResolveConfigurationOptions): Promise<Output>;
334
+ declare function resolveConfigurationBinding<Output>(binding: ConfigurationBinding<Output>, options?: ResolveConfigurationOptions): Promise<Output>;
418
335
  //#endregion
419
336
  //#region src-node/file/file-sync.d.ts
420
337
  /**
@@ -538,6 +455,81 @@ declare function createDirectoryAsync(dirPath: string): Promise<string>;
538
455
  */
539
456
  declare function createFileAsync(filePath: string, content?: string): Promise<string>;
540
457
  //#endregion
458
+ //#region src-node/logger/log-flag.d.ts
459
+ declare enum LogFlag {
460
+ Critical = "CRITICAL",
461
+ Serious = "SERIOUS",
462
+ Important = "IMPORTANT",
463
+ Notice = "NOTICE",
464
+ Routine = "ROUTINE"
465
+ }
466
+ //#endregion
467
+ //#region src-node/logger/log-options.d.ts
468
+ interface LogOptions {
469
+ readonly flag?: LogFlag;
470
+ readonly details?: unknown;
471
+ readonly error?: unknown;
472
+ readonly metadata?: unknown;
473
+ }
474
+ //#endregion
475
+ //#region src-node/logger/logger-options.d.ts
476
+ interface BaseLoggerTransportOptions {
477
+ readonly level?: Level;
478
+ }
479
+ interface LoggerConsoleTransportOptions extends BaseLoggerTransportOptions {
480
+ readonly type: 'console';
481
+ readonly target: 'pino-pretty';
482
+ readonly pretty?: PrettyOptions;
483
+ }
484
+ interface LoggerFileTransportOptions extends BaseLoggerTransportOptions {
485
+ readonly type: 'file';
486
+ readonly path: string;
487
+ }
488
+ type LoggerTransportOptions = LoggerConsoleTransportOptions | LoggerFileTransportOptions;
489
+ type LoggerOptions = {
490
+ readonly enabled: false;
491
+ readonly debug?: boolean;
492
+ readonly transports?: never;
493
+ } | {
494
+ readonly enabled: true;
495
+ readonly debug?: boolean;
496
+ readonly transports: readonly [LoggerTransportOptions, ...LoggerTransportOptions[]];
497
+ };
498
+ //#endregion
499
+ //#region src-node/logger/logger.d.ts
500
+ interface Logger {
501
+ readonly instance: Logger$1;
502
+ info(title: string, options?: LogOptions): void;
503
+ debug(title: string, options?: LogOptions): void;
504
+ trace(title: string, options?: LogOptions): void;
505
+ warn(title: string, options?: LogOptions): void;
506
+ error(title: string, options?: LogOptions): void;
507
+ fatal(title: string, options?: LogOptions): void;
508
+ child(bindings: Bindings): Logger$1;
509
+ }
510
+ declare class LoggerImpl implements Logger {
511
+ private readonly options;
512
+ readonly instance: Logger$1;
513
+ constructor(options: LoggerOptions);
514
+ info(title: string, options?: LogOptions): void;
515
+ debug(title: string, options?: LogOptions): void;
516
+ trace(title: string, options?: LogOptions): void;
517
+ warn(title: string, options?: LogOptions): void;
518
+ error(title: string, options?: LogOptions): void;
519
+ fatal(title: string, options?: LogOptions): void;
520
+ child(bindings: Bindings): Logger$1;
521
+ private log;
522
+ private formatLogOptions;
523
+ private formatUnknown;
524
+ private normalizeObject;
525
+ private makeInstance;
526
+ private makeTransportTargets;
527
+ private makeConsoleTransportTarget;
528
+ private makeFileTransportTarget;
529
+ private makeTransportLevel;
530
+ private makeGlobalLogLevel;
531
+ }
532
+ //#endregion
541
533
  //#region src-node/package-json/package-json.d.ts
542
534
  interface PackageNameModel {
543
535
  readonly original: string;
@@ -582,4 +574,4 @@ declare const PackageJSONSchema: z.ZodObject<{
582
574
  */
583
575
  declare function loadPackageJSON(path: string): PackageJSONModel;
584
576
  //#endregion
585
- export { BaseLoggerTransportOptions, type BuildMetadata, type ConfigDefinition, type ConfigurationBinding, type ConfigurationContract, type ConfigurationField, type ConfigurationInputFromSchema, type ConfigurationResolveContext, type ConfigurationSchema, type ConfigurationSource, type ConfigurationSourceKind, type ConfigurationValueInput, Console, ConsoleOptions, ConsolePanelRow, CoreNodeAssemblyOptions, DependencyBundlingMatcher, DependencyBundlingPackageJSON, DependencyBundlingPolicy, ENVIRONMENT_CONFIG_FILE, type EnvironmentConfig, type EnvironmentConfigFromRegistry, type EnvironmentDefinition, type EnvironmentName, type EnvironmentRegistry, type InferConfig, type InferConfigValue, type InferConfiguration, type InferSchemaInput, type InferSchemaOutput, type LoadConfigOptions, type LoadedConfig, type LoadedEnvironmentConfig, LogFlag, LogOptions, Logger, LoggerConsoleTransportOptions, LoggerFileTransportOptions, LoggerImpl, LoggerOptions, LoggerTransportOptions, MakeDependencyBundlingPolicyOptions, PackageJSONModel, PackageJSONSchema, PackageNameModel, PackageNameSchema, type ResolveConfigurationOptions, type ResolveEnvironmentOptions, coreNodeAssembly, createDirectory, createDirectoryAsync, createFile, createFileAsync, defineConfig, defineConfiguration, defineEnvironments, defineSource, ensureDirectory, ensureDirectoryAsync, field, isConfigDefinition, isConfigurationBinding, isConfigurationContract, isConfigurationField, isConfigurationSource, loadConfig, loadPackageJSON, makeDependencyBundlingPolicy, removePath, removePathAsync, resolveConfig, resolveConfiguration, resolveConfigurationBinding, resolveEnvironment, resolvePath };
577
+ export { BaseLoggerTransportOptions, type BuildMetadata, type ConfigDefinition, type ConfigurationBinding, type ConfigurationContract, type ConfigurationField, type ConfigurationInputFromSchema, type ConfigurationResolveContext, type ConfigurationSchema, type ConfigurationSource, type ConfigurationSourceKind, type ConfigurationValueInput, Console, ConsoleOptions, ConsolePanelRow, DependencyBundlingMatcher, DependencyBundlingPackageJSON, DependencyBundlingPolicy, type EnvironmentConfig, type EnvironmentConfigFromRegistry, type EnvironmentDefinition, type EnvironmentName, type EnvironmentRegistry, type InferConfig, type InferConfigValue, type InferConfiguration, type InferSchemaInput, type InferSchemaOutput, type LoadEnvironmentConfigOptions, type LoadedConfig, type LoadedEnvironmentConfig, LogFlag, LogOptions, Logger, LoggerConsoleTransportOptions, LoggerFileTransportOptions, LoggerImpl, LoggerOptions, LoggerTransportOptions, MakeDependencyBundlingPolicyOptions, PackageJSONModel, PackageJSONSchema, PackageNameModel, PackageNameSchema, type ResolveConfigurationOptions, type ResolveEnvironmentOptions, createDirectory, createDirectoryAsync, createFile, createFileAsync, defineConfig, defineConfiguration, defineEnvironments, defineSource, ensureDirectory, ensureDirectoryAsync, field, isConfigDefinition, isConfigurationBinding, isConfigurationContract, isConfigurationField, isConfigurationSource, loadEnvironmentConfig, loadPackageJSON, loadSelectedEnvironmentConfig, makeDependencyBundlingPolicy, removePath, removePathAsync, resolveConfig, resolveConfiguration, resolveConfigurationBinding, resolveEnvironment, resolvePath };
@@ -1,4 +1,3 @@
1
- import { Container } from "inversify";
2
1
  import { Bindings, Level, Logger as Logger$1 } from "pino";
3
2
  import z from "zod";
4
3
  import { PrettyOptions } from "pino-pretty";
@@ -197,12 +196,20 @@ declare class Console {
197
196
  //#endregion
198
197
  //#region src-node/environment-configuration/environment.d.ts
199
198
  interface EnvironmentDefinition {
200
- readonly file: string;
199
+ /**
200
+ * Optional dotenv file associated with this environment.
201
+ *
202
+ * When the environment is selected, BuildPlease loads this file if it exists.
203
+ * Missing files are ignored, values already present in `process.env` keep
204
+ * priority. Configuration resolution and defaults decide how missing values are handled.
205
+ */
206
+ readonly file?: string;
207
+ /** Directory containing `file`, resolved relative to `environment.config.ts`. */
201
208
  readonly fileDir?: string;
202
209
  }
203
210
  interface EnvironmentConfig<Name extends string = string> {
204
211
  readonly name: Name;
205
- readonly file: string;
212
+ readonly file?: string;
206
213
  readonly fileDir: string;
207
214
  }
208
215
  type EnvironmentRegistry = Record<string, EnvironmentDefinition>;
@@ -300,121 +307,31 @@ type RequiredSchemaKeys<Schema extends object> = { [Key in keyof Schema]-?: IsSc
300
307
  type OptionalSchemaKeys<Schema extends object> = { [Key in keyof Schema]-?: IsSchemaInputRequired<Schema[Key]> extends true ? never : Key; }[keyof Schema];
301
308
  //#endregion
302
309
  //#region src-node/environment-configuration/engine.d.ts
303
- interface ResolveConfigurationOptions {
304
- readonly buildMetadata?: BuildMetadata;
305
- readonly environment?: EnvironmentConfig;
306
- }
307
- declare function resolveConfig<Config extends ConfigDefinition<any>>(config: Config, context: ConfigurationResolveContext<keyof Config['environments'] & string>): Promise<InferConfig<Config>>;
308
- declare function resolveConfiguration<Output, Schema extends ConfigurationSchema>(contract: ConfigurationContract<Output, Schema>, input: ConfigurationInputFromSchema<Schema> | undefined, options?: ResolveConfigurationOptions): Promise<Output>;
309
- declare function resolveConfigurationBinding<Output>(binding: ConfigurationBinding<Output>, options?: ResolveConfigurationOptions): Promise<Output>;
310
- //#endregion
311
- //#region src-node/environment-configuration/loader.d.ts
312
- declare const ENVIRONMENT_CONFIG_FILE = "environment.config.ts";
313
- interface LoadConfigOptions {
310
+ interface LoadEnvironmentConfigOptions {
314
311
  readonly dir?: string;
315
- readonly config?: string;
316
- readonly environment?: string;
317
312
  }
318
313
  interface LoadedConfig<Config extends ConfigDefinition = ConfigDefinition> {
319
314
  readonly config: Config;
320
315
  readonly configFilePath: string;
321
316
  readonly rootDir: string;
322
- readonly environment?: EnvironmentConfigFromRegistry<Config['environments']>;
323
317
  }
324
318
  interface LoadedEnvironmentConfig<Config extends ConfigDefinition = ConfigDefinition> extends LoadedConfig<Config> {
325
319
  readonly environment: EnvironmentConfigFromRegistry<Config['environments']>;
326
320
  }
327
- declare function loadConfig<Config extends ConfigDefinition = ConfigDefinition>(options: LoadConfigOptions & {
328
- readonly environment: string;
329
- }): Promise<LoadedEnvironmentConfig<Config>>;
330
- declare function loadConfig<Config extends ConfigDefinition = ConfigDefinition>(options?: LoadConfigOptions): Promise<LoadedConfig<Config>>;
331
- //#endregion
332
- //#region src-node/logger/log-flag.d.ts
333
- declare enum LogFlag {
334
- Critical = "CRITICAL",
335
- Serious = "SERIOUS",
336
- Important = "IMPORTANT",
337
- Notice = "NOTICE",
338
- Routine = "ROUTINE"
339
- }
340
- //#endregion
341
- //#region src-node/logger/log-options.d.ts
342
- interface LogOptions {
343
- readonly flag?: LogFlag;
344
- readonly details?: unknown;
345
- readonly error?: unknown;
346
- readonly metadata?: unknown;
347
- }
348
- //#endregion
349
- //#region src-node/logger/logger-options.d.ts
350
- interface BaseLoggerTransportOptions {
351
- readonly level?: Level;
352
- }
353
- interface LoggerConsoleTransportOptions extends BaseLoggerTransportOptions {
354
- readonly type: 'console';
355
- readonly target: 'pino-pretty';
356
- readonly pretty?: PrettyOptions;
357
- }
358
- interface LoggerFileTransportOptions extends BaseLoggerTransportOptions {
359
- readonly type: 'file';
360
- readonly path: string;
361
- }
362
- type LoggerTransportOptions = LoggerConsoleTransportOptions | LoggerFileTransportOptions;
363
- type LoggerOptions = {
364
- readonly enabled: false;
365
- readonly debug?: boolean;
366
- readonly transports?: never;
367
- } | {
368
- readonly enabled: true;
369
- readonly debug?: boolean;
370
- readonly transports: readonly [LoggerTransportOptions, ...LoggerTransportOptions[]];
371
- };
372
- //#endregion
373
- //#region src-node/logger/logger.d.ts
374
- interface Logger {
375
- readonly instance: Logger$1;
376
- info(title: string, options?: LogOptions): void;
377
- debug(title: string, options?: LogOptions): void;
378
- trace(title: string, options?: LogOptions): void;
379
- warn(title: string, options?: LogOptions): void;
380
- error(title: string, options?: LogOptions): void;
381
- fatal(title: string, options?: LogOptions): void;
382
- child(bindings: Bindings): Logger$1;
383
- }
384
- declare class LoggerImpl implements Logger {
385
- private readonly options;
386
- readonly instance: Logger$1;
387
- constructor(options: LoggerOptions);
388
- info(title: string, options?: LogOptions): void;
389
- debug(title: string, options?: LogOptions): void;
390
- trace(title: string, options?: LogOptions): void;
391
- warn(title: string, options?: LogOptions): void;
392
- error(title: string, options?: LogOptions): void;
393
- fatal(title: string, options?: LogOptions): void;
394
- child(bindings: Bindings): Logger$1;
395
- private log;
396
- private formatLogOptions;
397
- private formatUnknown;
398
- private normalizeObject;
399
- private makeInstance;
400
- private makeTransportTargets;
401
- private makeConsoleTransportTarget;
402
- private makeFileTransportTarget;
403
- private makeTransportLevel;
404
- private makeGlobalLogLevel;
405
- }
406
- //#endregion
407
- //#region src/di/assembly.d.ts
408
- type AssemblyContainer = Container;
409
- interface Assembly {
410
- assemble(container: AssemblyContainer): void;
411
- }
412
- //#endregion
413
- //#region src-node/di/core-node-assembly.d.ts
414
- interface CoreNodeAssemblyOptions {
415
- readonly logger?: LoggerOptions;
321
+ /** Load the conventional environment.config.ts definition without selecting an environment. */
322
+ declare function loadEnvironmentConfig<Config extends ConfigDefinition = ConfigDefinition>(options?: LoadEnvironmentConfigOptions): Promise<LoadedConfig<Config>>;
323
+ /**
324
+ * Load environment.config.ts and resolve the environment selected for the
325
+ * current BuildPlease process tree.
326
+ */
327
+ declare function loadSelectedEnvironmentConfig<Config extends ConfigDefinition = ConfigDefinition>(options?: LoadEnvironmentConfigOptions): Promise<LoadedEnvironmentConfig<Config>>;
328
+ interface ResolveConfigurationOptions {
329
+ readonly buildMetadata?: BuildMetadata;
330
+ readonly environment?: EnvironmentConfig;
416
331
  }
417
- declare function coreNodeAssembly(options?: CoreNodeAssemblyOptions): Assembly[];
332
+ declare function resolveConfig<Config extends ConfigDefinition<any>>(config: Config, context: ConfigurationResolveContext<keyof Config['environments'] & string>): Promise<InferConfig<Config>>;
333
+ declare function resolveConfiguration<Output, Schema extends ConfigurationSchema>(contract: ConfigurationContract<Output, Schema>, input: ConfigurationInputFromSchema<Schema> | undefined, options?: ResolveConfigurationOptions): Promise<Output>;
334
+ declare function resolveConfigurationBinding<Output>(binding: ConfigurationBinding<Output>, options?: ResolveConfigurationOptions): Promise<Output>;
418
335
  //#endregion
419
336
  //#region src-node/file/file-sync.d.ts
420
337
  /**
@@ -538,6 +455,81 @@ declare function createDirectoryAsync(dirPath: string): Promise<string>;
538
455
  */
539
456
  declare function createFileAsync(filePath: string, content?: string): Promise<string>;
540
457
  //#endregion
458
+ //#region src-node/logger/log-flag.d.ts
459
+ declare enum LogFlag {
460
+ Critical = "CRITICAL",
461
+ Serious = "SERIOUS",
462
+ Important = "IMPORTANT",
463
+ Notice = "NOTICE",
464
+ Routine = "ROUTINE"
465
+ }
466
+ //#endregion
467
+ //#region src-node/logger/log-options.d.ts
468
+ interface LogOptions {
469
+ readonly flag?: LogFlag;
470
+ readonly details?: unknown;
471
+ readonly error?: unknown;
472
+ readonly metadata?: unknown;
473
+ }
474
+ //#endregion
475
+ //#region src-node/logger/logger-options.d.ts
476
+ interface BaseLoggerTransportOptions {
477
+ readonly level?: Level;
478
+ }
479
+ interface LoggerConsoleTransportOptions extends BaseLoggerTransportOptions {
480
+ readonly type: 'console';
481
+ readonly target: 'pino-pretty';
482
+ readonly pretty?: PrettyOptions;
483
+ }
484
+ interface LoggerFileTransportOptions extends BaseLoggerTransportOptions {
485
+ readonly type: 'file';
486
+ readonly path: string;
487
+ }
488
+ type LoggerTransportOptions = LoggerConsoleTransportOptions | LoggerFileTransportOptions;
489
+ type LoggerOptions = {
490
+ readonly enabled: false;
491
+ readonly debug?: boolean;
492
+ readonly transports?: never;
493
+ } | {
494
+ readonly enabled: true;
495
+ readonly debug?: boolean;
496
+ readonly transports: readonly [LoggerTransportOptions, ...LoggerTransportOptions[]];
497
+ };
498
+ //#endregion
499
+ //#region src-node/logger/logger.d.ts
500
+ interface Logger {
501
+ readonly instance: Logger$1;
502
+ info(title: string, options?: LogOptions): void;
503
+ debug(title: string, options?: LogOptions): void;
504
+ trace(title: string, options?: LogOptions): void;
505
+ warn(title: string, options?: LogOptions): void;
506
+ error(title: string, options?: LogOptions): void;
507
+ fatal(title: string, options?: LogOptions): void;
508
+ child(bindings: Bindings): Logger$1;
509
+ }
510
+ declare class LoggerImpl implements Logger {
511
+ private readonly options;
512
+ readonly instance: Logger$1;
513
+ constructor(options: LoggerOptions);
514
+ info(title: string, options?: LogOptions): void;
515
+ debug(title: string, options?: LogOptions): void;
516
+ trace(title: string, options?: LogOptions): void;
517
+ warn(title: string, options?: LogOptions): void;
518
+ error(title: string, options?: LogOptions): void;
519
+ fatal(title: string, options?: LogOptions): void;
520
+ child(bindings: Bindings): Logger$1;
521
+ private log;
522
+ private formatLogOptions;
523
+ private formatUnknown;
524
+ private normalizeObject;
525
+ private makeInstance;
526
+ private makeTransportTargets;
527
+ private makeConsoleTransportTarget;
528
+ private makeFileTransportTarget;
529
+ private makeTransportLevel;
530
+ private makeGlobalLogLevel;
531
+ }
532
+ //#endregion
541
533
  //#region src-node/package-json/package-json.d.ts
542
534
  interface PackageNameModel {
543
535
  readonly original: string;
@@ -582,4 +574,4 @@ declare const PackageJSONSchema: z.ZodObject<{
582
574
  */
583
575
  declare function loadPackageJSON(path: string): PackageJSONModel;
584
576
  //#endregion
585
- export { BaseLoggerTransportOptions, type BuildMetadata, type ConfigDefinition, type ConfigurationBinding, type ConfigurationContract, type ConfigurationField, type ConfigurationInputFromSchema, type ConfigurationResolveContext, type ConfigurationSchema, type ConfigurationSource, type ConfigurationSourceKind, type ConfigurationValueInput, Console, ConsoleOptions, ConsolePanelRow, CoreNodeAssemblyOptions, DependencyBundlingMatcher, DependencyBundlingPackageJSON, DependencyBundlingPolicy, ENVIRONMENT_CONFIG_FILE, type EnvironmentConfig, type EnvironmentConfigFromRegistry, type EnvironmentDefinition, type EnvironmentName, type EnvironmentRegistry, type InferConfig, type InferConfigValue, type InferConfiguration, type InferSchemaInput, type InferSchemaOutput, type LoadConfigOptions, type LoadedConfig, type LoadedEnvironmentConfig, LogFlag, LogOptions, Logger, LoggerConsoleTransportOptions, LoggerFileTransportOptions, LoggerImpl, LoggerOptions, LoggerTransportOptions, MakeDependencyBundlingPolicyOptions, PackageJSONModel, PackageJSONSchema, PackageNameModel, PackageNameSchema, type ResolveConfigurationOptions, type ResolveEnvironmentOptions, coreNodeAssembly, createDirectory, createDirectoryAsync, createFile, createFileAsync, defineConfig, defineConfiguration, defineEnvironments, defineSource, ensureDirectory, ensureDirectoryAsync, field, isConfigDefinition, isConfigurationBinding, isConfigurationContract, isConfigurationField, isConfigurationSource, loadConfig, loadPackageJSON, makeDependencyBundlingPolicy, removePath, removePathAsync, resolveConfig, resolveConfiguration, resolveConfigurationBinding, resolveEnvironment, resolvePath };
577
+ export { BaseLoggerTransportOptions, type BuildMetadata, type ConfigDefinition, type ConfigurationBinding, type ConfigurationContract, type ConfigurationField, type ConfigurationInputFromSchema, type ConfigurationResolveContext, type ConfigurationSchema, type ConfigurationSource, type ConfigurationSourceKind, type ConfigurationValueInput, Console, ConsoleOptions, ConsolePanelRow, DependencyBundlingMatcher, DependencyBundlingPackageJSON, DependencyBundlingPolicy, type EnvironmentConfig, type EnvironmentConfigFromRegistry, type EnvironmentDefinition, type EnvironmentName, type EnvironmentRegistry, type InferConfig, type InferConfigValue, type InferConfiguration, type InferSchemaInput, type InferSchemaOutput, type LoadEnvironmentConfigOptions, type LoadedConfig, type LoadedEnvironmentConfig, LogFlag, LogOptions, Logger, LoggerConsoleTransportOptions, LoggerFileTransportOptions, LoggerImpl, LoggerOptions, LoggerTransportOptions, MakeDependencyBundlingPolicyOptions, PackageJSONModel, PackageJSONSchema, PackageNameModel, PackageNameSchema, type ResolveConfigurationOptions, type ResolveEnvironmentOptions, createDirectory, createDirectoryAsync, createFile, createFileAsync, defineConfig, defineConfiguration, defineEnvironments, defineSource, ensureDirectory, ensureDirectoryAsync, field, isConfigDefinition, isConfigurationBinding, isConfigurationContract, isConfigurationField, isConfigurationSource, loadEnvironmentConfig, loadPackageJSON, loadSelectedEnvironmentConfig, makeDependencyBundlingPolicy, removePath, removePathAsync, resolveConfig, resolveConfiguration, resolveConfigurationBinding, resolveEnvironment, resolvePath };
@@ -1,2 +1,2 @@
1
- import{builtinModules as e}from"node:module";import{createConsola as t}from"consola";import{colors as n}from"consola/utils";import r,{promises as i}from"node:fs";import a,{dirname as o}from"node:path";import{fileURLToPath as s}from"node:url";import c from"@dotenvx/dotenvx";import{createJiti as l}from"jiti";import{injectable as u}from"inversify";import{add as d,addDays as f,addHours as ee,addMilliseconds as te,addMinutes as ne,addMonths as re,addSeconds as ie,addWeeks as ae,addYears as oe,compareAsc as se,differenceInDays as ce,differenceInHours as le,differenceInMilliseconds as ue,differenceInMinutes as de,differenceInMonths as fe,differenceInSeconds as pe,differenceInWeeks as me,differenceInYears as he,endOfDay as ge,endOfMonth as _e,endOfWeek as ve,endOfYear as ye,format as be,formatISO as xe,fromUnixTime as Se,getDate as Ce,getDay as we,getHours as Te,getMinutes as Ee,getMonth as De,getSeconds as Oe,getUnixTime as ke,getYear as Ae,isAfter as je,isBefore as Me,isEqual as Ne,isSameDay as Pe,isValid as p,parseISO as Fe,setDate as Ie,setDay as Le,setHours as Re,setMinutes as ze,setMonth as Be,setSeconds as Ve,setYear as He,startOfDay as Ue,startOfMonth as We,startOfWeek as Ge,startOfYear as Ke,sub as qe,subDays as Je,subHours as Ye,subMilliseconds as Xe,subMinutes as Ze,subMonths as Qe,subSeconds as $e,subWeeks as et,subYears as tt}from"date-fns";import{formatInTimeZone as nt,fromZonedTime as rt,getTimezoneOffset as it,toZonedTime as at}from"date-fns-tz";import m from"ms";import h from"pino";import g from"zod";var _=Object.defineProperty,ot=Object.getOwnPropertyDescriptor,st=Object.getOwnPropertyNames,ct=Object.prototype.hasOwnProperty,v=(e,t)=>{let n={};for(var r in e)_(n,r,{get:e[r],enumerable:!0});return t||_(n,Symbol.toStringTag,{value:`Module`}),n},y=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=st(t),a=0,o=i.length,s;a<o;a++)s=i[a],!ct.call(e,s)&&s!==n&&_(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=ot(t,s))||r.enumerable});return e},b=(e,t,n)=>(y(e,t,`default`),n&&y(n,t,`default`));function lt(e,t={}){let n=t.includePeers??!0,r=t.includeDependencies??!0,i=t.includeSubpaths??!0,a=t.includeNodeBuiltins??!0,o=t.allowPeerBundling??!1,s=Object.keys(e.peerDependencies??{}),c=Object.keys(e.dependencies??{}),l=S(t.bundle??[]),u=S(t.external??[]);ht(u,l),_t(l),o||gt(s,l);let d=new Set(l.map(w)),f=n?s.filter(e=>!d.has(e)):[],ee=r?c.filter(e=>!d.has(e)):[];return{external:C([...a?ut():[],...x([...f,...ee,...u],i)]),bundle:C(x(l,i))}}function ut(){let t=S(e.map(T)),n=t.map(e=>`node:${e}`);return C([...t,...n,/^node:/])}function x(e,t){return t?e.map(e=>dt(e)):[...e]}function dt(e){return pt(e)?e:RegExp(`^${mt(e)}(?:/.*)?$`)}function S(e){return Array.from(new Set(e))}function C(e){let t=new Set,n=[];for(let r of e){let e=ft(r);t.has(e)||(t.add(e),n.push(r))}return n}function ft(e){return typeof e==`string`?`string:${e}`:`regexp:${e.source}/${e.flags}`}function w(e){if(e.startsWith(`@`)){let[t,n]=e.split(`/`);return t&&n?`${t}/${n}`:e}let[t]=e.split(`/`);return t??e}function T(e){return e.startsWith(`node:`)?e.slice(5):e}function pt(e){return e.includes(`*`)||e.startsWith(`^`)||e.endsWith(`$`)}function mt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function ht(e,t){let n=new Set(e.map(w)),r=t.filter(e=>n.has(w(e)));if(r.length!==0)throw Error(`Packages cannot be both external and bundled: ${r.join(`, `)}`)}function gt(e,t){let n=new Set(e),r=t.filter(e=>n.has(w(e)));if(r.length!==0)throw Error(`Peer dependencies must stay external and cannot be bundled by default: ${r.join(`, `)}`)}function _t(t){let n=new Set(e.map(T)),r=t.filter(e=>vt(e,n));if(r.length!==0)throw Error(`Node.js built-in modules cannot be bundled: ${r.join(`, `)}`)}function vt(e,t){let n=T(e),[r]=n.split(`/`);return r?t.has(r):t.has(n)}const yt=/\u001B\[[0-9;]*m/g;var bt=class{instance;constructor(e={}){this.instance=t({level:e.enabled===!1?-999:999,formatOptions:{colors:!0,date:!1}})}title(e,t,r=[]){this.printPanel({title:`${e} ${t}`.trim(),renderedTitle:`${n.cyan(n.bold(e))}${t?` ${n.dim(t)}`:``}`,rows:r,formatValue:n.green})}panel(e,t,r){this.printPanel({title:r===void 0?e:`${e} ${r}`,renderedTitle:`${n.cyan(n.bold(e))}${r===void 0?``:` ${n.green(String(r))}`}`,rows:t,formatValue:n.dim})}step(e,t){return`${n.cyan(e.padEnd(10,` `))}${t}`}duration(e){return e<1e3?`${e}ms`:`${(e/1e3).toFixed(2)}s`}emptyLine(){this.instance.log(``)}log(e,...t){this.instance.log(e,...t)}info(e,...t){this.instance.info(e,...t)}start(e,...t){this.instance.start(e,...t)}success(e,...t){this.instance.success(e,...t)}warn(e,...t){this.instance.warn(e,...t)}error(e,...t){this.instance.error(e,...t)}debug(e,...t){this.instance.debug(e,...t)}printPanel(e){this.instance.log(this.formatPanel(e))}formatPanel(e){let t=this.getPanelWidth(e);return[this.formatPanelTop(e.renderedTitle,t),...e.rows.map(n=>this.formatPanelRow(n,t,e.formatValue)),this.formatPanelBottom(t)].join(`
2
- `)}formatPanelTop(e,t){let r=Math.max(1,t-this.visibleLength(e)-5);return`${n.dim(`╭─`)} ${e} ${n.dim(`─`.repeat(r))}${n.dim(`╮`)}`}formatPanelBottom(e){return`${n.dim(`╰`)}${n.dim(`─`.repeat(e-2))}${n.dim(`╯`)}`}formatPanelRow(e,t,r){let i=e.label.padEnd(14,` `),a=String(e.value),o=this.visibleLength(i)+this.visibleLength(a)+4,s=Math.max(0,t-o);return`${n.dim(`│`)} ${n.blue(i)}${r(a)}${` `.repeat(s)} ${n.dim(`│`)}`}getPanelWidth(e){return Math.max(48,this.getTitleWidth(e),this.getRowsWidth(e.rows))}getTitleWidth(e){return this.visibleLength(e.title)+6}getRowsWidth(e){return Math.max(0,...e.map(e=>this.getRowWidth(e)))}getRowWidth(e){return 14+this.visibleLength(String(e.value))+4}visibleLength(e){return e.replace(yt,``).length}};const E=Symbol.for(`buildplease.environment-configuration.field`),D=Symbol.for(`buildplease.environment-configuration.contract`),O=Symbol.for(`buildplease.environment-configuration.binding`),xt=Symbol.for(`buildplease.environment-configuration.config`),St={string(){return A((e,t)=>{if(typeof e!=`string`)throw Error(`${t} must be string.`);let n=e.trim();if(!n)throw Error(`${t} must not be empty.`);return n},{required:!0})},number(){return A((e,t)=>{let n=typeof e==`number`?e:Number(e);if(!Number.isFinite(n))throw Error(`${t} must be number.`);return n},{required:!0})},boolean(){return A((e,t)=>{if(typeof e==`boolean`)return e;if(typeof e==`string`){let t=e.trim().toLowerCase();if(t===`true`)return!0;if(t===`false`)return!1}throw Error(`${t} must be boolean.`)},{required:!0})},array(e){return A((t,n)=>{if(!Array.isArray(t))throw Error(`${n} must be array.`);return t.map((t,r)=>e.parse(t,`${n}[${r}]`))},{required:!0})},custom(){return A(e=>e,{required:!0})}};function Ct(e,t){let n=e.trim();if(!n)throw Error(`Configuration key must not be empty.`);let r=(e=>{let t={contract:r,input:e};return Object.defineProperty(t,O,{value:!0}),t});return Object.defineProperties(r,{[D]:{value:!0},key:{value:n},schema:{value:t}}),r}function wt(e,t){let n={environments:e,input:t};return Object.defineProperty(n,xt,{value:!0}),n}function Tt(e){return!!(e&&typeof e==`object`&&e[xt]===!0)}function Et(e){return!!(e&&typeof e==`object`&&e[E]===!0)}function Dt(e){return typeof e==`function`&&e[D]===!0}function k(e){return!!(e&&typeof e==`object`&&e[O]===!0)}function A(e,t){let n={required:t.required,hasDefault:t.hasDefault??!1,defaultValue:t.defaultValue,parse:e,optional(){return A((t,n)=>{if(t!=null)return e(t,n)},{required:!1})},default(t){return A(e,{required:!1,hasDefault:!0,defaultValue:t})},map(n){let r=t.hasDefault&&t.defaultValue!==void 0?n(t.defaultValue):void 0;return A((t,r)=>n(e(t,r)),{required:t.required,hasDefault:t.hasDefault,defaultValue:r})}};return Object.defineProperty(n,E,{value:!0}),n}function j(e,t){if(a.isAbsolute(t))return a.normalize(t);let n;try{let t=new URL(e);if(t.protocol!==`file:`)throw Error(`Unsupported URL protocol "${t.protocol}"`);n=a.dirname(s(t))}catch{n=e}return a.resolve(n,t)}function Ot(e,t={}){let n=j(process.cwd(),e);if(!r.existsSync(n))return;let i=r.statSync(n),{recursive:o=!0,force:s=!0,cleanOnly:c=!1}=t;if(c&&i.isDirectory()){for(let e of r.readdirSync(n))r.rmSync(a.join(n,e),{recursive:o,force:s});return}if(c&&i.isFile()){r.truncateSync(n,0);return}r.rmSync(n,{recursive:i.isDirectory()?o:!1,force:s,maxRetries:3,retryDelay:100})}function M(e){let t=j(process.cwd(),e),n=r.existsSync(t)&&r.statSync(t).isDirectory()?t:a.dirname(t);if(!r.existsSync(n))throw Error(`Directory "${n}" does not exist.`);return t}function kt(e){let t=j(process.cwd(),e);a.extname(e)&&console.warn(`[createDirectory] Warning: "${e}" looks like a file path.`);try{if(!r.existsSync(t))r.mkdirSync(t,{recursive:!0});else if(!r.statSync(t).isDirectory())throw Error(`"${t}" exists but is not a directory.`);return t}catch(e){throw Error(`Failed to create directory "${t}": ${e.message}`)}}function At(e,t=``){let n=j(process.cwd(),e);M(a.dirname(n));let i=jt(n);if(!i)r.writeFileSync(n,t,{encoding:`utf8`,flag:`w`});else{if(!i.isFile())throw Error(`"${n}" exists but is not a file.`);t&&r.writeFileSync(n,t,{encoding:`utf8`,flag:`a`})}return n}function jt(e){try{return r.statSync(e)}catch{return}}async function Mt(e,t={}){let n=j(process.cwd(),e),r;try{r=await i.stat(n)}catch(e){if((t.force??!0)&&e.code===`ENOENT`)return;throw e}let{recursive:o=!0,force:s=!0,cleanOnly:c=!1}=t;if(c&&r.isDirectory()){let e=await i.readdir(n);for(let t of e)await i.rm(a.join(n,t),{recursive:o,force:s});return}if(c&&r.isFile()){await i.truncate(n,0);return}await i.rm(n,{recursive:r.isDirectory()?o:!1,force:s,maxRetries:3,retryDelay:100})}async function N(e){let t=j(process.cwd(),e),n;try{n=await i.stat(t)}catch{}let r=n?.isDirectory()?t:a.dirname(t);try{if(!(await i.stat(r)).isDirectory())throw Error(`"${r}" exists but is not a directory.`)}catch(e){throw e.code===`ENOENT`?Error(`Directory "${r}" does not exist.`):e}return t}async function Nt(e){let t=j(process.cwd(),e);a.extname(e)&&console.warn(`[createDirectory] Warning: "${e}" looks like a file path (has extension).`);try{let e;try{e=await i.stat(t)}catch{}if(!e)await i.mkdir(t,{recursive:!0});else if(!e.isDirectory())throw Error(`"${t}" exists but is not a directory.`);return t}catch(e){throw Error(`Failed to create directory "${t}": ${e.message}`)}}async function Pt(e,t=``){let n=j(process.cwd(),e);await N(a.dirname(n));try{let e=await Ft(n);if(!e)await i.writeFile(n,t,{encoding:`utf8`,flag:`w`});else{if(!e.isFile())throw Error(`"${n}" exists but is not a file.`);t&&await i.writeFile(n,t,{encoding:`utf8`,flag:`a`})}return n}catch(e){throw Error(`Failed to create file "${n}": ${e.message}`)}}async function Ft(e){try{return await i.stat(e)}catch(e){if(e.code===`ENOENT`)return;throw e}}function It(e){let t=Object.entries(e);if(!t.length)throw Error(`At least one environment must be defined.`);for(let[e,n]of t)Lt(e,n);return e}function P(e,t,n={}){let r=e[t];if(!r)throw Error(`Environment "${t}" is not defined.`);let i=j(n.baseDir?.trim()||process.cwd(),r.fileDir?.trim()||`.`);return{name:t,file:r.file.trim(),fileDir:i}}function Lt(e,t){if(!e.trim())throw Error(`Environment name must not be empty.`);if(typeof t.file!=`string`||!t.file.trim())throw Error(`Environment file must not be empty for "${e}".`)}function Rt(e){return process.env[e]?.trim()||void 0}const F=Symbol.for(`buildplease.environment-configuration.source`);function zt(e){return{env(e){return L(`env`,{name:e})},byEnvironment(e){return L(`by-environment`,{cases:e})},compute(e){return L(`compute`,{compute:e})},static(e){return L(`static`,{value:e})}}}function I(e){return!!(e&&typeof e==`object`&&e[F]===!0)}function L(e,t,n=[]){let r={kind:e,options:t,transforms:n,default(e){return L(`default`,{source:r,value:e})},map(r){return L(e,t,[...n,r])}};return Object.defineProperty(r,F,{value:!0}),r}async function Bt(e,t){let n=U(t,`config`);return V(e.input,n,`config`)}async function R(e,t,n={}){let r=Vt(n);return B(e.schema,t,r,e.key)}async function z(e,t={}){return R(e.contract,e.input,t)}function Vt(e){return{buildMetadata:e.buildMetadata,environment:e.environment}}async function B(e,t,n,r){if(Et(e))return Ht(e,t,n,r);let i=await V(t,n,r)??{};if(!G(i))throw Error(`${r} must be object.`);let a={};for(let[t,o]of Object.entries(e))a[t]=await B(o,i[t],n,`${r}.${t}`);return a}async function Ht(e,t,n,r){let i=await V(t,n,r);if(i==null){if(e.hasDefault)return W(e.defaultValue);if(!e.required)return;throw Error(`Missing required configuration: ${r}`)}return e.parse(i,r)}async function V(e,t,n){if(I(e))return H(e,t,n);if(k(e))return z(e,t);if(Array.isArray(e))return Promise.all(e.map((e,r)=>V(e,t,`${n}[${r}]`)));if(G(e)){let r={};for(let[i,a]of Object.entries(e))r[i]=await V(a,t,`${n}.${i}`);return r}return e}async function H(e,t,n){let r;switch(e.kind){case`env`:{let{name:t}=e.options;r=Rt(t);break}case`by-environment`:{let i=Ut(t,n),{cases:a}=e.options;if(!Object.prototype.hasOwnProperty.call(a,i.name))throw Error(`${n} has no value for environment "${i.name}".`);r=await V(a[i.name],t,n);break}case`compute`:{let i=U(t,n),{compute:a}=e.options;r=await a(i);break}case`static`:{let{value:t}=e.options;r=t;break}case`default`:{let{source:i,value:a}=e.options;r=await H(i,t,n)??W(a);break}}for(let t of e.transforms)r=await t(r);return r}function Ut(e,t){if(!e?.environment)throw Error(`${t} requires runtime environment.`);return e.environment}function U(e,t){if(!e?.environment)throw Error(`${t} requires runtime environment.`);if(!e.buildMetadata)throw Error(`${t} requires build metadata.`);return e}function W(e){if(Array.isArray(e))return e.map(e=>W(e));if(G(e)){let t={};for(let[n,r]of Object.entries(e))t[n]=W(r);return t}return e}function G(e){if(!e||typeof e!=`object`||Object.prototype.toString.call(e)!==`[object Object]`)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}const K=[`.ts`,`.mts`,`.cts`,`.js`,`.mjs`,`.cjs`],Wt=`environment.config.ts`;async function Gt(e={}){let t=Kt(e.dir);try{let n=qt(t,e.config??`environment.config.ts`),r=await Jt(t,n);if(!Tt(r))throw Error(`Environment config must be defined with defineConfig() (${n}).`);let i=r,a=e.environment?P(i.environments,e.environment,{baseDir:o(n)}):void 0;return a&&Yt(a),{config:i,configFilePath:n,rootDir:t,environment:a}}catch(e){throw Error(`Failed to load environment config: ${e instanceof Error?e.message:String(e)}`)}}function Kt(e){let t=e?j(process.cwd(),e):process.cwd();return M(t),t}function qt(e,t){let n=j(e,t);if(r.existsSync(n))return n;if(!K.some(e=>t.endsWith(e)))for(let e of K){let t=`${n}${e}`;if(r.existsSync(t))return t}throw Error(`Config file "${n}" does not exist.`)}async function Jt(e,t){return l(e,{interopDefault:!0,extensions:[...K],tsconfigPaths:!0}).import(t,{default:!0})}function Yt(e){let t=j(e.fileDir,e.file);if(!r.existsSync(t))throw Error(`Environment file "${t}" does not exist.`);c.config({path:t}),process.env.NODE_ENV=e.name}const q=`${{name:`buildplease`,displayName:`BuildPlease`,scope:`@buildplease`}.name}.Core.DI`,J={DI:{Formatter:{UnitController:Symbol.for(`${q}.Formatter.UnitController`)},Logger:Symbol.for(`${q}.Logger`)}};function Xt(e){return e instanceof Error}function Y(e,t={}){if(e==null)return{};let{filterNull:n=!0,filterUndefined:r=!0,filterEmptyString:i=!1,filterEmptyObject:a=!1,filterEmptyArray:o=!1}=t;return Object.keys(e).reduce((s,c)=>{let l=e[c];return X(l)&&Object.getPrototypeOf(l)===null&&(l=void 0),Zt(l)&&(l=Y(l,t)),n&&l===null||r&&l===void 0||i&&l===``||a&&Z(l)||o&&Array.isArray(l)&&l.length===0||(s[c]=l),s},{})}function X(e){return typeof e==`object`&&!!e}function Z(e){return X(e)&&Object.keys(e).length===0}function Zt(e){return X(e)&&Object.getPrototypeOf(e)===Object.prototype}function Qt(e){return e==null||[`string`,`number`,`boolean`,`bigint`,`symbol`].includes(typeof e)}Array.prototype.isEmpty=function(){return this==null||this.length===0},String.prototype.capitalized=function(){let e=this==null?``:this.toString();return e.trim()?e.charAt(0).toUpperCase()+e.slice(1):``};var $t=class{streetLine1;streetLine2;postalCode;state;city;country;countryCode;constructor(e){this.streetLine1=e.streetLine1,this.streetLine2=e.streetLine2,this.postalCode=e.postalCode,this.state=e.state,this.city=e.city,this.country=e.country,this.countryCode=e.countryCode}toJSON(){return Y({streetLine1:this.streetLine1,streetLine2:this.streetLine2,postalCode:this.postalCode,city:this.city,state:this.state,country:this.country,countryCode:this.countryCode},{filterNull:!0,filterUndefined:!0,filterEmptyString:!0})}formatted(){let e=(e,t)=>e.map(e=>e?.trim()).filter(e=>e&&e.length>0).join(t).trim(),t=this.streetLine1;return e([t,e([this.postalCode,this.city],` `),e([this.country],`, `)],`, `)}},en=class{email;fb;ig;phone;web;constructor({email:e,fb:t,ig:n,phone:r,web:i}){this.email=e,this.fb=t,this.ig=n,this.phone=r,this.web=i}toJSON(){return Y({email:this.email,fb:this.fb,ig:this.ig,phone:this.phone,web:this.web},{filterNull:!0,filterUndefined:!0,filterEmptyString:!0})}},tn=v({DateFormat:()=>an,DateTime:()=>rn});import*as nn from"date-fns";b(tn,nn);var rn=class e{date;constructor(e){if(!e){this.date=new Date;return}if(e instanceof Date){if(!p(e))throw Error(`Invalid date object`);this.date=e;return}let t=Fe(e);if(!p(t))throw Error(`Invalid date string`);this.date=t}static fromUnixTimestamp(t,n){return new e(Se(t,n))}static now(){return new e(new Date)}toJSON(){return this.toISOString()}toDate(){return this.date}toUnixTimestamp(){return ke(this.date)}getTime(){return this.date.getTime()}toISOString(){return xe(this.date)}format(e,t){return be(this.date,e,t)}addingDuration(t){return new e(d(this.date,t))}addingMilliseconds(t){return new e(te(this.date,t))}addingSeconds(t){return new e(ie(this.date,t))}addingMinutes(t){return new e(ne(this.date,t))}addingHours(t){return new e(ee(this.date,t))}addingDays(t){return new e(f(this.date,t))}addingWeeks(t){return new e(ae(this.date,t))}addingMonths(t){return new e(re(this.date,t))}addingYears(t){return new e(oe(this.date,t))}subtractingDuration(t){return new e(qe(this.date,t))}subtractingMilliseconds(t){return new e(Xe(this.date,t))}subtractingSeconds(t){return new e($e(this.date,t))}subtractingMinutes(t){return new e(Ze(this.date,t))}subtractingHours(t){return new e(Ye(this.date,t))}subtractingDays(t){return new e(Je(this.date,t))}subtractingWeeks(t){return new e(et(this.date,t))}subtractingMonths(t){return new e(Qe(this.date,t))}subtractingYears(t){return new e(tt(this.date,t))}differenceInMilliseconds(e){return ue(this.date,e.date)}differenceInSeconds(e){return pe(this.date,e.date)}differenceInMinutes(e){return de(this.date,e.date)}differenceInHours(e){return le(this.date,e.date)}differenceInDays(e){return ce(this.date,e.date)}differenceInWeeks(e){return me(this.date,e.date)}differenceInMonths(e){return fe(this.date,e.date)}differenceInYears(e){return he(this.date,e.date)}isEqualTo(e){return Ne(this.date,e.date)}isBefore(e){return Me(this.date,e.date)}isAfter(e){return je(this.date,e.date)}compareTo(e){return se(this.date,e.date)}isSameDayAs(e){return Pe(this.date,e.date)}startOfDay(){return new e(Ue(this.date))}endOfDay(){return new e(ge(this.date))}startOfWeek(){return new e(Ge(this.date))}endOfWeek(){return new e(ve(this.date))}startOfMonth(){return new e(We(this.date))}endOfMonth(){return new e(_e(this.date))}startOfYear(){return new e(Ke(this.date))}endOfYear(){return new e(ye(this.date))}get dayOfMonth(){return Ce(this.date)}get dayOfWeek(){return we(this.date)}get month(){return De(this.date)}get year(){return Ae(this.date)}get hours(){return Te(this.date)}get minutes(){return Ee(this.date)}get seconds(){return Oe(this.date)}settingDayOfMonth(t){return new e(Ie(this.date,t))}settingDayOfWeek(t){return new e(Le(this.date,t))}settingMonth(t){return new e(Be(this.date,t))}settingYear(t){return new e(He(this.date,t))}settingHours(t){return new e(Re(this.date,t))}settingMinutes(t){return new e(ze(this.date,t))}settingSeconds(t){return new e(Ve(this.date,t))}};let an=function(e){return e.ISO_DATE=`yyyy-MM-dd`,e.ISO_DATETIME=`yyyy-MM-dd'T'HH:mm:ssXXX`,e.MM_DD_YYYY=`MM/dd/yyyy`,e.FULL_MONTH_DAY_YEAR=`MMMM d, yyyy`,e.ABBR_MONTH_DAY_YEAR=`MMM d, yyyy`,e.RFC_3339=`yyyy-MM-dd'T'HH:mm:ss.SSSxxx`,e.ALT_RSS=`d MMM yyyy HH:mm:ss ZZZ`,e.RSS=`EEE, d MMM yyyy HH:mm:ss ZZZ`,e.HTTP_HEADER=`EEE, dd MMM yyyy HH:mm:ss zzz`,e.STANDARD=`EEE MMM dd HH:mm:ss Z yyyy`,e.EXTENDED=`eee dd-MMM-yyyy GG HH:mm:ss.SSS zzz`,e}({});var on=class e{utc;timeZone;constructor(e,t){this.timeZone=e,this.utc=t??new Date}static fromUtc(t,n){return new e(n,t)}static fromLocalIso(t,n){let r=rt(t,n);return new e(n,r)}format(e,t){return nt(this.utc,this.timeZone,e,t)}toLocalIsoMinutes(e){return this.format(`yyyy-MM-dd'T'HH:mm`,e)}toLocalIsoSeconds(e){return this.format(`yyyy-MM-dd'T'HH:mm:ss`,e)}toISOString(){return this.utc.toISOString()}toUnixTimestamp(){return Math.floor(this.utc.getTime()/1e3)}toZonedDate(){return at(this.utc,this.timeZone)}timezoneOffsetMs(e){return it(this.timeZone,e??this.utc)}},sn=class{value;constructor([e,t]){if(e<-180||e>180)throw Error(`Longitude must be between -180 and 180.`);if(t<-90||t>90)throw Error(`Latitude must be between -90 and 90.`);this.value=[e,t]}get longitude(){return this.value[0]}get latitude(){return this.value[1]}toJSON(){return this.value}},cn=class{type=`Point`;coordinates;bbox;constructor(e,t){this.coordinates=e,this.bbox=t}toJSON(){return{type:this.type,coordinates:this.coordinates.toJSON(),...this.bbox&&{bbox:this.bbox}}}},ln=class{type=`MultiPoint`;coordinates;bbox;constructor(e,t){this.coordinates=e,this.bbox=t}toJSON(){return{type:this.type,coordinates:this.coordinates.map(e=>e.toJSON()),...this.bbox&&{bbox:this.bbox}}}},un=class{type=`LineString`;coordinates;bbox;constructor(e,t){this.coordinates=e,this.bbox=t}toJSON(){return{type:this.type,coordinates:this.coordinates.map(e=>e.toJSON()),...this.bbox&&{bbox:this.bbox}}}},dn=class{type=`MultiLineString`;coordinates;bbox;constructor(e,t){this.coordinates=e,this.bbox=t}toJSON(){return{type:this.type,coordinates:this.coordinates.map(e=>e.map(e=>e.toJSON())),...this.bbox&&{bbox:this.bbox}}}},fn=class{type=`Polygon`;coordinates;bbox;constructor(e,t){this.coordinates=e,this.bbox=t}toJSON(){return{type:this.type,coordinates:this.coordinates.map(e=>e.map(e=>e.toJSON())),...this.bbox&&{bbox:this.bbox}}}},pn=class{type=`MultiPolygon`;coordinates;bbox;constructor(e,t){this.coordinates=e,this.bbox=t}toJSON(){return{type:this.type,coordinates:this.coordinates.map(e=>e.map(e=>e.map(e=>e.toJSON()))),...this.bbox&&{bbox:this.bbox}}}};let mn=function(e){return e.Point=`Point`,e.MultiPoint=`MultiPoint`,e.LineString=`LineString`,e.MultiLineString=`MultiLineString`,e.Polygon=`Polygon`,e.MultiPolygon=`MultiPolygon`,e}({});function hn(e){return Error(`Invalid ObjectId value: ${String(e)}`)}var gn=class e{value;constructor(e){if(e==null)throw hn(e);let t=e.trim();if(t.length===0)throw hn(e);this.value=t,Object.freeze(this)}get asString(){return this.value}equals(t){return this.value===e.from(t).value}compare(t){let n=e.from(t).value;return this.value===n?0:this.value<n?-1:1}hash(){return this.value}toJSON(){return this.value}toString(){return this.value}[Symbol.toPrimitive](){return this.value}static from(t){return t instanceof e?t:new e(t)}static isValid(e){return typeof e==`string`&&e.trim().length>0}static toValueSet(t){let n=new Set;for(let r of t)n.add(e.from(r).value);return n}},_n=class{day;intervals;constructor(e,t){this.day=e,this.intervals=t}toJSON(){return Y({day:this.day,intervals:this.intervals},{filterNull:!0,filterUndefined:!0,filterEmptyString:!0})}},vn=class{_milliseconds;_long;constructor(e,t){if(this._long=t?.long===!0,e==null)throw Error(`Invalid interval format: ${e}`);if(typeof e==`number`)this._milliseconds=e;else{let t=m(e);if(t===void 0)throw Error(`Invalid interval format: ${e}`);this._milliseconds=t}}get milliseconds(){return this._milliseconds}get seconds(){return Math.floor(this._milliseconds/1e3)}get minutes(){return Math.floor(this._milliseconds/6e4)}get hours(){return Math.floor(this._milliseconds/36e5)}get days(){return Math.floor(this._milliseconds/864e5)}get weeks(){return Math.floor(this._milliseconds/6048e5)}get formatted(){return m(this._milliseconds,{long:this._long})}toString(){return m(this._milliseconds,{long:this._long})}toObject(){return{milliseconds:this._milliseconds,seconds:this.seconds,minutes:this.minutes,hours:this.hours,days:this.days,weeks:this.weeks}}};let yn=function(e){return e.Byte=`B`,e.Kilobyte=`KB`,e.Megabyte=`MB`,e.Gigabyte=`GB`,e.Terabyte=`TB`,e}({}),bn=function(e){return e.Millimeter=`mm`,e.Centimeter=`cm`,e.Meter=`m`,e.Kilometer=`km`,e}({}),xn=function(e){return e.Milligram=`mg`,e.Gram=`g`,e.Kilogram=`kg`,e.Tonne=`t`,e}({});b(v({Address:()=>$t,ByteUnit:()=>yn,Contacts:()=>en,Coordinates:()=>sn,DateFormat:()=>an,DateTime:()=>rn,DistanceUnit:()=>bn,GeoJsonType:()=>mn,LineString:()=>un,MultiLineString:()=>dn,MultiPoint:()=>ln,MultiPolygon:()=>pn,ObjectId:()=>gn,OpeningHour:()=>_n,Point:()=>cn,Polygon:()=>fn,TimeInterval:()=>vn,WeightUnit:()=>xn,ZonedDateTime:()=>on}),tn);function Sn(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let Q=class{formatBytes(e,t){let{inputUnit:n=`B`,outputUnit:r=`auto`,decimals:i=1}=t??{},a=e=>e===`B`?1:e===`KB`?1024:e===`MB`?1048576:e===`GB`?1073741824:1099511627776,o=e*a(n),s=r===`auto`?(()=>{for(let e of[`TB`,`GB`,`MB`,`KB`])if(o/a(e)>=1)return e;return`B`})():r,c=o/a(s),l=10**i;return{value:Math.round(c*l)/l,unit:s,bytes:o}}};Q=Sn([u()],Q);var Cn=class{assemble(e){e.bind(J.DI.Formatter.UnitController).to(Q)}};function wn(){return[new Cn]}let Tn=function(e){return e.Critical=`CRITICAL`,e.Serious=`SERIOUS`,e.Important=`IMPORTANT`,e.Notice=`NOTICE`,e.Routine=`ROUTINE`,e}({});var En=class{options;instance;constructor(e){this.options=e,this.instance=this.makeInstance()}info(e,t){this.log(`info`,e,t)}debug(e,t){this.log(`debug`,e,t)}trace(e,t){this.log(`trace`,e,t)}warn(e,t){this.log(`warn`,e,t)}error(e,t){this.log(`error`,e,t)}fatal(e,t){this.log(`fatal`,e,t)}child(e){return this.instance.child(e)}log(e,t,n){this.instance[e]({msg:t,...this.formatLogOptions(n)})}formatLogOptions(e){return e?this.normalizeObject({flag:e.flag,details:this.formatUnknown(e.details),error:this.formatUnknown(e.error),metadata:this.formatUnknown(e.metadata)}):{}}formatUnknown(e){if(Xt(e)){let t={type:e.constructor.name,message:e.message};this.options.debug&&e.stack&&(t.stack=e.stack);for(let[n,r]of Object.entries(e))n in t||(t[n]=r);let n=this.normalizeObject(t);return Z(n)?void 0:n}if(Buffer.isBuffer(e))return`[Buffer]`;if(e&&typeof e.pipe==`function`)return`[Stream]`;if(X(e))try{let t=JSON.stringify(e);if(t===void 0)return;let n=JSON.parse(t);if(Array.isArray(n))return n.length>0?n:void 0;if(X(n)){let e=this.normalizeObject(n);return Z(e)?void 0:e}return n}catch{return{type:`NonSerializableObject`}}return Qt(e)?e:String(e)}normalizeObject(e){return Y(Object.fromEntries(Object.entries(e)),{filterNull:!0,filterUndefined:!0,filterEmptyString:!0,filterEmptyArray:!0,filterEmptyObject:!0})}makeInstance(){if(!this.options.enabled)return h({enabled:!1,timestamp:!0});let e=this.options.transports,t={level:this.makeGlobalLogLevel(e),enabled:!0,timestamp:!0,transport:{targets:this.makeTransportTargets(e)}};return h(t)}makeTransportTargets(e){if(e.filter(e=>e.type===`console`).length>1)throw Error(`[Logger] Multiple console transports are not supported.`);return e.map(e=>{switch(e.type){case`console`:return this.makeConsoleTransportTarget(e);case`file`:return this.makeFileTransportTarget(e)}})}makeConsoleTransportTarget(e){return{target:`pino-pretty`,level:this.makeTransportLevel(e.level),options:e.pretty}}makeFileTransportTarget(e){let t=this.makeTransportLevel(e.level),n=a.isAbsolute(e.path)?a.normalize(e.path):j(process.cwd(),e.path);return M(a.dirname(n)),{target:`pino/file`,level:t,options:{destination:n}}}makeTransportLevel(e){return this.options.debug?`trace`:e??`info`}makeGlobalLogLevel(e){if(this.options.debug)return`trace`;let t=e.at(0);if(!t)return`info`;let n={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},r=this.makeTransportLevel(t.level);for(let t of e.slice(1)){let e=this.makeTransportLevel(t.level);n[e]<n[r]&&(r=e)}return r}},Dn=class{options;constructor(e){this.options=e}assemble(e){e.bind(J.DI.Logger).toConstantValue(new En(this.options))}};function On(e={}){let t=e.logger??{enabled:!1};return[...wn(),new Dn(t)]}const kn=g.string().trim().min(1).transform(e=>{let{prefix:t,base:n}=An(e),r=jn(n);return{original:e,prefix:t,base:n,kebab:Mn(r),snake:Nn(r),camel:Pn(r),pascal:Fn(r)}}),$=g.looseObject({name:kn,version:g.string().trim().min(1),private:g.boolean().optional(),type:g.enum([`module`,`commonjs`]).optional(),dependencies:g.record(g.string(),g.string()).default({}),peerDependencies:g.record(g.string(),g.string()).default({}),devDependencies:g.record(g.string(),g.string()).default({})});function An(e){let t=/^@([^/]+)\/(.+)$/.exec(e);return t&&t[2]?{prefix:t[1],base:t[2]}:{base:e}}function jn(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/[^a-zA-Z0-9]+/g,` `).trim().toLowerCase();return t?t.split(/\s+/):[]}function Mn(e){return e.join(`-`)}function Nn(e){return e.join(`_`)}function Pn(e){if(e.length===0)return``;let[t,...n]=e;return t+n.map(In).join(``)}function Fn(e){return e.map(In).join(``)}function In(e){return e.length===0?``:e.charAt(0).toUpperCase()+e.slice(1)}function Ln(e){let t,n;try{t=r.readFileSync(e,`utf8`)}catch(t){throw Error(`Failed to read package.json at ${e}`,{cause:t})}try{n=JSON.parse(t)}catch(t){throw Error(`Failed to parse package.json at ${e}`,{cause:t})}try{return $.parse(n)}catch(t){throw Error(`Invalid package.json at ${e}`,{cause:t})}}export{bt as Console,Wt as ENVIRONMENT_CONFIG_FILE,Tn as LogFlag,En as LoggerImpl,$ as PackageJSONSchema,kn as PackageNameSchema,On as coreNodeAssembly,kt as createDirectory,Nt as createDirectoryAsync,At as createFile,Pt as createFileAsync,wt as defineConfig,Ct as defineConfiguration,It as defineEnvironments,zt as defineSource,M as ensureDirectory,N as ensureDirectoryAsync,St as field,Tt as isConfigDefinition,k as isConfigurationBinding,Dt as isConfigurationContract,Et as isConfigurationField,I as isConfigurationSource,Gt as loadConfig,Ln as loadPackageJSON,lt as makeDependencyBundlingPolicy,Ot as removePath,Mt as removePathAsync,Bt as resolveConfig,R as resolveConfiguration,z as resolveConfigurationBinding,P as resolveEnvironment,j as resolvePath};
1
+ import{builtinModules as e}from"node:module";import{createConsola as t}from"consola";import{colors as n}from"consola/utils";import r,{promises as i}from"node:fs";import a,{dirname as o}from"node:path";import{fileURLToPath as s}from"node:url";import c from"@dotenvx/dotenvx";import{createJiti as l}from"jiti";import u from"pino";import d from"zod";function f(e,t={}){let n=t.includePeers??!0,r=t.includeDependencies??!0,i=t.includeSubpaths??!0,a=t.includeNodeBuiltins??!0,o=t.allowPeerBundling??!1,s=Object.keys(e.peerDependencies??{}),c=Object.keys(e.dependencies??{}),l=h(t.bundle??[]),u=h(t.external??[]);ie(u,l),oe(l),o||ae(s,l);let d=new Set(l.map(_)),f=n?s.filter(e=>!d.has(e)):[],m=r?c.filter(e=>!d.has(e)):[];return{external:g([...a?ee():[],...p([...f,...m,...u],i)]),bundle:g(p(l,i))}}function ee(){let t=h(e.map(v)),n=t.map(e=>`node:${e}`);return g([...t,...n,/^node:/])}function p(e,t){return t?e.map(e=>m(e)):[...e]}function m(e){return ne(e)?e:RegExp(`^${re(e)}(?:/.*)?$`)}function h(e){return Array.from(new Set(e))}function g(e){let t=new Set,n=[];for(let r of e){let e=te(r);t.has(e)||(t.add(e),n.push(r))}return n}function te(e){return typeof e==`string`?`string:${e}`:`regexp:${e.source}/${e.flags}`}function _(e){if(e.startsWith(`@`)){let[t,n]=e.split(`/`);return t&&n?`${t}/${n}`:e}let[t]=e.split(`/`);return t??e}function v(e){return e.startsWith(`node:`)?e.slice(5):e}function ne(e){return e.includes(`*`)||e.startsWith(`^`)||e.endsWith(`$`)}function re(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function ie(e,t){let n=new Set(e.map(_)),r=t.filter(e=>n.has(_(e)));if(r.length!==0)throw Error(`Packages cannot be both external and bundled: ${r.join(`, `)}`)}function ae(e,t){let n=new Set(e),r=t.filter(e=>n.has(_(e)));if(r.length!==0)throw Error(`Peer dependencies must stay external and cannot be bundled by default: ${r.join(`, `)}`)}function oe(t){let n=new Set(e.map(v)),r=t.filter(e=>se(e,n));if(r.length!==0)throw Error(`Node.js built-in modules cannot be bundled: ${r.join(`, `)}`)}function se(e,t){let n=v(e),[r]=n.split(`/`);return r?t.has(r):t.has(n)}const ce=/\u001B\[[0-9;]*m/g;var le=class{instance;constructor(e={}){this.instance=t({level:e.enabled===!1?-999:999,formatOptions:{colors:!0,date:!1}})}title(e,t,r=[]){this.printPanel({title:`${e} ${t}`.trim(),renderedTitle:`${n.cyan(n.bold(e))}${t?` ${n.dim(t)}`:``}`,rows:r,formatValue:n.green})}panel(e,t,r){this.printPanel({title:r===void 0?e:`${e} ${r}`,renderedTitle:`${n.cyan(n.bold(e))}${r===void 0?``:` ${n.green(String(r))}`}`,rows:t,formatValue:n.dim})}step(e,t){return`${n.cyan(e.padEnd(10,` `))}${t}`}duration(e){return e<1e3?`${e}ms`:`${(e/1e3).toFixed(2)}s`}emptyLine(){this.instance.log(``)}log(e,...t){this.instance.log(e,...t)}info(e,...t){this.instance.info(e,...t)}start(e,...t){this.instance.start(e,...t)}success(e,...t){this.instance.success(e,...t)}warn(e,...t){this.instance.warn(e,...t)}error(e,...t){this.instance.error(e,...t)}debug(e,...t){this.instance.debug(e,...t)}printPanel(e){this.instance.log(this.formatPanel(e))}formatPanel(e){let t=this.getPanelWidth(e);return[this.formatPanelTop(e.renderedTitle,t),...e.rows.map(n=>this.formatPanelRow(n,t,e.formatValue)),this.formatPanelBottom(t)].join(`
2
+ `)}formatPanelTop(e,t){let r=Math.max(1,t-this.visibleLength(e)-5);return`${n.dim(`╭─`)} ${e} ${n.dim(`─`.repeat(r))}${n.dim(`╮`)}`}formatPanelBottom(e){return`${n.dim(`╰`)}${n.dim(`─`.repeat(e-2))}${n.dim(`╯`)}`}formatPanelRow(e,t,r){let i=e.label.padEnd(14,` `),a=String(e.value),o=this.visibleLength(i)+this.visibleLength(a)+4,s=Math.max(0,t-o);return`${n.dim(`│`)} ${n.blue(i)}${r(a)}${` `.repeat(s)} ${n.dim(`│`)}`}getPanelWidth(e){return Math.max(48,this.getTitleWidth(e),this.getRowsWidth(e.rows))}getTitleWidth(e){return this.visibleLength(e.title)+6}getRowsWidth(e){return Math.max(0,...e.map(e=>this.getRowWidth(e)))}getRowWidth(e){return 14+this.visibleLength(String(e.value))+4}visibleLength(e){return e.replace(ce,``).length}};function y(e,t){if(a.isAbsolute(t))return a.normalize(t);let n;try{let t=new URL(e);if(t.protocol!==`file:`)throw Error(`Unsupported URL protocol "${t.protocol}"`);n=a.dirname(s(t))}catch{n=e}return a.resolve(n,t)}function ue(e,t={}){let n=y(process.cwd(),e);if(!r.existsSync(n))return;let i=r.statSync(n),{recursive:o=!0,force:s=!0,cleanOnly:c=!1}=t;if(c&&i.isDirectory()){for(let e of r.readdirSync(n))r.rmSync(a.join(n,e),{recursive:o,force:s});return}if(c&&i.isFile()){r.truncateSync(n,0);return}r.rmSync(n,{recursive:i.isDirectory()?o:!1,force:s,maxRetries:3,retryDelay:100})}function b(e){let t=y(process.cwd(),e),n=r.existsSync(t)&&r.statSync(t).isDirectory()?t:a.dirname(t);if(!r.existsSync(n))throw Error(`Directory "${n}" does not exist.`);return t}function de(e){let t=y(process.cwd(),e);a.extname(e)&&console.warn(`[createDirectory] Warning: "${e}" looks like a file path.`);try{if(!r.existsSync(t))r.mkdirSync(t,{recursive:!0});else if(!r.statSync(t).isDirectory())throw Error(`"${t}" exists but is not a directory.`);return t}catch(e){throw Error(`Failed to create directory "${t}": ${e.message}`)}}function fe(e,t=``){let n=y(process.cwd(),e);b(a.dirname(n));let i=pe(n);if(!i)r.writeFileSync(n,t,{encoding:`utf8`,flag:`w`});else{if(!i.isFile())throw Error(`"${n}" exists but is not a file.`);t&&r.writeFileSync(n,t,{encoding:`utf8`,flag:`a`})}return n}function pe(e){try{return r.statSync(e)}catch{return}}async function me(e,t={}){let n=y(process.cwd(),e),r;try{r=await i.stat(n)}catch(e){if((t.force??!0)&&e.code===`ENOENT`)return;throw e}let{recursive:o=!0,force:s=!0,cleanOnly:c=!1}=t;if(c&&r.isDirectory()){let e=await i.readdir(n);for(let t of e)await i.rm(a.join(n,t),{recursive:o,force:s});return}if(c&&r.isFile()){await i.truncate(n,0);return}await i.rm(n,{recursive:r.isDirectory()?o:!1,force:s,maxRetries:3,retryDelay:100})}async function x(e){let t=y(process.cwd(),e),n;try{n=await i.stat(t)}catch{}let r=n?.isDirectory()?t:a.dirname(t);try{if(!(await i.stat(r)).isDirectory())throw Error(`"${r}" exists but is not a directory.`)}catch(e){throw e.code===`ENOENT`?Error(`Directory "${r}" does not exist.`):e}return t}async function he(e){let t=y(process.cwd(),e);a.extname(e)&&console.warn(`[createDirectory] Warning: "${e}" looks like a file path (has extension).`);try{let e;try{e=await i.stat(t)}catch{}if(!e)await i.mkdir(t,{recursive:!0});else if(!e.isDirectory())throw Error(`"${t}" exists but is not a directory.`);return t}catch(e){throw Error(`Failed to create directory "${t}": ${e.message}`)}}async function ge(e,t=``){let n=y(process.cwd(),e);await x(a.dirname(n));try{let e=await _e(n);if(!e)await i.writeFile(n,t,{encoding:`utf8`,flag:`w`});else{if(!e.isFile())throw Error(`"${n}" exists but is not a file.`);t&&await i.writeFile(n,t,{encoding:`utf8`,flag:`a`})}return n}catch(e){throw Error(`Failed to create file "${n}": ${e.message}`)}}async function _e(e){try{return await i.stat(e)}catch(e){if(e.code===`ENOENT`)return;throw e}}function S(e){if(!w(e))throw Error(`Environment registry must be an object.`);let t=Object.entries(e);if(!t.length)throw Error(`At least one environment must be defined.`);for(let[e,n]of t)ve(e,n);return e}function C(e,t,n={}){if(!Object.prototype.hasOwnProperty.call(e,t))throw Error(`Environment "${t}" is not defined.`);let r=e[t];if(!r)throw Error(`Environment "${t}" is not defined.`);let i=y(n.baseDir?.trim()||process.cwd(),r.fileDir?.trim()||`.`);return{name:t,file:r.file?.trim()||void 0,fileDir:i}}function ve(e,t){if(!e.trim())throw Error(`Environment name must not be empty.`);if(!w(t))throw Error(`Environment definition must be an object for "${e}".`);if(t.file!==void 0&&(typeof t.file!=`string`||!t.file.trim()))throw Error(`Environment file must not be empty for "${e}".`);if(t.fileDir!==void 0&&(typeof t.fileDir!=`string`||!t.fileDir.trim()))throw Error(`Environment file directory must not be empty for "${e}".`)}function w(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}const T=Symbol.for(`buildplease.environment-configuration.field`),E=Symbol.for(`buildplease.environment-configuration.contract`),D=Symbol.for(`buildplease.environment-configuration.binding`),O=Symbol.for(`buildplease.environment-configuration.config`),ye={string(){return M((e,t)=>{if(typeof e!=`string`)throw Error(`${t} must be string.`);let n=e.trim();if(!n)throw Error(`${t} must not be empty.`);return n},{required:!0})},number(){return M((e,t)=>{let n=typeof e==`number`?e:Number(e);if(!Number.isFinite(n))throw Error(`${t} must be number.`);return n},{required:!0})},boolean(){return M((e,t)=>{if(typeof e==`boolean`)return e;if(typeof e==`string`){let t=e.trim().toLowerCase();if(t===`true`)return!0;if(t===`false`)return!1}throw Error(`${t} must be boolean.`)},{required:!0})},array(e){return M((t,n)=>{if(!Array.isArray(t))throw Error(`${n} must be array.`);return t.map((t,r)=>e.parse(t,`${n}[${r}]`))},{required:!0})},custom(){return M(e=>e,{required:!0})}};function be(e,t){let n=e.trim();if(!n)throw Error(`Configuration key must not be empty.`);let r=(e=>{let t={contract:r,input:e};return Object.defineProperty(t,D,{value:!0}),t});return Object.defineProperties(r,{[E]:{value:!0},key:{value:n},schema:{value:t}}),r}function xe(e,t){let n={environments:S(e),input:t};return Object.defineProperty(n,O,{value:!0}),n}function k(e){return!!(e&&typeof e==`object`&&e[O]===!0)}function A(e){return!!(e&&typeof e==`object`&&e[T]===!0)}function Se(e){return typeof e==`function`&&e[E]===!0}function j(e){return!!(e&&typeof e==`object`&&e[D]===!0)}function M(e,t){let n={required:t.required,hasDefault:t.hasDefault??!1,defaultValue:t.defaultValue,parse:e,optional(){return M((t,n)=>{if(t!=null)return e(t,n)},{required:!1})},default(t){return M(e,{required:!1,hasDefault:!0,defaultValue:t})},map(n){let r=t.hasDefault&&t.defaultValue!==void 0?n(t.defaultValue):void 0;return M((t,r)=>n(e(t,r)),{required:t.required,hasDefault:t.hasDefault,defaultValue:r})}};return Object.defineProperty(n,T,{value:!0}),n}function N(e){return process.env[e]?.trim()||void 0}function Ce(){let e=N(`BUILDPLEASE_ENVIRONMENT`);if(!e)throw Error(`BuildPlease environment is not selected.`);return e}const P=Symbol.for(`buildplease.environment-configuration.source`);function we(e){return{env(e){return I(`env`,{name:e})},byEnvironment(e){return I(`by-environment`,{cases:e})},compute(e){return I(`compute`,{compute:e})},static(e){return I(`static`,{value:e})}}}function F(e){return!!(e&&typeof e==`object`&&e[P]===!0)}function I(e,t,n=[]){let r={kind:e,options:t,transforms:n,default(e){return I(`default`,{source:r,value:e})},map(r){return I(e,t,[...n,r])}};return Object.defineProperty(r,P,{value:!0}),r}async function Te(e={}){return z(e)}async function Ee(e={}){let t=Ce(),n=await z(e);try{let e=C(n.config.environments,t,{baseDir:o(n.configFilePath)});return ke(e),{...n,environment:e}}catch(e){throw V(e)}}async function De(e,t){let n=G(t,`config`);return U(e.input,n,`config`)}async function L(e,t,n={}){let r=Ae(n);return H(e.schema,t,r,e.key)}async function R(e,t={}){return L(e.contract,e.input,t)}async function z(e){let t=Oe(e.dir);try{let e=y(t,`environment.config.ts`);if(!r.existsSync(e))throw Error(`Config file "${e}" does not exist.`);let n=await B(t,e);if(!k(n))throw Error(`Environment config must be defined with defineConfig() (${e}).`);return{config:n,configFilePath:e,rootDir:t}}catch(e){throw V(e)}}function Oe(e){let t=e?y(process.cwd(),e):process.cwd();return b(t),t}async function B(e,t){return l(e,{interopDefault:!0,extensions:[`.ts`],tsconfigPaths:!0}).import(t,{default:!0})}function ke(e){if(!e.file)return;let t=y(e.fileDir,e.file);r.existsSync(t)&&c.config({path:t,overload:!1,quiet:!0})}function V(e){return Error(`Failed to load environment config: ${e instanceof Error?e.message:String(e)}`,{cause:e})}function Ae(e){return{buildMetadata:e.buildMetadata,environment:e.environment}}async function H(e,t,n,r){if(A(e))return je(e,t,n,r);let i=await U(t,n,r)??{};if(!q(i))throw Error(`${r} must be object.`);let a={};for(let[t,o]of Object.entries(e))a[t]=await H(o,i[t],n,`${r}.${t}`);return a}async function je(e,t,n,r){let i=await U(t,n,r);if(i==null){if(e.hasDefault)return K(e.defaultValue);if(!e.required)return;throw Error(`Missing required configuration: ${r}`)}return e.parse(i,r)}async function U(e,t,n){if(F(e))return W(e,t,n);if(j(e))return R(e,t);if(Array.isArray(e))return Promise.all(e.map((e,r)=>U(e,t,`${n}[${r}]`)));if(q(e)){let r={};for(let[i,a]of Object.entries(e))r[i]=await U(a,t,`${n}.${i}`);return r}return e}async function W(e,t,n){let r;switch(e.kind){case`env`:{let{name:t}=e.options;r=N(t);break}case`by-environment`:{let i=Me(t,n),{cases:a}=e.options;if(!Object.prototype.hasOwnProperty.call(a,i.name))throw Error(`${n} has no value for environment "${i.name}".`);r=await U(a[i.name],t,n);break}case`compute`:{let i=G(t,n),{compute:a}=e.options;r=await a(i);break}case`static`:{let{value:t}=e.options;r=t;break}case`default`:{let{source:i,value:a}=e.options;r=await W(i,t,n)??K(a);break}}for(let t of e.transforms)r=await t(r);return r}function Me(e,t){if(!e?.environment)throw Error(`${t} requires runtime environment.`);return e.environment}function G(e,t){if(!e?.environment)throw Error(`${t} requires runtime environment.`);if(!e.buildMetadata)throw Error(`${t} requires build metadata.`);return e}function K(e){if(Array.isArray(e))return e.map(e=>K(e));if(q(e)){let t={};for(let[n,r]of Object.entries(e))t[n]=K(r);return t}return e}function q(e){if(!e||typeof e!=`object`||Object.prototype.toString.call(e)!==`[object Object]`)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}let Ne=function(e){return e.Critical=`CRITICAL`,e.Serious=`SERIOUS`,e.Important=`IMPORTANT`,e.Notice=`NOTICE`,e.Routine=`ROUTINE`,e}({});function Pe(e){return e instanceof Error}function J(e,t={}){if(e==null)return{};let{filterNull:n=!0,filterUndefined:r=!0,filterEmptyString:i=!1,filterEmptyObject:a=!1,filterEmptyArray:o=!1}=t;return Object.keys(e).reduce((s,c)=>{let l=e[c];return Y(l)&&Object.getPrototypeOf(l)===null&&(l=void 0),Fe(l)&&(l=J(l,t)),n&&l===null||r&&l===void 0||i&&l===``||a&&X(l)||o&&Array.isArray(l)&&l.length===0||(s[c]=l),s},{})}function Y(e){return typeof e==`object`&&!!e}function X(e){return Y(e)&&Object.keys(e).length===0}function Fe(e){return Y(e)&&Object.getPrototypeOf(e)===Object.prototype}function Ie(e){return e==null||[`string`,`number`,`boolean`,`bigint`,`symbol`].includes(typeof e)}Array.prototype.isEmpty=function(){return this==null||this.length===0},String.prototype.capitalized=function(){let e=this==null?``:this.toString();return e.trim()?e.charAt(0).toUpperCase()+e.slice(1):``};var Le=class{options;instance;constructor(e){this.options=e,this.instance=this.makeInstance()}info(e,t){this.log(`info`,e,t)}debug(e,t){this.log(`debug`,e,t)}trace(e,t){this.log(`trace`,e,t)}warn(e,t){this.log(`warn`,e,t)}error(e,t){this.log(`error`,e,t)}fatal(e,t){this.log(`fatal`,e,t)}child(e){return this.instance.child(e)}log(e,t,n){this.instance[e]({msg:t,...this.formatLogOptions(n)})}formatLogOptions(e){return e?this.normalizeObject({flag:e.flag,details:this.formatUnknown(e.details),error:this.formatUnknown(e.error),metadata:this.formatUnknown(e.metadata)}):{}}formatUnknown(e){if(Pe(e)){let t={type:e.constructor.name,message:e.message};this.options.debug&&e.stack&&(t.stack=e.stack);for(let[n,r]of Object.entries(e))n in t||(t[n]=r);let n=this.normalizeObject(t);return X(n)?void 0:n}if(Buffer.isBuffer(e))return`[Buffer]`;if(e&&typeof e.pipe==`function`)return`[Stream]`;if(Y(e))try{let t=JSON.stringify(e);if(t===void 0)return;let n=JSON.parse(t);if(Array.isArray(n))return n.length>0?n:void 0;if(Y(n)){let e=this.normalizeObject(n);return X(e)?void 0:e}return n}catch{return{type:`NonSerializableObject`}}return Ie(e)?e:String(e)}normalizeObject(e){return J(Object.fromEntries(Object.entries(e)),{filterNull:!0,filterUndefined:!0,filterEmptyString:!0,filterEmptyArray:!0,filterEmptyObject:!0})}makeInstance(){if(!this.options.enabled)return u({enabled:!1,timestamp:!0});let e=this.options.transports,t={level:this.makeGlobalLogLevel(e),enabled:!0,timestamp:!0,transport:{targets:this.makeTransportTargets(e)}};return u(t)}makeTransportTargets(e){if(e.filter(e=>e.type===`console`).length>1)throw Error(`[Logger] Multiple console transports are not supported.`);return e.map(e=>{switch(e.type){case`console`:return this.makeConsoleTransportTarget(e);case`file`:return this.makeFileTransportTarget(e)}})}makeConsoleTransportTarget(e){return{target:`pino-pretty`,level:this.makeTransportLevel(e.level),options:e.pretty}}makeFileTransportTarget(e){let t=this.makeTransportLevel(e.level),n=a.isAbsolute(e.path)?a.normalize(e.path):y(process.cwd(),e.path);return b(a.dirname(n)),{target:`pino/file`,level:t,options:{destination:n}}}makeTransportLevel(e){return this.options.debug?`trace`:e??`info`}makeGlobalLogLevel(e){if(this.options.debug)return`trace`;let t=e.at(0);if(!t)return`info`;let n={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},r=this.makeTransportLevel(t.level);for(let t of e.slice(1)){let e=this.makeTransportLevel(t.level);n[e]<n[r]&&(r=e)}return r}};const Z=d.string().trim().min(1).transform(e=>{let{prefix:t,base:n}=Re(e),r=ze(n);return{original:e,prefix:t,base:n,kebab:Be(r),snake:Ve(r),camel:He(r),pascal:Ue(r)}}),Q=d.looseObject({name:Z,version:d.string().trim().min(1),private:d.boolean().optional(),type:d.enum([`module`,`commonjs`]).optional(),dependencies:d.record(d.string(),d.string()).default({}),peerDependencies:d.record(d.string(),d.string()).default({}),devDependencies:d.record(d.string(),d.string()).default({})});function Re(e){let t=/^@([^/]+)\/(.+)$/.exec(e);return t&&t[2]?{prefix:t[1],base:t[2]}:{base:e}}function ze(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/[^a-zA-Z0-9]+/g,` `).trim().toLowerCase();return t?t.split(/\s+/):[]}function Be(e){return e.join(`-`)}function Ve(e){return e.join(`_`)}function He(e){if(e.length===0)return``;let[t,...n]=e;return t+n.map($).join(``)}function Ue(e){return e.map($).join(``)}function $(e){return e.length===0?``:e.charAt(0).toUpperCase()+e.slice(1)}function We(e){let t,n;try{t=r.readFileSync(e,`utf8`)}catch(t){throw Error(`Failed to read package.json at ${e}`,{cause:t})}try{n=JSON.parse(t)}catch(t){throw Error(`Failed to parse package.json at ${e}`,{cause:t})}try{return Q.parse(n)}catch(t){throw Error(`Invalid package.json at ${e}`,{cause:t})}}export{le as Console,Ne as LogFlag,Le as LoggerImpl,Q as PackageJSONSchema,Z as PackageNameSchema,de as createDirectory,he as createDirectoryAsync,fe as createFile,ge as createFileAsync,xe as defineConfig,be as defineConfiguration,S as defineEnvironments,we as defineSource,b as ensureDirectory,x as ensureDirectoryAsync,ye as field,k as isConfigDefinition,j as isConfigurationBinding,Se as isConfigurationContract,A as isConfigurationField,F as isConfigurationSource,Te as loadEnvironmentConfig,We as loadPackageJSON,Ee as loadSelectedEnvironmentConfig,f as makeDependencyBundlingPolicy,ue as removePath,me as removePathAsync,De as resolveConfig,L as resolveConfiguration,R as resolveConfigurationBinding,C as resolveEnvironment,y as resolvePath};
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=`BUILDPLEASE_ENVIRONMENT`;function t(t,n){let r=process.env[e];process.env[e]=t;let i=()=>{r===void 0?delete process.env[e]:process.env[e]=r};try{let e=n();return e instanceof Promise?e.finally(i):(i(),e)}catch(e){throw i(),e}}exports.withSelectedEnvironment=t;
@@ -0,0 +1,5 @@
1
+ //#region src-test/selected-environment.d.ts
2
+ declare function withSelectedEnvironment<T>(environment: string, run: () => Promise<T>): Promise<T>;
3
+ declare function withSelectedEnvironment<T>(environment: string, run: () => T): T;
4
+ //#endregion
5
+ export { withSelectedEnvironment };
@@ -0,0 +1,5 @@
1
+ //#region src-test/selected-environment.d.ts
2
+ declare function withSelectedEnvironment<T>(environment: string, run: () => Promise<T>): Promise<T>;
3
+ declare function withSelectedEnvironment<T>(environment: string, run: () => T): T;
4
+ //#endregion
5
+ export { withSelectedEnvironment };
@@ -0,0 +1 @@
1
+ const e=`BUILDPLEASE_ENVIRONMENT`;function t(t,n){let r=process.env[e];process.env[e]=t;let i=()=>{r===void 0?delete process.env[e]:process.env[e]=r};try{let e=n();return e instanceof Promise?e.finally(i):(i(),e)}catch(e){throw i(),e}}export{t as withSelectedEnvironment};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buildplease/core",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "keywords": [],
5
5
  "repository": {
6
6
  "type": "git",
@@ -31,18 +31,22 @@
31
31
  "default": "./dist/src-node/index.cjs"
32
32
  }
33
33
  },
34
- "./node/test": {
34
+ "./test": {
35
35
  "import": {
36
- "types": "./dist/src-node-test/index.d.mts",
37
- "default": "./dist/src-node-test/index.mjs"
36
+ "types": "./dist/src-test/index.d.mts",
37
+ "default": "./dist/src-test/index.mjs"
38
38
  },
39
39
  "require": {
40
- "types": "./dist/src-node-test/index.d.cts",
41
- "default": "./dist/src-node-test/index.cjs"
40
+ "types": "./dist/src-test/index.d.cts",
41
+ "default": "./dist/src-test/index.cjs"
42
42
  }
43
43
  }
44
44
  },
45
+ "bin": {
46
+ "buildplease": "./bin/buildplease.mjs"
47
+ },
45
48
  "files": [
49
+ "bin",
46
50
  "dist",
47
51
  "resources"
48
52
  ],
@@ -1,2 +0,0 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));let c=require("consola"),l=require("consola/utils"),u=require("node:path");u=s(u,1);let d=require("node:fs");d=s(d,1);let f=require("node:url"),p=require("pino");p=s(p,1);const m=/\u001B\[[0-9;]*m/g;var h=class{instance;constructor(e={}){this.instance=(0,c.createConsola)({level:e.enabled===!1?-999:999,formatOptions:{colors:!0,date:!1}})}title(e,t,n=[]){this.printPanel({title:`${e} ${t}`.trim(),renderedTitle:`${l.colors.cyan(l.colors.bold(e))}${t?` ${l.colors.dim(t)}`:``}`,rows:n,formatValue:l.colors.green})}panel(e,t,n){this.printPanel({title:n===void 0?e:`${e} ${n}`,renderedTitle:`${l.colors.cyan(l.colors.bold(e))}${n===void 0?``:` ${l.colors.green(String(n))}`}`,rows:t,formatValue:l.colors.dim})}step(e,t){return`${l.colors.cyan(e.padEnd(10,` `))}${t}`}duration(e){return e<1e3?`${e}ms`:`${(e/1e3).toFixed(2)}s`}emptyLine(){this.instance.log(``)}log(e,...t){this.instance.log(e,...t)}info(e,...t){this.instance.info(e,...t)}start(e,...t){this.instance.start(e,...t)}success(e,...t){this.instance.success(e,...t)}warn(e,...t){this.instance.warn(e,...t)}error(e,...t){this.instance.error(e,...t)}debug(e,...t){this.instance.debug(e,...t)}printPanel(e){this.instance.log(this.formatPanel(e))}formatPanel(e){let t=this.getPanelWidth(e);return[this.formatPanelTop(e.renderedTitle,t),...e.rows.map(n=>this.formatPanelRow(n,t,e.formatValue)),this.formatPanelBottom(t)].join(`
2
- `)}formatPanelTop(e,t){let n=Math.max(1,t-this.visibleLength(e)-5);return`${l.colors.dim(`╭─`)} ${e} ${l.colors.dim(`─`.repeat(n))}${l.colors.dim(`╮`)}`}formatPanelBottom(e){return`${l.colors.dim(`╰`)}${l.colors.dim(`─`.repeat(e-2))}${l.colors.dim(`╯`)}`}formatPanelRow(e,t,n){let r=e.label.padEnd(14,` `),i=String(e.value),a=this.visibleLength(r)+this.visibleLength(i)+4,o=Math.max(0,t-a);return`${l.colors.dim(`│`)} ${l.colors.blue(r)}${n(i)}${` `.repeat(o)} ${l.colors.dim(`│`)}`}getPanelWidth(e){return Math.max(48,this.getTitleWidth(e),this.getRowsWidth(e.rows))}getTitleWidth(e){return this.visibleLength(e.title)+6}getRowsWidth(e){return Math.max(0,...e.map(e=>this.getRowWidth(e)))}getRowWidth(e){return 14+this.visibleLength(String(e.value))+4}visibleLength(e){return e.replace(m,``).length}};function g(){return new h({enabled:!1})}function _(e,t){if(u.default.isAbsolute(t))return u.default.normalize(t);let n;try{let t=new URL(e);if(t.protocol!==`file:`)throw Error(`Unsupported URL protocol "${t.protocol}"`);n=u.default.dirname((0,f.fileURLToPath)(t))}catch{n=e}return u.default.resolve(n,t)}function v(e){let t=_(process.cwd(),e),n=d.default.existsSync(t)&&d.default.statSync(t).isDirectory()?t:u.default.dirname(t);if(!d.default.existsSync(n))throw Error(`Directory "${n}" does not exist.`);return t}function y(e){return e instanceof Error}function b(e,t={}){if(e==null)return{};let{filterNull:n=!0,filterUndefined:r=!0,filterEmptyString:i=!1,filterEmptyObject:a=!1,filterEmptyArray:o=!1}=t;return Object.keys(e).reduce((s,c)=>{let l=e[c];return x(l)&&Object.getPrototypeOf(l)===null&&(l=void 0),C(l)&&(l=b(l,t)),n&&l===null||r&&l===void 0||i&&l===``||a&&S(l)||o&&Array.isArray(l)&&l.length===0||(s[c]=l),s},{})}function x(e){return typeof e==`object`&&!!e}function S(e){return x(e)&&Object.keys(e).length===0}function C(e){return x(e)&&Object.getPrototypeOf(e)===Object.prototype}function w(e){return e==null||[`string`,`number`,`boolean`,`bigint`,`symbol`].includes(typeof e)}Array.prototype.isEmpty=function(){return this==null||this.length===0},String.prototype.capitalized=function(){let e=this==null?``:this.toString();return e.trim()?e.charAt(0).toUpperCase()+e.slice(1):``};var T=class{options;instance;constructor(e){this.options=e,this.instance=this.makeInstance()}info(e,t){this.log(`info`,e,t)}debug(e,t){this.log(`debug`,e,t)}trace(e,t){this.log(`trace`,e,t)}warn(e,t){this.log(`warn`,e,t)}error(e,t){this.log(`error`,e,t)}fatal(e,t){this.log(`fatal`,e,t)}child(e){return this.instance.child(e)}log(e,t,n){this.instance[e]({msg:t,...this.formatLogOptions(n)})}formatLogOptions(e){return e?this.normalizeObject({flag:e.flag,details:this.formatUnknown(e.details),error:this.formatUnknown(e.error),metadata:this.formatUnknown(e.metadata)}):{}}formatUnknown(e){if(y(e)){let t={type:e.constructor.name,message:e.message};this.options.debug&&e.stack&&(t.stack=e.stack);for(let[n,r]of Object.entries(e))n in t||(t[n]=r);let n=this.normalizeObject(t);return S(n)?void 0:n}if(Buffer.isBuffer(e))return`[Buffer]`;if(e&&typeof e.pipe==`function`)return`[Stream]`;if(x(e))try{let t=JSON.stringify(e);if(t===void 0)return;let n=JSON.parse(t);if(Array.isArray(n))return n.length>0?n:void 0;if(x(n)){let e=this.normalizeObject(n);return S(e)?void 0:e}return n}catch{return{type:`NonSerializableObject`}}return w(e)?e:String(e)}normalizeObject(e){return b(Object.fromEntries(Object.entries(e)),{filterNull:!0,filterUndefined:!0,filterEmptyString:!0,filterEmptyArray:!0,filterEmptyObject:!0})}makeInstance(){if(!this.options.enabled)return(0,p.default)({enabled:!1,timestamp:!0});let e=this.options.transports,t={level:this.makeGlobalLogLevel(e),enabled:!0,timestamp:!0,transport:{targets:this.makeTransportTargets(e)}};return(0,p.default)(t)}makeTransportTargets(e){if(e.filter(e=>e.type===`console`).length>1)throw Error(`[Logger] Multiple console transports are not supported.`);return e.map(e=>{switch(e.type){case`console`:return this.makeConsoleTransportTarget(e);case`file`:return this.makeFileTransportTarget(e)}})}makeConsoleTransportTarget(e){return{target:`pino-pretty`,level:this.makeTransportLevel(e.level),options:e.pretty}}makeFileTransportTarget(e){let t=this.makeTransportLevel(e.level),n=u.default.isAbsolute(e.path)?u.default.normalize(e.path):_(process.cwd(),e.path);return v(u.default.dirname(n)),{target:`pino/file`,level:t,options:{destination:n}}}makeTransportLevel(e){return this.options.debug?`trace`:e??`info`}makeGlobalLogLevel(e){if(this.options.debug)return`trace`;let t=e.at(0);if(!t)return`info`;let n={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},r=this.makeTransportLevel(t.level);for(let t of e.slice(1)){let e=this.makeTransportLevel(t.level);n[e]<n[r]&&(r=e)}return r}};function E(e={enabled:!1}){return new T(e)}exports.makeConsoleFixture=g,exports.makeLoggerFixture=E;
@@ -1,99 +0,0 @@
1
- import { Bindings, Level, Logger } from "pino";
2
- import { PrettyOptions } from "pino-pretty";
3
- //#region src-node/console/console-options.d.ts
4
- interface ConsoleOptions {
5
- readonly enabled?: boolean;
6
- }
7
- //#endregion
8
- //#region src-node/console/console.d.ts
9
- interface ConsolePanelRow {
10
- readonly label: string;
11
- readonly value: string | number;
12
- }
13
- declare class Console {
14
- private readonly instance;
15
- constructor(options?: ConsoleOptions);
16
- title(product: string, command: string, rows?: readonly ConsolePanelRow[]): void;
17
- panel(title: string, rows: readonly ConsolePanelRow[], badge?: string | number): void;
18
- step(label: string, message: string): string;
19
- duration(ms: number): string;
20
- emptyLine(): void;
21
- log(message?: unknown, ...args: unknown[]): void;
22
- info(message?: unknown, ...args: unknown[]): void;
23
- start(message?: unknown, ...args: unknown[]): void;
24
- success(message?: unknown, ...args: unknown[]): void;
25
- warn(message?: unknown, ...args: unknown[]): void;
26
- error(message?: unknown, ...args: unknown[]): void;
27
- debug(message?: unknown, ...args: unknown[]): void;
28
- private printPanel;
29
- private formatPanel;
30
- private formatPanelTop;
31
- private formatPanelBottom;
32
- private formatPanelRow;
33
- private getPanelWidth;
34
- private getTitleWidth;
35
- private getRowsWidth;
36
- private getRowWidth;
37
- private visibleLength;
38
- }
39
- //#endregion
40
- //#region src-node-test/console.d.ts
41
- declare function makeConsoleFixture(): Console;
42
- //#endregion
43
- //#region src-node/logger/log-flag.d.ts
44
- declare enum LogFlag {
45
- Critical = "CRITICAL",
46
- Serious = "SERIOUS",
47
- Important = "IMPORTANT",
48
- Notice = "NOTICE",
49
- Routine = "ROUTINE"
50
- }
51
- //#endregion
52
- //#region src-node/logger/log-options.d.ts
53
- interface LogOptions {
54
- readonly flag?: LogFlag;
55
- readonly details?: unknown;
56
- readonly error?: unknown;
57
- readonly metadata?: unknown;
58
- }
59
- //#endregion
60
- //#region src-node/logger/logger-options.d.ts
61
- interface BaseLoggerTransportOptions {
62
- readonly level?: Level;
63
- }
64
- interface LoggerConsoleTransportOptions extends BaseLoggerTransportOptions {
65
- readonly type: 'console';
66
- readonly target: 'pino-pretty';
67
- readonly pretty?: PrettyOptions;
68
- }
69
- interface LoggerFileTransportOptions extends BaseLoggerTransportOptions {
70
- readonly type: 'file';
71
- readonly path: string;
72
- }
73
- type LoggerTransportOptions = LoggerConsoleTransportOptions | LoggerFileTransportOptions;
74
- type LoggerOptions = {
75
- readonly enabled: false;
76
- readonly debug?: boolean;
77
- readonly transports?: never;
78
- } | {
79
- readonly enabled: true;
80
- readonly debug?: boolean;
81
- readonly transports: readonly [LoggerTransportOptions, ...LoggerTransportOptions[]];
82
- };
83
- //#endregion
84
- //#region src-node/logger/logger.d.ts
85
- interface Logger$1 {
86
- readonly instance: Logger;
87
- info(title: string, options?: LogOptions): void;
88
- debug(title: string, options?: LogOptions): void;
89
- trace(title: string, options?: LogOptions): void;
90
- warn(title: string, options?: LogOptions): void;
91
- error(title: string, options?: LogOptions): void;
92
- fatal(title: string, options?: LogOptions): void;
93
- child(bindings: Bindings): Logger;
94
- }
95
- //#endregion
96
- //#region src-node-test/logger.d.ts
97
- declare function makeLoggerFixture(options?: LoggerOptions): Logger$1;
98
- //#endregion
99
- export { makeConsoleFixture, makeLoggerFixture };
@@ -1,99 +0,0 @@
1
- import { Bindings, Level, Logger } from "pino";
2
- import { PrettyOptions } from "pino-pretty";
3
- //#region src-node/console/console-options.d.ts
4
- interface ConsoleOptions {
5
- readonly enabled?: boolean;
6
- }
7
- //#endregion
8
- //#region src-node/console/console.d.ts
9
- interface ConsolePanelRow {
10
- readonly label: string;
11
- readonly value: string | number;
12
- }
13
- declare class Console {
14
- private readonly instance;
15
- constructor(options?: ConsoleOptions);
16
- title(product: string, command: string, rows?: readonly ConsolePanelRow[]): void;
17
- panel(title: string, rows: readonly ConsolePanelRow[], badge?: string | number): void;
18
- step(label: string, message: string): string;
19
- duration(ms: number): string;
20
- emptyLine(): void;
21
- log(message?: unknown, ...args: unknown[]): void;
22
- info(message?: unknown, ...args: unknown[]): void;
23
- start(message?: unknown, ...args: unknown[]): void;
24
- success(message?: unknown, ...args: unknown[]): void;
25
- warn(message?: unknown, ...args: unknown[]): void;
26
- error(message?: unknown, ...args: unknown[]): void;
27
- debug(message?: unknown, ...args: unknown[]): void;
28
- private printPanel;
29
- private formatPanel;
30
- private formatPanelTop;
31
- private formatPanelBottom;
32
- private formatPanelRow;
33
- private getPanelWidth;
34
- private getTitleWidth;
35
- private getRowsWidth;
36
- private getRowWidth;
37
- private visibleLength;
38
- }
39
- //#endregion
40
- //#region src-node-test/console.d.ts
41
- declare function makeConsoleFixture(): Console;
42
- //#endregion
43
- //#region src-node/logger/log-flag.d.ts
44
- declare enum LogFlag {
45
- Critical = "CRITICAL",
46
- Serious = "SERIOUS",
47
- Important = "IMPORTANT",
48
- Notice = "NOTICE",
49
- Routine = "ROUTINE"
50
- }
51
- //#endregion
52
- //#region src-node/logger/log-options.d.ts
53
- interface LogOptions {
54
- readonly flag?: LogFlag;
55
- readonly details?: unknown;
56
- readonly error?: unknown;
57
- readonly metadata?: unknown;
58
- }
59
- //#endregion
60
- //#region src-node/logger/logger-options.d.ts
61
- interface BaseLoggerTransportOptions {
62
- readonly level?: Level;
63
- }
64
- interface LoggerConsoleTransportOptions extends BaseLoggerTransportOptions {
65
- readonly type: 'console';
66
- readonly target: 'pino-pretty';
67
- readonly pretty?: PrettyOptions;
68
- }
69
- interface LoggerFileTransportOptions extends BaseLoggerTransportOptions {
70
- readonly type: 'file';
71
- readonly path: string;
72
- }
73
- type LoggerTransportOptions = LoggerConsoleTransportOptions | LoggerFileTransportOptions;
74
- type LoggerOptions = {
75
- readonly enabled: false;
76
- readonly debug?: boolean;
77
- readonly transports?: never;
78
- } | {
79
- readonly enabled: true;
80
- readonly debug?: boolean;
81
- readonly transports: readonly [LoggerTransportOptions, ...LoggerTransportOptions[]];
82
- };
83
- //#endregion
84
- //#region src-node/logger/logger.d.ts
85
- interface Logger$1 {
86
- readonly instance: Logger;
87
- info(title: string, options?: LogOptions): void;
88
- debug(title: string, options?: LogOptions): void;
89
- trace(title: string, options?: LogOptions): void;
90
- warn(title: string, options?: LogOptions): void;
91
- error(title: string, options?: LogOptions): void;
92
- fatal(title: string, options?: LogOptions): void;
93
- child(bindings: Bindings): Logger;
94
- }
95
- //#endregion
96
- //#region src-node-test/logger.d.ts
97
- declare function makeLoggerFixture(options?: LoggerOptions): Logger$1;
98
- //#endregion
99
- export { makeConsoleFixture, makeLoggerFixture };
@@ -1,2 +0,0 @@
1
- import{createConsola as e}from"consola";import{colors as t}from"consola/utils";import n from"node:path";import r from"node:fs";import{fileURLToPath as i}from"node:url";import a from"pino";const o=/\u001B\[[0-9;]*m/g;var s=class{instance;constructor(t={}){this.instance=e({level:t.enabled===!1?-999:999,formatOptions:{colors:!0,date:!1}})}title(e,n,r=[]){this.printPanel({title:`${e} ${n}`.trim(),renderedTitle:`${t.cyan(t.bold(e))}${n?` ${t.dim(n)}`:``}`,rows:r,formatValue:t.green})}panel(e,n,r){this.printPanel({title:r===void 0?e:`${e} ${r}`,renderedTitle:`${t.cyan(t.bold(e))}${r===void 0?``:` ${t.green(String(r))}`}`,rows:n,formatValue:t.dim})}step(e,n){return`${t.cyan(e.padEnd(10,` `))}${n}`}duration(e){return e<1e3?`${e}ms`:`${(e/1e3).toFixed(2)}s`}emptyLine(){this.instance.log(``)}log(e,...t){this.instance.log(e,...t)}info(e,...t){this.instance.info(e,...t)}start(e,...t){this.instance.start(e,...t)}success(e,...t){this.instance.success(e,...t)}warn(e,...t){this.instance.warn(e,...t)}error(e,...t){this.instance.error(e,...t)}debug(e,...t){this.instance.debug(e,...t)}printPanel(e){this.instance.log(this.formatPanel(e))}formatPanel(e){let t=this.getPanelWidth(e);return[this.formatPanelTop(e.renderedTitle,t),...e.rows.map(n=>this.formatPanelRow(n,t,e.formatValue)),this.formatPanelBottom(t)].join(`
2
- `)}formatPanelTop(e,n){let r=Math.max(1,n-this.visibleLength(e)-5);return`${t.dim(`╭─`)} ${e} ${t.dim(`─`.repeat(r))}${t.dim(`╮`)}`}formatPanelBottom(e){return`${t.dim(`╰`)}${t.dim(`─`.repeat(e-2))}${t.dim(`╯`)}`}formatPanelRow(e,n,r){let i=e.label.padEnd(14,` `),a=String(e.value),o=this.visibleLength(i)+this.visibleLength(a)+4,s=Math.max(0,n-o);return`${t.dim(`│`)} ${t.blue(i)}${r(a)}${` `.repeat(s)} ${t.dim(`│`)}`}getPanelWidth(e){return Math.max(48,this.getTitleWidth(e),this.getRowsWidth(e.rows))}getTitleWidth(e){return this.visibleLength(e.title)+6}getRowsWidth(e){return Math.max(0,...e.map(e=>this.getRowWidth(e)))}getRowWidth(e){return 14+this.visibleLength(String(e.value))+4}visibleLength(e){return e.replace(o,``).length}};function c(){return new s({enabled:!1})}function l(e,t){if(n.isAbsolute(t))return n.normalize(t);let r;try{let t=new URL(e);if(t.protocol!==`file:`)throw Error(`Unsupported URL protocol "${t.protocol}"`);r=n.dirname(i(t))}catch{r=e}return n.resolve(r,t)}function u(e){let t=l(process.cwd(),e),i=r.existsSync(t)&&r.statSync(t).isDirectory()?t:n.dirname(t);if(!r.existsSync(i))throw Error(`Directory "${i}" does not exist.`);return t}function d(e){return e instanceof Error}function f(e,t={}){if(e==null)return{};let{filterNull:n=!0,filterUndefined:r=!0,filterEmptyString:i=!1,filterEmptyObject:a=!1,filterEmptyArray:o=!1}=t;return Object.keys(e).reduce((s,c)=>{let l=e[c];return p(l)&&Object.getPrototypeOf(l)===null&&(l=void 0),h(l)&&(l=f(l,t)),n&&l===null||r&&l===void 0||i&&l===``||a&&m(l)||o&&Array.isArray(l)&&l.length===0||(s[c]=l),s},{})}function p(e){return typeof e==`object`&&!!e}function m(e){return p(e)&&Object.keys(e).length===0}function h(e){return p(e)&&Object.getPrototypeOf(e)===Object.prototype}function g(e){return e==null||[`string`,`number`,`boolean`,`bigint`,`symbol`].includes(typeof e)}Array.prototype.isEmpty=function(){return this==null||this.length===0},String.prototype.capitalized=function(){let e=this==null?``:this.toString();return e.trim()?e.charAt(0).toUpperCase()+e.slice(1):``};var _=class{options;instance;constructor(e){this.options=e,this.instance=this.makeInstance()}info(e,t){this.log(`info`,e,t)}debug(e,t){this.log(`debug`,e,t)}trace(e,t){this.log(`trace`,e,t)}warn(e,t){this.log(`warn`,e,t)}error(e,t){this.log(`error`,e,t)}fatal(e,t){this.log(`fatal`,e,t)}child(e){return this.instance.child(e)}log(e,t,n){this.instance[e]({msg:t,...this.formatLogOptions(n)})}formatLogOptions(e){return e?this.normalizeObject({flag:e.flag,details:this.formatUnknown(e.details),error:this.formatUnknown(e.error),metadata:this.formatUnknown(e.metadata)}):{}}formatUnknown(e){if(d(e)){let t={type:e.constructor.name,message:e.message};this.options.debug&&e.stack&&(t.stack=e.stack);for(let[n,r]of Object.entries(e))n in t||(t[n]=r);let n=this.normalizeObject(t);return m(n)?void 0:n}if(Buffer.isBuffer(e))return`[Buffer]`;if(e&&typeof e.pipe==`function`)return`[Stream]`;if(p(e))try{let t=JSON.stringify(e);if(t===void 0)return;let n=JSON.parse(t);if(Array.isArray(n))return n.length>0?n:void 0;if(p(n)){let e=this.normalizeObject(n);return m(e)?void 0:e}return n}catch{return{type:`NonSerializableObject`}}return g(e)?e:String(e)}normalizeObject(e){return f(Object.fromEntries(Object.entries(e)),{filterNull:!0,filterUndefined:!0,filterEmptyString:!0,filterEmptyArray:!0,filterEmptyObject:!0})}makeInstance(){if(!this.options.enabled)return a({enabled:!1,timestamp:!0});let e=this.options.transports,t={level:this.makeGlobalLogLevel(e),enabled:!0,timestamp:!0,transport:{targets:this.makeTransportTargets(e)}};return a(t)}makeTransportTargets(e){if(e.filter(e=>e.type===`console`).length>1)throw Error(`[Logger] Multiple console transports are not supported.`);return e.map(e=>{switch(e.type){case`console`:return this.makeConsoleTransportTarget(e);case`file`:return this.makeFileTransportTarget(e)}})}makeConsoleTransportTarget(e){return{target:`pino-pretty`,level:this.makeTransportLevel(e.level),options:e.pretty}}makeFileTransportTarget(e){let t=this.makeTransportLevel(e.level),r=n.isAbsolute(e.path)?n.normalize(e.path):l(process.cwd(),e.path);return u(n.dirname(r)),{target:`pino/file`,level:t,options:{destination:r}}}makeTransportLevel(e){return this.options.debug?`trace`:e??`info`}makeGlobalLogLevel(e){if(this.options.debug)return`trace`;let t=e.at(0);if(!t)return`info`;let n={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},r=this.makeTransportLevel(t.level);for(let t of e.slice(1)){let e=this.makeTransportLevel(t.level);n[e]<n[r]&&(r=e)}return r}};function v(e={enabled:!1}){return new _(e)}export{c as makeConsoleFixture,v as makeLoggerFixture};