added xterm to public
This commit is contained in:
49
public/xterm/src/common/services/ServiceRegistry.ts
Normal file
49
public/xterm/src/common/services/ServiceRegistry.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
/**
|
||||
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
|
||||
* @license MIT
|
||||
*
|
||||
* This was heavily inspired from microsoft/vscode's dependency injection system (MIT).
|
||||
*/
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IServiceIdentifier } from 'common/services/Services';
|
||||
|
||||
const DI_TARGET = 'di$target';
|
||||
const DI_DEPENDENCIES = 'di$dependencies';
|
||||
|
||||
export const serviceRegistry: Map<string, IServiceIdentifier<any>> = new Map();
|
||||
|
||||
export function getServiceDependencies(ctor: any): { id: IServiceIdentifier<any>, index: number, optional: boolean }[] {
|
||||
return ctor[DI_DEPENDENCIES] || [];
|
||||
}
|
||||
|
||||
export function createDecorator<T>(id: string): IServiceIdentifier<T> {
|
||||
if (serviceRegistry.has(id)) {
|
||||
return serviceRegistry.get(id)!;
|
||||
}
|
||||
|
||||
const decorator: any = function (target: Function, key: string, index: number): any {
|
||||
if (arguments.length !== 3) {
|
||||
throw new Error('@IServiceName-decorator can only be used to decorate a parameter');
|
||||
}
|
||||
|
||||
storeServiceDependency(decorator, target, index);
|
||||
};
|
||||
|
||||
decorator.toString = () => id;
|
||||
|
||||
serviceRegistry.set(id, decorator);
|
||||
return decorator;
|
||||
}
|
||||
|
||||
function storeServiceDependency(id: Function, target: Function, index: number): void {
|
||||
if ((target as any)[DI_TARGET] === target) {
|
||||
(target as any)[DI_DEPENDENCIES].push({ id, index });
|
||||
} else {
|
||||
(target as any)[DI_DEPENDENCIES] = [{ id, index }];
|
||||
(target as any)[DI_TARGET] = target;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user