{"version":3,"file":"index.cjs","names":["Command","outDir","TaskManager","Command","config","FileSystem","env","Command","FileSystem","nodepath","path","Str","Logger","Command","FileSystem","dir","entryFileName","env","TsDownConfig: UserConfig","path","ServiceProvider","ContainerResolver"],"sources":["../src/Commands/BuildCommand.ts","../src/Commands/KeyGenerateCommand.ts","../src/Commands/MakeCommand.ts","../src/Commands/PostinstallCommand.ts","../src/logo.ts","../../../node_modules/.pnpm/@rollup+plugin-run@3.1.0_rollup@4.52.5/node_modules/@rollup/plugin-run/dist/es/index.js","../src/TsdownConfig.ts","../src/Providers/ConsoleServiceProvider.ts"],"sourcesContent":["import { Logger, TaskManager } from '@h3ravel/shared'\n\nimport { Command } from '@h3ravel/musket'\nimport { execa } from 'execa'\nimport preferredPM from 'preferred-pm'\n\nexport class BuildCommand extends Command {\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected signature: string = `build\n        {--m|minify : Minify your bundle output}\n        {--d|dev : Build for dev but don't watch for changes}\n    `\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected description: string = 'Build the app for production'\n\n    public async handle () {\n        try {\n            await this.fire()\n        } catch (e) {\n            Logger.error(e as any)\n        }\n    }\n\n    protected async fire () {\n        const outDir = this.option('dev') ? '.h3ravel/serve' : env('DIST_DIR', 'dist')\n        const minify = this.option('minify')\n        const verbosity = this.getVerbosity()\n        const debug = verbosity > 0\n\n        this.newLine()\n        await BuildCommand.build({ outDir, minify, verbosity, debug, mute: false })\n        this.newLine()\n    }\n\n    /**\n     * build\n     */\n    public static async build ({ debug, minify, mute, verbosity, outDir } = {\n        mute: false,\n        debug: false,\n        minify: false,\n        verbosity: 0,\n        outDir: 'dist'\n    }) {\n\n        const pm = (await preferredPM(base_path()))?.name ?? 'pnpm'\n\n        const LOG_LEVELS = [\n            'silent',\n            'info',\n            'warn',\n            'error',\n        ]\n\n        const ENV_VARS = {\n            EXTENDED_DEBUG: debug ? 'true' : 'false',\n            CLI_BUILD: 'true',\n            NODE_ENV: 'production',\n            DIST_DIR: outDir,\n            DIST_MINIFY: minify,\n            LOG_LEVEL: LOG_LEVELS[verbosity]\n        }\n\n        const silent = ENV_VARS.LOG_LEVEL === 'silent' ? '--silent' : null\n\n        if (mute) {\n            return await execa(\n                pm,\n                ['tsdown', silent, '--config-loader', 'unconfig', '-c', 'tsdown.default.config.ts'].filter(e => e !== null),\n                { stdout: 'inherit', stderr: 'inherit', cwd: base_path(), env: Object.assign({}, process.env, ENV_VARS) }\n            )\n        }\n\n        const type = outDir === 'dist' ? 'Production' : 'Development'\n\n        return await TaskManager.advancedTaskRunner(\n            [[`Creating ${type} Bundle`, 'STARTED'], [`${type} Bundle Created`, 'COMPLETED']],\n            async () => {\n                await execa(\n                    pm,\n                    ['tsdown', silent, '--config-loader', 'unconfig', '-c', 'tsdown.default.config.ts'].filter(e => e !== null),\n                    { stdout: 'inherit', stderr: 'inherit', cwd: base_path(), env: Object.assign({}, process.env, ENV_VARS) }\n                )\n            }\n        )\n    }\n}\n","import { FileSystem, Logger } from '@h3ravel/shared'\nimport { copyFile, readFile, writeFile } from 'fs/promises'\n\nimport { Command } from '@h3ravel/musket'\nimport crypto from 'crypto'\nimport dotenv from 'dotenv'\n\nexport class KeyGenerateCommand extends Command {\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected signature: string = `key:generate\n        {--force: Force the operation to run when in production}\n        {--show: Display the key instead of modifying files}\n    `\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected description: string = 'Set the application key'\n\n    public async handle () {\n        const config = {\n            key: crypto.randomBytes(32).toString('base64'),\n            envPath: base_path('.env'),\n            egEnvPath: base_path('.env.example'),\n            updated: false,\n            show: this.option('show')\n        }\n\n        this.newLine()\n\n        // Try to create the .env file if it does not exist\n        if (!await FileSystem.fileExists(config.envPath)) {\n            if (await FileSystem.fileExists(config.egEnvPath)) {\n                await copyFile(config.egEnvPath, config.envPath)\n            } else {\n                this.error('.env file not found.')\n                this.newLine()\n                process.exit(0)\n            }\n        }\n\n        // Read and parse the .env file\n        let content = await readFile(config.envPath, 'utf8')\n        const buf = Buffer.from(content)\n        const env = dotenv.parse(buf)\n\n        // Show the Application key\n        if (config.show) {\n            // If the Application key is not exit with an erorr message\n            if (!env.APP_KEY || env.APP_KEY === '') {\n                this.error('Application key not set.')\n                this.newLine()\n                process.exit(0)\n            }\n\n            // Actually show the Application key\n            const [enc, key] = env.APP_KEY.split(':')\n            Logger.log([[enc, 'yellow'], [key, 'white']], ':')\n            this.newLine()\n            process.exit(0)\n        } else if (env.APP_ENV === 'production' && !this.option('force')) {\n            // If the Application is currently in production and the force flag is not set, exit with an error\n            this.error('Application is currently in production, failed to set key.')\n            this.newLine()\n            process.exit(1)\n        }\n\n        // Check if APP_KEY exists\n        if (/^APP_KEY=.*$/m.test(content)) {\n            config.updated = true\n            content = content.replace(/^APP_KEY=.*$/m, `APP_KEY=base64:${config.key}`)\n        } else {\n            // Add APP_KEY to the top, preserving existing content\n            config.updated = false\n            content = `APP_KEY=base64:${config.key}\\n\\n${content}`\n        }\n\n        // Write the application key to the .env file\n        await writeFile(config.envPath, content, 'utf8')\n\n        // Show the success message\n        this.success('Application key set successfully.')\n        this.newLine()\n    }\n}\n","import { FileSystem, Logger } from '@h3ravel/shared'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\n\nimport { Command } from '@h3ravel/musket'\nimport { Str } from '@h3ravel/support'\nimport nodepath from 'node:path'\n\nexport class MakeCommand extends Command {\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected signature: string = `#make:\n        {controller : Create a new controller class. \n            | {--a|api : Exclude the create and edit methods from the controller} \n            | {--m|model= : Generate a resource controller for the given model} \n            | {--r|resource : Generate a resource controller class} \n            | {--force : Create the controller even if it already exists}\n        }\n        {resource : Create a new resource. \n            | {--c|collection : Create a resource collection}\n            | {--force : Create the resource even if it already exists}\n        }\n        {command : Create a new Musket command. \n            | {--command : The terminal command that will be used to invoke the class} \n            | {--force : Create the class even if the console command already exists}\n        }\n        {view : Create a new view.\n            | {--force : Create the view even if it already exists}\n        }\n        {^name : The name of the [name] to generate}\n    `\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected description: string = 'Generate component classes'\n\n    public async handle (this: any) {\n        const command = (this.dictionary.baseCommand ?? this.dictionary.name) as never\n\n        if (!this.argument('name')) {\n            this.program.error('Please provide a valid name for the ' + command)\n        }\n\n        const methods = {\n            controller: 'makeController',\n            resource: 'makeResource',\n            view: 'makeView',\n            command: 'makeCommand',\n        } as const\n\n        await this[methods[command]]()\n    }\n\n    /**\n     * Create a new controller class.\n     */\n    protected async makeController () {\n        const type = this.option('api') ? '-resource' : ''\n        const name = this.argument('name')\n        const force = this.option('force')\n\n        const crtlrPath = FileSystem.findModulePkg('@h3ravel/http', this.kernel.cwd) ?? ''\n        const stubPath = nodepath.join(crtlrPath, `dist/stubs/controller${type}.stub`)\n        const path = app_path(`Http/Controllers/${name}.ts`)\n\n        /** The Controller is scoped to a path make sure to create the associated directories */\n        if (name.includes('/')) {\n            await mkdir(Str.beforeLast(path, '/'), { recursive: true })\n        }\n\n        /** Check if the controller already exists */\n        if (!force && await FileSystem.fileExists(path)) {\n            Logger.error(`ERORR: ${name} controller already exists`)\n        }\n\n        let stub = await readFile(stubPath, 'utf-8')\n        stub = stub.replace(/{{ name }}/g, name)\n\n        await writeFile(path, stub)\n        Logger.split('INFO: Controller Created', Logger.log(nodepath.basename(path), 'gray', false))\n    }\n\n    protected makeResource () {\n        Logger.success('Resource support is not yet available')\n    }\n\n    /**\n     * Create a new Musket command\n     */\n    protected makeCommand () {\n        Logger.success('Musket command creation is not yet available')\n    }\n\n    /**\n     * Create a new view.\n     */\n    protected async makeView () {\n        const name = this.argument('name')\n        const force = this.option('force')\n\n        const path = base_path(`src/resources/views/${name}.edge`)\n\n        /** The view is scoped to a path make sure to create the associated directories */\n        if (name.includes('/')) {\n            await mkdir(Str.beforeLast(path, '/'), { recursive: true })\n        }\n\n        /** Check if the view already exists */\n        if (!force && await FileSystem.fileExists(path)) {\n            Logger.error(`ERORR: ${name} view already exists`)\n        }\n\n        await writeFile(path, `{{-- src/resources/views/${name}.edge --}}`)\n        Logger.split('INFO: View Created', Logger.log(`src/resources/views/${name}.edge`, 'gray', false))\n    }\n}\n","import { mkdir, writeFile } from 'node:fs/promises'\n\nimport { Command } from '@h3ravel/musket'\nimport { FileSystem } from '@h3ravel/shared'\nimport { KeyGenerateCommand } from './KeyGenerateCommand'\n\nexport class PostinstallCommand extends Command {\n\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected signature: string = 'postinstall'\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected description: string = 'Default post installation command'\n\n    public async handle () {\n        this.genEncryptionKey()\n        this.createSqliteDB()\n    }\n\n    /**\n     * Create sqlite database if none exist\n     * \n     * @returns \n     */\n    private async genEncryptionKey () {\n        new KeyGenerateCommand(this.app, this.kernel)\n            .setProgram(this.program)\n            .setOption('force', true)\n            .setOption('silent', true)\n            .setOption('quiet', true)\n            .setInput({ force: true, silent: true, quiet: true }, [], [], {}, this.program)\n            .handle()\n    }\n\n    /**\n     * Create sqlite database if none exist\n     * \n     * @returns \n     */\n    private async createSqliteDB () {\n        if (config('database.default') !== 'sqlite') return\n\n        if (!await FileSystem.fileExists(database_path())) {\n            await mkdir(database_path(), { recursive: true })\n        }\n\n        if (!await FileSystem.fileExists(database_path('db.sqlite'))) {\n            await writeFile(database_path('db.sqlite'), '')\n        }\n    }\n}\n","export const logo = String.raw`\n               111                                                                                     \n            111111111                                                                                  \n        1111111111 111111                                                                              \n     111111    111    111111                                                                           \n  111111       111       111111                                                                        \n11111          111          11111                                                                      \n1111111        111        1111111                                                                      \n111  11111     111     111111 111     1111    1111  11111111                                       1111\n111     11111 1111  111111    111     1111    1111 1111  11111                                     1111\n111        11111 11111        111     1111    1111       111111111111 111111111111   1111 1111111  1111\n111           111111     1111 111     111111111111    111111  11111  1111  111 1111 11111111  1111 1111\n111            111   11111111 111     1101    1101       111111111    11111111 1111 1111111111111111101\n111     1111111111111111 1111 111     1111    1111 111    11111011   1111  111  1111111 1101       1111\n111  11111   1110111111111111 111     1111    1111 1111111101 1111   111111111  1111011  111111111 1111\n1111111        111110111110   111     1111    1111   111111   1111    11011101   10111     11111   1111\n11011          111111 11    11111                                                                      \n  111111       11101     111111                                                                        \n     111111    111    111111                                                                           \n        111111 111 111111                                                                              \n            111111111                                                                                  \n               110                                                                                     \n`\n\nexport const altLogo = String.raw`\n _   _ _____                     _ \n| | | |___ / _ __ __ ___   _____| |\n| |_| | |_ \\| '__/ _  \\ \\ / / _ \\ |\n|  _  |___) | | | (_| |\\ V /  __/ |\n|_| |_|____/|_|  \\__,_| \\_/ \\___|_|\n\n`\n","import { fork } from 'child_process';\nimport { resolve, dirname, join } from 'path';\n\nfunction run(opts = {}) {\n    let input;\n    let proc;\n    const args = opts.args || [];\n    const allowRestarts = opts.allowRestarts || false;\n    const overrideInput = opts.input;\n    const forkOptions = opts.options || opts;\n    delete forkOptions.args;\n    delete forkOptions.allowRestarts;\n    return {\n        name: 'run',\n        buildStart(options) {\n            let inputs = overrideInput !== null && overrideInput !== void 0 ? overrideInput : options.input;\n            if (typeof inputs === 'string') {\n                inputs = [inputs];\n            }\n            if (typeof inputs === 'object') {\n                inputs = Object.values(inputs);\n            }\n            if (inputs.length > 1) {\n                throw new Error(`@rollup/plugin-run must have a single entry point; consider setting the \\`input\\` option`);\n            }\n            input = resolve(inputs[0]);\n        },\n        generateBundle(_outputOptions, _bundle, isWrite) {\n            if (!isWrite) {\n                this.error(`@rollup/plugin-run currently only works with bundles that are written to disk`);\n            }\n        },\n        writeBundle(outputOptions, bundle) {\n            const forkBundle = (dir, entryFileName) => {\n                if (proc)\n                    proc.kill();\n                proc = fork(join(dir, entryFileName), args, forkOptions);\n            };\n            const dir = outputOptions.dir || dirname(outputOptions.file);\n            const entryFileName = Object.keys(bundle).find((fileName) => {\n                const chunk = bundle[fileName];\n                return chunk.isEntry && chunk.facadeModuleId === input;\n            });\n            if (entryFileName) {\n                forkBundle(dir, entryFileName);\n                if (allowRestarts) {\n                    process.stdin.resume();\n                    process.stdin.setEncoding('utf8');\n                    process.stdin.on('data', (data) => {\n                        const line = data.toString().trim().toLowerCase();\n                        if (line === 'rs' || line === 'restart' || data.toString().charCodeAt(0) === 11) {\n                            forkBundle(dir, entryFileName);\n                        }\n                        else if (line === 'cls' || line === 'clear' || data.toString().charCodeAt(0) === 12) {\n                            // eslint-disable-next-line no-console\n                            console.clear();\n                        }\n                    });\n                }\n            }\n            else {\n                this.error(`@rollup/plugin-run could not find output chunk`);\n            }\n        }\n    };\n}\n\nexport { run as default };\n//# sourceMappingURL=index.js.map\n","import { UserConfig } from 'tsdown'\nimport { existsSync } from 'node:fs'\nimport path from 'node:path'\nimport { rm } from 'node:fs/promises'\nimport run from '@rollup/plugin-run'\n\nconst env = process.env.NODE_ENV || 'development'\nlet outDir = env === 'development' ? '.h3ravel/serve' : 'dist'\nif (process.env.DIST_DIR) {\n    outDir = process.env.DIST_DIR\n}\n\nexport const TsDownConfig: UserConfig = {\n    outDir,\n    outExtensions: (e) => {\n        return ({\n            js: e.format === 'es' ? '.js' : '.cjs',\n            dts: '.d.ts'\n        })\n    },\n    entry: ['src/**/*.ts'],\n    format: ['esm'],//, 'cjs'],\n    target: 'node22',\n    sourcemap: env === 'development',\n    minify: !!process.env.DIST_MINIFY,\n    external: [\n        /^@h3ravel\\/.*/gi,\n    ],\n    clean: true,\n    shims: true,\n    copy: [{ from: 'public', to: outDir }, 'src/resources', 'src/database'],\n    env: env === 'development' ? {\n        NODE_ENV: env,\n        DIST_DIR: outDir,\n    } : {},\n    watch:\n        env === 'development' && process.env.CLI_BUILD !== 'true'\n            ? ['.env', '.env.*', 'src', '../../packages']\n            : false,\n    dts: false,\n    logLevel: 'silent',\n    nodeProtocol: true,\n    skipNodeModulesBundle: true,\n    hooks (e) {\n        e.hook('build:done', async () => {\n            const paths = ['database/migrations', 'database/factories', 'database/seeders']\n            for (let i = 0; i < paths.length; i++) {\n                const name = paths[i]\n                if (existsSync(path.join(outDir, name)))\n                    await rm(path.join(outDir, name), { recursive: true })\n            }\n        })\n    },\n    plugins: env === 'development' && process.env.CLI_BUILD !== 'true' ? [\n        run({\n            env: Object.assign({}, process.env, {\n                NODE_ENV: env,\n                DIST_DIR: outDir,\n            }),\n            execArgv: ['-r', 'source-map-support/register'],\n            allowRestarts: false,\n            input: process.cwd() + '/src/server.ts'//\n        })\n    ] : [],\n}\n\nexport default TsDownConfig\n","/// <reference path=\"../../../core/src/app.globals.d.ts\" />\n\nimport { ContainerResolver, ServiceProvider } from '@h3ravel/core'\n\nimport { BuildCommand } from '../Commands/BuildCommand'\nimport { Kernel } from '@h3ravel/musket'\nimport { KeyGenerateCommand } from '../Commands/KeyGenerateCommand'\nimport { MakeCommand } from '../Commands/MakeCommand'\nimport { PostinstallCommand } from '../Commands/PostinstallCommand'\nimport { altLogo } from '../logo'\nimport tsDownConfig from '../TsdownConfig'\n\n/**\n * Handles CLI commands and tooling.\n * \n * Auto-Registered when in CLI mode\n */\nexport class ConsoleServiceProvider extends ServiceProvider {\n    public static priority = 992\n\n    /**\n     * Indicate that this service provider only runs in console\n     */\n    public static runsInConsole = true\n    public runsInConsole = true\n\n    register () {\n        const DIST_DIR = `/${env('DIST_DIR', '.h3ravel/serve')}/`.replaceAll('//', '')\n        const baseCommands = [BuildCommand, MakeCommand, PostinstallCommand, KeyGenerateCommand]\n\n        Kernel.init(\n            this.app,\n            {\n                logo: altLogo,\n                resolver: new ContainerResolver(this.app).resolveMethodParams,\n                tsDownConfig,\n                baseCommands,\n                packages: [\n                    { name: '@h3ravel/core', alias: 'H3ravel Framework' },\n                    { name: '@h3ravel/musket', alias: 'Musket CLI' }\n                ],\n                cliName: 'musket',\n                hideMusketInfo: true,\n                discoveryPaths: [app_path('Console/Commands/*.js').replace('/src/', DIST_DIR)],\n            }\n        );\n\n        ['SIGINT', 'SIGTERM', 'SIGTSTP'].forEach(sig => process.on(sig, () => {\n            process.exit(0)\n        }))\n    }\n}\n"],"x_google_ignoreList":[5],"mappings":"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"}