@hyperfrontend/project-scope 0.1.0 → 0.2.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.
- package/CHANGELOG.md +15 -3
- package/README.md +2 -0
- package/analyze.d.ts.map +1 -1
- package/cli/commands/analyze.d.ts +8 -0
- package/cli/commands/analyze.d.ts.map +1 -1
- package/cli/commands/config.d.ts +7 -0
- package/cli/commands/config.d.ts.map +1 -1
- package/cli/commands/deps.d.ts +6 -0
- package/cli/commands/deps.d.ts.map +1 -1
- package/cli/commands/tree.d.ts +12 -0
- package/cli/commands/tree.d.ts.map +1 -1
- package/cli/index.cjs.js +73 -206
- package/cli/index.cjs.js.map +1 -1
- package/cli/index.esm.js +73 -206
- package/cli/index.esm.js.map +1 -1
- package/cli/run.d.ts.map +1 -1
- package/core/cache.d.ts +1 -0
- package/core/cache.d.ts.map +1 -1
- package/core/encoding/convert.d.ts.map +1 -1
- package/core/encoding/detect.d.ts +5 -0
- package/core/encoding/detect.d.ts.map +1 -1
- package/core/encoding/index.cjs.js +2 -23
- package/core/encoding/index.cjs.js.map +1 -1
- package/core/encoding/index.esm.js +2 -23
- package/core/encoding/index.esm.js.map +1 -1
- package/core/errors/structured-errors.d.ts +2 -0
- package/core/errors/structured-errors.d.ts.map +1 -1
- package/core/fs/directory.d.ts +3 -0
- package/core/fs/directory.d.ts.map +1 -1
- package/core/fs/index.cjs.js +0 -14
- package/core/fs/index.cjs.js.map +1 -1
- package/core/fs/index.esm.js +0 -14
- package/core/fs/index.esm.js.map +1 -1
- package/core/fs/read.d.ts +11 -3
- package/core/fs/read.d.ts.map +1 -1
- package/core/fs/traversal.d.ts.map +1 -1
- package/core/index.cjs.js +11 -63
- package/core/index.cjs.js.map +1 -1
- package/core/index.esm.js +11 -63
- package/core/index.esm.js.map +1 -1
- package/core/logger.d.ts.map +1 -1
- package/core/path/index.cjs.js +5 -2
- package/core/path/index.cjs.js.map +1 -1
- package/core/path/index.esm.js +5 -2
- package/core/path/index.esm.js.map +1 -1
- package/core/path/normalize.d.ts.map +1 -1
- package/core/patterns/glob.d.ts +0 -4
- package/core/patterns/glob.d.ts.map +1 -1
- package/core/platform/detect.d.ts.map +1 -1
- package/core/platform/index.cjs.js +0 -10
- package/core/platform/index.cjs.js.map +1 -1
- package/core/platform/index.esm.js +0 -10
- package/core/platform/index.esm.js.map +1 -1
- package/core/platform/line-endings.d.ts.map +1 -1
- package/heuristics/dependencies/analyze.d.ts.map +1 -1
- package/heuristics/dependencies/index.cjs.js +0 -17
- package/heuristics/dependencies/index.cjs.js.map +1 -1
- package/heuristics/dependencies/index.esm.js +0 -17
- package/heuristics/dependencies/index.esm.js.map +1 -1
- package/heuristics/entry-points/discover.d.ts +34 -7
- package/heuristics/entry-points/discover.d.ts.map +1 -1
- package/heuristics/entry-points/index.cjs.js +6 -34
- package/heuristics/entry-points/index.cjs.js.map +1 -1
- package/heuristics/entry-points/index.esm.js +6 -34
- package/heuristics/entry-points/index.esm.js.map +1 -1
- package/heuristics/framework/index.cjs.js +1 -63
- package/heuristics/framework/index.cjs.js.map +1 -1
- package/heuristics/framework/index.esm.js +1 -63
- package/heuristics/framework/index.esm.js.map +1 -1
- package/heuristics/index.cjs.js +7 -88
- package/heuristics/index.cjs.js.map +1 -1
- package/heuristics/index.esm.js +7 -88
- package/heuristics/index.esm.js.map +1 -1
- package/heuristics/project-type/index.cjs.js +1 -63
- package/heuristics/project-type/index.cjs.js.map +1 -1
- package/heuristics/project-type/index.esm.js +1 -63
- package/heuristics/project-type/index.esm.js.map +1 -1
- package/index.cjs.js +86 -294
- package/index.cjs.js.map +1 -1
- package/index.esm.js +86 -294
- package/index.esm.js.map +1 -1
- package/nx/detect.d.ts.map +1 -1
- package/nx/devkit-loader.d.ts.map +1 -1
- package/nx/index.cjs.js +0 -29
- package/nx/index.cjs.js.map +1 -1
- package/nx/index.esm.js +0 -29
- package/nx/index.esm.js.map +1 -1
- package/nx/project-config.d.ts +2 -0
- package/nx/project-config.d.ts.map +1 -1
- package/package.json +9 -9
- package/project/config/index.cjs.js +4 -46
- package/project/config/index.cjs.js.map +1 -1
- package/project/config/index.esm.js +4 -46
- package/project/config/index.esm.js.map +1 -1
- package/project/config/patterns.d.ts.map +1 -1
- package/project/index.cjs.js +4 -47
- package/project/index.cjs.js.map +1 -1
- package/project/index.esm.js +4 -47
- package/project/index.esm.js.map +1 -1
- package/project/package/index.cjs.js +0 -11
- package/project/package/index.cjs.js.map +1 -1
- package/project/package/index.esm.js +0 -11
- package/project/package/index.esm.js.map +1 -1
- package/project/package/read.d.ts +1 -0
- package/project/package/read.d.ts.map +1 -1
- package/project/root/index.cjs.js +0 -11
- package/project/root/index.cjs.js.map +1 -1
- package/project/root/index.esm.js +0 -11
- package/project/root/index.esm.js.map +1 -1
- package/project/traversal/index.cjs.js +4 -28
- package/project/traversal/index.cjs.js.map +1 -1
- package/project/traversal/index.esm.js +4 -28
- package/project/traversal/index.esm.js.map +1 -1
- package/tech/backend/express.d.ts.map +1 -1
- package/tech/backend/fastify.d.ts.map +1 -1
- package/tech/backend/index.cjs.js +0 -17
- package/tech/backend/index.cjs.js.map +1 -1
- package/tech/backend/index.esm.js +0 -17
- package/tech/backend/index.esm.js.map +1 -1
- package/tech/backend/koa.d.ts.map +1 -1
- package/tech/backend/nestjs.d.ts.map +1 -1
- package/tech/build/index.cjs.js +0 -12
- package/tech/build/index.cjs.js.map +1 -1
- package/tech/build/index.esm.js +0 -12
- package/tech/build/index.esm.js.map +1 -1
- package/tech/frontend/index.cjs.js +0 -16
- package/tech/frontend/index.cjs.js.map +1 -1
- package/tech/frontend/index.esm.js +0 -16
- package/tech/frontend/index.esm.js.map +1 -1
- package/tech/frontend/qwik.d.ts.map +1 -1
- package/tech/frontend/remix.d.ts.map +1 -1
- package/tech/frontend/sveltekit.d.ts.map +1 -1
- package/tech/index.cjs.js +1 -63
- package/tech/index.cjs.js.map +1 -1
- package/tech/index.d.ts.map +1 -1
- package/tech/index.esm.js +1 -63
- package/tech/index.esm.js.map +1 -1
- package/tech/legacy/angularjs.d.ts.map +1 -1
- package/tech/legacy/backbone.d.ts.map +1 -1
- package/tech/legacy/ember.d.ts.map +1 -1
- package/tech/legacy/index.cjs.js +0 -26
- package/tech/legacy/index.cjs.js.map +1 -1
- package/tech/legacy/index.esm.js +0 -26
- package/tech/legacy/index.esm.js.map +1 -1
- package/tech/legacy/jquery.d.ts.map +1 -1
- package/tech/linting/biome.d.ts.map +1 -1
- package/tech/linting/index.cjs.js +0 -14
- package/tech/linting/index.cjs.js.map +1 -1
- package/tech/linting/index.esm.js +0 -14
- package/tech/linting/index.esm.js.map +1 -1
- package/tech/linting/prettier.d.ts.map +1 -1
- package/tech/monorepo/index.cjs.js +1 -13
- package/tech/monorepo/index.cjs.js.map +1 -1
- package/tech/monorepo/index.esm.js +1 -13
- package/tech/monorepo/index.esm.js.map +1 -1
- package/tech/monorepo/types.d.ts +1 -1
- package/tech/monorepo/types.d.ts.map +1 -1
- package/tech/shared-utils/detector-helpers.d.ts.map +1 -1
- package/tech/testing/index.cjs.js +0 -12
- package/tech/testing/index.cjs.js.map +1 -1
- package/tech/testing/index.esm.js +0 -12
- package/tech/testing/index.esm.js.map +1 -1
- package/tech/types/detectors.d.ts.map +1 -1
- package/tech/types/index.cjs.js +0 -27
- package/tech/types/index.cjs.js.map +1 -1
- package/tech/types/index.esm.js +0 -27
- package/tech/types/index.esm.js.map +1 -1
- package/vfs/commit.d.ts.map +1 -1
- package/vfs/diff.d.ts.map +1 -1
- package/vfs/factory.d.ts.map +1 -1
- package/vfs/fs-tree.d.ts.map +1 -1
- package/vfs/index.cjs.js +5 -46
- package/vfs/index.cjs.js.map +1 -1
- package/vfs/index.esm.js +5 -46
- package/vfs/index.esm.js.map +1 -1
- package/vfs/types.d.ts +1 -0
- package/vfs/types.d.ts.map +1 -1
package/tech/index.cjs.js
CHANGED
|
@@ -14,7 +14,6 @@ var node_fs = require('node:fs');
|
|
|
14
14
|
*
|
|
15
15
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/map
|
|
16
16
|
*/
|
|
17
|
-
// Capture references at module initialization time
|
|
18
17
|
const _Map = globalThis.Map;
|
|
19
18
|
const _Reflect$2 = globalThis.Reflect;
|
|
20
19
|
/**
|
|
@@ -34,7 +33,6 @@ const createMap = (iterable) => _Reflect$2.construct(_Map, iterable ? [iterable]
|
|
|
34
33
|
*
|
|
35
34
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/object
|
|
36
35
|
*/
|
|
37
|
-
// Capture references at module initialization time
|
|
38
36
|
const _Object = globalThis.Object;
|
|
39
37
|
/**
|
|
40
38
|
* (Safe copy) Prevents modification of existing property attributes and values,
|
|
@@ -69,7 +67,6 @@ const defineProperties = _Object.defineProperties;
|
|
|
69
67
|
*
|
|
70
68
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/set
|
|
71
69
|
*/
|
|
72
|
-
// Capture references at module initialization time
|
|
73
70
|
const _Set = globalThis.Set;
|
|
74
71
|
const _Reflect$1 = globalThis.Reflect;
|
|
75
72
|
/**
|
|
@@ -119,7 +116,6 @@ const cacheRegistry = createSet();
|
|
|
119
116
|
function createCache(options) {
|
|
120
117
|
const { ttl, maxSize } = options ?? {};
|
|
121
118
|
const store = createMap();
|
|
122
|
-
// Track insertion order for FIFO eviction
|
|
123
119
|
const insertionOrder = [];
|
|
124
120
|
/**
|
|
125
121
|
* Check if an entry is expired.
|
|
@@ -170,12 +166,10 @@ function createCache(options) {
|
|
|
170
166
|
return entry.value;
|
|
171
167
|
},
|
|
172
168
|
set(key, value) {
|
|
173
|
-
// If key exists, remove from order first
|
|
174
169
|
if (store.has(key)) {
|
|
175
170
|
removeFromOrder(key);
|
|
176
171
|
}
|
|
177
172
|
else {
|
|
178
|
-
// Evict if needed before adding new entry
|
|
179
173
|
evictIfNeeded();
|
|
180
174
|
}
|
|
181
175
|
// eslint-disable-next-line workspace/no-unsafe-builtin-methods -- Date.now() is needed for Jest fake timers compatibility
|
|
@@ -208,7 +202,6 @@ function createCache(options) {
|
|
|
208
202
|
return [...insertionOrder];
|
|
209
203
|
},
|
|
210
204
|
};
|
|
211
|
-
// Register cache for global operations
|
|
212
205
|
cacheRegistry.add(cache);
|
|
213
206
|
return freeze(cache);
|
|
214
207
|
}
|
|
@@ -221,7 +214,6 @@ function createCache(options) {
|
|
|
221
214
|
*
|
|
222
215
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/array
|
|
223
216
|
*/
|
|
224
|
-
// Capture references at module initialization time
|
|
225
217
|
const _Array = globalThis.Array;
|
|
226
218
|
/**
|
|
227
219
|
* (Safe copy) Determines whether the passed value is an Array.
|
|
@@ -236,7 +228,6 @@ const isArray = _Array.isArray;
|
|
|
236
228
|
*
|
|
237
229
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/console
|
|
238
230
|
*/
|
|
239
|
-
// Capture references at module initialization time
|
|
240
231
|
const _console = globalThis.console;
|
|
241
232
|
/**
|
|
242
233
|
* (Safe copy) Outputs a message to the console.
|
|
@@ -319,7 +310,6 @@ _console.timeLog.bind(_console);
|
|
|
319
310
|
*
|
|
320
311
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/json
|
|
321
312
|
*/
|
|
322
|
-
// Capture references at module initialization time
|
|
323
313
|
const _JSON = globalThis.JSON;
|
|
324
314
|
/**
|
|
325
315
|
* (Safe copy) Converts a JavaScript Object Notation (JSON) string into an object.
|
|
@@ -366,7 +356,6 @@ const getType = (target) => {
|
|
|
366
356
|
*
|
|
367
357
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/error
|
|
368
358
|
*/
|
|
369
|
-
// Capture references at module initialization time
|
|
370
359
|
const _Error = globalThis.Error;
|
|
371
360
|
const _Reflect = globalThis.Reflect;
|
|
372
361
|
/**
|
|
@@ -387,7 +376,6 @@ const createError = (message, options) => _Reflect.construct(_Error, [message, o
|
|
|
387
376
|
*
|
|
388
377
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/math
|
|
389
378
|
*/
|
|
390
|
-
// Capture references at module initialization time
|
|
391
379
|
const _Math = globalThis.Math;
|
|
392
380
|
/**
|
|
393
381
|
* (Safe copy) Returns the smaller of zero or more numbers.
|
|
@@ -660,14 +648,11 @@ function formatMessage(namespace, message, meta) {
|
|
|
660
648
|
*/
|
|
661
649
|
function createScopedLogger(namespace, options = {}) {
|
|
662
650
|
const { level = 'error', sanitizeSecrets = true } = options;
|
|
663
|
-
// Create wrapper functions that add namespace prefix and sanitization
|
|
664
651
|
const createLogFn = (baseFn) => (message, meta) => {
|
|
665
652
|
const processedMeta = sanitizeSecrets && meta ? sanitize(meta) : meta;
|
|
666
653
|
baseFn(formatMessage(namespace, message, processedMeta));
|
|
667
654
|
};
|
|
668
|
-
// Create base logger with wrapped functions
|
|
669
655
|
const baseLogger = createLogger(createLogFn(error), createLogFn(warn), createLogFn(log), createLogFn(info), createLogFn(debug));
|
|
670
|
-
// Set initial log level (use global override if set)
|
|
671
656
|
baseLogger.setLogLevel(level);
|
|
672
657
|
const scopedLogger = freeze({
|
|
673
658
|
error: (message, meta) => baseLogger.error(message, meta),
|
|
@@ -678,7 +663,6 @@ function createScopedLogger(namespace, options = {}) {
|
|
|
678
663
|
setLogLevel: baseLogger.setLogLevel,
|
|
679
664
|
getLogLevel: baseLogger.getLogLevel,
|
|
680
665
|
});
|
|
681
|
-
// Register logger for global level management
|
|
682
666
|
loggerRegistry.add(scopedLogger);
|
|
683
667
|
return scopedLogger;
|
|
684
668
|
}
|
|
@@ -958,7 +942,6 @@ function collectAllDependencies(packageJson) {
|
|
|
958
942
|
function parseVersionString(versionString) {
|
|
959
943
|
if (versionString === undefined || versionString === null)
|
|
960
944
|
return undefined;
|
|
961
|
-
// Manual parsing instead of regex to avoid ReDoS
|
|
962
945
|
let start = 0;
|
|
963
946
|
while (start < versionString.length) {
|
|
964
947
|
const char = versionString[start];
|
|
@@ -1019,7 +1002,6 @@ function expressDetector(projectPath, packageJson) {
|
|
|
1019
1002
|
version = parseVersionString(deps['express']);
|
|
1020
1003
|
sources.push({ type: 'package.json', field: 'dependencies.express' });
|
|
1021
1004
|
}
|
|
1022
|
-
// @types/express (indicates usage)
|
|
1023
1005
|
if (deps['@types/express']) {
|
|
1024
1006
|
confidence += 10;
|
|
1025
1007
|
sources.push({ type: 'package.json', field: 'dependencies.@types/express' });
|
|
@@ -1055,13 +1037,11 @@ function nestDetector(projectPath, packageJson) {
|
|
|
1055
1037
|
let version;
|
|
1056
1038
|
let configPath;
|
|
1057
1039
|
const deps = collectAllDependencies(pkg);
|
|
1058
|
-
// @nestjs/core package
|
|
1059
1040
|
if (deps['@nestjs/core']) {
|
|
1060
1041
|
confidence += 70;
|
|
1061
1042
|
version = parseVersionString(deps['@nestjs/core']);
|
|
1062
1043
|
sources.push({ type: 'package.json', field: 'dependencies.@nestjs/core' });
|
|
1063
1044
|
}
|
|
1064
|
-
// @nestjs/common
|
|
1065
1045
|
if (deps['@nestjs/common']) {
|
|
1066
1046
|
confidence += 15;
|
|
1067
1047
|
sources.push({ type: 'package.json', field: 'dependencies.@nestjs/common' });
|
|
@@ -1112,7 +1092,6 @@ function fastifyDetector(projectPath, packageJson) {
|
|
|
1112
1092
|
confidence += 15;
|
|
1113
1093
|
sources.push({ type: 'package.json', field: 'dependencies (fastify plugins)' });
|
|
1114
1094
|
}
|
|
1115
|
-
// @types/fastify (older versions)
|
|
1116
1095
|
if (deps['@types/fastify']) {
|
|
1117
1096
|
confidence += 5;
|
|
1118
1097
|
sources.push({ type: 'package.json', field: 'dependencies.@types/fastify' });
|
|
@@ -1147,7 +1126,6 @@ function koaDetector(projectPath, packageJson) {
|
|
|
1147
1126
|
version = parseVersionString(deps['koa']);
|
|
1148
1127
|
sources.push({ type: 'package.json', field: 'dependencies.koa' });
|
|
1149
1128
|
}
|
|
1150
|
-
// @types/koa
|
|
1151
1129
|
if (deps['@types/koa']) {
|
|
1152
1130
|
confidence += 10;
|
|
1153
1131
|
sources.push({ type: 'package.json', field: 'dependencies.@types/koa' });
|
|
@@ -1726,7 +1704,6 @@ function remixDetector(projectPath, packageJson) {
|
|
|
1726
1704
|
let confidence = 0;
|
|
1727
1705
|
let version;
|
|
1728
1706
|
const deps = collectAllDependencies(pkg);
|
|
1729
|
-
// @remix-run packages
|
|
1730
1707
|
if (deps['@remix-run/react']) {
|
|
1731
1708
|
confidence += 70;
|
|
1732
1709
|
version = parseVersionString(deps['@remix-run/react']);
|
|
@@ -2002,7 +1979,6 @@ function sveltekitDetector(projectPath, packageJson) {
|
|
|
2002
1979
|
let confidence = 0;
|
|
2003
1980
|
let version;
|
|
2004
1981
|
const deps = collectAllDependencies(pkg);
|
|
2005
|
-
// @sveltejs/kit package
|
|
2006
1982
|
if (deps['@sveltejs/kit']) {
|
|
2007
1983
|
confidence += 70;
|
|
2008
1984
|
version = parseVersionString(deps['@sveltejs/kit']);
|
|
@@ -2081,13 +2057,11 @@ function qwikDetector(projectPath, packageJson) {
|
|
|
2081
2057
|
let confidence = 0;
|
|
2082
2058
|
let version;
|
|
2083
2059
|
const deps = collectAllDependencies(pkg);
|
|
2084
|
-
// @builder.io/qwik package
|
|
2085
2060
|
if (deps['@builder.io/qwik']) {
|
|
2086
2061
|
confidence += 70;
|
|
2087
2062
|
version = parseVersionString(deps['@builder.io/qwik']);
|
|
2088
2063
|
sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik' });
|
|
2089
2064
|
}
|
|
2090
|
-
// @builder.io/qwik-city
|
|
2091
2065
|
if (deps['@builder.io/qwik-city']) {
|
|
2092
2066
|
confidence += 20;
|
|
2093
2067
|
sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik-city' });
|
|
@@ -2198,23 +2172,19 @@ function angularJSDetector(projectPath, packageJson) {
|
|
|
2198
2172
|
let confidence = 0;
|
|
2199
2173
|
let version;
|
|
2200
2174
|
const deps = collectAllDependencies(pkg);
|
|
2201
|
-
// AngularJS package (angular, not @angular/core)
|
|
2202
2175
|
if (deps['angular']) {
|
|
2203
2176
|
confidence += 70;
|
|
2204
2177
|
version = parseVersionString(deps['angular']);
|
|
2205
2178
|
sources.push({ type: 'package.json', field: 'dependencies.angular' });
|
|
2206
2179
|
}
|
|
2207
|
-
// AngularJS router
|
|
2208
2180
|
if (deps['angular-route']) {
|
|
2209
2181
|
confidence += 15;
|
|
2210
2182
|
sources.push({ type: 'package.json', field: 'dependencies.angular-route' });
|
|
2211
2183
|
}
|
|
2212
|
-
// AngularJS resource
|
|
2213
2184
|
if (deps['angular-resource']) {
|
|
2214
2185
|
confidence += 10;
|
|
2215
2186
|
sources.push({ type: 'package.json', field: 'dependencies.angular-resource' });
|
|
2216
2187
|
}
|
|
2217
|
-
// AngularJS animate
|
|
2218
2188
|
if (deps['angular-animate']) {
|
|
2219
2189
|
confidence += 5;
|
|
2220
2190
|
sources.push({ type: 'package.json', field: 'dependencies.angular-animate' });
|
|
@@ -2245,23 +2215,19 @@ function backboneDetector(projectPath, packageJson) {
|
|
|
2245
2215
|
let confidence = 0;
|
|
2246
2216
|
let version;
|
|
2247
2217
|
const deps = collectAllDependencies(pkg);
|
|
2248
|
-
// Backbone package
|
|
2249
2218
|
if (deps['backbone']) {
|
|
2250
2219
|
confidence += 70;
|
|
2251
2220
|
version = parseVersionString(deps['backbone']);
|
|
2252
2221
|
sources.push({ type: 'package.json', field: 'dependencies.backbone' });
|
|
2253
|
-
// Underscore (commonly used with Backbone)
|
|
2254
2222
|
if (deps['underscore']) {
|
|
2255
2223
|
confidence += 15;
|
|
2256
2224
|
sources.push({ type: 'package.json', field: 'dependencies.underscore' });
|
|
2257
2225
|
}
|
|
2258
|
-
// Lodash can be used as underscore replacement
|
|
2259
2226
|
if (deps['lodash']) {
|
|
2260
2227
|
confidence += 5;
|
|
2261
2228
|
sources.push({ type: 'package.json', field: 'dependencies.lodash' });
|
|
2262
2229
|
}
|
|
2263
2230
|
}
|
|
2264
|
-
// Marionette (Backbone framework)
|
|
2265
2231
|
if (deps['backbone.marionette'] || deps['marionette']) {
|
|
2266
2232
|
confidence += 10;
|
|
2267
2233
|
sources.push({ type: 'package.json', field: 'dependencies.backbone.marionette' });
|
|
@@ -2292,18 +2258,15 @@ function emberDetector(projectPath, packageJson) {
|
|
|
2292
2258
|
let confidence = 0;
|
|
2293
2259
|
let version;
|
|
2294
2260
|
const deps = collectAllDependencies(pkg);
|
|
2295
|
-
// Ember source package
|
|
2296
2261
|
if (deps['ember-source']) {
|
|
2297
2262
|
confidence += 70;
|
|
2298
2263
|
version = parseVersionString(deps['ember-source']);
|
|
2299
2264
|
sources.push({ type: 'package.json', field: 'dependencies.ember-source' });
|
|
2300
2265
|
}
|
|
2301
|
-
// Ember CLI
|
|
2302
2266
|
if (deps['ember-cli']) {
|
|
2303
2267
|
confidence += 20;
|
|
2304
2268
|
sources.push({ type: 'package.json', field: 'devDependencies.ember-cli' });
|
|
2305
2269
|
}
|
|
2306
|
-
// Ember Data
|
|
2307
2270
|
if (deps['ember-data']) {
|
|
2308
2271
|
confidence += 10;
|
|
2309
2272
|
sources.push({ type: 'package.json', field: 'dependencies.ember-data' });
|
|
@@ -2334,18 +2297,15 @@ function jqueryDetector(projectPath, packageJson) {
|
|
|
2334
2297
|
let confidence = 0;
|
|
2335
2298
|
let version;
|
|
2336
2299
|
const deps = collectAllDependencies(pkg);
|
|
2337
|
-
// jQuery package
|
|
2338
2300
|
if (deps['jquery']) {
|
|
2339
2301
|
confidence += 80;
|
|
2340
2302
|
version = parseVersionString(deps['jquery']);
|
|
2341
2303
|
sources.push({ type: 'package.json', field: 'dependencies.jquery' });
|
|
2342
2304
|
}
|
|
2343
|
-
// jQuery UI
|
|
2344
2305
|
if (deps['jquery-ui']) {
|
|
2345
2306
|
confidence += 10;
|
|
2346
2307
|
sources.push({ type: 'package.json', field: 'dependencies.jquery-ui' });
|
|
2347
2308
|
}
|
|
2348
|
-
// jQuery plugins
|
|
2349
2309
|
if (deps['jquery-validation']) {
|
|
2350
2310
|
confidence += 5;
|
|
2351
2311
|
sources.push({ type: 'package.json', field: 'dependencies.jquery-validation' });
|
|
@@ -2492,7 +2452,6 @@ function prettierDetector(projectPath, packageJson) {
|
|
|
2492
2452
|
confidence += 30;
|
|
2493
2453
|
sources.push({ type: 'package.json', field: 'prettier' });
|
|
2494
2454
|
}
|
|
2495
|
-
// .prettierignore file
|
|
2496
2455
|
if (exists(node_path.join(projectPath, '.prettierignore'))) {
|
|
2497
2456
|
confidence += 10;
|
|
2498
2457
|
sources.push({ type: 'config-file', path: '.prettierignore' });
|
|
@@ -2587,7 +2546,6 @@ function biomeDetector(projectPath, packageJson) {
|
|
|
2587
2546
|
let configPath;
|
|
2588
2547
|
let version;
|
|
2589
2548
|
const deps = collectAllDependencies(pkg);
|
|
2590
|
-
// @biomejs/biome package
|
|
2591
2549
|
if (deps['@biomejs/biome']) {
|
|
2592
2550
|
confidence += 70;
|
|
2593
2551
|
version = parseVersionString(deps['@biomejs/biome']);
|
|
@@ -2874,7 +2832,7 @@ function npmWorkspacesDetector(workspacePath, packageJson) {
|
|
|
2874
2832
|
sources.push({ type: 'lockfile', path: 'package-lock.json' });
|
|
2875
2833
|
}
|
|
2876
2834
|
if (exists(node_path.join(workspacePath, 'yarn.lock'))) {
|
|
2877
|
-
return null;
|
|
2835
|
+
return null;
|
|
2878
2836
|
}
|
|
2879
2837
|
if (confidence === 0) {
|
|
2880
2838
|
return null;
|
|
@@ -3253,7 +3211,6 @@ function checkTsConfigStrict(projectPath) {
|
|
|
3253
3211
|
if (!content)
|
|
3254
3212
|
return undefined;
|
|
3255
3213
|
try {
|
|
3256
|
-
// Simple JSON parsing - doesn't handle comments but good enough for strict check
|
|
3257
3214
|
const cleanContent = content.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '');
|
|
3258
3215
|
const parsed = parse(cleanContent);
|
|
3259
3216
|
return parsed?.compilerOptions?.strict === true;
|
|
@@ -3276,19 +3233,16 @@ function typescriptDetector(projectPath, packageJson) {
|
|
|
3276
3233
|
let configPath;
|
|
3277
3234
|
let version;
|
|
3278
3235
|
const deps = collectAllDependencies(pkg);
|
|
3279
|
-
// TypeScript package
|
|
3280
3236
|
if (deps['typescript']) {
|
|
3281
3237
|
confidence += 50;
|
|
3282
3238
|
version = parseVersionString(deps['typescript']);
|
|
3283
3239
|
sources.push({ type: 'package.json', field: 'dependencies.typescript' });
|
|
3284
3240
|
}
|
|
3285
|
-
// tsconfig.json
|
|
3286
3241
|
if (exists(node_path.join(projectPath, 'tsconfig.json'))) {
|
|
3287
3242
|
confidence += 40;
|
|
3288
3243
|
configPath = 'tsconfig.json';
|
|
3289
3244
|
sources.push({ type: 'config-file', path: 'tsconfig.json' });
|
|
3290
3245
|
}
|
|
3291
|
-
// tsconfig.*.json variants
|
|
3292
3246
|
const tsconfigVariants = ['tsconfig.build.json', 'tsconfig.lib.json', 'tsconfig.spec.json', 'tsconfig.app.json'];
|
|
3293
3247
|
for (const variant of tsconfigVariants) {
|
|
3294
3248
|
if (exists(node_path.join(projectPath, variant))) {
|
|
@@ -3297,7 +3251,6 @@ function typescriptDetector(projectPath, packageJson) {
|
|
|
3297
3251
|
break;
|
|
3298
3252
|
}
|
|
3299
3253
|
}
|
|
3300
|
-
// @types packages
|
|
3301
3254
|
const typePackages = keys(deps).filter((d) => d.startsWith('@types/'));
|
|
3302
3255
|
if (typePackages.length > 0) {
|
|
3303
3256
|
confidence += 10;
|
|
@@ -3331,24 +3284,20 @@ function flowDetector(projectPath, packageJson) {
|
|
|
3331
3284
|
let configPath;
|
|
3332
3285
|
let version;
|
|
3333
3286
|
const deps = collectAllDependencies(pkg);
|
|
3334
|
-
// flow-bin package
|
|
3335
3287
|
if (deps['flow-bin']) {
|
|
3336
3288
|
confidence += 60;
|
|
3337
3289
|
version = parseVersionString(deps['flow-bin']);
|
|
3338
3290
|
sources.push({ type: 'package.json', field: 'dependencies.flow-bin' });
|
|
3339
3291
|
}
|
|
3340
|
-
// .flowconfig
|
|
3341
3292
|
if (exists(node_path.join(projectPath, '.flowconfig'))) {
|
|
3342
3293
|
confidence += 40;
|
|
3343
3294
|
configPath = '.flowconfig';
|
|
3344
3295
|
sources.push({ type: 'config-file', path: '.flowconfig' });
|
|
3345
3296
|
}
|
|
3346
|
-
// flow-typed directory
|
|
3347
3297
|
if (exists(node_path.join(projectPath, 'flow-typed'))) {
|
|
3348
3298
|
confidence += 10;
|
|
3349
3299
|
sources.push({ type: 'directory', path: 'flow-typed/' });
|
|
3350
3300
|
}
|
|
3351
|
-
// @babel/preset-flow
|
|
3352
3301
|
if (deps['@babel/preset-flow']) {
|
|
3353
3302
|
confidence += 10;
|
|
3354
3303
|
sources.push({ type: 'package.json', field: 'dependencies.@babel/preset-flow' });
|
|
@@ -3372,7 +3321,6 @@ function flowDetector(projectPath, packageJson) {
|
|
|
3372
3321
|
* @returns `true` if the content contains JSDoc type annotations.
|
|
3373
3322
|
*/
|
|
3374
3323
|
function hasJsDocTypes(content) {
|
|
3375
|
-
// Check for JSDoc type annotations
|
|
3376
3324
|
return (content.includes('@type {') ||
|
|
3377
3325
|
content.includes('@param {') ||
|
|
3378
3326
|
content.includes('@returns {') ||
|
|
@@ -3391,14 +3339,11 @@ function jsdocDetector(projectPath, packageJson) {
|
|
|
3391
3339
|
const sources = [];
|
|
3392
3340
|
let confidence = 0;
|
|
3393
3341
|
const deps = collectAllDependencies(pkg);
|
|
3394
|
-
// jsdoc package
|
|
3395
3342
|
if (deps['jsdoc']) {
|
|
3396
3343
|
confidence += 30;
|
|
3397
3344
|
sources.push({ type: 'package.json', field: 'dependencies.jsdoc' });
|
|
3398
3345
|
}
|
|
3399
|
-
// typescript with checkJs (JSDoc type checking)
|
|
3400
3346
|
if (deps['typescript']) {
|
|
3401
|
-
// Check if checkJs is enabled in tsconfig
|
|
3402
3347
|
const tsconfigPath = node_path.join(projectPath, 'tsconfig.json');
|
|
3403
3348
|
const content = readFileIfExists(tsconfigPath);
|
|
3404
3349
|
if (content) {
|
|
@@ -3415,12 +3360,10 @@ function jsdocDetector(projectPath, packageJson) {
|
|
|
3415
3360
|
}
|
|
3416
3361
|
}
|
|
3417
3362
|
}
|
|
3418
|
-
// Check for jsconfig.json (VS Code JS type checking)
|
|
3419
3363
|
if (exists(node_path.join(projectPath, 'jsconfig.json'))) {
|
|
3420
3364
|
confidence += 40;
|
|
3421
3365
|
sources.push({ type: 'config-file', path: 'jsconfig.json' });
|
|
3422
3366
|
}
|
|
3423
|
-
// Sample check for JSDoc annotations in source files
|
|
3424
3367
|
const srcDir = node_path.join(projectPath, 'src');
|
|
3425
3368
|
if (exists(srcDir)) {
|
|
3426
3369
|
try {
|
|
@@ -3502,8 +3445,6 @@ const allDetectors = {
|
|
|
3502
3445
|
function isDetectAllOptions(value) {
|
|
3503
3446
|
if (typeof value !== 'object' || value === null)
|
|
3504
3447
|
return false;
|
|
3505
|
-
// DetectAllOptions has skipCache or packageJson fields specifically
|
|
3506
|
-
// PackageJson never has skipCache field
|
|
3507
3448
|
return 'skipCache' in value || 'packageJson' in value;
|
|
3508
3449
|
}
|
|
3509
3450
|
/**
|
|
@@ -3535,9 +3476,7 @@ function isDetectAllOptions(value) {
|
|
|
3535
3476
|
* ```
|
|
3536
3477
|
*/
|
|
3537
3478
|
function detectAll(projectPath, packageJsonOrOptions) {
|
|
3538
|
-
// Handle backward-compatible arguments
|
|
3539
3479
|
const options = isDetectAllOptions(packageJsonOrOptions) ? packageJsonOrOptions : { packageJson: packageJsonOrOptions };
|
|
3540
|
-
// Check cache first (unless skipCache is true)
|
|
3541
3480
|
if (!options.skipCache) {
|
|
3542
3481
|
const cached = detectAllCache.get(projectPath);
|
|
3543
3482
|
if (cached) {
|
|
@@ -3588,7 +3527,6 @@ function detectAll(projectPath, packageJsonOrOptions) {
|
|
|
3588
3527
|
legacyFrameworks: result.legacyFrameworks.map((f) => f.id),
|
|
3589
3528
|
testingFrameworks: result.testingFrameworks.map((f) => f.id),
|
|
3590
3529
|
});
|
|
3591
|
-
// Cache the result
|
|
3592
3530
|
detectAllCache.set(projectPath, result);
|
|
3593
3531
|
return result;
|
|
3594
3532
|
}
|