{"version":3,"file":"dotglitch-ngx-common-monaco-editor.mjs","sources":["../../packages/common/monaco-editor/ts-type-resolver/dependency-parser.ts","../../packages/common/monaco-editor/ts-type-resolver/update-emitter.ts","../../packages/common/monaco-editor/ts-type-resolver/recursion-depth.ts","../../packages/common/monaco-editor/ts-type-resolver/types.ts","../../packages/common/monaco-editor/ts-type-resolver/unpkg-source-resolver.ts","../../packages/common/monaco-editor/ts-type-resolver/import-resolver.ts","../../packages/common/monaco-editor/ts-type-resolver/dummy-source-cache.ts","../../packages/common/monaco-editor/ts-type-resolver/main.ts","../../packages/common/monaco-editor/monaco-editor.component.ts","../../packages/common/monaco-editor/dotglitch-ngx-common-monaco-editor.ts"],"sourcesContent":["import * as path from 'path-browserify';\nimport { ImportResourcePath } from './types';\n\nexport class DependencyParser {\n    private REGEX_NODE_MODULE = /^node:([\\w\\W\\/]+)$/;\n\n    // https://github.com/lukasbach/monaco-editor-auto-typings/commit/fc046e7d9a2abbb5121ad8ab25195d8c1c277416\n    public parseDependencies(source: string, parent: ImportResourcePath | string): ImportResourcePath[] {\n        const importRegex = /import *.+ *from *['\"](?<importPath>.+?)['\"]/g;\n        const dynamicImportRegex = /await import ?\\(['\"](?<importPath>.+?)['\"]\\)/g;\n        const cjsRequireRegex = /require *\\(['\"](?<importPath>.+?)['\"]\\)/g;\n\n        const matches = [\n            ...source.matchAll(importRegex),\n            ...source.matchAll(dynamicImportRegex),\n            ...source.matchAll(cjsRequireRegex)\n        ];\n        const importPaths = matches.map(match => match.groups?.['importPath']);\n        const result = importPaths.map(imp => this.resolvePath(imp, parent));\n\n        return result\n    }\n\n    private resolvePath(importPath: string, parent: ImportResourcePath | string): ImportResourcePath {\n        const nodeImport = importPath.match(this.REGEX_NODE_MODULE);\n        if (nodeImport) {\n            return {\n                kind: 'relative-in-package',\n                packageName: '@types/node',\n                importPath: `${nodeImport[1]}.d.ts`,\n                sourcePath: '',\n            };\n        }\n\n        if (typeof parent === 'string') {\n            if (importPath.startsWith('.')) {\n                return {\n                    kind: 'relative',\n                    importPath,\n                    sourcePath: parent,\n                };\n            }\n            else if (importPath.startsWith('@')) {\n                const segments = importPath.split('/');\n                return {\n                    kind: 'package',\n                    packageName: `${segments[0]}/${segments[1]}`,\n                    importPath: segments.slice(2).join('/'),\n                };\n            }\n            else {\n                const segments = importPath.split('/');\n                return {\n                    kind: 'package',\n                    packageName: segments[0],\n                    importPath: segments.slice(1).join('/'),\n                };\n            }\n        }\n        else {\n            switch (parent.kind) {\n                case 'package':\n                    throw Error('TODO?');\n                case 'relative':\n                    throw Error('TODO2?');\n                case 'relative-in-package':\n                    if (importPath.startsWith('.')) {\n                        return {\n                            kind: 'relative-in-package',\n                            packageName: parent.packageName,\n                            sourcePath: path.join(parent.sourcePath, parent.importPath),\n                            importPath: importPath,\n                        };\n                    }\n                    else if (importPath.startsWith('@')) {\n                        const segments = importPath.split('/');\n                        return {\n                            kind: 'package',\n                            packageName: `${segments[0]}/${segments[1]}`,\n                            importPath: segments.slice(2).join('/'),\n                        };\n                    }\n                    else {\n                        const segments = importPath.split('/');\n                        return {\n                            kind: 'package',\n                            packageName: segments[0],\n                            importPath: segments.slice(1).join('/'),\n                        };\n                    }\n            }\n        }\n        return null;\n    }\n}\n","import { ProgressUpdate, Options } from './types';\n\nexport const invokeUpdate = (progress: ProgressUpdate, options: Options) => {\n    let textual = `${progress.type}: `;\n\n    switch (progress.type) {\n        case 'CodeChanged':\n            textual += ``;\n            break;\n        case 'ResolveNewImports':\n            textual += ``;\n            break;\n        // case 'DetectedImport':\n        //     textual += `at \"${progress.source}\" the import \"${progress.importPath}\" was detected`;\n        //     break;\n        // case 'CompletedImport':\n        //     textual += `at \"${progress.source}\" the import \"${progress.importPath}\" was completed`;\n        //     break;\n        case 'LookedUpTypeFile':\n            textual += `\"${progress.path}\" was ${progress.success ? 'sucessfully' : 'not sucessfully'} looked up`;\n            break;\n        case 'AttemptedLookUpFile':\n            textual += `\"${progress.path}\" was ${\n                progress.success ? 'sucessfully' : 'not sucessfully'\n            } attempted to looked up`; // What in the hell is this grammar?\n            break;\n        case 'LookedUpPackage':\n            textual += `package.json for package \"${progress.package}\" was ${\n                progress.success ? 'sucessfully' : 'not sucessfully'\n            } looked up${progress.definitelyTyped ? ' (found in definitely typed repo)' : ''}`;\n            break;\n        case 'LoadedFromCache':\n            textual += `\"${progress.importPath}\" was loaded from cache`;\n            break;\n        case 'StoredToCache':\n            textual += `\"${progress.importPath}\" was stored to cache`;\n            break;\n    }\n\n    if (textual.endsWith(': ')) {\n        textual = textual.slice(undefined, -2);\n    }\n\n    options.onUpdate?.(progress, textual);\n};\n","import { Options } from './types';\n\nexport class RecursionDepth {\n    constructor(private options: Options, private fileRecursionDepth = 0, private packageRecursionDepth = 0) {}\n\n    public nextPackage() {\n        return new RecursionDepth(this.options, this.fileRecursionDepth, this.packageRecursionDepth + 1);\n    }\n\n    public nextFile() {\n        return new RecursionDepth(this.options, this.fileRecursionDepth + 1, this.packageRecursionDepth);\n    }\n\n    public same() {\n        return new RecursionDepth(this.options, this.fileRecursionDepth, this.packageRecursionDepth);\n    }\n\n    public shouldStop() {\n        return (\n            (this.options.fileRecursionDepth > 0 && this.fileRecursionDepth >= this.options.fileRecursionDepth) ||\n            (this.options.packageRecursionDepth > 0 && this.packageRecursionDepth >= this.options.packageRecursionDepth)\n        );\n    }\n}\n","import type * as monaco from 'monaco-editor';\nimport * as path from 'path-browserify';\n\nexport interface SourceCache {\n    isFileAvailable?: (uri: string) => Promise<boolean>;\n    storeFile: (uri: string, content: string) => Promise<void>;\n    getFile: (uri: string) => Promise<string | undefined>;\n    clear: () => Promise<void>;\n}\n\nexport type ProgressUpdate =\n    | {\n        type: 'CodeChanged';\n    }\n    | {\n        type: 'ResolveNewImports';\n    }\n    | {\n        type: 'LookedUpTypeFile';\n        path: string;\n        success: boolean;\n    }\n    | {\n        type: 'AttemptedLookUpFile';\n        path: string;\n        success: boolean;\n    }\n    | {\n        type: 'LookedUpPackage';\n        package: string;\n        definitelyTyped: boolean;\n        success: boolean;\n    }\n    | {\n        type: 'LoadedFromCache';\n        importPath: string;\n    }\n    | {\n        type: 'StoredToCache';\n        importPath: string;\n    };\n\n\n\nexport interface Options {\n    /**\n     * Share source cache between multiple editor instances by storing\n     * the cache in a static property.\n     *\n     * Defaults to false.\n     */\n    shareCache: boolean;\n\n    /**\n     * Only use packages specified in the `versions` property.\n     *\n     * Defaults to false.\n     */\n    onlySpecifiedPackages: boolean;\n\n    /**\n     * Load typings from prespecified versions when initializing. Versions\n     * need to be specified in the ``versions`` option.\n     *\n     * Defaults to false.\n     */\n    preloadPackages: boolean;\n\n    /**\n     * Updates compiler options to defaults suitable for auto-loaded\n     * declarations, specifically by setting ``moduleResolution`` to\n     * ``NodeJs`` and ``allowSyntheticDefaultImports`` to true.\n     * Other options are not changed. Set this property to true to\n     * disable this behaviour.\n     *\n     * Defaults to false.\n     */\n    dontAdaptEditorOptions: boolean;\n\n    /**\n     * After typings were resolved and injected into monaco, auto-typings\n     * updates the value of the current model to trigger a refresh in\n     * monaco's typing logic, so that it uses the injected typings.\n     */\n    dontRefreshModelValueAfterResolvement: boolean;\n\n    /**\n     * Prespecified package versions. If a package is loaded whose\n     * name is specified in this object, it will load with the exact\n     * version specified in the object.\n     *\n     * Example:\n     *\n     * ```json\n     * {\n     *   \"@types/react\": \"17.0.0\",\n     *   \"csstype\": \"3.0.5\"\n     * }\n     * ```\n     *\n     * Setting the option ``onlySpecifiedPackages`` to true makes this\n     * property act as a whitelist for packages.\n     *\n     * Setting the option ``preloadPackages`` makes the packages specified\n     * in this property load directly after initializing the auto-loader.\n     */\n    versions?: { [packageName: string]: string; };\n\n    /**\n     * If a new package was loaded, its name and version is added to the\n     * version object, and this method is called with the updated object.\n     * @param versions updated versions object.\n     */\n    onUpdateVersions?: (versions: { [packageName: string]: string; }) => void;\n\n    /**\n     * Supply a cache where declaration files and package.json files are\n     * cached to. Supply an instance of {@link LocalStorageCache} to cache\n     * files to localStorage.\n     */\n    sourceCache: SourceCache;\n\n    /**\n     * The root directory where your edited files are. Must end with\n     * a slash. The default is suitable unless you change the default\n     * URI of files loaded in the editor.\n     *\n     * Defaults to \"inmemory://model/\"\n     */\n    fileRootPath: string;\n\n    /**\n     * Debounces code reanalyzing after user has changed the editor contents\n     * by the specified amount. Set to zero to disable. Value provided in\n     * milliseconds.\n     *\n     * Defaults to 4000, i.e. 4 seconds.\n     */\n    debounceDuration: number;\n\n    /**\n     * Maximum recursion depth for recursing packages. Determines how many\n     * nested package declarations are loaded. For example, if ``packageRecursionDepth``\n     * has the value 2, the code in the monaco editor references packages ``A1``, ``A2``\n     * and ``A3``, package ``A1`` references package ``B1`` and ``B1`` references ``C1``,\n     * then packages ``A1``, ``A2``, ``A3`` and ``B1`` are loaded. Set to zero to\n     * disable.\n     *\n     * Defaults to 3.\n     */\n    packageRecursionDepth: number;\n\n    /**\n     * Maximum recursion depth for recursing files. Determines how many\n     * nested file declarations are loaded. The same as ``packageRecursionDepth``,\n     * but for individual files. Set to zero to disable.\n     *\n     * Defaults to 10.\n     */\n    fileRecursionDepth: number;\n\n    /**\n     * Called after progress updates like loaded declarations or events.\n     * @param update detailed event object containing update infos.\n     * @param textual a textual representation of the update for debugging.\n     */\n    onUpdate?: (update: ProgressUpdate, textual: string) => void;\n\n    /**\n     * Called if errors occur.\n     * @param error a textual representation of the error.\n     */\n    onError?: (error: string) => void;\n    /**\n     * instance of monaco editor\n     */\n    monaco: typeof monaco;\n}\n\n\nexport interface ImportResourcePathPackage {\n    kind: 'package';\n    packageName: string;\n    importPath?: string;\n}\n\nexport interface ImportResourcePathRelative {\n    kind: 'relative';\n    importPath: string;\n    sourcePath: string;\n}\n\nexport interface ImportResourcePathRelativeInPackage {\n    kind: 'relative-in-package';\n    packageName: string;\n    importPath: string;\n    sourcePath: string;\n}\n\nexport interface ImportResourceBruteForce {\n    kind: 'bruteforce';\n    packageName: string;\n    typingFiles: any[];\n}\n\nexport type ImportResourcePath =\n    | ImportResourcePathPackage\n    | ImportResourcePathRelative\n    | ImportResourcePathRelativeInPackage\n    | ImportResourceBruteForce;\n\nexport const importResourcePathToString = (p: ImportResourcePath) => {\n    switch (p.kind) {\n        case 'package':\n            return path.join(p.packageName, p.importPath ?? '', 'package.json');\n        case 'relative':\n            return path.join(p.sourcePath, p.importPath);\n        case 'relative-in-package':\n            return path.join(p.packageName, p.sourcePath, p.importPath);\n        case 'bruteforce':\n            throw new Error(\"Not Implemented\");\n    }\n};\n","\nexport class UnpkgSourceResolver {\n    public static async resolvePackageJson(\n        packageName: string,\n        version: string | undefined,\n        subPath: string | undefined\n    ): Promise<string | undefined> {\n        return await this.resolveFile(\n            `https://unpkg.com/${packageName}${version ? `@${version}` : ''}${subPath ? `/${subPath}` : ''}/package.json`\n        );\n    }\n\n    public static async resolveSourceFile(\n        packageName: string,\n        version: string | undefined,\n        path: string\n    ): Promise<string | undefined> {\n        return await this.resolveFile(`https://unpkg.com/${packageName}${version ? `@${version}` : ''}/${path}`);\n    }\n\n    private static async resolveFile(url: string) {\n        const res = await fetch(url, { method: 'GET' });\n\n        if (res.ok) {\n            return await res.text();\n        }\n        else if (res.status === 404) {\n            return '';\n        }\n        else {\n            throw Error(`Error other than 404 while fetching from Unpkg at ${url}`);\n        }\n    }\n}\n","import type * as monaco from 'monaco-editor';\nimport { DependencyParser } from './dependency-parser';\nimport * as path from 'path-browserify';\nimport { invokeUpdate } from './update-emitter';\nimport { RecursionDepth } from './recursion-depth';\nimport { ImportResourcePath, ImportResourcePathPackage, ImportResourcePathRelativeInPackage, Options, SourceCache, importResourcePathToString } from './types';\nimport { UnpkgSourceResolver } from './unpkg-source-resolver';\n\nexport class ImportResolver {\n    private loadedFiles: string[];\n    private dependencyParser: DependencyParser;\n    private cache: SourceCache;\n    private versions?: { [packageName: string]: string };\n    private newImportsResolved: boolean;\n    private monaco: typeof monaco;\n\n    constructor(private options: Options) {\n        this.loadedFiles = [];\n        this.dependencyParser = new DependencyParser();\n        this.cache = options.sourceCache;\n        this.newImportsResolved = false;\n        this.monaco = options.monaco!;\n\n        if (options.preloadPackages && options.versions) {\n            this.versions = options.versions;\n            for (const [packageName, version] of Object.entries(options.versions)) {\n                this.resolveImport(\n                    {\n                        kind: 'package',\n                        packageName: packageName,\n                        importPath: '',\n                    },\n                    new RecursionDepth(this.options)\n                ).catch(e => {\n                    console.error(e);\n                });\n            }\n        }\n    }\n\n    public wereNewImportsResolved() {\n        return this.newImportsResolved;\n    }\n\n    public resetNewImportsResolved() {\n        this.newImportsResolved = false;\n    }\n\n    public async resolveImportsInFile(source: string, parent: string | ImportResourcePath, depth: RecursionDepth) {\n        if (depth.shouldStop()) {\n            return;\n        }\n\n        const imports = this.dependencyParser.parseDependencies(source, parent);\n        for (const importCall of imports) {\n            try {\n                await this.resolveImport(importCall, depth);\n            }\n            catch (e) {\n                if (this.options.onError) {\n                    this.options.onError?.((e as Error).message ?? e);\n                }\n                else {\n                    console.error(e);\n                }\n            }\n        }\n    }\n\n    private async resolveImport(importResource: ImportResourcePath, depth: RecursionDepth) {\n        const hash = this.hashImportResourcePath(importResource);\n        if (this.loadedFiles.includes(hash)) {\n            return;\n        }\n\n        this.loadedFiles.push(hash);\n        console.log(\"resolveImport\", importResource, depth);\n\n        // Ignore these package imports as they are well-known to be pointless.\n        if (importResource.kind == \"package\" && importResource.packageName == \"require\")\n            return null;\n\n        switch (importResource.kind) {\n            case 'package':\n                const packageRelativeImport = await this.resolveImportFromPackageRoot(importResource);\n                if (packageRelativeImport) {\n                    return await this.resolveImportInPackage(packageRelativeImport, depth.nextPackage().nextFile());\n                }\n                break;\n            case 'relative':\n                throw Error('Not implemented yet');\n            case 'relative-in-package':\n                return await this.resolveImportInPackage(importResource, depth.nextFile());\n            case 'bruteforce': {\n\n            }\n        }\n    }\n\n    private async resolveImportInPackage(importResource: ImportResourcePathRelativeInPackage, depth: RecursionDepth) {\n        console.log(\"resolveImportInPackage\", importResource, depth);\n\n        const contents = await this.loadSourceFileContents(importResource);\n\n        if (contents) {\n            const { source, at } = contents;\n            this.createModel(\n                source,\n                this.monaco.Uri.parse(this.options.fileRootPath + path.join(`node_modules/${importResource.packageName}`, at))\n            );\n\n            await this.resolveImportsInFile(\n                source,\n                {\n                    kind: 'relative-in-package',\n                    packageName: importResource.packageName,\n                    sourcePath: path.dirname(at),\n                    importPath: '',\n                },\n                depth\n            );\n        }\n    }\n\n    private async resolveImportFromPackageRoot(\n        importResource: ImportResourcePathPackage\n    ): Promise<ImportResourcePathRelativeInPackage | void> {\n        console.log(\"resolveImportFromPackageRoot\", importResource);\n\n        const failedProgressUpdate = {\n            type: 'LookedUpPackage',\n            package: importResource.packageName,\n            definitelyTyped: false,\n            success: false,\n        } as const;\n\n        if (this.options.onlySpecifiedPackages) {\n            if (!this.versions?.[importResource.packageName] && !this.versions?.['@types/' + importResource.packageName]) {\n                invokeUpdate(failedProgressUpdate, this.options);\n                return null;\n            }\n        }\n\n        const doesPkgJsonHasSubpath = importResource.importPath?.length ?? 0 > 0;\n        let pkgJsonSubpath = doesPkgJsonHasSubpath ? `/${importResource.importPath}` : '';\n        let pkgJson = await this.resolvePackageJson(\n            importResource.packageName,\n            this.versions?.[importResource.packageName],\n            doesPkgJsonHasSubpath ? importResource.importPath : undefined\n        );\n\n        if (!pkgJson && doesPkgJsonHasSubpath) {\n            pkgJson = await this.resolvePackageJson(importResource.packageName, this.versions?.[importResource.packageName]);\n            pkgJsonSubpath = '';\n        }\n\n        if (!pkgJson) return invokeUpdate(failedProgressUpdate, this.options);\n\n        const pkg = JSON.parse(pkgJson);\n\n        console.log(\"package meta\", pkg);\n\n        if (pkg.typings || pkg.types) {\n            const typings = pkg.typings || pkg.types;\n            this.createModel(\n                pkgJson,\n                this.monaco.Uri.parse(\n                    `${this.options.fileRootPath}node_modules/${importResource.packageName}${pkgJsonSubpath}/package.json`\n                )\n            );\n\n            invokeUpdate(\n                {\n                    type: 'LookedUpPackage',\n                    package: importResource.packageName,\n                    definitelyTyped: false,\n                    success: true,\n                },\n                this.options\n            );\n            this.setVersion(importResource.packageName, pkg.version);\n\n            return {\n                kind: 'relative-in-package',\n                packageName: importResource.packageName,\n                sourcePath: '',\n                importPath: path.join(importResource.importPath ?? '', typings.startsWith('./') ? typings.slice(2) : typings),\n            };\n        }\n        else {\n\n            const typingPackageName = `@types/${\n                importResource.packageName.startsWith('@')\n                    ? importResource.packageName.slice(1).replace(/\\//, '__')\n                    : importResource.packageName\n            }`;\n\n            const pkgJsonTypings = await this.resolvePackageJson(typingPackageName, this.versions?.[typingPackageName]);\n\n            if (!pkgJsonTypings)\n                return invokeUpdate(failedProgressUpdate, this.options);\n\n            const pkg = JSON.parse(pkgJsonTypings);\n\n            if (!pkg.typings && !pkg.types) {\n                const files: {\n                    fileCount: number,\n                    files: {\n                        [key: string]: {\n                            size: number,\n                            hex: string,\n                            type: \"File\",\n                            isBinary: \"true\" | \"false\",\n                            path: string,\n                            contentType: string\n                        }\n                    },\n                    integrity: string,\n                    shasum: string,\n                    totalSize: number\n                } = await fetch(\"https://www.npmjs.com/package/@dt-esa/dynatrace-api-client/v/2.2.6/index\", {\n                    method: \"get\"\n                }).then(e => e.json());\n\n                const typingFiles = Object.entries(files.files).map(([key, val]) => val);\n\n                invokeUpdate(\n                    {\n                        type: 'LookedUpPackage',\n                        package: typingPackageName,\n                        definitelyTyped: true,\n                        success: true,\n                    },\n                    this.options\n                );\n\n                return {\n                    kind: 'bruteforce',\n                    packageName: typingPackageName,\n                    typingFiles,\n                } as any;\n\n                return;\n                // return invokeUpdate(failedProgressUpdate, this.options);\n            }\n\n            const typings = pkg.typings || pkg.types;\n            this.createModel(\n                pkgJsonTypings,\n                this.monaco.Uri.parse(`${this.options.fileRootPath}node_modules/${typingPackageName}/package.json`)\n            );\n\n            invokeUpdate(\n                {\n                    type: 'LookedUpPackage',\n                    package: typingPackageName,\n                    definitelyTyped: true,\n                    success: true,\n                },\n                this.options\n            );\n            this.setVersion(typingPackageName, pkg.version);\n\n            return {\n                kind: 'relative-in-package',\n                packageName: typingPackageName,\n                sourcePath: '',\n                importPath: path.join(\n                    importResource.importPath ?? '',\n                    typings.startsWith('./') ? typings.slice(2) : typings\n                ),\n            };\n        }\n    }\n\n    private async loadSourceFileContents(\n        importResource: ImportResourcePathRelativeInPackage\n    ): Promise<{ source: string; at: string } | null> {\n        const progressUpdatePath = path.join(\n            importResource.packageName,\n            importResource.sourcePath,\n            importResource.importPath\n        );\n\n        const failedProgressUpdate = {\n            type: 'LookedUpTypeFile',\n            path: progressUpdatePath,\n            definitelyTyped: false,\n            success: false,\n        } as const;\n\n        const pkgName = importResource.packageName;\n        const version = this.getVersion(importResource.packageName);\n\n        let appends = ['.d.ts', '/index.d.ts', '.ts', '.tsx', '/index.ts', '/index.tsx'];\n\n        if (appends.map(append => importResource.importPath.endsWith(append)).reduce((a, b) => a || b, false)) {\n            const source = await this.resolveSourceFile(\n                pkgName,\n                version,\n                path.join(importResource.sourcePath, importResource.importPath)\n            );\n            if (source) {\n                return { source, at: path.join(importResource.sourcePath, importResource.importPath) };\n            }\n        }\n        else {\n            for (const append of appends) {\n                const fullPath = path.join(importResource.sourcePath, importResource.importPath) + append;\n                const source = await this.resolveSourceFile(pkgName, version, fullPath);\n                invokeUpdate(\n                    {\n                        type: 'AttemptedLookUpFile',\n                        path: path.join(pkgName, fullPath),\n                        success: !!source,\n                    },\n                    this.options\n                );\n                if (source) {\n                    invokeUpdate(\n                        {\n                            type: 'LookedUpTypeFile',\n                            path: path.join(pkgName, fullPath),\n                            success: true,\n                        },\n                        this.options\n                    );\n                    return { source, at: fullPath };\n                }\n            }\n        }\n\n        const pkgJson = await this.resolvePackageJson(\n            pkgName,\n            version,\n            path.join(importResource.sourcePath, importResource.importPath)\n        );\n\n        if (pkgJson) {\n            const { types } = JSON.parse(pkgJson);\n            if (types) {\n                const fullPath = path.join(importResource.sourcePath, importResource.importPath, types);\n                const source = await this.resolveSourceFile(pkgName, version, fullPath);\n                if (source) {\n                    invokeUpdate(\n                        {\n                            type: 'LookedUpTypeFile',\n                            path: path.join(pkgName, fullPath),\n                            success: true,\n                        },\n                        this.options\n                    );\n                    return { source, at: fullPath };\n                }\n            }\n        }\n\n        invokeUpdate(failedProgressUpdate, this.options);\n        return null;\n    }\n\n    private getVersion(packageName: string) {\n        return this.versions?.[packageName];\n    }\n\n    public setVersions(versions: { [packageName: string]: string }) {\n        this.versions = versions;\n        this.options.onUpdateVersions?.(versions);\n        // TODO reload packages whose version has changed\n    }\n\n    private setVersion(packageName: string, version: string) {\n        this.setVersions({\n            ...this.versions,\n            [packageName]: version,\n        });\n    }\n\n    private createModel(source: string, uri: monaco.Uri) {\n        uri = uri.with({ path: uri.path.replace('@types/', '') });\n        if (!this.monaco.editor.getModel(uri)) {\n            this.monaco.editor.createModel(source, 'typescript', uri);\n            this.newImportsResolved = true;\n        }\n    }\n\n    private hashImportResourcePath(p: ImportResourcePath) {\n        return importResourcePathToString(p);\n    }\n\n    private async resolvePackageJson(\n        packageName: string,\n        version?: string,\n        subPath?: string\n    ): Promise<string | undefined> {\n\n        const uri = path.join(packageName + (version ? `@${version}` : ''), subPath ?? '', 'package.json');\n        let isAvailable = false;\n        let content: string | undefined = undefined;\n\n        if (this.cache.isFileAvailable) {\n            isAvailable = await this.cache.isFileAvailable(uri);\n        }\n        else {\n            content = await this.cache.getFile(uri);\n            isAvailable = content !== undefined;\n        }\n\n        if (isAvailable) {\n            return content ?? (await this.cache.getFile(uri));\n        }\n        else {\n            console.log(\"recursing resolvePackageJson\", packageName, version, subPath)\n            content = await UnpkgSourceResolver.resolvePackageJson(packageName, version, subPath);\n            if (content) {\n                this.cache.storeFile(uri, content);\n            }\n            return content;\n        }\n    }\n\n    private async resolveSourceFile(\n        packageName: string,\n        version: string | undefined,\n        filePath: string\n    ): Promise<string | undefined> {\n\n        const uri = path.join(packageName + (version ? `@${version}` : ''), filePath);\n        let isAvailable = false;\n        let content: string | undefined = undefined;\n\n        if (this.cache.isFileAvailable) {\n            isAvailable = await this.cache.isFileAvailable(uri);\n        }\n        else {\n            content = await this.cache.getFile(uri);\n            isAvailable = content !== undefined;\n        }\n\n        if (isAvailable) {\n            invokeUpdate(\n                {\n                    type: 'LoadedFromCache',\n                    importPath: uri,\n                },\n                this.options\n            );\n            return content ?? (await this.cache.getFile(uri));\n        }\n        else {\n            content = await UnpkgSourceResolver.resolveSourceFile(packageName, version, filePath);\n            if (content) {\n                invokeUpdate(\n                    {\n                        type: 'StoredToCache',\n                        importPath: uri,\n                    },\n                    this.options\n                );\n                this.cache.storeFile(uri, content);\n            }\n            return content;\n        }\n    }\n}\n","import { SourceCache } from './types';\n\nexport class DummySourceCache implements SourceCache {\n    public getFile(uri: string): Promise<string | undefined> {\n        return undefined;\n    }\n\n    public async isFileAvailable(uri: string): Promise<boolean> {\n        return false;\n    }\n\n    public storeFile(uri: string, content: string): Promise<void> {\n        return undefined;\n    }\n\n    public clear(): Promise<void> {\n        return undefined;\n    }\n}\n","import { ImportResolver } from './import-resolver';\nimport * as path from 'path-browserify';\nimport type * as monaco from 'monaco-editor';\nimport { invokeUpdate } from './update-emitter';\nimport { RecursionDepth } from './recursion-depth';\nimport { Options, SourceCache } from './types';\nimport { DummySourceCache } from './dummy-source-cache';\n\ntype Editor = monaco.editor.ICodeEditor | monaco.editor.IStandaloneCodeEditor;\n\n// https://github.com/lukasbach/monaco-editor-auto-typings\nexport class MonacoAutoTypeImporter implements monaco.IDisposable {\n    private static sharedCache?: SourceCache;\n    private importResolver: ImportResolver;\n    private debounceTimer?: number;\n    private isResolving?: boolean;\n    private disposables: monaco.IDisposable[] = [];\n\n    public constructor(private editor: Editor, private options: Options) {\n        this.importResolver = new ImportResolver(options);\n\n        const changeModelDisposable = editor.onDidChangeModelContent(e => {\n            this.debouncedResolveContents();\n        });\n        this.disposables.push(changeModelDisposable);\n        this.resolveContents();\n\n        if (!options.dontAdaptEditorOptions) {\n            options.monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n                ...options.monaco.languages.typescript.typescriptDefaults.getCompilerOptions(),\n                moduleResolution: options.monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n                allowSyntheticDefaultImports: true,\n                rootDir: options.fileRootPath,\n            });\n        }\n    }\n\n    public static async create(editor: Editor, options?: Partial<Options>): Promise<MonacoAutoTypeImporter> {\n        if (options?.shareCache && options.sourceCache && !MonacoAutoTypeImporter.sharedCache) {\n            MonacoAutoTypeImporter.sharedCache = options.sourceCache;\n        }\n\n        const monacoInstance = options?.monaco ?? window['monaco'];\n\n        if (!monacoInstance) {\n            throw new Error('monacoInstance not found, you can specify the monaco instance via options.monaco');\n        }\n\n        return new MonacoAutoTypeImporter(editor, {\n            fileRootPath: 'inmemory://model/',\n            onlySpecifiedPackages: false,\n            preloadPackages: false,\n            shareCache: false,\n            dontAdaptEditorOptions: false,\n            dontRefreshModelValueAfterResolvement: false,\n            sourceCache: MonacoAutoTypeImporter.sharedCache ?? new DummySourceCache(),\n            debounceDuration: 4000,\n            fileRecursionDepth: 10,\n            packageRecursionDepth: 3,\n            ...options,\n            monaco: monacoInstance,\n        });\n    }\n\n    public dispose() {\n        this.disposables.forEach(d => d.dispose())\n    }\n\n    public setVersions(versions: { [packageName: string]: string }) {\n        this.importResolver.setVersions(versions);\n        this.options.versions = versions;\n    }\n\n    public async clearCache() {\n        await this.options.sourceCache.clear();\n    }\n\n    private debouncedResolveContents() {\n        if (this.isResolving) {\n            return;\n        }\n\n        invokeUpdate({ type: 'CodeChanged' }, this.options);\n\n        if (this.options.debounceDuration <= 0) {\n            this.resolveContents();\n        }\n        else {\n            if (this.debounceTimer !== undefined) {\n                clearTimeout(this.debounceTimer);\n            }\n            this.debounceTimer = setTimeout(async () => {\n                await this.resolveContents();\n                this.debounceTimer = undefined;\n            }, this.options.debounceDuration) as any;\n        }\n    }\n\n    private async resolveContents() {\n        this.isResolving = true;\n        invokeUpdate({ type: 'ResolveNewImports' }, this.options);\n\n        const model = this.editor.getModel();\n        // This can happen when the editor is disposed before all typings\n        // are installed.\n        if (!model) {\n            throw Error('No model');\n        }\n\n        const content = model.getLinesContent();\n\n        try {\n            await this.importResolver.resolveImportsInFile(\n                content.join('\\n'),\n                path.dirname(model.uri.toString()),\n                new RecursionDepth(this.options)\n            );\n        }\n        catch (e) {\n            if (this.options.onError) {\n                this.options.onError((e as Error).message ?? e);\n            }\n            else {\n                throw e;\n            }\n        }\n\n        if (this.importResolver.wereNewImportsResolved()) {\n            if (!this.options.dontRefreshModelValueAfterResolvement) {\n                const currentPosition = this.editor.getPosition();\n                model.setValue(model.getValue());\n                if (currentPosition) {\n                    this.editor.setPosition(currentPosition);\n                }\n            }\n            this.importResolver.resetNewImportsResolved();\n        }\n\n        this.isResolving = false;\n    }\n}\n","import { AfterViewInit, Component, EventEmitter, HostListener, Input, OnDestroy, Output, SimpleChanges, ViewContainerRef } from '@angular/core';\r\n\r\nimport * as MonacoEditor from 'monaco-editor';\r\nimport { debounceTime } from 'rxjs';\r\nimport { MonacoAutoTypeImporter } from './ts-type-resolver/main';\r\n\r\nlet Monaco: typeof MonacoEditor;\r\n\r\n@Component({\r\n    selector: 'ngx-monaco-editor',\r\n    template: '',\r\n    styles: [`\r\n:host {\r\n    display: block;\r\n    height: 100%;\r\n    max-height: 100vh;\r\n    max-width: 100vw;\r\n}\r\n    `],\r\n    standalone: true\r\n})\r\nexport class MonacoEditorComponent implements AfterViewInit, OnDestroy {\r\n    isDirty = false;\r\n    editor: MonacoEditor.editor.IStandaloneCodeEditor;\r\n    filename: string;\r\n\r\n    private _code: string;\r\n    @Input() set code(value: string) {\r\n        if (value == this._code)\r\n            return;\r\n        if (typeof value != \"string\")\r\n            throw new TypeError(\"Value must be of type string\");\r\n\r\n        this._code = value;\r\n        this.editor?.setValue(this.code);\r\n    };\r\n    get code() { return this._code?.trim(); }\r\n    @Output() codeChange = new EventEmitter<string>();\r\n    private onCodeType = new EventEmitter<string>();\r\n    private typeDebounce = this.onCodeType.pipe(debounceTime(100));\r\n\r\n    @Input() customLanguage: { init: Function; };\r\n\r\n\r\n    private _language: string;\r\n    @Input() set language(value: string) {\r\n        this._language = {\r\n            'ts': \"typescript\",\r\n            'html': 'xml',\r\n            'scss': 'css'\r\n        }[value] || value || \"auto\";\r\n    }\r\n    get language() { return this._language; }\r\n\r\n    @Input() installationLocation = \"/lib/monaco/vs\";\r\n\r\n\r\n    @Input() tabSize = 2;\r\n    @Input() readOnly = false;\r\n    @Input() theme = \"vs-dark\";\r\n    @Input() fontFamily = \"Droid Sans Mono\";\r\n    @Input() fontSize = 14;\r\n\r\n    @Input() automaticLayout = true;\r\n    @Input() colorDecorators = true;\r\n    @Input() folding = true;\r\n\r\n    @Input() minimapEnabled = true;\r\n    @Input() minimap: MonacoEditor.editor.IEditorMinimapOptions = {\r\n        enabled: true\r\n    };\r\n    @Input() scrollbar: MonacoEditor.editor.IEditorScrollbarOptions = {\r\n        alwaysConsumeMouseWheel: false,\r\n        // scrollByPage: true\r\n    };\r\n    @Input() smoothScrolling = true;\r\n    @Input() mouseWheelScrollSensitivity = 2;\r\n    @Input() scrollBeyondLastLine = false;\r\n    @Input() scrollBeyondLastColumn = 0;\r\n\r\n    @Input() lineNumbers: MonacoEditor.editor.LineNumbersType = \"on\";\r\n\r\n    @Input() restSettings: MonacoEditor.editor.IStandaloneEditorConstructionOptions = {};\r\n\r\n    get settings() {\r\n        return {\r\n            ...this.restSettings,\r\n            theme: this.theme,\r\n            language: this.language,\r\n            tabSize: this.tabSize,\r\n            readOnly: this.readOnly,\r\n            fontFamily: this.fontFamily,\r\n            fontSize: this.fontSize,\r\n            automaticLayout: this.automaticLayout,\r\n            scrollBeyondLastLine: this.scrollBeyondLastLine,\r\n            colorDecorators: this.colorDecorators,\r\n            folding: this.folding,\r\n            scrollBeyondLastColumn: this.scrollBeyondLastColumn,\r\n            minimap: this.minimap,\r\n            scrollbar: this.scrollbar,\r\n            smoothScrolling: this.smoothScrolling,\r\n            mouseWheelScrollSensitivity: this.mouseWheelScrollSensitivity,\r\n            lineNumbers: this.lineNumbers\r\n        } as MonacoEditor.editor.IStandaloneEditorConstructionOptions;\r\n    }\r\n\r\n    private _sub;\r\n    constructor(private viewContainer: ViewContainerRef) {\r\n\r\n        this._sub = this.typeDebounce.subscribe(t => {\r\n            this.codeChange.next(this._code = this.editor.getValue());\r\n        });\r\n    }\r\n\r\n    ngOnInit() {\r\n        InstallMonacoUMD(this.installationLocation);\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges) {\r\n        // If we changed anything OTHER than code, reload the editor\r\n        if (Object.keys(changes).length > 1 || !changes['code']) {\r\n            if (this.editor) {\r\n                this.editor?.dispose();\r\n                this.createEditor();\r\n            }\r\n        }\r\n        if (changes['theme'])\r\n            window['monaco']?.editor.setTheme(this.theme);\r\n    }\r\n\r\n    async ngAfterViewInit() {\r\n        await InstallMonacoUMD();\r\n\r\n        this.createEditor();\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this.editor?.dispose();\r\n        this._sub?.unsubscribe();\r\n    }\r\n\r\n    private createEditor() {\r\n        if (this.customLanguage) {\r\n            this.customLanguage.init(window['monaco']);\r\n        }\r\n\r\n        let editor = this.editor = window['monaco'].editor.create(\r\n            this.viewContainer?.element?.nativeElement,\r\n            this.settings as any\r\n        );\r\n\r\n        // const autoTypings = await\r\n        MonacoAutoTypeImporter.create(editor, {\r\n            monaco: Monaco,\r\n        });\r\n\r\n        this.configureLanguageSupport();\r\n\r\n        if (this.code) {\r\n            editor.setValue(this.code);\r\n        }\r\n\r\n        editor.getModel().onDidChangeContent(() => this.onCodeType.emit());\r\n    }\r\n\r\n    private configureLanguageSupport() {\r\n\r\n    }\r\n\r\n    download() {\r\n        const code = this.editor.getValue();\r\n\r\n        let blob = new Blob([code], { type: 'text/log' });\r\n        let elm = document.createElement('a');\r\n        let blobURL = URL.createObjectURL(blob);\r\n\r\n        // Set the data values.\r\n        elm.href = blobURL;\r\n        elm.download = this.filename;\r\n\r\n        document.body.appendChild(elm);\r\n        elm.click();\r\n\r\n        document.body.removeChild(elm);\r\n        elm.remove();\r\n\r\n        URL.revokeObjectURL(blobURL);\r\n    }\r\n\r\n    @HostListener('window:resize', ['$event'])\r\n    resize = (): void => {\r\n        this.editor?.layout();\r\n    };\r\n}\r\n\r\nexport const InstallMonacoUMD = async (path?: string) => {\r\n    if (window['monaco']) return window['monaco'];\r\n\r\n    // Prevent duplicate injection\r\n    const scriptEls = document.querySelectorAll('body>script[monaco][defer][src]');\r\n\r\n    // Only perform installation if a path is specified.\r\n    if (path && scriptEls.length == 0) {\r\n        // Monaco has a UMD loader that requires this\r\n        // Merge with any pre-existing global require objects.\r\n        if (!window['require']) window['require'] = {} as any;\r\n        if (!window['require']['paths']) window['require']['paths'] = {};\r\n\r\n        if (path.endsWith('/'))\r\n            path = path.slice(0, -1);\r\n\r\n        window['require']['paths'].vs = path;\r\n\r\n        const monacoFiles = [\r\n            'loader.js',\r\n            'editor/editor.main.nls.js',\r\n            'editor/editor.main.js',\r\n        ];\r\n\r\n        for (let i = 0; i < monacoFiles.length; i++) {\r\n            const script = document.createElement(\"script\");\r\n            script.setAttribute(\"monaco\", \"\");\r\n            script.setAttribute(\"defer\", \"\");\r\n            script.setAttribute(\"src\", path + '/' + monacoFiles[i]);\r\n            document.body.append(script);\r\n        }\r\n    }\r\n\r\n    // Return a promise that will resolve when monaco finishes loading\r\n    return await new Promise((res, rej) => {\r\n        let count = 0;\r\n        let i = window.setInterval(() => {\r\n            count++;\r\n\r\n            if (window['monaco'] != undefined) {\r\n                window.clearInterval(i);\r\n                res(true);\r\n            }\r\n            else if (count >= 100) {\r\n                window.clearInterval(i);\r\n                res(false);\r\n            }\r\n        }, 100);\r\n    });\r\n};\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}