bini-env 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/Readme.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # bini-env
2
2
 
3
+ ![npm](https://img.shields.io/npm/v/bini-env?color=cyan&style=flat-square)
4
+ ![npm downloads](https://img.shields.io/npm/dm/bini-env?style=flat-square)
5
+ ![license](https://img.shields.io/npm/l/bini-env?style=flat-square)
6
+ ![vite](https://img.shields.io/badge/vite-plugin-646CFF?style=flat-square&logo=vite)
7
+ ![typescript](https://img.shields.io/badge/TypeScript-ready-3178C6?style=flat-square&logo=typescript)
8
+
3
9
  A lightweight Vite plugin that enhances your dev and preview server output with a clean startup banner and detected `.env` files.
4
10
 
5
11
  ## Features
@@ -34,7 +40,7 @@ export default defineConfig({
34
40
  **Dev mode**
35
41
  ```
36
42
  ß Bini.js (dev)
37
- ✓ Environments: .env.local, .env
43
+ ➜ Environments: .env.local, .env
38
44
  ➜ Local: http://localhost:5173/
39
45
  ➜ Network: http://192.168.1.10:5173/
40
46
  ```
@@ -42,7 +48,7 @@ export default defineConfig({
42
48
  **Preview mode**
43
49
  ```
44
50
  ß Bini.js (preview)
45
- ✓ Environments: .env.local, .env
51
+ ➜ Environments: .env.local, .env
46
52
  ➜ Local: http://localhost:4173/
47
53
  ➜ Network: http://192.168.1.10:4173/
48
54
  ```
@@ -107,7 +113,7 @@ import { detectEnvFiles, formatEnvFilesForDisplay } from 'bini-env';
107
113
 
108
114
  const files = detectEnvFiles();
109
115
  console.log(formatEnvFilesForDisplay(files));
110
- // ✓ Environments: .env
116
+ // ➜ Environments: .env
111
117
  ```
112
118
 
113
119
  ## Types
package/dist/index.cjs CHANGED
@@ -38,6 +38,11 @@ module.exports = __toCommonJS(index_exports);
38
38
  var import_fs = __toESM(require("fs"), 1);
39
39
  var import_path = __toESM(require("path"), 1);
40
40
  var BINI_LOGO = "\xDF";
41
+ var DEFAULT_OPTIONS = {
42
+ enabled: true,
43
+ clearViteHeader: true,
44
+ logo: BINI_LOGO
45
+ };
41
46
  var COLORS = {
42
47
  CYAN: "\x1B[36m",
43
48
  RESET: "\x1B[0m",
@@ -70,49 +75,30 @@ function formatEnvFilesForDisplay(envFiles) {
70
75
  return "";
71
76
  }
72
77
  const envString = envFiles.map((f) => f.name).join(", ");
73
- return `${COLORS.GREEN}\u2713${COLORS.RESET} Environments: ${envString}`;
74
- }
75
- function getModeLabel(command, isPreview = false) {
76
- if (command === "build") {
77
- return "(prod)";
78
- } else if (command === "serve") {
79
- if (isPreview) {
80
- return "(preview)";
81
- }
82
- return "(dev)";
83
- }
84
- return "";
78
+ return `${COLORS.GREEN}\u279C${COLORS.RESET} Environments: ${envString}`;
85
79
  }
86
80
  function clearLine() {
87
81
  process.stdout.write("\x1B[2K\r");
88
82
  }
89
83
  function biniEnvPlugin(options = {}) {
90
- const {
91
- enabled = true,
92
- clearViteHeader = true,
93
- logo = BINI_LOGO,
94
- showEnvironmentsInBuild = true
95
- } = options;
84
+ const resolvedOptions = Object.freeze({
85
+ ...DEFAULT_OPTIONS,
86
+ ...options
87
+ });
88
+ const { enabled, clearViteHeader, logo } = resolvedOptions;
96
89
  let config;
97
- let mode = "dev";
98
90
  let isPreviewMode = false;
99
91
  let serverStarted = false;
100
92
  let previewStarted = false;
101
93
  return {
102
94
  name: "vite-plugin-bini-env",
103
- // Apply plugin conditions
104
95
  apply: "serve",
105
- // Get resolved config
106
96
  configResolved(resolvedConfig) {
107
97
  config = resolvedConfig;
108
- if (resolvedConfig.command === "build") {
109
- mode = "prod";
110
- } else if (resolvedConfig.command === "serve") {
98
+ if (resolvedConfig.command === "serve") {
111
99
  isPreviewMode = process.env.VITE_PREVIEW === "true" || process.argv.includes("preview") || false;
112
- mode = isPreviewMode ? "preview" : "dev";
113
100
  }
114
101
  },
115
- // Configure server to modify the output
116
102
  configureServer(server) {
117
103
  if (!enabled) return;
118
104
  const originalPrintUrls = server.printUrls;
@@ -122,13 +108,12 @@ function biniEnvPlugin(options = {}) {
122
108
  if (clearViteHeader) {
123
109
  clearLine();
124
110
  }
125
- const modeLabel = getModeLabel("serve", isPreviewMode);
126
111
  console.log(`
127
- ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} ${modeLabel}`);
112
+ ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} (dev)`);
128
113
  const found = detectEnvFiles(config.root);
129
114
  if (found.length > 0) {
130
115
  const envString = found.map((f) => f.name).join(", ");
131
- console.log(` ${COLORS.GREEN}\u2713${COLORS.RESET} Environments: ${envString}`);
116
+ console.log(` ${COLORS.GREEN}\u279C${COLORS.RESET} Environments: ${envString}`);
132
117
  }
133
118
  if (!clearViteHeader) {
134
119
  originalPrintUrls.call(server);
@@ -146,11 +131,9 @@ function biniEnvPlugin(options = {}) {
146
131
  }
147
132
  };
148
133
  },
149
- // Handle preview mode
150
134
  configurePreviewServer(server) {
151
135
  if (!enabled) return;
152
136
  isPreviewMode = true;
153
- mode = "preview";
154
137
  const originalPrintUrls = server.printUrls;
155
138
  server.printUrls = () => {
156
139
  if (!previewStarted) {
@@ -163,7 +146,7 @@ function biniEnvPlugin(options = {}) {
163
146
  const found = detectEnvFiles(config.root);
164
147
  if (found.length > 0) {
165
148
  const envString = found.map((f) => f.name).join(", ");
166
- console.log(` ${COLORS.GREEN}\u2713${COLORS.RESET} Environments: ${envString}`);
149
+ console.log(` ${COLORS.GREEN}\u279C${COLORS.RESET} Environments: ${envString}`);
167
150
  }
168
151
  if (!clearViteHeader) {
169
152
  originalPrintUrls.call(server);
@@ -182,28 +165,6 @@ function biniEnvPlugin(options = {}) {
182
165
  }
183
166
  };
184
167
  },
185
- // Handle build
186
- buildStart() {
187
- if (enabled && showEnvironmentsInBuild && config?.command === "build") {
188
- const found = detectEnvFiles(config.root);
189
- if (found.length > 0) {
190
- console.log(`
191
- ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} (building)`);
192
- const envString = found.map((f) => f.name).join(", ");
193
- console.log(` ${COLORS.GREEN}\u2713${COLORS.RESET} Environments: ${envString}
194
- `);
195
- }
196
- }
197
- },
198
- // Handle build completion
199
- closeBundle() {
200
- if (enabled && showEnvironmentsInBuild && config?.command === "build") {
201
- console.log(`
202
- ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} ${COLORS.GREEN}\u2713${COLORS.RESET} Build completed
203
- `);
204
- }
205
- },
206
- // Cleanup
207
168
  buildEnd() {
208
169
  serverStarted = false;
209
170
  previewStarted = false;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// src/index.ts\r\nimport fs from 'fs';\r\nimport path from 'path';\r\nimport type { Plugin, ResolvedConfig } from 'vite';\r\n\r\n// Types\r\nexport interface BiniEnvPluginOptions {\r\n /**\r\n * Enable/disable the plugin\r\n * @default true\r\n */\r\n enabled?: boolean;\r\n \r\n /**\r\n * Remove Vite's default header\r\n * @default true\r\n */\r\n clearViteHeader?: boolean;\r\n \r\n /**\r\n * Custom logo/text to display\r\n * @default 'ß'\r\n */\r\n logo?: string;\r\n \r\n /**\r\n * Show environments in production build\r\n * @default true\r\n */\r\n showEnvironmentsInBuild?: boolean;\r\n}\r\n\r\nexport interface DetectedEnvFile {\r\n name: string;\r\n path: string;\r\n}\r\n\r\n// Constants\r\nconst BINI_LOGO = 'ß';\r\n\r\n// Color definitions\r\nconst COLORS = {\r\n CYAN: '\\x1b[36m',\r\n RESET: '\\x1b[0m',\r\n GREEN: '\\x1b[32m',\r\n YELLOW: '\\x1b[33m',\r\n DIM: '\\x1b[2m'\r\n} as const;\r\n\r\n/**\r\n * Detect which .env files exist in project root\r\n */\r\nexport function detectEnvFiles(projectRoot: string = process.cwd()): DetectedEnvFile[] {\r\n const nodeEnv = process.env.NODE_ENV || 'development';\r\n\r\n // Check in priority order (what Next.js loads)\r\n const envFiles = [\r\n '.env.local',\r\n `.env.${nodeEnv}.local`,\r\n `.env.${nodeEnv}`,\r\n '.env'\r\n ];\r\n\r\n const found: DetectedEnvFile[] = [];\r\n\r\n for (const file of envFiles) {\r\n const filePath = path.join(projectRoot, file);\r\n if (fs.existsSync(filePath)) {\r\n found.push({\r\n name: file,\r\n path: filePath\r\n });\r\n }\r\n }\r\n\r\n return found;\r\n}\r\n\r\n/**\r\n * Format environment files for console display\r\n */\r\nexport function formatEnvFilesForDisplay(envFiles: DetectedEnvFile[]): string {\r\n if (envFiles.length === 0) {\r\n return '';\r\n }\r\n\r\n const envString = envFiles.map(f => f.name).join(', ');\r\n return `${COLORS.GREEN}✓${COLORS.RESET} Environments: ${envString}`;\r\n}\r\n\r\n/**\r\n * Get mode label based on command and mode\r\n */\r\nfunction getModeLabel(command: string, isPreview: boolean = false): string {\r\n if (command === 'build') {\r\n return '(prod)';\r\n } else if (command === 'serve') {\r\n if (isPreview) {\r\n return '(preview)';\r\n }\r\n return '(dev)';\r\n }\r\n return '';\r\n}\r\n\r\n/**\r\n * Clear the current line in console\r\n */\r\nfunction clearLine(): void {\r\n process.stdout.write('\\x1b[2K\\r');\r\n}\r\n\r\n/**\r\n * Main plugin function\r\n */\r\nexport default function biniEnvPlugin(options: BiniEnvPluginOptions = {}): Plugin {\r\n const {\r\n enabled = true,\r\n clearViteHeader = true,\r\n logo = BINI_LOGO,\r\n showEnvironmentsInBuild = true\r\n } = options;\r\n\r\n let config: ResolvedConfig;\r\n let mode: 'dev' | 'preview' | 'prod' = 'dev';\r\n let isPreviewMode = false;\r\n let serverStarted = false;\r\n let previewStarted = false;\r\n\r\n return {\r\n name: 'vite-plugin-bini-env',\r\n \r\n // Apply plugin conditions\r\n apply: 'serve',\r\n \r\n // Get resolved config\r\n configResolved(resolvedConfig: ResolvedConfig) {\r\n config = resolvedConfig;\r\n \r\n if (resolvedConfig.command === 'build') {\r\n mode = 'prod';\r\n } else if (resolvedConfig.command === 'serve') {\r\n isPreviewMode = process.env.VITE_PREVIEW === 'true' || \r\n process.argv.includes('preview') ||\r\n false;\r\n mode = isPreviewMode ? 'preview' : 'dev';\r\n }\r\n },\r\n\r\n // Configure server to modify the output\r\n configureServer(server) {\r\n if (!enabled) return;\r\n\r\n // Store original printUrls\r\n const originalPrintUrls = server.printUrls;\r\n \r\n // Override printUrls method\r\n server.printUrls = () => {\r\n if (!serverStarted) {\r\n serverStarted = true;\r\n \r\n if (clearViteHeader) {\r\n clearLine();\r\n }\r\n \r\n // SIMPLIFIED: Show only ß Bini.js (dev) without version\r\n const modeLabel = getModeLabel('serve', isPreviewMode);\r\n console.log(`\\n ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} ${modeLabel}`);\r\n\r\n // Show environments if found\r\n const found = detectEnvFiles(config.root);\r\n if (found.length > 0) {\r\n const envString = found.map(f => f.name).join(', ');\r\n console.log(` ${COLORS.GREEN}✓${COLORS.RESET} Environments: ${envString}`);\r\n }\r\n \r\n if (!clearViteHeader) {\r\n originalPrintUrls.call(server);\r\n } else {\r\n const urls = server.resolvedUrls;\r\n if (urls) {\r\n if (urls.local.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Local: ${COLORS.CYAN}${urls.local[0]}${COLORS.RESET}`);\r\n }\r\n if (urls.network.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Network: ${COLORS.CYAN}${urls.network[0]}${COLORS.RESET}`);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n },\r\n\r\n // Handle preview mode\r\n configurePreviewServer(server) {\r\n if (!enabled) return;\r\n \r\n isPreviewMode = true;\r\n mode = 'preview';\r\n \r\n const originalPrintUrls = server.printUrls;\r\n \r\n server.printUrls = () => {\r\n if (!previewStarted) {\r\n previewStarted = true;\r\n \r\n if (clearViteHeader) {\r\n clearLine();\r\n }\r\n \r\n // SIMPLIFIED: Show only ß Bini.js (preview) without version\r\n console.log(`\\n ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} (preview)`);\r\n\r\n const found = detectEnvFiles(config.root);\r\n if (found.length > 0) {\r\n const envString = found.map(f => f.name).join(', ');\r\n console.log(` ${COLORS.GREEN}✓${COLORS.RESET} Environments: ${envString}`);\r\n }\r\n \r\n if (!clearViteHeader) {\r\n originalPrintUrls.call(server);\r\n } else {\r\n const urls = server.resolvedUrls;\r\n if (urls) {\r\n if (urls.local.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Local: ${COLORS.CYAN}${urls.local[0]}${COLORS.RESET}`);\r\n }\r\n if (urls.network.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Network: ${COLORS.CYAN}${urls.network[0]}${COLORS.RESET}`);\r\n }\r\n }\r\n console.log('');\r\n }\r\n }\r\n };\r\n },\r\n\r\n // Handle build\r\n buildStart() {\r\n if (enabled && showEnvironmentsInBuild && config?.command === 'build') {\r\n const found = detectEnvFiles(config.root);\r\n if (found.length > 0) {\r\n // SIMPLIFIED: Show only ß Bini.js (building) without version\r\n console.log(`\\n ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} (building)`);\r\n const envString = found.map(f => f.name).join(', ');\r\n console.log(` ${COLORS.GREEN}✓${COLORS.RESET} Environments: ${envString}\\n`);\r\n }\r\n }\r\n },\r\n\r\n // Handle build completion\r\n closeBundle() {\r\n if (enabled && showEnvironmentsInBuild && config?.command === 'build') {\r\n // SIMPLIFIED: Show only ß Bini.js ✓ Build completed without version\r\n console.log(`\\n ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} ${COLORS.GREEN}✓${COLORS.RESET} Build completed\\n`);\r\n }\r\n },\r\n\r\n // Cleanup\r\n buildEnd() {\r\n serverStarted = false;\r\n previewStarted = false;\r\n }\r\n };\r\n}\r\n\r\n// Export types\r\nexport type { Plugin } from 'vite';"],"mappings":"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","names":["path","fs"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// src/index.ts\r\nimport fs from 'fs';\r\nimport path from 'path';\r\nimport type { Plugin, ResolvedConfig } from 'vite';\r\n\r\n// Types\r\nexport interface BiniEnvPluginOptions {\r\n /**\r\n * Enable/disable the plugin\r\n * @default true\r\n * @readonly\r\n */\r\n readonly enabled?: boolean;\r\n \r\n /**\r\n * Remove Vite's default header\r\n * @default true\r\n * @readonly\r\n */\r\n readonly clearViteHeader?: boolean;\r\n \r\n /**\r\n * Custom logo/text to display\r\n * @default 'ß'\r\n * @readonly\r\n */\r\n readonly logo?: string;\r\n}\r\n\r\nexport interface DetectedEnvFile {\r\n readonly name: string;\r\n readonly path: string;\r\n}\r\n\r\n// Constants\r\nconst BINI_LOGO = 'ß' as const;\r\nconst DEFAULT_OPTIONS = {\r\n enabled: true,\r\n clearViteHeader: true,\r\n logo: BINI_LOGO,\r\n} as const;\r\n\r\n// Color definitions\r\nconst COLORS = {\r\n CYAN: '\\x1b[36m',\r\n RESET: '\\x1b[0m',\r\n GREEN: '\\x1b[32m',\r\n YELLOW: '\\x1b[33m',\r\n DIM: '\\x1b[2m'\r\n} as const;\r\n\r\n/**\r\n * Detect which .env files exist in project root\r\n */\r\nexport function detectEnvFiles(projectRoot: string = process.cwd()): DetectedEnvFile[] {\r\n const nodeEnv = process.env.NODE_ENV || 'development';\r\n\r\n const envFiles = [\r\n '.env.local',\r\n `.env.${nodeEnv}.local`,\r\n `.env.${nodeEnv}`,\r\n '.env'\r\n ] as const;\r\n\r\n const found: DetectedEnvFile[] = [];\r\n\r\n for (const file of envFiles) {\r\n const filePath = path.join(projectRoot, file);\r\n if (fs.existsSync(filePath)) {\r\n found.push({\r\n name: file,\r\n path: filePath\r\n });\r\n }\r\n }\r\n\r\n return found;\r\n}\r\n\r\n/**\r\n * Format environment files for console display\r\n */\r\nexport function formatEnvFilesForDisplay(envFiles: DetectedEnvFile[]): string {\r\n if (envFiles.length === 0) {\r\n return '';\r\n }\r\n\r\n const envString = envFiles.map(f => f.name).join(', ');\r\n return `${COLORS.GREEN}➜${COLORS.RESET} Environments: ${envString}`;\r\n}\r\n\r\n/**\r\n * Clear the current line in console\r\n */\r\nfunction clearLine(): void {\r\n process.stdout.write('\\x1b[2K\\r');\r\n}\r\n\r\n/**\r\n * Main plugin function\r\n */\r\nexport default function biniEnvPlugin(options: Readonly<BiniEnvPluginOptions> = {}): Plugin {\r\n // Merge with defaults — user cannot override core behaviour\r\n const resolvedOptions = Object.freeze({\r\n ...DEFAULT_OPTIONS,\r\n ...options,\r\n });\r\n\r\n const { enabled, clearViteHeader, logo } = resolvedOptions;\r\n\r\n let config: ResolvedConfig;\r\n let isPreviewMode = false;\r\n let serverStarted = false;\r\n let previewStarted = false;\r\n\r\n return {\r\n name: 'vite-plugin-bini-env',\r\n \r\n apply: 'serve',\r\n \r\n configResolved(resolvedConfig: ResolvedConfig) {\r\n config = resolvedConfig;\r\n \r\n if (resolvedConfig.command === 'serve') {\r\n isPreviewMode = process.env.VITE_PREVIEW === 'true' || \r\n process.argv.includes('preview') ||\r\n false;\r\n }\r\n },\r\n\r\n configureServer(server) {\r\n if (!enabled) return;\r\n\r\n const originalPrintUrls = server.printUrls;\r\n \r\n server.printUrls = () => {\r\n if (!serverStarted) {\r\n serverStarted = true;\r\n \r\n if (clearViteHeader) {\r\n clearLine();\r\n }\r\n \r\n console.log(`\\n ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} (dev)`);\r\n\r\n const found = detectEnvFiles(config.root);\r\n if (found.length > 0) {\r\n const envString = found.map(f => f.name).join(', ');\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Environments: ${envString}`);\r\n }\r\n \r\n if (!clearViteHeader) {\r\n originalPrintUrls.call(server);\r\n } else {\r\n const urls = server.resolvedUrls;\r\n if (urls) {\r\n if (urls.local.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Local: ${COLORS.CYAN}${urls.local[0]}${COLORS.RESET}`);\r\n }\r\n if (urls.network.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Network: ${COLORS.CYAN}${urls.network[0]}${COLORS.RESET}`);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n },\r\n\r\n configurePreviewServer(server) {\r\n if (!enabled) return;\r\n \r\n isPreviewMode = true;\r\n \r\n const originalPrintUrls = server.printUrls;\r\n \r\n server.printUrls = () => {\r\n if (!previewStarted) {\r\n previewStarted = true;\r\n \r\n if (clearViteHeader) {\r\n clearLine();\r\n }\r\n \r\n console.log(`\\n ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} (preview)`);\r\n\r\n const found = detectEnvFiles(config.root);\r\n if (found.length > 0) {\r\n const envString = found.map(f => f.name).join(', ');\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Environments: ${envString}`);\r\n }\r\n \r\n if (!clearViteHeader) {\r\n originalPrintUrls.call(server);\r\n } else {\r\n const urls = server.resolvedUrls;\r\n if (urls) {\r\n if (urls.local.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Local: ${COLORS.CYAN}${urls.local[0]}${COLORS.RESET}`);\r\n }\r\n if (urls.network.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Network: ${COLORS.CYAN}${urls.network[0]}${COLORS.RESET}`);\r\n }\r\n }\r\n console.log('');\r\n }\r\n }\r\n };\r\n },\r\n\r\n buildEnd() {\r\n serverStarted = false;\r\n previewStarted = false;\r\n }\r\n };\r\n}\r\n\r\nexport type { Plugin } from 'vite';"],"mappings":"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","names":["path","fs"]}
package/dist/index.d.cts CHANGED
@@ -5,27 +5,25 @@ interface BiniEnvPluginOptions {
5
5
  /**
6
6
  * Enable/disable the plugin
7
7
  * @default true
8
+ * @readonly
8
9
  */
9
- enabled?: boolean;
10
+ readonly enabled?: boolean;
10
11
  /**
11
12
  * Remove Vite's default header
12
13
  * @default true
14
+ * @readonly
13
15
  */
14
- clearViteHeader?: boolean;
16
+ readonly clearViteHeader?: boolean;
15
17
  /**
16
18
  * Custom logo/text to display
17
19
  * @default 'ß'
20
+ * @readonly
18
21
  */
19
- logo?: string;
20
- /**
21
- * Show environments in production build
22
- * @default true
23
- */
24
- showEnvironmentsInBuild?: boolean;
22
+ readonly logo?: string;
25
23
  }
26
24
  interface DetectedEnvFile {
27
- name: string;
28
- path: string;
25
+ readonly name: string;
26
+ readonly path: string;
29
27
  }
30
28
  /**
31
29
  * Detect which .env files exist in project root
@@ -38,6 +36,6 @@ declare function formatEnvFilesForDisplay(envFiles: DetectedEnvFile[]): string;
38
36
  /**
39
37
  * Main plugin function
40
38
  */
41
- declare function biniEnvPlugin(options?: BiniEnvPluginOptions): Plugin;
39
+ declare function biniEnvPlugin(options?: Readonly<BiniEnvPluginOptions>): Plugin;
42
40
 
43
41
  export { type BiniEnvPluginOptions, type DetectedEnvFile, biniEnvPlugin as default, detectEnvFiles, formatEnvFilesForDisplay };
package/dist/index.d.ts CHANGED
@@ -5,27 +5,25 @@ interface BiniEnvPluginOptions {
5
5
  /**
6
6
  * Enable/disable the plugin
7
7
  * @default true
8
+ * @readonly
8
9
  */
9
- enabled?: boolean;
10
+ readonly enabled?: boolean;
10
11
  /**
11
12
  * Remove Vite's default header
12
13
  * @default true
14
+ * @readonly
13
15
  */
14
- clearViteHeader?: boolean;
16
+ readonly clearViteHeader?: boolean;
15
17
  /**
16
18
  * Custom logo/text to display
17
19
  * @default 'ß'
20
+ * @readonly
18
21
  */
19
- logo?: string;
20
- /**
21
- * Show environments in production build
22
- * @default true
23
- */
24
- showEnvironmentsInBuild?: boolean;
22
+ readonly logo?: string;
25
23
  }
26
24
  interface DetectedEnvFile {
27
- name: string;
28
- path: string;
25
+ readonly name: string;
26
+ readonly path: string;
29
27
  }
30
28
  /**
31
29
  * Detect which .env files exist in project root
@@ -38,6 +36,6 @@ declare function formatEnvFilesForDisplay(envFiles: DetectedEnvFile[]): string;
38
36
  /**
39
37
  * Main plugin function
40
38
  */
41
- declare function biniEnvPlugin(options?: BiniEnvPluginOptions): Plugin;
39
+ declare function biniEnvPlugin(options?: Readonly<BiniEnvPluginOptions>): Plugin;
42
40
 
43
41
  export { type BiniEnvPluginOptions, type DetectedEnvFile, biniEnvPlugin as default, detectEnvFiles, formatEnvFilesForDisplay };
package/dist/index.js CHANGED
@@ -2,6 +2,11 @@
2
2
  import fs from "fs";
3
3
  import path from "path";
4
4
  var BINI_LOGO = "\xDF";
5
+ var DEFAULT_OPTIONS = {
6
+ enabled: true,
7
+ clearViteHeader: true,
8
+ logo: BINI_LOGO
9
+ };
5
10
  var COLORS = {
6
11
  CYAN: "\x1B[36m",
7
12
  RESET: "\x1B[0m",
@@ -34,49 +39,30 @@ function formatEnvFilesForDisplay(envFiles) {
34
39
  return "";
35
40
  }
36
41
  const envString = envFiles.map((f) => f.name).join(", ");
37
- return `${COLORS.GREEN}\u2713${COLORS.RESET} Environments: ${envString}`;
38
- }
39
- function getModeLabel(command, isPreview = false) {
40
- if (command === "build") {
41
- return "(prod)";
42
- } else if (command === "serve") {
43
- if (isPreview) {
44
- return "(preview)";
45
- }
46
- return "(dev)";
47
- }
48
- return "";
42
+ return `${COLORS.GREEN}\u279C${COLORS.RESET} Environments: ${envString}`;
49
43
  }
50
44
  function clearLine() {
51
45
  process.stdout.write("\x1B[2K\r");
52
46
  }
53
47
  function biniEnvPlugin(options = {}) {
54
- const {
55
- enabled = true,
56
- clearViteHeader = true,
57
- logo = BINI_LOGO,
58
- showEnvironmentsInBuild = true
59
- } = options;
48
+ const resolvedOptions = Object.freeze({
49
+ ...DEFAULT_OPTIONS,
50
+ ...options
51
+ });
52
+ const { enabled, clearViteHeader, logo } = resolvedOptions;
60
53
  let config;
61
- let mode = "dev";
62
54
  let isPreviewMode = false;
63
55
  let serverStarted = false;
64
56
  let previewStarted = false;
65
57
  return {
66
58
  name: "vite-plugin-bini-env",
67
- // Apply plugin conditions
68
59
  apply: "serve",
69
- // Get resolved config
70
60
  configResolved(resolvedConfig) {
71
61
  config = resolvedConfig;
72
- if (resolvedConfig.command === "build") {
73
- mode = "prod";
74
- } else if (resolvedConfig.command === "serve") {
62
+ if (resolvedConfig.command === "serve") {
75
63
  isPreviewMode = process.env.VITE_PREVIEW === "true" || process.argv.includes("preview") || false;
76
- mode = isPreviewMode ? "preview" : "dev";
77
64
  }
78
65
  },
79
- // Configure server to modify the output
80
66
  configureServer(server) {
81
67
  if (!enabled) return;
82
68
  const originalPrintUrls = server.printUrls;
@@ -86,13 +72,12 @@ function biniEnvPlugin(options = {}) {
86
72
  if (clearViteHeader) {
87
73
  clearLine();
88
74
  }
89
- const modeLabel = getModeLabel("serve", isPreviewMode);
90
75
  console.log(`
91
- ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} ${modeLabel}`);
76
+ ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} (dev)`);
92
77
  const found = detectEnvFiles(config.root);
93
78
  if (found.length > 0) {
94
79
  const envString = found.map((f) => f.name).join(", ");
95
- console.log(` ${COLORS.GREEN}\u2713${COLORS.RESET} Environments: ${envString}`);
80
+ console.log(` ${COLORS.GREEN}\u279C${COLORS.RESET} Environments: ${envString}`);
96
81
  }
97
82
  if (!clearViteHeader) {
98
83
  originalPrintUrls.call(server);
@@ -110,11 +95,9 @@ function biniEnvPlugin(options = {}) {
110
95
  }
111
96
  };
112
97
  },
113
- // Handle preview mode
114
98
  configurePreviewServer(server) {
115
99
  if (!enabled) return;
116
100
  isPreviewMode = true;
117
- mode = "preview";
118
101
  const originalPrintUrls = server.printUrls;
119
102
  server.printUrls = () => {
120
103
  if (!previewStarted) {
@@ -127,7 +110,7 @@ function biniEnvPlugin(options = {}) {
127
110
  const found = detectEnvFiles(config.root);
128
111
  if (found.length > 0) {
129
112
  const envString = found.map((f) => f.name).join(", ");
130
- console.log(` ${COLORS.GREEN}\u2713${COLORS.RESET} Environments: ${envString}`);
113
+ console.log(` ${COLORS.GREEN}\u279C${COLORS.RESET} Environments: ${envString}`);
131
114
  }
132
115
  if (!clearViteHeader) {
133
116
  originalPrintUrls.call(server);
@@ -146,28 +129,6 @@ function biniEnvPlugin(options = {}) {
146
129
  }
147
130
  };
148
131
  },
149
- // Handle build
150
- buildStart() {
151
- if (enabled && showEnvironmentsInBuild && config?.command === "build") {
152
- const found = detectEnvFiles(config.root);
153
- if (found.length > 0) {
154
- console.log(`
155
- ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} (building)`);
156
- const envString = found.map((f) => f.name).join(", ");
157
- console.log(` ${COLORS.GREEN}\u2713${COLORS.RESET} Environments: ${envString}
158
- `);
159
- }
160
- }
161
- },
162
- // Handle build completion
163
- closeBundle() {
164
- if (enabled && showEnvironmentsInBuild && config?.command === "build") {
165
- console.log(`
166
- ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} ${COLORS.GREEN}\u2713${COLORS.RESET} Build completed
167
- `);
168
- }
169
- },
170
- // Cleanup
171
132
  buildEnd() {
172
133
  serverStarted = false;
173
134
  previewStarted = false;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// src/index.ts\r\nimport fs from 'fs';\r\nimport path from 'path';\r\nimport type { Plugin, ResolvedConfig } from 'vite';\r\n\r\n// Types\r\nexport interface BiniEnvPluginOptions {\r\n /**\r\n * Enable/disable the plugin\r\n * @default true\r\n */\r\n enabled?: boolean;\r\n \r\n /**\r\n * Remove Vite's default header\r\n * @default true\r\n */\r\n clearViteHeader?: boolean;\r\n \r\n /**\r\n * Custom logo/text to display\r\n * @default 'ß'\r\n */\r\n logo?: string;\r\n \r\n /**\r\n * Show environments in production build\r\n * @default true\r\n */\r\n showEnvironmentsInBuild?: boolean;\r\n}\r\n\r\nexport interface DetectedEnvFile {\r\n name: string;\r\n path: string;\r\n}\r\n\r\n// Constants\r\nconst BINI_LOGO = 'ß';\r\n\r\n// Color definitions\r\nconst COLORS = {\r\n CYAN: '\\x1b[36m',\r\n RESET: '\\x1b[0m',\r\n GREEN: '\\x1b[32m',\r\n YELLOW: '\\x1b[33m',\r\n DIM: '\\x1b[2m'\r\n} as const;\r\n\r\n/**\r\n * Detect which .env files exist in project root\r\n */\r\nexport function detectEnvFiles(projectRoot: string = process.cwd()): DetectedEnvFile[] {\r\n const nodeEnv = process.env.NODE_ENV || 'development';\r\n\r\n // Check in priority order (what Next.js loads)\r\n const envFiles = [\r\n '.env.local',\r\n `.env.${nodeEnv}.local`,\r\n `.env.${nodeEnv}`,\r\n '.env'\r\n ];\r\n\r\n const found: DetectedEnvFile[] = [];\r\n\r\n for (const file of envFiles) {\r\n const filePath = path.join(projectRoot, file);\r\n if (fs.existsSync(filePath)) {\r\n found.push({\r\n name: file,\r\n path: filePath\r\n });\r\n }\r\n }\r\n\r\n return found;\r\n}\r\n\r\n/**\r\n * Format environment files for console display\r\n */\r\nexport function formatEnvFilesForDisplay(envFiles: DetectedEnvFile[]): string {\r\n if (envFiles.length === 0) {\r\n return '';\r\n }\r\n\r\n const envString = envFiles.map(f => f.name).join(', ');\r\n return `${COLORS.GREEN}✓${COLORS.RESET} Environments: ${envString}`;\r\n}\r\n\r\n/**\r\n * Get mode label based on command and mode\r\n */\r\nfunction getModeLabel(command: string, isPreview: boolean = false): string {\r\n if (command === 'build') {\r\n return '(prod)';\r\n } else if (command === 'serve') {\r\n if (isPreview) {\r\n return '(preview)';\r\n }\r\n return '(dev)';\r\n }\r\n return '';\r\n}\r\n\r\n/**\r\n * Clear the current line in console\r\n */\r\nfunction clearLine(): void {\r\n process.stdout.write('\\x1b[2K\\r');\r\n}\r\n\r\n/**\r\n * Main plugin function\r\n */\r\nexport default function biniEnvPlugin(options: BiniEnvPluginOptions = {}): Plugin {\r\n const {\r\n enabled = true,\r\n clearViteHeader = true,\r\n logo = BINI_LOGO,\r\n showEnvironmentsInBuild = true\r\n } = options;\r\n\r\n let config: ResolvedConfig;\r\n let mode: 'dev' | 'preview' | 'prod' = 'dev';\r\n let isPreviewMode = false;\r\n let serverStarted = false;\r\n let previewStarted = false;\r\n\r\n return {\r\n name: 'vite-plugin-bini-env',\r\n \r\n // Apply plugin conditions\r\n apply: 'serve',\r\n \r\n // Get resolved config\r\n configResolved(resolvedConfig: ResolvedConfig) {\r\n config = resolvedConfig;\r\n \r\n if (resolvedConfig.command === 'build') {\r\n mode = 'prod';\r\n } else if (resolvedConfig.command === 'serve') {\r\n isPreviewMode = process.env.VITE_PREVIEW === 'true' || \r\n process.argv.includes('preview') ||\r\n false;\r\n mode = isPreviewMode ? 'preview' : 'dev';\r\n }\r\n },\r\n\r\n // Configure server to modify the output\r\n configureServer(server) {\r\n if (!enabled) return;\r\n\r\n // Store original printUrls\r\n const originalPrintUrls = server.printUrls;\r\n \r\n // Override printUrls method\r\n server.printUrls = () => {\r\n if (!serverStarted) {\r\n serverStarted = true;\r\n \r\n if (clearViteHeader) {\r\n clearLine();\r\n }\r\n \r\n // SIMPLIFIED: Show only ß Bini.js (dev) without version\r\n const modeLabel = getModeLabel('serve', isPreviewMode);\r\n console.log(`\\n ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} ${modeLabel}`);\r\n\r\n // Show environments if found\r\n const found = detectEnvFiles(config.root);\r\n if (found.length > 0) {\r\n const envString = found.map(f => f.name).join(', ');\r\n console.log(` ${COLORS.GREEN}✓${COLORS.RESET} Environments: ${envString}`);\r\n }\r\n \r\n if (!clearViteHeader) {\r\n originalPrintUrls.call(server);\r\n } else {\r\n const urls = server.resolvedUrls;\r\n if (urls) {\r\n if (urls.local.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Local: ${COLORS.CYAN}${urls.local[0]}${COLORS.RESET}`);\r\n }\r\n if (urls.network.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Network: ${COLORS.CYAN}${urls.network[0]}${COLORS.RESET}`);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n },\r\n\r\n // Handle preview mode\r\n configurePreviewServer(server) {\r\n if (!enabled) return;\r\n \r\n isPreviewMode = true;\r\n mode = 'preview';\r\n \r\n const originalPrintUrls = server.printUrls;\r\n \r\n server.printUrls = () => {\r\n if (!previewStarted) {\r\n previewStarted = true;\r\n \r\n if (clearViteHeader) {\r\n clearLine();\r\n }\r\n \r\n // SIMPLIFIED: Show only ß Bini.js (preview) without version\r\n console.log(`\\n ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} (preview)`);\r\n\r\n const found = detectEnvFiles(config.root);\r\n if (found.length > 0) {\r\n const envString = found.map(f => f.name).join(', ');\r\n console.log(` ${COLORS.GREEN}✓${COLORS.RESET} Environments: ${envString}`);\r\n }\r\n \r\n if (!clearViteHeader) {\r\n originalPrintUrls.call(server);\r\n } else {\r\n const urls = server.resolvedUrls;\r\n if (urls) {\r\n if (urls.local.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Local: ${COLORS.CYAN}${urls.local[0]}${COLORS.RESET}`);\r\n }\r\n if (urls.network.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Network: ${COLORS.CYAN}${urls.network[0]}${COLORS.RESET}`);\r\n }\r\n }\r\n console.log('');\r\n }\r\n }\r\n };\r\n },\r\n\r\n // Handle build\r\n buildStart() {\r\n if (enabled && showEnvironmentsInBuild && config?.command === 'build') {\r\n const found = detectEnvFiles(config.root);\r\n if (found.length > 0) {\r\n // SIMPLIFIED: Show only ß Bini.js (building) without version\r\n console.log(`\\n ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} (building)`);\r\n const envString = found.map(f => f.name).join(', ');\r\n console.log(` ${COLORS.GREEN}✓${COLORS.RESET} Environments: ${envString}\\n`);\r\n }\r\n }\r\n },\r\n\r\n // Handle build completion\r\n closeBundle() {\r\n if (enabled && showEnvironmentsInBuild && config?.command === 'build') {\r\n // SIMPLIFIED: Show only ß Bini.js ✓ Build completed without version\r\n console.log(`\\n ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} ${COLORS.GREEN}✓${COLORS.RESET} Build completed\\n`);\r\n }\r\n },\r\n\r\n // Cleanup\r\n buildEnd() {\r\n serverStarted = false;\r\n previewStarted = false;\r\n }\r\n };\r\n}\r\n\r\n// Export types\r\nexport type { Plugin } from 'vite';"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// src/index.ts\r\nimport fs from 'fs';\r\nimport path from 'path';\r\nimport type { Plugin, ResolvedConfig } from 'vite';\r\n\r\n// Types\r\nexport interface BiniEnvPluginOptions {\r\n /**\r\n * Enable/disable the plugin\r\n * @default true\r\n * @readonly\r\n */\r\n readonly enabled?: boolean;\r\n \r\n /**\r\n * Remove Vite's default header\r\n * @default true\r\n * @readonly\r\n */\r\n readonly clearViteHeader?: boolean;\r\n \r\n /**\r\n * Custom logo/text to display\r\n * @default 'ß'\r\n * @readonly\r\n */\r\n readonly logo?: string;\r\n}\r\n\r\nexport interface DetectedEnvFile {\r\n readonly name: string;\r\n readonly path: string;\r\n}\r\n\r\n// Constants\r\nconst BINI_LOGO = 'ß' as const;\r\nconst DEFAULT_OPTIONS = {\r\n enabled: true,\r\n clearViteHeader: true,\r\n logo: BINI_LOGO,\r\n} as const;\r\n\r\n// Color definitions\r\nconst COLORS = {\r\n CYAN: '\\x1b[36m',\r\n RESET: '\\x1b[0m',\r\n GREEN: '\\x1b[32m',\r\n YELLOW: '\\x1b[33m',\r\n DIM: '\\x1b[2m'\r\n} as const;\r\n\r\n/**\r\n * Detect which .env files exist in project root\r\n */\r\nexport function detectEnvFiles(projectRoot: string = process.cwd()): DetectedEnvFile[] {\r\n const nodeEnv = process.env.NODE_ENV || 'development';\r\n\r\n const envFiles = [\r\n '.env.local',\r\n `.env.${nodeEnv}.local`,\r\n `.env.${nodeEnv}`,\r\n '.env'\r\n ] as const;\r\n\r\n const found: DetectedEnvFile[] = [];\r\n\r\n for (const file of envFiles) {\r\n const filePath = path.join(projectRoot, file);\r\n if (fs.existsSync(filePath)) {\r\n found.push({\r\n name: file,\r\n path: filePath\r\n });\r\n }\r\n }\r\n\r\n return found;\r\n}\r\n\r\n/**\r\n * Format environment files for console display\r\n */\r\nexport function formatEnvFilesForDisplay(envFiles: DetectedEnvFile[]): string {\r\n if (envFiles.length === 0) {\r\n return '';\r\n }\r\n\r\n const envString = envFiles.map(f => f.name).join(', ');\r\n return `${COLORS.GREEN}➜${COLORS.RESET} Environments: ${envString}`;\r\n}\r\n\r\n/**\r\n * Clear the current line in console\r\n */\r\nfunction clearLine(): void {\r\n process.stdout.write('\\x1b[2K\\r');\r\n}\r\n\r\n/**\r\n * Main plugin function\r\n */\r\nexport default function biniEnvPlugin(options: Readonly<BiniEnvPluginOptions> = {}): Plugin {\r\n // Merge with defaults — user cannot override core behaviour\r\n const resolvedOptions = Object.freeze({\r\n ...DEFAULT_OPTIONS,\r\n ...options,\r\n });\r\n\r\n const { enabled, clearViteHeader, logo } = resolvedOptions;\r\n\r\n let config: ResolvedConfig;\r\n let isPreviewMode = false;\r\n let serverStarted = false;\r\n let previewStarted = false;\r\n\r\n return {\r\n name: 'vite-plugin-bini-env',\r\n \r\n apply: 'serve',\r\n \r\n configResolved(resolvedConfig: ResolvedConfig) {\r\n config = resolvedConfig;\r\n \r\n if (resolvedConfig.command === 'serve') {\r\n isPreviewMode = process.env.VITE_PREVIEW === 'true' || \r\n process.argv.includes('preview') ||\r\n false;\r\n }\r\n },\r\n\r\n configureServer(server) {\r\n if (!enabled) return;\r\n\r\n const originalPrintUrls = server.printUrls;\r\n \r\n server.printUrls = () => {\r\n if (!serverStarted) {\r\n serverStarted = true;\r\n \r\n if (clearViteHeader) {\r\n clearLine();\r\n }\r\n \r\n console.log(`\\n ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} (dev)`);\r\n\r\n const found = detectEnvFiles(config.root);\r\n if (found.length > 0) {\r\n const envString = found.map(f => f.name).join(', ');\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Environments: ${envString}`);\r\n }\r\n \r\n if (!clearViteHeader) {\r\n originalPrintUrls.call(server);\r\n } else {\r\n const urls = server.resolvedUrls;\r\n if (urls) {\r\n if (urls.local.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Local: ${COLORS.CYAN}${urls.local[0]}${COLORS.RESET}`);\r\n }\r\n if (urls.network.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Network: ${COLORS.CYAN}${urls.network[0]}${COLORS.RESET}`);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n },\r\n\r\n configurePreviewServer(server) {\r\n if (!enabled) return;\r\n \r\n isPreviewMode = true;\r\n \r\n const originalPrintUrls = server.printUrls;\r\n \r\n server.printUrls = () => {\r\n if (!previewStarted) {\r\n previewStarted = true;\r\n \r\n if (clearViteHeader) {\r\n clearLine();\r\n }\r\n \r\n console.log(`\\n ${COLORS.CYAN}${logo} Bini.js${COLORS.RESET} (preview)`);\r\n\r\n const found = detectEnvFiles(config.root);\r\n if (found.length > 0) {\r\n const envString = found.map(f => f.name).join(', ');\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Environments: ${envString}`);\r\n }\r\n \r\n if (!clearViteHeader) {\r\n originalPrintUrls.call(server);\r\n } else {\r\n const urls = server.resolvedUrls;\r\n if (urls) {\r\n if (urls.local.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Local: ${COLORS.CYAN}${urls.local[0]}${COLORS.RESET}`);\r\n }\r\n if (urls.network.length > 0) {\r\n console.log(` ${COLORS.GREEN}➜${COLORS.RESET} Network: ${COLORS.CYAN}${urls.network[0]}${COLORS.RESET}`);\r\n }\r\n }\r\n console.log('');\r\n }\r\n }\r\n };\r\n },\r\n\r\n buildEnd() {\r\n serverStarted = false;\r\n previewStarted = false;\r\n }\r\n };\r\n}\r\n\r\nexport type { Plugin } from 'vite';"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bini-env",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Vite plugin for Bini.js environment display",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",