UNPKG

monaco-editor

Version:
54 lines (53 loc) 2.13 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 var IInstantiationService = createDecorator('instantiationService'); function storeServiceDependency(id, target, index, optional) { if (target[_util.DI_TARGET] === target) { target[_util.DI_DEPENDENCIES].push({ id: id, index: index, optional: optional }); } else { target[_util.DI_DEPENDENCIES] = [{ id: id, index: index, optional: optional }]; target[_util.DI_TARGET] = target; } } /** * A *only* valid way to create a {{ServiceIdentifier}}. */ export function createDecorator(serviceId) { if (_util.serviceIds.has(serviceId)) { return _util.serviceIds.get(serviceId); } var 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, false); }; id.toString = function () { return serviceId; }; _util.serviceIds.set(serviceId, id); return id; } /** * Mark a service dependency as optional. */ export function optional(serviceIdentifier) { return function (target, key, index) { if (arguments.length !== 3) { throw new Error('@optional-decorator can only be used to decorate a parameter'); } storeServiceDependency(serviceIdentifier, target, index, true); }; }