@goshenkata/dryscan-cli 1.2.10 → 1.4.0
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/dist/dupes.d.ts.map +1 -1
- package/dist/dupes.js +3 -11
- package/dist/dupes.js.map +1 -1
- package/dist/templates/report.hbs +100 -7
- package/dist/uiServer.d.ts +1 -0
- package/dist/uiServer.d.ts.map +1 -1
- package/dist/uiServer.js +37 -6
- package/dist/uiServer.js.map +1 -1
- package/package.json +2 -2
package/dist/dupes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dupes.d.ts","sourceRoot":"","sources":["../src/dupes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dupes.d.ts","sourceRoot":"","sources":["../src/dupes.ts"],"names":[],"mappings":"AAOA,KAAK,YAAY,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAkErE,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD3F"}
|
package/dist/dupes.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { resolve } from 'path';
|
|
2
2
|
import { DryScan, configStore } from '@goshenkata/dryscan-core';
|
|
3
|
-
import { writeDuplicateReport } from './reports.js';
|
|
4
3
|
import { DuplicateReportServer, renderHtmlReport } from './uiServer.js';
|
|
5
4
|
const UI_PORT = 3000;
|
|
6
5
|
function formatCodeSnippet(code, maxLines = 15) {
|
|
@@ -15,7 +14,7 @@ function formatCodeSnippet(code, maxLines = 15) {
|
|
|
15
14
|
.join('\n');
|
|
16
15
|
return formatted + (truncated ? `\n ... │ (${lines.length - maxLines} more lines)` : '');
|
|
17
16
|
}
|
|
18
|
-
function formatDuplicates(report
|
|
17
|
+
function formatDuplicates(report) {
|
|
19
18
|
const { duplicates, score, threshold } = report;
|
|
20
19
|
console.log('\n' + '═'.repeat(80));
|
|
21
20
|
console.log(`\n📊 DUPLICATION SCORE: ${score.score.toFixed(2)}% - ${score.grade}`);
|
|
@@ -23,9 +22,6 @@ function formatDuplicates(report, reportPath) {
|
|
|
23
22
|
console.log(` Duplicate Lines (weighted): ${score.duplicateLines.toLocaleString()}`);
|
|
24
23
|
console.log(` Duplicate Groups: ${score.duplicateGroups}`);
|
|
25
24
|
console.log('\n' + '═'.repeat(80));
|
|
26
|
-
if (reportPath) {
|
|
27
|
-
console.log(`\n🗂 Report saved to ${reportPath}`);
|
|
28
|
-
}
|
|
29
25
|
if (duplicates.length === 0) {
|
|
30
26
|
console.log(`\n✓ No duplicates found (threshold: ${(threshold * 100).toFixed(0)}%)\n`);
|
|
31
27
|
return;
|
|
@@ -67,7 +63,6 @@ export async function handleDupesCommand(path, options) {
|
|
|
67
63
|
try {
|
|
68
64
|
const scanner = new DryScan(repoPath);
|
|
69
65
|
const report = await scanner.buildDuplicateReport();
|
|
70
|
-
const reportPath = await writeDuplicateReport(repoPath, report);
|
|
71
66
|
if (options.ui) {
|
|
72
67
|
const server = new DuplicateReportServer({
|
|
73
68
|
repoPath,
|
|
@@ -90,13 +85,10 @@ export async function handleDupesCommand(path, options) {
|
|
|
90
85
|
return;
|
|
91
86
|
}
|
|
92
87
|
if (options.json) {
|
|
93
|
-
originalLog(JSON.stringify(
|
|
94
|
-
...report,
|
|
95
|
-
reportPath,
|
|
96
|
-
}, null, 2));
|
|
88
|
+
originalLog(JSON.stringify(report, null, 2));
|
|
97
89
|
}
|
|
98
90
|
else {
|
|
99
|
-
formatDuplicates(report
|
|
91
|
+
formatDuplicates(report);
|
|
100
92
|
}
|
|
101
93
|
}
|
|
102
94
|
finally {
|
package/dist/dupes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dupes.js","sourceRoot":"","sources":["../src/dupes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dupes.js","sourceRoot":"","sources":["../src/dupes.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,24 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>DryScan Duplicates</title>
|
|
7
7
|
<link id="hljs-theme" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css" />
|
|
8
|
-
<
|
|
8
|
+
<style>
|
|
9
|
+
/* Minimal line numbers styling */
|
|
10
|
+
.hljs.line-numbers {
|
|
11
|
+
padding-left: 3em;
|
|
12
|
+
position: relative;
|
|
13
|
+
}
|
|
14
|
+
.hljs.line-numbers::before {
|
|
15
|
+
content: attr(data-line-numbers);
|
|
16
|
+
position: absolute;
|
|
17
|
+
left: 0;
|
|
18
|
+
top: 0;
|
|
19
|
+
color: var(--muted);
|
|
20
|
+
font-size: 0.85em;
|
|
21
|
+
line-height: inherit;
|
|
22
|
+
padding-right: 0.5em;
|
|
23
|
+
border-right: 1px solid var(--border);
|
|
24
|
+
}
|
|
25
|
+
</style>
|
|
9
26
|
<style>
|
|
10
27
|
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500&display=swap');
|
|
11
28
|
:root {
|
|
@@ -223,7 +240,7 @@
|
|
|
223
240
|
<script id="dup-data" type="application/json">{{{duplicatesJson}}}</script>
|
|
224
241
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
|
|
225
242
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/java.min.js"></script>
|
|
226
|
-
<
|
|
243
|
+
<div id="loading-indicator" style="display: none; text-align: center; padding: 20px; color: var(--muted);">Loading more...</div>
|
|
227
244
|
<script type="module">
|
|
228
245
|
const dataEl = document.getElementById('dup-data');
|
|
229
246
|
const modal = document.getElementById('modal');
|
|
@@ -232,7 +249,14 @@
|
|
|
232
249
|
const themeToggle = document.getElementById('theme-toggle');
|
|
233
250
|
const themeLabel = document.getElementById('theme-label');
|
|
234
251
|
const themeLink = document.getElementById('hljs-theme');
|
|
235
|
-
const
|
|
252
|
+
const loadingIndicator = document.getElementById('loading-indicator');
|
|
253
|
+
|
|
254
|
+
// Pagination state
|
|
255
|
+
let allGroups = JSON.parse(dataEl.textContent || '[]');
|
|
256
|
+
let displayedGroups = [];
|
|
257
|
+
let offset = 0;
|
|
258
|
+
const pageSize = 100;
|
|
259
|
+
let isLoading = false;
|
|
236
260
|
const toast = (msg) => alert(msg);
|
|
237
261
|
|
|
238
262
|
const applyTheme = (next) => {
|
|
@@ -273,13 +297,77 @@
|
|
|
273
297
|
|
|
274
298
|
const render = () => {
|
|
275
299
|
container.innerHTML = '';
|
|
276
|
-
|
|
300
|
+
displayedGroups.forEach((group, idx) => {
|
|
277
301
|
container.appendChild(renderGroup(group, idx));
|
|
278
302
|
});
|
|
279
303
|
hljs.highlightAll();
|
|
280
|
-
document.querySelectorAll('code.
|
|
304
|
+
document.querySelectorAll('pre > code.line-numbers').forEach(el => {
|
|
305
|
+
try {
|
|
306
|
+
hljs.lineNumbersBlock(el);
|
|
307
|
+
} catch (err) {
|
|
308
|
+
console.warn('Could not apply line numbers to code block:', err);
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
const loadMore = async () => {
|
|
314
|
+
if (isLoading || offset >= allGroups.length) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
isLoading = true;
|
|
319
|
+
loadingIndicator.style.display = 'block';
|
|
320
|
+
|
|
321
|
+
try {
|
|
322
|
+
// Simulate fetch for first load from embedded data, then fetch from API for subsequent loads
|
|
323
|
+
let newGroups;
|
|
324
|
+
if (offset === 0 && allGroups.length > 0) {
|
|
325
|
+
// First load: use embedded data
|
|
326
|
+
newGroups = allGroups.slice(offset, offset + pageSize);
|
|
327
|
+
} else {
|
|
328
|
+
// Subsequent loads: fetch from API
|
|
329
|
+
const res = await fetch(`/api/duplicates?offset=${offset}&limit=${pageSize}`);
|
|
330
|
+
if (!res.ok) throw new Error('Failed to load more duplicates');
|
|
331
|
+
const data = await res.json();
|
|
332
|
+
newGroups = data.data;
|
|
333
|
+
allGroups = data.data.length < pageSize ? displayedGroups.concat(data.data) : null;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
displayedGroups = displayedGroups.concat(newGroups);
|
|
337
|
+
offset += pageSize;
|
|
338
|
+
|
|
339
|
+
const startIdx = displayedGroups.length - newGroups.length;
|
|
340
|
+
newGroups.forEach((group, idx) => {
|
|
341
|
+
container.appendChild(renderGroup(group, startIdx + idx));
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
hljs.highlightAll();
|
|
345
|
+
// Only apply line numbers to code elements that have line-numbers class and are in pre tags
|
|
346
|
+
document.querySelectorAll('pre > code.line-numbers').forEach(el => {
|
|
347
|
+
try {
|
|
348
|
+
hljs.lineNumbersBlock(el);
|
|
349
|
+
} catch (err) {
|
|
350
|
+
console.warn('Could not apply line numbers to code block:', err);
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
} catch (err) {
|
|
354
|
+
console.error('Error loading more duplicates:', err);
|
|
355
|
+
toast('Failed to load more duplicates');
|
|
356
|
+
} finally {
|
|
357
|
+
isLoading = false;
|
|
358
|
+
loadingIndicator.style.display = 'none';
|
|
359
|
+
}
|
|
281
360
|
};
|
|
282
361
|
|
|
362
|
+
// Set up Intersection Observer for infinite scroll
|
|
363
|
+
const observer = new IntersectionObserver((entries) => {
|
|
364
|
+
if (entries[0].isIntersecting && offset < (allGroups.length || displayedGroups.length)) {
|
|
365
|
+
loadMore();
|
|
366
|
+
}
|
|
367
|
+
}, { rootMargin: '100px' });
|
|
368
|
+
|
|
369
|
+
observer.observe(loadingIndicator);
|
|
370
|
+
|
|
283
371
|
const regenerateReport = async () => {
|
|
284
372
|
const res = await fetch('/api/regenerate', { method: 'POST' });
|
|
285
373
|
if (!res.ok) {
|
|
@@ -398,7 +486,11 @@
|
|
|
398
486
|
modal.classList.add('active');
|
|
399
487
|
return;
|
|
400
488
|
}
|
|
401
|
-
|
|
489
|
+
try {
|
|
490
|
+
hljs.lineNumbersBlock(modalCode);
|
|
491
|
+
} catch (err) {
|
|
492
|
+
console.warn('Could not apply line numbers to modal code block:', err);
|
|
493
|
+
}
|
|
402
494
|
modalTitle.textContent = data.path;
|
|
403
495
|
modalCode.textContent = data.content;
|
|
404
496
|
modalCode.className = languageClass(data.path) + ' hljs line-numbers';
|
|
@@ -448,7 +540,8 @@
|
|
|
448
540
|
});
|
|
449
541
|
{{/if}}
|
|
450
542
|
|
|
451
|
-
|
|
543
|
+
// Initial load
|
|
544
|
+
loadMore();
|
|
452
545
|
</script>
|
|
453
546
|
</body>
|
|
454
547
|
</html>
|
package/dist/uiServer.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export declare class DuplicateReportServer {
|
|
|
27
27
|
constructor(options: UiServerOptions);
|
|
28
28
|
start(): Promise<void>;
|
|
29
29
|
private regenerateReport;
|
|
30
|
+
private applyExclusionFromCurrentState;
|
|
30
31
|
}
|
|
31
32
|
/**
|
|
32
33
|
* Renders the HTML report as a string without starting a server.
|
package/dist/uiServer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uiServer.d.ts","sourceRoot":"","sources":["../src/uiServer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"uiServer.d.ts","sourceRoot":"","sources":["../src/uiServer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjF,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,KAAK,EAAE,gBAAgB,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAYD;;GAEG;AACH,qBAAa,qBAAqB;IASpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuC;IACvE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,KAAK,CAA+E;IAC5F,OAAO,CAAC,YAAY,CAAC,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;gBAEd,OAAO,EAAE,eAAe;IAY/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YA6Gd,gBAAgB;YAwBhB,8BAA8B;CAyB7C;AAkCD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAUlF"}
|
package/dist/uiServer.js
CHANGED
|
@@ -5,7 +5,6 @@ import { readFile } from "fs/promises";
|
|
|
5
5
|
import { fileURLToPath } from "url";
|
|
6
6
|
import Handlebars from "handlebars";
|
|
7
7
|
import { DryScan, configStore } from "@goshenkata/dryscan-core";
|
|
8
|
-
import { applyExclusionFromLatestReport, writeDuplicateReport } from "./reports.js";
|
|
9
8
|
const defaultPort = 3000;
|
|
10
9
|
const gradeMeta = {
|
|
11
10
|
Excellent: { emoji: "🌟", className: "excellent" },
|
|
@@ -45,7 +44,16 @@ export class DuplicateReportServer {
|
|
|
45
44
|
const url = new URL(req.url || "/", `http://${req.headers.host}`);
|
|
46
45
|
if (url.pathname === "/api/duplicates") {
|
|
47
46
|
res.setHeader("content-type", "application/json");
|
|
48
|
-
|
|
47
|
+
// Support pagination with offset and limit query parameters
|
|
48
|
+
const offset = Math.max(0, parseInt(url.searchParams.get("offset") || "0", 10));
|
|
49
|
+
const limit = Math.max(1, parseInt(url.searchParams.get("limit") || "100", 10));
|
|
50
|
+
const paginated = this.state.duplicates.slice(offset, offset + limit);
|
|
51
|
+
res.end(JSON.stringify({
|
|
52
|
+
data: paginated,
|
|
53
|
+
total: this.state.duplicates.length,
|
|
54
|
+
offset,
|
|
55
|
+
limit,
|
|
56
|
+
}));
|
|
49
57
|
return;
|
|
50
58
|
}
|
|
51
59
|
if (url.pathname === "/api/exclusions" && req.method === "POST") {
|
|
@@ -57,7 +65,7 @@ export class DuplicateReportServer {
|
|
|
57
65
|
res.end(JSON.stringify({ error: "Missing or invalid id" }));
|
|
58
66
|
return;
|
|
59
67
|
}
|
|
60
|
-
const result = await
|
|
68
|
+
const result = await this.applyExclusionFromCurrentState(id);
|
|
61
69
|
await this.regenerateReport();
|
|
62
70
|
res.setHeader("content-type", "application/json");
|
|
63
71
|
res.end(JSON.stringify({
|
|
@@ -110,9 +118,11 @@ export class DuplicateReportServer {
|
|
|
110
118
|
return;
|
|
111
119
|
}
|
|
112
120
|
res.setHeader("content-type", "text/html; charset=utf-8");
|
|
121
|
+
// Only embed first 100 duplicates in initial HTML for better performance
|
|
122
|
+
const initialDuplicates = this.state.duplicates.slice(0, 100);
|
|
113
123
|
const html = template({
|
|
114
124
|
thresholdPct: Math.round(this.state.threshold * 100),
|
|
115
|
-
duplicatesJson: JSON.stringify(
|
|
125
|
+
duplicatesJson: JSON.stringify(initialDuplicates),
|
|
116
126
|
score: buildScoreView(this.state.score),
|
|
117
127
|
enableExclusions: true,
|
|
118
128
|
});
|
|
@@ -139,7 +149,6 @@ export class DuplicateReportServer {
|
|
|
139
149
|
await this.configReady;
|
|
140
150
|
const scanner = new DryScan(this.repoRoot);
|
|
141
151
|
const report = await scanner.buildDuplicateReport();
|
|
142
|
-
await writeDuplicateReport(this.repoRoot, report);
|
|
143
152
|
this.state = {
|
|
144
153
|
duplicates: report.duplicates,
|
|
145
154
|
score: report.score,
|
|
@@ -154,6 +163,26 @@ export class DuplicateReportServer {
|
|
|
154
163
|
this.regenerating = undefined;
|
|
155
164
|
}
|
|
156
165
|
}
|
|
166
|
+
async applyExclusionFromCurrentState(shortId) {
|
|
167
|
+
await this.configReady;
|
|
168
|
+
const group = this.state.duplicates.find((d) => d.shortId === shortId);
|
|
169
|
+
if (!group) {
|
|
170
|
+
throw new Error(`No duplicate group found for id ${shortId}.`);
|
|
171
|
+
}
|
|
172
|
+
if (!group.exclusionString) {
|
|
173
|
+
throw new Error("Duplicate group cannot be excluded because it lacks a pair key.");
|
|
174
|
+
}
|
|
175
|
+
const config = await configStore.get(this.repoRoot);
|
|
176
|
+
const alreadyPresent = config.excludedPairs.includes(group.exclusionString);
|
|
177
|
+
if (alreadyPresent) {
|
|
178
|
+
return { exclusion: group.exclusionString, added: false };
|
|
179
|
+
}
|
|
180
|
+
await configStore.save(this.repoRoot, {
|
|
181
|
+
...config,
|
|
182
|
+
excludedPairs: [...config.excludedPairs, group.exclusionString],
|
|
183
|
+
});
|
|
184
|
+
return { exclusion: group.exclusionString, added: true };
|
|
185
|
+
}
|
|
157
186
|
}
|
|
158
187
|
async function loadTemplate() {
|
|
159
188
|
const templatePath = join(fileURLToPath(new URL(".", import.meta.url)), "templates", "report.hbs");
|
|
@@ -191,9 +220,11 @@ function buildScoreView(score) {
|
|
|
191
220
|
*/
|
|
192
221
|
export async function renderHtmlReport(options) {
|
|
193
222
|
const template = await loadTemplate();
|
|
223
|
+
// Only embed first 100 duplicates in initial HTML for better performance
|
|
224
|
+
const initialDuplicates = options.duplicates.slice(0, 100);
|
|
194
225
|
return template({
|
|
195
226
|
thresholdPct: Math.round(options.threshold * 100),
|
|
196
|
-
duplicatesJson: JSON.stringify(
|
|
227
|
+
duplicatesJson: JSON.stringify(initialDuplicates),
|
|
197
228
|
score: buildScoreView(options.score),
|
|
198
229
|
enableExclusions: options.enableExclusions,
|
|
199
230
|
});
|
package/dist/uiServer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uiServer.js","sourceRoot":"","sources":["../src/uiServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAU,MAAM,MAAM,CAAC;AAC5C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"uiServer.js","sourceRoot":"","sources":["../src/uiServer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goshenkata/dryscan-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "CLI tool for DryScan - semantic code duplication analyzer",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cli.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"url": "https://github.com/Goshenkata/DryScan.git"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@goshenkata/dryscan-core": "^1.
|
|
33
|
+
"@goshenkata/dryscan-core": "^1.4.0",
|
|
34
34
|
"commander": "^14.0.2",
|
|
35
35
|
"handlebars": "^4.7.8"
|
|
36
36
|
},
|