UNPKG

monaco-editor-core

Version:

A browser based code editor

48 lines (47 loc) 1.53 kB
/** * **!Do not construct directly!** * * **!Only static methods because it gets serialized!** * * This represents the "canonical" version for an extension identifier. Extension ids * have to be case-insensitive (due to the marketplace), but we must ensure case * preservation because the extension API is already public at this time. * * For example, given an extension with the publisher `"Hello"` and the name `"World"`, * its canonical extension identifier is `"Hello.World"`. This extension could be * referenced in some other extension's dependencies using the string `"hello.world"`. * * To make matters more complicated, an extension can optionally have an UUID. When two * extensions have the same UUID, they are considered equal even if their identifier is different. */ export class ExtensionIdentifier { constructor(value) { this.value = value; this._lower = value.toLowerCase(); } /** * Gives the value by which to index (for equality). */ static toKey(id) { if (typeof id === 'string') { return id.toLowerCase(); } return id._lower; } } export class ExtensionIdentifierSet { constructor(iterable) { this._set = new Set(); if (iterable) { for (const value of iterable) { this.add(value); } } } add(id) { this._set.add(ExtensionIdentifier.toKey(id)); } has(id) { return this._set.has(ExtensionIdentifier.toKey(id)); } }