.archify files are Archify JSON diagram sources. They open as JSON, preview with the same commands, report validation problems, and get completion from a schema that dispatches on diagram_type. Adds a hello.archify example and tests for detection, the dispatching schema and the VS Code behaviour. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
329 lines
10 KiB
JSON
329 lines
10 KiB
JSON
{
|
|
"name": "archify-vscode-ext",
|
|
"displayName": "Archify Diagram Viewer",
|
|
"description": "Visualize Archify diagrams: preview .archify files (and *.architecture.json-style sources) live, and open rendered Archify HTML inside VS Code.",
|
|
"version": "0.2.0",
|
|
"publisher": "vscode-extensions",
|
|
"license": "MIT",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://gitea.lego-cloud.eu/vscode-extensions/archify-vscode-ext.git"
|
|
},
|
|
"engines": {
|
|
"vscode": "^1.100.0"
|
|
},
|
|
"categories": [
|
|
"Visualization",
|
|
"Programming Languages"
|
|
],
|
|
"keywords": [
|
|
"archify",
|
|
"diagram",
|
|
"architecture",
|
|
"sequence",
|
|
"workflow"
|
|
],
|
|
"main": "./dist/extension.js",
|
|
"activationEvents": [
|
|
"onLanguage:json",
|
|
"onLanguage:jsonc",
|
|
"onLanguage:html",
|
|
"workspaceContains:**/*.{archify,architecture.json,workflow.json,sequence.json,dataflow.json,lifecycle.json}",
|
|
"onWebviewPanel:archify.preview"
|
|
],
|
|
"contributes": {
|
|
"commands": [
|
|
{
|
|
"command": "archify.showPreview",
|
|
"title": "Open Preview",
|
|
"category": "Archify",
|
|
"icon": "$(open-preview)"
|
|
},
|
|
{
|
|
"command": "archify.showPreviewToSide",
|
|
"title": "Open Preview to the Side",
|
|
"category": "Archify",
|
|
"icon": "$(open-preview)"
|
|
},
|
|
{
|
|
"command": "archify.openHtmlViewer",
|
|
"title": "Open in Archify Viewer",
|
|
"category": "Archify",
|
|
"icon": "$(open-preview)"
|
|
},
|
|
{
|
|
"command": "archify.renderToHtml",
|
|
"title": "Render to HTML File…",
|
|
"category": "Archify",
|
|
"icon": "$(file-code)"
|
|
},
|
|
{
|
|
"command": "archify.openInBrowser",
|
|
"title": "Open in Browser",
|
|
"category": "Archify",
|
|
"icon": "$(globe)"
|
|
},
|
|
{
|
|
"command": "archify.refreshPreview",
|
|
"title": "Refresh Preview",
|
|
"category": "Archify",
|
|
"icon": "$(refresh)"
|
|
},
|
|
{
|
|
"command": "archify.showSource",
|
|
"title": "Show Source",
|
|
"category": "Archify",
|
|
"icon": "$(go-to-file)"
|
|
}
|
|
],
|
|
"menus": {
|
|
"commandPalette": [
|
|
{
|
|
"command": "archify.showPreview",
|
|
"when": "archify.isDiagramSource || archify.isArchifyHtml"
|
|
},
|
|
{
|
|
"command": "archify.showPreviewToSide",
|
|
"when": "archify.isDiagramSource"
|
|
},
|
|
{
|
|
"command": "archify.openHtmlViewer",
|
|
"when": "resourceExtname == .html"
|
|
},
|
|
{
|
|
"command": "archify.renderToHtml",
|
|
"when": "archify.isDiagramSource || archifyPreviewFocus"
|
|
},
|
|
{
|
|
"command": "archify.openInBrowser",
|
|
"when": "archify.isDiagramSource || archify.isArchifyHtml || archifyPreviewFocus || activeCustomEditorId == 'archify.htmlViewer'"
|
|
},
|
|
{
|
|
"command": "archify.refreshPreview",
|
|
"when": "archifyPreviewFocus"
|
|
},
|
|
{
|
|
"command": "archify.showSource",
|
|
"when": "archifyPreviewFocus || activeCustomEditorId == 'archify.htmlViewer'"
|
|
}
|
|
],
|
|
"editor/title": [
|
|
{
|
|
"command": "archify.showPreviewToSide",
|
|
"when": "archify.isDiagramSource && !notebookEditorFocused",
|
|
"group": "navigation"
|
|
},
|
|
{
|
|
"command": "archify.openHtmlViewer",
|
|
"when": "archify.isArchifyHtml && activeCustomEditorId != 'archify.htmlViewer'",
|
|
"group": "navigation"
|
|
},
|
|
{
|
|
"command": "archify.refreshPreview",
|
|
"when": "archifyPreviewFocus",
|
|
"group": "navigation"
|
|
},
|
|
{
|
|
"command": "archify.showSource",
|
|
"when": "archifyPreviewFocus || activeCustomEditorId == 'archify.htmlViewer'",
|
|
"group": "navigation"
|
|
},
|
|
{
|
|
"command": "archify.openInBrowser",
|
|
"when": "archifyPreviewFocus || activeCustomEditorId == 'archify.htmlViewer'",
|
|
"group": "1_archify"
|
|
},
|
|
{
|
|
"command": "archify.renderToHtml",
|
|
"when": "archify.isDiagramSource || archifyPreviewFocus",
|
|
"group": "1_archify"
|
|
}
|
|
],
|
|
"explorer/context": [
|
|
{
|
|
"command": "archify.showPreview",
|
|
"when": "resourceFilename =~ /(\\.archify|\\.(architecture|workflow|sequence|dataflow|lifecycle)\\.json)$/",
|
|
"group": "navigation@20"
|
|
},
|
|
{
|
|
"command": "archify.renderToHtml",
|
|
"when": "resourceFilename =~ /(\\.archify|\\.(architecture|workflow|sequence|dataflow|lifecycle)\\.json)$/",
|
|
"group": "navigation@21"
|
|
},
|
|
{
|
|
"command": "archify.openHtmlViewer",
|
|
"when": "resourceExtname == .html",
|
|
"group": "navigation@20"
|
|
}
|
|
],
|
|
"editor/title/context": [
|
|
{
|
|
"command": "archify.showPreview",
|
|
"when": "resourceFilename =~ /(\\.archify|\\.(architecture|workflow|sequence|dataflow|lifecycle)\\.json)$/",
|
|
"group": "1_open"
|
|
}
|
|
]
|
|
},
|
|
"keybindings": [
|
|
{
|
|
"command": "archify.showPreviewToSide",
|
|
"key": "ctrl+k v",
|
|
"mac": "cmd+k v",
|
|
"when": "editorTextFocus && archify.isDiagramSource"
|
|
},
|
|
{
|
|
"command": "archify.showPreview",
|
|
"key": "ctrl+shift+v",
|
|
"mac": "cmd+shift+v",
|
|
"when": "editorTextFocus && archify.isDiagramSource"
|
|
}
|
|
],
|
|
"customEditors": [
|
|
{
|
|
"viewType": "archify.htmlViewer",
|
|
"displayName": "Archify Diagram Viewer",
|
|
"selector": [
|
|
{
|
|
"filenamePattern": "*.html"
|
|
}
|
|
],
|
|
"priority": "option"
|
|
}
|
|
],
|
|
"jsonValidation": [
|
|
{
|
|
"fileMatch": "*.archify",
|
|
"url": "./schemas/archify.schema.json"
|
|
},
|
|
{
|
|
"fileMatch": "*.architecture.json",
|
|
"url": "./schemas/architecture.schema.json"
|
|
},
|
|
{
|
|
"fileMatch": "*.workflow.json",
|
|
"url": "./schemas/workflow.schema.json"
|
|
},
|
|
{
|
|
"fileMatch": "*.sequence.json",
|
|
"url": "./schemas/sequence.schema.json"
|
|
},
|
|
{
|
|
"fileMatch": "*.dataflow.json",
|
|
"url": "./schemas/dataflow.schema.json"
|
|
},
|
|
{
|
|
"fileMatch": "*.lifecycle.json",
|
|
"url": "./schemas/lifecycle.schema.json"
|
|
}
|
|
],
|
|
"configuration": {
|
|
"title": "Archify",
|
|
"properties": {
|
|
"archify.theme": {
|
|
"type": "string",
|
|
"enum": [
|
|
"vscode",
|
|
"dark",
|
|
"light",
|
|
"diagram"
|
|
],
|
|
"enumDescriptions": [
|
|
"Follow the VS Code color theme.",
|
|
"Always use the dark diagram theme.",
|
|
"Always use the light diagram theme.",
|
|
"Keep whatever the diagram or its toolbar chooses."
|
|
],
|
|
"default": "vscode",
|
|
"description": "Theme used when showing Archify diagrams."
|
|
},
|
|
"archify.preview.liveUpdate": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Re-render the preview while you type. When off, the preview updates on save."
|
|
},
|
|
"archify.preview.debounceMs": {
|
|
"type": "number",
|
|
"default": 400,
|
|
"minimum": 50,
|
|
"description": "Delay in milliseconds before re-rendering after an edit."
|
|
},
|
|
"archify.validation.enabled": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Report Archify validation results (schema, layout and source evidence) in the Problems panel."
|
|
},
|
|
"archify.quality": {
|
|
"type": "string",
|
|
"enum": [
|
|
"",
|
|
"standard",
|
|
"showcase"
|
|
],
|
|
"enumDescriptions": [
|
|
"Use the quality profile declared in the diagram.",
|
|
"Force the standard quality gate.",
|
|
"Force the showcase quality gate."
|
|
],
|
|
"default": "",
|
|
"description": "Quality profile passed to the Archify renderer."
|
|
},
|
|
"archify.sourceEvidence": {
|
|
"type": "string",
|
|
"enum": [
|
|
"fallback",
|
|
"strict"
|
|
],
|
|
"enumDescriptions": [
|
|
"If source evidence cannot be verified, still show the diagram without source links and explain why.",
|
|
"Treat unverifiable source evidence as a render error, exactly like the Archify CLI."
|
|
],
|
|
"default": "fallback",
|
|
"description": "How to handle diagrams whose repository source evidence cannot be verified locally."
|
|
},
|
|
"archify.repoRoot": {
|
|
"type": "string",
|
|
"default": "",
|
|
"description": "Git checkout used to verify source evidence. Empty means the Git top-level directory of the diagram file."
|
|
},
|
|
"archify.nodePath": {
|
|
"type": "string",
|
|
"default": "",
|
|
"description": "Node.js executable (18 or newer) used to run the renderer. Empty means the runtime bundled with VS Code."
|
|
}
|
|
}
|
|
},
|
|
"languages": [
|
|
{
|
|
"id": "json",
|
|
"extensions": [
|
|
".archify"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"scripts": {
|
|
"sync:archify": "node scripts/sync-archify.mjs",
|
|
"build": "node esbuild.mjs",
|
|
"watch": "node esbuild.mjs --watch",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "node esbuild.mjs --tests && node --test \"out/test/*.test.js\"",
|
|
"vscode:prepublish": "node esbuild.mjs --production",
|
|
"package": "vsce package --no-dependencies --baseContentUrl https://gitea.lego-cloud.eu/vscode-extensions/archify-vscode-ext/src/branch/main --baseImagesUrl https://gitea.lego-cloud.eu/vscode-extensions/archify-vscode-ext/raw/branch/main",
|
|
"test:integration": "node esbuild.mjs && node esbuild.mjs --tests && node test/integration/run.mjs"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^22.0.0",
|
|
"@types/vscode": "~1.100.0",
|
|
"@vscode/test-electron": "^3.1.0",
|
|
"@vscode/vsce": "^3.0.0",
|
|
"ajv": "^8.20.0",
|
|
"esbuild": "^0.25.0",
|
|
"jsonc-parser": "^3.3.1",
|
|
"typescript": "^5.8.0"
|
|
},
|
|
"bugs": {
|
|
"url": "https://gitea.lego-cloud.eu/vscode-extensions/archify-vscode-ext/issues"
|
|
},
|
|
"homepage": "https://gitea.lego-cloud.eu/vscode-extensions/archify-vscode-ext#readme"
|
|
}
|