Files
archify-vscode-ext/src/extension.ts
T
root-at-skic c99f3e5fe8 0.10.0: Archify Sync, optional live collaboration on a model
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.
2026-11-06 22:55:01 +02:00

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 {}