Several people edit one model at once through a server you run yourself (archify-vscode-ext-sync); the files stay ordinary files on each disk. Sign-in through the browser, offline-first with later merge, teammates' cursors in the Source view and text editors, and a Shared section on the model page with people, versions, Compare and Restore. Without a server nothing changes: the sync code is a separate bundle that loads only when a model is shared, after a sign-in, or when a sync command or invite link is used.
57 lines
2.5 KiB
TypeScript
57 lines
2.5 KiB
TypeScript
import * as vscode from 'vscode';
|
|
import { CommandContext } from './commands/context';
|
|
import { registerContextKeys } from './commands/contextKeys';
|
|
import { newDiagramCommands } from './commands/newDiagram';
|
|
import { renderCommands } from './commands/renderCommands';
|
|
import { viewCommands } from './commands/viewCommands';
|
|
import { modelCommands } from './commands/modelCommands';
|
|
import { BRAND_COMPLETION_SELECTOR, BrandCompletionProvider } from './language/brandCompletion';
|
|
import { REF_SELECTOR, RefLanguage } from './language/refLanguage';
|
|
import { ModelService } from './model/service';
|
|
import { DiagnosticsController } from './language/diagnostics';
|
|
import { log } from './util/log';
|
|
import { HtmlViewerProvider } from './views/htmlViewer';
|
|
import { DiagramViewManager } from './views/diagramView';
|
|
import { RegistryViewProvider } from './views/registryView';
|
|
import { DecisionViewProvider } from './views/decisionView';
|
|
import { DECISION_SELECTOR, DecisionLanguage } from './language/decisionLanguage';
|
|
import { registerSync } from './sync/loader';
|
|
|
|
export function activate(context: vscode.ExtensionContext): void {
|
|
const models = new ModelService();
|
|
const ctx: CommandContext = {
|
|
extension: context,
|
|
views: new DiagramViewManager(context, models),
|
|
htmlViewer: new HtmlViewerProvider(context.extensionUri),
|
|
registry: new RegistryViewProvider(context, models),
|
|
decision: new DecisionViewProvider(context, models),
|
|
models,
|
|
};
|
|
const refs = new RefLanguage(models);
|
|
const decisions = new DecisionLanguage(models);
|
|
context.subscriptions.push(
|
|
models,
|
|
ctx.views,
|
|
ctx.htmlViewer,
|
|
ctx.registry,
|
|
ctx.decision,
|
|
new DiagnosticsController(context, models),
|
|
log(),
|
|
vscode.languages.registerCompletionItemProvider(BRAND_COMPLETION_SELECTOR, new BrandCompletionProvider(context.extensionPath), ' ', '"'),
|
|
vscode.languages.registerCompletionItemProvider(REF_SELECTOR, refs, ' ', '"'),
|
|
vscode.languages.registerHoverProvider(REF_SELECTOR, refs),
|
|
vscode.languages.registerDefinitionProvider(REF_SELECTOR, refs),
|
|
vscode.languages.registerCompletionItemProvider(DECISION_SELECTOR, decisions, ' ', '[', ',', '"'),
|
|
vscode.languages.registerHoverProvider(DECISION_SELECTOR, decisions),
|
|
vscode.languages.registerDefinitionProvider(DECISION_SELECTOR, decisions),
|
|
...viewCommands(ctx),
|
|
...newDiagramCommands(ctx),
|
|
...renderCommands(ctx),
|
|
...modelCommands(ctx),
|
|
...registerSync(context, models),
|
|
);
|
|
registerContextKeys(context, models);
|
|
}
|
|
|
|
export function deactivate(): void {}
|