@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
|
@@ -9,7 +9,6 @@ import { existsSync, readFileSync, statSync, lstatSync, readdirSync } from 'node
|
|
|
9
9
|
*
|
|
10
10
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/json
|
|
11
11
|
*/
|
|
12
|
-
// Capture references at module initialization time
|
|
13
12
|
const _JSON = globalThis.JSON;
|
|
14
13
|
/**
|
|
15
14
|
* (Safe copy) Converts a JavaScript Object Notation (JSON) string into an object.
|
|
@@ -28,7 +27,6 @@ const stringify = _JSON.stringify;
|
|
|
28
27
|
*
|
|
29
28
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/math
|
|
30
29
|
*/
|
|
31
|
-
// Capture references at module initialization time
|
|
32
30
|
const _Math = globalThis.Math;
|
|
33
31
|
/**
|
|
34
32
|
* (Safe copy) Returns the value of a number rounded to the nearest integer.
|
|
@@ -47,7 +45,6 @@ const min = _Math.min;
|
|
|
47
45
|
*
|
|
48
46
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/object
|
|
49
47
|
*/
|
|
50
|
-
// Capture references at module initialization time
|
|
51
48
|
const _Object = globalThis.Object;
|
|
52
49
|
/**
|
|
53
50
|
* (Safe copy) Prevents modification of existing property attributes and values,
|
|
@@ -82,7 +79,6 @@ const defineProperties = _Object.defineProperties;
|
|
|
82
79
|
*
|
|
83
80
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/error
|
|
84
81
|
*/
|
|
85
|
-
// Capture references at module initialization time
|
|
86
82
|
const _Error = globalThis.Error;
|
|
87
83
|
const _Reflect$2 = globalThis.Reflect;
|
|
88
84
|
/**
|
|
@@ -103,7 +99,6 @@ const createError = (message, options) => _Reflect$2.construct(_Error, [message,
|
|
|
103
99
|
*
|
|
104
100
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/array
|
|
105
101
|
*/
|
|
106
|
-
// Capture references at module initialization time
|
|
107
102
|
const _Array = globalThis.Array;
|
|
108
103
|
/**
|
|
109
104
|
* (Safe copy) Determines whether the passed value is an Array.
|
|
@@ -118,7 +113,6 @@ const isArray = _Array.isArray;
|
|
|
118
113
|
*
|
|
119
114
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/console
|
|
120
115
|
*/
|
|
121
|
-
// Capture references at module initialization time
|
|
122
116
|
const _console = globalThis.console;
|
|
123
117
|
/**
|
|
124
118
|
* (Safe copy) Outputs a message to the console.
|
|
@@ -204,7 +198,6 @@ _console.timeLog.bind(_console);
|
|
|
204
198
|
*
|
|
205
199
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/set
|
|
206
200
|
*/
|
|
207
|
-
// Capture references at module initialization time
|
|
208
201
|
const _Set = globalThis.Set;
|
|
209
202
|
const _Reflect$1 = globalThis.Reflect;
|
|
210
203
|
/**
|
|
@@ -252,7 +245,6 @@ const getType = (target) => {
|
|
|
252
245
|
*
|
|
253
246
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/map
|
|
254
247
|
*/
|
|
255
|
-
// Capture references at module initialization time
|
|
256
248
|
const _Map = globalThis.Map;
|
|
257
249
|
const _Reflect = globalThis.Reflect;
|
|
258
250
|
/**
|
|
@@ -530,14 +522,11 @@ function formatMessage(namespace, message, meta) {
|
|
|
530
522
|
*/
|
|
531
523
|
function createScopedLogger(namespace, options = {}) {
|
|
532
524
|
const { level = 'error', sanitizeSecrets = true } = options;
|
|
533
|
-
// Create wrapper functions that add namespace prefix and sanitization
|
|
534
525
|
const createLogFn = (baseFn) => (message, meta) => {
|
|
535
526
|
const processedMeta = sanitizeSecrets && meta ? sanitize(meta) : meta;
|
|
536
527
|
baseFn(formatMessage(namespace, message, processedMeta));
|
|
537
528
|
};
|
|
538
|
-
// Create base logger with wrapped functions
|
|
539
529
|
const baseLogger = createLogger(createLogFn(error), createLogFn(warn), createLogFn(log), createLogFn(info), createLogFn(debug));
|
|
540
|
-
// Set initial log level (use global override if set)
|
|
541
530
|
baseLogger.setLogLevel(level);
|
|
542
531
|
const scopedLogger = freeze({
|
|
543
532
|
error: (message, meta) => baseLogger.error(message, meta),
|
|
@@ -548,7 +537,6 @@ function createScopedLogger(namespace, options = {}) {
|
|
|
548
537
|
setLogLevel: baseLogger.setLogLevel,
|
|
549
538
|
getLogLevel: baseLogger.getLogLevel,
|
|
550
539
|
});
|
|
551
|
-
// Register logger for global level management
|
|
552
540
|
loggerRegistry.add(scopedLogger);
|
|
553
541
|
return scopedLogger;
|
|
554
542
|
}
|
|
@@ -840,7 +828,6 @@ const cacheRegistry = createSet();
|
|
|
840
828
|
function createCache(options) {
|
|
841
829
|
const { ttl, maxSize } = options ?? {};
|
|
842
830
|
const store = createMap();
|
|
843
|
-
// Track insertion order for FIFO eviction
|
|
844
831
|
const insertionOrder = [];
|
|
845
832
|
/**
|
|
846
833
|
* Check if an entry is expired.
|
|
@@ -891,12 +878,10 @@ function createCache(options) {
|
|
|
891
878
|
return entry.value;
|
|
892
879
|
},
|
|
893
880
|
set(key, value) {
|
|
894
|
-
// If key exists, remove from order first
|
|
895
881
|
if (store.has(key)) {
|
|
896
882
|
removeFromOrder(key);
|
|
897
883
|
}
|
|
898
884
|
else {
|
|
899
|
-
// Evict if needed before adding new entry
|
|
900
885
|
evictIfNeeded();
|
|
901
886
|
}
|
|
902
887
|
// eslint-disable-next-line workspace/no-unsafe-builtin-methods -- Date.now() is needed for Jest fake timers compatibility
|
|
@@ -929,7 +914,6 @@ function createCache(options) {
|
|
|
929
914
|
return [...insertionOrder];
|
|
930
915
|
},
|
|
931
916
|
};
|
|
932
|
-
// Register cache for global operations
|
|
933
917
|
cacheRegistry.add(cache);
|
|
934
918
|
return freeze(cache);
|
|
935
919
|
}
|
|
@@ -960,7 +944,6 @@ function collectAllDependencies(packageJson) {
|
|
|
960
944
|
function parseVersionString(versionString) {
|
|
961
945
|
if (versionString === undefined || versionString === null)
|
|
962
946
|
return undefined;
|
|
963
|
-
// Manual parsing instead of regex to avoid ReDoS
|
|
964
947
|
let start = 0;
|
|
965
948
|
while (start < versionString.length) {
|
|
966
949
|
const char = versionString[start];
|
|
@@ -1021,7 +1004,6 @@ function expressDetector(projectPath, packageJson) {
|
|
|
1021
1004
|
version = parseVersionString(deps['express']);
|
|
1022
1005
|
sources.push({ type: 'package.json', field: 'dependencies.express' });
|
|
1023
1006
|
}
|
|
1024
|
-
// @types/express (indicates usage)
|
|
1025
1007
|
if (deps['@types/express']) {
|
|
1026
1008
|
confidence += 10;
|
|
1027
1009
|
sources.push({ type: 'package.json', field: 'dependencies.@types/express' });
|
|
@@ -1057,13 +1039,11 @@ function nestDetector(projectPath, packageJson) {
|
|
|
1057
1039
|
let version;
|
|
1058
1040
|
let configPath;
|
|
1059
1041
|
const deps = collectAllDependencies(pkg);
|
|
1060
|
-
// @nestjs/core package
|
|
1061
1042
|
if (deps['@nestjs/core']) {
|
|
1062
1043
|
confidence += 70;
|
|
1063
1044
|
version = parseVersionString(deps['@nestjs/core']);
|
|
1064
1045
|
sources.push({ type: 'package.json', field: 'dependencies.@nestjs/core' });
|
|
1065
1046
|
}
|
|
1066
|
-
// @nestjs/common
|
|
1067
1047
|
if (deps['@nestjs/common']) {
|
|
1068
1048
|
confidence += 15;
|
|
1069
1049
|
sources.push({ type: 'package.json', field: 'dependencies.@nestjs/common' });
|
|
@@ -1114,7 +1094,6 @@ function fastifyDetector(projectPath, packageJson) {
|
|
|
1114
1094
|
confidence += 15;
|
|
1115
1095
|
sources.push({ type: 'package.json', field: 'dependencies (fastify plugins)' });
|
|
1116
1096
|
}
|
|
1117
|
-
// @types/fastify (older versions)
|
|
1118
1097
|
if (deps['@types/fastify']) {
|
|
1119
1098
|
confidence += 5;
|
|
1120
1099
|
sources.push({ type: 'package.json', field: 'dependencies.@types/fastify' });
|
|
@@ -1149,7 +1128,6 @@ function koaDetector(projectPath, packageJson) {
|
|
|
1149
1128
|
version = parseVersionString(deps['koa']);
|
|
1150
1129
|
sources.push({ type: 'package.json', field: 'dependencies.koa' });
|
|
1151
1130
|
}
|
|
1152
|
-
// @types/koa
|
|
1153
1131
|
if (deps['@types/koa']) {
|
|
1154
1132
|
confidence += 10;
|
|
1155
1133
|
sources.push({ type: 'package.json', field: 'dependencies.@types/koa' });
|
|
@@ -1692,7 +1670,6 @@ function remixDetector(projectPath, packageJson) {
|
|
|
1692
1670
|
let confidence = 0;
|
|
1693
1671
|
let version;
|
|
1694
1672
|
const deps = collectAllDependencies(pkg);
|
|
1695
|
-
// @remix-run packages
|
|
1696
1673
|
if (deps['@remix-run/react']) {
|
|
1697
1674
|
confidence += 70;
|
|
1698
1675
|
version = parseVersionString(deps['@remix-run/react']);
|
|
@@ -1968,7 +1945,6 @@ function sveltekitDetector(projectPath, packageJson) {
|
|
|
1968
1945
|
let confidence = 0;
|
|
1969
1946
|
let version;
|
|
1970
1947
|
const deps = collectAllDependencies(pkg);
|
|
1971
|
-
// @sveltejs/kit package
|
|
1972
1948
|
if (deps['@sveltejs/kit']) {
|
|
1973
1949
|
confidence += 70;
|
|
1974
1950
|
version = parseVersionString(deps['@sveltejs/kit']);
|
|
@@ -2047,13 +2023,11 @@ function qwikDetector(projectPath, packageJson) {
|
|
|
2047
2023
|
let confidence = 0;
|
|
2048
2024
|
let version;
|
|
2049
2025
|
const deps = collectAllDependencies(pkg);
|
|
2050
|
-
// @builder.io/qwik package
|
|
2051
2026
|
if (deps['@builder.io/qwik']) {
|
|
2052
2027
|
confidence += 70;
|
|
2053
2028
|
version = parseVersionString(deps['@builder.io/qwik']);
|
|
2054
2029
|
sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik' });
|
|
2055
2030
|
}
|
|
2056
|
-
// @builder.io/qwik-city
|
|
2057
2031
|
if (deps['@builder.io/qwik-city']) {
|
|
2058
2032
|
confidence += 20;
|
|
2059
2033
|
sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik-city' });
|
|
@@ -2146,23 +2120,19 @@ function angularJSDetector(projectPath, packageJson) {
|
|
|
2146
2120
|
let confidence = 0;
|
|
2147
2121
|
let version;
|
|
2148
2122
|
const deps = collectAllDependencies(pkg);
|
|
2149
|
-
// AngularJS package (angular, not @angular/core)
|
|
2150
2123
|
if (deps['angular']) {
|
|
2151
2124
|
confidence += 70;
|
|
2152
2125
|
version = parseVersionString(deps['angular']);
|
|
2153
2126
|
sources.push({ type: 'package.json', field: 'dependencies.angular' });
|
|
2154
2127
|
}
|
|
2155
|
-
// AngularJS router
|
|
2156
2128
|
if (deps['angular-route']) {
|
|
2157
2129
|
confidence += 15;
|
|
2158
2130
|
sources.push({ type: 'package.json', field: 'dependencies.angular-route' });
|
|
2159
2131
|
}
|
|
2160
|
-
// AngularJS resource
|
|
2161
2132
|
if (deps['angular-resource']) {
|
|
2162
2133
|
confidence += 10;
|
|
2163
2134
|
sources.push({ type: 'package.json', field: 'dependencies.angular-resource' });
|
|
2164
2135
|
}
|
|
2165
|
-
// AngularJS animate
|
|
2166
2136
|
if (deps['angular-animate']) {
|
|
2167
2137
|
confidence += 5;
|
|
2168
2138
|
sources.push({ type: 'package.json', field: 'dependencies.angular-animate' });
|
|
@@ -2193,23 +2163,19 @@ function backboneDetector(projectPath, packageJson) {
|
|
|
2193
2163
|
let confidence = 0;
|
|
2194
2164
|
let version;
|
|
2195
2165
|
const deps = collectAllDependencies(pkg);
|
|
2196
|
-
// Backbone package
|
|
2197
2166
|
if (deps['backbone']) {
|
|
2198
2167
|
confidence += 70;
|
|
2199
2168
|
version = parseVersionString(deps['backbone']);
|
|
2200
2169
|
sources.push({ type: 'package.json', field: 'dependencies.backbone' });
|
|
2201
|
-
// Underscore (commonly used with Backbone)
|
|
2202
2170
|
if (deps['underscore']) {
|
|
2203
2171
|
confidence += 15;
|
|
2204
2172
|
sources.push({ type: 'package.json', field: 'dependencies.underscore' });
|
|
2205
2173
|
}
|
|
2206
|
-
// Lodash can be used as underscore replacement
|
|
2207
2174
|
if (deps['lodash']) {
|
|
2208
2175
|
confidence += 5;
|
|
2209
2176
|
sources.push({ type: 'package.json', field: 'dependencies.lodash' });
|
|
2210
2177
|
}
|
|
2211
2178
|
}
|
|
2212
|
-
// Marionette (Backbone framework)
|
|
2213
2179
|
if (deps['backbone.marionette'] || deps['marionette']) {
|
|
2214
2180
|
confidence += 10;
|
|
2215
2181
|
sources.push({ type: 'package.json', field: 'dependencies.backbone.marionette' });
|
|
@@ -2240,18 +2206,15 @@ function emberDetector(projectPath, packageJson) {
|
|
|
2240
2206
|
let confidence = 0;
|
|
2241
2207
|
let version;
|
|
2242
2208
|
const deps = collectAllDependencies(pkg);
|
|
2243
|
-
// Ember source package
|
|
2244
2209
|
if (deps['ember-source']) {
|
|
2245
2210
|
confidence += 70;
|
|
2246
2211
|
version = parseVersionString(deps['ember-source']);
|
|
2247
2212
|
sources.push({ type: 'package.json', field: 'dependencies.ember-source' });
|
|
2248
2213
|
}
|
|
2249
|
-
// Ember CLI
|
|
2250
2214
|
if (deps['ember-cli']) {
|
|
2251
2215
|
confidence += 20;
|
|
2252
2216
|
sources.push({ type: 'package.json', field: 'devDependencies.ember-cli' });
|
|
2253
2217
|
}
|
|
2254
|
-
// Ember Data
|
|
2255
2218
|
if (deps['ember-data']) {
|
|
2256
2219
|
confidence += 10;
|
|
2257
2220
|
sources.push({ type: 'package.json', field: 'dependencies.ember-data' });
|
|
@@ -2282,18 +2245,15 @@ function jqueryDetector(projectPath, packageJson) {
|
|
|
2282
2245
|
let confidence = 0;
|
|
2283
2246
|
let version;
|
|
2284
2247
|
const deps = collectAllDependencies(pkg);
|
|
2285
|
-
// jQuery package
|
|
2286
2248
|
if (deps['jquery']) {
|
|
2287
2249
|
confidence += 80;
|
|
2288
2250
|
version = parseVersionString(deps['jquery']);
|
|
2289
2251
|
sources.push({ type: 'package.json', field: 'dependencies.jquery' });
|
|
2290
2252
|
}
|
|
2291
|
-
// jQuery UI
|
|
2292
2253
|
if (deps['jquery-ui']) {
|
|
2293
2254
|
confidence += 10;
|
|
2294
2255
|
sources.push({ type: 'package.json', field: 'dependencies.jquery-ui' });
|
|
2295
2256
|
}
|
|
2296
|
-
// jQuery plugins
|
|
2297
2257
|
if (deps['jquery-validation']) {
|
|
2298
2258
|
confidence += 5;
|
|
2299
2259
|
sources.push({ type: 'package.json', field: 'dependencies.jquery-validation' });
|
|
@@ -2422,7 +2382,6 @@ function prettierDetector(projectPath, packageJson) {
|
|
|
2422
2382
|
confidence += 30;
|
|
2423
2383
|
sources.push({ type: 'package.json', field: 'prettier' });
|
|
2424
2384
|
}
|
|
2425
|
-
// .prettierignore file
|
|
2426
2385
|
if (exists(join$1(projectPath, '.prettierignore'))) {
|
|
2427
2386
|
confidence += 10;
|
|
2428
2387
|
sources.push({ type: 'config-file', path: '.prettierignore' });
|
|
@@ -2517,7 +2476,6 @@ function biomeDetector(projectPath, packageJson) {
|
|
|
2517
2476
|
let configPath;
|
|
2518
2477
|
let version;
|
|
2519
2478
|
const deps = collectAllDependencies(pkg);
|
|
2520
|
-
// @biomejs/biome package
|
|
2521
2479
|
if (deps['@biomejs/biome']) {
|
|
2522
2480
|
confidence += 70;
|
|
2523
2481
|
version = parseVersionString(deps['@biomejs/biome']);
|
|
@@ -2786,7 +2744,7 @@ function npmWorkspacesDetector(workspacePath, packageJson) {
|
|
|
2786
2744
|
sources.push({ type: 'lockfile', path: 'package-lock.json' });
|
|
2787
2745
|
}
|
|
2788
2746
|
if (exists(join$1(workspacePath, 'yarn.lock'))) {
|
|
2789
|
-
return null;
|
|
2747
|
+
return null;
|
|
2790
2748
|
}
|
|
2791
2749
|
if (confidence === 0) {
|
|
2792
2750
|
return null;
|
|
@@ -3129,7 +3087,6 @@ function checkTsConfigStrict(projectPath) {
|
|
|
3129
3087
|
if (!content)
|
|
3130
3088
|
return undefined;
|
|
3131
3089
|
try {
|
|
3132
|
-
// Simple JSON parsing - doesn't handle comments but good enough for strict check
|
|
3133
3090
|
const cleanContent = content.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '');
|
|
3134
3091
|
const parsed = parse(cleanContent);
|
|
3135
3092
|
return parsed?.compilerOptions?.strict === true;
|
|
@@ -3152,19 +3109,16 @@ function typescriptDetector(projectPath, packageJson) {
|
|
|
3152
3109
|
let configPath;
|
|
3153
3110
|
let version;
|
|
3154
3111
|
const deps = collectAllDependencies(pkg);
|
|
3155
|
-
// TypeScript package
|
|
3156
3112
|
if (deps['typescript']) {
|
|
3157
3113
|
confidence += 50;
|
|
3158
3114
|
version = parseVersionString(deps['typescript']);
|
|
3159
3115
|
sources.push({ type: 'package.json', field: 'dependencies.typescript' });
|
|
3160
3116
|
}
|
|
3161
|
-
// tsconfig.json
|
|
3162
3117
|
if (exists(join$1(projectPath, 'tsconfig.json'))) {
|
|
3163
3118
|
confidence += 40;
|
|
3164
3119
|
configPath = 'tsconfig.json';
|
|
3165
3120
|
sources.push({ type: 'config-file', path: 'tsconfig.json' });
|
|
3166
3121
|
}
|
|
3167
|
-
// tsconfig.*.json variants
|
|
3168
3122
|
const tsconfigVariants = ['tsconfig.build.json', 'tsconfig.lib.json', 'tsconfig.spec.json', 'tsconfig.app.json'];
|
|
3169
3123
|
for (const variant of tsconfigVariants) {
|
|
3170
3124
|
if (exists(join$1(projectPath, variant))) {
|
|
@@ -3173,7 +3127,6 @@ function typescriptDetector(projectPath, packageJson) {
|
|
|
3173
3127
|
break;
|
|
3174
3128
|
}
|
|
3175
3129
|
}
|
|
3176
|
-
// @types packages
|
|
3177
3130
|
const typePackages = keys(deps).filter((d) => d.startsWith('@types/'));
|
|
3178
3131
|
if (typePackages.length > 0) {
|
|
3179
3132
|
confidence += 10;
|
|
@@ -3207,24 +3160,20 @@ function flowDetector(projectPath, packageJson) {
|
|
|
3207
3160
|
let configPath;
|
|
3208
3161
|
let version;
|
|
3209
3162
|
const deps = collectAllDependencies(pkg);
|
|
3210
|
-
// flow-bin package
|
|
3211
3163
|
if (deps['flow-bin']) {
|
|
3212
3164
|
confidence += 60;
|
|
3213
3165
|
version = parseVersionString(deps['flow-bin']);
|
|
3214
3166
|
sources.push({ type: 'package.json', field: 'dependencies.flow-bin' });
|
|
3215
3167
|
}
|
|
3216
|
-
// .flowconfig
|
|
3217
3168
|
if (exists(join$1(projectPath, '.flowconfig'))) {
|
|
3218
3169
|
confidence += 40;
|
|
3219
3170
|
configPath = '.flowconfig';
|
|
3220
3171
|
sources.push({ type: 'config-file', path: '.flowconfig' });
|
|
3221
3172
|
}
|
|
3222
|
-
// flow-typed directory
|
|
3223
3173
|
if (exists(join$1(projectPath, 'flow-typed'))) {
|
|
3224
3174
|
confidence += 10;
|
|
3225
3175
|
sources.push({ type: 'directory', path: 'flow-typed/' });
|
|
3226
3176
|
}
|
|
3227
|
-
// @babel/preset-flow
|
|
3228
3177
|
if (deps['@babel/preset-flow']) {
|
|
3229
3178
|
confidence += 10;
|
|
3230
3179
|
sources.push({ type: 'package.json', field: 'dependencies.@babel/preset-flow' });
|
|
@@ -3248,7 +3197,6 @@ function flowDetector(projectPath, packageJson) {
|
|
|
3248
3197
|
* @returns `true` if the content contains JSDoc type annotations.
|
|
3249
3198
|
*/
|
|
3250
3199
|
function hasJsDocTypes(content) {
|
|
3251
|
-
// Check for JSDoc type annotations
|
|
3252
3200
|
return (content.includes('@type {') ||
|
|
3253
3201
|
content.includes('@param {') ||
|
|
3254
3202
|
content.includes('@returns {') ||
|
|
@@ -3267,14 +3215,11 @@ function jsdocDetector(projectPath, packageJson) {
|
|
|
3267
3215
|
const sources = [];
|
|
3268
3216
|
let confidence = 0;
|
|
3269
3217
|
const deps = collectAllDependencies(pkg);
|
|
3270
|
-
// jsdoc package
|
|
3271
3218
|
if (deps['jsdoc']) {
|
|
3272
3219
|
confidence += 30;
|
|
3273
3220
|
sources.push({ type: 'package.json', field: 'dependencies.jsdoc' });
|
|
3274
3221
|
}
|
|
3275
|
-
// typescript with checkJs (JSDoc type checking)
|
|
3276
3222
|
if (deps['typescript']) {
|
|
3277
|
-
// Check if checkJs is enabled in tsconfig
|
|
3278
3223
|
const tsconfigPath = join$1(projectPath, 'tsconfig.json');
|
|
3279
3224
|
const content = readFileIfExists(tsconfigPath);
|
|
3280
3225
|
if (content) {
|
|
@@ -3291,12 +3236,10 @@ function jsdocDetector(projectPath, packageJson) {
|
|
|
3291
3236
|
}
|
|
3292
3237
|
}
|
|
3293
3238
|
}
|
|
3294
|
-
// Check for jsconfig.json (VS Code JS type checking)
|
|
3295
3239
|
if (exists(join$1(projectPath, 'jsconfig.json'))) {
|
|
3296
3240
|
confidence += 40;
|
|
3297
3241
|
sources.push({ type: 'config-file', path: 'jsconfig.json' });
|
|
3298
3242
|
}
|
|
3299
|
-
// Sample check for JSDoc annotations in source files
|
|
3300
3243
|
const srcDir = join$1(projectPath, 'src');
|
|
3301
3244
|
if (exists(srcDir)) {
|
|
3302
3245
|
try {
|
|
@@ -3347,8 +3290,6 @@ const detectAllCache = createCache({ ttl: 60000, maxSize: 50 });
|
|
|
3347
3290
|
function isDetectAllOptions(value) {
|
|
3348
3291
|
if (typeof value !== 'object' || value === null)
|
|
3349
3292
|
return false;
|
|
3350
|
-
// DetectAllOptions has skipCache or packageJson fields specifically
|
|
3351
|
-
// PackageJson never has skipCache field
|
|
3352
3293
|
return 'skipCache' in value || 'packageJson' in value;
|
|
3353
3294
|
}
|
|
3354
3295
|
/**
|
|
@@ -3380,9 +3321,7 @@ function isDetectAllOptions(value) {
|
|
|
3380
3321
|
* ```
|
|
3381
3322
|
*/
|
|
3382
3323
|
function detectAll(projectPath, packageJsonOrOptions) {
|
|
3383
|
-
// Handle backward-compatible arguments
|
|
3384
3324
|
const options = isDetectAllOptions(packageJsonOrOptions) ? packageJsonOrOptions : { packageJson: packageJsonOrOptions };
|
|
3385
|
-
// Check cache first (unless skipCache is true)
|
|
3386
3325
|
if (!options.skipCache) {
|
|
3387
3326
|
const cached = detectAllCache.get(projectPath);
|
|
3388
3327
|
if (cached) {
|
|
@@ -3433,7 +3372,6 @@ function detectAll(projectPath, packageJsonOrOptions) {
|
|
|
3433
3372
|
legacyFrameworks: result.legacyFrameworks.map((f) => f.id),
|
|
3434
3373
|
testingFrameworks: result.testingFrameworks.map((f) => f.id),
|
|
3435
3374
|
});
|
|
3436
|
-
// Cache the result
|
|
3437
3375
|
detectAllCache.set(projectPath, result);
|
|
3438
3376
|
return result;
|
|
3439
3377
|
}
|