@h3ravel/shared 0.27.7 → 0.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["value: any","path","input","path: string","nodepath","path","result: any","e: any"],"sources":["../src/Utils/EnvParser.ts","../src/Utils/FileSystem.ts","../src/Utils/Logger.ts","../src/Utils/PathLoader.ts","../src/Utils/Prompts.ts","../src/Utils/Resolver.ts","../src/Utils/scripts.ts","../src/Utils/TaskManager.ts"],"sourcesContent":["import { GenericWithNullableStringValues } from '../Contracts/ObjContract'\n\nexport class EnvParser {\n\n static parse (initial: GenericWithNullableStringValues) {\n const parsed = { ...initial }\n\n for (const key in parsed) {\n const value: any = parsed[key]\n parsed[key] = this.parseValue(value)\n }\n\n return parsed\n }\n\n static parseValue (value: any) {\n /**\n * Null/undefined stay untouched \n */\n if (value === null || value === undefined) return value\n\n /**\n * Convert string \"true\"/\"false\" to boolean \n */\n if (value === 'true') return true\n if (value === 'false') return false\n\n /**\n * Convert string numbers to number \n */\n if (!isNaN(value) && value.trim() !== '') {\n return Number(value)\n }\n\n /**\n * Convert string \"null\" and \"undefined\"\n */\n if (value === 'null') return null\n if (value === 'undefined') return undefined\n\n /**\n * Otherwise return as-is (string)\n */\n return value\n }\n}\n","import { access } from 'fs/promises'\nimport escalade from 'escalade/sync'\nimport path from 'path'\n\nexport class FileSystem {\n static findModulePkg (moduleId: string, cwd?: string) {\n const parts = moduleId.replace(/\\\\/g, '/').split('/')\n\n let packageName = ''\n // Handle scoped package name\n if (parts.length > 0 && parts[0][0] === '@') {\n packageName += parts.shift() + '/'\n }\n packageName += parts.shift()\n\n const packageJson = path.join(cwd ?? process.cwd(), 'node_modules', packageName)\n\n const resolved = this.resolveFileUp('package', ['json'], packageJson)\n\n if (!resolved) {\n return\n }\n\n return path.join(path.dirname(resolved), parts.join('/'))\n }\n\n /**\n * Check if file exists\n * \n * @param path \n * @returns \n */\n static async fileExists (path: string): Promise<boolean> {\n try {\n await access(path)\n return true\n } catch {\n return false\n }\n }\n\n /**\n * Recursively find files starting from given cwd\n * \n * @param name \n * @param extensions \n * @param cwd \n * \n * @returns \n */\n static resolveFileUp (\n name: string,\n extensions: string[] | ((dir: string, filesNames: string[]) => string | false),\n cwd?: string\n ) {\n cwd ??= process.cwd()\n\n return escalade(cwd, (dir, filesNames) => {\n if (typeof extensions === 'function') {\n return extensions(dir, filesNames)\n }\n\n const candidates = new Set(extensions.map(ext => `${name}.${ext}`))\n for (const filename of filesNames) {\n if (candidates.has(filename)) {\n return filename\n }\n }\n\n return false\n }) ?? undefined\n }\n} \n","import chalk, { type ChalkInstance } from 'chalk'\nimport { LoggerChalk, LoggerLog, LoggerParseSignature } from '../Contracts/Utils'\n\nexport class Logger {\n /**\n * Global verbosity configuration\n */\n private static verbosity: number = 0\n private static isQuiet: boolean = false\n private static isSilent: boolean = false\n\n /**\n * Configure global verbosity levels\n */\n static configure (options: { verbosity?: number, quiet?: boolean, silent?: boolean } = {}) {\n this.verbosity = options.verbosity ?? 0\n this.isQuiet = options.quiet ?? false\n this.isSilent = options.silent ?? false\n }\n\n /**\n * Check if output should be suppressed\n */\n private static shouldSuppressOutput (level: 'line' | 'debug' | 'info' | 'warn' | 'error' | 'success'): boolean {\n if (this.isSilent) return true\n if (this.isQuiet && (level === 'info' || level === 'success')) return true\n if (level === 'debug' && this.verbosity < 3) return true\n return false\n }\n /**\n * Logs the message in two columns\n * \n * @param name \n * @param value \n * @param log If set to false, array of [name, dots, value] output will be returned and not logged \n * @returns \n */\n static twoColumnDetail (name: string, value: string, log?: true, spacer?: string): void\n static twoColumnDetail (name: string, value: string, log?: false, spacer?: string): [string, string, string]\n static twoColumnDetail (name: string, value: string, log = true, spacer = '.'): [string, string, string] | void {\n // eslint-disable-next-line no-control-regex\n const regex = /\\x1b\\[\\d+m/g\n const width = Math.max(process.stdout.columns, 100)\n const dots = Math.max(width - name.replace(regex, '').length - value.replace(regex, '').length - 10, 0)\n\n if (log) return console.log(name, chalk.gray(spacer.repeat(dots)), value)\n else return [name, chalk.gray(spacer.repeat(dots)), value]\n }\n\n /**\n * Logs the message in two columns\n * \n * @param name \n * @param desc \n * @param width \n * @param log If set to false, array of [name, dots, value] output will be returned and not logged \n * @returns \n */\n static describe (name: string, desc: string, width?: number, log?: true): void\n static describe (name: string, desc: string, width?: number, log?: false): [string, string, string]\n static describe (name: string, desc: string, width = 50, log = true): [string, string, string] | void {\n width = Math.max(width, 30)\n // eslint-disable-next-line no-control-regex\n const regex = /\\x1b\\[\\d+m/g\n const dots = Math.max(width - name.replace(regex, '').length, 0)\n\n if (log) return console.log(name, ' '.repeat(dots), desc)\n else return [name, ' '.repeat(dots), desc]\n }\n\n /**\n * Logs the message in two columns but allways passing status\n * \n * @param name \n * @param value \n * @param status \n * @param exit \n * @param preserveCol \n */\n static split (name: string, value: string, status?: 'success' | 'info' | 'error', exit = false, preserveCol = false) {\n status ??= 'info'\n const color = { success: chalk.bgGreen, info: chalk.bgBlue, error: chalk.bgRed }\n\n const [_name, dots, val] = this.twoColumnDetail(name, value, false)\n\n console.log(this.textFormat(_name, color[status], preserveCol), dots, val)\n\n if (exit) process.exit(0)\n }\n\n /**\n * Wraps text with chalk\n * \n * @param txt \n * @param color \n * @param preserveCol \n * @returns \n */\n static textFormat (\n txt: unknown,\n color: (txt: string) => string,\n preserveCol = false\n ): string {\n const str = String(txt)\n\n if (preserveCol) return str\n\n const [first, ...rest] = str.split(':')\n if (rest.length === 0) return str\n\n return color(` ${first} `) + rest.join(':')\n }\n\n /**\n * Logs a success message\n * \n * @param msg \n * @param exit \n * @param preserveCol \n */\n static success (msg: any, exit = false, preserveCol = false) {\n if (!this.shouldSuppressOutput('success')) {\n console.log(chalk.green('✓'), this.textFormat(msg, chalk.bgGreen, preserveCol))\n }\n if (exit) process.exit(0)\n }\n\n /**\n * Logs an informational message\n * \n * @param msg \n * @param exit \n * @param preserveCol \n */\n static info (msg: any, exit = false, preserveCol = false) {\n if (!this.shouldSuppressOutput('info')) {\n console.log(chalk.blue('ℹ'), this.textFormat(msg, chalk.bgBlue, preserveCol))\n }\n if (exit) process.exit(0)\n }\n\n /**\n * Logs an error message\n * \n * @param msg \n * @param exit \n * @param preserveCol \n */\n static error (msg: string | string[] | Error & { detail?: string }, exit = true, preserveCol = false) {\n if (!this.shouldSuppressOutput('error')) {\n if (msg instanceof Error) {\n if (msg.message) {\n console.error(chalk.red('✖'), this.textFormat('ERROR:' + msg.message, chalk.bgRed, preserveCol))\n }\n console.error(chalk.red(`${msg.detail ? `${msg.detail}\\n` : ''}${msg.stack}`))\n }\n else {\n console.error(chalk.red('✖'), this.textFormat(msg, chalk.bgRed, preserveCol))\n }\n }\n if (exit) process.exit(1)\n }\n\n /**\n * Logs a warning message\n * \n * @param msg \n * @param exit \n * @param preserveCol \n */\n static warn (msg: any, exit = false, preserveCol = false) {\n if (!this.shouldSuppressOutput('warn')) {\n console.warn(chalk.yellow('⚠'), this.textFormat(msg, chalk.bgYellow, preserveCol))\n }\n if (exit) process.exit(0)\n }\n\n /**\n * Logs a debug message (only shown with verbosity >= 3)\n * \n * @param msg \n * @param exit \n * @param preserveCol \n */\n static debug<M = any> (msg: M | M[], exit = false, preserveCol = false) {\n if (!this.shouldSuppressOutput('debug')) {\n if (Array.isArray(msg)) {\n for (let i = 0; i < msg.length; i++) {\n console.log(chalk.gray('🐛'), chalk.bgGray(i + 1), this.textFormat(msg[i], chalk.bgGray, preserveCol))\n }\n } else {\n console.log(chalk.gray('🐛'), this.textFormat(msg, chalk.bgGray, preserveCol))\n }\n }\n if (exit) process.exit(0)\n }\n\n /**\n * Terminates the process\n */\n static quiet () {\n process.exit(0)\n }\n\n static chalker (styles: LoggerChalk[]) {\n return (input: any): string =>\n styles.reduce((acc, style) => {\n if ((style as any) in chalk) {\n const fn = typeof style === 'function'\n ? style\n : chalk[style as never]\n return fn(acc)\n }\n return acc\n }, input)\n }\n\n /**\n * Parse an array formated message and logs it\n * \n * @param config \n * @param joiner \n * @param log If set to false, string output will be returned and not logged \n * @param sc color to use ue on split text if : is found \n */\n static parse (config: LoggerParseSignature, joiner?: string, log?: true, sc?: LoggerChalk): void\n static parse (config: LoggerParseSignature, joiner?: string, log?: false, sc?: LoggerChalk): string\n static parse (config: LoggerParseSignature, joiner = ' ', log = true, sc?: LoggerChalk): string | void {\n const string = config.map(([str, opt]) => {\n if (Array.isArray(opt)) {\n opt = Logger.chalker(opt) as ChalkInstance\n }\n\n const output = typeof opt === 'string' && typeof chalk[opt] === 'function'\n ? (chalk as any)[opt](str)\n : typeof opt === 'function' ? opt(str) : str\n\n if (!sc) {\n return output\n }\n\n return this.textFormat(output, Logger.chalker(Array.isArray(sc) ? sc : [sc]))\n }).join(joiner)\n\n if (log && !this.shouldSuppressOutput('line')) console.log(string)\n else return string\n }\n\n /**\n * Ouput formater object or format the output\n * \n * @returns \n */\n public static log: LoggerLog = ((config, joiner, log: boolean = true, sc) => {\n if (typeof config === 'string') {\n const conf = [[config, joiner]] as [string, keyof ChalkInstance][]\n return this.parse(conf, '', log as false, sc)\n } else if (config) {\n return this.parse(config, String(joiner), log as false, sc)\n }\n\n return this\n }) as LoggerLog\n}\n","import { IPathName } from '../Contracts/IApplication'\nimport nodepath from 'path'\n\nexport class PathLoader {\n private paths = {\n base: '',\n views: '/src/resources/views',\n assets: '/public/assets',\n routes: '/src/routes',\n config: '/src/config',\n public: '/public',\n storage: '/storage',\n database: '/src/database',\n }\n\n /**\n * Dynamically retrieves a path property from the class.\n * Any property ending with \"Path\" is accessible automatically.\n *\n * @param name - The base name of the path property\n * @param prefix - The base path to prefix to the path\n * @returns \n */\n getPath (name: IPathName, prefix?: string): string {\n let path: string\n\n if (prefix && name !== 'base') {\n path = nodepath.join(prefix, this.paths[name])\n } else {\n path = this.paths[name]\n }\n\n\n if (name === 'public') {\n path = path.replace('/public', nodepath.join('/', process.env.DIST_DIR ?? '.h3ravel/serve'))\n } else {\n path = path.replace('/src/', `/${process.env.DIST_DIR ?? 'src'}/`.replace(/([^:]\\/)\\/+/g, '$1'))\n }\n\n return nodepath.normalize(path)\n }\n\n /**\n * Programatically set the paths.\n *\n * @param name - The base name of the path property\n * @param path - The new path\n * @param base - The base path to include to the path\n */\n setPath (name: IPathName, path: string, base?: string) {\n if (base && name !== 'base') {\n this.paths[name] = nodepath.join(base, path)\n }\n\n this.paths[name] = path\n }\n}\n","import autocomplete, { ChoiceOrSeparatorArray } from 'inquirer-autocomplete-standalone'\nimport { confirm, input, password, select } from '@inquirer/prompts'\n\nimport { Choices } from '../Contracts/PromptsContract'\nimport { Logger } from '..'\n\nexport class Prompts extends Logger {\n /**\n * Allows users to pick from a predefined set of choices when asked a question.\n */\n public static async choice (\n /**\n * Message to dislpay\n */\n message: string,\n /**\n * The choices available to the user\n */\n choices: Choices,\n /**\n * Item index front of which the cursor will initially appear\n */\n defaultIndex?: number,\n ) {\n return select({\n message,\n choices,\n default: defaultIndex ? choices.at(defaultIndex) : undefined\n })\n }\n\n\n /**\n * Ask the user for a simple \"yes or no\" confirmation. \n * By default, this method returns `false`. However, if the user enters y or yes \n * in response to the prompt, the method would return `true`.\n */\n public static async confirm (\n /**\n * Message to dislpay\n */\n message: string,\n /**\n * The default value\n */\n def?: boolean | undefined,\n ) {\n return confirm({\n message,\n default: def\n })\n }\n\n /**\n * Prompt the user with the given question, accept their input, \n * and then return the user's input back to your command.\n */\n public static async ask (\n /**\n * Message to dislpay\n */\n message: string,\n /**\n * The default value\n */\n def?: string | undefined,\n ) {\n return input({\n message,\n default: def\n })\n }\n\n /**\n * Prompt the user with the given question, accept their input which \n * will not be visible to them as they type in the console, \n * and then return the user's input back to your command.\n */\n public static async secret (\n /**\n * Message to dislpay\n */\n message: string,\n /**\n * Mask the user input\n * \n * @default true\n */\n mask?: string | boolean,\n ) {\n return password({\n message,\n mask\n })\n }\n\n /**\n * Provide auto-completion for possible choices. \n * The user can still provide any answer, regardless of the auto-completion hints.\n */\n public static async anticipate (\n /**\n * Message to dislpay\n */\n message: string,\n /**\n * The source of completions\n */\n source: string[] | ((input?: string | undefined) => Promise<ChoiceOrSeparatorArray<any>>),\n /**\n * Set a default value\n */\n def?: string,\n ) {\n return autocomplete({\n message,\n source: Array.isArray(source) ? async (term) => {\n return (term ? source.filter(e => e.includes(term)) : source).map(e => ({ value: e }))\n } : source,\n suggestOnly: true,\n default: def\n })\n }\n}\n","import crypto from 'crypto'\nimport preferredPM from 'preferred-pm'\n\nexport class Resolver {\n static async getPakageInstallCommand (pkg?: string) {\n const pm = (await preferredPM(process.cwd()))?.name ?? 'pnpm'\n\n let cmd = 'install '\n\n if (!pkg) {\n if (pm === 'npm' || pm === 'pnpm' || pm === 'bun')\n cmd = 'install'\n else\n cmd = ''\n } else if (pm === 'yarn' || pm === 'pnpm' || pm === 'bun')\n cmd = 'add '\n\n return `${pm} ${cmd}${pkg ?? ''}`\n }\n\n static async getInstallCommand (pkg: string) {\n const pm = (await preferredPM(process.cwd()))?.name ?? 'pnpm'\n\n let cmd = 'install'\n if (pm === 'yarn' || pm === 'pnpm')\n cmd = 'add'\n else if (pm === 'bun')\n cmd = 'create'\n\n return `${pm} ${cmd} ${pkg}`\n }\n\n\n /**\n * Create a hash for a function or an object\n * \n * @param provider \n * @returns \n */\n static hashObjectOrFunction (provider: object | ((..._: any[]) => any)): string {\n return crypto\n .createHash('sha1')\n .update(provider.toString())\n .digest('hex')\n }\n\n /**\n * Checks if a function is asyncronous\n * \n * @param func \n * @returns \n */\n static isAsyncFunction (func: any): boolean {\n if (typeof func !== 'function') {\n return false\n }\n return Object.prototype.toString.call(func) === '[object AsyncFunction]'\n }\n}\n","export const mainTsconfig = {\n extends: '@h3ravel/shared/tsconfig.json',\n compilerOptions: {\n baseUrl: '.',\n outDir: 'dist',\n paths: {\n 'src/*': ['./../src/*'],\n 'App/*': ['./../src/app/*'],\n 'root/*': ['./../*'],\n 'routes/*': ['./../src/routes/*'],\n 'config/*': ['./../src/config/*'],\n 'resources/*': ['./../src/resources/*']\n },\n target: 'es2022',\n module: 'es2022',\n moduleResolution: 'Node',\n esModuleInterop: true,\n strict: true,\n allowJs: true,\n skipLibCheck: true,\n resolveJsonModule: true,\n noEmit: true,\n experimentalDecorators: true,\n emitDecoratorMetadata: true\n },\n include: ['./**/*.d.ts', './../**/*'],\n exclude: [\n '.',\n './../**/console/bin',\n './../dist',\n './../**/dist',\n './../**/node_modules',\n './../.node_modules',\n './../**/node_modules/*',\n './../**/public',\n './../public',\n './../**/storage',\n './../storage',\n './../**coverage**',\n './../eslint.config.js',\n './../jest.config.ts',\n './../arquebus.config.js'\n ]\n}\n\nexport const baseTsconfig = {\n extends: './.h3ravel/tsconfig.json'\n}\n\nexport const packageJsonScript = {\n build: 'NODE_ENV=production tsdown --config-loader unconfig -c tsdown.default.config.ts',\n dev: 'NODE_ENV=development pnpm tsdown --config-loader unconfig -c tsdown.default.config.ts',\n start: 'DIST_DIR=dist node -r source-map-support/register dist/server.js',\n lint: 'eslint . --ext .ts',\n test: 'NODE_NO_WARNINGS=1 NODE_ENV=testing jest --passWithNoTests',\n postinstall: 'pnpm prepare'\n}\n","import { Logger } from './Logger'\n\nexport class TaskManager {\n public static async taskRunner (\n description: string,\n task: (() => Promise<any>) | (() => any)\n ): Promise<void> {\n const startTime = process.hrtime()\n let result: any = false\n\n try {\n result = await Promise.all([(task || (() => true))()].flat())\n } finally {\n const endTime = process.hrtime(startTime)\n const duration = (endTime[0] * 1e9 + endTime[1]) / 1e6\n Logger.twoColumnDetail(\n Logger.parse([[description, 'green']], '', false),\n [\n Logger.parse([[`${Math.floor(duration)}ms`, 'gray']], '', false),\n Logger.parse([[result !== false ? '✔' : '✘', result !== false ? 'green' : 'red']], '', false),\n ].join(' ')\n )\n }\n }\n\n public static async advancedTaskRunner<R = any> (\n info: [[string, string], [string, string]] | [[string, string]],\n task: (() => Promise<R>) | (() => R)\n ): Promise<R | undefined> {\n const startTime = process.hrtime()\n const [startInfo, stopInfo] = info\n\n if (stopInfo) {\n Logger.twoColumnDetail(startInfo[0], Logger.log(startInfo[1], ['yellow', 'bold'], false))\n }\n\n try {\n return await Promise.race([task()])\n } catch (e: any) {\n Logger.error('ERROR: ' + e.message)\n } finally {\n const endTime = process.hrtime(startTime)\n const duration = (endTime[0] * 1e9 + endTime[1]) / 1e6\n\n Logger.twoColumnDetail(\n stopInfo?.[0] ?? startInfo[0],\n [\n Logger.parse([[`${Math.floor(duration)}ms`, 'gray']], '', false),\n Logger.parse([[`✔ ${stopInfo?.[1] ?? startInfo[1]}`, ['green', 'bold']]], '', false),\n ].join(' ')\n )\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["instance: Base","factory: ConsFactory<any, any>","superTraits: (Trait | TypeFactory<Trait>)[]","trait","clz: Cons<any>","lot: (Trait | TypeFactory<Trait>)[]","Finalizable","Magic","err: Error & { code?: number, statusCode?: number }","output: string[]","input","value: any","path","module","path: string","nodepath","path","result: any","e: any"],"sources":["../src/Container.ts","../src/Mixins/MixinSystem.ts","../src/Mixins/TraitSystem.ts","../src/Mixins/UseFinalizable.ts","../src/Mixins/UseMagic.ts","../src/Utils/Logger.ts","../src/Utils/Console.ts","../src/Utils/EnvParser.ts","../src/Utils/FileSystem.ts","../src/Utils/PathLoader.ts","../src/Utils/Prompts.ts","../src/Utils/Resolver.ts","../src/Utils/scripts.ts","../src/Utils/TaskManager.ts"],"sourcesContent":["export const INTERNAL_METHODS = Symbol('internal_methods')\n\n/**\n * Decorator to mark class properties as internal\n * \n * @param target \n * @param propertyKey \n */\nexport const internal = (target: any, propertyKey: string) => {\n if (!target[INTERNAL_METHODS]) {\n target[INTERNAL_METHODS] = new Set<string>()\n }\n target[INTERNAL_METHODS].add(propertyKey)\n}\n\n/**\n * Checks if a property is decorated with the &#64;internal decorator\n * \n * @param instance \n * @param prop \n * @returns \n */\nexport const isInternal = (instance: any, prop: string) => {\n const proto = Object.getPrototypeOf(instance)\n const internalSet: Set<string> = proto[INTERNAL_METHODS]\n return internalSet?.has(prop) ?? false\n}","import { ClassConstructor } from '@h3ravel/contracts'\n\n/**\n * Helper to convert a Union (A | B) into an Intersection (A & B)\n */\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n/**\n * Infers the mixed type of all base classes provided\n */\ntype MixedClass<T extends ClassConstructor[]> = UnionToIntersection<T[number]> &\n (new (...args: any[]) => UnionToIntersection<InstanceType<T[number]>>);\n\n/**\n * Helper to mix multiple classes into one, this allows extending multiple classes by any single class\n * \n * @param bases \n * @returns \n */\nexport const mix = <T extends ClassConstructor[]> (...bases: T): MixedClass<T> => {\n // This is the base class that will manage the lifecycle\n class Base {\n constructor(...args: any[]) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let instance: Base = this\n\n for (const constructor of bases) {\n // Reflect.construct triggers the base constructor logic.\n // If the constructor returns a Proxy, 'result' will be that Proxy.\n const result = Reflect.construct(constructor, args, new.target)\n\n if (result && (typeof result === 'object' || typeof result === 'function')) {\n // If a Proxy or object was returned, we merge existing properties \n // into it and make it our primary instance.\n if (result !== instance) {\n Object.assign(result, instance)\n instance = result\n }\n }\n }\n // Returning 'instance' here overrides the 'this' of the new ChildClass()\n return instance\n }\n }\n\n // Chain Statics and Prototypes\n for (let i = 0; i < bases.length; i++) {\n const currentBase = bases[i]\n const nextBase = bases[i + 1]\n\n // Copy prototype methods (for type inference and runtime access)\n Object.getOwnPropertyNames(currentBase.prototype).forEach(prop => {\n if (prop !== 'constructor') {\n Object.defineProperty(\n Base.prototype,\n prop,\n Object.getOwnPropertyDescriptor(currentBase.prototype, prop)!\n )\n }\n })\n\n // Copy static methods on extended classes\n Object.getOwnPropertyNames(currentBase).forEach(prop => {\n if (!['prototype', 'name', 'length'].includes(prop)) {\n Object.defineProperty(\n Base,\n prop,\n Object.getOwnPropertyDescriptor(currentBase, prop)!\n )\n }\n })\n\n // Link Prototype Chain (for X instanceof ParentClass)\n if (nextBase) {\n Object.setPrototypeOf(currentBase.prototype, nextBase.prototype)\n Object.setPrototypeOf(currentBase, nextBase)\n }\n }\n\n // Finally, link our internal Base to the head of the chain\n Object.setPrototypeOf(Base.prototype, bases[0].prototype)\n Object.setPrototypeOf(Base, bases[0])\n\n return Base as any\n}","/*\n** Extracted from @traits-ts/core - Traits for TypeScript Classes\n** Copyright (c) 2025 Dr. Ralf S. Engelschall <rse@engelschall.com>\n** Licensed under MIT license <https://spdx.org/licenses/MIT>\n*/\n\n/* eslint no-use-before-define: off */\n\n/* ==== UTILITY DEFINITIONS ==== */\n\n/* utility function: CRC32-hashing a string into a unique identifier */\nconst crcTable = [] as number[]\nfor (let n = 0; n < 256; n++) {\n let c = n\n for (let k = 0; k < 8; k++)\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1))\n crcTable[n] = c\n}\nexport const crc32 = (str: string) => {\n let crc = 0 ^ (-1)\n for (let i = 0; i < str.length; i++)\n crc = (crc >>> 8) ^ crcTable[(crc ^ str.charCodeAt(i)) & 0xFF]\n return (crc ^ (-1)) >>> 0\n}\n\ntype ResolveTraitLike<T extends Trait | TypeFactory<Trait>> =\n T extends TypeFactory<Trait>\n ? ExtractFactory<ReturnType<T>>\n : T extends Trait\n ? ExtractFactory<T>\n : unknown;\n\ntype Combine<T extends any[]> =\n T extends [infer Head, ...infer Tail]\n ? Head & Combine<Tail>\n : object;\n\ntype MapClassesToPrototypes<T extends Array<(new () => any) & { prototype: any }>> = {\n [K in keyof T]: T[K]['prototype'];\n}\n\ntype MapClassesToInstances<T extends Array<(new () => any) & { prototype: any }>> = {\n [K in keyof T]: InstanceType<T[K]>;\n}\n\ntype CombineClasses<T extends Array<(new () => any) & { prototype: any }>> =\n (new () => Combine<MapClassesToInstances<T>>) & { prototype: Combine<MapClassesToPrototypes<T>> };\n\ntype ResolveTraitLikeArray<T extends Array<Trait | TypeFactory<Trait>>> = CombineClasses<{\n [K in keyof T]: ResolveTraitLike<T[K]>;\n}>;\n\n/* utility type and function: constructor (function) */\ntype Cons<T = any> =\n new (...args: any[]) => T\nconst isCons =\n <T = any>\n (fn: unknown): fn is Cons<T> =>\n typeof fn === 'function' && !!fn.prototype && !!fn.prototype.constructor\n\n/* utility type and function: constructor factory (function) */\ntype ConsFactory<T extends Cons = Cons, B = any> =\n (base: B) => T\n\n/* utility type and function: type factory (function) */\ntype TypeFactory<T = any> =\n () => T\nconst isTypeFactory =\n <T = any>\n (fn: unknown): fn is TypeFactory<T> =>\n typeof fn === 'function' && !fn.prototype && fn.length === 0\n\n/* utility type: map an object type into a bare properties type */\ntype Explode<T = any> =\n { [P in keyof T]: T[P] }\n\n/* utility type: convert two arrays of types into an array of union types */\ntype MixParams<T1 extends any[], T2 extends any[]> =\n T1 extends [] ? (\n T2 extends [] ? [] : T2\n ) : (\n T2 extends [] ? T1 : (\n T1 extends [infer H1, ...infer R1] ? (\n T2 extends [infer H2, ...infer R2] ?\n [H1 & H2, ...MixParams<R1, R2>]\n : []\n ) : []\n )\n )\n\n/* ==== TRAIT DEFINITION ==== */\n\n/* API: trait type */\ntype TraitDefTypeT = ConsFactory<Cons>\ntype TraitDefTypeST = (Trait | TypeFactory<Trait>)[] | undefined\nexport type Trait<\n T extends TraitDefTypeT = TraitDefTypeT,\n ST extends TraitDefTypeST = TraitDefTypeST\n> = {\n id: number /* unique id (primary, for hasTrait) */\n symbol: symbol /* unique id (secondary, currently unused) */\n factory: T\n superTraits: ST\n}\n\n/* API: generate trait (regular variant) */\n/* eslint no-redeclare: off */\nexport function trait<\n T extends ConsFactory<Cons>\n> (factory: T): Trait<T, undefined>\n\n/* API: generate trait (super-trait variant) */\nexport function trait<\n const ST extends (Trait | TypeFactory<Trait>)[],\n T extends ConsFactory<Cons, ResolveTraitLikeArray<ST>>\n> (superTraits: ST, factory: T): Trait<T, ST>\n\n/* API: generate trait (technical implementation) */\nexport function trait (...args: any[]): Trait<any, any> {\n const factory: ConsFactory<any, any> = (args.length === 2 ? args[1] : args[0])\n const superTraits: (Trait | TypeFactory<Trait>)[] = (args.length === 2 ? args[0] : undefined)\n return {\n id: crc32(factory.toString()),\n symbol: Symbol('trait'),\n factory,\n superTraits\n }\n}\n\n/* ==== TRAIT DERIVATION ==== */\n\n/* ---- TRAIT PART EXTRACTION ---- */\n\n/* utility types: extract factory from a trait */\ntype ExtractFactory<\n T extends Trait\n> =\n T extends Trait<\n ConsFactory<infer C>,\n TraitDefTypeST\n > ? C : never\n\n/* utility types: extract supertraits from a trait */\ntype ExtractSuperTrait<\n T extends Trait\n> =\n T extends Trait<\n TraitDefTypeT,\n infer ST extends TraitDefTypeST\n > ? ST : never\n\n/* ---- TRAIT CONSTRUCTOR DERIVATION ---- */\n\n/* utility type: derive type constructor: merge two constructors */\ntype DeriveTraitsConsConsMerge<\n A extends Cons,\n B extends Cons\n> =\n A extends (new (...args: infer ArgsA) => infer RetA) ? (\n B extends (new (...args: infer ArgsB) => infer RetB) ? (\n new (...args: MixParams<ArgsA, ArgsB>) => RetA & RetB\n ) : never\n ) : never\n\n/* utility type: derive type constructor: extract plain constructor */\ntype DeriveTraitsConsCons<\n T extends Cons\n> =\n new (...args: ConstructorParameters<T>) => InstanceType<T>\n\n/* utility type: derive type constructor: from trait parts */\ntype DeriveTraitsConsTraitParts<\n C extends Cons,\n ST extends ((Trait | TypeFactory<Trait>)[] | undefined)\n> =\n ST extends undefined ? DeriveTraitsConsCons<C> :\n ST extends [] ? DeriveTraitsConsCons<C> :\n DeriveTraitsConsConsMerge<\n DeriveTraitsConsCons<C>,\n DeriveTraitsConsAll<ST>> /* RECURSION */\n\n/* utility type: derive type constructor: from single trait */\ntype DeriveTraitsConsTrait<\n T extends Trait\n> =\n DeriveTraitsConsTraitParts<\n ExtractFactory<T>,\n ExtractSuperTrait<T>>\n\n/* utility type: derive type constructor: from single trait or trait factory */\ntype DeriveTraitsConsOne<\n T extends (Trait | TypeFactory<Trait>)\n> =\n T extends Trait ? DeriveTraitsConsTrait<T> :\n T extends TypeFactory<Trait> ? DeriveTraitsConsTrait<ReturnType<T>> :\n never\n\n/* utility type: derive type constructor: from one or more traits or trait factories */\ntype DeriveTraitsConsAll<\n T extends (((Trait | TypeFactory<Trait>)[] | [...(Trait | TypeFactory<Trait>)[], Cons]) | undefined)\n> =\n T extends [...infer Others extends (Trait | TypeFactory<Trait>)[], infer Last extends Cons] ? (\n DeriveTraitsConsConsMerge<\n DeriveTraitsConsAll<Others>, /* RECURSION */\n DeriveTraitsConsCons<Last>>\n ) :\n T extends (Trait | TypeFactory<Trait>)[] ? (\n T extends [infer First extends (Trait | TypeFactory<Trait>)] ? (\n DeriveTraitsConsOne<First>\n ) : (\n T extends [\n infer First extends (Trait | TypeFactory<Trait>),\n ...infer Rest extends (Trait | TypeFactory<Trait>)[]] ? (\n DeriveTraitsConsConsMerge<\n DeriveTraitsConsOne<First>,\n DeriveTraitsConsAll<Rest>> /* RECURSION */\n ) : never\n )\n ) : never\n\n/* utility type: derive type constructor */\ntype DeriveTraitsCons<\n T extends ((Trait | TypeFactory<Trait>)[] | [...(Trait | TypeFactory<Trait>)[], Cons])\n> =\n DeriveTraitsConsAll<T>\n\n/* ---- TRAIT STATICS DERIVATION ---- */\n\n/* utility type: derive type statics: merge two objects with statics */\ntype DeriveTraitsStatsConsMerge<\n T1 extends object,\n T2 extends object\n> =\n T1 & T2\n\n/* utility type: derive type statics: extract plain statics */\ntype DeriveTraitsStatsCons<\n T extends Cons\n> =\n Explode<T>\n\n/* utility type: derive type statics: from trait parts */\ntype DeriveTraitsStatsTraitParts<\n C extends Cons,\n ST extends ((Trait | TypeFactory<Trait>)[] | undefined)\n> =\n ST extends undefined ? DeriveTraitsStatsCons<C> :\n ST extends [] ? DeriveTraitsStatsCons<C> :\n DeriveTraitsStatsConsMerge<\n DeriveTraitsStatsCons<C>,\n DeriveTraitsStatsAll<ST>> /* RECURSION */\n\n/* utility type: derive type statics: from single trait */\ntype DeriveTraitsStatsTrait<\n T extends Trait\n> =\n DeriveTraitsStatsTraitParts<\n ExtractFactory<T>,\n ExtractSuperTrait<T>>\n\n/* utility type: derive type statics: from single trait or trait factory */\ntype DeriveTraitsStatsOne<\n T extends (Trait | TypeFactory<Trait>)\n> =\n T extends Trait ? DeriveTraitsStatsTrait<T> :\n T extends TypeFactory<Trait> ? DeriveTraitsStatsTrait<ReturnType<T>> :\n never\n\n/* utility type: derive type statics: from one or more traits or trait factories */\ntype DeriveTraitsStatsAll<\n T extends (((Trait | TypeFactory<Trait>)[] | [...(Trait | TypeFactory<Trait>)[], Cons]) | undefined)\n> =\n T extends [...infer Others extends (Trait | TypeFactory<Trait>)[], infer Last extends Cons] ? (\n DeriveTraitsStatsConsMerge<\n DeriveTraitsStatsAll<Others>, /* RECURSION */\n DeriveTraitsStatsCons<Last>>\n ) :\n T extends (Trait | TypeFactory<Trait>)[] ? (\n T extends [infer First extends (Trait | TypeFactory<Trait>)] ? (\n DeriveTraitsStatsOne<First>\n ) : (\n T extends [\n infer First extends (Trait | TypeFactory<Trait>),\n ...infer Rest extends (Trait | TypeFactory<Trait>)[]] ? (\n DeriveTraitsStatsConsMerge<\n DeriveTraitsStatsOne<First>,\n DeriveTraitsStatsAll<Rest>> /* RECURSION */\n ) : never\n )\n ) : never\n\n/* utility type: derive type statics */\ntype DeriveTraitsStats<\n T extends ((Trait | TypeFactory<Trait>)[] | [...(Trait | TypeFactory<Trait>)[], Cons])\n> =\n DeriveTraitsStatsAll<T>\n\n/* ---- TRAIT DERIVATION ---- */\n\n/* utility type: derive type from one or more traits or trait type factories */\ntype DeriveTraits<\n T extends ((Trait | TypeFactory<Trait>)[] | [...(Trait | TypeFactory<Trait>)[], Cons])\n> =\n DeriveTraitsCons<T> &\n DeriveTraitsStats<T>\n\n/* ---- TRAIT DERIVATION RUNTIME ---- */\n\n/* utility function: add an additional invisible property to an object */\nconst extendProperties =\n (cons: Cons, field: string | symbol, value: any) =>\n Object.defineProperty(cons, field, { value, enumerable: false, writable: false })\n\n/* utility function: get raw trait */\nconst rawTrait = (x: (Trait | TypeFactory<Trait>)) =>\n isTypeFactory(x) ? x() : x\n\n/* utility function: derive a trait */\nconst deriveTrait = (\n trait$: Trait | TypeFactory<Trait>,\n baseClz: Cons<any>,\n derived: Map<number, boolean>\n) => {\n /* get real trait */\n const trait = rawTrait(trait$)\n\n /* start with base class */\n let clz = baseClz\n\n /* in case we still have not derived this trait... */\n if (!derived.has(trait.id)) {\n derived.set(trait.id, true)\n\n /* iterate over all of its super traits */\n if (trait.superTraits !== undefined)\n for (const superTrait of reverseTraitList(trait.superTraits))\n clz = deriveTrait(superTrait, clz, derived) /* RECURSION */\n\n /* derive this trait */\n clz = trait.factory(clz)\n extendProperties(clz, 'id', crc32(trait.factory.toString()))\n extendProperties(clz, trait.symbol, true)\n }\n\n return clz\n}\n\n/* utility function: get reversed trait list */\nconst reverseTraitList = (traits: (Trait | TypeFactory<Trait>)[]) =>\n traits.slice().reverse() as (Trait | TypeFactory<Trait>)[]\n\n/* API: type derive */\nexport function use\n <T extends (\n [Trait | TypeFactory<Trait>, ...(Trait | TypeFactory<Trait>)[]] |\n [...(Trait | TypeFactory<Trait>)[], Cons]\n )>\n (...traits: T): DeriveTraits<T> {\n /* run-time sanity check */\n if (traits.length === 0)\n throw new Error('invalid number of parameters (expected one or more traits)')\n\n /* determine the base class (clz) and the list of traits (lot) */\n let clz: Cons<any>\n let lot: (Trait | TypeFactory<Trait>)[]\n const last = traits[traits.length - 1]\n if (isCons(last) && !isTypeFactory(last)) {\n /* case 1: with trailing regular class */\n clz = last\n lot = traits.slice(0, -1) as (Trait | TypeFactory<Trait>)[]\n }\n else {\n /* case 2: just regular traits or trait type factories */\n clz = class ROOT { }\n lot = traits as (Trait | TypeFactory<Trait>)[]\n }\n\n /* track already derived traits */\n const derived = new Map<number, boolean>()\n\n /* iterate over all traits */\n for (const trait of reverseTraitList(lot))\n clz = deriveTrait(trait, clz, derived)\n\n return clz as DeriveTraits<T>\n}\n\n/* ==== TRAIT TYPE-GUARDING ==== */\n\n/* internal type: implements trait type */\ntype DerivedType<T extends Trait> =\n InstanceType<ExtractFactory<T>>\n\n/* internal type: implements trait type or trait type factory */\nexport type Derived<T extends (Trait | TypeFactory<Trait> | Cons)> =\n T extends TypeFactory<Trait> ? DerivedType<ReturnType<T>> :\n T extends Trait ? DerivedType<T> :\n T extends Cons ? T :\n never\n\n/* API: type guard for checking whether class instance is derived from a trait */\nexport function uses\n <T extends (Trait | TypeFactory<Trait> | Cons)>\n (instance: unknown, trait: T): instance is Derived<T> {\n /* ensure the class instance is really an object */\n if (typeof instance !== 'object' || instance === null)\n return false\n let obj = instance\n\n /* special case: regular class */\n if (isCons(trait) && !isTypeFactory(trait))\n return (instance instanceof trait)\n\n /* regular case: trait or trait type factory... */\n const t = (isTypeFactory(trait) ? trait() : trait) as Trait\n const idTrait = t['id']\n while (obj) {\n if (Object.hasOwn(obj, 'constructor')) {\n const id = ((obj.constructor as any)['id'] as number) ?? 0\n if (id === idTrait)\n return true\n }\n obj = Object.getPrototypeOf(obj)\n }\n return false\n}\n","/*\n** Extracted from @traits-ts/stdlib - Traits for TypeScript Classes: Standard Library\n** Copyright (c) 2025 Dr. Ralf S. Engelschall <rse@engelschall.com>\n** Licensed under MIT license <https://spdx.org/licenses/MIT>\n*/\n\nimport { trait } from './TraitSystem'\n\n/**\n * the central class instance registry\n */\nconst registry = new FinalizationRegistry((fn: () => void) => {\n if (typeof fn === 'function' && !(fn as any).finalized) {\n (fn as any).finalized = true\n fn()\n }\n})\n\n/**\n * the API trait \"Finalizable<T>\"\n */\nexport const Finalizable = trait((base) => class Finalizable extends base {\n constructor(...args: any[]) {\n super(...args)\n\n /* register class instance */\n const fn1 = this.$finalize\n if (typeof fn1 !== 'function')\n throw new Error('trait Finalizable requires a $finalize method to be defined')\n const fn2 = () => { fn1(this) }\n fn2.finalized = false\n registry.register(this, fn2, this)\n }\n})\n","import { trait } from './TraitSystem'\n\n/**\n * Wraps an object in a Proxy to emulate PHP magic methods.\n *\n * Supported:\n * - __call(method, args)\n * - __get(property)\n * - __set(property, value)\n * - __isset(property)\n * - __unset(property)\n *\n * Called automatically by Magic's constructor.\n * \n * Return in any class constructor to use\n * \n * @param target \n * @returns \n */\nexport function makeMagic<T extends object> (target: T): T {\n return new Proxy(target, {\n /**\n * Intercepts property access and missing method calls.\n */\n get (obj, prop, receiver) {\n if (typeof prop === 'string') {\n // Real property / method: return normally\n if (prop in obj)\n return Reflect.get(obj, prop, receiver)\n\n // Missing method: __call\n if ((obj as any).__call)\n return (...args: any[]) => (obj as any).__call(prop, args)\n\n // Missing property: __get\n if ((obj as any).__get)\n return (obj as any).__get(prop)\n }\n return undefined\n },\n\n /**\n * Intercepts property assignment.\n */\n set (obj, prop, value) {\n if (typeof prop === 'string' && (obj as any).__set) {\n ; (obj as any).__set(prop, value)\n return true\n }\n return Reflect.set(obj, prop, value)\n },\n\n /**\n * Intercepts `in` operator and existence checks.\n */\n has (obj, prop) {\n if (typeof prop === 'string' && (obj as any).__isset) {\n return (obj as any).__isset(prop)\n }\n return Reflect.has(obj, prop)\n },\n\n /**\n * Intercepts `delete obj.prop`.\n */\n deleteProperty (obj, prop) {\n if (typeof prop === 'string' && (obj as any).__unset) {\n ; (obj as any).__unset(prop)\n return true\n }\n return Reflect.deleteProperty(obj, prop)\n }\n })\n}\n\n/**\n * Wraps a class constructor in a Proxy to emulate static PHP magic methods.\n *\n * Supported:\n * - __callStatic(method, args)\n * - static __get(property)\n * - static __set(property, value)\n * - static __isset(property)\n * - static __unset(property)\n * \n * @param cls \n * @returns \n */\nexport function makeStaticMagic<T extends ((...args: any[]) => any) | (abstract new (...args: any[]) => any)> (cls: T): T {\n return new Proxy(cls, {\n /**\n * Intercepts static property access and missing static calls.\n */\n get (target, prop) {\n if (typeof prop === 'string') {\n // Real static property / method\n if (prop in target) {\n return (target as any)[prop]\n }\n\n // Missing static method → __callStatic\n if ((target as any).__callStatic) {\n return (...args: any[]) =>\n (target as any).__callStatic(prop, args)\n }\n\n // Missing static property → __get\n if ((target as any).__get) {\n return (target as any).__get(prop)\n }\n }\n return undefined\n },\n\n /**\n * Intercepts static property assignment.\n */\n set (target, prop, value) {\n if (typeof prop === 'string' && (target as any).__set) {\n ; (target as any).__set(prop, value)\n return true\n }\n return Reflect.set(target, prop, value)\n },\n\n /**\n * Intercepts `prop in Class`.\n */\n has (target, prop) {\n if (typeof prop === 'string' && (target as any).__isset) {\n return (target as any).__isset(prop)\n }\n return Reflect.has(target, prop)\n },\n\n /**\n * Intercepts `delete Class.prop`.\n */\n deleteProperty (target, prop) {\n if (typeof prop === 'string' && (target as any).__unset) {\n ; (target as any).__unset(prop)\n return true\n }\n return Reflect.deleteProperty(target, prop)\n }\n })\n}\n\n/**\n * Base class that enables PHP-style magic methods automatically.\n *\n * Any subclass may implement:\n * - __call\n * - __get\n * - __set\n * - __isset\n * - __unset\n *\n * The constructor returns a Proxy transparently.\n */\nexport abstract class Magic {\n constructor() {\n return makeMagic(this)\n }\n}\n\n\nexport const UseMagic = trait(Base => {\n return class Magic extends Base {\n constructor(...args: any[]) {\n super(...args)\n return makeMagic(this)\n }\n }\n})","import chalk, { type ChalkInstance } from 'chalk'\nimport { LoggerChalk, LoggerLog, LoggerParseSignature } from '../Contracts/Utils'\nimport { Console } from './Console'\n\nexport class Logger {\n /**\n * Global verbosity configuration\n */\n private static verbosity: number = 0\n private static isQuiet: boolean = false\n private static isSilent: boolean = false\n\n /**\n * Configure global verbosity levels\n */\n static configure (options: { verbosity?: number, quiet?: boolean, silent?: boolean } = {}) {\n this.verbosity = options.verbosity ?? 0\n this.isQuiet = options.quiet ?? false\n this.isSilent = options.silent ?? false\n }\n\n /**\n * Check if output should be suppressed\n */\n private static shouldSuppressOutput (level: 'line' | 'debug' | 'info' | 'warn' | 'error' | 'success'): boolean {\n if (this.isSilent) return true\n if (this.isQuiet && (level === 'info' || level === 'success')) return true\n if (level === 'debug' && this.verbosity < 3) return true\n return false\n }\n /**\n * Logs the message in two columns\n * \n * @param name \n * @param value \n * @param log If set to false, array of [name, dots, value] output will be returned and not logged \n * @returns \n */\n static twoColumnDetail (name: string, value: string, log?: true, spacer?: string): void\n static twoColumnDetail (name: string, value: string, log?: false, spacer?: string): [string, string, string]\n static twoColumnDetail (name: string, value: string, log = true, spacer = '.'): [string, string, string] | void {\n // eslint-disable-next-line no-control-regex\n const regex = /\\x1b\\[\\d+m/g\n const width = Math.max(process.stdout.columns, 100)\n const dots = Math.max(width - name.replace(regex, '').length - value.replace(regex, '').length - 10, 0)\n\n if (log) return console.log(name, chalk.gray(spacer.repeat(dots)), value)\n else return [name, chalk.gray(spacer.repeat(dots)), value]\n }\n\n /**\n * Logs the message in two columns\n * \n * @param name \n * @param desc \n * @param width \n * @param log If set to false, array of [name, dots, value] output will be returned and not logged \n * @returns \n */\n static describe (name: string, desc: string, width?: number, log?: true): void\n static describe (name: string, desc: string, width?: number, log?: false): [string, string, string]\n static describe (name: string, desc: string, width = 50, log = true): [string, string, string] | void {\n width = Math.max(width, 30)\n // eslint-disable-next-line no-control-regex\n const regex = /\\x1b\\[\\d+m/g\n const dots = Math.max(width - name.replace(regex, '').length, 0)\n\n if (log) return console.log(name, ' '.repeat(dots), desc)\n else return [name, ' '.repeat(dots), desc]\n }\n\n /**\n * Logs the message in two columns but allways passing status\n * \n * @param name \n * @param value \n * @param status \n * @param exit \n * @param preserveCol \n */\n static split (name: string, value: string, status?: 'success' | 'info' | 'error', exit = false, preserveCol = false) {\n status ??= 'info'\n const color = { success: chalk.bgGreen, info: chalk.bgBlue, error: chalk.bgRed }\n\n const [_name, dots, val] = this.twoColumnDetail(name, value, false)\n\n console.log(this.textFormat(_name, color[status], preserveCol), dots, val)\n\n if (exit) process.exit(0)\n }\n\n /**\n * Wraps text with chalk\n * \n * @param txt \n * @param color \n * @param preserveCol \n * @returns \n */\n static textFormat (\n txt: unknown | unknown[],\n color: (...text: unknown[]) => string,\n preserveCol = false\n ): string {\n if (txt instanceof Error) {\n const err: Error & { code?: number, statusCode?: number } = txt\n const code = err.code ?? err.statusCode ? ` (${err.code ?? err.statusCode})` : ''\n const output: string[] = []\n\n if (err.message) {\n output.push(this.textFormat(`${err.constructor.name}${code}: ${err.message}`, chalk.bgRed, preserveCol))\n }\n\n if (err.stack) {\n output.push(' ' + chalk.white(err.stack.replace(`${err.name}: ${err.message}`, '').trim()))\n }\n return output.join('\\n')\n }\n\n if (Array.isArray(txt)) {\n return txt.map(e => this.textFormat(e, color, preserveCol)).join('\\n')\n }\n\n if (typeof txt === 'object') {\n return this.textFormat(Object.values(txt!), color, preserveCol)\n }\n\n if (typeof txt !== 'string') {\n return color(txt)\n }\n\n const str = String(txt)\n\n if (preserveCol) return str\n\n const [first, ...rest] = str.split(':')\n if (rest.length === 0) return str\n\n return color(` ${first} `) + rest.join(':')\n }\n\n /**\n * Logs a success message\n * \n * @param msg \n * @param exit \n * @param preserveCol \n */\n static success (msg: any, exit = false, preserveCol = false) {\n if (!this.shouldSuppressOutput('success')) {\n console.log(chalk.green('✓'), this.textFormat(msg, chalk.bgGreen, preserveCol))\n }\n if (exit) process.exit(0)\n }\n\n /**\n * Logs an informational message\n * \n * @param msg \n * @param exit \n * @param preserveCol \n */\n static info (msg: any, exit = false, preserveCol = false) {\n if (!this.shouldSuppressOutput('info')) {\n console.log(chalk.blue('ℹ'), this.textFormat(msg, chalk.bgBlue, preserveCol))\n }\n if (exit) process.exit(0)\n }\n\n /**\n * Logs an error message\n * \n * @param msg \n * @param exit \n * @param preserveCol \n */\n static error (msg: any, exit = true, preserveCol = false) {\n if (!this.shouldSuppressOutput('error')) {\n if (msg instanceof Error) {\n if (msg.message) {\n console.error(chalk.red('✖'), this.textFormat('ERROR:' + msg.message, chalk.bgRed, preserveCol))\n }\n console.error(chalk.red(`${(msg as any).detail ? `${(msg as any).detail}\\n` : ''}${msg.stack}`))\n }\n else {\n console.error(chalk.red('✖'), this.textFormat(msg, chalk.bgRed, preserveCol))\n }\n }\n if (exit) process.exit(1)\n }\n\n /**\n * Logs a warning message\n * \n * @param msg \n * @param exit \n * @param preserveCol \n */\n static warn (msg: any, exit = false, preserveCol = false) {\n if (!this.shouldSuppressOutput('warn')) {\n console.warn(chalk.yellow('⚠'), this.textFormat(msg, chalk.bgYellow, preserveCol))\n }\n if (exit) process.exit(0)\n }\n\n /**\n * Logs a debug message (only shown with verbosity >= 3)\n * \n * @param msg \n * @param exit \n * @param preserveCol \n */\n static debug<M = any> (msg: M | M[], exit = false, preserveCol = false) {\n if (!this.shouldSuppressOutput('debug')) {\n if (Array.isArray(msg)) {\n for (let i = 0; i < msg.length; i++) {\n console.log(chalk.gray('🐛'), chalk.bgGray(i + 1), this.textFormat(msg[i], chalk.bgGray, preserveCol))\n }\n } else {\n console.log(chalk.gray('🐛'), this.textFormat(msg, chalk.bgGray, preserveCol))\n }\n }\n if (exit) process.exit(0)\n }\n\n /**\n * Terminates the process\n */\n static quiet () {\n process.exit(0)\n }\n\n static chalker (styles: LoggerChalk[]) {\n return (input: any): string =>\n styles.reduce((acc, style) => {\n if ((style as any) in chalk) {\n const fn = typeof style === 'function'\n ? style\n : chalk[style as never]\n return fn(acc)\n }\n return acc\n }, input)\n }\n\n /**\n * Parse an array formated message and logs it\n * \n * @param config \n * @param joiner \n * @param log If set to false, string output will be returned and not logged \n * @param sc color to use ue on split text if : is found \n */\n static parse (config: LoggerParseSignature, joiner?: string, log?: true, sc?: LoggerChalk): void\n static parse (config: LoggerParseSignature, joiner?: string, log?: false, sc?: LoggerChalk): string\n static parse (config: LoggerParseSignature, joiner = ' ', log = true, sc?: LoggerChalk): string | void {\n const string = config.map(([str, opt]) => {\n if (Array.isArray(opt)) {\n opt = Logger.chalker(opt) as ChalkInstance\n }\n\n const output = typeof opt === 'string' && typeof chalk[opt] === 'function'\n ? (chalk as any)[opt](str)\n : typeof opt === 'function' ? opt(str) : str\n\n if (!sc) {\n return output\n }\n\n return this.textFormat(output, Logger.chalker(Array.isArray(sc) ? sc : [sc]))\n }).join(joiner)\n\n if (log && !this.shouldSuppressOutput('line')) console.log(string)\n else return string\n }\n\n /**\n * Ouput formater object or format the output\n * \n * @returns \n */\n static log: LoggerLog = ((config, joiner, log: boolean = true, sc) => {\n if (typeof config === 'string') {\n const conf = [[config, joiner]] as [string, keyof ChalkInstance][]\n return this.parse(conf, '', log as false, sc)\n } else if (Array.isArray(config)) {\n return this.parse(config, String(joiner), log as false, sc)\n } else if (log && !this.shouldSuppressOutput('line')) {\n return console.log(this.textFormat(config, Logger.chalker(['blue'])))\n }\n\n return this\n }) as LoggerLog\n\n /**\n * A simple console like output logger\n * \n * @returns \n */\n static console () {\n return Console\n }\n}\n","import { Logger } from './Logger'\n\nexport class Console {\n static log = (...args: any[]) => Logger.log(args.map(e => [e, 'white']))\n static debug = (...args: any[]) => Logger.debug(args, false, true)\n static warn = (...args: any[]) => args.map(e => Logger.warn(e, false, true))\n static info = (...args: any[]) => args.map(e => Logger.info(e, false, true))\n static error = (...args: any[]) => args.map(e => Logger.error(e, false), true)\n}","import { GenericWithNullableStringValues } from '../Contracts/ObjContract'\n\nexport class EnvParser {\n\n static parse (initial: GenericWithNullableStringValues) {\n const parsed = { ...initial }\n\n for (const key in parsed) {\n const value: any = parsed[key]\n parsed[key] = this.parseValue(value)\n }\n\n return parsed\n }\n\n static parseValue (value: any) {\n /**\n * Null/undefined stay untouched \n */\n if (value === null || value === undefined) return value\n\n /**\n * Convert string \"true\"/\"false\" to boolean \n */\n if (value === 'true') return true\n if (value === 'false') return false\n\n /**\n * Convert string numbers to number \n */\n if (!isNaN(value) && value.trim() !== '') {\n return Number(value)\n }\n\n /**\n * Convert string \"null\" and \"undefined\"\n */\n if (value === 'null') return null\n if (value === 'undefined') return undefined\n\n /**\n * Otherwise return as-is (string)\n */\n return value\n }\n}\n","import { access } from 'fs/promises'\nimport escalade from 'escalade/sync'\nimport { existsSync } from 'fs'\nimport path from 'path'\n\nexport class FileSystem {\n static findModulePkg (moduleId: string, cwd?: string) {\n const parts = moduleId.replace(/\\\\/g, '/').split('/')\n\n let packageName = ''\n // Handle scoped package name\n if (parts.length > 0 && parts[0][0] === '@') {\n packageName += parts.shift() + '/'\n }\n packageName += parts.shift()\n\n const packageJson = path.join(cwd ?? process.cwd(), 'node_modules', packageName)\n\n const resolved = this.resolveFileUp('package', ['json'], packageJson)\n\n if (!resolved) {\n return\n }\n\n return path.join(path.dirname(resolved), parts.join('/'))\n }\n\n /**\n * Check if file exists\n * \n * @param path \n * @returns \n */\n static async fileExists (path: string): Promise<boolean> {\n try {\n await access(path)\n return true\n } catch {\n return false\n }\n }\n\n /**\n * Recursively find files starting from given cwd\n * \n * @param name \n * @param extensions \n * @param cwd \n * \n * @returns \n */\n static resolveFileUp (\n name: string,\n extensions: string[] | ((dir: string, filesNames: string[]) => string | false),\n cwd?: string\n ) {\n cwd ??= process.cwd()\n\n return escalade(cwd, (dir, filesNames) => {\n if (typeof extensions === 'function') {\n return extensions(dir, filesNames)\n }\n\n const candidates = new Set(extensions.map(ext => `${name}.${ext}`))\n for (const filename of filesNames) {\n if (candidates.has(filename)) {\n return filename\n }\n }\n\n return false\n }) ?? undefined\n }\n\n /**\n * Recursively find files starting from given cwd\n * \n * @param name \n * @param extensions \n * @param cwd \n * \n * @returns \n */\n static resolveModulePath (\n moduleId: string,\n pathName: string | string[],\n cwd?: string\n ) {\n pathName = Array.isArray(pathName) ? pathName : [pathName]\n const module = this.findModulePkg(moduleId, cwd) ?? ''\n\n for (const name of pathName) {\n const file = path.join(module, name)\n if (existsSync(file)) {\n return file\n }\n }\n\n return\n }\n} \n","import { IPathName } from '@h3ravel/contracts'\nimport nodepath from 'path'\n\nexport class PathLoader {\n private paths = {\n base: '',\n views: '/src/resources/views',\n assets: '/public/assets',\n routes: '/src/routes',\n config: '/src/config',\n public: '/public',\n storage: '/storage',\n database: '/src/database',\n commands: '/src/App/Console/Commands/'\n }\n\n /**\n * Dynamically retrieves a path property from the class.\n * Any property ending with \"Path\" is accessible automatically.\n *\n * @param name - The base name of the path property\n * @param prefix - The base path to prefix to the path\n * @returns \n */\n getPath (name: IPathName, prefix?: string): string {\n let path: string\n\n if (prefix && name !== 'base') {\n path = nodepath.join(prefix, this.paths[name])\n } else {\n path = this.paths[name]\n }\n\n\n if (name === 'public') {\n path = path.replace('/public', nodepath.join('/', process.env.DIST_DIR ?? '.h3ravel/serve'))\n } else {\n path = path.replace('/src/', `/${process.env.DIST_DIR ?? 'src'}/`.replace(/([^:]\\/)\\/+/g, '$1'))\n }\n\n return nodepath.normalize(path)\n }\n\n /**\n * Programatically set the paths.\n *\n * @param name - The base name of the path property\n * @param path - The new path\n * @param base - The base path to include to the path\n */\n setPath (name: IPathName, path: string, base?: string) {\n if (base && name !== 'base') {\n this.paths[name] = nodepath.join(base, path)\n }\n\n this.paths[name] = path\n }\n\n distPath (path: string, skipExt = false) {\n path = path.replace('/src/', `/${process.env.DIST_DIR ?? 'src'}/`.replace(/([^:]\\/)\\/+/g, '$1'))\n\n if (!skipExt) {\n path = path.replace(/\\.(ts|tsx|mts|cts)$/, '.js')\n }\n\n return nodepath.normalize(path)\n }\n}\n","import autocomplete, { ChoiceOrSeparatorArray } from 'inquirer-autocomplete-standalone'\nimport { confirm, input, password, select } from '@inquirer/prompts'\n\nimport { Choices } from '../Contracts/PromptsContract'\nimport { Logger } from '..'\n\nexport class Prompts extends Logger {\n /**\n * Allows users to pick from a predefined set of choices when asked a question.\n */\n public static async choice (\n /**\n * Message to dislpay\n */\n message: string,\n /**\n * The choices available to the user\n */\n choices: Choices,\n /**\n * Item index front of which the cursor will initially appear\n */\n defaultIndex?: number,\n ) {\n return select({\n message,\n choices,\n default: defaultIndex ? choices.at(defaultIndex) : undefined\n })\n }\n\n\n /**\n * Ask the user for a simple \"yes or no\" confirmation. \n * By default, this method returns `false`. However, if the user enters y or yes \n * in response to the prompt, the method would return `true`.\n */\n public static async confirm (\n /**\n * Message to dislpay\n */\n message: string,\n /**\n * The default value\n */\n def?: boolean | undefined,\n ) {\n return confirm({\n message,\n default: def\n })\n }\n\n /**\n * Prompt the user with the given question, accept their input, \n * and then return the user's input back to your command.\n */\n public static async ask (\n /**\n * Message to dislpay\n */\n message: string,\n /**\n * The default value\n */\n def?: string | undefined,\n ) {\n return input({\n message,\n default: def\n })\n }\n\n /**\n * Prompt the user with the given question, accept their input which \n * will not be visible to them as they type in the console, \n * and then return the user's input back to your command.\n */\n public static async secret (\n /**\n * Message to dislpay\n */\n message: string,\n /**\n * Mask the user input\n * \n * @default true\n */\n mask?: string | boolean,\n ) {\n return password({\n message,\n mask\n })\n }\n\n /**\n * Provide auto-completion for possible choices. \n * The user can still provide any answer, regardless of the auto-completion hints.\n */\n public static async anticipate (\n /**\n * Message to dislpay\n */\n message: string,\n /**\n * The source of completions\n */\n source: string[] | ((input?: string | undefined) => Promise<ChoiceOrSeparatorArray<any>>),\n /**\n * Set a default value\n */\n def?: string,\n ) {\n return autocomplete({\n message,\n source: Array.isArray(source) ? async (term) => {\n return (term ? source.filter(e => e.includes(term)) : source).map(e => ({ value: e }))\n } : source,\n suggestOnly: true,\n default: def\n })\n }\n}\n","import crypto from 'crypto'\nimport preferredPM from 'preferred-pm'\n\nexport class Resolver {\n static async getPakageInstallCommand (pkg?: string) {\n const pm = (await preferredPM(process.cwd()))?.name ?? 'pnpm'\n\n let cmd = 'install '\n\n if (!pkg) {\n if (pm === 'npm' || pm === 'pnpm' || pm === 'bun')\n cmd = 'install'\n else\n cmd = ''\n } else if (pm === 'yarn' || pm === 'pnpm' || pm === 'bun')\n cmd = 'add '\n\n return `${pm} ${cmd}${pkg ?? ''}`\n }\n\n static async getInstallCommand (pkg: string) {\n const pm = (await preferredPM(process.cwd()))?.name ?? 'pnpm'\n\n let cmd = 'install'\n if (pm === 'yarn' || pm === 'pnpm')\n cmd = 'add'\n else if (pm === 'bun')\n cmd = 'create'\n\n return `${pm} ${cmd} ${pkg}`\n }\n\n\n /**\n * Create a hash for a function or an object\n * \n * @param provider \n * @returns \n */\n static hashObjectOrFunction (provider: object | ((..._: any[]) => any)): string {\n return crypto\n .createHash('sha1')\n .update(provider.toString())\n .digest('hex')\n }\n\n /**\n * Checks if a function is asyncronous\n * \n * @param func \n * @returns \n */\n static isAsyncFunction (func: any): boolean {\n if (typeof func !== 'function') {\n return false\n }\n return Object.prototype.toString.call(func) === '[object AsyncFunction]'\n }\n}\n","export const mainTsconfig = {\n extends: '@h3ravel/shared/tsconfig.json',\n compilerOptions: {\n baseUrl: '.',\n outDir: 'dist',\n paths: {\n 'src/*': ['./../src/*'],\n 'App/*': ['./../src/app/*'],\n 'root/*': ['./../*'],\n 'routes/*': ['./../src/routes/*'],\n 'config/*': ['./../src/config/*'],\n 'resources/*': ['./../src/resources/*']\n },\n target: 'es2022',\n module: 'es2022',\n moduleResolution: 'bundler',\n esModuleInterop: true,\n strict: true,\n allowJs: true,\n skipLibCheck: true,\n resolveJsonModule: true,\n noEmit: true,\n experimentalDecorators: true,\n emitDecoratorMetadata: true\n },\n include: ['./**/*.d.ts', './../**/*'],\n exclude: [\n '.',\n './../**/console/bin',\n './../dist',\n './../**/dist',\n './../**/node_modules',\n './../.node_modules',\n './../**/node_modules/*',\n './../**/public',\n './../public',\n './../**/storage',\n './../storage',\n './../**coverage**',\n './../eslint.config.js',\n './../jest.config.ts',\n './../arquebus.config.js'\n ]\n}\n\nexport const baseTsconfig = {\n extends: './.h3ravel/tsconfig.json'\n}\n\nexport const packageJsonScript = {\n build: 'NODE_ENV=production tsdown --config-loader unconfig -c tsdown.default.config.ts',\n dev: 'NODE_ENV=development pnpm tsdown --config-loader unconfig -c tsdown.default.config.ts',\n start: 'DIST_DIR=dist node -r source-map-support/register dist/server.js',\n lint: 'eslint . --ext .ts',\n test: 'NODE_NO_WARNINGS=1 NODE_ENV=testing jest --passWithNoTests',\n postinstall: 'pnpm prepare'\n}\n","import { Logger } from './Logger'\n\nexport class TaskManager {\n public static async taskRunner (\n description: string,\n task: (() => Promise<any>) | (() => any)\n ): Promise<void> {\n const startTime = process.hrtime()\n let result: any = false\n\n try {\n result = await Promise.all([(task || (() => true))()].flat())\n } finally {\n const endTime = process.hrtime(startTime)\n const duration = (endTime[0] * 1e9 + endTime[1]) / 1e6\n Logger.twoColumnDetail(\n Logger.parse([[description, 'green']], '', false),\n [\n Logger.parse([[`${Math.floor(duration)}ms`, 'gray']], '', false),\n Logger.parse([[result !== false ? '✔' : '✘', result !== false ? 'green' : 'red']], '', false),\n ].join(' ')\n )\n }\n }\n\n public static async advancedTaskRunner<R = any> (\n info: [[string, string], [string, string]] | [[string, string]],\n task: (() => Promise<R>) | (() => R)\n ): Promise<R | undefined> {\n const startTime = process.hrtime()\n const [startInfo, stopInfo] = info\n\n if (stopInfo) {\n Logger.twoColumnDetail(startInfo[0], Logger.log(startInfo[1], ['yellow', 'bold'], false))\n }\n\n try {\n return await Promise.race([task()])\n } catch (e: any) {\n Logger.error('ERROR: ' + e.message)\n } finally {\n const endTime = process.hrtime(startTime)\n const duration = (endTime[0] * 1e9 + endTime[1]) / 1e6\n\n Logger.twoColumnDetail(\n stopInfo?.[0] ?? startInfo[0],\n [\n Logger.parse([[`${Math.floor(duration)}ms`, 'gray']], '', false),\n Logger.parse([[`✔ ${stopInfo?.[1] ?? startInfo[1]}`, ['green', 'bold']]], '', false),\n ].join(' ')\n )\n }\n }\n}\n"],"mappings":"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"}