@objectstack/cli 3.0.5 → 3.0.7
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.
- package/.turbo/turbo-build.log +2 -26
- package/CHANGELOG.md +27 -0
- package/README.md +98 -54
- package/bin/run-dev.js +5 -0
- package/bin/run.js +5 -0
- package/dist/bin.d.ts +11 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +12 -3759
- package/dist/bin.js.map +1 -0
- package/dist/commands/codemod/v2-to-v3.d.ts +10 -0
- package/dist/commands/codemod/v2-to-v3.d.ts.map +1 -0
- package/dist/commands/codemod/v2-to-v3.js +145 -0
- package/dist/commands/codemod/v2-to-v3.js.map +1 -0
- package/dist/commands/compile.d.ts +13 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +91 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/create.d.ts +91 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +259 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/dev.d.ts +14 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +67 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/diff.d.ts +16 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +239 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/doctor.d.ts +10 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +532 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/explain.d.ts +12 -0
- package/dist/commands/explain.d.ts.map +1 -0
- package/dist/commands/explain.js +368 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/generate.d.ts +17 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +833 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/info.d.ts +12 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +100 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +22 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +295 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.d.ts +13 -0
- package/dist/commands/lint.d.ts.map +1 -0
- package/dist/commands/lint.js +255 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/plugin/add.d.ts +22 -0
- package/dist/commands/plugin/add.d.ts.map +1 -0
- package/dist/commands/plugin/add.js +93 -0
- package/dist/commands/plugin/add.js.map +1 -0
- package/dist/commands/plugin/info.d.ts +10 -0
- package/dist/commands/plugin/info.d.ts.map +1 -0
- package/dist/commands/plugin/info.js +65 -0
- package/dist/commands/plugin/info.js.map +1 -0
- package/dist/commands/plugin/list.d.ts +13 -0
- package/dist/commands/plugin/list.d.ts.map +1 -0
- package/dist/commands/plugin/list.js +78 -0
- package/dist/commands/plugin/list.js.map +1 -0
- package/dist/commands/plugin/remove.d.ts +20 -0
- package/dist/commands/plugin/remove.d.ts.map +1 -0
- package/dist/commands/plugin/remove.js +79 -0
- package/dist/commands/plugin/remove.js.map +1 -0
- package/dist/commands/serve.d.ts +15 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +286 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/studio.d.ts +19 -0
- package/dist/commands/studio.d.ts.map +1 -0
- package/dist/commands/studio.js +43 -0
- package/dist/commands/studio.js.map +1 -0
- package/dist/commands/test.d.ts +13 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +120 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/validate.d.ts +13 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +115 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +15 -114
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -2799
- package/dist/index.js.map +1 -0
- package/dist/utils/config.d.ts +21 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +66 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/format.d.ts +52 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +202 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/plugin-helpers.d.ts +14 -0
- package/dist/utils/plugin-helpers.d.ts.map +1 -0
- package/dist/utils/plugin-helpers.js +40 -0
- package/dist/utils/plugin-helpers.js.map +1 -0
- package/dist/utils/studio.d.ts +58 -0
- package/dist/utils/studio.d.ts.map +1 -0
- package/dist/utils/studio.js +288 -0
- package/dist/utils/studio.js.map +1 -0
- package/package.json +33 -15
- package/src/bin.ts +11 -104
- package/src/commands/{codemod.ts → codemod/v2-to-v3.ts} +21 -28
- package/src/commands/compile.ts +35 -25
- package/src/commands/create.ts +29 -19
- package/src/commands/dev.ts +21 -10
- package/src/commands/diff.ts +28 -19
- package/src/commands/doctor.ts +20 -11
- package/src/commands/explain.ts +20 -10
- package/src/commands/generate.ts +81 -90
- package/src/commands/info.ts +22 -11
- package/src/commands/init.ts +32 -20
- package/src/commands/lint.ts +27 -15
- package/src/commands/plugin/add.ts +112 -0
- package/src/commands/plugin/info.ts +79 -0
- package/src/commands/plugin/list.ts +93 -0
- package/src/commands/plugin/remove.ts +97 -0
- package/src/commands/serve.ts +30 -20
- package/src/commands/studio.ts +21 -11
- package/src/commands/test.ts +21 -10
- package/src/commands/validate.ts +36 -25
- package/src/index.ts +20 -12
- package/src/utils/format.ts +10 -6
- package/src/utils/plugin-helpers.ts +37 -0
- package/src/utils/studio.ts +0 -1
- package/test/commands.test.ts +76 -37
- package/test/plugin-commands.test.ts +42 -160
- package/test/plugin.test.ts +19 -23
- package/tsconfig.build.json +18 -0
- package/bin/objectstack.js +0 -2
- package/dist/chunk-CSHQEILI.js +0 -246
- package/dist/chunk-Q74JNWKD.js +0 -248
- package/dist/config-A7BN6UIT.js +0 -11
- package/dist/config-UN34WBHT.js +0 -10
- package/src/commands/plugin.ts +0 -372
- package/src/utils/plugin-commands.ts +0 -163
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
import { Command, Flags } from '@oclif/core';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { execSync } from 'child_process';
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { normalizeStackInput } from '@objectstack/spec';
|
|
8
|
+
import { printHeader, printSuccess, printWarning, printError, printStep, printInfo } from '../utils/format.js';
|
|
9
|
+
import { loadConfig, configExists } from '../utils/config.js';
|
|
10
|
+
// ─── Config-Aware Checks ────────────────────────────────────────────
|
|
11
|
+
function detectCircularDependencies(objects) {
|
|
12
|
+
const issues = [];
|
|
13
|
+
const graph = new Map();
|
|
14
|
+
for (const obj of objects) {
|
|
15
|
+
const deps = [];
|
|
16
|
+
if (obj.fields && typeof obj.fields === 'object') {
|
|
17
|
+
for (const field of Object.values(obj.fields)) {
|
|
18
|
+
if (field?.type === 'lookup' && field?.reference) {
|
|
19
|
+
deps.push(field.reference);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
graph.set(obj.name, deps);
|
|
24
|
+
}
|
|
25
|
+
// DFS cycle detection
|
|
26
|
+
const visited = new Set();
|
|
27
|
+
const stack = new Set();
|
|
28
|
+
function dfs(node, path) {
|
|
29
|
+
if (stack.has(node)) {
|
|
30
|
+
const cycleStart = path.indexOf(node);
|
|
31
|
+
const cycle = path.slice(cycleStart).concat(node);
|
|
32
|
+
issues.push(`Circular dependency: ${cycle.join(' → ')}`);
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
if (visited.has(node))
|
|
36
|
+
return false;
|
|
37
|
+
visited.add(node);
|
|
38
|
+
stack.add(node);
|
|
39
|
+
for (const dep of graph.get(node) || []) {
|
|
40
|
+
if (graph.has(dep)) {
|
|
41
|
+
dfs(dep, [...path, node]);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
stack.delete(node);
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
for (const name of graph.keys()) {
|
|
48
|
+
if (!visited.has(name)) {
|
|
49
|
+
dfs(name, []);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return issues;
|
|
53
|
+
}
|
|
54
|
+
function findOrphanViews(config) {
|
|
55
|
+
const objectNames = new Set();
|
|
56
|
+
if (Array.isArray(config.objects)) {
|
|
57
|
+
for (const obj of config.objects) {
|
|
58
|
+
if (obj.name)
|
|
59
|
+
objectNames.add(obj.name);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const orphans = [];
|
|
63
|
+
if (Array.isArray(config.views)) {
|
|
64
|
+
for (const view of config.views) {
|
|
65
|
+
if (view.object && !objectNames.has(view.object)) {
|
|
66
|
+
orphans.push(`View "${view.name || '?'}" references non-existent object "${view.object}"`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return orphans;
|
|
71
|
+
}
|
|
72
|
+
function findUnusedObjects(config) {
|
|
73
|
+
const objectNames = new Set();
|
|
74
|
+
if (Array.isArray(config.objects)) {
|
|
75
|
+
for (const obj of config.objects) {
|
|
76
|
+
if (obj.name)
|
|
77
|
+
objectNames.add(obj.name);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const referencedObjects = new Set();
|
|
81
|
+
// Views reference objects
|
|
82
|
+
if (Array.isArray(config.views)) {
|
|
83
|
+
for (const view of config.views) {
|
|
84
|
+
if (view.object)
|
|
85
|
+
referencedObjects.add(view.object);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Flows may reference objects via trigger
|
|
89
|
+
if (Array.isArray(config.flows)) {
|
|
90
|
+
for (const flow of config.flows) {
|
|
91
|
+
if (flow.trigger?.object)
|
|
92
|
+
referencedObjects.add(flow.trigger.object);
|
|
93
|
+
if (flow.object)
|
|
94
|
+
referencedObjects.add(flow.object);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Apps may reference objects via navigation
|
|
98
|
+
if (Array.isArray(config.apps)) {
|
|
99
|
+
for (const app of config.apps) {
|
|
100
|
+
if (Array.isArray(app.navigation)) {
|
|
101
|
+
for (const nav of app.navigation) {
|
|
102
|
+
if (nav.object)
|
|
103
|
+
referencedObjects.add(nav.object);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Agents may reference objects
|
|
109
|
+
if (Array.isArray(config.agents)) {
|
|
110
|
+
for (const agent of config.agents) {
|
|
111
|
+
if (Array.isArray(agent.objects)) {
|
|
112
|
+
for (const o of agent.objects)
|
|
113
|
+
referencedObjects.add(o);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Lookup fields reference other objects
|
|
118
|
+
if (Array.isArray(config.objects)) {
|
|
119
|
+
for (const obj of config.objects) {
|
|
120
|
+
if (obj.fields && typeof obj.fields === 'object') {
|
|
121
|
+
for (const field of Object.values(obj.fields)) {
|
|
122
|
+
if (field?.type === 'lookup' && field?.reference) {
|
|
123
|
+
referencedObjects.add(field.reference);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const unused = [];
|
|
130
|
+
for (const name of objectNames) {
|
|
131
|
+
if (!referencedObjects.has(name)) {
|
|
132
|
+
unused.push(`Object "${name}" is defined but not referenced by any view, flow, app, or agent`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return unused;
|
|
136
|
+
}
|
|
137
|
+
// ─── Filesystem Checks ──────────────────────────────────────────────
|
|
138
|
+
function walkDir(dir, ext) {
|
|
139
|
+
const results = [];
|
|
140
|
+
if (!fs.existsSync(dir))
|
|
141
|
+
return results;
|
|
142
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
143
|
+
for (const entry of entries) {
|
|
144
|
+
if (entry.name === 'node_modules')
|
|
145
|
+
continue;
|
|
146
|
+
const fullPath = path.join(dir, entry.name);
|
|
147
|
+
if (entry.isDirectory()) {
|
|
148
|
+
results.push(...walkDir(fullPath, ext));
|
|
149
|
+
}
|
|
150
|
+
else if (entry.name.endsWith(ext)) {
|
|
151
|
+
results.push(fullPath);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return results;
|
|
155
|
+
}
|
|
156
|
+
function findMissingTests(cwd) {
|
|
157
|
+
const specSrcDir = path.join(cwd, 'packages/spec/src');
|
|
158
|
+
if (!fs.existsSync(specSrcDir))
|
|
159
|
+
return [];
|
|
160
|
+
const missing = [];
|
|
161
|
+
const zodFiles = walkDir(specSrcDir, '.zod.ts');
|
|
162
|
+
for (const zodFile of zodFiles) {
|
|
163
|
+
const testFile = zodFile.replace('.zod.ts', '.test.ts');
|
|
164
|
+
if (!fs.existsSync(testFile)) {
|
|
165
|
+
const relZod = path.relative(specSrcDir, zodFile);
|
|
166
|
+
const relTest = path.relative(specSrcDir, testFile);
|
|
167
|
+
missing.push(`Missing test: ${relTest} (for ${relZod})`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return missing;
|
|
171
|
+
}
|
|
172
|
+
function findDeprecatedUsages(cwd) {
|
|
173
|
+
const specSrcDir = path.join(cwd, 'packages/spec/src');
|
|
174
|
+
if (!fs.existsSync(specSrcDir))
|
|
175
|
+
return [];
|
|
176
|
+
const deprecated = [];
|
|
177
|
+
const tsFiles = walkDir(specSrcDir, '.ts')
|
|
178
|
+
.filter((f) => !f.endsWith('.test.ts'));
|
|
179
|
+
for (const tsFile of tsFiles) {
|
|
180
|
+
try {
|
|
181
|
+
const content = fs.readFileSync(tsFile, 'utf-8');
|
|
182
|
+
const lines = content.split('\n');
|
|
183
|
+
const relPath = path.relative(specSrcDir, tsFile);
|
|
184
|
+
for (let i = 0; i < lines.length; i++) {
|
|
185
|
+
if (lines[i].includes('@deprecated')) {
|
|
186
|
+
deprecated.push(`${relPath}:${i + 1} — @deprecated tag found`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// Skip unreadable files
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return deprecated;
|
|
195
|
+
}
|
|
196
|
+
// ─── Deprecated Pattern Detection ───────────────────────────────────
|
|
197
|
+
const DEPRECATED_PATTERNS = [
|
|
198
|
+
{
|
|
199
|
+
pattern: /\bEnhancedObjectKernel\b/,
|
|
200
|
+
description: 'EnhancedObjectKernel is deprecated in v3',
|
|
201
|
+
replacement: 'Use ObjectKernel instead',
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
pattern: /\bmax_length\b/,
|
|
205
|
+
description: 'snake_case config key: max_length',
|
|
206
|
+
replacement: 'Use maxLength (camelCase)',
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
pattern: /\bdefault_value\b/,
|
|
210
|
+
description: 'snake_case config key: default_value',
|
|
211
|
+
replacement: 'Use defaultValue (camelCase)',
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
pattern: /\bmin_length\b/,
|
|
215
|
+
description: 'snake_case config key: min_length',
|
|
216
|
+
replacement: 'Use minLength (camelCase)',
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
pattern: /\breference_filters\b/,
|
|
220
|
+
description: 'snake_case config key: reference_filters',
|
|
221
|
+
replacement: 'Use referenceFilters (camelCase)',
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
pattern: /\bunique_name\b/,
|
|
225
|
+
description: 'snake_case config key: unique_name',
|
|
226
|
+
replacement: 'Use uniqueName (camelCase)',
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
pattern: /from\s+['"]@objectstack\/core\/enhanced['"]/,
|
|
230
|
+
description: 'Import from deprecated @objectstack/core/enhanced path',
|
|
231
|
+
replacement: "Use import from '@objectstack/core'",
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
pattern: /from\s+['"]@objectstack\/spec\/dist\/[^'"]+['"]/,
|
|
235
|
+
description: 'Import from deprecated @objectstack/spec/dist/ deep path',
|
|
236
|
+
replacement: "Use import from '@objectstack/spec'",
|
|
237
|
+
},
|
|
238
|
+
];
|
|
239
|
+
function scanDeprecatedPatterns(dir) {
|
|
240
|
+
const results = [];
|
|
241
|
+
if (!fs.existsSync(dir))
|
|
242
|
+
return results;
|
|
243
|
+
const tsFiles = walkDir(dir, '.ts').filter(f => !f.endsWith('.test.ts'));
|
|
244
|
+
for (const tsFile of tsFiles) {
|
|
245
|
+
try {
|
|
246
|
+
const content = fs.readFileSync(tsFile, 'utf-8');
|
|
247
|
+
const lines = content.split('\n');
|
|
248
|
+
const relPath = path.relative(process.cwd(), tsFile);
|
|
249
|
+
for (let i = 0; i < lines.length; i++) {
|
|
250
|
+
for (const dp of DEPRECATED_PATTERNS) {
|
|
251
|
+
if (dp.pattern.test(lines[i])) {
|
|
252
|
+
results.push({
|
|
253
|
+
file: relPath,
|
|
254
|
+
line: i + 1,
|
|
255
|
+
description: dp.description,
|
|
256
|
+
replacement: dp.replacement,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
// Skip unreadable files
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return results;
|
|
267
|
+
}
|
|
268
|
+
// ─── Command ────────────────────────────────────────────────────────
|
|
269
|
+
export default class Doctor extends Command {
|
|
270
|
+
static description = 'Check development environment and configuration health';
|
|
271
|
+
static flags = {
|
|
272
|
+
verbose: Flags.boolean({ char: 'v', description: 'Show detailed information' }),
|
|
273
|
+
'scan-deprecations': Flags.boolean({ description: 'Scan for deprecated ObjectStack patterns' }),
|
|
274
|
+
};
|
|
275
|
+
async run() {
|
|
276
|
+
const { flags } = await this.parse(Doctor);
|
|
277
|
+
printHeader('Environment Health Check');
|
|
278
|
+
const results = [];
|
|
279
|
+
// Check Node.js version
|
|
280
|
+
try {
|
|
281
|
+
const nodeVersion = process.version;
|
|
282
|
+
const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0]);
|
|
283
|
+
if (majorVersion >= 18) {
|
|
284
|
+
results.push({
|
|
285
|
+
name: 'Node.js',
|
|
286
|
+
status: 'ok',
|
|
287
|
+
message: `Version ${nodeVersion}`,
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
results.push({
|
|
292
|
+
name: 'Node.js',
|
|
293
|
+
status: 'error',
|
|
294
|
+
message: `Version ${nodeVersion} (requires >= 18.0.0)`,
|
|
295
|
+
fix: 'Upgrade Node.js: https://nodejs.org',
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
results.push({
|
|
301
|
+
name: 'Node.js',
|
|
302
|
+
status: 'error',
|
|
303
|
+
message: 'Not found',
|
|
304
|
+
fix: 'Install Node.js: https://nodejs.org',
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
// Check pnpm
|
|
308
|
+
try {
|
|
309
|
+
const pnpmVersion = execSync('pnpm -v', { encoding: 'utf-8' }).trim();
|
|
310
|
+
results.push({
|
|
311
|
+
name: 'pnpm',
|
|
312
|
+
status: 'ok',
|
|
313
|
+
message: `Version ${pnpmVersion}`,
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
results.push({
|
|
318
|
+
name: 'pnpm',
|
|
319
|
+
status: 'error',
|
|
320
|
+
message: 'Not found',
|
|
321
|
+
fix: 'Install pnpm: npm install -g pnpm@10.28.1',
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
// Check TypeScript
|
|
325
|
+
try {
|
|
326
|
+
const tscVersion = execSync('tsc -v', { encoding: 'utf-8' }).trim();
|
|
327
|
+
results.push({
|
|
328
|
+
name: 'TypeScript',
|
|
329
|
+
status: 'ok',
|
|
330
|
+
message: tscVersion,
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
catch (error) {
|
|
334
|
+
results.push({
|
|
335
|
+
name: 'TypeScript',
|
|
336
|
+
status: 'warning',
|
|
337
|
+
message: 'Not found in PATH',
|
|
338
|
+
fix: 'Installed locally via pnpm',
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
// Check if dependencies are installed
|
|
342
|
+
const cwd = process.cwd();
|
|
343
|
+
const nodeModulesPath = path.join(cwd, 'node_modules');
|
|
344
|
+
if (fs.existsSync(nodeModulesPath)) {
|
|
345
|
+
results.push({
|
|
346
|
+
name: 'Dependencies',
|
|
347
|
+
status: 'ok',
|
|
348
|
+
message: 'Installed',
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
results.push({
|
|
353
|
+
name: 'Dependencies',
|
|
354
|
+
status: 'error',
|
|
355
|
+
message: 'Not installed',
|
|
356
|
+
fix: 'Run: pnpm install',
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
// Check if spec package is built
|
|
360
|
+
const specDistPath = path.join(cwd, 'packages/spec/dist');
|
|
361
|
+
if (fs.existsSync(specDistPath)) {
|
|
362
|
+
results.push({
|
|
363
|
+
name: '@objectstack/spec',
|
|
364
|
+
status: 'ok',
|
|
365
|
+
message: 'Built',
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
results.push({
|
|
370
|
+
name: '@objectstack/spec',
|
|
371
|
+
status: 'warning',
|
|
372
|
+
message: 'Not built',
|
|
373
|
+
fix: 'Run: pnpm --filter @objectstack/spec build',
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
// Check Git
|
|
377
|
+
try {
|
|
378
|
+
const gitVersion = execSync('git --version', { encoding: 'utf-8' }).trim();
|
|
379
|
+
results.push({
|
|
380
|
+
name: 'Git',
|
|
381
|
+
status: 'ok',
|
|
382
|
+
message: gitVersion,
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
catch (error) {
|
|
386
|
+
results.push({
|
|
387
|
+
name: 'Git',
|
|
388
|
+
status: 'warning',
|
|
389
|
+
message: 'Not found',
|
|
390
|
+
fix: 'Install Git for version control',
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
// Display environment results
|
|
394
|
+
let hasErrors = false;
|
|
395
|
+
let hasWarnings = false;
|
|
396
|
+
console.log('');
|
|
397
|
+
results.forEach((result) => {
|
|
398
|
+
const padded = result.name.padEnd(20);
|
|
399
|
+
if (result.status === 'ok') {
|
|
400
|
+
printSuccess(`${padded} ${result.message}`);
|
|
401
|
+
}
|
|
402
|
+
else if (result.status === 'warning') {
|
|
403
|
+
printWarning(`${padded} ${result.message}`);
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
printError(`${padded} ${result.message}`);
|
|
407
|
+
}
|
|
408
|
+
if (result.fix && (flags.verbose || result.status === 'error')) {
|
|
409
|
+
console.log(chalk.dim(` → ${result.fix}`));
|
|
410
|
+
}
|
|
411
|
+
if (result.status === 'error')
|
|
412
|
+
hasErrors = true;
|
|
413
|
+
if (result.status === 'warning')
|
|
414
|
+
hasWarnings = true;
|
|
415
|
+
});
|
|
416
|
+
// ── Extended Checks ──────────────────────────────────────────────
|
|
417
|
+
// Missing test files
|
|
418
|
+
printStep('Checking for missing test files...');
|
|
419
|
+
const missingTests = findMissingTests(cwd);
|
|
420
|
+
if (missingTests.length > 0) {
|
|
421
|
+
hasWarnings = true;
|
|
422
|
+
for (const msg of missingTests) {
|
|
423
|
+
printWarning(msg);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
printSuccess('Test coverage All *.zod.ts files have matching tests');
|
|
428
|
+
}
|
|
429
|
+
// Deprecated usage detection
|
|
430
|
+
printStep('Scanning for @deprecated usage...');
|
|
431
|
+
const deprecatedUsages = findDeprecatedUsages(cwd);
|
|
432
|
+
if (deprecatedUsages.length > 0) {
|
|
433
|
+
hasWarnings = true;
|
|
434
|
+
for (const msg of deprecatedUsages) {
|
|
435
|
+
printWarning(`Deprecated: ${msg}`);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
printSuccess('Deprecations No @deprecated tags found');
|
|
440
|
+
}
|
|
441
|
+
// Config-aware checks (only if config exists)
|
|
442
|
+
if (configExists()) {
|
|
443
|
+
printStep('Loading configuration for analysis...');
|
|
444
|
+
try {
|
|
445
|
+
const { config: rawConfig } = await loadConfig();
|
|
446
|
+
const config = normalizeStackInput(rawConfig);
|
|
447
|
+
// Circular dependency detection
|
|
448
|
+
if (Array.isArray(config.objects) && config.objects.length > 0) {
|
|
449
|
+
printStep('Checking for circular dependencies...');
|
|
450
|
+
const cycles = detectCircularDependencies(config.objects);
|
|
451
|
+
if (cycles.length > 0) {
|
|
452
|
+
hasWarnings = true;
|
|
453
|
+
for (const msg of cycles) {
|
|
454
|
+
printWarning(msg);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
printSuccess('Dependencies No circular references detected');
|
|
459
|
+
}
|
|
460
|
+
// Unused objects
|
|
461
|
+
printStep('Checking for unused objects...');
|
|
462
|
+
const unused = findUnusedObjects(config);
|
|
463
|
+
if (unused.length > 0) {
|
|
464
|
+
hasWarnings = true;
|
|
465
|
+
for (const msg of unused) {
|
|
466
|
+
printWarning(msg);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
printSuccess('Object usage All objects are referenced');
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
// Orphan views
|
|
474
|
+
if (Array.isArray(config.views) && config.views.length > 0) {
|
|
475
|
+
printStep('Checking for orphan views...');
|
|
476
|
+
const orphans = findOrphanViews(config);
|
|
477
|
+
if (orphans.length > 0) {
|
|
478
|
+
hasWarnings = true;
|
|
479
|
+
for (const msg of orphans) {
|
|
480
|
+
printWarning(msg);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
printSuccess('View integrity All views reference valid objects');
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
catch {
|
|
489
|
+
printWarning('Could not load config for analysis (config checks skipped)');
|
|
490
|
+
hasWarnings = true;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
// ── Deprecation Pattern Scan ─────────────────────────────────────
|
|
494
|
+
if (flags['scan-deprecations']) {
|
|
495
|
+
printStep('Scanning for deprecated ObjectStack patterns...');
|
|
496
|
+
const scanDir = path.join(cwd, 'src');
|
|
497
|
+
const deprecations = scanDeprecatedPatterns(scanDir);
|
|
498
|
+
if (deprecations.length > 0) {
|
|
499
|
+
hasWarnings = true;
|
|
500
|
+
for (const dep of deprecations) {
|
|
501
|
+
printWarning(`${dep.file}:${dep.line} — ${dep.description}`);
|
|
502
|
+
if (flags.verbose) {
|
|
503
|
+
console.log(chalk.dim(` → ${dep.replacement}`));
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
console.log('');
|
|
507
|
+
printInfo(`Found ${deprecations.length} deprecated pattern(s). Run \`objectstack codemod v2-to-v3\` to auto-fix.`);
|
|
508
|
+
}
|
|
509
|
+
else {
|
|
510
|
+
printSuccess('Deprecation scan No deprecated patterns found');
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
console.log('');
|
|
514
|
+
// Summary
|
|
515
|
+
if (hasErrors) {
|
|
516
|
+
console.log(chalk.red('❌ Some critical issues found. Please fix them before continuing.'));
|
|
517
|
+
results
|
|
518
|
+
.filter(r => r.status === 'error' && r.fix)
|
|
519
|
+
.forEach(r => console.log(chalk.dim(` ${r.fix}`)));
|
|
520
|
+
process.exit(1);
|
|
521
|
+
}
|
|
522
|
+
else if (hasWarnings) {
|
|
523
|
+
console.log(chalk.yellow('⚠️ Environment is functional but has some warnings.'));
|
|
524
|
+
console.log(chalk.dim(' Run with --verbose to see fix suggestions.'));
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
console.log(chalk.green('✅ Environment is healthy and ready for development!'));
|
|
528
|
+
}
|
|
529
|
+
console.log('');
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Explain extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
schema: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=explain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/commands/explain.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AA0TnD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,OAAgB,WAAW,SAAiE;IAE5F,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;MAEnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoF3B"}
|