elit 3.4.4 → 3.4.5
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 +69 -1
- package/dist/build.js +3 -46
- package/dist/build.js.map +1 -1
- package/dist/build.mjs +3 -46
- package/dist/build.mjs.map +1 -1
- package/dist/cli.js +1217 -242
- package/dist/config.d.mts +41 -2
- package/dist/config.d.ts +40 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +11 -63
- package/dist/config.js.map +1 -1
- package/dist/config.mjs +10 -63
- package/dist/config.mjs.map +1 -1
- package/dist/coverage.js +3 -46
- package/dist/coverage.js.map +1 -1
- package/dist/coverage.mjs +3 -46
- package/dist/coverage.mjs.map +1 -1
- package/dist/desktop-cli.d.ts.map +1 -1
- package/dist/fs.d.ts.map +1 -1
- package/dist/fs.js +5 -60
- package/dist/fs.js.map +1 -1
- package/dist/fs.mjs +5 -60
- package/dist/fs.mjs.map +1 -1
- package/dist/server.js +5 -60
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +5 -60
- package/dist/server.mjs.map +1 -1
- package/dist/test-runtime.js +3 -11
- package/dist/test-runtime.js.map +1 -1
- package/dist/test-runtime.mjs +3 -11
- package/dist/test-runtime.mjs.map +1 -1
- package/dist/test.js +4 -51
- package/dist/test.js.map +1 -1
- package/dist/test.mjs +4 -51
- package/dist/test.mjs.map +1 -1
- package/dist/wapk-cli.d.ts +54 -0
- package/dist/wapk-cli.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/cli.ts +27 -5
- package/src/config.ts +58 -5
- package/src/desktop-cli.ts +311 -11
- package/src/fs.ts +5 -74
- package/src/wapk-cli.ts +997 -0
package/dist/config.mjs
CHANGED
|
@@ -104,12 +104,8 @@ async function processDenoEntriesAsync(iterator, withFileTypes) {
|
|
|
104
104
|
}
|
|
105
105
|
async function readFile(path, options) {
|
|
106
106
|
const opts = parseOptions(options, {});
|
|
107
|
-
if (isNode) {
|
|
107
|
+
if (isNode || isBun) {
|
|
108
108
|
return fsPromises.readFile(path, opts);
|
|
109
|
-
} else if (isBun) {
|
|
110
|
-
const file = Bun.file(path);
|
|
111
|
-
const content = await file.arrayBuffer();
|
|
112
|
-
return decodeContent(content, opts.encoding);
|
|
113
109
|
} else if (isDeno) {
|
|
114
110
|
const content = await Deno.readFile(path);
|
|
115
111
|
return decodeContent(content, opts.encoding);
|
|
@@ -118,12 +114,8 @@ async function readFile(path, options) {
|
|
|
118
114
|
}
|
|
119
115
|
function readFileSync(path, options) {
|
|
120
116
|
const opts = parseOptions(options, {});
|
|
121
|
-
if (isNode) {
|
|
117
|
+
if (isNode || isBun) {
|
|
122
118
|
return fs.readFileSync(path, opts);
|
|
123
|
-
} else if (isBun) {
|
|
124
|
-
const file = Bun.file(path);
|
|
125
|
-
const content = file.arrayBuffer();
|
|
126
|
-
return decodeContent(content, opts.encoding);
|
|
127
119
|
} else if (isDeno) {
|
|
128
120
|
const content = Deno.readFileSync(path);
|
|
129
121
|
return decodeContent(content, opts.encoding);
|
|
@@ -195,16 +187,8 @@ function existsSync(path) {
|
|
|
195
187
|
}
|
|
196
188
|
}
|
|
197
189
|
async function stat(path) {
|
|
198
|
-
if (isNode) {
|
|
190
|
+
if (isNode || isBun) {
|
|
199
191
|
return fsPromises.stat(path);
|
|
200
|
-
} else if (isBun) {
|
|
201
|
-
const file = Bun.file(path);
|
|
202
|
-
const size = file.size;
|
|
203
|
-
const exists2 = await file.exists();
|
|
204
|
-
if (!exists2) {
|
|
205
|
-
throw new Error(`ENOENT: no such file or directory, stat '${path}'`);
|
|
206
|
-
}
|
|
207
|
-
return createStatsObject(path, size, false);
|
|
208
192
|
} else if (isDeno) {
|
|
209
193
|
const info = await Deno.stat(path);
|
|
210
194
|
return createStatsFromDenoFileInfo(info);
|
|
@@ -212,17 +196,8 @@ async function stat(path) {
|
|
|
212
196
|
throw new Error("Unsupported runtime");
|
|
213
197
|
}
|
|
214
198
|
function statSync(path) {
|
|
215
|
-
if (isNode) {
|
|
199
|
+
if (isNode || isBun) {
|
|
216
200
|
return fs.statSync(path);
|
|
217
|
-
} else if (isBun) {
|
|
218
|
-
const file = Bun.file(path);
|
|
219
|
-
const size = file.size;
|
|
220
|
-
try {
|
|
221
|
-
file.arrayBuffer();
|
|
222
|
-
} catch {
|
|
223
|
-
throw new Error(`ENOENT: no such file or directory, stat '${path}'`);
|
|
224
|
-
}
|
|
225
|
-
return createStatsObject(path, size, false);
|
|
226
201
|
} else if (isDeno) {
|
|
227
202
|
const info = Deno.statSync(path);
|
|
228
203
|
return createStatsFromDenoFileInfo(info);
|
|
@@ -361,36 +336,6 @@ function realpathSync(path, options) {
|
|
|
361
336
|
}
|
|
362
337
|
return path;
|
|
363
338
|
}
|
|
364
|
-
function createStatsObject(_path, size, isDir) {
|
|
365
|
-
const now = Date.now();
|
|
366
|
-
return {
|
|
367
|
-
isFile: () => !isDir,
|
|
368
|
-
isDirectory: () => isDir,
|
|
369
|
-
isBlockDevice: () => false,
|
|
370
|
-
isCharacterDevice: () => false,
|
|
371
|
-
isSymbolicLink: () => false,
|
|
372
|
-
isFIFO: () => false,
|
|
373
|
-
isSocket: () => false,
|
|
374
|
-
dev: 0,
|
|
375
|
-
ino: 0,
|
|
376
|
-
mode: isDir ? 16877 : 33188,
|
|
377
|
-
nlink: 1,
|
|
378
|
-
uid: 0,
|
|
379
|
-
gid: 0,
|
|
380
|
-
rdev: 0,
|
|
381
|
-
size,
|
|
382
|
-
blksize: 4096,
|
|
383
|
-
blocks: Math.ceil(size / 512),
|
|
384
|
-
atimeMs: now,
|
|
385
|
-
mtimeMs: now,
|
|
386
|
-
ctimeMs: now,
|
|
387
|
-
birthtimeMs: now,
|
|
388
|
-
atime: new Date(now),
|
|
389
|
-
mtime: new Date(now),
|
|
390
|
-
ctime: new Date(now),
|
|
391
|
-
birthtime: new Date(now)
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
339
|
function createStatsFromDenoFileInfo(info) {
|
|
395
340
|
return {
|
|
396
341
|
isFile: () => info.isFile,
|
|
@@ -441,7 +386,7 @@ var init_fs = __esm({
|
|
|
441
386
|
"use strict";
|
|
442
387
|
init_runtime();
|
|
443
388
|
isBunOrDeno = isBun || isDeno;
|
|
444
|
-
if (isNode) {
|
|
389
|
+
if (isNode || isBun) {
|
|
445
390
|
fs = __require("fs");
|
|
446
391
|
fsPromises = __require("fs/promises");
|
|
447
392
|
}
|
|
@@ -825,8 +770,9 @@ async function safeCleanup(filePath) {
|
|
|
825
770
|
function defineConfig(config) {
|
|
826
771
|
return config;
|
|
827
772
|
}
|
|
828
|
-
var
|
|
773
|
+
var ELIT_CONFIG_FILES = [
|
|
829
774
|
"elit.config.ts",
|
|
775
|
+
"elit.config.mts",
|
|
830
776
|
"elit.config.js",
|
|
831
777
|
"elit.config.mjs",
|
|
832
778
|
"elit.config.cjs",
|
|
@@ -862,7 +808,7 @@ function loadEnv(mode = "development", cwd = process.cwd()) {
|
|
|
862
808
|
return env;
|
|
863
809
|
}
|
|
864
810
|
async function loadConfig(cwd = process.cwd()) {
|
|
865
|
-
for (const configFile of
|
|
811
|
+
for (const configFile of ELIT_CONFIG_FILES) {
|
|
866
812
|
const configPath = resolve(cwd, configFile);
|
|
867
813
|
if (existsSync(configPath)) {
|
|
868
814
|
try {
|
|
@@ -881,7 +827,7 @@ async function loadConfigFile(configPath) {
|
|
|
881
827
|
if (ext === "json") {
|
|
882
828
|
const content = readFileAsString(configPath);
|
|
883
829
|
return JSON.parse(content);
|
|
884
|
-
} else if (ext === "ts") {
|
|
830
|
+
} else if (ext === "ts" || ext === "mts") {
|
|
885
831
|
try {
|
|
886
832
|
const { build } = await import("esbuild");
|
|
887
833
|
const { join: join2, dirname: dirname2 } = await Promise.resolve().then(() => (init_path(), path_exports));
|
|
@@ -959,6 +905,7 @@ function mergeConfig(config, cliArgs) {
|
|
|
959
905
|
};
|
|
960
906
|
}
|
|
961
907
|
export {
|
|
908
|
+
ELIT_CONFIG_FILES,
|
|
962
909
|
defineConfig,
|
|
963
910
|
loadConfig,
|
|
964
911
|
loadEnv,
|
package/dist/config.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime.ts","../src/fs.ts","../src/path.ts","../src/config.ts"],"sourcesContent":["/**\n * Runtime detection and global type declarations\n * Shared across all modules for consistency\n */\n\n/**\n * Runtime detection (cached at module load)\n */\nexport const runtime = (() => {\n // @ts-ignore - Deno global\n if (typeof Deno !== 'undefined') return 'deno';\n // @ts-ignore - Bun global\n if (typeof Bun !== 'undefined') return 'bun';\n return 'node';\n})() as 'node' | 'bun' | 'deno';\n\nexport const isNode = runtime === 'node';\nexport const isBun = runtime === 'bun';\nexport const isDeno = runtime === 'deno';\n\n// Global declarations for runtime-specific APIs\ndeclare global {\n // @ts-ignore - Bun global\n const Bun: {\n build(options: {\n entrypoints: string[];\n outdir?: string;\n target?: string;\n format?: string;\n minify?: boolean;\n sourcemap?: string;\n external?: string[];\n naming?: string;\n plugins?: any[];\n define?: Record<string, string>;\n }): Promise<{\n success: boolean;\n outputs: Array<{ path: string; size: number }>;\n logs: any[];\n }>;\n Transpiler: new (options?: {\n loader?: string;\n target?: string;\n minify?: boolean;\n }) => {\n transform(code: string, loader?: string): Promise<string>;\n transformSync(code: string, loader?: string): string;\n };\n file(path: string): {\n size: number;\n arrayBuffer(): ArrayBuffer | Promise<ArrayBuffer>;\n exists(): Promise<boolean>;\n };\n write(path: string, data: string | Buffer | Uint8Array): Promise<void>;\n } | undefined;\n\n // @ts-ignore - Deno global\n const Deno: {\n emit(rootSpecifier: string | URL, options?: {\n bundle?: 'module' | 'classic';\n check?: boolean;\n compilerOptions?: any;\n importMap?: string;\n importMapPath?: string;\n sources?: Record<string, string>;\n }): Promise<{\n files: Record<string, string>;\n diagnostics: any[];\n }>;\n writeTextFile(path: string, data: string): Promise<void>;\n readFile(path: string): Promise<Uint8Array>;\n readFileSync(path: string): Uint8Array;\n writeFile(path: string, data: Uint8Array): Promise<void>;\n writeFileSync(path: string, data: Uint8Array): void;\n stat(path: string): Promise<any>;\n statSync(path: string): any;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n mkdirSync(path: string, options?: { recursive?: boolean }): void;\n readDir(path: string): AsyncIterable<any>;\n readDirSync(path: string): Iterable<any>;\n remove(path: string, options?: { recursive?: boolean }): Promise<void>;\n removeSync(path: string, options?: { recursive?: boolean }): void;\n rename(oldPath: string, newPath: string): Promise<void>;\n renameSync(oldPath: string, newPath: string): void;\n copyFile(src: string, dest: string): Promise<void>;\n copyFileSync(src: string, dest: string): void;\n realPath(path: string): Promise<string>;\n realPathSync(path: string): string;\n watchFs(paths: string | string[]): AsyncIterable<{\n kind: string;\n paths: string[];\n }>;\n build: {\n os: string;\n };\n } | undefined;\n}\n","/**\n * File System module with unified API across runtimes\n * Compatible with Node.js 'fs' module API\n * - Node.js: uses 'fs' module\n * - Bun: uses Bun.file() and native APIs\n * - Deno: uses Deno.readFile(), etc.\n */\n\nimport { runtime, isNode, isBun, isDeno } from './runtime';\n\n/**\n * Helper: Check if runtime is Bun or Deno (eliminates duplication in Deno API calls)\n */\nconst isBunOrDeno = isBun || isDeno;\n\n/**\n * Helper: Parse options from string or object (eliminates duplication in options parsing)\n */\nfunction parseOptions<T>(options: T | string | undefined, defaultValue: T): T {\n return typeof options === 'string' ? { encoding: options } as T : options || defaultValue;\n}\n\n/**\n * Helper: Decode content with optional encoding (eliminates duplication in read operations)\n */\nfunction decodeContent(content: ArrayBuffer | Uint8Array, encoding?: string | null): string | Buffer {\n if (encoding) {\n return new TextDecoder(encoding).decode(content);\n }\n return Buffer.from(content instanceof ArrayBuffer ? new Uint8Array(content) : content);\n}\n\n/**\n * Helper: Convert data to Uint8Array (eliminates duplication in write operations)\n */\nfunction dataToUint8Array(data: string | Buffer | Uint8Array): Uint8Array {\n if (typeof data === 'string') {\n return new TextEncoder().encode(data);\n }\n if (data instanceof Buffer) {\n return new Uint8Array(data);\n }\n return data;\n}\n\n/**\n * Helper: Process directory entries (eliminates duplication in readdir operations)\n */\nfunction processDenoEntries(iterator: any, withFileTypes?: boolean): any[] {\n const entries: any[] = [];\n for (const entry of iterator) {\n if (withFileTypes) {\n entries.push(createDirentFromDenoEntry(entry));\n } else {\n entries.push(entry.name);\n }\n }\n return entries;\n}\n\n/**\n * Helper: Process directory entries async (eliminates duplication in async readdir)\n */\nasync function processDenoEntriesAsync(iterator: any, withFileTypes?: boolean): Promise<any[]> {\n const entries: any[] = [];\n for await (const entry of iterator) {\n if (withFileTypes) {\n entries.push(createDirentFromDenoEntry(entry));\n } else {\n entries.push(entry.name);\n }\n }\n return entries;\n}\n\n// Pre-load fs module for Node.js\nlet fs: any, fsPromises: any;\nif (isNode) {\n fs = require('fs');\n fsPromises = require('fs/promises');\n}\n\n/**\n * File encoding types\n */\nexport type BufferEncoding =\n | 'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2'\n | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex';\n\n/**\n * Read file options\n */\nexport interface ReadFileOptions {\n encoding?: BufferEncoding | null;\n flag?: string;\n signal?: AbortSignal;\n}\n\n/**\n * Write file options\n */\nexport interface WriteFileOptions {\n encoding?: BufferEncoding | null;\n mode?: number;\n flag?: string;\n signal?: AbortSignal;\n}\n\n/**\n * Mkdir options\n */\nexport interface MkdirOptions {\n recursive?: boolean;\n mode?: number;\n}\n\n/**\n * Readdir options\n */\nexport interface ReaddirOptions {\n encoding?: BufferEncoding | null;\n withFileTypes?: boolean;\n recursive?: boolean;\n}\n\n/**\n * File stats\n */\nexport interface Stats {\n isFile(): boolean;\n isDirectory(): boolean;\n isBlockDevice(): boolean;\n isCharacterDevice(): boolean;\n isSymbolicLink(): boolean;\n isFIFO(): boolean;\n isSocket(): boolean;\n dev: number;\n ino: number;\n mode: number;\n nlink: number;\n uid: number;\n gid: number;\n rdev: number;\n size: number;\n blksize: number;\n blocks: number;\n atimeMs: number;\n mtimeMs: number;\n ctimeMs: number;\n birthtimeMs: number;\n atime: Date;\n mtime: Date;\n ctime: Date;\n birthtime: Date;\n}\n\n/**\n * Directory entry\n */\nexport interface Dirent {\n name: string;\n isFile(): boolean;\n isDirectory(): boolean;\n isBlockDevice(): boolean;\n isCharacterDevice(): boolean;\n isSymbolicLink(): boolean;\n isFIFO(): boolean;\n isSocket(): boolean;\n}\n\n/**\n * Read file (async)\n */\nexport async function readFile(path: string, options?: ReadFileOptions | BufferEncoding): Promise<string | Buffer> {\n const opts = parseOptions<ReadFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.readFile(path, opts);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const content = await file.arrayBuffer();\n return decodeContent(content, opts.encoding);\n } else if (isDeno) {\n // @ts-ignore\n const content = await Deno.readFile(path);\n return decodeContent(content, opts.encoding);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Read file (sync)\n */\nexport function readFileSync(path: string, options?: ReadFileOptions | BufferEncoding): string | Buffer {\n const opts = parseOptions<ReadFileOptions>(options, {});\n\n if (isNode) {\n return fs.readFileSync(path, opts);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const content = file.arrayBuffer();\n return decodeContent(content as ArrayBuffer, opts.encoding);\n } else if (isDeno) {\n // @ts-ignore\n const content = Deno.readFileSync(path);\n return decodeContent(content, opts.encoding);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Write file (async)\n */\nexport async function writeFile(path: string, data: string | Buffer | Uint8Array, options?: WriteFileOptions | BufferEncoding): Promise<void> {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.writeFile(path, data, opts);\n } else if (isBun) {\n // @ts-ignore\n await Bun.write(path, data);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.writeFile(path, dataToUint8Array(data));\n }\n}\n\n/**\n * Write file (sync)\n */\nexport function writeFileSync(path: string, data: string | Buffer | Uint8Array, options?: WriteFileOptions | BufferEncoding): void {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n fs.writeFileSync(path, data, opts);\n } else if (isBun) {\n // @ts-ignore\n Bun.write(path, data);\n } else if (isDeno) {\n // @ts-ignore\n Deno.writeFileSync(path, dataToUint8Array(data));\n }\n}\n\n/**\n * Append file (async)\n */\nexport async function appendFile(path: string, data: string | Buffer, options?: WriteFileOptions | BufferEncoding): Promise<void> {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.appendFile(path, data, opts);\n } else {\n if (await exists(path)) {\n const existing = await readFile(path);\n const combined = Buffer.isBuffer(existing)\n ? Buffer.concat([existing, Buffer.isBuffer(data) ? data : Buffer.from(data)])\n : existing + (Buffer.isBuffer(data) ? data.toString() : data);\n await writeFile(path, combined, opts);\n } else {\n await writeFile(path, data, opts);\n }\n }\n}\n\n/**\n * Append file (sync)\n */\nexport function appendFileSync(path: string, data: string | Buffer, options?: WriteFileOptions | BufferEncoding): void {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n fs.appendFileSync(path, data, opts);\n } else {\n if (existsSync(path)) {\n const existing = readFileSync(path);\n const combined = Buffer.isBuffer(existing)\n ? Buffer.concat([existing, Buffer.isBuffer(data) ? data : Buffer.from(data)])\n : existing + (Buffer.isBuffer(data) ? data.toString() : data);\n writeFileSync(path, combined, opts);\n } else {\n writeFileSync(path, data, opts);\n }\n }\n}\n\n/**\n * Check if file/directory exists (async)\n */\nexport async function exists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if file/directory exists (sync)\n */\nexport function existsSync(path: string): boolean {\n try {\n statSync(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get file stats (async)\n */\nexport async function stat(path: string): Promise<Stats> {\n if (isNode) {\n return fsPromises.stat(path);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const size = file.size;\n const exists = await file.exists();\n\n if (!exists) {\n throw new Error(`ENOENT: no such file or directory, stat '${path}'`);\n }\n\n // Create a Stats-like object\n return createStatsObject(path, size, false);\n } else if (isDeno) {\n // @ts-ignore\n const info = await Deno.stat(path);\n return createStatsFromDenoFileInfo(info);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Get file stats (sync)\n */\nexport function statSync(path: string): Stats {\n if (isNode) {\n return fs.statSync(path);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const size = file.size;\n\n // Bun doesn't have sync exists check, so we try to read\n try {\n file.arrayBuffer();\n } catch {\n throw new Error(`ENOENT: no such file or directory, stat '${path}'`);\n }\n\n return createStatsObject(path, size, false);\n } else if (isDeno) {\n // @ts-ignore\n const info = Deno.statSync(path);\n return createStatsFromDenoFileInfo(info);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Create directory (async)\n */\nexport async function mkdir(path: string, options?: MkdirOptions | number): Promise<void> {\n const opts = typeof options === 'number' ? { mode: options } as MkdirOptions : options || {};\n\n if (isNode) {\n await fsPromises.mkdir(path, opts);\n } else if (isBun) {\n // @ts-ignore\n await Deno.mkdir(path, { recursive: opts.recursive });\n } else if (isDeno) {\n // @ts-ignore\n await Deno.mkdir(path, { recursive: opts.recursive });\n }\n}\n\n/**\n * Create directory (sync)\n */\nexport function mkdirSync(path: string, options?: MkdirOptions | number): void {\n const opts = typeof options === 'number' ? { mode: options } as MkdirOptions : options || {};\n\n if (isNode) {\n fs.mkdirSync(path, opts);\n } else if (isBun) {\n // @ts-ignore\n Deno.mkdirSync(path, { recursive: opts.recursive });\n } else if (isDeno) {\n // @ts-ignore\n Deno.mkdirSync(path, { recursive: opts.recursive });\n }\n}\n\n/**\n * Read directory (async)\n */\nexport async function readdir(path: string, options?: ReaddirOptions | BufferEncoding): Promise<string[] | Dirent[]> {\n const opts = parseOptions<ReaddirOptions>(options, {});\n\n if (isNode) {\n return fsPromises.readdir(path, opts);\n } else if (isBunOrDeno) {\n // @ts-ignore\n return processDenoEntriesAsync(Deno.readDir(path), opts.withFileTypes);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Read directory (sync)\n */\nexport function readdirSync(path: string, options?: ReaddirOptions | BufferEncoding): string[] | Dirent[] {\n const opts = parseOptions<ReaddirOptions>(options, {});\n\n if (isNode) {\n return fs.readdirSync(path, opts);\n } else if (isBunOrDeno) {\n // @ts-ignore\n return processDenoEntries(Deno.readDirSync(path), opts.withFileTypes);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Remove file (async)\n */\nexport async function unlink(path: string): Promise<void> {\n if (isNode) {\n return fsPromises.unlink(path);\n } else if (isBun) {\n // @ts-ignore\n await Deno.remove(path);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.remove(path);\n }\n}\n\n/**\n * Remove file (sync)\n */\nexport function unlinkSync(path: string): void {\n if (isNode) {\n fs.unlinkSync(path);\n } else if (isBun) {\n // @ts-ignore\n Deno.removeSync(path);\n } else if (isDeno) {\n // @ts-ignore\n Deno.removeSync(path);\n }\n}\n\n/**\n * Remove directory (async)\n */\nexport async function rmdir(path: string, options?: { recursive?: boolean }): Promise<void> {\n if (isNode) {\n return fsPromises.rmdir(path, options);\n } else if (isBun) {\n // @ts-ignore\n await Deno.remove(path, { recursive: options?.recursive });\n } else if (isDeno) {\n // @ts-ignore\n await Deno.remove(path, { recursive: options?.recursive });\n }\n}\n\n/**\n * Remove directory (sync)\n */\nexport function rmdirSync(path: string, options?: { recursive?: boolean }): void {\n if (isNode) {\n fs.rmdirSync(path, options);\n } else if (isBun) {\n // @ts-ignore\n Deno.removeSync(path, { recursive: options?.recursive });\n } else if (isDeno) {\n // @ts-ignore\n Deno.removeSync(path, { recursive: options?.recursive });\n }\n}\n\n/**\n * Rename/move file (async)\n */\nexport async function rename(oldPath: string, newPath: string): Promise<void> {\n if (isNode) {\n return fsPromises.rename(oldPath, newPath);\n } else if (isBun) {\n // @ts-ignore\n await Deno.rename(oldPath, newPath);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.rename(oldPath, newPath);\n }\n}\n\n/**\n * Rename/move file (sync)\n */\nexport function renameSync(oldPath: string, newPath: string): void {\n if (isNode) {\n fs.renameSync(oldPath, newPath);\n } else if (isBun) {\n // @ts-ignore\n Deno.renameSync(oldPath, newPath);\n } else if (isDeno) {\n // @ts-ignore\n Deno.renameSync(oldPath, newPath);\n }\n}\n\n/**\n * Copy file (async)\n */\nexport async function copyFile(src: string, dest: string, flags?: number): Promise<void> {\n if (isNode) {\n return fsPromises.copyFile(src, dest, flags);\n } else if (isBun) {\n // @ts-ignore\n await Deno.copyFile(src, dest);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.copyFile(src, dest);\n }\n}\n\n/**\n * Copy file (sync)\n */\nexport function copyFileSync(src: string, dest: string, flags?: number): void {\n if (isNode) {\n fs.copyFileSync(src, dest, flags);\n } else if (isBun) {\n // @ts-ignore\n Deno.copyFileSync(src, dest);\n } else if (isDeno) {\n // @ts-ignore\n Deno.copyFileSync(src, dest);\n }\n}\n\n/**\n * Resolve pathname to absolute path (async)\n */\nexport async function realpath(path: string, options?: { encoding?: BufferEncoding }): Promise<string> {\n if (isNode) {\n return fsPromises.realpath(path, options);\n } else if (isBun) {\n // Bun supports fs.promises.realpath\n const fs = require('fs/promises');\n return fs.realpath(path, options);\n } else if (isDeno) {\n // @ts-ignore\n return await Deno.realPath(path);\n }\n return path;\n}\n\n/**\n * Resolve pathname to absolute path (sync)\n */\nexport function realpathSync(path: string, options?: { encoding?: BufferEncoding }): string {\n if (isNode) {\n return fs.realpathSync(path, options);\n } else if (isBun) {\n // Bun supports fs.realpathSync\n const fs = require('fs');\n return fs.realpathSync(path, options);\n } else if (isDeno) {\n // @ts-ignore\n return Deno.realPathSync(path);\n }\n return path;\n}\n\n/**\n * Helper: Create Stats object\n */\nfunction createStatsObject(_path: string, size: number, isDir: boolean): Stats {\n const now = Date.now();\n return {\n isFile: () => !isDir,\n isDirectory: () => isDir,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 0,\n ino: 0,\n mode: isDir ? 16877 : 33188,\n nlink: 1,\n uid: 0,\n gid: 0,\n rdev: 0,\n size,\n blksize: 4096,\n blocks: Math.ceil(size / 512),\n atimeMs: now,\n mtimeMs: now,\n ctimeMs: now,\n birthtimeMs: now,\n atime: new Date(now),\n mtime: new Date(now),\n ctime: new Date(now),\n birthtime: new Date(now),\n };\n}\n\n/**\n * Helper: Create Stats from Deno FileInfo\n */\nfunction createStatsFromDenoFileInfo(info: any): Stats {\n return {\n isFile: () => info.isFile,\n isDirectory: () => info.isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => info.isSymlink || false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: info.dev || 0,\n ino: info.ino || 0,\n mode: info.mode || 0,\n nlink: info.nlink || 1,\n uid: info.uid || 0,\n gid: info.gid || 0,\n rdev: 0,\n size: info.size,\n blksize: info.blksize || 4096,\n blocks: info.blocks || Math.ceil(info.size / 512),\n atimeMs: info.atime?.getTime() || Date.now(),\n mtimeMs: info.mtime?.getTime() || Date.now(),\n ctimeMs: info.birthtime?.getTime() || Date.now(),\n birthtimeMs: info.birthtime?.getTime() || Date.now(),\n atime: info.atime || new Date(),\n mtime: info.mtime || new Date(),\n ctime: info.birthtime || new Date(),\n birthtime: info.birthtime || new Date(),\n };\n}\n\n/**\n * Helper: Create Dirent from Deno DirEntry\n */\nfunction createDirentFromDenoEntry(entry: any): Dirent {\n return {\n name: entry.name,\n isFile: () => entry.isFile,\n isDirectory: () => entry.isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => entry.isSymlink || false,\n isFIFO: () => false,\n isSocket: () => false,\n };\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Promises API (re-export for compatibility)\n */\nexport const promises = {\n readFile,\n writeFile,\n appendFile,\n stat,\n mkdir,\n readdir,\n unlink,\n rmdir,\n rename,\n copyFile,\n realpath,\n};\n\n/**\n * Default export\n */\nexport default {\n readFile,\n readFileSync,\n writeFile,\n writeFileSync,\n appendFile,\n appendFileSync,\n exists,\n existsSync,\n stat,\n statSync,\n mkdir,\n mkdirSync,\n readdir,\n readdirSync,\n unlink,\n unlinkSync,\n rmdir,\n rmdirSync,\n rename,\n renameSync,\n copyFile,\n copyFileSync,\n realpath,\n realpathSync,\n promises,\n getRuntime,\n};\n","/**\n * Path module with unified API across runtimes\n * Pure implementation without external dependencies\n * Compatible with Node.js 'path' module API\n * Works on Node.js, Bun, and Deno\n */\n\nimport { isBun, isDeno, isNode, runtime } from './runtime';\n\n/**\n * Helper: Get path separator for platform (eliminates duplication in separator logic)\n */\nfunction getSeparator(isWin: boolean): string {\n return isWin ? '\\\\' : '/';\n}\n\n/**\n * Helper: Get current working directory (eliminates duplication in resolvePaths)\n */\nfunction getCwd(): string {\n if (isNode || isBun) {\n return process.cwd();\n } else if (isDeno) {\n // @ts-ignore\n return Deno.cwd();\n }\n return '/';\n}\n\n/**\n * Helper: Find last separator index (eliminates duplication in getExtname and getBasename)\n */\nfunction findLastSeparator(path: string): number {\n return Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\\\'));\n}\n\n/**\n * Helper: Create path operation object (eliminates duplication in posix and win32)\n */\nfunction createPathOps(isWin: boolean) {\n return {\n sep: getSeparator(isWin),\n delimiter: isWin ? ';' : ':',\n normalize: (path: string) => normalizePath(path, isWin),\n join: (...paths: string[]) => joinPaths(paths, isWin),\n resolve: (...paths: string[]) => resolvePaths(paths, isWin),\n isAbsolute: (path: string) => isWin ? isAbsoluteWin(path) : isAbsolutePosix(path),\n relative: (from: string, to: string) => relativePath(from, to, isWin),\n dirname: (path: string) => getDirname(path, isWin),\n basename: (path: string, ext?: string) => getBasename(path, ext, isWin),\n extname: (path: string) => getExtname(path),\n parse: (path: string) => parsePath(path, isWin),\n format: (pathObject: FormatInputPathObject) => formatPath(pathObject, isWin)\n };\n}\n\n/**\n * Helper: Check if path is absolute (POSIX)\n */\nfunction isAbsolutePosix(path: string): boolean {\n return path.length > 0 && path[0] === '/';\n}\n\n/**\n * Helper: Check if path is absolute (Windows)\n */\nfunction isAbsoluteWin(path: string): boolean {\n const len = path.length;\n if (len === 0) return false;\n\n const code = path.charCodeAt(0);\n if (code === 47 /* / */ || code === 92 /* \\ */) {\n return true;\n }\n\n // Check for drive letter\n if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122)) {\n if (len > 2 && path.charCodeAt(1) === 58 /* : */) {\n const code2 = path.charCodeAt(2);\n if (code2 === 47 /* / */ || code2 === 92 /* \\ */) {\n return true;\n }\n }\n }\n\n return false;\n}\n\n/**\n * Platform detection\n */\nconst isWindows = (() => {\n if (isNode) {\n return process.platform === 'win32';\n } else if (isDeno) {\n // @ts-ignore\n return Deno.build.os === 'windows';\n }\n // Bun uses process.platform like Node\n return typeof process !== 'undefined' && process.platform === 'win32';\n})();\n\n/**\n * Path separator\n */\nexport const sep = isWindows ? '\\\\' : '/';\n\n/**\n * Path delimiter\n */\nexport const delimiter = isWindows ? ';' : ':';\n\n/**\n * POSIX path operations\n */\nconst posix = createPathOps(false);\n\n/**\n * Windows path operations\n */\nconst win32 = createPathOps(true);\n\n/**\n * Path object interface\n */\nexport interface ParsedPath {\n root: string;\n dir: string;\n base: string;\n ext: string;\n name: string;\n}\n\nexport interface FormatInputPathObject {\n root?: string;\n dir?: string;\n base?: string;\n ext?: string;\n name?: string;\n}\n\n/**\n * Normalize a path\n */\nfunction normalizePath(path: string, isWin: boolean): string {\n if (path.length === 0) return '.';\n\n const separator = getSeparator(isWin);\n const isAbsolute = isWin ? isAbsoluteWin(path) : isAbsolutePosix(path);\n const trailingSeparator = path[path.length - 1] === separator || (isWin && path[path.length - 1] === '/');\n\n // Normalize slashes\n let normalized = path.replace(isWin ? /[\\/\\\\]+/g : /\\/+/g, separator);\n\n // Split path\n const parts = normalized.split(separator);\n const result: string[] = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n\n if (part === '' || part === '.') {\n if (i === 0 && isAbsolute) result.push('');\n continue;\n }\n\n if (part === '..') {\n if (result.length > 0 && result[result.length - 1] !== '..') {\n if (!(result.length === 1 && result[0] === '')) {\n result.pop();\n }\n } else if (!isAbsolute) {\n result.push('..');\n }\n } else {\n result.push(part);\n }\n }\n\n let final = result.join(separator);\n\n if (final.length === 0) {\n return isAbsolute ? separator : '.';\n }\n\n if (trailingSeparator && final[final.length - 1] !== separator) {\n final += separator;\n }\n\n return final;\n}\n\n/**\n * Join paths\n */\nfunction joinPaths(paths: string[], isWin: boolean): string {\n if (paths.length === 0) return '.';\n\n const separator = getSeparator(isWin);\n let joined = '';\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i];\n if (path && path.length > 0) {\n if (joined.length === 0) {\n joined = path;\n } else {\n joined += separator + path;\n }\n }\n }\n\n if (joined.length === 0) return '.';\n\n return normalizePath(joined, isWin);\n}\n\n/**\n * Resolve paths to absolute path\n */\nfunction resolvePaths(paths: string[], isWin: boolean): string {\n const separator = getSeparator(isWin);\n let resolved = '';\n let isAbsolute = false;\n\n for (let i = paths.length - 1; i >= 0 && !isAbsolute; i--) {\n const path = paths[i];\n if (path && path.length > 0) {\n resolved = path + (resolved.length > 0 ? separator + resolved : '');\n isAbsolute = isWin ? isAbsoluteWin(resolved) : isAbsolutePosix(resolved);\n }\n }\n\n if (!isAbsolute) {\n const cwd = getCwd();\n resolved = cwd + (resolved.length > 0 ? separator + resolved : '');\n }\n\n return normalizePath(resolved, isWin);\n}\n\n/**\n * Get relative path\n */\nfunction relativePath(from: string, to: string, isWin: boolean): string {\n from = resolvePaths([from], isWin);\n to = resolvePaths([to], isWin);\n\n if (from === to) return '';\n\n const separator = getSeparator(isWin);\n const fromParts = from.split(separator).filter(p => p.length > 0);\n const toParts = to.split(separator).filter(p => p.length > 0);\n\n let commonLength = 0;\n const minLength = Math.min(fromParts.length, toParts.length);\n\n for (let i = 0; i < minLength; i++) {\n if (fromParts[i] === toParts[i]) {\n commonLength++;\n } else {\n break;\n }\n }\n\n const upCount = fromParts.length - commonLength;\n const result: string[] = [];\n\n for (let i = 0; i < upCount; i++) {\n result.push('..');\n }\n\n for (let i = commonLength; i < toParts.length; i++) {\n result.push(toParts[i]);\n }\n\n return result.join(separator) || '.';\n}\n\n/**\n * Get directory name\n */\nfunction getDirname(path: string, isWin: boolean): string {\n if (path.length === 0) return '.';\n\n const separator = getSeparator(isWin);\n const normalized = normalizePath(path, isWin);\n const lastSepIndex = normalized.lastIndexOf(separator);\n\n if (lastSepIndex === -1) return '.';\n if (lastSepIndex === 0) return separator;\n\n return normalized.slice(0, lastSepIndex);\n}\n\n/**\n * Get base name\n */\nfunction getBasename(path: string, ext?: string, isWin?: boolean): string {\n if (path.length === 0) return '';\n\n const lastSepIndex = isWin ? findLastSeparator(path) : path.lastIndexOf('/');\n let base = lastSepIndex === -1 ? path : path.slice(lastSepIndex + 1);\n\n if (ext && base.endsWith(ext)) {\n base = base.slice(0, base.length - ext.length);\n }\n\n return base;\n}\n\n/**\n * Get extension name\n */\nfunction getExtname(path: string): string {\n const lastDotIndex = path.lastIndexOf('.');\n const lastSepIndex = findLastSeparator(path);\n\n if (lastDotIndex === -1 || lastDotIndex < lastSepIndex || lastDotIndex === path.length - 1) {\n return '';\n }\n\n return path.slice(lastDotIndex);\n}\n\n/**\n * Parse path into components\n */\nfunction parsePath(path: string, isWin: boolean): ParsedPath {\n let root = '';\n if (isWin) {\n // Check for Windows drive letter\n if (path.length >= 2 && path[1] === ':') {\n root = path.slice(0, 2);\n if (path.length > 2 && (path[2] === '\\\\' || path[2] === '/')) {\n root += '\\\\';\n }\n } else if (path[0] === '\\\\' || path[0] === '/') {\n root = '\\\\';\n }\n } else {\n if (path[0] === '/') {\n root = '/';\n }\n }\n\n const dir = getDirname(path, isWin);\n const base = getBasename(path, undefined, isWin);\n const ext = getExtname(path);\n const name = ext ? base.slice(0, base.length - ext.length) : base;\n\n return { root, dir, base, ext, name };\n}\n\n/**\n * Format path from components\n */\nfunction formatPath(pathObject: FormatInputPathObject, isWin: boolean): string {\n const separator = getSeparator(isWin);\n const dir = pathObject.dir || pathObject.root || '';\n const base = pathObject.base || ((pathObject.name || '') + (pathObject.ext || ''));\n\n if (!dir) return base;\n if (dir === pathObject.root) return dir + base;\n\n return dir + separator + base;\n}\n\n/**\n * Normalize a path (platform-specific)\n */\nexport function normalize(path: string): string {\n return normalizePath(path, isWindows);\n}\n\n/**\n * Join paths (platform-specific)\n */\nexport function join(...paths: string[]): string {\n return joinPaths(paths, isWindows);\n}\n\n/**\n * Resolve paths to absolute path (platform-specific)\n */\nexport function resolve(...paths: string[]): string {\n return resolvePaths(paths, isWindows);\n}\n\n/**\n * Check if path is absolute (platform-specific)\n */\nexport function isAbsolute(path: string): boolean {\n return isWindows ? win32.isAbsolute(path) : posix.isAbsolute(path);\n}\n\n/**\n * Get relative path (platform-specific)\n */\nexport function relative(from: string, to: string): string {\n return relativePath(from, to, isWindows);\n}\n\n/**\n * Get directory name (platform-specific)\n */\nexport function dirname(path: string): string {\n return getDirname(path, isWindows);\n}\n\n/**\n * Get base name (platform-specific)\n */\nexport function basename(path: string, ext?: string): string {\n return getBasename(path, ext, isWindows);\n}\n\n/**\n * Get extension name\n */\nexport function extname(path: string): string {\n return getExtname(path);\n}\n\n/**\n * Parse path into components (platform-specific)\n */\nexport function parse(path: string): ParsedPath {\n return parsePath(path, isWindows);\n}\n\n/**\n * Format path from components (platform-specific)\n */\nexport function format(pathObject: FormatInputPathObject): string {\n return formatPath(pathObject, isWindows);\n}\n\n/**\n * Convert to namespaced path (Windows only)\n */\nexport function toNamespacedPath(path: string): string {\n if (!isWindows || path.length === 0) return path;\n\n const resolved = resolve(path);\n\n if (resolved.length >= 3) {\n if (resolved[0] === '\\\\') {\n // UNC path\n if (resolved[1] === '\\\\' && resolved[2] !== '?') {\n return '\\\\\\\\?\\\\UNC\\\\' + resolved.slice(2);\n }\n } else if (resolved[1] === ':' && resolved[2] === '\\\\') {\n // Drive letter\n return '\\\\\\\\?\\\\' + resolved;\n }\n }\n\n return path;\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Export POSIX and Win32 implementations\n */\nexport { posix, win32 };\n\n/**\n * Default export\n */\nexport default {\n sep,\n delimiter,\n normalize,\n join,\n resolve,\n isAbsolute,\n relative,\n dirname,\n basename,\n extname,\n parse,\n format,\n toNamespacedPath,\n posix,\n win32,\n getRuntime,\n};\n","/**\n * Config loader for elit.config.{ts,js,json}\n */\n\nimport { existsSync, readFileSync } from './fs';\nimport { resolve } from './path';\nimport type { DevServerOptions, BuildOptions, PreviewOptions, TestOptions } from './types';\n\n/**\n * Helper: Read file and ensure string output (eliminates duplication in file reading)\n */\nfunction readFileAsString(filePath: string): string {\n const contentBuffer = readFileSync(filePath, 'utf-8');\n return typeof contentBuffer === 'string' ? contentBuffer : contentBuffer.toString('utf-8');\n}\n\n/**\n * Helper: Remove surrounding quotes from string (eliminates duplication in env parsing)\n */\nfunction removeQuotes(value: string): string {\n const trimmed = value.trim();\n if ((trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n}\n\n/**\n * Helper: Import config module and return default or module (eliminates duplication in config loading)\n */\nasync function importConfigModule(configPath: string): Promise<ElitConfig> {\n const { pathToFileURL } = await import('url');\n const configModule = await import(pathToFileURL(configPath).href);\n return configModule.default || configModule;\n}\n\n/**\n * Helper: Safe file cleanup (eliminates duplication in temp file cleanup)\n */\nasync function safeCleanup(filePath: string): Promise<void> {\n try {\n const { unlinkSync } = await import('./fs');\n unlinkSync(filePath);\n } catch {\n // Ignore cleanup errors\n }\n}\n\nexport interface ElitConfig {\n /** Development server configuration */\n dev?: DevServerOptions;\n /** Build configuration - supports single build or multiple builds */\n build?: BuildOptions | BuildOptions[];\n /** Preview server configuration */\n preview?: PreviewOptions;\n /** Test configuration */\n test?: TestOptions;\n}\n\n/**\n * Helper function for type-safe config definition\n */\nexport function defineConfig(config: ElitConfig): ElitConfig {\n return config;\n}\n\nconst CONFIG_FILES = [\n 'elit.config.ts',\n 'elit.config.js',\n 'elit.config.mjs',\n 'elit.config.cjs',\n 'elit.config.json'\n];\n\n/**\n * Load environment variables from .env files\n */\nexport function loadEnv(mode: string = 'development', cwd: string = process.cwd()): Record<string, string> {\n const env: Record<string, string> = { MODE: mode };\n\n // Load .env files in priority order\n const envFiles = [\n `.env.${mode}.local`,\n `.env.${mode}`,\n `.env.local`,\n `.env`\n ];\n\n for (const file of envFiles) {\n const filePath = resolve(cwd, file);\n if (existsSync(filePath)) {\n const content = readFileAsString(filePath);\n const lines = content.split('\\n');\n\n for (const line of lines) {\n const trimmed = line.trim();\n // Skip empty lines and comments\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n const match = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*)$/);\n if (match) {\n const [, key, value] = match;\n const cleanValue = removeQuotes(value);\n // Only set if not already set (priority order)\n if (!(key in env)) {\n env[key] = cleanValue;\n }\n }\n }\n }\n }\n\n return env;\n}\n\n/**\n * Load elit config from current directory\n */\nexport async function loadConfig(cwd: string = process.cwd()): Promise<ElitConfig | null> {\n for (const configFile of CONFIG_FILES) {\n const configPath = resolve(cwd, configFile);\n\n if (existsSync(configPath)) {\n try {\n return await loadConfigFile(configPath);\n } catch (error) {\n console.error(`Error loading config file: ${configFile}`);\n console.error(error);\n throw error;\n }\n }\n }\n\n return null;\n}\n\nasync function loadConfigFile(configPath: string): Promise<ElitConfig> {\n const ext = configPath.split('.').pop();\n\n if (ext === 'json') {\n // Load JSON config\n const content = readFileAsString(configPath);\n return JSON.parse(content);\n } else if (ext === 'ts') {\n // Load TypeScript config by transpiling it with esbuild\n try {\n const { build } = await import('esbuild');\n const { join, dirname } = await import('./path');\n\n // Create temporary output file in the same directory as the config\n // This ensures that imports like 'elit/server' can be resolved correctly\n const configDir = dirname(configPath);\n const tempFile = join(configDir, `.elit-config-${Date.now()}.mjs`);\n\n // Custom plugin to external all dependencies\n const externalAllPlugin = {\n name: 'external-all',\n setup(build: any) {\n build.onResolve({ filter: /.*/ }, (args: any) => {\n // Skip relative imports (local files)\n if (args.path.startsWith('./') || args.path.startsWith('../')) {\n return undefined;\n }\n\n // External everything in node_modules\n if (args.path.includes('node_modules') || args.resolveDir?.includes('node_modules')) {\n return { path: args.path, external: true };\n }\n\n // External known packages by exact match or prefix\n const knownPackages = ['esbuild', 'elit', 'fs', 'path', 'os', 'vm', 'crypto', 'http', 'https', 'url', 'bun'];\n if (knownPackages.some(pkg => args.path === pkg || args.path.startsWith(pkg + '/'))) {\n return { path: args.path, external: true };\n }\n\n // External any imports from dist directory (elit package)\n if (args.resolveDir?.includes('elit/dist') || args.path.includes('elit/dist')) {\n return { path: args.path, external: true };\n }\n\n return undefined;\n });\n }\n };\n\n await build({\n entryPoints: [configPath],\n bundle: true,\n format: 'esm',\n platform: 'node',\n outfile: tempFile,\n write: true,\n target: 'es2020',\n plugins: [externalAllPlugin],\n // External Node.js built-ins and runtime-specific packages\n external: [\n 'node:*',\n 'fs', 'path', 'os', 'vm', 'crypto', 'http', 'https',\n 'bun', 'bun:*', 'deno', 'deno:*'\n ],\n // Use the config directory as the working directory for resolution\n absWorkingDir: configDir,\n });\n\n // Import the compiled config\n const config = await importConfigModule(tempFile);\n\n // Clean up temp file\n await safeCleanup(tempFile);\n\n return config;\n } catch (error) {\n console.error('Failed to load TypeScript config file.');\n console.error('You can use a .js, .mjs, or .json config file instead.');\n throw error;\n }\n } else {\n // Load JS config\n return await importConfigModule(configPath);\n }\n}\n\n/**\n * Merge CLI args with config file\n */\nexport function mergeConfig<T extends Record<string, any>>(\n config: T | undefined,\n cliArgs: Partial<T>\n): T {\n if (!config) {\n return cliArgs as T;\n }\n\n return {\n ...config,\n ...Object.fromEntries(\n Object.entries(cliArgs).filter(([_, v]) => v !== undefined)\n )\n } as T;\n}\n"],"mappings":"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","names":["exists","fs","getRuntime","isAbsolute","unlinkSync","join","dirname","build"]}
|
|
1
|
+
{"version":3,"sources":["../src/runtime.ts","../src/fs.ts","../src/path.ts","../src/config.ts"],"sourcesContent":["/**\n * Runtime detection and global type declarations\n * Shared across all modules for consistency\n */\n\n/**\n * Runtime detection (cached at module load)\n */\nexport const runtime = (() => {\n // @ts-ignore - Deno global\n if (typeof Deno !== 'undefined') return 'deno';\n // @ts-ignore - Bun global\n if (typeof Bun !== 'undefined') return 'bun';\n return 'node';\n})() as 'node' | 'bun' | 'deno';\n\nexport const isNode = runtime === 'node';\nexport const isBun = runtime === 'bun';\nexport const isDeno = runtime === 'deno';\n\n// Global declarations for runtime-specific APIs\ndeclare global {\n // @ts-ignore - Bun global\n const Bun: {\n build(options: {\n entrypoints: string[];\n outdir?: string;\n target?: string;\n format?: string;\n minify?: boolean;\n sourcemap?: string;\n external?: string[];\n naming?: string;\n plugins?: any[];\n define?: Record<string, string>;\n }): Promise<{\n success: boolean;\n outputs: Array<{ path: string; size: number }>;\n logs: any[];\n }>;\n Transpiler: new (options?: {\n loader?: string;\n target?: string;\n minify?: boolean;\n }) => {\n transform(code: string, loader?: string): Promise<string>;\n transformSync(code: string, loader?: string): string;\n };\n file(path: string): {\n size: number;\n arrayBuffer(): ArrayBuffer | Promise<ArrayBuffer>;\n exists(): Promise<boolean>;\n };\n write(path: string, data: string | Buffer | Uint8Array): Promise<void>;\n } | undefined;\n\n // @ts-ignore - Deno global\n const Deno: {\n emit(rootSpecifier: string | URL, options?: {\n bundle?: 'module' | 'classic';\n check?: boolean;\n compilerOptions?: any;\n importMap?: string;\n importMapPath?: string;\n sources?: Record<string, string>;\n }): Promise<{\n files: Record<string, string>;\n diagnostics: any[];\n }>;\n writeTextFile(path: string, data: string): Promise<void>;\n readFile(path: string): Promise<Uint8Array>;\n readFileSync(path: string): Uint8Array;\n writeFile(path: string, data: Uint8Array): Promise<void>;\n writeFileSync(path: string, data: Uint8Array): void;\n stat(path: string): Promise<any>;\n statSync(path: string): any;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n mkdirSync(path: string, options?: { recursive?: boolean }): void;\n readDir(path: string): AsyncIterable<any>;\n readDirSync(path: string): Iterable<any>;\n remove(path: string, options?: { recursive?: boolean }): Promise<void>;\n removeSync(path: string, options?: { recursive?: boolean }): void;\n rename(oldPath: string, newPath: string): Promise<void>;\n renameSync(oldPath: string, newPath: string): void;\n copyFile(src: string, dest: string): Promise<void>;\n copyFileSync(src: string, dest: string): void;\n realPath(path: string): Promise<string>;\n realPathSync(path: string): string;\n watchFs(paths: string | string[]): AsyncIterable<{\n kind: string;\n paths: string[];\n }>;\n build: {\n os: string;\n };\n } | undefined;\n}\n","/**\n * File System module with unified API across runtimes\n * Compatible with Node.js 'fs' module API\n * - Node.js: uses 'fs' module\n * - Bun: uses Bun.file() and native APIs\n * - Deno: uses Deno.readFile(), etc.\n */\n\nimport { runtime, isNode, isBun, isDeno } from './runtime';\n\n/**\n * Helper: Check if runtime is Bun or Deno (eliminates duplication in Deno API calls)\n */\nconst isBunOrDeno = isBun || isDeno;\n\n/**\n * Helper: Parse options from string or object (eliminates duplication in options parsing)\n */\nfunction parseOptions<T>(options: T | string | undefined, defaultValue: T): T {\n return typeof options === 'string' ? { encoding: options } as T : options || defaultValue;\n}\n\n/**\n * Helper: Decode content with optional encoding (eliminates duplication in read operations)\n */\nfunction decodeContent(content: ArrayBuffer | Uint8Array, encoding?: string | null): string | Buffer {\n if (encoding) {\n return new TextDecoder(encoding).decode(content);\n }\n return Buffer.from(content instanceof ArrayBuffer ? new Uint8Array(content) : content);\n}\n\n/**\n * Helper: Convert data to Uint8Array (eliminates duplication in write operations)\n */\nfunction dataToUint8Array(data: string | Buffer | Uint8Array): Uint8Array {\n if (typeof data === 'string') {\n return new TextEncoder().encode(data);\n }\n if (data instanceof Buffer) {\n return new Uint8Array(data);\n }\n return data;\n}\n\n/**\n * Helper: Process directory entries (eliminates duplication in readdir operations)\n */\nfunction processDenoEntries(iterator: any, withFileTypes?: boolean): any[] {\n const entries: any[] = [];\n for (const entry of iterator) {\n if (withFileTypes) {\n entries.push(createDirentFromDenoEntry(entry));\n } else {\n entries.push(entry.name);\n }\n }\n return entries;\n}\n\n/**\n * Helper: Process directory entries async (eliminates duplication in async readdir)\n */\nasync function processDenoEntriesAsync(iterator: any, withFileTypes?: boolean): Promise<any[]> {\n const entries: any[] = [];\n for await (const entry of iterator) {\n if (withFileTypes) {\n entries.push(createDirentFromDenoEntry(entry));\n } else {\n entries.push(entry.name);\n }\n }\n return entries;\n}\n\n// Pre-load fs module for Node.js\nlet fs: any, fsPromises: any;\nif (isNode || isBun) {\n fs = require('fs');\n fsPromises = require('fs/promises');\n}\n\n/**\n * File encoding types\n */\nexport type BufferEncoding =\n | 'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2'\n | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex';\n\n/**\n * Read file options\n */\nexport interface ReadFileOptions {\n encoding?: BufferEncoding | null;\n flag?: string;\n signal?: AbortSignal;\n}\n\n/**\n * Write file options\n */\nexport interface WriteFileOptions {\n encoding?: BufferEncoding | null;\n mode?: number;\n flag?: string;\n signal?: AbortSignal;\n}\n\n/**\n * Mkdir options\n */\nexport interface MkdirOptions {\n recursive?: boolean;\n mode?: number;\n}\n\n/**\n * Readdir options\n */\nexport interface ReaddirOptions {\n encoding?: BufferEncoding | null;\n withFileTypes?: boolean;\n recursive?: boolean;\n}\n\n/**\n * File stats\n */\nexport interface Stats {\n isFile(): boolean;\n isDirectory(): boolean;\n isBlockDevice(): boolean;\n isCharacterDevice(): boolean;\n isSymbolicLink(): boolean;\n isFIFO(): boolean;\n isSocket(): boolean;\n dev: number;\n ino: number;\n mode: number;\n nlink: number;\n uid: number;\n gid: number;\n rdev: number;\n size: number;\n blksize: number;\n blocks: number;\n atimeMs: number;\n mtimeMs: number;\n ctimeMs: number;\n birthtimeMs: number;\n atime: Date;\n mtime: Date;\n ctime: Date;\n birthtime: Date;\n}\n\n/**\n * Directory entry\n */\nexport interface Dirent {\n name: string;\n isFile(): boolean;\n isDirectory(): boolean;\n isBlockDevice(): boolean;\n isCharacterDevice(): boolean;\n isSymbolicLink(): boolean;\n isFIFO(): boolean;\n isSocket(): boolean;\n}\n\n/**\n * Read file (async)\n */\nexport async function readFile(path: string, options?: ReadFileOptions | BufferEncoding): Promise<string | Buffer> {\n const opts = parseOptions<ReadFileOptions>(options, {});\n\n if (isNode || isBun) {\n return fsPromises.readFile(path, opts);\n } else if (isDeno) {\n // @ts-ignore\n const content = await Deno.readFile(path);\n return decodeContent(content, opts.encoding);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Read file (sync)\n */\nexport function readFileSync(path: string, options?: ReadFileOptions | BufferEncoding): string | Buffer {\n const opts = parseOptions<ReadFileOptions>(options, {});\n\n if (isNode || isBun) {\n return fs.readFileSync(path, opts);\n } else if (isDeno) {\n // @ts-ignore\n const content = Deno.readFileSync(path);\n return decodeContent(content, opts.encoding);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Write file (async)\n */\nexport async function writeFile(path: string, data: string | Buffer | Uint8Array, options?: WriteFileOptions | BufferEncoding): Promise<void> {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.writeFile(path, data, opts);\n } else if (isBun) {\n // @ts-ignore\n await Bun.write(path, data);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.writeFile(path, dataToUint8Array(data));\n }\n}\n\n/**\n * Write file (sync)\n */\nexport function writeFileSync(path: string, data: string | Buffer | Uint8Array, options?: WriteFileOptions | BufferEncoding): void {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n fs.writeFileSync(path, data, opts);\n } else if (isBun) {\n // @ts-ignore\n Bun.write(path, data);\n } else if (isDeno) {\n // @ts-ignore\n Deno.writeFileSync(path, dataToUint8Array(data));\n }\n}\n\n/**\n * Append file (async)\n */\nexport async function appendFile(path: string, data: string | Buffer, options?: WriteFileOptions | BufferEncoding): Promise<void> {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.appendFile(path, data, opts);\n } else {\n if (await exists(path)) {\n const existing = await readFile(path);\n const combined = Buffer.isBuffer(existing)\n ? Buffer.concat([existing, Buffer.isBuffer(data) ? data : Buffer.from(data)])\n : existing + (Buffer.isBuffer(data) ? data.toString() : data);\n await writeFile(path, combined, opts);\n } else {\n await writeFile(path, data, opts);\n }\n }\n}\n\n/**\n * Append file (sync)\n */\nexport function appendFileSync(path: string, data: string | Buffer, options?: WriteFileOptions | BufferEncoding): void {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n fs.appendFileSync(path, data, opts);\n } else {\n if (existsSync(path)) {\n const existing = readFileSync(path);\n const combined = Buffer.isBuffer(existing)\n ? Buffer.concat([existing, Buffer.isBuffer(data) ? data : Buffer.from(data)])\n : existing + (Buffer.isBuffer(data) ? data.toString() : data);\n writeFileSync(path, combined, opts);\n } else {\n writeFileSync(path, data, opts);\n }\n }\n}\n\n/**\n * Check if file/directory exists (async)\n */\nexport async function exists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if file/directory exists (sync)\n */\nexport function existsSync(path: string): boolean {\n try {\n statSync(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get file stats (async)\n */\nexport async function stat(path: string): Promise<Stats> {\n if (isNode || isBun) {\n return fsPromises.stat(path);\n } else if (isDeno) {\n // @ts-ignore\n const info = await Deno.stat(path);\n return createStatsFromDenoFileInfo(info);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Get file stats (sync)\n */\nexport function statSync(path: string): Stats {\n if (isNode || isBun) {\n return fs.statSync(path);\n } else if (isDeno) {\n // @ts-ignore\n const info = Deno.statSync(path);\n return createStatsFromDenoFileInfo(info);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Create directory (async)\n */\nexport async function mkdir(path: string, options?: MkdirOptions | number): Promise<void> {\n const opts = typeof options === 'number' ? { mode: options } as MkdirOptions : options || {};\n\n if (isNode) {\n await fsPromises.mkdir(path, opts);\n } else if (isBun) {\n // @ts-ignore\n await Deno.mkdir(path, { recursive: opts.recursive });\n } else if (isDeno) {\n // @ts-ignore\n await Deno.mkdir(path, { recursive: opts.recursive });\n }\n}\n\n/**\n * Create directory (sync)\n */\nexport function mkdirSync(path: string, options?: MkdirOptions | number): void {\n const opts = typeof options === 'number' ? { mode: options } as MkdirOptions : options || {};\n\n if (isNode) {\n fs.mkdirSync(path, opts);\n } else if (isBun) {\n // @ts-ignore\n Deno.mkdirSync(path, { recursive: opts.recursive });\n } else if (isDeno) {\n // @ts-ignore\n Deno.mkdirSync(path, { recursive: opts.recursive });\n }\n}\n\n/**\n * Read directory (async)\n */\nexport async function readdir(path: string, options?: ReaddirOptions | BufferEncoding): Promise<string[] | Dirent[]> {\n const opts = parseOptions<ReaddirOptions>(options, {});\n\n if (isNode) {\n return fsPromises.readdir(path, opts);\n } else if (isBunOrDeno) {\n // @ts-ignore\n return processDenoEntriesAsync(Deno.readDir(path), opts.withFileTypes);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Read directory (sync)\n */\nexport function readdirSync(path: string, options?: ReaddirOptions | BufferEncoding): string[] | Dirent[] {\n const opts = parseOptions<ReaddirOptions>(options, {});\n\n if (isNode) {\n return fs.readdirSync(path, opts);\n } else if (isBunOrDeno) {\n // @ts-ignore\n return processDenoEntries(Deno.readDirSync(path), opts.withFileTypes);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Remove file (async)\n */\nexport async function unlink(path: string): Promise<void> {\n if (isNode) {\n return fsPromises.unlink(path);\n } else if (isBun) {\n // @ts-ignore\n await Deno.remove(path);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.remove(path);\n }\n}\n\n/**\n * Remove file (sync)\n */\nexport function unlinkSync(path: string): void {\n if (isNode) {\n fs.unlinkSync(path);\n } else if (isBun) {\n // @ts-ignore\n Deno.removeSync(path);\n } else if (isDeno) {\n // @ts-ignore\n Deno.removeSync(path);\n }\n}\n\n/**\n * Remove directory (async)\n */\nexport async function rmdir(path: string, options?: { recursive?: boolean }): Promise<void> {\n if (isNode) {\n return fsPromises.rmdir(path, options);\n } else if (isBun) {\n // @ts-ignore\n await Deno.remove(path, { recursive: options?.recursive });\n } else if (isDeno) {\n // @ts-ignore\n await Deno.remove(path, { recursive: options?.recursive });\n }\n}\n\n/**\n * Remove directory (sync)\n */\nexport function rmdirSync(path: string, options?: { recursive?: boolean }): void {\n if (isNode) {\n fs.rmdirSync(path, options);\n } else if (isBun) {\n // @ts-ignore\n Deno.removeSync(path, { recursive: options?.recursive });\n } else if (isDeno) {\n // @ts-ignore\n Deno.removeSync(path, { recursive: options?.recursive });\n }\n}\n\n/**\n * Rename/move file (async)\n */\nexport async function rename(oldPath: string, newPath: string): Promise<void> {\n if (isNode) {\n return fsPromises.rename(oldPath, newPath);\n } else if (isBun) {\n // @ts-ignore\n await Deno.rename(oldPath, newPath);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.rename(oldPath, newPath);\n }\n}\n\n/**\n * Rename/move file (sync)\n */\nexport function renameSync(oldPath: string, newPath: string): void {\n if (isNode) {\n fs.renameSync(oldPath, newPath);\n } else if (isBun) {\n // @ts-ignore\n Deno.renameSync(oldPath, newPath);\n } else if (isDeno) {\n // @ts-ignore\n Deno.renameSync(oldPath, newPath);\n }\n}\n\n/**\n * Copy file (async)\n */\nexport async function copyFile(src: string, dest: string, flags?: number): Promise<void> {\n if (isNode) {\n return fsPromises.copyFile(src, dest, flags);\n } else if (isBun) {\n // @ts-ignore\n await Deno.copyFile(src, dest);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.copyFile(src, dest);\n }\n}\n\n/**\n * Copy file (sync)\n */\nexport function copyFileSync(src: string, dest: string, flags?: number): void {\n if (isNode) {\n fs.copyFileSync(src, dest, flags);\n } else if (isBun) {\n // @ts-ignore\n Deno.copyFileSync(src, dest);\n } else if (isDeno) {\n // @ts-ignore\n Deno.copyFileSync(src, dest);\n }\n}\n\n/**\n * Resolve pathname to absolute path (async)\n */\nexport async function realpath(path: string, options?: { encoding?: BufferEncoding }): Promise<string> {\n if (isNode) {\n return fsPromises.realpath(path, options);\n } else if (isBun) {\n // Bun supports fs.promises.realpath\n const fs = require('fs/promises');\n return fs.realpath(path, options);\n } else if (isDeno) {\n // @ts-ignore\n return await Deno.realPath(path);\n }\n return path;\n}\n\n/**\n * Resolve pathname to absolute path (sync)\n */\nexport function realpathSync(path: string, options?: { encoding?: BufferEncoding }): string {\n if (isNode) {\n return fs.realpathSync(path, options);\n } else if (isBun) {\n // Bun supports fs.realpathSync\n const fs = require('fs');\n return fs.realpathSync(path, options);\n } else if (isDeno) {\n // @ts-ignore\n return Deno.realPathSync(path);\n }\n return path;\n}\n\n/**\n * Helper: Create Stats from Deno FileInfo\n */\nfunction createStatsFromDenoFileInfo(info: any): Stats {\n return {\n isFile: () => info.isFile,\n isDirectory: () => info.isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => info.isSymlink || false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: info.dev || 0,\n ino: info.ino || 0,\n mode: info.mode || 0,\n nlink: info.nlink || 1,\n uid: info.uid || 0,\n gid: info.gid || 0,\n rdev: 0,\n size: info.size,\n blksize: info.blksize || 4096,\n blocks: info.blocks || Math.ceil(info.size / 512),\n atimeMs: info.atime?.getTime() || Date.now(),\n mtimeMs: info.mtime?.getTime() || Date.now(),\n ctimeMs: info.birthtime?.getTime() || Date.now(),\n birthtimeMs: info.birthtime?.getTime() || Date.now(),\n atime: info.atime || new Date(),\n mtime: info.mtime || new Date(),\n ctime: info.birthtime || new Date(),\n birthtime: info.birthtime || new Date(),\n };\n}\n\n/**\n * Helper: Create Dirent from Deno DirEntry\n */\nfunction createDirentFromDenoEntry(entry: any): Dirent {\n return {\n name: entry.name,\n isFile: () => entry.isFile,\n isDirectory: () => entry.isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => entry.isSymlink || false,\n isFIFO: () => false,\n isSocket: () => false,\n };\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Promises API (re-export for compatibility)\n */\nexport const promises = {\n readFile,\n writeFile,\n appendFile,\n stat,\n mkdir,\n readdir,\n unlink,\n rmdir,\n rename,\n copyFile,\n realpath,\n};\n\n/**\n * Default export\n */\nexport default {\n readFile,\n readFileSync,\n writeFile,\n writeFileSync,\n appendFile,\n appendFileSync,\n exists,\n existsSync,\n stat,\n statSync,\n mkdir,\n mkdirSync,\n readdir,\n readdirSync,\n unlink,\n unlinkSync,\n rmdir,\n rmdirSync,\n rename,\n renameSync,\n copyFile,\n copyFileSync,\n realpath,\n realpathSync,\n promises,\n getRuntime,\n};\n","/**\n * Path module with unified API across runtimes\n * Pure implementation without external dependencies\n * Compatible with Node.js 'path' module API\n * Works on Node.js, Bun, and Deno\n */\n\nimport { isBun, isDeno, isNode, runtime } from './runtime';\n\n/**\n * Helper: Get path separator for platform (eliminates duplication in separator logic)\n */\nfunction getSeparator(isWin: boolean): string {\n return isWin ? '\\\\' : '/';\n}\n\n/**\n * Helper: Get current working directory (eliminates duplication in resolvePaths)\n */\nfunction getCwd(): string {\n if (isNode || isBun) {\n return process.cwd();\n } else if (isDeno) {\n // @ts-ignore\n return Deno.cwd();\n }\n return '/';\n}\n\n/**\n * Helper: Find last separator index (eliminates duplication in getExtname and getBasename)\n */\nfunction findLastSeparator(path: string): number {\n return Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\\\'));\n}\n\n/**\n * Helper: Create path operation object (eliminates duplication in posix and win32)\n */\nfunction createPathOps(isWin: boolean) {\n return {\n sep: getSeparator(isWin),\n delimiter: isWin ? ';' : ':',\n normalize: (path: string) => normalizePath(path, isWin),\n join: (...paths: string[]) => joinPaths(paths, isWin),\n resolve: (...paths: string[]) => resolvePaths(paths, isWin),\n isAbsolute: (path: string) => isWin ? isAbsoluteWin(path) : isAbsolutePosix(path),\n relative: (from: string, to: string) => relativePath(from, to, isWin),\n dirname: (path: string) => getDirname(path, isWin),\n basename: (path: string, ext?: string) => getBasename(path, ext, isWin),\n extname: (path: string) => getExtname(path),\n parse: (path: string) => parsePath(path, isWin),\n format: (pathObject: FormatInputPathObject) => formatPath(pathObject, isWin)\n };\n}\n\n/**\n * Helper: Check if path is absolute (POSIX)\n */\nfunction isAbsolutePosix(path: string): boolean {\n return path.length > 0 && path[0] === '/';\n}\n\n/**\n * Helper: Check if path is absolute (Windows)\n */\nfunction isAbsoluteWin(path: string): boolean {\n const len = path.length;\n if (len === 0) return false;\n\n const code = path.charCodeAt(0);\n if (code === 47 /* / */ || code === 92 /* \\ */) {\n return true;\n }\n\n // Check for drive letter\n if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122)) {\n if (len > 2 && path.charCodeAt(1) === 58 /* : */) {\n const code2 = path.charCodeAt(2);\n if (code2 === 47 /* / */ || code2 === 92 /* \\ */) {\n return true;\n }\n }\n }\n\n return false;\n}\n\n/**\n * Platform detection\n */\nconst isWindows = (() => {\n if (isNode) {\n return process.platform === 'win32';\n } else if (isDeno) {\n // @ts-ignore\n return Deno.build.os === 'windows';\n }\n // Bun uses process.platform like Node\n return typeof process !== 'undefined' && process.platform === 'win32';\n})();\n\n/**\n * Path separator\n */\nexport const sep = isWindows ? '\\\\' : '/';\n\n/**\n * Path delimiter\n */\nexport const delimiter = isWindows ? ';' : ':';\n\n/**\n * POSIX path operations\n */\nconst posix = createPathOps(false);\n\n/**\n * Windows path operations\n */\nconst win32 = createPathOps(true);\n\n/**\n * Path object interface\n */\nexport interface ParsedPath {\n root: string;\n dir: string;\n base: string;\n ext: string;\n name: string;\n}\n\nexport interface FormatInputPathObject {\n root?: string;\n dir?: string;\n base?: string;\n ext?: string;\n name?: string;\n}\n\n/**\n * Normalize a path\n */\nfunction normalizePath(path: string, isWin: boolean): string {\n if (path.length === 0) return '.';\n\n const separator = getSeparator(isWin);\n const isAbsolute = isWin ? isAbsoluteWin(path) : isAbsolutePosix(path);\n const trailingSeparator = path[path.length - 1] === separator || (isWin && path[path.length - 1] === '/');\n\n // Normalize slashes\n let normalized = path.replace(isWin ? /[\\/\\\\]+/g : /\\/+/g, separator);\n\n // Split path\n const parts = normalized.split(separator);\n const result: string[] = [];\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n\n if (part === '' || part === '.') {\n if (i === 0 && isAbsolute) result.push('');\n continue;\n }\n\n if (part === '..') {\n if (result.length > 0 && result[result.length - 1] !== '..') {\n if (!(result.length === 1 && result[0] === '')) {\n result.pop();\n }\n } else if (!isAbsolute) {\n result.push('..');\n }\n } else {\n result.push(part);\n }\n }\n\n let final = result.join(separator);\n\n if (final.length === 0) {\n return isAbsolute ? separator : '.';\n }\n\n if (trailingSeparator && final[final.length - 1] !== separator) {\n final += separator;\n }\n\n return final;\n}\n\n/**\n * Join paths\n */\nfunction joinPaths(paths: string[], isWin: boolean): string {\n if (paths.length === 0) return '.';\n\n const separator = getSeparator(isWin);\n let joined = '';\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i];\n if (path && path.length > 0) {\n if (joined.length === 0) {\n joined = path;\n } else {\n joined += separator + path;\n }\n }\n }\n\n if (joined.length === 0) return '.';\n\n return normalizePath(joined, isWin);\n}\n\n/**\n * Resolve paths to absolute path\n */\nfunction resolvePaths(paths: string[], isWin: boolean): string {\n const separator = getSeparator(isWin);\n let resolved = '';\n let isAbsolute = false;\n\n for (let i = paths.length - 1; i >= 0 && !isAbsolute; i--) {\n const path = paths[i];\n if (path && path.length > 0) {\n resolved = path + (resolved.length > 0 ? separator + resolved : '');\n isAbsolute = isWin ? isAbsoluteWin(resolved) : isAbsolutePosix(resolved);\n }\n }\n\n if (!isAbsolute) {\n const cwd = getCwd();\n resolved = cwd + (resolved.length > 0 ? separator + resolved : '');\n }\n\n return normalizePath(resolved, isWin);\n}\n\n/**\n * Get relative path\n */\nfunction relativePath(from: string, to: string, isWin: boolean): string {\n from = resolvePaths([from], isWin);\n to = resolvePaths([to], isWin);\n\n if (from === to) return '';\n\n const separator = getSeparator(isWin);\n const fromParts = from.split(separator).filter(p => p.length > 0);\n const toParts = to.split(separator).filter(p => p.length > 0);\n\n let commonLength = 0;\n const minLength = Math.min(fromParts.length, toParts.length);\n\n for (let i = 0; i < minLength; i++) {\n if (fromParts[i] === toParts[i]) {\n commonLength++;\n } else {\n break;\n }\n }\n\n const upCount = fromParts.length - commonLength;\n const result: string[] = [];\n\n for (let i = 0; i < upCount; i++) {\n result.push('..');\n }\n\n for (let i = commonLength; i < toParts.length; i++) {\n result.push(toParts[i]);\n }\n\n return result.join(separator) || '.';\n}\n\n/**\n * Get directory name\n */\nfunction getDirname(path: string, isWin: boolean): string {\n if (path.length === 0) return '.';\n\n const separator = getSeparator(isWin);\n const normalized = normalizePath(path, isWin);\n const lastSepIndex = normalized.lastIndexOf(separator);\n\n if (lastSepIndex === -1) return '.';\n if (lastSepIndex === 0) return separator;\n\n return normalized.slice(0, lastSepIndex);\n}\n\n/**\n * Get base name\n */\nfunction getBasename(path: string, ext?: string, isWin?: boolean): string {\n if (path.length === 0) return '';\n\n const lastSepIndex = isWin ? findLastSeparator(path) : path.lastIndexOf('/');\n let base = lastSepIndex === -1 ? path : path.slice(lastSepIndex + 1);\n\n if (ext && base.endsWith(ext)) {\n base = base.slice(0, base.length - ext.length);\n }\n\n return base;\n}\n\n/**\n * Get extension name\n */\nfunction getExtname(path: string): string {\n const lastDotIndex = path.lastIndexOf('.');\n const lastSepIndex = findLastSeparator(path);\n\n if (lastDotIndex === -1 || lastDotIndex < lastSepIndex || lastDotIndex === path.length - 1) {\n return '';\n }\n\n return path.slice(lastDotIndex);\n}\n\n/**\n * Parse path into components\n */\nfunction parsePath(path: string, isWin: boolean): ParsedPath {\n let root = '';\n if (isWin) {\n // Check for Windows drive letter\n if (path.length >= 2 && path[1] === ':') {\n root = path.slice(0, 2);\n if (path.length > 2 && (path[2] === '\\\\' || path[2] === '/')) {\n root += '\\\\';\n }\n } else if (path[0] === '\\\\' || path[0] === '/') {\n root = '\\\\';\n }\n } else {\n if (path[0] === '/') {\n root = '/';\n }\n }\n\n const dir = getDirname(path, isWin);\n const base = getBasename(path, undefined, isWin);\n const ext = getExtname(path);\n const name = ext ? base.slice(0, base.length - ext.length) : base;\n\n return { root, dir, base, ext, name };\n}\n\n/**\n * Format path from components\n */\nfunction formatPath(pathObject: FormatInputPathObject, isWin: boolean): string {\n const separator = getSeparator(isWin);\n const dir = pathObject.dir || pathObject.root || '';\n const base = pathObject.base || ((pathObject.name || '') + (pathObject.ext || ''));\n\n if (!dir) return base;\n if (dir === pathObject.root) return dir + base;\n\n return dir + separator + base;\n}\n\n/**\n * Normalize a path (platform-specific)\n */\nexport function normalize(path: string): string {\n return normalizePath(path, isWindows);\n}\n\n/**\n * Join paths (platform-specific)\n */\nexport function join(...paths: string[]): string {\n return joinPaths(paths, isWindows);\n}\n\n/**\n * Resolve paths to absolute path (platform-specific)\n */\nexport function resolve(...paths: string[]): string {\n return resolvePaths(paths, isWindows);\n}\n\n/**\n * Check if path is absolute (platform-specific)\n */\nexport function isAbsolute(path: string): boolean {\n return isWindows ? win32.isAbsolute(path) : posix.isAbsolute(path);\n}\n\n/**\n * Get relative path (platform-specific)\n */\nexport function relative(from: string, to: string): string {\n return relativePath(from, to, isWindows);\n}\n\n/**\n * Get directory name (platform-specific)\n */\nexport function dirname(path: string): string {\n return getDirname(path, isWindows);\n}\n\n/**\n * Get base name (platform-specific)\n */\nexport function basename(path: string, ext?: string): string {\n return getBasename(path, ext, isWindows);\n}\n\n/**\n * Get extension name\n */\nexport function extname(path: string): string {\n return getExtname(path);\n}\n\n/**\n * Parse path into components (platform-specific)\n */\nexport function parse(path: string): ParsedPath {\n return parsePath(path, isWindows);\n}\n\n/**\n * Format path from components (platform-specific)\n */\nexport function format(pathObject: FormatInputPathObject): string {\n return formatPath(pathObject, isWindows);\n}\n\n/**\n * Convert to namespaced path (Windows only)\n */\nexport function toNamespacedPath(path: string): string {\n if (!isWindows || path.length === 0) return path;\n\n const resolved = resolve(path);\n\n if (resolved.length >= 3) {\n if (resolved[0] === '\\\\') {\n // UNC path\n if (resolved[1] === '\\\\' && resolved[2] !== '?') {\n return '\\\\\\\\?\\\\UNC\\\\' + resolved.slice(2);\n }\n } else if (resolved[1] === ':' && resolved[2] === '\\\\') {\n // Drive letter\n return '\\\\\\\\?\\\\' + resolved;\n }\n }\n\n return path;\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Export POSIX and Win32 implementations\n */\nexport { posix, win32 };\n\n/**\n * Default export\n */\nexport default {\n sep,\n delimiter,\n normalize,\n join,\n resolve,\n isAbsolute,\n relative,\n dirname,\n basename,\n extname,\n parse,\n format,\n toNamespacedPath,\n posix,\n win32,\n getRuntime,\n};\n","/**\n * Config loader for elit.config.{ts,mts,js,mjs,cjs,json}\n */\n\nimport { existsSync, readFileSync } from './fs';\nimport { resolve } from './path';\nimport type { DevServerOptions, BuildOptions, PreviewOptions, TestOptions } from './types';\n\n/**\n * Helper: Read file and ensure string output (eliminates duplication in file reading)\n */\nfunction readFileAsString(filePath: string): string {\n const contentBuffer = readFileSync(filePath, 'utf-8');\n return typeof contentBuffer === 'string' ? contentBuffer : contentBuffer.toString('utf-8');\n}\n\n/**\n * Helper: Remove surrounding quotes from string (eliminates duplication in env parsing)\n */\nfunction removeQuotes(value: string): string {\n const trimmed = value.trim();\n if ((trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n}\n\n/**\n * Helper: Import config module and return default or module (eliminates duplication in config loading)\n */\nasync function importConfigModule(configPath: string): Promise<ElitConfig> {\n const { pathToFileURL } = await import('url');\n const configModule = await import(pathToFileURL(configPath).href);\n return configModule.default || configModule;\n}\n\n/**\n * Helper: Safe file cleanup (eliminates duplication in temp file cleanup)\n */\nasync function safeCleanup(filePath: string): Promise<void> {\n try {\n const { unlinkSync } = await import('./fs');\n unlinkSync(filePath);\n } catch {\n // Ignore cleanup errors\n }\n}\n\nexport interface ElitConfig {\n /** Development server configuration */\n dev?: DevServerOptions;\n /** Build configuration - supports single build or multiple builds */\n build?: BuildOptions | BuildOptions[];\n /** Preview server configuration */\n preview?: PreviewOptions;\n /** Test configuration */\n test?: TestOptions;\n /** Desktop command configuration */\n desktop?: DesktopConfig;\n /** WAPK packaging configuration */\n wapk?: WapkConfig;\n}\n\nexport interface DesktopConfig {\n /** Native desktop runtime: quickjs, bun, node, deno */\n runtime?: 'quickjs' | 'bun' | 'node' | 'deno';\n /** Desktop entry compiler: auto, none, esbuild, tsx, tsup */\n compiler?: 'auto' | 'none' | 'esbuild' | 'tsx' | 'tsup';\n /** Build or run with release desktop runtime */\n release?: boolean;\n /** Desktop build output directory */\n outDir?: string;\n /** Desktop build target platform */\n platform?:\n | 'windows'\n | 'win'\n | 'windows-arm'\n | 'win-arm'\n | 'linux'\n | 'linux-musl'\n | 'linux-arm'\n | 'macos'\n | 'mac'\n | 'darwin'\n | 'macos-arm'\n | 'mac-arm';\n /** Desktop WAPK mode defaults */\n wapk?: {\n /** Packaged runtime to execute inside desktop mode */\n runtime?: 'node' | 'bun' | 'deno';\n /** Polling interval for WAPK live sync */\n syncInterval?: number;\n /** Use event-driven file watcher for WAPK live sync */\n useWatcher?: boolean;\n /** Use release desktop runtime binary */\n release?: boolean;\n };\n}\n\nexport interface WapkConfig {\n name?: string;\n version?: string;\n runtime?: string;\n engine?: string;\n entry?: string;\n scripts?: Record<string, string>;\n port?: number;\n env?: Record<string, string | number | boolean>;\n desktop?: Record<string, unknown>;\n}\n\n/**\n * Helper function for type-safe config definition\n */\nexport function defineConfig(config: ElitConfig): ElitConfig {\n return config;\n}\n\nexport const ELIT_CONFIG_FILES = [\n 'elit.config.ts',\n 'elit.config.mts',\n 'elit.config.js',\n 'elit.config.mjs',\n 'elit.config.cjs',\n 'elit.config.json'\n] as const;\n\n/**\n * Load environment variables from .env files\n */\nexport function loadEnv(mode: string = 'development', cwd: string = process.cwd()): Record<string, string> {\n const env: Record<string, string> = { MODE: mode };\n\n // Load .env files in priority order\n const envFiles = [\n `.env.${mode}.local`,\n `.env.${mode}`,\n `.env.local`,\n `.env`\n ];\n\n for (const file of envFiles) {\n const filePath = resolve(cwd, file);\n if (existsSync(filePath)) {\n const content = readFileAsString(filePath);\n const lines = content.split('\\n');\n\n for (const line of lines) {\n const trimmed = line.trim();\n // Skip empty lines and comments\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n const match = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*)$/);\n if (match) {\n const [, key, value] = match;\n const cleanValue = removeQuotes(value);\n // Only set if not already set (priority order)\n if (!(key in env)) {\n env[key] = cleanValue;\n }\n }\n }\n }\n }\n\n return env;\n}\n\n/**\n * Load elit config from current directory\n */\nexport async function loadConfig(cwd: string = process.cwd()): Promise<ElitConfig | null> {\n for (const configFile of ELIT_CONFIG_FILES) {\n const configPath = resolve(cwd, configFile);\n\n if (existsSync(configPath)) {\n try {\n return await loadConfigFile(configPath);\n } catch (error) {\n console.error(`Error loading config file: ${configFile}`);\n console.error(error);\n throw error;\n }\n }\n }\n\n return null;\n}\n\nasync function loadConfigFile(configPath: string): Promise<ElitConfig> {\n const ext = configPath.split('.').pop();\n\n if (ext === 'json') {\n // Load JSON config\n const content = readFileAsString(configPath);\n return JSON.parse(content);\n } else if (ext === 'ts' || ext === 'mts') {\n // Load TypeScript config by transpiling it with esbuild\n try {\n const { build } = await import('esbuild');\n const { join, dirname } = await import('./path');\n\n // Create temporary output file in the same directory as the config\n // This ensures that imports like 'elit/server' can be resolved correctly\n const configDir = dirname(configPath);\n const tempFile = join(configDir, `.elit-config-${Date.now()}.mjs`);\n\n // Custom plugin to external all dependencies\n const externalAllPlugin = {\n name: 'external-all',\n setup(build: any) {\n build.onResolve({ filter: /.*/ }, (args: any) => {\n // Skip relative imports (local files)\n if (args.path.startsWith('./') || args.path.startsWith('../')) {\n return undefined;\n }\n\n // External everything in node_modules\n if (args.path.includes('node_modules') || args.resolveDir?.includes('node_modules')) {\n return { path: args.path, external: true };\n }\n\n // External known packages by exact match or prefix\n const knownPackages = ['esbuild', 'elit', 'fs', 'path', 'os', 'vm', 'crypto', 'http', 'https', 'url', 'bun'];\n if (knownPackages.some(pkg => args.path === pkg || args.path.startsWith(pkg + '/'))) {\n return { path: args.path, external: true };\n }\n\n // External any imports from dist directory (elit package)\n if (args.resolveDir?.includes('elit/dist') || args.path.includes('elit/dist')) {\n return { path: args.path, external: true };\n }\n\n return undefined;\n });\n }\n };\n\n await build({\n entryPoints: [configPath],\n bundle: true,\n format: 'esm',\n platform: 'node',\n outfile: tempFile,\n write: true,\n target: 'es2020',\n plugins: [externalAllPlugin],\n // External Node.js built-ins and runtime-specific packages\n external: [\n 'node:*',\n 'fs', 'path', 'os', 'vm', 'crypto', 'http', 'https',\n 'bun', 'bun:*', 'deno', 'deno:*'\n ],\n // Use the config directory as the working directory for resolution\n absWorkingDir: configDir,\n });\n\n // Import the compiled config\n const config = await importConfigModule(tempFile);\n\n // Clean up temp file\n await safeCleanup(tempFile);\n\n return config;\n } catch (error) {\n console.error('Failed to load TypeScript config file.');\n console.error('You can use a .js, .mjs, or .json config file instead.');\n throw error;\n }\n } else {\n // Load JS config\n return await importConfigModule(configPath);\n }\n}\n\n/**\n * Merge CLI args with config file\n */\nexport function mergeConfig<T extends Record<string, any>>(\n config: T | undefined,\n cliArgs: Partial<T>\n): T {\n if (!config) {\n return cliArgs as T;\n }\n\n return {\n ...config,\n ...Object.fromEntries(\n Object.entries(cliArgs).filter(([_, v]) => v !== undefined)\n )\n } as T;\n}\n"],"mappings":"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","names":["fs","getRuntime","isAbsolute","unlinkSync","join","dirname","build"]}
|
package/dist/coverage.js
CHANGED
|
@@ -77,18 +77,14 @@ function processDenoEntries(iterator, withFileTypes) {
|
|
|
77
77
|
}
|
|
78
78
|
var fs;
|
|
79
79
|
var fsPromises;
|
|
80
|
-
if (isNode) {
|
|
80
|
+
if (isNode || isBun) {
|
|
81
81
|
fs = require("fs");
|
|
82
82
|
fsPromises = require("fs/promises");
|
|
83
83
|
}
|
|
84
84
|
function readFileSync(path, options) {
|
|
85
85
|
const opts = parseOptions(options, {});
|
|
86
|
-
if (isNode) {
|
|
86
|
+
if (isNode || isBun) {
|
|
87
87
|
return fs.readFileSync(path, opts);
|
|
88
|
-
} else if (isBun) {
|
|
89
|
-
const file = Bun.file(path);
|
|
90
|
-
const content = file.arrayBuffer();
|
|
91
|
-
return decodeContent(content, opts.encoding);
|
|
92
88
|
} else if (isDeno) {
|
|
93
89
|
const content = Deno.readFileSync(path);
|
|
94
90
|
return decodeContent(content, opts.encoding);
|
|
@@ -114,17 +110,8 @@ function existsSync(path) {
|
|
|
114
110
|
}
|
|
115
111
|
}
|
|
116
112
|
function statSync(path) {
|
|
117
|
-
if (isNode) {
|
|
113
|
+
if (isNode || isBun) {
|
|
118
114
|
return fs.statSync(path);
|
|
119
|
-
} else if (isBun) {
|
|
120
|
-
const file = Bun.file(path);
|
|
121
|
-
const size = file.size;
|
|
122
|
-
try {
|
|
123
|
-
file.arrayBuffer();
|
|
124
|
-
} catch {
|
|
125
|
-
throw new Error(`ENOENT: no such file or directory, stat '${path}'`);
|
|
126
|
-
}
|
|
127
|
-
return createStatsObject(path, size, false);
|
|
128
115
|
} else if (isDeno) {
|
|
129
116
|
const info = Deno.statSync(path);
|
|
130
117
|
return createStatsFromDenoFileInfo(info);
|
|
@@ -150,36 +137,6 @@ function readdirSync(path, options) {
|
|
|
150
137
|
}
|
|
151
138
|
throw new Error("Unsupported runtime");
|
|
152
139
|
}
|
|
153
|
-
function createStatsObject(_path, size, isDir) {
|
|
154
|
-
const now = Date.now();
|
|
155
|
-
return {
|
|
156
|
-
isFile: () => !isDir,
|
|
157
|
-
isDirectory: () => isDir,
|
|
158
|
-
isBlockDevice: () => false,
|
|
159
|
-
isCharacterDevice: () => false,
|
|
160
|
-
isSymbolicLink: () => false,
|
|
161
|
-
isFIFO: () => false,
|
|
162
|
-
isSocket: () => false,
|
|
163
|
-
dev: 0,
|
|
164
|
-
ino: 0,
|
|
165
|
-
mode: isDir ? 16877 : 33188,
|
|
166
|
-
nlink: 1,
|
|
167
|
-
uid: 0,
|
|
168
|
-
gid: 0,
|
|
169
|
-
rdev: 0,
|
|
170
|
-
size,
|
|
171
|
-
blksize: 4096,
|
|
172
|
-
blocks: Math.ceil(size / 512),
|
|
173
|
-
atimeMs: now,
|
|
174
|
-
mtimeMs: now,
|
|
175
|
-
ctimeMs: now,
|
|
176
|
-
birthtimeMs: now,
|
|
177
|
-
atime: new Date(now),
|
|
178
|
-
mtime: new Date(now),
|
|
179
|
-
ctime: new Date(now),
|
|
180
|
-
birthtime: new Date(now)
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
140
|
function createStatsFromDenoFileInfo(info) {
|
|
184
141
|
return {
|
|
185
142
|
isFile: () => info.isFile,
|