Files
azuredatastudio/src/vs/platform/jsonschemas/common/jsonContributionRegistry.ts
2018-06-05 11:24:51 -07:00

83 lines
2.2 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import { IJSONSchema } from 'vs/base/common/jsonSchema';
import * as platform from 'vs/platform/registry/common/platform';
import { Event, Emitter } from 'vs/base/common/event';
export const Extensions = {
JSONContribution: 'base.contributions.json'
};
export interface ISchemaContributions {
schemas?: { [id: string]: IJSONSchema };
}
export interface IJSONContributionRegistry {
readonly onDidChangeSchema: Event<string>;
/**
* Register a schema to the registry.
*/
registerSchema(uri: string, unresolvedSchemaContent: IJSONSchema): void;
/**
* Notifies all listeneres that the content of the given schema has changed.
* @param uri The id of the schema
*/
notifySchemaChanged(uri: string): void;
/**
* Get all schemas
*/
getSchemaContributions(): ISchemaContributions;
}
export interface IJSONContributionRegistryEvent {
}
function normalizeId(id: string) {
if (id.length > 0 && id.charAt(id.length - 1) === '#') {
return id.substring(0, id.length - 1);
}
return id;
}
class JSONContributionRegistry implements IJSONContributionRegistry {
private schemasById: { [id: string]: IJSONSchema };
private readonly _onDidChangeSchema: Emitter<string> = new Emitter<string>();
readonly onDidChangeSchema: Event<string> = this._onDidChangeSchema.event;
constructor() {
this.schemasById = {};
}
public registerSchema(uri: string, unresolvedSchemaContent: IJSONSchema): void {
this.schemasById[normalizeId(uri)] = unresolvedSchemaContent;
this._onDidChangeSchema.fire(uri);
}
public notifySchemaChanged(uri: string): void {
this._onDidChangeSchema.fire(uri);
}
public getSchemaContributions(): ISchemaContributions {
return {
schemas: this.schemasById,
};
}
}
const jsonContributionRegistry = new JSONContributionRegistry();
platform.Registry.add(Extensions.JSONContribution, jsonContributionRegistry);