@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
|
@@ -12,7 +12,6 @@ import { existsSync, readFileSync, statSync, lstatSync, readdirSync } from 'node
|
|
|
12
12
|
*
|
|
13
13
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/map
|
|
14
14
|
*/
|
|
15
|
-
// Capture references at module initialization time
|
|
16
15
|
const _Map = globalThis.Map;
|
|
17
16
|
const _Reflect$2 = globalThis.Reflect;
|
|
18
17
|
/**
|
|
@@ -32,7 +31,6 @@ const createMap = (iterable) => _Reflect$2.construct(_Map, iterable ? [iterable]
|
|
|
32
31
|
*
|
|
33
32
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/object
|
|
34
33
|
*/
|
|
35
|
-
// Capture references at module initialization time
|
|
36
34
|
const _Object = globalThis.Object;
|
|
37
35
|
/**
|
|
38
36
|
* (Safe copy) Prevents modification of existing property attributes and values,
|
|
@@ -67,7 +65,6 @@ const defineProperties = _Object.defineProperties;
|
|
|
67
65
|
*
|
|
68
66
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/set
|
|
69
67
|
*/
|
|
70
|
-
// Capture references at module initialization time
|
|
71
68
|
const _Set = globalThis.Set;
|
|
72
69
|
const _Reflect$1 = globalThis.Reflect;
|
|
73
70
|
/**
|
|
@@ -117,7 +114,6 @@ const cacheRegistry = createSet();
|
|
|
117
114
|
function createCache(options) {
|
|
118
115
|
const { ttl, maxSize } = options ?? {};
|
|
119
116
|
const store = createMap();
|
|
120
|
-
// Track insertion order for FIFO eviction
|
|
121
117
|
const insertionOrder = [];
|
|
122
118
|
/**
|
|
123
119
|
* Check if an entry is expired.
|
|
@@ -168,12 +164,10 @@ function createCache(options) {
|
|
|
168
164
|
return entry.value;
|
|
169
165
|
},
|
|
170
166
|
set(key, value) {
|
|
171
|
-
// If key exists, remove from order first
|
|
172
167
|
if (store.has(key)) {
|
|
173
168
|
removeFromOrder(key);
|
|
174
169
|
}
|
|
175
170
|
else {
|
|
176
|
-
// Evict if needed before adding new entry
|
|
177
171
|
evictIfNeeded();
|
|
178
172
|
}
|
|
179
173
|
// eslint-disable-next-line workspace/no-unsafe-builtin-methods -- Date.now() is needed for Jest fake timers compatibility
|
|
@@ -206,7 +200,6 @@ function createCache(options) {
|
|
|
206
200
|
return [...insertionOrder];
|
|
207
201
|
},
|
|
208
202
|
};
|
|
209
|
-
// Register cache for global operations
|
|
210
203
|
cacheRegistry.add(cache);
|
|
211
204
|
return freeze(cache);
|
|
212
205
|
}
|
|
@@ -219,7 +212,6 @@ function createCache(options) {
|
|
|
219
212
|
*
|
|
220
213
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/array
|
|
221
214
|
*/
|
|
222
|
-
// Capture references at module initialization time
|
|
223
215
|
const _Array = globalThis.Array;
|
|
224
216
|
/**
|
|
225
217
|
* (Safe copy) Determines whether the passed value is an Array.
|
|
@@ -234,7 +226,6 @@ const isArray = _Array.isArray;
|
|
|
234
226
|
*
|
|
235
227
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/console
|
|
236
228
|
*/
|
|
237
|
-
// Capture references at module initialization time
|
|
238
229
|
const _console = globalThis.console;
|
|
239
230
|
/**
|
|
240
231
|
* (Safe copy) Outputs a message to the console.
|
|
@@ -317,7 +308,6 @@ _console.timeLog.bind(_console);
|
|
|
317
308
|
*
|
|
318
309
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/json
|
|
319
310
|
*/
|
|
320
|
-
// Capture references at module initialization time
|
|
321
311
|
const _JSON = globalThis.JSON;
|
|
322
312
|
/**
|
|
323
313
|
* (Safe copy) Converts a JavaScript Object Notation (JSON) string into an object.
|
|
@@ -364,7 +354,6 @@ const getType = (target) => {
|
|
|
364
354
|
*
|
|
365
355
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/error
|
|
366
356
|
*/
|
|
367
|
-
// Capture references at module initialization time
|
|
368
357
|
const _Error = globalThis.Error;
|
|
369
358
|
const _Reflect = globalThis.Reflect;
|
|
370
359
|
/**
|
|
@@ -385,7 +374,6 @@ const createError = (message, options) => _Reflect.construct(_Error, [message, o
|
|
|
385
374
|
*
|
|
386
375
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/math
|
|
387
376
|
*/
|
|
388
|
-
// Capture references at module initialization time
|
|
389
377
|
const _Math = globalThis.Math;
|
|
390
378
|
/**
|
|
391
379
|
* (Safe copy) Returns the smaller of zero or more numbers.
|
|
@@ -658,14 +646,11 @@ function formatMessage(namespace, message, meta) {
|
|
|
658
646
|
*/
|
|
659
647
|
function createScopedLogger(namespace, options = {}) {
|
|
660
648
|
const { level = 'error', sanitizeSecrets = true } = options;
|
|
661
|
-
// Create wrapper functions that add namespace prefix and sanitization
|
|
662
649
|
const createLogFn = (baseFn) => (message, meta) => {
|
|
663
650
|
const processedMeta = sanitizeSecrets && meta ? sanitize(meta) : meta;
|
|
664
651
|
baseFn(formatMessage(namespace, message, processedMeta));
|
|
665
652
|
};
|
|
666
|
-
// Create base logger with wrapped functions
|
|
667
653
|
const baseLogger = createLogger(createLogFn(error), createLogFn(warn), createLogFn(log), createLogFn(info), createLogFn(debug));
|
|
668
|
-
// Set initial log level (use global override if set)
|
|
669
654
|
baseLogger.setLogLevel(level);
|
|
670
655
|
const scopedLogger = freeze({
|
|
671
656
|
error: (message, meta) => baseLogger.error(message, meta),
|
|
@@ -676,7 +661,6 @@ function createScopedLogger(namespace, options = {}) {
|
|
|
676
661
|
setLogLevel: baseLogger.setLogLevel,
|
|
677
662
|
getLogLevel: baseLogger.getLogLevel,
|
|
678
663
|
});
|
|
679
|
-
// Register logger for global level management
|
|
680
664
|
loggerRegistry.add(scopedLogger);
|
|
681
665
|
return scopedLogger;
|
|
682
666
|
}
|
|
@@ -956,7 +940,6 @@ function collectAllDependencies(packageJson) {
|
|
|
956
940
|
function parseVersionString(versionString) {
|
|
957
941
|
if (versionString === undefined || versionString === null)
|
|
958
942
|
return undefined;
|
|
959
|
-
// Manual parsing instead of regex to avoid ReDoS
|
|
960
943
|
let start = 0;
|
|
961
944
|
while (start < versionString.length) {
|
|
962
945
|
const char = versionString[start];
|
|
@@ -1017,7 +1000,6 @@ function expressDetector(projectPath, packageJson) {
|
|
|
1017
1000
|
version = parseVersionString(deps['express']);
|
|
1018
1001
|
sources.push({ type: 'package.json', field: 'dependencies.express' });
|
|
1019
1002
|
}
|
|
1020
|
-
// @types/express (indicates usage)
|
|
1021
1003
|
if (deps['@types/express']) {
|
|
1022
1004
|
confidence += 10;
|
|
1023
1005
|
sources.push({ type: 'package.json', field: 'dependencies.@types/express' });
|
|
@@ -1053,13 +1035,11 @@ function nestDetector(projectPath, packageJson) {
|
|
|
1053
1035
|
let version;
|
|
1054
1036
|
let configPath;
|
|
1055
1037
|
const deps = collectAllDependencies(pkg);
|
|
1056
|
-
// @nestjs/core package
|
|
1057
1038
|
if (deps['@nestjs/core']) {
|
|
1058
1039
|
confidence += 70;
|
|
1059
1040
|
version = parseVersionString(deps['@nestjs/core']);
|
|
1060
1041
|
sources.push({ type: 'package.json', field: 'dependencies.@nestjs/core' });
|
|
1061
1042
|
}
|
|
1062
|
-
// @nestjs/common
|
|
1063
1043
|
if (deps['@nestjs/common']) {
|
|
1064
1044
|
confidence += 15;
|
|
1065
1045
|
sources.push({ type: 'package.json', field: 'dependencies.@nestjs/common' });
|
|
@@ -1110,7 +1090,6 @@ function fastifyDetector(projectPath, packageJson) {
|
|
|
1110
1090
|
confidence += 15;
|
|
1111
1091
|
sources.push({ type: 'package.json', field: 'dependencies (fastify plugins)' });
|
|
1112
1092
|
}
|
|
1113
|
-
// @types/fastify (older versions)
|
|
1114
1093
|
if (deps['@types/fastify']) {
|
|
1115
1094
|
confidence += 5;
|
|
1116
1095
|
sources.push({ type: 'package.json', field: 'dependencies.@types/fastify' });
|
|
@@ -1145,7 +1124,6 @@ function koaDetector(projectPath, packageJson) {
|
|
|
1145
1124
|
version = parseVersionString(deps['koa']);
|
|
1146
1125
|
sources.push({ type: 'package.json', field: 'dependencies.koa' });
|
|
1147
1126
|
}
|
|
1148
|
-
// @types/koa
|
|
1149
1127
|
if (deps['@types/koa']) {
|
|
1150
1128
|
confidence += 10;
|
|
1151
1129
|
sources.push({ type: 'package.json', field: 'dependencies.@types/koa' });
|
|
@@ -1688,7 +1666,6 @@ function remixDetector(projectPath, packageJson) {
|
|
|
1688
1666
|
let confidence = 0;
|
|
1689
1667
|
let version;
|
|
1690
1668
|
const deps = collectAllDependencies(pkg);
|
|
1691
|
-
// @remix-run packages
|
|
1692
1669
|
if (deps['@remix-run/react']) {
|
|
1693
1670
|
confidence += 70;
|
|
1694
1671
|
version = parseVersionString(deps['@remix-run/react']);
|
|
@@ -1964,7 +1941,6 @@ function sveltekitDetector(projectPath, packageJson) {
|
|
|
1964
1941
|
let confidence = 0;
|
|
1965
1942
|
let version;
|
|
1966
1943
|
const deps = collectAllDependencies(pkg);
|
|
1967
|
-
// @sveltejs/kit package
|
|
1968
1944
|
if (deps['@sveltejs/kit']) {
|
|
1969
1945
|
confidence += 70;
|
|
1970
1946
|
version = parseVersionString(deps['@sveltejs/kit']);
|
|
@@ -2043,13 +2019,11 @@ function qwikDetector(projectPath, packageJson) {
|
|
|
2043
2019
|
let confidence = 0;
|
|
2044
2020
|
let version;
|
|
2045
2021
|
const deps = collectAllDependencies(pkg);
|
|
2046
|
-
// @builder.io/qwik package
|
|
2047
2022
|
if (deps['@builder.io/qwik']) {
|
|
2048
2023
|
confidence += 70;
|
|
2049
2024
|
version = parseVersionString(deps['@builder.io/qwik']);
|
|
2050
2025
|
sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik' });
|
|
2051
2026
|
}
|
|
2052
|
-
// @builder.io/qwik-city
|
|
2053
2027
|
if (deps['@builder.io/qwik-city']) {
|
|
2054
2028
|
confidence += 20;
|
|
2055
2029
|
sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik-city' });
|
|
@@ -2142,23 +2116,19 @@ function angularJSDetector(projectPath, packageJson) {
|
|
|
2142
2116
|
let confidence = 0;
|
|
2143
2117
|
let version;
|
|
2144
2118
|
const deps = collectAllDependencies(pkg);
|
|
2145
|
-
// AngularJS package (angular, not @angular/core)
|
|
2146
2119
|
if (deps['angular']) {
|
|
2147
2120
|
confidence += 70;
|
|
2148
2121
|
version = parseVersionString(deps['angular']);
|
|
2149
2122
|
sources.push({ type: 'package.json', field: 'dependencies.angular' });
|
|
2150
2123
|
}
|
|
2151
|
-
// AngularJS router
|
|
2152
2124
|
if (deps['angular-route']) {
|
|
2153
2125
|
confidence += 15;
|
|
2154
2126
|
sources.push({ type: 'package.json', field: 'dependencies.angular-route' });
|
|
2155
2127
|
}
|
|
2156
|
-
// AngularJS resource
|
|
2157
2128
|
if (deps['angular-resource']) {
|
|
2158
2129
|
confidence += 10;
|
|
2159
2130
|
sources.push({ type: 'package.json', field: 'dependencies.angular-resource' });
|
|
2160
2131
|
}
|
|
2161
|
-
// AngularJS animate
|
|
2162
2132
|
if (deps['angular-animate']) {
|
|
2163
2133
|
confidence += 5;
|
|
2164
2134
|
sources.push({ type: 'package.json', field: 'dependencies.angular-animate' });
|
|
@@ -2189,23 +2159,19 @@ function backboneDetector(projectPath, packageJson) {
|
|
|
2189
2159
|
let confidence = 0;
|
|
2190
2160
|
let version;
|
|
2191
2161
|
const deps = collectAllDependencies(pkg);
|
|
2192
|
-
// Backbone package
|
|
2193
2162
|
if (deps['backbone']) {
|
|
2194
2163
|
confidence += 70;
|
|
2195
2164
|
version = parseVersionString(deps['backbone']);
|
|
2196
2165
|
sources.push({ type: 'package.json', field: 'dependencies.backbone' });
|
|
2197
|
-
// Underscore (commonly used with Backbone)
|
|
2198
2166
|
if (deps['underscore']) {
|
|
2199
2167
|
confidence += 15;
|
|
2200
2168
|
sources.push({ type: 'package.json', field: 'dependencies.underscore' });
|
|
2201
2169
|
}
|
|
2202
|
-
// Lodash can be used as underscore replacement
|
|
2203
2170
|
if (deps['lodash']) {
|
|
2204
2171
|
confidence += 5;
|
|
2205
2172
|
sources.push({ type: 'package.json', field: 'dependencies.lodash' });
|
|
2206
2173
|
}
|
|
2207
2174
|
}
|
|
2208
|
-
// Marionette (Backbone framework)
|
|
2209
2175
|
if (deps['backbone.marionette'] || deps['marionette']) {
|
|
2210
2176
|
confidence += 10;
|
|
2211
2177
|
sources.push({ type: 'package.json', field: 'dependencies.backbone.marionette' });
|
|
@@ -2236,18 +2202,15 @@ function emberDetector(projectPath, packageJson) {
|
|
|
2236
2202
|
let confidence = 0;
|
|
2237
2203
|
let version;
|
|
2238
2204
|
const deps = collectAllDependencies(pkg);
|
|
2239
|
-
// Ember source package
|
|
2240
2205
|
if (deps['ember-source']) {
|
|
2241
2206
|
confidence += 70;
|
|
2242
2207
|
version = parseVersionString(deps['ember-source']);
|
|
2243
2208
|
sources.push({ type: 'package.json', field: 'dependencies.ember-source' });
|
|
2244
2209
|
}
|
|
2245
|
-
// Ember CLI
|
|
2246
2210
|
if (deps['ember-cli']) {
|
|
2247
2211
|
confidence += 20;
|
|
2248
2212
|
sources.push({ type: 'package.json', field: 'devDependencies.ember-cli' });
|
|
2249
2213
|
}
|
|
2250
|
-
// Ember Data
|
|
2251
2214
|
if (deps['ember-data']) {
|
|
2252
2215
|
confidence += 10;
|
|
2253
2216
|
sources.push({ type: 'package.json', field: 'dependencies.ember-data' });
|
|
@@ -2278,18 +2241,15 @@ function jqueryDetector(projectPath, packageJson) {
|
|
|
2278
2241
|
let confidence = 0;
|
|
2279
2242
|
let version;
|
|
2280
2243
|
const deps = collectAllDependencies(pkg);
|
|
2281
|
-
// jQuery package
|
|
2282
2244
|
if (deps['jquery']) {
|
|
2283
2245
|
confidence += 80;
|
|
2284
2246
|
version = parseVersionString(deps['jquery']);
|
|
2285
2247
|
sources.push({ type: 'package.json', field: 'dependencies.jquery' });
|
|
2286
2248
|
}
|
|
2287
|
-
// jQuery UI
|
|
2288
2249
|
if (deps['jquery-ui']) {
|
|
2289
2250
|
confidence += 10;
|
|
2290
2251
|
sources.push({ type: 'package.json', field: 'dependencies.jquery-ui' });
|
|
2291
2252
|
}
|
|
2292
|
-
// jQuery plugins
|
|
2293
2253
|
if (deps['jquery-validation']) {
|
|
2294
2254
|
confidence += 5;
|
|
2295
2255
|
sources.push({ type: 'package.json', field: 'dependencies.jquery-validation' });
|
|
@@ -2418,7 +2378,6 @@ function prettierDetector(projectPath, packageJson) {
|
|
|
2418
2378
|
confidence += 30;
|
|
2419
2379
|
sources.push({ type: 'package.json', field: 'prettier' });
|
|
2420
2380
|
}
|
|
2421
|
-
// .prettierignore file
|
|
2422
2381
|
if (exists(join$1(projectPath, '.prettierignore'))) {
|
|
2423
2382
|
confidence += 10;
|
|
2424
2383
|
sources.push({ type: 'config-file', path: '.prettierignore' });
|
|
@@ -2513,7 +2472,6 @@ function biomeDetector(projectPath, packageJson) {
|
|
|
2513
2472
|
let configPath;
|
|
2514
2473
|
let version;
|
|
2515
2474
|
const deps = collectAllDependencies(pkg);
|
|
2516
|
-
// @biomejs/biome package
|
|
2517
2475
|
if (deps['@biomejs/biome']) {
|
|
2518
2476
|
confidence += 70;
|
|
2519
2477
|
version = parseVersionString(deps['@biomejs/biome']);
|
|
@@ -2782,7 +2740,7 @@ function npmWorkspacesDetector(workspacePath, packageJson) {
|
|
|
2782
2740
|
sources.push({ type: 'lockfile', path: 'package-lock.json' });
|
|
2783
2741
|
}
|
|
2784
2742
|
if (exists(join$1(workspacePath, 'yarn.lock'))) {
|
|
2785
|
-
return null;
|
|
2743
|
+
return null;
|
|
2786
2744
|
}
|
|
2787
2745
|
if (confidence === 0) {
|
|
2788
2746
|
return null;
|
|
@@ -3125,7 +3083,6 @@ function checkTsConfigStrict(projectPath) {
|
|
|
3125
3083
|
if (!content)
|
|
3126
3084
|
return undefined;
|
|
3127
3085
|
try {
|
|
3128
|
-
// Simple JSON parsing - doesn't handle comments but good enough for strict check
|
|
3129
3086
|
const cleanContent = content.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '');
|
|
3130
3087
|
const parsed = parse(cleanContent);
|
|
3131
3088
|
return parsed?.compilerOptions?.strict === true;
|
|
@@ -3148,19 +3105,16 @@ function typescriptDetector(projectPath, packageJson) {
|
|
|
3148
3105
|
let configPath;
|
|
3149
3106
|
let version;
|
|
3150
3107
|
const deps = collectAllDependencies(pkg);
|
|
3151
|
-
// TypeScript package
|
|
3152
3108
|
if (deps['typescript']) {
|
|
3153
3109
|
confidence += 50;
|
|
3154
3110
|
version = parseVersionString(deps['typescript']);
|
|
3155
3111
|
sources.push({ type: 'package.json', field: 'dependencies.typescript' });
|
|
3156
3112
|
}
|
|
3157
|
-
// tsconfig.json
|
|
3158
3113
|
if (exists(join$1(projectPath, 'tsconfig.json'))) {
|
|
3159
3114
|
confidence += 40;
|
|
3160
3115
|
configPath = 'tsconfig.json';
|
|
3161
3116
|
sources.push({ type: 'config-file', path: 'tsconfig.json' });
|
|
3162
3117
|
}
|
|
3163
|
-
// tsconfig.*.json variants
|
|
3164
3118
|
const tsconfigVariants = ['tsconfig.build.json', 'tsconfig.lib.json', 'tsconfig.spec.json', 'tsconfig.app.json'];
|
|
3165
3119
|
for (const variant of tsconfigVariants) {
|
|
3166
3120
|
if (exists(join$1(projectPath, variant))) {
|
|
@@ -3169,7 +3123,6 @@ function typescriptDetector(projectPath, packageJson) {
|
|
|
3169
3123
|
break;
|
|
3170
3124
|
}
|
|
3171
3125
|
}
|
|
3172
|
-
// @types packages
|
|
3173
3126
|
const typePackages = keys(deps).filter((d) => d.startsWith('@types/'));
|
|
3174
3127
|
if (typePackages.length > 0) {
|
|
3175
3128
|
confidence += 10;
|
|
@@ -3203,24 +3156,20 @@ function flowDetector(projectPath, packageJson) {
|
|
|
3203
3156
|
let configPath;
|
|
3204
3157
|
let version;
|
|
3205
3158
|
const deps = collectAllDependencies(pkg);
|
|
3206
|
-
// flow-bin package
|
|
3207
3159
|
if (deps['flow-bin']) {
|
|
3208
3160
|
confidence += 60;
|
|
3209
3161
|
version = parseVersionString(deps['flow-bin']);
|
|
3210
3162
|
sources.push({ type: 'package.json', field: 'dependencies.flow-bin' });
|
|
3211
3163
|
}
|
|
3212
|
-
// .flowconfig
|
|
3213
3164
|
if (exists(join$1(projectPath, '.flowconfig'))) {
|
|
3214
3165
|
confidence += 40;
|
|
3215
3166
|
configPath = '.flowconfig';
|
|
3216
3167
|
sources.push({ type: 'config-file', path: '.flowconfig' });
|
|
3217
3168
|
}
|
|
3218
|
-
// flow-typed directory
|
|
3219
3169
|
if (exists(join$1(projectPath, 'flow-typed'))) {
|
|
3220
3170
|
confidence += 10;
|
|
3221
3171
|
sources.push({ type: 'directory', path: 'flow-typed/' });
|
|
3222
3172
|
}
|
|
3223
|
-
// @babel/preset-flow
|
|
3224
3173
|
if (deps['@babel/preset-flow']) {
|
|
3225
3174
|
confidence += 10;
|
|
3226
3175
|
sources.push({ type: 'package.json', field: 'dependencies.@babel/preset-flow' });
|
|
@@ -3244,7 +3193,6 @@ function flowDetector(projectPath, packageJson) {
|
|
|
3244
3193
|
* @returns `true` if the content contains JSDoc type annotations.
|
|
3245
3194
|
*/
|
|
3246
3195
|
function hasJsDocTypes(content) {
|
|
3247
|
-
// Check for JSDoc type annotations
|
|
3248
3196
|
return (content.includes('@type {') ||
|
|
3249
3197
|
content.includes('@param {') ||
|
|
3250
3198
|
content.includes('@returns {') ||
|
|
@@ -3263,14 +3211,11 @@ function jsdocDetector(projectPath, packageJson) {
|
|
|
3263
3211
|
const sources = [];
|
|
3264
3212
|
let confidence = 0;
|
|
3265
3213
|
const deps = collectAllDependencies(pkg);
|
|
3266
|
-
// jsdoc package
|
|
3267
3214
|
if (deps['jsdoc']) {
|
|
3268
3215
|
confidence += 30;
|
|
3269
3216
|
sources.push({ type: 'package.json', field: 'dependencies.jsdoc' });
|
|
3270
3217
|
}
|
|
3271
|
-
// typescript with checkJs (JSDoc type checking)
|
|
3272
3218
|
if (deps['typescript']) {
|
|
3273
|
-
// Check if checkJs is enabled in tsconfig
|
|
3274
3219
|
const tsconfigPath = join$1(projectPath, 'tsconfig.json');
|
|
3275
3220
|
const content = readFileIfExists(tsconfigPath);
|
|
3276
3221
|
if (content) {
|
|
@@ -3287,12 +3232,10 @@ function jsdocDetector(projectPath, packageJson) {
|
|
|
3287
3232
|
}
|
|
3288
3233
|
}
|
|
3289
3234
|
}
|
|
3290
|
-
// Check for jsconfig.json (VS Code JS type checking)
|
|
3291
3235
|
if (exists(join$1(projectPath, 'jsconfig.json'))) {
|
|
3292
3236
|
confidence += 40;
|
|
3293
3237
|
sources.push({ type: 'config-file', path: 'jsconfig.json' });
|
|
3294
3238
|
}
|
|
3295
|
-
// Sample check for JSDoc annotations in source files
|
|
3296
3239
|
const srcDir = join$1(projectPath, 'src');
|
|
3297
3240
|
if (exists(srcDir)) {
|
|
3298
3241
|
try {
|
|
@@ -3343,8 +3286,6 @@ const detectAllCache = createCache({ ttl: 60000, maxSize: 50 });
|
|
|
3343
3286
|
function isDetectAllOptions(value) {
|
|
3344
3287
|
if (typeof value !== 'object' || value === null)
|
|
3345
3288
|
return false;
|
|
3346
|
-
// DetectAllOptions has skipCache or packageJson fields specifically
|
|
3347
|
-
// PackageJson never has skipCache field
|
|
3348
3289
|
return 'skipCache' in value || 'packageJson' in value;
|
|
3349
3290
|
}
|
|
3350
3291
|
/**
|
|
@@ -3376,9 +3317,7 @@ function isDetectAllOptions(value) {
|
|
|
3376
3317
|
* ```
|
|
3377
3318
|
*/
|
|
3378
3319
|
function detectAll(projectPath, packageJsonOrOptions) {
|
|
3379
|
-
// Handle backward-compatible arguments
|
|
3380
3320
|
const options = isDetectAllOptions(packageJsonOrOptions) ? packageJsonOrOptions : { packageJson: packageJsonOrOptions };
|
|
3381
|
-
// Check cache first (unless skipCache is true)
|
|
3382
3321
|
if (!options.skipCache) {
|
|
3383
3322
|
const cached = detectAllCache.get(projectPath);
|
|
3384
3323
|
if (cached) {
|
|
@@ -3429,7 +3368,6 @@ function detectAll(projectPath, packageJsonOrOptions) {
|
|
|
3429
3368
|
legacyFrameworks: result.legacyFrameworks.map((f) => f.id),
|
|
3430
3369
|
testingFrameworks: result.testingFrameworks.map((f) => f.id),
|
|
3431
3370
|
});
|
|
3432
|
-
// Cache the result
|
|
3433
3371
|
detectAllCache.set(projectPath, result);
|
|
3434
3372
|
return result;
|
|
3435
3373
|
}
|