UNPKG

monaco-editor-core

Version:

A browser based code editor

43 lines (42 loc) 1.63 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // ------ internal util export var _util; (function (_util) { _util.serviceIds = new Map(); _util.DI_TARGET = '$di$target'; _util.DI_DEPENDENCIES = '$di$dependencies'; function getServiceDependencies(ctor) { return ctor[_util.DI_DEPENDENCIES] || []; } _util.getServiceDependencies = getServiceDependencies; })(_util || (_util = {})); export const IInstantiationService = createDecorator('instantiationService'); function storeServiceDependency(id, target, index) { if (target[_util.DI_TARGET] === target) { target[_util.DI_DEPENDENCIES].push({ id, index }); } else { target[_util.DI_DEPENDENCIES] = [{ id, index }]; target[_util.DI_TARGET] = target; } } /** * The *only* valid way to create a {{ServiceIdentifier}}. */ export function createDecorator(serviceId) { if (_util.serviceIds.has(serviceId)) { return _util.serviceIds.get(serviceId); } const id = function (target, key, index) { if (arguments.length !== 3) { throw new Error('@IServiceName-decorator can only be used to decorate a parameter'); } storeServiceDependency(id, target, index); }; id.toString = () => serviceId; _util.serviceIds.set(serviceId, id); return id; }