mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-23 09:35:39 -05:00
* Fix initial build breaks from 1.67 merge (#2514) * Update yarn lock files * Update build scripts * Fix tsconfig * Build breaks * WIP * Update yarn lock files * Misc breaks * Updates to package.json * Breaks * Update yarn * Fix breaks * Breaks * Build breaks * Breaks * Breaks * Breaks * Breaks * Breaks * Missing file * Breaks * Breaks * Breaks * Breaks * Breaks * Fix several runtime breaks (#2515) * Missing files * Runtime breaks * Fix proxy ordering issue * Remove commented code * Fix breaks with opening query editor * Fix post merge break * Updates related to setup build and other breaks (#2516) * Fix bundle build issues * Update distro * Fix distro merge and update build JS files * Disable pipeline steps * Remove stats call * Update license name * Make new RPM dependencies a warning * Fix extension manager version checks * Update JS file * Fix a few runtime breaks * Fixes * Fix runtime issues * Fix build breaks * Update notebook tests (part 1) * Fix broken tests * Linting errors * Fix hygiene * Disable lint rules * Bump distro * Turn off smoke tests * Disable integration tests * Remove failing "activate" test * Remove failed test assertion * Disable other broken test * Disable query history tests * Disable extension unit tests * Disable failing tasks
163 lines
5.5 KiB
TypeScript
163 lines
5.5 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import * as vscode from 'vscode';
|
|
import * as arrays from './util/arrays';
|
|
import { Disposable } from './util/dispose';
|
|
|
|
function resolveExtensionResource(extension: vscode.Extension<any>, resourcePath: string): vscode.Uri {
|
|
return vscode.Uri.joinPath(extension.extensionUri, resourcePath);
|
|
}
|
|
|
|
function* resolveExtensionResources(extension: vscode.Extension<any>, resourcePaths: unknown): Iterable<vscode.Uri> {
|
|
if (Array.isArray(resourcePaths)) {
|
|
for (const resource of resourcePaths) {
|
|
try {
|
|
yield resolveExtensionResource(extension, resource);
|
|
} catch {
|
|
// noop
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
export interface MarkdownContributions {
|
|
readonly previewScripts: readonly vscode.Uri[];
|
|
readonly previewStyles: readonly vscode.Uri[];
|
|
readonly previewResourceRoots: readonly vscode.Uri[];
|
|
readonly markdownItPlugins: ReadonlyMap<string, Thenable<(md: any) => any>>;
|
|
}
|
|
|
|
export namespace MarkdownContributions {
|
|
export const Empty: MarkdownContributions = {
|
|
previewScripts: [],
|
|
previewStyles: [],
|
|
previewResourceRoots: [],
|
|
markdownItPlugins: new Map()
|
|
};
|
|
|
|
export function merge(a: MarkdownContributions, b: MarkdownContributions): MarkdownContributions {
|
|
return {
|
|
previewScripts: [...a.previewScripts, ...b.previewScripts],
|
|
previewStyles: [...a.previewStyles, ...b.previewStyles],
|
|
previewResourceRoots: [...a.previewResourceRoots, ...b.previewResourceRoots],
|
|
markdownItPlugins: new Map([...a.markdownItPlugins.entries(), ...b.markdownItPlugins.entries()]),
|
|
};
|
|
}
|
|
|
|
function uriEqual(a: vscode.Uri, b: vscode.Uri): boolean {
|
|
return a.toString() === b.toString();
|
|
}
|
|
|
|
export function equal(a: MarkdownContributions, b: MarkdownContributions): boolean {
|
|
return arrays.equals(a.previewScripts, b.previewScripts, uriEqual)
|
|
&& arrays.equals(a.previewStyles, b.previewStyles, uriEqual)
|
|
&& arrays.equals(a.previewResourceRoots, b.previewResourceRoots, uriEqual)
|
|
&& arrays.equals(Array.from(a.markdownItPlugins.keys()), Array.from(b.markdownItPlugins.keys()));
|
|
}
|
|
|
|
export function fromExtension(extension: vscode.Extension<any>): MarkdownContributions {
|
|
const contributions = extension.packageJSON?.contributes;
|
|
if (!contributions) {
|
|
return MarkdownContributions.Empty;
|
|
}
|
|
|
|
const previewStyles = Array.from(getContributedStyles(contributions, extension));
|
|
const previewScripts = Array.from(getContributedScripts(contributions, extension));
|
|
const previewResourceRoots = previewStyles.length || previewScripts.length ? [extension.extensionUri] : [];
|
|
const markdownItPlugins = getContributedMarkdownItPlugins(contributions, extension);
|
|
|
|
return {
|
|
previewScripts,
|
|
previewStyles,
|
|
previewResourceRoots,
|
|
markdownItPlugins
|
|
};
|
|
}
|
|
|
|
function getContributedMarkdownItPlugins(
|
|
contributes: any,
|
|
extension: vscode.Extension<any>
|
|
): Map<string, Thenable<(md: any) => any>> {
|
|
const map = new Map<string, Thenable<(md: any) => any>>();
|
|
if (contributes['markdown.markdownItPlugins']) {
|
|
map.set(extension.id, extension.activate().then(() => {
|
|
if (extension.exports && extension.exports.extendMarkdownIt) {
|
|
return (md: any) => extension.exports.extendMarkdownIt(md);
|
|
}
|
|
return (md: any) => md;
|
|
}));
|
|
}
|
|
return map;
|
|
}
|
|
|
|
function getContributedScripts(
|
|
contributes: any,
|
|
extension: vscode.Extension<any>
|
|
) {
|
|
return resolveExtensionResources(extension, contributes['markdown.previewScripts']);
|
|
}
|
|
|
|
function getContributedStyles(
|
|
contributes: any,
|
|
extension: vscode.Extension<any>
|
|
) {
|
|
return resolveExtensionResources(extension, contributes['markdown.previewStyles']);
|
|
}
|
|
}
|
|
|
|
export interface MarkdownContributionProvider {
|
|
readonly extensionUri: vscode.Uri;
|
|
|
|
readonly contributions: MarkdownContributions;
|
|
readonly onContributionsChanged: vscode.Event<this>;
|
|
|
|
dispose(): void;
|
|
}
|
|
|
|
class VSCodeExtensionMarkdownContributionProvider extends Disposable implements MarkdownContributionProvider {
|
|
|
|
private _contributions?: MarkdownContributions;
|
|
|
|
public constructor(
|
|
private readonly _extensionContext: vscode.ExtensionContext,
|
|
) {
|
|
super();
|
|
|
|
this._register(vscode.extensions.onDidChange(() => {
|
|
const currentContributions = this.getCurrentContributions();
|
|
const existingContributions = this._contributions || MarkdownContributions.Empty;
|
|
if (!MarkdownContributions.equal(existingContributions, currentContributions)) {
|
|
this._contributions = currentContributions;
|
|
this._onContributionsChanged.fire(this);
|
|
}
|
|
}));
|
|
}
|
|
|
|
public get extensionUri() {
|
|
return this._extensionContext.extensionUri;
|
|
}
|
|
|
|
private readonly _onContributionsChanged = this._register(new vscode.EventEmitter<this>());
|
|
public readonly onContributionsChanged = this._onContributionsChanged.event;
|
|
|
|
public get contributions(): MarkdownContributions {
|
|
if (!this._contributions) {
|
|
this._contributions = this.getCurrentContributions();
|
|
}
|
|
return this._contributions;
|
|
}
|
|
|
|
private getCurrentContributions(): MarkdownContributions {
|
|
return vscode.extensions.all
|
|
.map(MarkdownContributions.fromExtension)
|
|
.reduce(MarkdownContributions.merge, MarkdownContributions.Empty);
|
|
}
|
|
}
|
|
|
|
export function getMarkdownExtensionContributions(context: vscode.ExtensionContext): MarkdownContributionProvider {
|
|
return new VSCodeExtensionMarkdownContributionProvider(context);
|
|
}
|