{"version":3,"sources":["browser/monaco-text-model-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;;AAGlF,OAAO,GAAG,MAAM,6BAA6B,CAAC;AAC9C,OAAO,EACH,oBAAoB,EACpB,KAAK,EACL,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,gBAAgB,EACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAC,sBAAsB,EAAE,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAC,QAAQ,EAAC,MAAM,sCAAsC,CAAC;AAC9D,OAAO,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;AAE7C,OAAO,EAAC,UAAU,EAAC,CAAC;AAEpB,eAAO,MAAM,wBAAwB,eAAqC,CAAC;AAE3E,MAAM,WAAW,wBAAwB;IAErC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,WAAW,CACP,QAAQ,EAAE,QAAQ,GACnB,YAAY,CAAC,iBAAiB,CAAC,CAAC;CAEtC;AAED,qBACa,sBAAuB,YAAW,MAAM,CAAC,MAAM,CAAC,iBAAiB;IAE1E,SAAS,CAAC,QAAQ,CAAC,MAAM,iBAAwB;IACjD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAuB;IAEpD,SAAS,CAAC,QAAQ,CAAC,OAAO,iDAExB;IAGF,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAGtD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAGxD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,yBAAyB,CAAC;IAGlD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,yBAAyB,CAAC;IAIlD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC,wBAAwB,CAAC,CAAC;IAC7E,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,uBAAuB,GAAG,SAAS,CAAC,CAAA;KAAE,CAG5G;IAEF,IAAI,MAAM,IAAI,iBAAiB,EAAE,CAEhC;IAED,IAAI,WAAW,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAE1C;IAGM,IAAI,IAAI,IAAI;IA0BnB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI/C,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAInF,gCAAgC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,yBAAyB,GAAG,MAAM,CAAC,WAAW;cAQvG,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAY/D,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC,iBAAiB,CAAC;IAK1E,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,sBAAsB,GAAG,IAAI;IAyBtF,kDAAkD;IAClD,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,uBAAuB;IAE7E,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,uBAAuB;CAa7F","file":"../../src/browser/monaco-text-model-service.d.ts","sourcesContent":["/********************************************************************************\r\n * Copyright (C) 2018 TypeFox and others.\r\n *\r\n * This program and the accompanying materials are made available under the\r\n * terms of the Eclipse Public License v. 2.0 which is available at\r\n * http://www.eclipse.org/legal/epl-2.0.\r\n *\r\n * This Source Code may also be made available under the following Secondary\r\n * Licenses when the conditions for such availability set forth in the Eclipse\r\n * Public License v. 2.0 are satisfied: GNU General Public License, version 2\r\n * with the GNU Classpath Exception which is available at\r\n * https://www.gnu.org/software/classpath/license.html.\r\n *\r\n * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0\r\n ********************************************************************************/\r\n\r\nimport {inject, injectable, named, postConstruct} from 'inversify';\r\nimport URI from '@tartjs/core/lib/common/uri';\r\nimport {\r\n    ContributionProvider,\r\n    Event,\r\n    MaybePromise,\r\n    ReferenceCollection,\r\n    Resource,\r\n    ResourceProvider,\r\n} from '@tartjs/core/lib/common';\r\nimport {EditorPreferenceChange, EditorPreferences} from '@tartjs/editor';\r\nimport {MonacoEditorModel} from './monaco-editor-model';\r\nimport {MonacoToProtocolConverter} from './monaco-to-protocol-converter';\r\nimport {ProtocolToMonacoConverter} from './protocol-to-monaco-converter';\r\n// import { ApplicationServer } from '@wm/core/lib/common/application-protocol';\r\nimport {Deferred} from '@tartjs/core/lib/common/promise-util';\r\nimport IReference = monaco.editor.IReference;\r\n\r\nexport {IReference};\r\n\r\nexport const MonacoEditorModelFactory = Symbol('MonacoEditorModelFactory');\r\n\r\nexport interface MonacoEditorModelFactory {\r\n\r\n    readonly scheme: string;\r\n\r\n    createModel(\r\n        resource: Resource\r\n    ): MaybePromise<MonacoEditorModel>;\r\n\r\n}\r\n\r\n@injectable()\r\nexport class MonacoTextModelService implements monaco.editor.ITextModelService {\r\n\r\n    protected readonly _ready = new Deferred<void>();\r\n    /**\r\n     * This component does some asynchronous work before being fully initialized.\r\n     */\r\n    readonly ready: Promise<void> = this._ready.promise;\r\n\r\n    protected readonly _models = new ReferenceCollection<string, MonacoEditorModel>(\r\n        uri => this.loadModel(new URI(uri))\r\n    );\r\n\r\n    @inject(ResourceProvider)\r\n    protected readonly resourceProvider: ResourceProvider;\r\n\r\n    @inject(EditorPreferences)\r\n    protected readonly editorPreferences: EditorPreferences;\r\n\r\n    @inject(MonacoToProtocolConverter)\r\n    protected readonly m2p: MonacoToProtocolConverter;\r\n\r\n    @inject(ProtocolToMonacoConverter)\r\n    protected readonly p2m: ProtocolToMonacoConverter;\r\n\r\n    @inject(ContributionProvider)\r\n    @named(MonacoEditorModelFactory)\r\n    protected readonly factories: ContributionProvider<MonacoEditorModelFactory>;\r\n    protected readonly modelOptions: { [name: string]: (keyof monaco.editor.ITextModelUpdateOptions | undefined) } = {\r\n        'editor.tabSize': 'tabSize',\r\n        'editor.insertSpaces': 'insertSpaces'\r\n    };\r\n\r\n    get models(): MonacoEditorModel[] {\r\n        return this._models.values();\r\n    }\r\n\r\n    get onDidCreate(): Event<MonacoEditorModel> {\r\n        return this._models.onDidCreate;\r\n    }\r\n\r\n    @postConstruct()\r\n    public init(): void {\r\n        let isWindowsBackend = false;\r\n\r\n        // this.applicationServer.getBackendOS().then(os => {\r\n        //     isWindowsBackend = os === OS.Type.Windows;\r\n        // }, () => undefined).then(() => this._ready.resolve());\r\n\r\n        this._ready.resolve();\r\n\r\n        const staticServices = monaco.services.StaticServices;\r\n\r\n        if (staticServices.resourcePropertiesService) {\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            const original = staticServices.resourcePropertiesService.get() as any;\r\n            original.getEOL = () => {\r\n                const eol = this.editorPreferences['files.eol'];\r\n                if (eol) {\r\n                    if (eol !== 'auto') {\r\n                        return eol;\r\n                    }\r\n                }\r\n                return isWindowsBackend ? '\\r\\n' : '\\n';\r\n            };\r\n        }\r\n    }\r\n\r\n    get(uri: string): MonacoEditorModel | undefined {\r\n        return this._models.get(uri);\r\n    }\r\n\r\n    createModelReference(raw: monaco.Uri | URI): Promise<IReference<MonacoEditorModel>> {\r\n        return this._models.acquire(raw.toString());\r\n    }\r\n\r\n    registerTextModelContentProvider(scheme: string, provider: monaco.editor.ITextModelContentProvider): monaco.IDisposable {\r\n        return {\r\n            dispose(): void {\r\n                // no-op\r\n            }\r\n        };\r\n    }\r\n\r\n    protected async loadModel(uri: URI): Promise<MonacoEditorModel> {\r\n        await this.ready;\r\n        await this.editorPreferences.ready;\r\n        const resource = await this.resourceProvider(uri);\r\n        const model = await (await this.createModel(resource)).load();\r\n        this.updateModel(model);\r\n        model.textEditorModel.onDidChangeLanguage(() => this.updateModel(model));\r\n        const disposable = this.editorPreferences.onPreferenceChanged(change => this.updateModel(model, change));\r\n        model.onDispose(() => disposable.dispose());\r\n        return model;\r\n    }\r\n\r\n    protected createModel(resource: Resource): MaybePromise<MonacoEditorModel> {\r\n        const factory = this.factories.getContributions().find(({scheme}) => resource.uri.scheme === scheme);\r\n        return factory ? factory.createModel(resource) : new MonacoEditorModel(resource, this.m2p, this.p2m, this.editorPreferences);\r\n    }\r\n\r\n    protected updateModel(model: MonacoEditorModel, change?: EditorPreferenceChange): void {\r\n        if (change) {\r\n            if (!change.affects(model.uri, model.languageId)) {\r\n                return;\r\n            }\r\n            if (change.preferenceName === 'editor.autoSave') {\r\n                model.autoSave = this.editorPreferences.get('editor.autoSave', undefined, model.uri);\r\n            }\r\n            if (change.preferenceName === 'editor.autoSaveDelay') {\r\n                model.autoSaveDelay = this.editorPreferences.get('editor.autoSaveDelay', undefined, model.uri);\r\n            }\r\n            const modelOption = this.modelOptions[change.preferenceName];\r\n            if (modelOption) {\r\n                const options: monaco.editor.ITextModelUpdateOptions = {};\r\n                // @ts-ignore\r\n                options[modelOption] = change.newValue as any;\r\n                model.textEditorModel.updateOptions(options);\r\n            }\r\n        } else {\r\n            model.autoSave = this.editorPreferences.get('editor.autoSave', undefined, model.uri);\r\n            model.autoSaveDelay = this.editorPreferences.get('editor.autoSaveDelay', undefined, model.uri);\r\n            model.textEditorModel.updateOptions(this.getModelOptions(model));\r\n        }\r\n    }\r\n\r\n    /** @deprecated pass MonacoEditorModel instead  */\r\n    protected getModelOptions(uri: string): monaco.editor.ITextModelUpdateOptions;\r\n\r\n    protected getModelOptions(model: MonacoEditorModel): monaco.editor.ITextModelUpdateOptions;\r\n\r\n    protected getModelOptions(arg: string | MonacoEditorModel): monaco.editor.ITextModelUpdateOptions {\r\n        const uri = typeof arg === 'string' ? arg : arg.uri;\r\n        const overrideIdentifier = typeof arg === 'string' ? undefined : arg.languageId;\r\n        return {\r\n            tabSize: this.editorPreferences.get({preferenceName: 'editor.tabSize', overrideIdentifier}, undefined, uri),\r\n            insertSpaces: this.editorPreferences.get({\r\n                preferenceName: 'editor.insertSpaces',\r\n                overrideIdentifier\r\n            }, undefined, uri)\r\n        };\r\n    }\r\n}\r\n"]}