{"version":3,"sources":["../../../../src/lib/A-ServerStatic/A-ServerStatic.context.ts"],"names":[],"mappings":"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","file":"A-ServerStatic.context.mjs","sourcesContent":["import { A_Fragment } from \"@adaas/a-concept\";\n\nexport interface A_StaticAlias {\n    alias: string;\n    path: string;\n    directory: string;\n    enabled?: boolean;\n}\n\nexport interface A_StaticDirectoryConfig {\n    path: string;\n    directory: string;\n    alias?: string;\n}\n\nexport class A_StaticConfig extends A_Fragment {\n\n    readonly directories: Array<string>;\n    private _aliases: Map<string, A_StaticAlias> = new Map();\n    private _directoryConfigs: A_StaticDirectoryConfig[] = [];\n\n    constructor(\n        /**\n         * Setup directories to serve static files from, comma separated\n         */\n        directories: string[] = [],\n        /**\n         * Custom directory configurations with aliases\n         */\n        directoryConfigs: A_StaticDirectoryConfig[] = []\n    ) {\n        super();\n\n        this.directories = directories;\n        this._directoryConfigs = directoryConfigs;\n\n        // Initialize default aliases from directories\n        this.initializeDefaultAliases();\n\n        // Initialize custom aliases from directoryConfigs\n        this.initializeCustomAliases();\n    }\n\n    private initializeDefaultAliases(): void {\n        this.directories.forEach((dir, index) => {\n            const alias: A_StaticAlias = {\n                alias: `/static${index > 0 ? index : ''}`,\n                path: `/static${index > 0 ? index : ''}`,\n                directory: dir,\n                enabled: true\n            };\n            this._aliases.set(alias.path, alias);\n        });\n    }\n\n    private initializeCustomAliases(): void {\n        this._directoryConfigs.forEach((config) => {\n            const alias: A_StaticAlias = {\n                alias: config.alias || config.path,\n                path: config.path,\n                directory: config.directory,\n                enabled: true\n            };\n            this._aliases.set(alias.path, alias);\n        });\n    }\n\n    /**\n     * Add a custom static file alias\n     * @param alias - The URL path alias (e.g., '/assets')\n     * @param directory - The local directory path\n     * @param path - Optional custom path (defaults to alias)\n     */\n    public addAlias(alias: string, directory: string, path?: string): void {\n        const staticAlias: A_StaticAlias = {\n            alias,\n            path: path || alias,\n            directory,\n            enabled: true\n        };\n\n        this._aliases.set(staticAlias.path, staticAlias);\n    }\n\n    /**\n     * Remove a static file alias\n     * @param aliasPath - The path of the alias to remove\n     */\n    public removeAlias(aliasPath: string): boolean {\n        return this._aliases.delete(aliasPath);\n    }\n\n    /**\n     * Enable or disable an alias\n     * @param aliasPath - The path of the alias\n     * @param enabled - Whether to enable or disable\n     */\n    public setAliasEnabled(aliasPath: string, enabled: boolean): boolean {\n        const alias = this._aliases.get(aliasPath);\n        if (alias) {\n            alias.enabled = enabled;\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * Get all configured aliases\n     */\n    public getAliases(): A_StaticAlias[] {\n        return Array.from(this._aliases.values());\n    }\n\n    /**\n     * Get enabled aliases only\n     */\n    public getEnabledAliases(): A_StaticAlias[] {\n        return Array.from(this._aliases.values()).filter(alias => alias.enabled !== false);\n    }\n\n    /**\n     * Find the best matching alias for a given request path\n     * @param requestPath - The request path to match\n     */\n    public findMatchingAlias(requestPath: string): A_StaticAlias | null {\n        let bestMatch: A_StaticAlias | null = null;\n        let longestMatch = 0;\n\n        for (const alias of this.getEnabledAliases()) {\n            if (requestPath.startsWith(alias.path) && alias.path.length > longestMatch) {\n                bestMatch = alias;\n                longestMatch = alias.path.length;\n            }\n        }\n\n        return bestMatch;\n    }\n\n    /**\n     * Check if an alias exists\n     * @param aliasPath - The path to check\n     */\n    public hasAlias(aliasPath: string): boolean {\n        return this._aliases.has(aliasPath);\n    }\n\n    /**\n     * Get a specific alias by path\n     * @param aliasPath - The path of the alias\n     */\n    public getAlias(aliasPath: string): A_StaticAlias | undefined {\n        return this._aliases.get(aliasPath);\n    }\n\n    /**\n     * Add multiple aliases at once\n     * @param aliases - Array of alias configurations\n     */\n    public addAliases(aliases: A_StaticDirectoryConfig[]): void {\n        aliases.forEach(config => {\n            this.addAlias(config.alias || config.path, config.directory, config.path);\n        });\n    }\n\n    /**\n     * Clear all aliases\n     */\n    public clearAliases(): void {\n        this._aliases.clear();\n    }\n\n    /**\n     * Update an existing alias\n     * @param aliasPath - The path of the alias to update\n     * @param updates - Partial updates to apply\n     */\n    public updateAlias(aliasPath: string, updates: Partial<A_StaticAlias>): boolean {\n        const alias = this._aliases.get(aliasPath);\n        if (alias) {\n            Object.assign(alias, updates);\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * Get statistics about configured aliases\n     */\n    public getStats(): {\n        total: number;\n        enabled: number;\n        disabled: number;\n        directories: string[];\n    } {\n        const aliases = this.getAliases();\n        const enabled = aliases.filter(a => a.enabled !== false);\n        const disabled = aliases.filter(a => a.enabled === false);\n        const directories = [...new Set(aliases.map(a => a.directory))];\n\n        return {\n            total: aliases.length,\n            enabled: enabled.length,\n            disabled: disabled.length,\n            directories\n        };\n    }\n\n    /**\n     * Checks if a given path is configured in the proxy (legacy method)\n     * @deprecated Use findMatchingAlias instead\n     * @param path \n     * @returns \n     */\n    has(path: string): boolean {\n        const alias = this.findMatchingAlias(path);\n        return alias ? !!alias.directory : false;\n    }\n\n    /**\n     * Gets the directory for a given path if configured (legacy method)\n     * \n     * @param path \n     * @returns \n     */\n    get(path: string): string | undefined {\n        const alias = this.findMatchingAlias(path);\n        return alias ? alias.directory : undefined;\n    }\n}"]}