@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
|
@@ -11,7 +11,6 @@ var node_fs = require('node:fs');
|
|
|
11
11
|
*
|
|
12
12
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/json
|
|
13
13
|
*/
|
|
14
|
-
// Capture references at module initialization time
|
|
15
14
|
const _JSON = globalThis.JSON;
|
|
16
15
|
/**
|
|
17
16
|
* (Safe copy) Converts a JavaScript Object Notation (JSON) string into an object.
|
|
@@ -30,7 +29,6 @@ const stringify = _JSON.stringify;
|
|
|
30
29
|
*
|
|
31
30
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/math
|
|
32
31
|
*/
|
|
33
|
-
// Capture references at module initialization time
|
|
34
32
|
const _Math = globalThis.Math;
|
|
35
33
|
/**
|
|
36
34
|
* (Safe copy) Returns the value of a number rounded to the nearest integer.
|
|
@@ -49,7 +47,6 @@ const min = _Math.min;
|
|
|
49
47
|
*
|
|
50
48
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/object
|
|
51
49
|
*/
|
|
52
|
-
// Capture references at module initialization time
|
|
53
50
|
const _Object = globalThis.Object;
|
|
54
51
|
/**
|
|
55
52
|
* (Safe copy) Prevents modification of existing property attributes and values,
|
|
@@ -84,7 +81,6 @@ const defineProperties = _Object.defineProperties;
|
|
|
84
81
|
*
|
|
85
82
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/error
|
|
86
83
|
*/
|
|
87
|
-
// Capture references at module initialization time
|
|
88
84
|
const _Error = globalThis.Error;
|
|
89
85
|
const _Reflect$2 = globalThis.Reflect;
|
|
90
86
|
/**
|
|
@@ -105,7 +101,6 @@ const createError = (message, options) => _Reflect$2.construct(_Error, [message,
|
|
|
105
101
|
*
|
|
106
102
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/array
|
|
107
103
|
*/
|
|
108
|
-
// Capture references at module initialization time
|
|
109
104
|
const _Array = globalThis.Array;
|
|
110
105
|
/**
|
|
111
106
|
* (Safe copy) Determines whether the passed value is an Array.
|
|
@@ -120,7 +115,6 @@ const isArray = _Array.isArray;
|
|
|
120
115
|
*
|
|
121
116
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/console
|
|
122
117
|
*/
|
|
123
|
-
// Capture references at module initialization time
|
|
124
118
|
const _console = globalThis.console;
|
|
125
119
|
/**
|
|
126
120
|
* (Safe copy) Outputs a message to the console.
|
|
@@ -206,7 +200,6 @@ _console.timeLog.bind(_console);
|
|
|
206
200
|
*
|
|
207
201
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/set
|
|
208
202
|
*/
|
|
209
|
-
// Capture references at module initialization time
|
|
210
203
|
const _Set = globalThis.Set;
|
|
211
204
|
const _Reflect$1 = globalThis.Reflect;
|
|
212
205
|
/**
|
|
@@ -254,7 +247,6 @@ const getType = (target) => {
|
|
|
254
247
|
*
|
|
255
248
|
* @module @hyperfrontend/immutable-api-utils/built-in-copy/map
|
|
256
249
|
*/
|
|
257
|
-
// Capture references at module initialization time
|
|
258
250
|
const _Map = globalThis.Map;
|
|
259
251
|
const _Reflect = globalThis.Reflect;
|
|
260
252
|
/**
|
|
@@ -532,14 +524,11 @@ function formatMessage(namespace, message, meta) {
|
|
|
532
524
|
*/
|
|
533
525
|
function createScopedLogger(namespace, options = {}) {
|
|
534
526
|
const { level = 'error', sanitizeSecrets = true } = options;
|
|
535
|
-
// Create wrapper functions that add namespace prefix and sanitization
|
|
536
527
|
const createLogFn = (baseFn) => (message, meta) => {
|
|
537
528
|
const processedMeta = sanitizeSecrets && meta ? sanitize(meta) : meta;
|
|
538
529
|
baseFn(formatMessage(namespace, message, processedMeta));
|
|
539
530
|
};
|
|
540
|
-
// Create base logger with wrapped functions
|
|
541
531
|
const baseLogger = createLogger(createLogFn(error), createLogFn(warn), createLogFn(log), createLogFn(info), createLogFn(debug));
|
|
542
|
-
// Set initial log level (use global override if set)
|
|
543
532
|
baseLogger.setLogLevel(level);
|
|
544
533
|
const scopedLogger = freeze({
|
|
545
534
|
error: (message, meta) => baseLogger.error(message, meta),
|
|
@@ -550,7 +539,6 @@ function createScopedLogger(namespace, options = {}) {
|
|
|
550
539
|
setLogLevel: baseLogger.setLogLevel,
|
|
551
540
|
getLogLevel: baseLogger.getLogLevel,
|
|
552
541
|
});
|
|
553
|
-
// Register logger for global level management
|
|
554
542
|
loggerRegistry.add(scopedLogger);
|
|
555
543
|
return scopedLogger;
|
|
556
544
|
}
|
|
@@ -842,7 +830,6 @@ const cacheRegistry = createSet();
|
|
|
842
830
|
function createCache(options) {
|
|
843
831
|
const { ttl, maxSize } = options ?? {};
|
|
844
832
|
const store = createMap();
|
|
845
|
-
// Track insertion order for FIFO eviction
|
|
846
833
|
const insertionOrder = [];
|
|
847
834
|
/**
|
|
848
835
|
* Check if an entry is expired.
|
|
@@ -893,12 +880,10 @@ function createCache(options) {
|
|
|
893
880
|
return entry.value;
|
|
894
881
|
},
|
|
895
882
|
set(key, value) {
|
|
896
|
-
// If key exists, remove from order first
|
|
897
883
|
if (store.has(key)) {
|
|
898
884
|
removeFromOrder(key);
|
|
899
885
|
}
|
|
900
886
|
else {
|
|
901
|
-
// Evict if needed before adding new entry
|
|
902
887
|
evictIfNeeded();
|
|
903
888
|
}
|
|
904
889
|
// eslint-disable-next-line workspace/no-unsafe-builtin-methods -- Date.now() is needed for Jest fake timers compatibility
|
|
@@ -931,7 +916,6 @@ function createCache(options) {
|
|
|
931
916
|
return [...insertionOrder];
|
|
932
917
|
},
|
|
933
918
|
};
|
|
934
|
-
// Register cache for global operations
|
|
935
919
|
cacheRegistry.add(cache);
|
|
936
920
|
return freeze(cache);
|
|
937
921
|
}
|
|
@@ -962,7 +946,6 @@ function collectAllDependencies(packageJson) {
|
|
|
962
946
|
function parseVersionString(versionString) {
|
|
963
947
|
if (versionString === undefined || versionString === null)
|
|
964
948
|
return undefined;
|
|
965
|
-
// Manual parsing instead of regex to avoid ReDoS
|
|
966
949
|
let start = 0;
|
|
967
950
|
while (start < versionString.length) {
|
|
968
951
|
const char = versionString[start];
|
|
@@ -1023,7 +1006,6 @@ function expressDetector(projectPath, packageJson) {
|
|
|
1023
1006
|
version = parseVersionString(deps['express']);
|
|
1024
1007
|
sources.push({ type: 'package.json', field: 'dependencies.express' });
|
|
1025
1008
|
}
|
|
1026
|
-
// @types/express (indicates usage)
|
|
1027
1009
|
if (deps['@types/express']) {
|
|
1028
1010
|
confidence += 10;
|
|
1029
1011
|
sources.push({ type: 'package.json', field: 'dependencies.@types/express' });
|
|
@@ -1059,13 +1041,11 @@ function nestDetector(projectPath, packageJson) {
|
|
|
1059
1041
|
let version;
|
|
1060
1042
|
let configPath;
|
|
1061
1043
|
const deps = collectAllDependencies(pkg);
|
|
1062
|
-
// @nestjs/core package
|
|
1063
1044
|
if (deps['@nestjs/core']) {
|
|
1064
1045
|
confidence += 70;
|
|
1065
1046
|
version = parseVersionString(deps['@nestjs/core']);
|
|
1066
1047
|
sources.push({ type: 'package.json', field: 'dependencies.@nestjs/core' });
|
|
1067
1048
|
}
|
|
1068
|
-
// @nestjs/common
|
|
1069
1049
|
if (deps['@nestjs/common']) {
|
|
1070
1050
|
confidence += 15;
|
|
1071
1051
|
sources.push({ type: 'package.json', field: 'dependencies.@nestjs/common' });
|
|
@@ -1116,7 +1096,6 @@ function fastifyDetector(projectPath, packageJson) {
|
|
|
1116
1096
|
confidence += 15;
|
|
1117
1097
|
sources.push({ type: 'package.json', field: 'dependencies (fastify plugins)' });
|
|
1118
1098
|
}
|
|
1119
|
-
// @types/fastify (older versions)
|
|
1120
1099
|
if (deps['@types/fastify']) {
|
|
1121
1100
|
confidence += 5;
|
|
1122
1101
|
sources.push({ type: 'package.json', field: 'dependencies.@types/fastify' });
|
|
@@ -1151,7 +1130,6 @@ function koaDetector(projectPath, packageJson) {
|
|
|
1151
1130
|
version = parseVersionString(deps['koa']);
|
|
1152
1131
|
sources.push({ type: 'package.json', field: 'dependencies.koa' });
|
|
1153
1132
|
}
|
|
1154
|
-
// @types/koa
|
|
1155
1133
|
if (deps['@types/koa']) {
|
|
1156
1134
|
confidence += 10;
|
|
1157
1135
|
sources.push({ type: 'package.json', field: 'dependencies.@types/koa' });
|
|
@@ -1694,7 +1672,6 @@ function remixDetector(projectPath, packageJson) {
|
|
|
1694
1672
|
let confidence = 0;
|
|
1695
1673
|
let version;
|
|
1696
1674
|
const deps = collectAllDependencies(pkg);
|
|
1697
|
-
// @remix-run packages
|
|
1698
1675
|
if (deps['@remix-run/react']) {
|
|
1699
1676
|
confidence += 70;
|
|
1700
1677
|
version = parseVersionString(deps['@remix-run/react']);
|
|
@@ -1970,7 +1947,6 @@ function sveltekitDetector(projectPath, packageJson) {
|
|
|
1970
1947
|
let confidence = 0;
|
|
1971
1948
|
let version;
|
|
1972
1949
|
const deps = collectAllDependencies(pkg);
|
|
1973
|
-
// @sveltejs/kit package
|
|
1974
1950
|
if (deps['@sveltejs/kit']) {
|
|
1975
1951
|
confidence += 70;
|
|
1976
1952
|
version = parseVersionString(deps['@sveltejs/kit']);
|
|
@@ -2049,13 +2025,11 @@ function qwikDetector(projectPath, packageJson) {
|
|
|
2049
2025
|
let confidence = 0;
|
|
2050
2026
|
let version;
|
|
2051
2027
|
const deps = collectAllDependencies(pkg);
|
|
2052
|
-
// @builder.io/qwik package
|
|
2053
2028
|
if (deps['@builder.io/qwik']) {
|
|
2054
2029
|
confidence += 70;
|
|
2055
2030
|
version = parseVersionString(deps['@builder.io/qwik']);
|
|
2056
2031
|
sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik' });
|
|
2057
2032
|
}
|
|
2058
|
-
// @builder.io/qwik-city
|
|
2059
2033
|
if (deps['@builder.io/qwik-city']) {
|
|
2060
2034
|
confidence += 20;
|
|
2061
2035
|
sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik-city' });
|
|
@@ -2148,23 +2122,19 @@ function angularJSDetector(projectPath, packageJson) {
|
|
|
2148
2122
|
let confidence = 0;
|
|
2149
2123
|
let version;
|
|
2150
2124
|
const deps = collectAllDependencies(pkg);
|
|
2151
|
-
// AngularJS package (angular, not @angular/core)
|
|
2152
2125
|
if (deps['angular']) {
|
|
2153
2126
|
confidence += 70;
|
|
2154
2127
|
version = parseVersionString(deps['angular']);
|
|
2155
2128
|
sources.push({ type: 'package.json', field: 'dependencies.angular' });
|
|
2156
2129
|
}
|
|
2157
|
-
// AngularJS router
|
|
2158
2130
|
if (deps['angular-route']) {
|
|
2159
2131
|
confidence += 15;
|
|
2160
2132
|
sources.push({ type: 'package.json', field: 'dependencies.angular-route' });
|
|
2161
2133
|
}
|
|
2162
|
-
// AngularJS resource
|
|
2163
2134
|
if (deps['angular-resource']) {
|
|
2164
2135
|
confidence += 10;
|
|
2165
2136
|
sources.push({ type: 'package.json', field: 'dependencies.angular-resource' });
|
|
2166
2137
|
}
|
|
2167
|
-
// AngularJS animate
|
|
2168
2138
|
if (deps['angular-animate']) {
|
|
2169
2139
|
confidence += 5;
|
|
2170
2140
|
sources.push({ type: 'package.json', field: 'dependencies.angular-animate' });
|
|
@@ -2195,23 +2165,19 @@ function backboneDetector(projectPath, packageJson) {
|
|
|
2195
2165
|
let confidence = 0;
|
|
2196
2166
|
let version;
|
|
2197
2167
|
const deps = collectAllDependencies(pkg);
|
|
2198
|
-
// Backbone package
|
|
2199
2168
|
if (deps['backbone']) {
|
|
2200
2169
|
confidence += 70;
|
|
2201
2170
|
version = parseVersionString(deps['backbone']);
|
|
2202
2171
|
sources.push({ type: 'package.json', field: 'dependencies.backbone' });
|
|
2203
|
-
// Underscore (commonly used with Backbone)
|
|
2204
2172
|
if (deps['underscore']) {
|
|
2205
2173
|
confidence += 15;
|
|
2206
2174
|
sources.push({ type: 'package.json', field: 'dependencies.underscore' });
|
|
2207
2175
|
}
|
|
2208
|
-
// Lodash can be used as underscore replacement
|
|
2209
2176
|
if (deps['lodash']) {
|
|
2210
2177
|
confidence += 5;
|
|
2211
2178
|
sources.push({ type: 'package.json', field: 'dependencies.lodash' });
|
|
2212
2179
|
}
|
|
2213
2180
|
}
|
|
2214
|
-
// Marionette (Backbone framework)
|
|
2215
2181
|
if (deps['backbone.marionette'] || deps['marionette']) {
|
|
2216
2182
|
confidence += 10;
|
|
2217
2183
|
sources.push({ type: 'package.json', field: 'dependencies.backbone.marionette' });
|
|
@@ -2242,18 +2208,15 @@ function emberDetector(projectPath, packageJson) {
|
|
|
2242
2208
|
let confidence = 0;
|
|
2243
2209
|
let version;
|
|
2244
2210
|
const deps = collectAllDependencies(pkg);
|
|
2245
|
-
// Ember source package
|
|
2246
2211
|
if (deps['ember-source']) {
|
|
2247
2212
|
confidence += 70;
|
|
2248
2213
|
version = parseVersionString(deps['ember-source']);
|
|
2249
2214
|
sources.push({ type: 'package.json', field: 'dependencies.ember-source' });
|
|
2250
2215
|
}
|
|
2251
|
-
// Ember CLI
|
|
2252
2216
|
if (deps['ember-cli']) {
|
|
2253
2217
|
confidence += 20;
|
|
2254
2218
|
sources.push({ type: 'package.json', field: 'devDependencies.ember-cli' });
|
|
2255
2219
|
}
|
|
2256
|
-
// Ember Data
|
|
2257
2220
|
if (deps['ember-data']) {
|
|
2258
2221
|
confidence += 10;
|
|
2259
2222
|
sources.push({ type: 'package.json', field: 'dependencies.ember-data' });
|
|
@@ -2284,18 +2247,15 @@ function jqueryDetector(projectPath, packageJson) {
|
|
|
2284
2247
|
let confidence = 0;
|
|
2285
2248
|
let version;
|
|
2286
2249
|
const deps = collectAllDependencies(pkg);
|
|
2287
|
-
// jQuery package
|
|
2288
2250
|
if (deps['jquery']) {
|
|
2289
2251
|
confidence += 80;
|
|
2290
2252
|
version = parseVersionString(deps['jquery']);
|
|
2291
2253
|
sources.push({ type: 'package.json', field: 'dependencies.jquery' });
|
|
2292
2254
|
}
|
|
2293
|
-
// jQuery UI
|
|
2294
2255
|
if (deps['jquery-ui']) {
|
|
2295
2256
|
confidence += 10;
|
|
2296
2257
|
sources.push({ type: 'package.json', field: 'dependencies.jquery-ui' });
|
|
2297
2258
|
}
|
|
2298
|
-
// jQuery plugins
|
|
2299
2259
|
if (deps['jquery-validation']) {
|
|
2300
2260
|
confidence += 5;
|
|
2301
2261
|
sources.push({ type: 'package.json', field: 'dependencies.jquery-validation' });
|
|
@@ -2424,7 +2384,6 @@ function prettierDetector(projectPath, packageJson) {
|
|
|
2424
2384
|
confidence += 30;
|
|
2425
2385
|
sources.push({ type: 'package.json', field: 'prettier' });
|
|
2426
2386
|
}
|
|
2427
|
-
// .prettierignore file
|
|
2428
2387
|
if (exists(node_path.join(projectPath, '.prettierignore'))) {
|
|
2429
2388
|
confidence += 10;
|
|
2430
2389
|
sources.push({ type: 'config-file', path: '.prettierignore' });
|
|
@@ -2519,7 +2478,6 @@ function biomeDetector(projectPath, packageJson) {
|
|
|
2519
2478
|
let configPath;
|
|
2520
2479
|
let version;
|
|
2521
2480
|
const deps = collectAllDependencies(pkg);
|
|
2522
|
-
// @biomejs/biome package
|
|
2523
2481
|
if (deps['@biomejs/biome']) {
|
|
2524
2482
|
confidence += 70;
|
|
2525
2483
|
version = parseVersionString(deps['@biomejs/biome']);
|
|
@@ -2788,7 +2746,7 @@ function npmWorkspacesDetector(workspacePath, packageJson) {
|
|
|
2788
2746
|
sources.push({ type: 'lockfile', path: 'package-lock.json' });
|
|
2789
2747
|
}
|
|
2790
2748
|
if (exists(node_path.join(workspacePath, 'yarn.lock'))) {
|
|
2791
|
-
return null;
|
|
2749
|
+
return null;
|
|
2792
2750
|
}
|
|
2793
2751
|
if (confidence === 0) {
|
|
2794
2752
|
return null;
|
|
@@ -3131,7 +3089,6 @@ function checkTsConfigStrict(projectPath) {
|
|
|
3131
3089
|
if (!content)
|
|
3132
3090
|
return undefined;
|
|
3133
3091
|
try {
|
|
3134
|
-
// Simple JSON parsing - doesn't handle comments but good enough for strict check
|
|
3135
3092
|
const cleanContent = content.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '');
|
|
3136
3093
|
const parsed = parse(cleanContent);
|
|
3137
3094
|
return parsed?.compilerOptions?.strict === true;
|
|
@@ -3154,19 +3111,16 @@ function typescriptDetector(projectPath, packageJson) {
|
|
|
3154
3111
|
let configPath;
|
|
3155
3112
|
let version;
|
|
3156
3113
|
const deps = collectAllDependencies(pkg);
|
|
3157
|
-
// TypeScript package
|
|
3158
3114
|
if (deps['typescript']) {
|
|
3159
3115
|
confidence += 50;
|
|
3160
3116
|
version = parseVersionString(deps['typescript']);
|
|
3161
3117
|
sources.push({ type: 'package.json', field: 'dependencies.typescript' });
|
|
3162
3118
|
}
|
|
3163
|
-
// tsconfig.json
|
|
3164
3119
|
if (exists(node_path.join(projectPath, 'tsconfig.json'))) {
|
|
3165
3120
|
confidence += 40;
|
|
3166
3121
|
configPath = 'tsconfig.json';
|
|
3167
3122
|
sources.push({ type: 'config-file', path: 'tsconfig.json' });
|
|
3168
3123
|
}
|
|
3169
|
-
// tsconfig.*.json variants
|
|
3170
3124
|
const tsconfigVariants = ['tsconfig.build.json', 'tsconfig.lib.json', 'tsconfig.spec.json', 'tsconfig.app.json'];
|
|
3171
3125
|
for (const variant of tsconfigVariants) {
|
|
3172
3126
|
if (exists(node_path.join(projectPath, variant))) {
|
|
@@ -3175,7 +3129,6 @@ function typescriptDetector(projectPath, packageJson) {
|
|
|
3175
3129
|
break;
|
|
3176
3130
|
}
|
|
3177
3131
|
}
|
|
3178
|
-
// @types packages
|
|
3179
3132
|
const typePackages = keys(deps).filter((d) => d.startsWith('@types/'));
|
|
3180
3133
|
if (typePackages.length > 0) {
|
|
3181
3134
|
confidence += 10;
|
|
@@ -3209,24 +3162,20 @@ function flowDetector(projectPath, packageJson) {
|
|
|
3209
3162
|
let configPath;
|
|
3210
3163
|
let version;
|
|
3211
3164
|
const deps = collectAllDependencies(pkg);
|
|
3212
|
-
// flow-bin package
|
|
3213
3165
|
if (deps['flow-bin']) {
|
|
3214
3166
|
confidence += 60;
|
|
3215
3167
|
version = parseVersionString(deps['flow-bin']);
|
|
3216
3168
|
sources.push({ type: 'package.json', field: 'dependencies.flow-bin' });
|
|
3217
3169
|
}
|
|
3218
|
-
// .flowconfig
|
|
3219
3170
|
if (exists(node_path.join(projectPath, '.flowconfig'))) {
|
|
3220
3171
|
confidence += 40;
|
|
3221
3172
|
configPath = '.flowconfig';
|
|
3222
3173
|
sources.push({ type: 'config-file', path: '.flowconfig' });
|
|
3223
3174
|
}
|
|
3224
|
-
// flow-typed directory
|
|
3225
3175
|
if (exists(node_path.join(projectPath, 'flow-typed'))) {
|
|
3226
3176
|
confidence += 10;
|
|
3227
3177
|
sources.push({ type: 'directory', path: 'flow-typed/' });
|
|
3228
3178
|
}
|
|
3229
|
-
// @babel/preset-flow
|
|
3230
3179
|
if (deps['@babel/preset-flow']) {
|
|
3231
3180
|
confidence += 10;
|
|
3232
3181
|
sources.push({ type: 'package.json', field: 'dependencies.@babel/preset-flow' });
|
|
@@ -3250,7 +3199,6 @@ function flowDetector(projectPath, packageJson) {
|
|
|
3250
3199
|
* @returns `true` if the content contains JSDoc type annotations.
|
|
3251
3200
|
*/
|
|
3252
3201
|
function hasJsDocTypes(content) {
|
|
3253
|
-
// Check for JSDoc type annotations
|
|
3254
3202
|
return (content.includes('@type {') ||
|
|
3255
3203
|
content.includes('@param {') ||
|
|
3256
3204
|
content.includes('@returns {') ||
|
|
@@ -3269,14 +3217,11 @@ function jsdocDetector(projectPath, packageJson) {
|
|
|
3269
3217
|
const sources = [];
|
|
3270
3218
|
let confidence = 0;
|
|
3271
3219
|
const deps = collectAllDependencies(pkg);
|
|
3272
|
-
// jsdoc package
|
|
3273
3220
|
if (deps['jsdoc']) {
|
|
3274
3221
|
confidence += 30;
|
|
3275
3222
|
sources.push({ type: 'package.json', field: 'dependencies.jsdoc' });
|
|
3276
3223
|
}
|
|
3277
|
-
// typescript with checkJs (JSDoc type checking)
|
|
3278
3224
|
if (deps['typescript']) {
|
|
3279
|
-
// Check if checkJs is enabled in tsconfig
|
|
3280
3225
|
const tsconfigPath = node_path.join(projectPath, 'tsconfig.json');
|
|
3281
3226
|
const content = readFileIfExists(tsconfigPath);
|
|
3282
3227
|
if (content) {
|
|
@@ -3293,12 +3238,10 @@ function jsdocDetector(projectPath, packageJson) {
|
|
|
3293
3238
|
}
|
|
3294
3239
|
}
|
|
3295
3240
|
}
|
|
3296
|
-
// Check for jsconfig.json (VS Code JS type checking)
|
|
3297
3241
|
if (exists(node_path.join(projectPath, 'jsconfig.json'))) {
|
|
3298
3242
|
confidence += 40;
|
|
3299
3243
|
sources.push({ type: 'config-file', path: 'jsconfig.json' });
|
|
3300
3244
|
}
|
|
3301
|
-
// Sample check for JSDoc annotations in source files
|
|
3302
3245
|
const srcDir = node_path.join(projectPath, 'src');
|
|
3303
3246
|
if (exists(srcDir)) {
|
|
3304
3247
|
try {
|
|
@@ -3349,8 +3292,6 @@ const detectAllCache = createCache({ ttl: 60000, maxSize: 50 });
|
|
|
3349
3292
|
function isDetectAllOptions(value) {
|
|
3350
3293
|
if (typeof value !== 'object' || value === null)
|
|
3351
3294
|
return false;
|
|
3352
|
-
// DetectAllOptions has skipCache or packageJson fields specifically
|
|
3353
|
-
// PackageJson never has skipCache field
|
|
3354
3295
|
return 'skipCache' in value || 'packageJson' in value;
|
|
3355
3296
|
}
|
|
3356
3297
|
/**
|
|
@@ -3382,9 +3323,7 @@ function isDetectAllOptions(value) {
|
|
|
3382
3323
|
* ```
|
|
3383
3324
|
*/
|
|
3384
3325
|
function detectAll(projectPath, packageJsonOrOptions) {
|
|
3385
|
-
// Handle backward-compatible arguments
|
|
3386
3326
|
const options = isDetectAllOptions(packageJsonOrOptions) ? packageJsonOrOptions : { packageJson: packageJsonOrOptions };
|
|
3387
|
-
// Check cache first (unless skipCache is true)
|
|
3388
3327
|
if (!options.skipCache) {
|
|
3389
3328
|
const cached = detectAllCache.get(projectPath);
|
|
3390
3329
|
if (cached) {
|
|
@@ -3435,7 +3374,6 @@ function detectAll(projectPath, packageJsonOrOptions) {
|
|
|
3435
3374
|
legacyFrameworks: result.legacyFrameworks.map((f) => f.id),
|
|
3436
3375
|
testingFrameworks: result.testingFrameworks.map((f) => f.id),
|
|
3437
3376
|
});
|
|
3438
|
-
// Cache the result
|
|
3439
3377
|
detectAllCache.set(projectPath, result);
|
|
3440
3378
|
return result;
|
|
3441
3379
|
}
|