zenstack 2.19.0 → 2.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,32 +0,0 @@
1
- import * as vscode from 'vscode';
2
- export declare const AUTH_PROVIDER_ID = "ZenStack";
3
- export declare const AUTH_URL = "https://accounts.zenstack.dev";
4
- export declare const API_URL = "https://api.zenstack.dev";
5
- export declare class ZenStackAuthenticationProvider implements vscode.AuthenticationProvider, vscode.Disposable {
6
- private _onDidChangeSessions;
7
- readonly onDidChangeSessions: vscode.Event<vscode.AuthenticationProviderAuthenticationSessionsChangeEvent>;
8
- private _sessions;
9
- private _context;
10
- private _disposable;
11
- private pendingAuth?;
12
- constructor(context: vscode.ExtensionContext);
13
- getSessions(_scopes?: readonly string[]): Promise<vscode.AuthenticationSession[]>;
14
- createSession(scopes: readonly string[]): Promise<vscode.AuthenticationSession>;
15
- removeSession(sessionId: string): Promise<void>;
16
- /**
17
- * Log out all sessions
18
- */
19
- logoutAllSessions(): Promise<void>;
20
- private performLogin;
21
- private generateState;
22
- handleAuthCallback(callbackUri: vscode.Uri): Promise<void>;
23
- private createSessionFromAccessToken;
24
- private parseJWTClaims;
25
- private getStoredSessions;
26
- private storeSession;
27
- private removeStoredSession;
28
- /**
29
- * Dispose the registered services
30
- */
31
- dispose(): Promise<void>;
32
- }
@@ -1,281 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
- return new (P || (P = Promise))(function (resolve, reject) {
38
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
- step((generator = generator.apply(thisArg, _arguments || [])).next());
42
- });
43
- };
44
- Object.defineProperty(exports, "__esModule", { value: true });
45
- exports.ZenStackAuthenticationProvider = exports.API_URL = exports.AUTH_URL = exports.AUTH_PROVIDER_ID = void 0;
46
- const vscode = __importStar(require("vscode"));
47
- exports.AUTH_PROVIDER_ID = 'ZenStack';
48
- exports.AUTH_URL = 'https://accounts.zenstack.dev';
49
- exports.API_URL = 'https://api.zenstack.dev';
50
- class ZenStackAuthenticationProvider {
51
- constructor(context) {
52
- this._onDidChangeSessions = new vscode.EventEmitter();
53
- this.onDidChangeSessions = this._onDidChangeSessions.event;
54
- this._sessions = [];
55
- this._context = context;
56
- this._disposable = vscode.Disposable.from(vscode.authentication.registerAuthenticationProvider(exports.AUTH_PROVIDER_ID, 'ZenStack', this), vscode.window.registerUriHandler({
57
- handleUri: (uri) => __awaiter(this, void 0, void 0, function* () {
58
- if (uri.path === '/auth-callback') {
59
- yield this.handleAuthCallback(uri);
60
- }
61
- }),
62
- }),
63
- // Register logout command
64
- vscode.commands.registerCommand('zenstack.logout', () => __awaiter(this, void 0, void 0, function* () {
65
- yield this.logoutAllSessions();
66
- })));
67
- }
68
- getSessions(_scopes) {
69
- return __awaiter(this, void 0, void 0, function* () {
70
- // Check if we have stored sessions in VS Code's secret storage
71
- const storedSessions = yield this.getStoredSessions();
72
- this._sessions = storedSessions;
73
- return this._sessions;
74
- });
75
- }
76
- createSession(scopes) {
77
- return __awaiter(this, void 0, void 0, function* () {
78
- // Create a login flow
79
- const session = yield this.performLogin(scopes);
80
- if (session) {
81
- this._sessions.push(session);
82
- yield this.storeSession(session);
83
- this._onDidChangeSessions.fire({
84
- added: [session],
85
- removed: [],
86
- changed: [],
87
- });
88
- }
89
- return session;
90
- });
91
- }
92
- removeSession(sessionId) {
93
- return __awaiter(this, void 0, void 0, function* () {
94
- const sessionIndex = this._sessions.findIndex((s) => s.id === sessionId);
95
- if (sessionIndex > -1) {
96
- const session = this._sessions[sessionIndex];
97
- this._sessions.splice(sessionIndex, 1);
98
- yield this.removeStoredSession(sessionId);
99
- this._onDidChangeSessions.fire({
100
- added: [],
101
- removed: [session],
102
- changed: [],
103
- });
104
- }
105
- });
106
- }
107
- /**
108
- * Log out all sessions
109
- */
110
- logoutAllSessions() {
111
- return __awaiter(this, void 0, void 0, function* () {
112
- if (this._sessions.length === 0) {
113
- return;
114
- }
115
- (yield this.getSessions()).forEach((s) => __awaiter(this, void 0, void 0, function* () { return yield this.removeSession(s.id); }));
116
- vscode.window.showInformationMessage('Successfully logged out of ZenStack.');
117
- });
118
- }
119
- performLogin(scopes) {
120
- return __awaiter(this, void 0, void 0, function* () {
121
- // Create the authentication promise
122
- return vscode.window.withProgress({
123
- location: vscode.ProgressLocation.Notification,
124
- title: 'Signing in to ZenStack',
125
- cancellable: true,
126
- }, (progress, token) => __awaiter(this, void 0, void 0, function* () {
127
- return new Promise((resolve, reject) => {
128
- // Handle cancellation
129
- token.onCancellationRequested(() => {
130
- if (this.pendingAuth) {
131
- delete this.pendingAuth;
132
- }
133
- reject(new Error('User Cancelled'));
134
- });
135
- const isCursor = vscode.env.appName == 'Cursor';
136
- let signInUrl = vscode.Uri.parse(new URL('/sign-in', exports.AUTH_URL).toString());
137
- if (isCursor) {
138
- signInUrl = signInUrl.with({
139
- query: `redirect_url=${exports.API_URL}/oauth/oauth_callback?vscodeapp=cursor`,
140
- });
141
- }
142
- console.log('ZenStack sign-in URL:', signInUrl.toString());
143
- // Store the state and resolve function for later use
144
- this.pendingAuth = { resolve, reject, scopes };
145
- // Open the ZenStack sign-in page in the user's default browser
146
- vscode.env.openExternal(signInUrl).then(() => {
147
- console.log('Opened ZenStack sign-in page in browser');
148
- progress.report({ message: 'Waiting for return from browser...' });
149
- }, (error) => {
150
- if (this.pendingAuth) {
151
- delete this.pendingAuth;
152
- }
153
- reject(new Error(`Failed to open sign-in page: ${error}`));
154
- });
155
- // 2 minutes timeout
156
- setTimeout(() => {
157
- if (this.pendingAuth) {
158
- delete this.pendingAuth;
159
- }
160
- reject(new Error('Timeout'));
161
- }, 120000);
162
- });
163
- }));
164
- });
165
- }
166
- generateState() {
167
- return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
168
- }
169
- // Handle authentication callback from ZenStack
170
- handleAuthCallback(callbackUri) {
171
- return __awaiter(this, void 0, void 0, function* () {
172
- const query = new URLSearchParams(callbackUri.query);
173
- const accessToken = query.get('access_token');
174
- if (!this.pendingAuth) {
175
- console.warn('No pending authentication found');
176
- return;
177
- }
178
- if (!accessToken) {
179
- this.pendingAuth.reject(new Error('No access token received'));
180
- delete this.pendingAuth;
181
- return;
182
- }
183
- try {
184
- // Create session from the access token
185
- const session = yield this.createSessionFromAccessToken(accessToken);
186
- this.pendingAuth.resolve(session);
187
- delete this.pendingAuth;
188
- }
189
- catch (error) {
190
- if (this.pendingAuth) {
191
- this.pendingAuth.reject(error instanceof Error ? error : new Error(String(error)));
192
- delete this.pendingAuth;
193
- }
194
- }
195
- });
196
- }
197
- createSessionFromAccessToken(accessToken) {
198
- return __awaiter(this, void 0, void 0, function* () {
199
- try {
200
- // Decode JWT to get claims
201
- const claims = this.parseJWTClaims(accessToken);
202
- return {
203
- id: claims.jti || Math.random().toString(36),
204
- accessToken: accessToken,
205
- account: {
206
- id: claims.sub || 'unknown',
207
- label: claims.email || 'unknown@zenstack.dev',
208
- },
209
- scopes: [],
210
- };
211
- }
212
- catch (error) {
213
- throw new Error(`Failed to create session from access token: ${error}`);
214
- }
215
- });
216
- }
217
- parseJWTClaims(token) {
218
- try {
219
- // JWT tokens have 3 parts separated by dots: header.payload.signature
220
- const parts = token.split('.');
221
- if (parts.length !== 3) {
222
- throw new Error('Invalid JWT format');
223
- }
224
- // Decode the payload (second part)
225
- const payload = parts[1];
226
- // Add padding if needed for base64 decoding
227
- const paddedPayload = payload + '='.repeat((4 - (payload.length % 4)) % 4);
228
- const decoded = atob(paddedPayload);
229
- return JSON.parse(decoded);
230
- }
231
- catch (error) {
232
- throw new Error(`Failed to parse JWT claims: ${error}`);
233
- }
234
- }
235
- getStoredSessions() {
236
- return __awaiter(this, void 0, void 0, function* () {
237
- try {
238
- const stored = yield this._context.secrets.get('zenstack-auth-sessions');
239
- return stored ? JSON.parse(stored) : [];
240
- }
241
- catch (error) {
242
- console.error('Error retrieving stored sessions:', error);
243
- return [];
244
- }
245
- });
246
- }
247
- storeSession(session) {
248
- return __awaiter(this, void 0, void 0, function* () {
249
- try {
250
- const sessions = yield this.getStoredSessions();
251
- sessions.push(session);
252
- yield this._context.secrets.store('zenstack-auth-sessions', JSON.stringify(sessions));
253
- }
254
- catch (error) {
255
- console.error('Error storing session:', error);
256
- }
257
- });
258
- }
259
- removeStoredSession(sessionId) {
260
- return __awaiter(this, void 0, void 0, function* () {
261
- try {
262
- const sessions = yield this.getStoredSessions();
263
- const filteredSessions = sessions.filter((s) => s.id !== sessionId);
264
- yield this._context.secrets.store('zenstack-auth-sessions', JSON.stringify(filteredSessions));
265
- }
266
- catch (error) {
267
- console.error('Error removing stored session:', error);
268
- }
269
- });
270
- }
271
- /**
272
- * Dispose the registered services
273
- */
274
- dispose() {
275
- return __awaiter(this, void 0, void 0, function* () {
276
- this._disposable.dispose();
277
- });
278
- }
279
- }
280
- exports.ZenStackAuthenticationProvider = ZenStackAuthenticationProvider;
281
- //# sourceMappingURL=zenstack-auth-provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"zenstack-auth-provider.js","sourceRoot":"","sources":["../src/zenstack-auth-provider.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- import * as vscode from 'vscode';
2
- import { LanguageClient } from 'vscode-languageclient/node';
3
- import { DocumentationCache } from './documentation-cache';
4
- /**
5
- * ZModelPreview class handles ZModel file preview functionality
6
- */
7
- export declare class ZModelPreview implements vscode.Disposable {
8
- private documentationCache;
9
- private languageClient;
10
- private static DocRequestSchema;
11
- constructor(context: vscode.ExtensionContext, client: LanguageClient, cache: DocumentationCache);
12
- /**
13
- * Initialize and register commands
14
- */
15
- initialize(context: vscode.ExtensionContext): void;
16
- /**
17
- * Register ZModel preview commands
18
- */
19
- private registerCommands;
20
- /**
21
- * Preview a ZModel file
22
- */
23
- previewZModelFile(): Promise<void>;
24
- /**
25
- * Get all imported ZModel URIs using the language server
26
- */
27
- private getAllImportedZModelURIs;
28
- /**
29
- * Generate documentation for ZModel
30
- */
31
- private generateZModelDocumentation;
32
- /**
33
- * Open markdown preview
34
- */
35
- private openMarkdownPreview;
36
- /**
37
- * Check for Mermaid extensions
38
- */
39
- private checkForMermaidExtensions;
40
- /**
41
- * Dispose of resources
42
- */
43
- dispose(): void;
44
- }
package/zmodel-preview.js DELETED
@@ -1,289 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
- return new (P || (P = Promise))(function (resolve, reject) {
38
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
- step((generator = generator.apply(thisArg, _arguments || [])).next());
42
- });
43
- };
44
- Object.defineProperty(exports, "__esModule", { value: true });
45
- exports.ZModelPreview = void 0;
46
- const vscode = __importStar(require("vscode"));
47
- const path = __importStar(require("path"));
48
- const os = __importStar(require("os"));
49
- const zod_1 = require("zod");
50
- const extension_1 = require("./extension");
51
- const zenstack_auth_provider_1 = require("./zenstack-auth-provider");
52
- /**
53
- * ZModelPreview class handles ZModel file preview functionality
54
- */
55
- class ZModelPreview {
56
- constructor(context, client, cache) {
57
- this.documentationCache = cache;
58
- this.languageClient = client;
59
- this.initialize(context);
60
- }
61
- /**
62
- * Initialize and register commands
63
- */
64
- initialize(context) {
65
- this.registerCommands(context);
66
- }
67
- /**
68
- * Register ZModel preview commands
69
- */
70
- registerCommands(context) {
71
- // Register the preview command for zmodel files
72
- context.subscriptions.push(vscode.commands.registerCommand('zenstack.preview-zmodel', () => __awaiter(this, void 0, void 0, function* () {
73
- yield this.previewZModelFile();
74
- })));
75
- // Register cache management commands
76
- context.subscriptions.push(vscode.commands.registerCommand('zenstack.clear-documentation-cache', () => __awaiter(this, void 0, void 0, function* () {
77
- yield this.documentationCache.clearAllCache();
78
- vscode.window.showInformationMessage('ZenStack documentation cache cleared');
79
- })));
80
- }
81
- /**
82
- * Preview a ZModel file
83
- */
84
- previewZModelFile() {
85
- return __awaiter(this, void 0, void 0, function* () {
86
- const editor = vscode.window.activeTextEditor;
87
- if (!editor) {
88
- vscode.window.showErrorMessage('No active editor found.');
89
- return;
90
- }
91
- const document = editor.document;
92
- if (!document.fileName.endsWith('.zmodel')) {
93
- vscode.window.showErrorMessage('The active file is not a ZModel file.');
94
- return;
95
- }
96
- // Check authentication before proceeding
97
- const session = yield (0, extension_1.requireAuth)();
98
- if (!session) {
99
- return;
100
- }
101
- try {
102
- this.checkForMermaidExtensions();
103
- // Show progress indicator
104
- yield vscode.window.withProgress({
105
- location: vscode.ProgressLocation.Notification,
106
- title: 'Generating ZModel documentation...',
107
- cancellable: false,
108
- }, () => __awaiter(this, void 0, void 0, function* () {
109
- const markdownContent = yield this.generateZModelDocumentation(document);
110
- if (markdownContent) {
111
- yield this.openMarkdownPreview(markdownContent, document.fileName);
112
- }
113
- }));
114
- }
115
- catch (error) {
116
- console.error('Error previewing ZModel:', error);
117
- vscode.window.showErrorMessage(`Failed to preview ZModel: ${error instanceof Error ? error.message : String(error)}`);
118
- }
119
- });
120
- }
121
- /**
122
- * Get all imported ZModel URIs using the language server
123
- */
124
- getAllImportedZModelURIs(document) {
125
- return __awaiter(this, void 0, void 0, function* () {
126
- if (!this.languageClient) {
127
- throw new Error('Language client not initialized');
128
- }
129
- try {
130
- // Ensure the language server is ready
131
- yield this.languageClient.start();
132
- // Send the custom request to get all imported ZModel URIs
133
- const result = yield this.languageClient.sendRequest('zenstack/getAllImportedZModelURIs', {
134
- textDocument: {
135
- uri: document.uri.toString(),
136
- },
137
- });
138
- return result;
139
- }
140
- catch (error) {
141
- console.error('Error getting AST from language server:', error);
142
- throw error;
143
- }
144
- });
145
- }
146
- /**
147
- * Generate documentation for ZModel
148
- */
149
- generateZModelDocumentation(document) {
150
- return __awaiter(this, void 0, void 0, function* () {
151
- try {
152
- const astInfo = yield this.getAllImportedZModelURIs(document);
153
- if ((astInfo === null || astInfo === void 0 ? void 0 : astInfo.hasSyntaxErrors) !== false) {
154
- vscode.window.showWarningMessage('Please fix the errors in the ZModel first');
155
- return '';
156
- }
157
- const importedURIs = astInfo === null || astInfo === void 0 ? void 0 : astInfo.importedURIs;
158
- // get vscode document from importedURIs
159
- const importedModels = yield Promise.all(importedURIs.map((uri) => __awaiter(this, void 0, void 0, function* () {
160
- try {
161
- const fileUri = vscode.Uri.file(uri.path);
162
- const fileContent = yield vscode.workspace.fs.readFile(fileUri);
163
- const filePath = fileUri.path;
164
- return { content: Buffer.from(fileContent).toString('utf8').trim(), path: filePath };
165
- }
166
- catch (error) {
167
- throw new Error(`Failed to read imported ZModel file at ${uri.path}: ${error instanceof Error ? error.message : String(error)}`);
168
- }
169
- })));
170
- const allModels = [{ content: document.getText().trim(), path: document.uri.path }, ...importedModels];
171
- const session = yield (0, extension_1.requireAuth)();
172
- if (!session) {
173
- throw new Error('Authentication required to generate documentation');
174
- }
175
- // Prepare request body
176
- const requestBody = {
177
- models: allModels,
178
- environments: {
179
- vscodeAppName: vscode.env.appName,
180
- vscodeVersion: vscode.version,
181
- vscodeAppHost: vscode.env.appHost,
182
- osRelease: os.release(),
183
- osType: os.type(),
184
- },
185
- };
186
- const allModelsContent = allModels.map((m) => m.content);
187
- // Check cache first
188
- const cachedResponse = yield this.documentationCache.getCachedResponse(allModelsContent);
189
- if (cachedResponse) {
190
- return cachedResponse;
191
- }
192
- // record the time spent
193
- const startTime = Date.now();
194
- const apiResponse = yield fetch(`${zenstack_auth_provider_1.API_URL}/api/doc`, {
195
- method: 'POST',
196
- headers: {
197
- 'Content-Type': 'application/json',
198
- authorization: session.accessToken,
199
- },
200
- body: JSON.stringify(requestBody),
201
- });
202
- console.log(`API request completed in ${Date.now() - startTime} ms`);
203
- if (!apiResponse.ok) {
204
- throw new Error(`API request failed: ${apiResponse.status} ${apiResponse.statusText}`);
205
- }
206
- const responseText = yield apiResponse.text();
207
- // Cache the response
208
- yield this.documentationCache.setCachedResponse(allModelsContent, responseText);
209
- return responseText;
210
- }
211
- catch (error) {
212
- console.error('Error generating documentation:', error);
213
- const errorMessage = error instanceof Error ? error.message : String(error);
214
- throw new Error(`Failed to generate documentation: ${errorMessage}`);
215
- }
216
- });
217
- }
218
- /**
219
- * Open markdown preview
220
- */
221
- openMarkdownPreview(markdownContent, originalFileName) {
222
- return __awaiter(this, void 0, void 0, function* () {
223
- // Create a temporary markdown file with a descriptive name in the system temp folder
224
- const baseName = path.basename(originalFileName, '.zmodel');
225
- const tempFileName = `${baseName}-preview.md`;
226
- const tempFilePath = path.join(os.tmpdir(), tempFileName);
227
- const tempFile = vscode.Uri.file(tempFilePath);
228
- try {
229
- // Write the markdown content to the temp file
230
- yield vscode.workspace.fs.writeFile(tempFile, new TextEncoder().encode(markdownContent));
231
- // Open the markdown preview side by side
232
- yield vscode.commands.executeCommand('markdown.showPreviewToSide', tempFile);
233
- }
234
- catch (error) {
235
- console.error('Error creating markdown preview:', error);
236
- throw new Error(`Failed to create markdown preview: ${error instanceof Error ? error.message : String(error)}`);
237
- }
238
- });
239
- }
240
- /**
241
- * Check for Mermaid extensions
242
- */
243
- checkForMermaidExtensions() {
244
- const setting = vscode.workspace.getConfiguration('zenstack').get('searchForExtensions');
245
- if (setting !== false) {
246
- const extensions = vscode.extensions.all.filter((extension) => ['markdown-mermaid', 'vscode-mermaid-chart', 'vscode-mermaid-preview'].some((name) => { var _a; return (_a = extension.packageJSON.name) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(name.toLowerCase()); }));
247
- if (extensions.length === 0) {
248
- const searchAction = 'Search';
249
- const stopShowing = "Don't show again";
250
- vscode.window
251
- .showInformationMessage('Search for extensions to view mermaid chart in ZModel preview doc?', searchAction, stopShowing)
252
- .then((selectedAction) => {
253
- if (selectedAction === searchAction) {
254
- vscode.commands.executeCommand('workbench.extensions.search', 'markdown-mermaid');
255
- }
256
- else if (selectedAction === stopShowing) {
257
- vscode.workspace
258
- .getConfiguration('zenstack')
259
- .update('searchForExtensions', false, vscode.ConfigurationTarget.Global);
260
- }
261
- });
262
- }
263
- }
264
- }
265
- /**
266
- * Dispose of resources
267
- */
268
- dispose() {
269
- // Any cleanup if needed
270
- }
271
- }
272
- exports.ZModelPreview = ZModelPreview;
273
- // Schema for validating the request body
274
- ZModelPreview.DocRequestSchema = zod_1.z.object({
275
- models: zod_1.z.array(zod_1.z.object({
276
- path: zod_1.z.string().optional(),
277
- content: zod_1.z.string(),
278
- })),
279
- environments: zod_1.z
280
- .object({
281
- vscodeAppName: zod_1.z.string(),
282
- vscodeVersion: zod_1.z.string(),
283
- vscodeAppHost: zod_1.z.string(),
284
- osRelease: zod_1.z.string(),
285
- osType: zod_1.z.string(),
286
- })
287
- .optional(),
288
- });
289
- //# sourceMappingURL=zmodel-preview.js.map