@principal-ai/principal-view-cli 0.1.13

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.
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Hooks command - Manage husky pre-commit hooks for Principal View
3
+ *
4
+ * This command installs/removes pre-commit hooks into a target project
5
+ * that will run `privu doctor` and `privu validate` before each commit.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { existsSync, readFileSync, writeFileSync, unlinkSync, chmodSync } from 'node:fs';
9
+ import { resolve, join } from 'node:path';
10
+ import chalk from 'chalk';
11
+ import { execSync } from 'node:child_process';
12
+ const HUSKY_DIR = '.husky';
13
+ const PRE_COMMIT_HOOK = 'pre-commit';
14
+ const VV_HOOK_MARKER = '# Principal View checks';
15
+ /**
16
+ * Get the Principal View pre-commit hook content
17
+ */
18
+ function getVVHookContent() {
19
+ return `${VV_HOOK_MARKER}
20
+ echo "Running Principal View doctor check..."
21
+ npx privu doctor --errors-only || {
22
+ echo "❌ Principal View doctor check failed (errors found)"
23
+ echo " Run 'privu doctor' to see details"
24
+ exit 1
25
+ }
26
+
27
+ echo "Running Principal View canvas validation..."
28
+ npx privu validate --quiet 2>/dev/null || {
29
+ if [ $? -ne 0 ]; then
30
+ echo "❌ Canvas validation failed"
31
+ echo " Run 'privu validate' to see details"
32
+ exit 1
33
+ fi
34
+ }
35
+ `;
36
+ }
37
+ /**
38
+ * Find the repository root by looking for .git directory
39
+ */
40
+ function findRepoRoot(startPath) {
41
+ let current = resolve(startPath);
42
+ const root = resolve('/');
43
+ while (current !== root) {
44
+ if (existsSync(join(current, '.git'))) {
45
+ return current;
46
+ }
47
+ current = resolve(current, '..');
48
+ }
49
+ throw new Error('Not a git repository (or any parent up to mount point)');
50
+ }
51
+ /**
52
+ * Check if husky is installed
53
+ */
54
+ function isHuskyInstalled(repoPath) {
55
+ const huskyPath = join(repoPath, HUSKY_DIR);
56
+ return existsSync(huskyPath);
57
+ }
58
+ /**
59
+ * Initialize husky if not already installed
60
+ */
61
+ function initializeHusky(repoPath) {
62
+ if (!isHuskyInstalled(repoPath)) {
63
+ console.log('📦 Installing husky...');
64
+ try {
65
+ // Check if package.json exists
66
+ const packageJsonPath = join(repoPath, 'package.json');
67
+ if (!existsSync(packageJsonPath)) {
68
+ throw new Error('No package.json found. Please run npm init first.');
69
+ }
70
+ // Install husky
71
+ execSync('npm install --save-dev husky', {
72
+ cwd: repoPath,
73
+ stdio: 'inherit',
74
+ });
75
+ // Initialize husky
76
+ execSync('npx husky init', {
77
+ cwd: repoPath,
78
+ stdio: 'inherit',
79
+ });
80
+ // Remove the default placeholder if it exists
81
+ const hookPath = join(repoPath, HUSKY_DIR, PRE_COMMIT_HOOK);
82
+ if (existsSync(hookPath)) {
83
+ const content = readFileSync(hookPath, 'utf8').trim();
84
+ if (content === 'npm test') {
85
+ // Remove the placeholder file - we'll create our own when --add is used
86
+ unlinkSync(hookPath);
87
+ console.log('ℹ️ Removed default husky placeholder hook');
88
+ }
89
+ }
90
+ console.log('✅ Husky installed and initialized');
91
+ }
92
+ catch (error) {
93
+ throw new Error(`Failed to initialize husky: ${error instanceof Error ? error.message : String(error)}`);
94
+ }
95
+ }
96
+ }
97
+ /**
98
+ * Check if pre-commit hook has PV validation
99
+ */
100
+ function hasVVHook(repoPath) {
101
+ const hookPath = join(repoPath, HUSKY_DIR, PRE_COMMIT_HOOK);
102
+ if (!existsSync(hookPath)) {
103
+ return false;
104
+ }
105
+ const content = readFileSync(hookPath, 'utf8');
106
+ return content.includes(VV_HOOK_MARKER);
107
+ }
108
+ /**
109
+ * Add PV validation to pre-commit hook
110
+ */
111
+ function addVVHook(repoPath) {
112
+ const hookPath = join(repoPath, HUSKY_DIR, PRE_COMMIT_HOOK);
113
+ const vvContent = getVVHookContent();
114
+ if (existsSync(hookPath)) {
115
+ // Append to existing hook
116
+ let existingContent = readFileSync(hookPath, 'utf8');
117
+ // Check if already has PV hook
118
+ if (existingContent.includes(VV_HOOK_MARKER)) {
119
+ return;
120
+ }
121
+ // Remove default husky placeholder if it's the only content
122
+ const trimmedContent = existingContent.trim();
123
+ if (trimmedContent === 'npm test') {
124
+ // Replace the placeholder entirely
125
+ writeFileSync(hookPath, vvContent, 'utf8');
126
+ console.log('ℹ️ Replaced default husky placeholder with Principal View checks');
127
+ }
128
+ else {
129
+ // Add PV hook at the end
130
+ const updatedContent = existingContent.trimEnd() + '\n\n' + vvContent;
131
+ writeFileSync(hookPath, updatedContent, 'utf8');
132
+ }
133
+ }
134
+ else {
135
+ // Create new hook file
136
+ writeFileSync(hookPath, vvContent, 'utf8');
137
+ // Make it executable
138
+ chmodSync(hookPath, 0o755);
139
+ }
140
+ }
141
+ /**
142
+ * Remove PV validation from pre-commit hook
143
+ */
144
+ function removeVVHook(repoPath) {
145
+ const hookPath = join(repoPath, HUSKY_DIR, PRE_COMMIT_HOOK);
146
+ if (!existsSync(hookPath)) {
147
+ return;
148
+ }
149
+ const content = readFileSync(hookPath, 'utf8');
150
+ if (!content.includes(VV_HOOK_MARKER)) {
151
+ return;
152
+ }
153
+ // Split content by lines and find the PV section
154
+ const lines = content.split('\n');
155
+ const startIndex = lines.findIndex((line) => line.includes(VV_HOOK_MARKER));
156
+ if (startIndex === -1) {
157
+ return;
158
+ }
159
+ // Find the end of the PV section
160
+ let endIndex = lines.length - 1;
161
+ let inVVBlock = true;
162
+ let i = startIndex + 1;
163
+ while (i < lines.length && inVVBlock) {
164
+ const line = lines[i];
165
+ // Check if this line is part of the PV block
166
+ if (line &&
167
+ (line.includes('privu ') ||
168
+ line.includes('Principal View') ||
169
+ line.includes('echo "Running Visual') ||
170
+ (line.includes('exit 1') && i > startIndex && i < startIndex + 15) ||
171
+ (line === '}' && i > startIndex && i < startIndex + 15) ||
172
+ (line.trim() === '' && i === startIndex + 1))) {
173
+ endIndex = i;
174
+ i++;
175
+ }
176
+ else if (line && line.trim() === '' && i < startIndex + 15) {
177
+ // Empty line might be part of our block
178
+ endIndex = i;
179
+ i++;
180
+ }
181
+ else {
182
+ // We've reached content that's not part of our block
183
+ inVVBlock = false;
184
+ }
185
+ }
186
+ // Remove the section (inclusive)
187
+ lines.splice(startIndex, endIndex - startIndex + 1);
188
+ // Clean up extra blank lines
189
+ let result = lines.join('\n');
190
+ result = result.replace(/\n{3,}/g, '\n\n').trim();
191
+ if (result) {
192
+ writeFileSync(hookPath, result + '\n', 'utf8');
193
+ }
194
+ else {
195
+ // If hook is now empty, remove it
196
+ unlinkSync(hookPath);
197
+ }
198
+ }
199
+ export function createHooksCommand() {
200
+ const command = new Command('hooks');
201
+ command
202
+ .description('Manage husky pre-commit hooks for Principal View')
203
+ .option('-p, --path <path>', 'Repository path (defaults to current directory)')
204
+ .option('--add', 'Add Principal View checks to pre-commit hook')
205
+ .option('--remove', 'Remove Principal View checks from pre-commit hook')
206
+ .option('--check', 'Check if Principal View checks exist in pre-commit hook')
207
+ .option('--init', 'Initialize husky if not already installed')
208
+ .action((options) => {
209
+ try {
210
+ const repoPath = findRepoRoot(options.path || process.cwd());
211
+ // Check if it's a git repository
212
+ if (!existsSync(join(repoPath, '.git'))) {
213
+ console.error(chalk.red('❌ Not a git repository'));
214
+ process.exit(1);
215
+ }
216
+ // Handle init option
217
+ if (options.init) {
218
+ initializeHusky(repoPath);
219
+ return;
220
+ }
221
+ // Check if husky is installed
222
+ if (!isHuskyInstalled(repoPath)) {
223
+ if (options.check) {
224
+ console.log(chalk.red('❌ Husky is not installed'));
225
+ console.log(' Run "privu hooks --init" to install husky');
226
+ process.exit(1);
227
+ }
228
+ else if (options.add) {
229
+ console.log(chalk.red('❌ Husky is not installed'));
230
+ console.log(' Run "privu hooks --init" first to install husky');
231
+ process.exit(1);
232
+ }
233
+ else if (options.remove) {
234
+ console.log('ℹ️ Husky is not installed');
235
+ return;
236
+ }
237
+ else {
238
+ console.log(chalk.red('❌ Husky is not installed in this repository'));
239
+ console.log('\nTo install husky and set up Principal View hooks:');
240
+ console.log(' privu hooks --init --add');
241
+ process.exit(1);
242
+ }
243
+ }
244
+ const hasHook = hasVVHook(repoPath);
245
+ if (options.check) {
246
+ if (hasHook) {
247
+ console.log(chalk.green('✅ Principal View checks found in pre-commit hook'));
248
+ }
249
+ else {
250
+ console.log(chalk.red('❌ No Principal View checks in pre-commit hook'));
251
+ process.exit(1);
252
+ }
253
+ }
254
+ else if (options.add) {
255
+ if (hasHook) {
256
+ console.log('ℹ️ Principal View checks already exist in pre-commit hook');
257
+ }
258
+ else {
259
+ addVVHook(repoPath);
260
+ console.log(chalk.green('✅ Added Principal View checks to pre-commit hook'));
261
+ console.log('\nPre-commit hook will now:');
262
+ console.log(' • Run privu doctor to check for stale configurations');
263
+ console.log(' • Validate all .canvas files');
264
+ }
265
+ }
266
+ else if (options.remove) {
267
+ if (!hasHook) {
268
+ console.log('ℹ️ No Principal View checks found in pre-commit hook');
269
+ }
270
+ else {
271
+ removeVVHook(repoPath);
272
+ console.log(chalk.green('✅ Removed Principal View checks from pre-commit hook'));
273
+ }
274
+ }
275
+ else {
276
+ // Default action: show status
277
+ console.log(chalk.bold('\nPrincipal View Hooks Status\n'));
278
+ console.log(`Repository: ${repoPath}`);
279
+ console.log(`Husky: ${chalk.green('installed')}`);
280
+ console.log(`PV Hooks: ${hasHook ? chalk.green('configured') : chalk.yellow('not configured')}`);
281
+ if (hasHook) {
282
+ console.log('\nUse --remove to remove or --check to verify');
283
+ }
284
+ else {
285
+ console.log('\nUse --add to add or --check to verify');
286
+ }
287
+ }
288
+ }
289
+ catch (error) {
290
+ console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
291
+ process.exit(1);
292
+ }
293
+ });
294
+ return command;
295
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Init command - Initialize a .principal-views folder with template files and linting setup
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function createInitCommand(): Command;
6
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoIpC,wBAAgB,iBAAiB,IAAI,OAAO,CAoK3C"}
@@ -0,0 +1,290 @@
1
+ /**
2
+ * Init command - Initialize a .principal-views folder with template files and linting setup
3
+ */
4
+ import { Command } from 'commander';
5
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, chmodSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ import { execSync } from 'node:child_process';
8
+ import chalk from 'chalk';
9
+ const TEMPLATE_LIBRARY = {
10
+ version: '1.0.0',
11
+ name: 'Component Library',
12
+ nodeComponents: {},
13
+ edgeComponents: {},
14
+ };
15
+ const TEMPLATE_CANVAS = {
16
+ nodes: [],
17
+ edges: [],
18
+ };
19
+ const TEMPLATE_PRIVURC = `# Principal View Configuration Lint Rules
20
+ # See: https://github.com/principal-ai/principal-view
21
+
22
+ # File patterns to include
23
+ include:
24
+ - ".principal-views/**/*.yaml"
25
+ - ".principal-views/**/*.yml"
26
+ - ".principal-views/**/*.json"
27
+
28
+ # File patterns to exclude
29
+ exclude:
30
+ - "**/node_modules/**"
31
+ - ".principal-views/library.yaml"
32
+
33
+ # Path to component library (optional)
34
+ library: ".principal-views/library.yaml"
35
+
36
+ # Rule configuration
37
+ # Severity: "off" | "warn" | "error" (or 0 | 1 | 2)
38
+ rules:
39
+ # Schema rules - validate structure
40
+ no-unknown-fields: error
41
+ required-metadata: error
42
+ valid-node-types: error
43
+ valid-edge-types: error
44
+ valid-color-format: error
45
+
46
+ # Reference rules - check cross-references
47
+ connection-type-references: error
48
+ state-transition-references: error
49
+
50
+ # Structure rules - ensure completeness
51
+ minimum-node-sources:
52
+ - error
53
+ - minimum: 1
54
+ excludeNodeTypes: []
55
+ orphaned-node-types: error
56
+ orphaned-edge-types: error
57
+ unreachable-states: error
58
+ dead-end-states:
59
+ - error
60
+ - allowTerminalStates: true
61
+
62
+ # Pattern rules - validate regex patterns
63
+ valid-action-patterns:
64
+ - error
65
+ - strictMode: false
66
+
67
+ # Library rules - check against component library
68
+ library-node-type-match:
69
+ - error
70
+ - requireLibraryMatch: false
71
+ `;
72
+ const HUSKY_PRE_COMMIT = `#!/usr/bin/env sh
73
+ . "$(dirname -- "$0")/_/husky.sh"
74
+
75
+ # Run principal view linting on staged .principal-views files
76
+ privu lint --quiet
77
+ `;
78
+ /**
79
+ * Check if a command exists in PATH
80
+ */
81
+ function commandExists(cmd) {
82
+ try {
83
+ execSync(`which ${cmd}`, { stdio: 'ignore' });
84
+ return true;
85
+ }
86
+ catch {
87
+ return false;
88
+ }
89
+ }
90
+ /**
91
+ * Check if we're in a git repository
92
+ */
93
+ function isGitRepo() {
94
+ try {
95
+ execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore' });
96
+ return true;
97
+ }
98
+ catch {
99
+ return false;
100
+ }
101
+ }
102
+ /**
103
+ * Get the git root directory
104
+ */
105
+ function getGitRoot() {
106
+ try {
107
+ return execSync('git rev-parse --show-toplevel', { encoding: 'utf8' }).trim();
108
+ }
109
+ catch {
110
+ return null;
111
+ }
112
+ }
113
+ /**
114
+ * Check if husky is already installed
115
+ */
116
+ function isHuskyInstalled(gitRoot) {
117
+ return existsSync(join(gitRoot, '.husky'));
118
+ }
119
+ /**
120
+ * Detect package manager
121
+ */
122
+ function detectPackageManager() {
123
+ if (existsSync('bun.lockb'))
124
+ return 'bun';
125
+ if (existsSync('pnpm-lock.yaml'))
126
+ return 'pnpm';
127
+ if (existsSync('yarn.lock'))
128
+ return 'yarn';
129
+ return 'npm';
130
+ }
131
+ export function createInitCommand() {
132
+ const command = new Command('init');
133
+ command
134
+ .description('Initialize a .principal-views folder with template files and linting setup')
135
+ .option('-f, --force', 'Overwrite existing files')
136
+ .option('-n, --name <name>', 'Name for the canvas file', 'architecture')
137
+ .option('--no-husky', 'Skip Husky pre-commit hook setup')
138
+ .option('--no-lint-config', 'Skip .privurc.yaml creation')
139
+ .action(async (options) => {
140
+ try {
141
+ const cwd = process.cwd();
142
+ const principalViewsDir = join(cwd, '.principal-views');
143
+ const canvasFile = join(principalViewsDir, `${options.name}.canvas`);
144
+ const libraryFile = join(principalViewsDir, 'library.yaml');
145
+ const privurcFile = join(cwd, '.privurc.yaml');
146
+ // Check if .principal-views directory exists
147
+ if (!existsSync(principalViewsDir)) {
148
+ mkdirSync(principalViewsDir, { recursive: true });
149
+ console.log(chalk.green(`Created directory: .principal-views/`));
150
+ }
151
+ // Create canvas file
152
+ if (existsSync(canvasFile) && !options.force) {
153
+ console.log(chalk.yellow(`Canvas file already exists: .principal-views/${options.name}.canvas`));
154
+ }
155
+ else {
156
+ writeFileSync(canvasFile, JSON.stringify(TEMPLATE_CANVAS, null, 2));
157
+ console.log(chalk.green(`Created canvas file: .principal-views/${options.name}.canvas`));
158
+ }
159
+ // Create library file
160
+ if (existsSync(libraryFile) && !options.force) {
161
+ console.log(chalk.yellow(`Library file already exists: .principal-views/library.yaml`));
162
+ }
163
+ else {
164
+ const libraryYaml = `version: "1.0.0"
165
+ name: "Component Library"
166
+
167
+ nodeComponents: {}
168
+
169
+ edgeComponents: {}
170
+ `;
171
+ writeFileSync(libraryFile, libraryYaml);
172
+ console.log(chalk.green(`Created library file: .principal-views/library.yaml`));
173
+ }
174
+ // Create .privurc.yaml config file
175
+ if (options.lintConfig !== false) {
176
+ if (existsSync(privurcFile) && !options.force) {
177
+ console.log(chalk.yellow(`Config file already exists: .privurc.yaml`));
178
+ }
179
+ else {
180
+ writeFileSync(privurcFile, TEMPLATE_PRIVURC);
181
+ console.log(chalk.green(`Created lint config: .privurc.yaml`));
182
+ }
183
+ }
184
+ // Set up Husky pre-commit hook
185
+ let huskySetup = false;
186
+ if (options.husky !== false) {
187
+ if (!isGitRepo()) {
188
+ console.log(chalk.yellow(`Skipping Husky setup: not a git repository`));
189
+ }
190
+ else {
191
+ const gitRoot = getGitRoot();
192
+ if (!gitRoot) {
193
+ console.log(chalk.yellow(`Skipping Husky setup: could not find git root`));
194
+ }
195
+ else {
196
+ const huskyDir = join(gitRoot, '.husky');
197
+ const preCommitFile = join(huskyDir, 'pre-commit');
198
+ if (isHuskyInstalled(gitRoot)) {
199
+ // Husky is already installed, just add/update pre-commit hook
200
+ if (existsSync(preCommitFile)) {
201
+ // Check if our hook is already in the file
202
+ const existingContent = readFileSync(preCommitFile, 'utf8');
203
+ if (existingContent.includes('privu lint')) {
204
+ console.log(chalk.yellow(`Husky pre-commit hook already includes privu lint`));
205
+ }
206
+ else {
207
+ // Append our lint command to existing pre-commit
208
+ const updatedContent = existingContent.trimEnd() + '\n\n# Run principal view linting\nprivu lint --quiet\n';
209
+ writeFileSync(preCommitFile, updatedContent);
210
+ console.log(chalk.green(`Updated Husky pre-commit hook with privu lint`));
211
+ huskySetup = true;
212
+ }
213
+ }
214
+ else {
215
+ // Create new pre-commit hook
216
+ writeFileSync(preCommitFile, HUSKY_PRE_COMMIT);
217
+ chmodSync(preCommitFile, '755');
218
+ console.log(chalk.green(`Created Husky pre-commit hook`));
219
+ huskySetup = true;
220
+ }
221
+ }
222
+ else {
223
+ // Husky is not installed, try to install it
224
+ const pm = detectPackageManager();
225
+ const packageJsonPath = join(gitRoot, 'package.json');
226
+ if (!existsSync(packageJsonPath)) {
227
+ console.log(chalk.yellow(`Skipping Husky setup: no package.json found`));
228
+ }
229
+ else {
230
+ console.log(chalk.dim(`Installing Husky...`));
231
+ try {
232
+ // Install husky as dev dependency
233
+ const installCmd = {
234
+ npm: 'npm install --save-dev husky',
235
+ yarn: 'yarn add --dev husky',
236
+ pnpm: 'pnpm add --save-dev husky',
237
+ bun: 'bun add --dev husky',
238
+ }[pm];
239
+ execSync(installCmd, { stdio: 'inherit', cwd: gitRoot });
240
+ // Initialize husky
241
+ execSync('npx husky init', { stdio: 'inherit', cwd: gitRoot });
242
+ // Write our pre-commit hook
243
+ writeFileSync(preCommitFile, HUSKY_PRE_COMMIT);
244
+ chmodSync(preCommitFile, '755');
245
+ console.log(chalk.green(`Installed Husky and created pre-commit hook`));
246
+ huskySetup = true;
247
+ }
248
+ catch (installError) {
249
+ console.log(chalk.yellow(`Could not install Husky automatically: ${installError.message}`));
250
+ console.log(chalk.dim(` You can install it manually: ${pm} add --dev husky && npx husky init`));
251
+ }
252
+ }
253
+ }
254
+ }
255
+ }
256
+ }
257
+ console.log('');
258
+ console.log(chalk.bold('Setup complete!'));
259
+ console.log('');
260
+ console.log(chalk.bold('Files created:'));
261
+ console.log(` • ${chalk.cyan('.principal-views/library.yaml')} - Component library definitions`);
262
+ console.log(` • ${chalk.cyan(`.principal-views/${options.name}.canvas`)} - Graph canvas file`);
263
+ if (options.lintConfig !== false) {
264
+ console.log(` • ${chalk.cyan('.privurc.yaml')} - Lint configuration`);
265
+ }
266
+ if (huskySetup) {
267
+ console.log(` • ${chalk.cyan('.husky/pre-commit')} - Pre-commit hook`);
268
+ }
269
+ console.log('');
270
+ console.log(chalk.bold('Next steps:'));
271
+ console.log(` 1. Define components in ${chalk.cyan('.principal-views/library.yaml')}`);
272
+ console.log(` 2. Build your graph in ${chalk.cyan(`.principal-views/${options.name}.canvas`)}`);
273
+ console.log(` 3. Run ${chalk.cyan('privu lint')} to validate your configuration`);
274
+ if (huskySetup) {
275
+ console.log(` 4. Commits will now automatically lint .principal-views files`);
276
+ }
277
+ console.log('');
278
+ console.log(chalk.bold('Commands:'));
279
+ console.log(` • ${chalk.cyan('privu lint')} - Lint configuration files`);
280
+ console.log(` • ${chalk.cyan('privu lint --json')} - Output lint results as JSON`);
281
+ console.log(` • ${chalk.cyan('privu validate')} - Validate canvas files`);
282
+ console.log(` • ${chalk.cyan('privu doctor')} - Check project setup`);
283
+ }
284
+ catch (error) {
285
+ console.error(chalk.red('Error:'), error.message);
286
+ process.exit(1);
287
+ }
288
+ });
289
+ return command;
290
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Lint command - Lint graph configuration files using the rules engine
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function createLintCommand(): Command;
6
+ //# sourceMappingURL=lint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/commands/lint.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiQpC,wBAAgB,iBAAiB,IAAI,OAAO,CA2K3C"}