@hyperfrontend/project-scope 0.2.0 → 0.2.2
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 +13 -15
- package/README.md +3 -4
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/array/index.cjs.js +7 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/array/index.esm.js +5 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/console/index.cjs.js +13 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/console/index.esm.js +8 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/date/index.cjs.js +10 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/date/index.esm.js +8 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/error/index.cjs.js +6 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/error/index.esm.js +5 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/json/index.cjs.js +7 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/json/index.esm.js +5 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/map/index.cjs.js +6 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/map/index.esm.js +5 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/math/index.cjs.js +9 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/math/index.esm.js +6 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/number/index.cjs.js +7 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/number/index.esm.js +7 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/object/index.cjs.js +15 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/object/index.esm.js +9 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/set/index.cjs.js +6 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/set/index.esm.js +5 -0
- package/_dependencies/@hyperfrontend/logging/index.cjs.js +191 -0
- package/_dependencies/@hyperfrontend/logging/index.d.ts +151 -0
- package/_dependencies/@hyperfrontend/logging/index.esm.js +186 -0
- package/_shared/core/cache/index.cjs.js +135 -0
- package/_shared/core/cache/index.esm.js +128 -0
- package/_shared/core/errors/structured-errors/index.cjs.js +28 -0
- package/_shared/core/errors/structured-errors/index.esm.js +23 -0
- package/_shared/core/fs/stat/index.cjs.js +46 -0
- package/_shared/core/fs/stat/index.esm.js +40 -0
- package/_shared/core/path/join/index.cjs.js +13 -0
- package/_shared/core/path/join/index.esm.js +10 -0
- package/_shared/core/path/normalize/index.cjs.js +37 -0
- package/_shared/core/path/normalize/index.esm.js +31 -0
- package/_shared/core/path/resolve/index.cjs.js +47 -0
- package/_shared/core/path/resolve/index.esm.js +41 -0
- package/_shared/core/path/segments/index.cjs.js +38 -0
- package/_shared/core/path/segments/index.esm.js +31 -0
- package/_shared/core/patterns/glob/index.cjs.js +145 -0
- package/_shared/core/patterns/glob/index.esm.js +136 -0
- package/_shared/core/platform/detect/index.cjs.js +103 -0
- package/_shared/core/platform/detect/index.esm.js +95 -0
- package/_shared/core/platform/line-endings/index.cjs.js +52 -0
- package/_shared/core/platform/line-endings/index.esm.js +44 -0
- package/_shared/project/config/patterns/index.cjs.js +172 -0
- package/_shared/project/config/patterns/index.esm.js +169 -0
- package/_shared/tech/monorepo/pnpm-workspaces/index.cjs.js +33 -0
- package/_shared/tech/monorepo/pnpm-workspaces/index.esm.js +31 -0
- package/_shared/tech/shared-utils/detector-helpers/index.cjs.js +48 -0
- package/_shared/tech/shared-utils/detector-helpers/index.esm.js +43 -0
- package/_shared/vfs/types/index.cjs.js +14 -0
- package/_shared/vfs/types/index.esm.js +12 -0
- package/cli/index.cjs.js +1699 -2040
- package/cli/index.d.ts +273 -7
- package/cli/index.d.ts.map +1 -1
- package/cli/index.esm.js +1603 -1944
- package/core/encoding/index.cjs.js +88 -424
- package/core/encoding/index.d.ts +186 -3
- package/core/encoding/index.d.ts.map +1 -1
- package/core/encoding/index.esm.js +80 -415
- package/core/fs/index.cjs.js +231 -595
- package/core/fs/index.d.ts +479 -6
- package/core/fs/index.d.ts.map +1 -1
- package/core/fs/index.esm.js +221 -585
- package/core/index.cjs.js +518 -1804
- package/core/index.d.ts +486 -9
- package/core/index.d.ts.map +1 -1
- package/core/index.esm.js +501 -1784
- package/core/path/index.cjs.js +6 -235
- package/core/path/index.d.ts +306 -5
- package/core/path/index.d.ts.map +1 -1
- package/core/path/index.esm.js +4 -233
- package/core/platform/index.cjs.js +5 -226
- package/core/platform/index.d.ts +185 -3
- package/core/platform/index.d.ts.map +1 -1
- package/core/platform/index.esm.js +3 -222
- package/heuristics/dependencies/index.cjs.js +95 -509
- package/heuristics/dependencies/index.d.ts +99 -2
- package/heuristics/dependencies/index.d.ts.map +1 -1
- package/heuristics/dependencies/index.esm.js +69 -483
- package/heuristics/entry-points/index.cjs.js +93 -825
- package/heuristics/entry-points/index.d.ts +123 -2
- package/heuristics/entry-points/index.d.ts.map +1 -1
- package/heuristics/entry-points/index.esm.js +74 -806
- package/heuristics/framework/index.cjs.js +1482 -1473
- package/heuristics/framework/index.d.ts +104 -2
- package/heuristics/framework/index.d.ts.map +1 -1
- package/heuristics/framework/index.esm.js +1418 -1409
- package/heuristics/index.cjs.js +3207 -3383
- package/heuristics/index.d.ts +4 -5
- package/heuristics/index.d.ts.map +1 -1
- package/heuristics/index.esm.js +3234 -3410
- package/heuristics/project-type/index.cjs.js +1488 -1500
- package/heuristics/project-type/index.d.ts +64 -2
- package/heuristics/project-type/index.d.ts.map +1 -1
- package/heuristics/project-type/index.esm.js +1417 -1429
- package/index.cjs.js +3064 -3765
- package/index.d.ts +44 -10
- package/index.d.ts.map +1 -1
- package/index.esm.js +2923 -3612
- package/models/index.cjs.js +0 -1
- package/models/index.d.ts +20 -14
- package/models/index.d.ts.map +1 -1
- package/models/index.esm.js +0 -1
- package/nx/index.cjs.js +163 -606
- package/nx/index.d.ts +279 -4
- package/nx/index.d.ts.map +1 -1
- package/nx/index.esm.js +145 -583
- package/package.json +13 -12
- package/project/config/index.cjs.js +122 -1104
- package/project/config/index.d.ts +202 -4
- package/project/config/index.d.ts.map +1 -1
- package/project/config/index.esm.js +105 -1085
- package/project/index.cjs.js +323 -1143
- package/project/index.d.ts +4 -5
- package/project/index.d.ts.map +1 -1
- package/project/index.esm.js +302 -1119
- package/project/package/index.cjs.js +191 -483
- package/project/package/index.d.ts +280 -3
- package/project/package/index.d.ts.map +1 -1
- package/project/package/index.esm.js +178 -469
- package/project/root/index.cjs.js +107 -427
- package/project/root/index.d.ts +83 -2
- package/project/root/index.d.ts.map +1 -1
- package/project/root/index.esm.js +96 -416
- package/project/traversal/index.cjs.js +94 -645
- package/project/traversal/index.d.ts +165 -3
- package/project/traversal/index.d.ts.map +1 -1
- package/project/traversal/index.esm.js +80 -631
- package/tech/backend/index.cjs.js +221 -524
- package/tech/backend/index.d.ts +205 -8
- package/tech/backend/index.d.ts.map +1 -1
- package/tech/backend/index.esm.js +200 -503
- package/tech/build/index.cjs.js +348 -647
- package/tech/build/index.d.ts +276 -10
- package/tech/build/index.d.ts.map +1 -1
- package/tech/build/index.esm.js +326 -625
- package/tech/frontend/index.cjs.js +505 -700
- package/tech/frontend/index.d.ts +379 -15
- package/tech/frontend/index.d.ts.map +1 -1
- package/tech/frontend/index.esm.js +481 -676
- package/tech/index.cjs.js +1580 -1482
- package/tech/index.d.ts +55 -32
- package/tech/index.d.ts.map +1 -1
- package/tech/index.esm.js +1513 -1415
- package/tech/legacy/index.cjs.js +97 -474
- package/tech/legacy/index.d.ts +125 -7
- package/tech/legacy/index.d.ts.map +1 -1
- package/tech/legacy/index.esm.js +79 -456
- package/tech/linting/index.cjs.js +136 -536
- package/tech/linting/index.d.ts +129 -7
- package/tech/linting/index.d.ts.map +1 -1
- package/tech/linting/index.esm.js +116 -516
- package/tech/monorepo/index.cjs.js +244 -584
- package/tech/monorepo/index.d.ts +241 -10
- package/tech/monorepo/index.d.ts.map +1 -1
- package/tech/monorepo/index.esm.js +224 -564
- package/tech/testing/index.cjs.js +214 -582
- package/tech/testing/index.d.ts +176 -8
- package/tech/testing/index.d.ts.map +1 -1
- package/tech/testing/index.esm.js +196 -564
- package/tech/types/index.cjs.js +121 -532
- package/tech/types/index.d.ts +120 -2
- package/tech/types/index.d.ts.map +1 -1
- package/tech/types/index.esm.js +99 -510
- package/vfs/index.cjs.js +647 -1187
- package/vfs/index.d.ts +360 -6
- package/vfs/index.d.ts.map +1 -1
- package/vfs/index.esm.js +672 -1212
- package/ARCHITECTURE.md +0 -370
- package/analyze.d.ts +0 -33
- package/analyze.d.ts.map +0 -1
- package/cli/commands/analyze.d.ts +0 -20
- package/cli/commands/analyze.d.ts.map +0 -1
- package/cli/commands/config.d.ts +0 -20
- package/cli/commands/config.d.ts.map +0 -1
- package/cli/commands/deps.d.ts +0 -18
- package/cli/commands/deps.d.ts.map +0 -1
- package/cli/commands/tree.d.ts +0 -24
- package/cli/commands/tree.d.ts.map +0 -1
- package/cli/index.cjs.js.map +0 -1
- package/cli/index.esm.js.map +0 -1
- package/cli/run.d.ts +0 -25
- package/cli/run.d.ts.map +0 -1
- package/cli/types.d.ts +0 -55
- package/cli/types.d.ts.map +0 -1
- package/core/cache.d.ts +0 -157
- package/core/cache.d.ts.map +0 -1
- package/core/encoding/convert.d.ts +0 -32
- package/core/encoding/convert.d.ts.map +0 -1
- package/core/encoding/detect.d.ts +0 -86
- package/core/encoding/detect.d.ts.map +0 -1
- package/core/encoding/index.cjs.js.map +0 -1
- package/core/encoding/index.esm.js.map +0 -1
- package/core/errors/structured-errors.d.ts +0 -64
- package/core/errors/structured-errors.d.ts.map +0 -1
- package/core/fs/directory.d.ts +0 -88
- package/core/fs/directory.d.ts.map +0 -1
- package/core/fs/index.cjs.js.map +0 -1
- package/core/fs/index.esm.js.map +0 -1
- package/core/fs/read.d.ts +0 -86
- package/core/fs/read.d.ts.map +0 -1
- package/core/fs/stat.d.ts +0 -58
- package/core/fs/stat.d.ts.map +0 -1
- package/core/fs/traversal.d.ts +0 -26
- package/core/fs/traversal.d.ts.map +0 -1
- package/core/fs/write.d.ts +0 -75
- package/core/fs/write.d.ts.map +0 -1
- package/core/index.cjs.js.map +0 -1
- package/core/index.esm.js.map +0 -1
- package/core/logger.d.ts +0 -111
- package/core/logger.d.ts.map +0 -1
- package/core/path/index.cjs.js.map +0 -1
- package/core/path/index.esm.js.map +0 -1
- package/core/path/join.d.ts +0 -17
- package/core/path/join.d.ts.map +0 -1
- package/core/path/normalize.d.ts +0 -37
- package/core/path/normalize.d.ts.map +0 -1
- package/core/path/resolve.d.ts +0 -52
- package/core/path/resolve.d.ts.map +0 -1
- package/core/path/segments.d.ts +0 -59
- package/core/path/segments.d.ts.map +0 -1
- package/core/patterns/glob.d.ts +0 -46
- package/core/patterns/glob.d.ts.map +0 -1
- package/core/platform/detect.d.ts +0 -66
- package/core/platform/detect.d.ts.map +0 -1
- package/core/platform/index.cjs.js.map +0 -1
- package/core/platform/index.esm.js.map +0 -1
- package/core/platform/line-endings.d.ts +0 -48
- package/core/platform/line-endings.d.ts.map +0 -1
- package/heuristics/dependencies/analyze.d.ts +0 -77
- package/heuristics/dependencies/analyze.d.ts.map +0 -1
- package/heuristics/dependencies/index.cjs.js.map +0 -1
- package/heuristics/dependencies/index.esm.js.map +0 -1
- package/heuristics/entry-points/discover.d.ts +0 -86
- package/heuristics/entry-points/discover.d.ts.map +0 -1
- package/heuristics/entry-points/index.cjs.js.map +0 -1
- package/heuristics/entry-points/index.esm.js.map +0 -1
- package/heuristics/framework/identify.d.ts +0 -84
- package/heuristics/framework/identify.d.ts.map +0 -1
- package/heuristics/framework/index.cjs.js.map +0 -1
- package/heuristics/framework/index.esm.js.map +0 -1
- package/heuristics/index.cjs.js.map +0 -1
- package/heuristics/index.esm.js.map +0 -1
- package/heuristics/project-type/detect.d.ts +0 -61
- package/heuristics/project-type/detect.d.ts.map +0 -1
- package/heuristics/project-type/index.cjs.js.map +0 -1
- package/heuristics/project-type/index.esm.js.map +0 -1
- package/index.cjs.js.map +0 -1
- package/index.esm.js.map +0 -1
- package/models/index.cjs.js.map +0 -1
- package/models/index.esm.js.map +0 -1
- package/nx/detect.d.ts +0 -105
- package/nx/detect.d.ts.map +0 -1
- package/nx/devkit-loader.d.ts +0 -62
- package/nx/devkit-loader.d.ts.map +0 -1
- package/nx/index.cjs.js.map +0 -1
- package/nx/index.esm.js.map +0 -1
- package/nx/project-config.d.ts +0 -109
- package/nx/project-config.d.ts.map +0 -1
- package/project/config/detect.d.ts +0 -77
- package/project/config/detect.d.ts.map +0 -1
- package/project/config/index.cjs.js.map +0 -1
- package/project/config/index.esm.js.map +0 -1
- package/project/config/parse.d.ts +0 -53
- package/project/config/parse.d.ts.map +0 -1
- package/project/config/patterns.d.ts +0 -31
- package/project/config/patterns.d.ts.map +0 -1
- package/project/index.cjs.js.map +0 -1
- package/project/index.esm.js.map +0 -1
- package/project/package/dependencies.d.ts +0 -101
- package/project/package/dependencies.d.ts.map +0 -1
- package/project/package/index.cjs.js.map +0 -1
- package/project/package/index.esm.js.map +0 -1
- package/project/package/read.d.ts +0 -66
- package/project/package/read.d.ts.map +0 -1
- package/project/root/detect.d.ts +0 -65
- package/project/root/detect.d.ts.map +0 -1
- package/project/root/index.cjs.js.map +0 -1
- package/project/root/index.esm.js.map +0 -1
- package/project/traversal/index.cjs.js.map +0 -1
- package/project/traversal/index.esm.js.map +0 -1
- package/project/traversal/search.d.ts +0 -59
- package/project/traversal/search.d.ts.map +0 -1
- package/project/traversal/walk.d.ts +0 -63
- package/project/traversal/walk.d.ts.map +0 -1
- package/tech/backend/detect-all.d.ts +0 -13
- package/tech/backend/detect-all.d.ts.map +0 -1
- package/tech/backend/express.d.ts +0 -11
- package/tech/backend/express.d.ts.map +0 -1
- package/tech/backend/fastify.d.ts +0 -11
- package/tech/backend/fastify.d.ts.map +0 -1
- package/tech/backend/hono.d.ts +0 -11
- package/tech/backend/hono.d.ts.map +0 -1
- package/tech/backend/index.cjs.js.map +0 -1
- package/tech/backend/index.esm.js.map +0 -1
- package/tech/backend/koa.d.ts +0 -11
- package/tech/backend/koa.d.ts.map +0 -1
- package/tech/backend/nestjs.d.ts +0 -11
- package/tech/backend/nestjs.d.ts.map +0 -1
- package/tech/backend/types.d.ts +0 -31
- package/tech/backend/types.d.ts.map +0 -1
- package/tech/build/babel.d.ts +0 -13
- package/tech/build/babel.d.ts.map +0 -1
- package/tech/build/detect-all.d.ts +0 -13
- package/tech/build/detect-all.d.ts.map +0 -1
- package/tech/build/esbuild.d.ts +0 -11
- package/tech/build/esbuild.d.ts.map +0 -1
- package/tech/build/index.cjs.js.map +0 -1
- package/tech/build/index.esm.js.map +0 -1
- package/tech/build/parcel.d.ts +0 -13
- package/tech/build/parcel.d.ts.map +0 -1
- package/tech/build/rollup.d.ts +0 -13
- package/tech/build/rollup.d.ts.map +0 -1
- package/tech/build/swc.d.ts +0 -13
- package/tech/build/swc.d.ts.map +0 -1
- package/tech/build/types.d.ts +0 -31
- package/tech/build/types.d.ts.map +0 -1
- package/tech/build/vite.d.ts +0 -13
- package/tech/build/vite.d.ts.map +0 -1
- package/tech/build/webpack.d.ts +0 -13
- package/tech/build/webpack.d.ts.map +0 -1
- package/tech/frontend/angular.d.ts +0 -11
- package/tech/frontend/angular.d.ts.map +0 -1
- package/tech/frontend/astro.d.ts +0 -11
- package/tech/frontend/astro.d.ts.map +0 -1
- package/tech/frontend/detect-all.d.ts +0 -13
- package/tech/frontend/detect-all.d.ts.map +0 -1
- package/tech/frontend/gatsby.d.ts +0 -11
- package/tech/frontend/gatsby.d.ts.map +0 -1
- package/tech/frontend/index.cjs.js.map +0 -1
- package/tech/frontend/index.esm.js.map +0 -1
- package/tech/frontend/nextjs.d.ts +0 -11
- package/tech/frontend/nextjs.d.ts.map +0 -1
- package/tech/frontend/nuxt.d.ts +0 -11
- package/tech/frontend/nuxt.d.ts.map +0 -1
- package/tech/frontend/qwik.d.ts +0 -11
- package/tech/frontend/qwik.d.ts.map +0 -1
- package/tech/frontend/react.d.ts +0 -11
- package/tech/frontend/react.d.ts.map +0 -1
- package/tech/frontend/remix.d.ts +0 -11
- package/tech/frontend/remix.d.ts.map +0 -1
- package/tech/frontend/solid.d.ts +0 -11
- package/tech/frontend/solid.d.ts.map +0 -1
- package/tech/frontend/svelte.d.ts +0 -11
- package/tech/frontend/svelte.d.ts.map +0 -1
- package/tech/frontend/sveltekit.d.ts +0 -11
- package/tech/frontend/sveltekit.d.ts.map +0 -1
- package/tech/frontend/types.d.ts +0 -35
- package/tech/frontend/types.d.ts.map +0 -1
- package/tech/frontend/vue.d.ts +0 -11
- package/tech/frontend/vue.d.ts.map +0 -1
- package/tech/index.cjs.js.map +0 -1
- package/tech/index.esm.js.map +0 -1
- package/tech/legacy/angularjs.d.ts +0 -12
- package/tech/legacy/angularjs.d.ts.map +0 -1
- package/tech/legacy/backbone.d.ts +0 -11
- package/tech/legacy/backbone.d.ts.map +0 -1
- package/tech/legacy/detect-all.d.ts +0 -13
- package/tech/legacy/detect-all.d.ts.map +0 -1
- package/tech/legacy/ember.d.ts +0 -11
- package/tech/legacy/ember.d.ts.map +0 -1
- package/tech/legacy/index.cjs.js.map +0 -1
- package/tech/legacy/index.esm.js.map +0 -1
- package/tech/legacy/jquery.d.ts +0 -11
- package/tech/legacy/jquery.d.ts.map +0 -1
- package/tech/legacy/types.d.ts +0 -33
- package/tech/legacy/types.d.ts.map +0 -1
- package/tech/linting/biome.d.ts +0 -11
- package/tech/linting/biome.d.ts.map +0 -1
- package/tech/linting/detect-all.d.ts +0 -13
- package/tech/linting/detect-all.d.ts.map +0 -1
- package/tech/linting/eslint.d.ts +0 -13
- package/tech/linting/eslint.d.ts.map +0 -1
- package/tech/linting/index.cjs.js.map +0 -1
- package/tech/linting/index.esm.js.map +0 -1
- package/tech/linting/prettier.d.ts +0 -13
- package/tech/linting/prettier.d.ts.map +0 -1
- package/tech/linting/stylelint.d.ts +0 -13
- package/tech/linting/stylelint.d.ts.map +0 -1
- package/tech/linting/types.d.ts +0 -31
- package/tech/linting/types.d.ts.map +0 -1
- package/tech/monorepo/detect-all.d.ts +0 -13
- package/tech/monorepo/detect-all.d.ts.map +0 -1
- package/tech/monorepo/index.cjs.js.map +0 -1
- package/tech/monorepo/index.esm.js.map +0 -1
- package/tech/monorepo/lerna.d.ts +0 -11
- package/tech/monorepo/lerna.d.ts.map +0 -1
- package/tech/monorepo/npm-workspaces.d.ts +0 -11
- package/tech/monorepo/npm-workspaces.d.ts.map +0 -1
- package/tech/monorepo/nx.d.ts +0 -11
- package/tech/monorepo/nx.d.ts.map +0 -1
- package/tech/monorepo/pnpm-workspaces.d.ts +0 -9
- package/tech/monorepo/pnpm-workspaces.d.ts.map +0 -1
- package/tech/monorepo/rush.d.ts +0 -11
- package/tech/monorepo/rush.d.ts.map +0 -1
- package/tech/monorepo/turborepo.d.ts +0 -11
- package/tech/monorepo/turborepo.d.ts.map +0 -1
- package/tech/monorepo/types.d.ts +0 -39
- package/tech/monorepo/types.d.ts.map +0 -1
- package/tech/monorepo/yarn-workspaces.d.ts +0 -11
- package/tech/monorepo/yarn-workspaces.d.ts.map +0 -1
- package/tech/shared-utils/detector-helpers.d.ts +0 -52
- package/tech/shared-utils/detector-helpers.d.ts.map +0 -1
- package/tech/shared-utils/types.d.ts +0 -41
- package/tech/shared-utils/types.d.ts.map +0 -1
- package/tech/testing/cypress.d.ts +0 -13
- package/tech/testing/cypress.d.ts.map +0 -1
- package/tech/testing/detect-all.d.ts +0 -13
- package/tech/testing/detect-all.d.ts.map +0 -1
- package/tech/testing/index.cjs.js.map +0 -1
- package/tech/testing/index.esm.js.map +0 -1
- package/tech/testing/jest.d.ts +0 -13
- package/tech/testing/jest.d.ts.map +0 -1
- package/tech/testing/mocha.d.ts +0 -13
- package/tech/testing/mocha.d.ts.map +0 -1
- package/tech/testing/playwright.d.ts +0 -13
- package/tech/testing/playwright.d.ts.map +0 -1
- package/tech/testing/types.d.ts +0 -35
- package/tech/testing/types.d.ts.map +0 -1
- package/tech/testing/vitest.d.ts +0 -13
- package/tech/testing/vitest.d.ts.map +0 -1
- package/tech/types/detectors.d.ts +0 -67
- package/tech/types/detectors.d.ts.map +0 -1
- package/tech/types/index.cjs.js.map +0 -1
- package/tech/types/index.esm.js.map +0 -1
- package/vfs/commit.d.ts +0 -32
- package/vfs/commit.d.ts.map +0 -1
- package/vfs/diff.d.ts +0 -73
- package/vfs/diff.d.ts.map +0 -1
- package/vfs/factory.d.ts +0 -37
- package/vfs/factory.d.ts.map +0 -1
- package/vfs/fs-tree.d.ts +0 -13
- package/vfs/fs-tree.d.ts.map +0 -1
- package/vfs/index.cjs.js.map +0 -1
- package/vfs/index.esm.js.map +0 -1
- package/vfs/types.d.ts +0 -178
- package/vfs/types.d.ts.map +0 -1
|
@@ -1,408 +1,23 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const _Math = globalThis.Math;
|
|
16
|
-
/**
|
|
17
|
-
* (Safe copy) Returns the smaller of zero or more numbers.
|
|
18
|
-
*/
|
|
19
|
-
const min = _Math.min;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Safe copies of Error built-ins via factory functions.
|
|
23
|
-
*
|
|
24
|
-
* Since constructors cannot be safely captured via Object.assign, this module
|
|
25
|
-
* provides factory functions that use Reflect.construct internally.
|
|
26
|
-
*
|
|
27
|
-
* These references are captured at module initialization time to protect against
|
|
28
|
-
* prototype pollution attacks. Import only what you need for tree-shaking.
|
|
29
|
-
*
|
|
30
|
-
* @module @hyperfrontend/immutable-api-utils/built-in-copy/error
|
|
31
|
-
*/
|
|
32
|
-
// Capture references at module initialization time
|
|
33
|
-
const _Error = globalThis.Error;
|
|
34
|
-
const _Reflect$1 = globalThis.Reflect;
|
|
35
|
-
/**
|
|
36
|
-
* (Safe copy) Creates a new Error using the captured Error constructor.
|
|
37
|
-
* Use this instead of `new Error()`.
|
|
38
|
-
*
|
|
39
|
-
* @param message - Optional error message.
|
|
40
|
-
* @param options - Optional error options.
|
|
41
|
-
* @returns A new Error instance.
|
|
42
|
-
*/
|
|
43
|
-
const createError = (message, options) => _Reflect$1.construct(_Error, [message, options]);
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Safe copies of JSON built-in methods.
|
|
47
|
-
*
|
|
48
|
-
* These references are captured at module initialization time to protect against
|
|
49
|
-
* prototype pollution attacks. Import only what you need for tree-shaking.
|
|
50
|
-
*
|
|
51
|
-
* @module @hyperfrontend/immutable-api-utils/built-in-copy/json
|
|
52
|
-
*/
|
|
53
|
-
// Capture references at module initialization time
|
|
54
|
-
const _JSON = globalThis.JSON;
|
|
55
|
-
/**
|
|
56
|
-
* (Safe copy) Converts a JavaScript Object Notation (JSON) string into an object.
|
|
57
|
-
*/
|
|
58
|
-
const parse = _JSON.parse;
|
|
59
|
-
/**
|
|
60
|
-
* (Safe copy) Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
|
|
61
|
-
*/
|
|
62
|
-
const stringify = _JSON.stringify;
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Safe copies of Object built-in methods.
|
|
66
|
-
*
|
|
67
|
-
* These references are captured at module initialization time to protect against
|
|
68
|
-
* prototype pollution attacks. Import only what you need for tree-shaking.
|
|
69
|
-
*
|
|
70
|
-
* @module @hyperfrontend/immutable-api-utils/built-in-copy/object
|
|
71
|
-
*/
|
|
72
|
-
// Capture references at module initialization time
|
|
73
|
-
const _Object = globalThis.Object;
|
|
74
|
-
/**
|
|
75
|
-
* (Safe copy) Prevents modification of existing property attributes and values,
|
|
76
|
-
* and prevents the addition of new properties.
|
|
77
|
-
*/
|
|
78
|
-
const freeze = _Object.freeze;
|
|
79
|
-
/**
|
|
80
|
-
* (Safe copy) Returns the names of the enumerable string properties and methods of an object.
|
|
81
|
-
*/
|
|
82
|
-
const keys = _Object.keys;
|
|
83
|
-
/**
|
|
84
|
-
* (Safe copy) Returns an array of key/values of the enumerable own properties of an object.
|
|
85
|
-
*/
|
|
86
|
-
const entries = _Object.entries;
|
|
87
|
-
/**
|
|
88
|
-
* (Safe copy) Returns an array of values of the enumerable own properties of an object.
|
|
89
|
-
*/
|
|
90
|
-
const values = _Object.values;
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Safe copies of Array built-in static methods.
|
|
94
|
-
*
|
|
95
|
-
* These references are captured at module initialization time to protect against
|
|
96
|
-
* prototype pollution attacks. Import only what you need for tree-shaking.
|
|
97
|
-
*
|
|
98
|
-
* @module @hyperfrontend/immutable-api-utils/built-in-copy/array
|
|
99
|
-
*/
|
|
100
|
-
// Capture references at module initialization time
|
|
101
|
-
const _Array = globalThis.Array;
|
|
102
|
-
/**
|
|
103
|
-
* (Safe copy) Determines whether the passed value is an Array.
|
|
104
|
-
*/
|
|
105
|
-
const isArray = _Array.isArray;
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Safe copies of Console built-in methods.
|
|
109
|
-
*
|
|
110
|
-
* These references are captured at module initialization time to protect against
|
|
111
|
-
* prototype pollution attacks. Import only what you need for tree-shaking.
|
|
112
|
-
*
|
|
113
|
-
* @module @hyperfrontend/immutable-api-utils/built-in-copy/console
|
|
114
|
-
*/
|
|
115
|
-
// Capture references at module initialization time
|
|
116
|
-
const _console = globalThis.console;
|
|
117
|
-
/**
|
|
118
|
-
* (Safe copy) Outputs a message to the console.
|
|
119
|
-
*/
|
|
120
|
-
const log = _console.log.bind(_console);
|
|
121
|
-
/**
|
|
122
|
-
* (Safe copy) Outputs a warning message to the console.
|
|
123
|
-
*/
|
|
124
|
-
const warn = _console.warn.bind(_console);
|
|
125
|
-
/**
|
|
126
|
-
* (Safe copy) Outputs an error message to the console.
|
|
127
|
-
*/
|
|
128
|
-
const error = _console.error.bind(_console);
|
|
129
|
-
/**
|
|
130
|
-
* (Safe copy) Outputs an informational message to the console.
|
|
131
|
-
*/
|
|
132
|
-
const info = _console.info.bind(_console);
|
|
133
|
-
/**
|
|
134
|
-
* (Safe copy) Outputs a debug message to the console.
|
|
135
|
-
*/
|
|
136
|
-
const debug = _console.debug.bind(_console);
|
|
137
|
-
/**
|
|
138
|
-
* (Safe copy) Outputs a stack trace to the console.
|
|
139
|
-
*/
|
|
140
|
-
_console.trace.bind(_console);
|
|
141
|
-
/**
|
|
142
|
-
* (Safe copy) Displays an interactive listing of the properties of a specified object.
|
|
143
|
-
*/
|
|
144
|
-
_console.dir.bind(_console);
|
|
145
|
-
/**
|
|
146
|
-
* (Safe copy) Displays tabular data as a table.
|
|
147
|
-
*/
|
|
148
|
-
_console.table.bind(_console);
|
|
149
|
-
/**
|
|
150
|
-
* (Safe copy) Writes an error message to the console if the assertion is false.
|
|
151
|
-
*/
|
|
152
|
-
_console.assert.bind(_console);
|
|
153
|
-
/**
|
|
154
|
-
* (Safe copy) Clears the console.
|
|
155
|
-
*/
|
|
156
|
-
_console.clear.bind(_console);
|
|
157
|
-
/**
|
|
158
|
-
* (Safe copy) Logs the number of times that this particular call to count() has been called.
|
|
159
|
-
*/
|
|
160
|
-
_console.count.bind(_console);
|
|
161
|
-
/**
|
|
162
|
-
* (Safe copy) Resets the counter used with console.count().
|
|
163
|
-
*/
|
|
164
|
-
_console.countReset.bind(_console);
|
|
165
|
-
/**
|
|
166
|
-
* (Safe copy) Creates a new inline group in the console.
|
|
167
|
-
*/
|
|
168
|
-
_console.group.bind(_console);
|
|
169
|
-
/**
|
|
170
|
-
* (Safe copy) Creates a new inline group in the console that is initially collapsed.
|
|
171
|
-
*/
|
|
172
|
-
_console.groupCollapsed.bind(_console);
|
|
173
|
-
/**
|
|
174
|
-
* (Safe copy) Exits the current inline group.
|
|
175
|
-
*/
|
|
176
|
-
_console.groupEnd.bind(_console);
|
|
177
|
-
/**
|
|
178
|
-
* (Safe copy) Starts a timer with a name specified as an input parameter.
|
|
179
|
-
*/
|
|
180
|
-
_console.time.bind(_console);
|
|
181
|
-
/**
|
|
182
|
-
* (Safe copy) Stops a timer that was previously started.
|
|
183
|
-
*/
|
|
184
|
-
_console.timeEnd.bind(_console);
|
|
185
|
-
/**
|
|
186
|
-
* (Safe copy) Logs the current value of a timer that was previously started.
|
|
187
|
-
*/
|
|
188
|
-
_console.timeLog.bind(_console);
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Safe copies of Set built-in via factory function.
|
|
192
|
-
*
|
|
193
|
-
* Since constructors cannot be safely captured via Object.assign, this module
|
|
194
|
-
* provides a factory function that uses Reflect.construct internally.
|
|
195
|
-
*
|
|
196
|
-
* These references are captured at module initialization time to protect against
|
|
197
|
-
* prototype pollution attacks. Import only what you need for tree-shaking.
|
|
198
|
-
*
|
|
199
|
-
* @module @hyperfrontend/immutable-api-utils/built-in-copy/set
|
|
200
|
-
*/
|
|
201
|
-
// Capture references at module initialization time
|
|
202
|
-
const _Set = globalThis.Set;
|
|
203
|
-
const _Reflect = globalThis.Reflect;
|
|
204
|
-
/**
|
|
205
|
-
* (Safe copy) Creates a new Set using the captured Set constructor.
|
|
206
|
-
* Use this instead of `new Set()`.
|
|
207
|
-
*
|
|
208
|
-
* @param iterable - Optional iterable of values.
|
|
209
|
-
* @returns A new Set instance.
|
|
210
|
-
*/
|
|
211
|
-
const createSet = (iterable) => _Reflect.construct(_Set, iterable ? [iterable] : []);
|
|
212
|
-
|
|
213
|
-
const registeredClasses = [];
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* Returns the data type of the target.
|
|
217
|
-
* Uses native `typeof` operator, however, makes distinction between `null`, `array`, and `object`.
|
|
218
|
-
* Also, when classes are registered via `registerClass`, it checks if objects are instance of any known registered class.
|
|
219
|
-
*
|
|
220
|
-
* @param target - The target to get the data type of.
|
|
221
|
-
* @returns The data type of the target.
|
|
222
|
-
*/
|
|
223
|
-
const getType = (target) => {
|
|
224
|
-
if (target === null)
|
|
225
|
-
return 'null';
|
|
226
|
-
const nativeDataType = typeof target;
|
|
227
|
-
if (nativeDataType === 'object') {
|
|
228
|
-
if (isArray(target))
|
|
229
|
-
return 'array';
|
|
230
|
-
for (const registeredClass of registeredClasses) {
|
|
231
|
-
if (target instanceof registeredClass)
|
|
232
|
-
return registeredClass.name;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
return nativeDataType;
|
|
236
|
-
};
|
|
237
|
-
|
|
238
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
239
|
-
/**
|
|
240
|
-
* Creates a wrapper function that only executes the wrapped function if the condition function returns true.
|
|
241
|
-
*
|
|
242
|
-
* @param func - The function to be conditionally executed.
|
|
243
|
-
* @param conditionFunc - A function that returns a boolean, determining if `func` should be executed.
|
|
244
|
-
* @returns A wrapped version of `func` that executes conditionally.
|
|
245
|
-
*/
|
|
246
|
-
function createConditionalExecutionFunction(func, conditionFunc) {
|
|
247
|
-
return function (...args) {
|
|
248
|
-
if (conditionFunc()) {
|
|
249
|
-
return func(...args);
|
|
250
|
-
}
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
255
|
-
/**
|
|
256
|
-
* Creates a wrapper function that silently ignores any errors thrown by the wrapped void function.
|
|
257
|
-
* This function is specifically for wrapping functions that do not return a value (void functions).
|
|
258
|
-
* Exceptions are swallowed without any logging or handling.
|
|
259
|
-
*
|
|
260
|
-
* @param func - The void function to be wrapped.
|
|
261
|
-
* @returns A wrapped version of the input function that ignores errors.
|
|
262
|
-
*/
|
|
263
|
-
function createErrorIgnoringFunction(func) {
|
|
264
|
-
return function (...args) {
|
|
265
|
-
try {
|
|
266
|
-
func(...args);
|
|
267
|
-
}
|
|
268
|
-
catch {
|
|
269
|
-
// Deliberately swallowing/ignoring the exception
|
|
270
|
-
}
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
275
|
-
/**
|
|
276
|
-
* A no-operation function (noop) that does nothing regardless of the arguments passed.
|
|
277
|
-
* It is designed to be as permissive as possible in its typing without using the `Function` keyword.
|
|
278
|
-
*
|
|
279
|
-
* @param args - Any arguments passed to the function (ignored)
|
|
280
|
-
*/
|
|
281
|
-
const noop = (...args) => {
|
|
282
|
-
// Intentionally does nothing
|
|
283
|
-
};
|
|
284
|
-
|
|
285
|
-
const logLevels = ['none', 'error', 'warn', 'log', 'info', 'debug'];
|
|
286
|
-
const priority = {
|
|
287
|
-
error: 4,
|
|
288
|
-
warn: 3,
|
|
289
|
-
log: 2,
|
|
290
|
-
info: 1,
|
|
291
|
-
debug: 0,
|
|
292
|
-
};
|
|
293
|
-
/**
|
|
294
|
-
* Validates whether a given string is a valid log level.
|
|
295
|
-
*
|
|
296
|
-
* @param level - The log level to validate
|
|
297
|
-
* @returns True if the level is valid, false otherwise
|
|
298
|
-
*/
|
|
299
|
-
function isValidLogLevel(level) {
|
|
300
|
-
return logLevels.includes(level);
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Creates a log level configuration manager for controlling logging behavior.
|
|
304
|
-
* Provides methods to get, set, and evaluate log levels based on priority.
|
|
305
|
-
*
|
|
306
|
-
* @param level - The initial log level (defaults to 'error')
|
|
307
|
-
* @returns A configuration object with log level management methods
|
|
308
|
-
* @throws {Error} When the provided level is not a valid log level
|
|
309
|
-
*/
|
|
310
|
-
function createLogLevelConfig(level = 'error') {
|
|
311
|
-
if (!isValidLogLevel(level)) {
|
|
312
|
-
throw createError('Cannot create log level configuration with a valid default log level');
|
|
313
|
-
}
|
|
314
|
-
const state = { level };
|
|
315
|
-
const getLogLevel = () => state.level;
|
|
316
|
-
const setLogLevel = (level) => {
|
|
317
|
-
if (!isValidLogLevel(level)) {
|
|
318
|
-
throw createError(`Cannot set value '${level}' level. Expected levels are ${logLevels}.`);
|
|
319
|
-
}
|
|
320
|
-
state.level = level;
|
|
321
|
-
};
|
|
322
|
-
const shouldLog = (level) => {
|
|
323
|
-
if (state.level === 'none' || level === 'none' || !isValidLogLevel(level)) {
|
|
324
|
-
return false;
|
|
325
|
-
}
|
|
326
|
-
return priority[level] >= priority[state.level];
|
|
327
|
-
};
|
|
328
|
-
return freeze({
|
|
329
|
-
getLogLevel,
|
|
330
|
-
setLogLevel,
|
|
331
|
-
shouldLog,
|
|
332
|
-
});
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/**
|
|
336
|
-
* Creates a logger instance with configurable log level filtering.
|
|
337
|
-
* Each log function is wrapped to respect the current log level setting.
|
|
338
|
-
*
|
|
339
|
-
* @param error - Function to handle error-level logs (required)
|
|
340
|
-
* @param warn - Function to handle warning-level logs (optional, defaults to noop)
|
|
341
|
-
* @param log - Function to handle standard logs (optional, defaults to noop)
|
|
342
|
-
* @param info - Function to handle info-level logs (optional, defaults to noop)
|
|
343
|
-
* @param debug - Function to handle debug-level logs (optional, defaults to noop)
|
|
344
|
-
* @returns A frozen logger object with log methods and level control
|
|
345
|
-
* @throws {ErrorLevelFn} When any provided log function is invalid
|
|
346
|
-
*/
|
|
347
|
-
function createLogger(error, warn = noop, log = noop, info = noop, debug = noop) {
|
|
348
|
-
if (notValidLogFn(error)) {
|
|
349
|
-
throw createError(notFnMsg('error'));
|
|
350
|
-
}
|
|
351
|
-
if (notValidLogFn(warn)) {
|
|
352
|
-
throw createError(notFnMsg('warn'));
|
|
353
|
-
}
|
|
354
|
-
if (notValidLogFn(log)) {
|
|
355
|
-
throw createError(notFnMsg('log'));
|
|
356
|
-
}
|
|
357
|
-
if (notValidLogFn(info)) {
|
|
358
|
-
throw createError(notFnMsg('info'));
|
|
359
|
-
}
|
|
360
|
-
if (notValidLogFn(debug)) {
|
|
361
|
-
throw createError(notFnMsg('debug'));
|
|
362
|
-
}
|
|
363
|
-
const { setLogLevel, getLogLevel, shouldLog } = createLogLevelConfig();
|
|
364
|
-
const wrapLogFn = (fn, level) => {
|
|
365
|
-
if (fn === noop)
|
|
366
|
-
return fn;
|
|
367
|
-
const condition = () => shouldLog(level);
|
|
368
|
-
return createConditionalExecutionFunction(createErrorIgnoringFunction(fn), condition);
|
|
369
|
-
};
|
|
370
|
-
return freeze({
|
|
371
|
-
error: wrapLogFn(error, 'error'),
|
|
372
|
-
warn: wrapLogFn(warn, 'warn'),
|
|
373
|
-
log: wrapLogFn(log, 'log'),
|
|
374
|
-
info: wrapLogFn(info, 'info'),
|
|
375
|
-
debug: wrapLogFn(debug, 'debug'),
|
|
376
|
-
setLogLevel,
|
|
377
|
-
getLogLevel,
|
|
378
|
-
});
|
|
379
|
-
}
|
|
380
|
-
/**
|
|
381
|
-
* Validates whether a given value is a valid log function.
|
|
382
|
-
*
|
|
383
|
-
* @param fn - The value to validate
|
|
384
|
-
* @returns True if the value is not a function (invalid), false if it is valid
|
|
385
|
-
*/
|
|
386
|
-
function notValidLogFn(fn) {
|
|
387
|
-
return getType(fn) !== 'function' && fn !== noop;
|
|
388
|
-
}
|
|
389
|
-
/**
|
|
390
|
-
* Generates an error message for invalid log function parameters.
|
|
391
|
-
*
|
|
392
|
-
* @param label - The name of the log function that failed validation
|
|
393
|
-
* @returns A formatted error message string
|
|
394
|
-
*/
|
|
395
|
-
function notFnMsg(label) {
|
|
396
|
-
return `Cannot create a logger when ${label} is not a function`;
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
createLogger(error, warn, log, info, debug);
|
|
3
|
+
const node_path = require('node:path');
|
|
4
|
+
const index_cjs_js$7 = require('../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/math/index.cjs.js');
|
|
5
|
+
const node_fs = require('node:fs');
|
|
6
|
+
const index_cjs_js$4 = require('../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/array/index.cjs.js');
|
|
7
|
+
const index_cjs_js$3 = require('../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/console/index.cjs.js');
|
|
8
|
+
const index_cjs_js$5 = require('../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/json/index.cjs.js');
|
|
9
|
+
const index_cjs_js$2 = require('../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/object/index.cjs.js');
|
|
10
|
+
const index_cjs_js = require('../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/set/index.cjs.js');
|
|
11
|
+
const index_cjs_js$1 = require('../../_dependencies/@hyperfrontend/logging/index.cjs.js');
|
|
12
|
+
const index_cjs_js$6 = require('../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/error/index.cjs.js');
|
|
13
|
+
const { exists } = require('../../_shared/core/fs/stat/index.cjs.js');
|
|
14
|
+
const { collectAllDependencies, parseVersionString } = require('../../_shared/tech/shared-utils/detector-helpers/index.cjs.js');
|
|
400
15
|
|
|
401
16
|
/**
|
|
402
17
|
* Global log level registry.
|
|
403
18
|
* Tracks all created scoped loggers to allow global log level changes.
|
|
404
19
|
*/
|
|
405
|
-
const loggerRegistry = createSet();
|
|
20
|
+
const loggerRegistry = index_cjs_js.createSet();
|
|
406
21
|
/** Redacted placeholder for sensitive values */
|
|
407
22
|
const REDACTED = '[REDACTED]';
|
|
408
23
|
/**
|
|
@@ -436,17 +51,24 @@ function isSensitiveKey(key) {
|
|
|
436
51
|
*
|
|
437
52
|
* @param obj - Object to sanitize
|
|
438
53
|
* @returns New object with sensitive values redacted
|
|
54
|
+
*
|
|
55
|
+
* @example Sanitizing sensitive data
|
|
56
|
+
* ```typescript
|
|
57
|
+
* const config = { apiKey: 'secret123', endpoint: 'https://api.example.com' }
|
|
58
|
+
* const safe = sanitize(config)
|
|
59
|
+
* // => { apiKey: '[REDACTED]', endpoint: 'https://api.example.com' }
|
|
60
|
+
* ```
|
|
439
61
|
*/
|
|
440
62
|
function sanitize(obj) {
|
|
441
63
|
if (obj === null || obj === undefined) {
|
|
442
64
|
return obj;
|
|
443
65
|
}
|
|
444
|
-
if (isArray(obj)) {
|
|
66
|
+
if (index_cjs_js$4.isArray(obj)) {
|
|
445
67
|
return obj.map((item) => sanitize(item));
|
|
446
68
|
}
|
|
447
69
|
if (typeof obj === 'object') {
|
|
448
70
|
const result = {};
|
|
449
|
-
for (const [key, value] of entries(obj)) {
|
|
71
|
+
for (const [key, value] of index_cjs_js$2.entries(obj)) {
|
|
450
72
|
if (isSensitiveKey(key)) {
|
|
451
73
|
result[key] = REDACTED;
|
|
452
74
|
}
|
|
@@ -471,9 +93,9 @@ function sanitize(obj) {
|
|
|
471
93
|
*/
|
|
472
94
|
function formatMessage(namespace, message, meta) {
|
|
473
95
|
const prefix = `[${namespace}]`;
|
|
474
|
-
if (meta && keys(meta).length > 0) {
|
|
96
|
+
if (meta && index_cjs_js$2.keys(meta).length > 0) {
|
|
475
97
|
const sanitizedMeta = sanitize(meta);
|
|
476
|
-
return `${prefix} ${message} ${stringify(sanitizedMeta)}`;
|
|
98
|
+
return `${prefix} ${message} ${index_cjs_js$5.stringify(sanitizedMeta)}`;
|
|
477
99
|
}
|
|
478
100
|
return `${prefix} ${message}`;
|
|
479
101
|
}
|
|
@@ -486,7 +108,7 @@ function formatMessage(namespace, message, meta) {
|
|
|
486
108
|
* @param options - Logger configuration options
|
|
487
109
|
* @returns A configured scoped logger instance
|
|
488
110
|
*
|
|
489
|
-
* @example
|
|
111
|
+
* @example Creating a scoped logger
|
|
490
112
|
* ```typescript
|
|
491
113
|
* const logger = createScopedLogger('project-scope')
|
|
492
114
|
* logger.setLogLevel('debug')
|
|
@@ -501,16 +123,13 @@ function formatMessage(namespace, message, meta) {
|
|
|
501
123
|
*/
|
|
502
124
|
function createScopedLogger(namespace, options = {}) {
|
|
503
125
|
const { level = 'error', sanitizeSecrets = true } = options;
|
|
504
|
-
// Create wrapper functions that add namespace prefix and sanitization
|
|
505
126
|
const createLogFn = (baseFn) => (message, meta) => {
|
|
506
127
|
const processedMeta = sanitizeSecrets && meta ? sanitize(meta) : meta;
|
|
507
128
|
baseFn(formatMessage(namespace, message, processedMeta));
|
|
508
129
|
};
|
|
509
|
-
|
|
510
|
-
const baseLogger = createLogger(createLogFn(error), createLogFn(warn), createLogFn(log), createLogFn(info), createLogFn(debug));
|
|
511
|
-
// Set initial log level (use global override if set)
|
|
130
|
+
const baseLogger = index_cjs_js$1.createLogger(createLogFn(index_cjs_js$3.error), createLogFn(index_cjs_js$3.warn), createLogFn(index_cjs_js$3.log), createLogFn(index_cjs_js$3.info), createLogFn(index_cjs_js$3.debug));
|
|
512
131
|
baseLogger.setLogLevel(level);
|
|
513
|
-
const scopedLogger = freeze({
|
|
132
|
+
const scopedLogger = index_cjs_js$2.freeze({
|
|
514
133
|
error: (message, meta) => baseLogger.error(message, meta),
|
|
515
134
|
warn: (message, meta) => baseLogger.warn(message, meta),
|
|
516
135
|
log: (message, meta) => baseLogger.log(message, meta),
|
|
@@ -519,7 +138,6 @@ function createScopedLogger(namespace, options = {}) {
|
|
|
519
138
|
setLogLevel: baseLogger.setLogLevel,
|
|
520
139
|
getLogLevel: baseLogger.getLogLevel,
|
|
521
140
|
});
|
|
522
|
-
// Register logger for global level management
|
|
523
141
|
loggerRegistry.add(scopedLogger);
|
|
524
142
|
return scopedLogger;
|
|
525
143
|
}
|
|
@@ -527,7 +145,7 @@ function createScopedLogger(namespace, options = {}) {
|
|
|
527
145
|
* Default logger instance for the project-scope library.
|
|
528
146
|
* Use this for general logging within the library.
|
|
529
147
|
*
|
|
530
|
-
* @example
|
|
148
|
+
* @example Using the default logger
|
|
531
149
|
* ```typescript
|
|
532
150
|
* import { logger } from '@hyperfrontend/project-scope/core'
|
|
533
151
|
*
|
|
@@ -544,6 +162,14 @@ createScopedLogger('project-scope:fs');
|
|
|
544
162
|
* @param filePath - Path to file
|
|
545
163
|
* @param encoding - File encoding (default: utf-8)
|
|
546
164
|
* @returns File contents or null if file doesn't exist
|
|
165
|
+
*
|
|
166
|
+
* @example Reading file if it exists
|
|
167
|
+
* ```typescript
|
|
168
|
+
* const content = readFileIfExists('./optional-config.json')
|
|
169
|
+
* if (content) {
|
|
170
|
+
* // File existed, use content
|
|
171
|
+
* }
|
|
172
|
+
* ```
|
|
547
173
|
*/
|
|
548
174
|
function readFileIfExists(filePath, encoding = 'utf-8') {
|
|
549
175
|
if (!node_fs.existsSync(filePath)) {
|
|
@@ -557,22 +183,12 @@ function readFileIfExists(filePath, encoding = 'utf-8') {
|
|
|
557
183
|
}
|
|
558
184
|
}
|
|
559
185
|
|
|
560
|
-
createScopedLogger('project-scope:fs:write');
|
|
561
|
-
|
|
562
|
-
/**
|
|
563
|
-
* Check if path exists.
|
|
564
|
-
*
|
|
565
|
-
* @param filePath - Path to check
|
|
566
|
-
* @returns True if path exists
|
|
567
|
-
*/
|
|
568
|
-
function exists(filePath) {
|
|
569
|
-
return node_fs.existsSync(filePath);
|
|
570
|
-
}
|
|
571
|
-
|
|
572
186
|
createScopedLogger('project-scope:fs:dir');
|
|
573
187
|
|
|
574
188
|
createScopedLogger('project-scope:fs:traversal');
|
|
575
189
|
|
|
190
|
+
createScopedLogger('project-scope:fs:write');
|
|
191
|
+
|
|
576
192
|
const packageLogger = createScopedLogger('project-scope:project:package');
|
|
577
193
|
/**
|
|
578
194
|
* Verifies that a value is an object with only string values,
|
|
@@ -584,7 +200,7 @@ const packageLogger = createScopedLogger('project-scope:project:package');
|
|
|
584
200
|
function isStringRecord(value) {
|
|
585
201
|
if (typeof value !== 'object' || value === null)
|
|
586
202
|
return false;
|
|
587
|
-
return values(value).every((v) => typeof v === 'string');
|
|
203
|
+
return index_cjs_js$2.values(value).every((v) => typeof v === 'string');
|
|
588
204
|
}
|
|
589
205
|
/**
|
|
590
206
|
* Extracts and normalizes the workspaces field from package.json,
|
|
@@ -594,12 +210,12 @@ function isStringRecord(value) {
|
|
|
594
210
|
* @returns Normalized workspace patterns or undefined if invalid
|
|
595
211
|
*/
|
|
596
212
|
function parseWorkspaces(value) {
|
|
597
|
-
if (isArray(value) && value.every((v) => typeof v === 'string')) {
|
|
213
|
+
if (index_cjs_js$4.isArray(value) && value.every((v) => typeof v === 'string')) {
|
|
598
214
|
return value;
|
|
599
215
|
}
|
|
600
216
|
if (typeof value === 'object' && value !== null) {
|
|
601
217
|
const obj = value;
|
|
602
|
-
if (isArray(obj['packages'])) {
|
|
218
|
+
if (index_cjs_js$4.isArray(obj['packages'])) {
|
|
603
219
|
return { packages: obj['packages'] };
|
|
604
220
|
}
|
|
605
221
|
}
|
|
@@ -613,7 +229,7 @@ function parseWorkspaces(value) {
|
|
|
613
229
|
*/
|
|
614
230
|
function validatePackageJson(data) {
|
|
615
231
|
if (typeof data !== 'object' || data === null) {
|
|
616
|
-
throw createError('package.json must be an object');
|
|
232
|
+
throw index_cjs_js$6.createError('package.json must be an object');
|
|
617
233
|
}
|
|
618
234
|
const pkg = data;
|
|
619
235
|
return {
|
|
@@ -642,6 +258,16 @@ function validatePackageJson(data) {
|
|
|
642
258
|
*
|
|
643
259
|
* @param projectPath - Project directory path or path to package.json
|
|
644
260
|
* @returns Parsed package.json or null if not found
|
|
261
|
+
*
|
|
262
|
+
* @example Reading package.json if it exists
|
|
263
|
+
* ```typescript
|
|
264
|
+
* import { readPackageJsonIfExists } from '@hyperfrontend/project-scope'
|
|
265
|
+
*
|
|
266
|
+
* const pkg = readPackageJsonIfExists('/path/to/project')
|
|
267
|
+
* if (pkg) {
|
|
268
|
+
* console.log('Found:', pkg.name)
|
|
269
|
+
* }
|
|
270
|
+
* ```
|
|
645
271
|
*/
|
|
646
272
|
function readPackageJsonIfExists(projectPath) {
|
|
647
273
|
const packageJsonPath = projectPath.endsWith('package.json') ? projectPath : node_path.join(projectPath, 'package.json');
|
|
@@ -651,7 +277,7 @@ function readPackageJsonIfExists(projectPath) {
|
|
|
651
277
|
return null;
|
|
652
278
|
}
|
|
653
279
|
try {
|
|
654
|
-
const validated = validatePackageJson(parse(content));
|
|
280
|
+
const validated = validatePackageJson(index_cjs_js$5.parse(content));
|
|
655
281
|
packageLogger.debug('Package.json loaded', { path: packageJsonPath, name: validated.name });
|
|
656
282
|
return validated;
|
|
657
283
|
}
|
|
@@ -662,119 +288,187 @@ function readPackageJsonIfExists(projectPath) {
|
|
|
662
288
|
}
|
|
663
289
|
|
|
664
290
|
/**
|
|
665
|
-
*
|
|
666
|
-
* Merges dependencies, devDependencies, peerDependencies, and optionalDependencies.
|
|
291
|
+
* Detect Angular in project.
|
|
667
292
|
*
|
|
668
|
-
* @param
|
|
669
|
-
* @
|
|
670
|
-
|
|
671
|
-
function collectAllDependencies(packageJson) {
|
|
672
|
-
return {
|
|
673
|
-
...packageJson?.dependencies,
|
|
674
|
-
...packageJson?.devDependencies,
|
|
675
|
-
...packageJson?.peerDependencies,
|
|
676
|
-
...packageJson?.optionalDependencies,
|
|
677
|
-
};
|
|
678
|
-
}
|
|
679
|
-
/**
|
|
680
|
-
* Extract clean version from dependency version string.
|
|
681
|
-
* Removes semver prefixes like ^, ~, >=, etc.
|
|
682
|
-
* Uses character-by-character parsing to avoid ReDoS vulnerabilities.
|
|
293
|
+
* @param projectPath - Project directory path
|
|
294
|
+
* @param packageJson - Optional pre-loaded package.json
|
|
295
|
+
* @returns Detection result or null if not detected
|
|
683
296
|
*
|
|
684
|
-
* @
|
|
685
|
-
*
|
|
297
|
+
* @example Detecting Angular framework
|
|
298
|
+
* ```typescript
|
|
299
|
+
* const result = angularDetector('/path/to/angular-app', {
|
|
300
|
+
* dependencies: { '@angular/core': '^17.0.0', '@angular/cli': '^17.0.0' }
|
|
301
|
+
* })
|
|
302
|
+
* // => {
|
|
303
|
+
* // id: 'angular',
|
|
304
|
+
* // name: 'Angular',
|
|
305
|
+
* // category: 'frontend',
|
|
306
|
+
* // version: '17.0.0',
|
|
307
|
+
* // confidence: 85,
|
|
308
|
+
* // detectedFrom: [
|
|
309
|
+
* // { type: 'package.json', field: 'dependencies.@angular/core' },
|
|
310
|
+
* // { type: 'package.json', field: 'dependencies.@angular/cli' }
|
|
311
|
+
* // ]
|
|
312
|
+
* // }
|
|
313
|
+
* ```
|
|
686
314
|
*/
|
|
687
|
-
function
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
let
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
}
|
|
697
|
-
|
|
315
|
+
function angularDetector(projectPath, packageJson) {
|
|
316
|
+
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
317
|
+
const sources = [];
|
|
318
|
+
let confidence = 0;
|
|
319
|
+
let version;
|
|
320
|
+
const deps = collectAllDependencies(pkg);
|
|
321
|
+
if (deps['@angular/core']) {
|
|
322
|
+
confidence += 70;
|
|
323
|
+
version = parseVersionString(deps['@angular/core']);
|
|
324
|
+
sources.push({ type: 'package.json', field: 'dependencies.@angular/core' });
|
|
325
|
+
}
|
|
326
|
+
if (deps['@angular/cli']) {
|
|
327
|
+
confidence += 15;
|
|
328
|
+
sources.push({ type: 'package.json', field: 'dependencies.@angular/cli' });
|
|
329
|
+
}
|
|
330
|
+
if (exists(node_path.join(projectPath, 'angular.json'))) {
|
|
331
|
+
confidence += 15;
|
|
332
|
+
sources.push({ type: 'config-file', path: 'angular.json' });
|
|
333
|
+
}
|
|
334
|
+
if (deps['angular'] && !deps['@angular/core']) {
|
|
335
|
+
return {
|
|
336
|
+
id: 'angularjs',
|
|
337
|
+
name: 'AngularJS (Legacy)',
|
|
338
|
+
category: 'frontend',
|
|
339
|
+
version: parseVersionString(deps['angular']),
|
|
340
|
+
confidence: 80,
|
|
341
|
+
detectedFrom: [{ type: 'package.json', field: 'dependencies.angular' }],
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
if (confidence === 0) {
|
|
345
|
+
return null;
|
|
698
346
|
}
|
|
699
|
-
return
|
|
347
|
+
return {
|
|
348
|
+
id: 'angular',
|
|
349
|
+
name: 'Angular',
|
|
350
|
+
category: 'frontend',
|
|
351
|
+
version,
|
|
352
|
+
confidence: index_cjs_js$7.min(confidence, 100),
|
|
353
|
+
detectedFrom: sources,
|
|
354
|
+
};
|
|
700
355
|
}
|
|
701
356
|
|
|
702
357
|
/**
|
|
703
|
-
* Detect
|
|
358
|
+
* Detect Astro in project.
|
|
704
359
|
*
|
|
705
360
|
* @param projectPath - Project directory path
|
|
706
361
|
* @param packageJson - Optional pre-loaded package.json
|
|
707
362
|
* @returns Detection result or null if not detected
|
|
363
|
+
*
|
|
364
|
+
* @example Detecting Astro framework
|
|
365
|
+
* ```typescript
|
|
366
|
+
* const result = astroDetector('/path/to/astro-project', {
|
|
367
|
+
* dependencies: { 'astro': '^4.0.0' }
|
|
368
|
+
* })
|
|
369
|
+
* // => {
|
|
370
|
+
* // id: 'astro',
|
|
371
|
+
* // name: 'Astro',
|
|
372
|
+
* // category: 'meta-framework',
|
|
373
|
+
* // version: '4.0.0',
|
|
374
|
+
* // confidence: 70,
|
|
375
|
+
* // detectedFrom: [{ type: 'package.json', field: 'dependencies.astro' }]
|
|
376
|
+
* // }
|
|
377
|
+
* ```
|
|
708
378
|
*/
|
|
709
|
-
function
|
|
379
|
+
function astroDetector(projectPath, packageJson) {
|
|
710
380
|
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
711
381
|
const sources = [];
|
|
712
382
|
let confidence = 0;
|
|
713
383
|
let version;
|
|
714
|
-
const metaFrameworks = [];
|
|
715
384
|
const deps = collectAllDependencies(pkg);
|
|
716
|
-
if (deps['
|
|
717
|
-
confidence +=
|
|
718
|
-
version = parseVersionString(deps['
|
|
719
|
-
sources.push({ type: 'package.json', field: 'dependencies.
|
|
385
|
+
if (deps['astro']) {
|
|
386
|
+
confidence += 70;
|
|
387
|
+
version = parseVersionString(deps['astro']);
|
|
388
|
+
sources.push({ type: 'package.json', field: 'dependencies.astro' });
|
|
720
389
|
}
|
|
721
|
-
if (
|
|
722
|
-
|
|
723
|
-
|
|
390
|
+
if (exists(node_path.join(projectPath, 'astro.config.mjs')) ||
|
|
391
|
+
exists(node_path.join(projectPath, 'astro.config.ts')) ||
|
|
392
|
+
exists(node_path.join(projectPath, 'astro.config.js'))) {
|
|
393
|
+
confidence += 25;
|
|
394
|
+
sources.push({ type: 'config-file', path: 'astro.config.*' });
|
|
724
395
|
}
|
|
725
|
-
if (
|
|
726
|
-
confidence +=
|
|
727
|
-
sources.push({ type: '
|
|
396
|
+
if (exists(node_path.join(projectPath, 'src', 'pages'))) {
|
|
397
|
+
confidence += 5;
|
|
398
|
+
sources.push({ type: 'directory', path: 'src/pages/' });
|
|
728
399
|
}
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
exists(node_path.join(projectPath, 'src', 'index.tsx')) ||
|
|
732
|
-
exists(node_path.join(projectPath, 'src', 'index.jsx'));
|
|
733
|
-
if (hasJsxFiles) {
|
|
734
|
-
confidence += 10;
|
|
735
|
-
sources.push({ type: 'directory', path: 'src/*.tsx or src/*.jsx' });
|
|
736
|
-
}
|
|
737
|
-
if (deps['next']) {
|
|
738
|
-
metaFrameworks.push({
|
|
739
|
-
id: 'nextjs',
|
|
740
|
-
name: 'Next.js',
|
|
741
|
-
category: 'meta-framework',
|
|
742
|
-
version: parseVersionString(deps['next']),
|
|
743
|
-
confidence: 90,
|
|
744
|
-
detectedFrom: [{ type: 'package.json', field: 'dependencies.next' }],
|
|
745
|
-
});
|
|
400
|
+
if (confidence === 0) {
|
|
401
|
+
return null;
|
|
746
402
|
}
|
|
403
|
+
return {
|
|
404
|
+
id: 'astro',
|
|
405
|
+
name: 'Astro',
|
|
406
|
+
category: 'meta-framework',
|
|
407
|
+
version,
|
|
408
|
+
confidence: index_cjs_js$7.min(confidence, 100),
|
|
409
|
+
detectedFrom: sources,
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* Detect Gatsby in project.
|
|
415
|
+
*
|
|
416
|
+
* @param projectPath - Project directory path
|
|
417
|
+
* @param packageJson - Optional pre-loaded package.json
|
|
418
|
+
* @returns Detection result or null if not detected
|
|
419
|
+
*
|
|
420
|
+
* @example Detecting Gatsby framework
|
|
421
|
+
* ```typescript
|
|
422
|
+
* const result = gatsbyDetector('/path/to/gatsby-blog', {
|
|
423
|
+
* dependencies: {
|
|
424
|
+
* 'gatsby': '^5.0.0',
|
|
425
|
+
* 'gatsby-plugin-image': '^3.0.0',
|
|
426
|
+
* 'gatsby-source-filesystem': '^5.0.0'
|
|
427
|
+
* }
|
|
428
|
+
* })
|
|
429
|
+
* // => {
|
|
430
|
+
* // id: 'gatsby',
|
|
431
|
+
* // name: 'Gatsby',
|
|
432
|
+
* // category: 'meta-framework',
|
|
433
|
+
* // version: '5.0.0',
|
|
434
|
+
* // confidence: 75,
|
|
435
|
+
* // detectedFrom: [
|
|
436
|
+
* // { type: 'package.json', field: 'dependencies.gatsby' },
|
|
437
|
+
* // { type: 'package.json', field: 'dependencies (gatsby plugins)' }
|
|
438
|
+
* // ]
|
|
439
|
+
* // }
|
|
440
|
+
* ```
|
|
441
|
+
*/
|
|
442
|
+
function gatsbyDetector(projectPath, packageJson) {
|
|
443
|
+
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
444
|
+
const sources = [];
|
|
445
|
+
let confidence = 0;
|
|
446
|
+
let version;
|
|
447
|
+
const deps = collectAllDependencies(pkg);
|
|
747
448
|
if (deps['gatsby']) {
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
category: 'meta-framework',
|
|
752
|
-
version: parseVersionString(deps['gatsby']),
|
|
753
|
-
confidence: 90,
|
|
754
|
-
detectedFrom: [{ type: 'package.json', field: 'dependencies.gatsby' }],
|
|
755
|
-
});
|
|
449
|
+
confidence += 70;
|
|
450
|
+
version = parseVersionString(deps['gatsby']);
|
|
451
|
+
sources.push({ type: 'package.json', field: 'dependencies.gatsby' });
|
|
756
452
|
}
|
|
757
|
-
if (
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
});
|
|
453
|
+
if (exists(node_path.join(projectPath, 'gatsby-config.js')) || exists(node_path.join(projectPath, 'gatsby-config.ts'))) {
|
|
454
|
+
confidence += 25;
|
|
455
|
+
sources.push({ type: 'config-file', path: 'gatsby-config.*' });
|
|
456
|
+
}
|
|
457
|
+
const gatsbyPlugins = index_cjs_js$2.keys(deps).filter((d) => d.startsWith('gatsby-plugin-') || d.startsWith('gatsby-source-'));
|
|
458
|
+
if (gatsbyPlugins.length > 0) {
|
|
459
|
+
confidence += 5;
|
|
460
|
+
sources.push({ type: 'package.json', field: 'dependencies (gatsby plugins)' });
|
|
766
461
|
}
|
|
767
462
|
if (confidence === 0) {
|
|
768
463
|
return null;
|
|
769
464
|
}
|
|
770
465
|
return {
|
|
771
|
-
id: '
|
|
772
|
-
name: '
|
|
773
|
-
category: '
|
|
466
|
+
id: 'gatsby',
|
|
467
|
+
name: 'Gatsby',
|
|
468
|
+
category: 'meta-framework',
|
|
774
469
|
version,
|
|
775
|
-
confidence: min(confidence, 100),
|
|
470
|
+
confidence: index_cjs_js$7.min(confidence, 100),
|
|
776
471
|
detectedFrom: sources,
|
|
777
|
-
metaFrameworks: metaFrameworks.length > 0 ? metaFrameworks : undefined,
|
|
778
472
|
};
|
|
779
473
|
}
|
|
780
474
|
|
|
@@ -784,6 +478,21 @@ function reactDetector(projectPath, packageJson) {
|
|
|
784
478
|
* @param projectPath - Project directory path
|
|
785
479
|
* @param packageJson - Optional pre-loaded package.json
|
|
786
480
|
* @returns Detection result or null if not detected
|
|
481
|
+
*
|
|
482
|
+
* @example Detecting Next.js framework
|
|
483
|
+
* ```typescript
|
|
484
|
+
* const result = nextjsDetector('/path/to/nextjs-app', {
|
|
485
|
+
* dependencies: { 'next': '^14.0.0', 'react': '^18.0.0' }
|
|
486
|
+
* })
|
|
487
|
+
* // => {
|
|
488
|
+
* // id: 'nextjs',
|
|
489
|
+
* // name: 'Next.js',
|
|
490
|
+
* // category: 'meta-framework',
|
|
491
|
+
* // version: '14.0.0',
|
|
492
|
+
* // confidence: 70,
|
|
493
|
+
* // detectedFrom: [{ type: 'package.json', field: 'dependencies.next' }]
|
|
494
|
+
* // }
|
|
495
|
+
* ```
|
|
787
496
|
*/
|
|
788
497
|
function nextjsDetector(projectPath, packageJson) {
|
|
789
498
|
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
@@ -817,231 +526,335 @@ function nextjsDetector(projectPath, packageJson) {
|
|
|
817
526
|
name: 'Next.js',
|
|
818
527
|
category: 'meta-framework',
|
|
819
528
|
version,
|
|
820
|
-
confidence: min(confidence, 100),
|
|
529
|
+
confidence: index_cjs_js$7.min(confidence, 100),
|
|
821
530
|
detectedFrom: sources,
|
|
822
531
|
};
|
|
823
532
|
}
|
|
824
533
|
|
|
825
534
|
/**
|
|
826
|
-
* Detect
|
|
535
|
+
* Detect Nuxt in project.
|
|
827
536
|
*
|
|
828
537
|
* @param projectPath - Project directory path
|
|
829
538
|
* @param packageJson - Optional pre-loaded package.json
|
|
830
539
|
* @returns Detection result or null if not detected
|
|
540
|
+
*
|
|
541
|
+
* @example Detecting Nuxt framework
|
|
542
|
+
* ```typescript
|
|
543
|
+
* const result = nuxtDetector('/path/to/nuxt-app', {
|
|
544
|
+
* dependencies: { 'nuxt': '^3.0.0', 'vue': '^3.0.0' }
|
|
545
|
+
* })
|
|
546
|
+
* // => {
|
|
547
|
+
* // id: 'nuxt',
|
|
548
|
+
* // name: 'Nuxt',
|
|
549
|
+
* // category: 'meta-framework',
|
|
550
|
+
* // version: '3.0.0',
|
|
551
|
+
* // confidence: 70,
|
|
552
|
+
* // detectedFrom: [{ type: 'package.json', field: 'dependencies.nuxt' }]
|
|
553
|
+
* // }
|
|
554
|
+
* ```
|
|
831
555
|
*/
|
|
832
|
-
function
|
|
556
|
+
function nuxtDetector(projectPath, packageJson) {
|
|
833
557
|
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
834
558
|
const sources = [];
|
|
835
559
|
let confidence = 0;
|
|
836
560
|
let version;
|
|
837
561
|
const deps = collectAllDependencies(pkg);
|
|
838
|
-
|
|
839
|
-
if (deps['@remix-run/react']) {
|
|
562
|
+
if (deps['nuxt'] || deps['nuxt3']) {
|
|
840
563
|
confidence += 70;
|
|
841
|
-
version = parseVersionString(deps['
|
|
842
|
-
sources.push({ type: 'package.json', field: 'dependencies
|
|
564
|
+
version = parseVersionString(deps['nuxt'] ?? deps['nuxt3']);
|
|
565
|
+
sources.push({ type: 'package.json', field: 'dependencies.nuxt' });
|
|
843
566
|
}
|
|
844
|
-
if (
|
|
845
|
-
confidence +=
|
|
846
|
-
sources.push({ type: '
|
|
567
|
+
if (exists(node_path.join(projectPath, 'nuxt.config.js')) || exists(node_path.join(projectPath, 'nuxt.config.ts'))) {
|
|
568
|
+
confidence += 25;
|
|
569
|
+
sources.push({ type: 'config-file', path: 'nuxt.config.*' });
|
|
847
570
|
}
|
|
848
|
-
if (exists(node_path.join(projectPath, '
|
|
849
|
-
confidence +=
|
|
850
|
-
sources.push({ type: '
|
|
571
|
+
if (exists(node_path.join(projectPath, 'pages'))) {
|
|
572
|
+
confidence += 5;
|
|
573
|
+
sources.push({ type: 'directory', path: 'pages/' });
|
|
851
574
|
}
|
|
852
575
|
if (confidence === 0) {
|
|
853
576
|
return null;
|
|
854
577
|
}
|
|
855
578
|
return {
|
|
856
|
-
id: '
|
|
857
|
-
name: '
|
|
579
|
+
id: 'nuxt',
|
|
580
|
+
name: 'Nuxt',
|
|
858
581
|
category: 'meta-framework',
|
|
859
582
|
version,
|
|
860
|
-
confidence: min(confidence, 100),
|
|
583
|
+
confidence: index_cjs_js$7.min(confidence, 100),
|
|
861
584
|
detectedFrom: sources,
|
|
862
585
|
};
|
|
863
586
|
}
|
|
864
587
|
|
|
865
588
|
/**
|
|
866
|
-
* Detect
|
|
589
|
+
* Detect Qwik in project.
|
|
867
590
|
*
|
|
868
591
|
* @param projectPath - Project directory path
|
|
869
592
|
* @param packageJson - Optional pre-loaded package.json
|
|
870
593
|
* @returns Detection result or null if not detected
|
|
594
|
+
*
|
|
595
|
+
* @example Detecting Qwik framework
|
|
596
|
+
* ```typescript
|
|
597
|
+
* const result = qwikDetector('/path/to/qwik-app', {
|
|
598
|
+
* dependencies: {
|
|
599
|
+
* '@builder.io/qwik': '^1.0.0',
|
|
600
|
+
* '@builder.io/qwik-city': '^1.0.0'
|
|
601
|
+
* }
|
|
602
|
+
* })
|
|
603
|
+
* // => {
|
|
604
|
+
* // id: 'qwik',
|
|
605
|
+
* // name: 'Qwik',
|
|
606
|
+
* // category: 'frontend',
|
|
607
|
+
* // version: '1.0.0',
|
|
608
|
+
* // confidence: 90,
|
|
609
|
+
* // detectedFrom: [
|
|
610
|
+
* // { type: 'package.json', field: 'dependencies.@builder.io/qwik' },
|
|
611
|
+
* // { type: 'package.json', field: 'dependencies.@builder.io/qwik-city' }
|
|
612
|
+
* // ]
|
|
613
|
+
* // }
|
|
614
|
+
* ```
|
|
871
615
|
*/
|
|
872
|
-
function
|
|
616
|
+
function qwikDetector(projectPath, packageJson) {
|
|
873
617
|
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
874
618
|
const sources = [];
|
|
875
619
|
let confidence = 0;
|
|
876
620
|
let version;
|
|
877
621
|
const deps = collectAllDependencies(pkg);
|
|
878
|
-
if (deps['
|
|
622
|
+
if (deps['@builder.io/qwik']) {
|
|
879
623
|
confidence += 70;
|
|
880
|
-
version = parseVersionString(deps['
|
|
881
|
-
sources.push({ type: 'package.json', field: 'dependencies.
|
|
624
|
+
version = parseVersionString(deps['@builder.io/qwik']);
|
|
625
|
+
sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik' });
|
|
882
626
|
}
|
|
883
|
-
if (
|
|
884
|
-
confidence +=
|
|
885
|
-
sources.push({ type: '
|
|
627
|
+
if (deps['@builder.io/qwik-city']) {
|
|
628
|
+
confidence += 20;
|
|
629
|
+
sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik-city' });
|
|
886
630
|
}
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
sources.push({ type: 'package.json', field: 'dependencies (gatsby plugins)' });
|
|
631
|
+
if (exists(node_path.join(projectPath, 'qwik.config.ts')) || exists(node_path.join(projectPath, 'qwik.config.js'))) {
|
|
632
|
+
confidence += 10;
|
|
633
|
+
sources.push({ type: 'config-file', path: 'qwik.config.*' });
|
|
891
634
|
}
|
|
892
635
|
if (confidence === 0) {
|
|
893
636
|
return null;
|
|
894
637
|
}
|
|
895
638
|
return {
|
|
896
|
-
id: '
|
|
897
|
-
name: '
|
|
898
|
-
category: '
|
|
639
|
+
id: 'qwik',
|
|
640
|
+
name: 'Qwik',
|
|
641
|
+
category: 'frontend',
|
|
899
642
|
version,
|
|
900
|
-
confidence: min(confidence, 100),
|
|
643
|
+
confidence: index_cjs_js$7.min(confidence, 100),
|
|
901
644
|
detectedFrom: sources,
|
|
902
645
|
};
|
|
903
646
|
}
|
|
904
647
|
|
|
905
648
|
/**
|
|
906
|
-
* Detect
|
|
649
|
+
* Detect React in project.
|
|
907
650
|
*
|
|
908
651
|
* @param projectPath - Project directory path
|
|
909
652
|
* @param packageJson - Optional pre-loaded package.json
|
|
910
653
|
* @returns Detection result or null if not detected
|
|
654
|
+
*
|
|
655
|
+
* @example Detecting React library
|
|
656
|
+
* ```typescript
|
|
657
|
+
* const result = reactDetector('/path/to/react-app', {
|
|
658
|
+
* dependencies: { 'react': '^18.0.0', 'react-dom': '^18.0.0' }
|
|
659
|
+
* })
|
|
660
|
+
* // => {
|
|
661
|
+
* // id: 'react',
|
|
662
|
+
* // name: 'React',
|
|
663
|
+
* // category: 'frontend',
|
|
664
|
+
* // version: '18.0.0',
|
|
665
|
+
* // confidence: 80,
|
|
666
|
+
* // detectedFrom: [
|
|
667
|
+
* // { type: 'package.json', field: 'dependencies.react' },
|
|
668
|
+
* // { type: 'package.json', field: 'dependencies.react-dom' }
|
|
669
|
+
* // ]
|
|
670
|
+
* // }
|
|
671
|
+
* ```
|
|
911
672
|
*/
|
|
912
|
-
function
|
|
673
|
+
function reactDetector(projectPath, packageJson) {
|
|
913
674
|
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
914
675
|
const sources = [];
|
|
915
676
|
let confidence = 0;
|
|
916
677
|
let version;
|
|
917
678
|
const metaFrameworks = [];
|
|
918
679
|
const deps = collectAllDependencies(pkg);
|
|
919
|
-
if (deps['
|
|
920
|
-
confidence +=
|
|
921
|
-
version = parseVersionString(deps['
|
|
922
|
-
sources.push({ type: 'package.json', field: 'dependencies.
|
|
680
|
+
if (deps['react']) {
|
|
681
|
+
confidence += 60;
|
|
682
|
+
version = parseVersionString(deps['react']);
|
|
683
|
+
sources.push({ type: 'package.json', field: 'dependencies.react' });
|
|
923
684
|
}
|
|
924
|
-
if (deps['
|
|
925
|
-
confidence +=
|
|
926
|
-
sources.push({ type: 'package.json', field: 'dependencies
|
|
685
|
+
if (deps['react-dom']) {
|
|
686
|
+
confidence += 20;
|
|
687
|
+
sources.push({ type: 'package.json', field: 'dependencies.react-dom' });
|
|
927
688
|
}
|
|
928
|
-
|
|
929
|
-
|
|
689
|
+
if (deps['react-native']) {
|
|
690
|
+
confidence += 20;
|
|
691
|
+
sources.push({ type: 'package.json', field: 'dependencies.react-native' });
|
|
692
|
+
}
|
|
693
|
+
const hasJsxFiles = exists(node_path.join(projectPath, 'src', 'App.tsx')) ||
|
|
694
|
+
exists(node_path.join(projectPath, 'src', 'App.jsx')) ||
|
|
695
|
+
exists(node_path.join(projectPath, 'src', 'index.tsx')) ||
|
|
696
|
+
exists(node_path.join(projectPath, 'src', 'index.jsx'));
|
|
697
|
+
if (hasJsxFiles) {
|
|
930
698
|
confidence += 10;
|
|
931
|
-
sources.push({ type: 'directory', path: 'src/*.
|
|
699
|
+
sources.push({ type: 'directory', path: 'src/*.tsx or src/*.jsx' });
|
|
932
700
|
}
|
|
933
|
-
if (
|
|
934
|
-
|
|
935
|
-
|
|
701
|
+
if (deps['next']) {
|
|
702
|
+
metaFrameworks.push({
|
|
703
|
+
id: 'nextjs',
|
|
704
|
+
name: 'Next.js',
|
|
705
|
+
category: 'meta-framework',
|
|
706
|
+
version: parseVersionString(deps['next']),
|
|
707
|
+
confidence: 90,
|
|
708
|
+
detectedFrom: [{ type: 'package.json', field: 'dependencies.next' }],
|
|
709
|
+
});
|
|
936
710
|
}
|
|
937
|
-
if (deps['
|
|
711
|
+
if (deps['gatsby']) {
|
|
938
712
|
metaFrameworks.push({
|
|
939
|
-
id: '
|
|
940
|
-
name: '
|
|
713
|
+
id: 'gatsby',
|
|
714
|
+
name: 'Gatsby',
|
|
941
715
|
category: 'meta-framework',
|
|
942
|
-
version: parseVersionString(deps['
|
|
716
|
+
version: parseVersionString(deps['gatsby']),
|
|
943
717
|
confidence: 90,
|
|
944
|
-
detectedFrom: [{ type: 'package.json', field: 'dependencies.
|
|
718
|
+
detectedFrom: [{ type: 'package.json', field: 'dependencies.gatsby' }],
|
|
719
|
+
});
|
|
720
|
+
}
|
|
721
|
+
if (deps['@remix-run/react'] || deps['remix']) {
|
|
722
|
+
metaFrameworks.push({
|
|
723
|
+
id: 'remix',
|
|
724
|
+
name: 'Remix',
|
|
725
|
+
category: 'meta-framework',
|
|
726
|
+
version: parseVersionString(deps['@remix-run/react'] ?? deps['remix']),
|
|
727
|
+
confidence: 90,
|
|
728
|
+
detectedFrom: [{ type: 'package.json', field: 'dependencies.@remix-run/react' }],
|
|
945
729
|
});
|
|
946
730
|
}
|
|
947
731
|
if (confidence === 0) {
|
|
948
732
|
return null;
|
|
949
733
|
}
|
|
950
734
|
return {
|
|
951
|
-
id: '
|
|
952
|
-
name: '
|
|
735
|
+
id: 'react',
|
|
736
|
+
name: 'React',
|
|
953
737
|
category: 'frontend',
|
|
954
738
|
version,
|
|
955
|
-
confidence: min(confidence, 100),
|
|
739
|
+
confidence: index_cjs_js$7.min(confidence, 100),
|
|
956
740
|
detectedFrom: sources,
|
|
957
741
|
metaFrameworks: metaFrameworks.length > 0 ? metaFrameworks : undefined,
|
|
958
742
|
};
|
|
959
743
|
}
|
|
960
744
|
|
|
961
745
|
/**
|
|
962
|
-
* Detect
|
|
746
|
+
* Detect Remix in project.
|
|
963
747
|
*
|
|
964
748
|
* @param projectPath - Project directory path
|
|
965
749
|
* @param packageJson - Optional pre-loaded package.json
|
|
966
750
|
* @returns Detection result or null if not detected
|
|
751
|
+
*
|
|
752
|
+
* @example Detecting Remix framework
|
|
753
|
+
* ```typescript
|
|
754
|
+
* const result = remixDetector('/path/to/remix-app', {
|
|
755
|
+
* dependencies: {
|
|
756
|
+
* '@remix-run/react': '^2.0.0',
|
|
757
|
+
* '@remix-run/node': '^2.0.0'
|
|
758
|
+
* }
|
|
759
|
+
* })
|
|
760
|
+
* // => {
|
|
761
|
+
* // id: 'remix',
|
|
762
|
+
* // name: 'Remix',
|
|
763
|
+
* // category: 'meta-framework',
|
|
764
|
+
* // version: '2.0.0',
|
|
765
|
+
* // confidence: 90,
|
|
766
|
+
* // detectedFrom: [
|
|
767
|
+
* // { type: 'package.json', field: 'dependencies.@remix-run/react' },
|
|
768
|
+
* // { type: 'package.json', field: 'dependencies.@remix-run/*' }
|
|
769
|
+
* // ]
|
|
770
|
+
* // }
|
|
771
|
+
* ```
|
|
967
772
|
*/
|
|
968
|
-
function
|
|
773
|
+
function remixDetector(projectPath, packageJson) {
|
|
969
774
|
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
970
775
|
const sources = [];
|
|
971
776
|
let confidence = 0;
|
|
972
777
|
let version;
|
|
973
778
|
const deps = collectAllDependencies(pkg);
|
|
974
|
-
if (deps['
|
|
779
|
+
if (deps['@remix-run/react']) {
|
|
975
780
|
confidence += 70;
|
|
976
|
-
version = parseVersionString(deps['
|
|
977
|
-
sources.push({ type: 'package.json', field: 'dependencies
|
|
781
|
+
version = parseVersionString(deps['@remix-run/react']);
|
|
782
|
+
sources.push({ type: 'package.json', field: 'dependencies.@remix-run/react' });
|
|
978
783
|
}
|
|
979
|
-
if (
|
|
980
|
-
confidence +=
|
|
981
|
-
sources.push({ type: '
|
|
784
|
+
if (deps['@remix-run/node'] || deps['@remix-run/cloudflare'] || deps['@remix-run/deno']) {
|
|
785
|
+
confidence += 20;
|
|
786
|
+
sources.push({ type: 'package.json', field: 'dependencies.@remix-run/*' });
|
|
982
787
|
}
|
|
983
|
-
if (exists(node_path.join(projectPath, '
|
|
984
|
-
confidence +=
|
|
985
|
-
sources.push({ type: '
|
|
788
|
+
if (exists(node_path.join(projectPath, 'remix.config.js')) || exists(node_path.join(projectPath, 'remix.config.ts'))) {
|
|
789
|
+
confidence += 10;
|
|
790
|
+
sources.push({ type: 'config-file', path: 'remix.config.*' });
|
|
986
791
|
}
|
|
987
792
|
if (confidence === 0) {
|
|
988
793
|
return null;
|
|
989
794
|
}
|
|
990
795
|
return {
|
|
991
|
-
id: '
|
|
992
|
-
name: '
|
|
796
|
+
id: 'remix',
|
|
797
|
+
name: 'Remix',
|
|
993
798
|
category: 'meta-framework',
|
|
994
799
|
version,
|
|
995
|
-
confidence: min(confidence, 100),
|
|
800
|
+
confidence: index_cjs_js$7.min(confidence, 100),
|
|
996
801
|
detectedFrom: sources,
|
|
997
802
|
};
|
|
998
803
|
}
|
|
999
804
|
|
|
1000
805
|
/**
|
|
1001
|
-
* Detect
|
|
806
|
+
* Detect Solid in project.
|
|
1002
807
|
*
|
|
1003
808
|
* @param projectPath - Project directory path
|
|
1004
809
|
* @param packageJson - Optional pre-loaded package.json
|
|
1005
810
|
* @returns Detection result or null if not detected
|
|
811
|
+
*
|
|
812
|
+
* @example Detecting Solid.js framework
|
|
813
|
+
* ```typescript
|
|
814
|
+
* const result = solidDetector('/path/to/solid-app', {
|
|
815
|
+
* dependencies: { 'solid-js': '^1.8.0', 'vite-plugin-solid': '^2.0.0' }
|
|
816
|
+
* })
|
|
817
|
+
* // => {
|
|
818
|
+
* // id: 'solid',
|
|
819
|
+
* // name: 'Solid',
|
|
820
|
+
* // category: 'frontend',
|
|
821
|
+
* // version: '1.8.0',
|
|
822
|
+
* // confidence: 90,
|
|
823
|
+
* // detectedFrom: [
|
|
824
|
+
* // { type: 'package.json', field: 'dependencies.solid-js' },
|
|
825
|
+
* // { type: 'package.json', field: 'dependencies.vite-plugin-solid' }
|
|
826
|
+
* // ]
|
|
827
|
+
* // }
|
|
828
|
+
* ```
|
|
1006
829
|
*/
|
|
1007
|
-
function
|
|
830
|
+
function solidDetector(projectPath, packageJson) {
|
|
1008
831
|
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
1009
832
|
const sources = [];
|
|
1010
833
|
let confidence = 0;
|
|
1011
834
|
let version;
|
|
1012
835
|
const deps = collectAllDependencies(pkg);
|
|
1013
|
-
if (deps['
|
|
836
|
+
if (deps['solid-js']) {
|
|
1014
837
|
confidence += 70;
|
|
1015
|
-
version = parseVersionString(deps['
|
|
1016
|
-
sources.push({ type: 'package.json', field: 'dependencies
|
|
1017
|
-
}
|
|
1018
|
-
if (deps['@angular/cli']) {
|
|
1019
|
-
confidence += 15;
|
|
1020
|
-
sources.push({ type: 'package.json', field: 'dependencies.@angular/cli' });
|
|
838
|
+
version = parseVersionString(deps['solid-js']);
|
|
839
|
+
sources.push({ type: 'package.json', field: 'dependencies.solid-js' });
|
|
1021
840
|
}
|
|
1022
|
-
if (
|
|
1023
|
-
confidence +=
|
|
1024
|
-
sources.push({ type: '
|
|
841
|
+
if (deps['vite-plugin-solid']) {
|
|
842
|
+
confidence += 20;
|
|
843
|
+
sources.push({ type: 'package.json', field: 'dependencies.vite-plugin-solid' });
|
|
1025
844
|
}
|
|
1026
|
-
if (deps['
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
name: 'AngularJS (Legacy)',
|
|
1030
|
-
category: 'frontend',
|
|
1031
|
-
version: parseVersionString(deps['angular']),
|
|
1032
|
-
confidence: 80,
|
|
1033
|
-
detectedFrom: [{ type: 'package.json', field: 'dependencies.angular' }],
|
|
1034
|
-
};
|
|
845
|
+
if (deps['solid-start'] || deps['@solidjs/start']) {
|
|
846
|
+
confidence += 10;
|
|
847
|
+
sources.push({ type: 'package.json', field: 'dependencies.solid-start' });
|
|
1035
848
|
}
|
|
1036
849
|
if (confidence === 0) {
|
|
1037
850
|
return null;
|
|
1038
851
|
}
|
|
1039
852
|
return {
|
|
1040
|
-
id: '
|
|
1041
|
-
name: '
|
|
853
|
+
id: 'solid',
|
|
854
|
+
name: 'Solid',
|
|
1042
855
|
category: 'frontend',
|
|
1043
856
|
version,
|
|
1044
|
-
confidence: min(confidence, 100),
|
|
857
|
+
confidence: index_cjs_js$7.min(confidence, 100),
|
|
1045
858
|
detectedFrom: sources,
|
|
1046
859
|
};
|
|
1047
860
|
}
|
|
@@ -1052,6 +865,21 @@ function angularDetector(projectPath, packageJson) {
|
|
|
1052
865
|
* @param projectPath - Project directory path
|
|
1053
866
|
* @param packageJson - Optional pre-loaded package.json
|
|
1054
867
|
* @returns Detection result or null if not detected
|
|
868
|
+
*
|
|
869
|
+
* @example Detecting Svelte framework
|
|
870
|
+
* ```typescript
|
|
871
|
+
* const result = svelteDetector('/path/to/svelte-app', {
|
|
872
|
+
* devDependencies: { 'svelte': '^4.0.0' }
|
|
873
|
+
* })
|
|
874
|
+
* // => {
|
|
875
|
+
* // id: 'svelte',
|
|
876
|
+
* // name: 'Svelte',
|
|
877
|
+
* // category: 'frontend',
|
|
878
|
+
* // version: '4.0.0',
|
|
879
|
+
* // confidence: 70,
|
|
880
|
+
* // detectedFrom: [{ type: 'package.json', field: 'dependencies.svelte' }]
|
|
881
|
+
* // }
|
|
882
|
+
* ```
|
|
1055
883
|
*/
|
|
1056
884
|
function svelteDetector(projectPath, packageJson) {
|
|
1057
885
|
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
@@ -1092,7 +920,7 @@ function svelteDetector(projectPath, packageJson) {
|
|
|
1092
920
|
name: 'Svelte',
|
|
1093
921
|
category: 'frontend',
|
|
1094
922
|
version,
|
|
1095
|
-
confidence: min(confidence, 100),
|
|
923
|
+
confidence: index_cjs_js$7.min(confidence, 100),
|
|
1096
924
|
detectedFrom: sources,
|
|
1097
925
|
metaFrameworks: metaFrameworks.length > 0 ? metaFrameworks : undefined,
|
|
1098
926
|
};
|
|
@@ -1104,6 +932,21 @@ function svelteDetector(projectPath, packageJson) {
|
|
|
1104
932
|
* @param projectPath - Project directory path
|
|
1105
933
|
* @param packageJson - Optional pre-loaded package.json
|
|
1106
934
|
* @returns Detection result or null if not detected
|
|
935
|
+
*
|
|
936
|
+
* @example Detecting SvelteKit framework
|
|
937
|
+
* ```typescript
|
|
938
|
+
* const result = sveltekitDetector('/path/to/sveltekit-app', {
|
|
939
|
+
* devDependencies: { '@sveltejs/kit': '^2.0.0', 'svelte': '^4.0.0' }
|
|
940
|
+
* })
|
|
941
|
+
* // => {
|
|
942
|
+
* // id: 'sveltekit',
|
|
943
|
+
* // name: 'SvelteKit',
|
|
944
|
+
* // category: 'meta-framework',
|
|
945
|
+
* // version: '2.0.0',
|
|
946
|
+
* // confidence: 70,
|
|
947
|
+
* // detectedFrom: [{ type: 'package.json', field: 'dependencies.@sveltejs/kit' }]
|
|
948
|
+
* // }
|
|
949
|
+
* ```
|
|
1107
950
|
*/
|
|
1108
951
|
function sveltekitDetector(projectPath, packageJson) {
|
|
1109
952
|
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
@@ -1111,7 +954,6 @@ function sveltekitDetector(projectPath, packageJson) {
|
|
|
1111
954
|
let confidence = 0;
|
|
1112
955
|
let version;
|
|
1113
956
|
const deps = collectAllDependencies(pkg);
|
|
1114
|
-
// @sveltejs/kit package
|
|
1115
957
|
if (deps['@sveltejs/kit']) {
|
|
1116
958
|
confidence += 70;
|
|
1117
959
|
version = parseVersionString(deps['@sveltejs/kit']);
|
|
@@ -1133,129 +975,82 @@ function sveltekitDetector(projectPath, packageJson) {
|
|
|
1133
975
|
name: 'SvelteKit',
|
|
1134
976
|
category: 'meta-framework',
|
|
1135
977
|
version,
|
|
1136
|
-
confidence: min(confidence, 100),
|
|
978
|
+
confidence: index_cjs_js$7.min(confidence, 100),
|
|
1137
979
|
detectedFrom: sources,
|
|
1138
980
|
};
|
|
1139
981
|
}
|
|
1140
982
|
|
|
1141
983
|
/**
|
|
1142
|
-
* Detect
|
|
984
|
+
* Detect Vue in project.
|
|
1143
985
|
*
|
|
1144
986
|
* @param projectPath - Project directory path
|
|
1145
987
|
* @param packageJson - Optional pre-loaded package.json
|
|
1146
988
|
* @returns Detection result or null if not detected
|
|
1147
|
-
*/
|
|
1148
|
-
function solidDetector(projectPath, packageJson) {
|
|
1149
|
-
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
1150
|
-
const sources = [];
|
|
1151
|
-
let confidence = 0;
|
|
1152
|
-
let version;
|
|
1153
|
-
const deps = collectAllDependencies(pkg);
|
|
1154
|
-
if (deps['solid-js']) {
|
|
1155
|
-
confidence += 70;
|
|
1156
|
-
version = parseVersionString(deps['solid-js']);
|
|
1157
|
-
sources.push({ type: 'package.json', field: 'dependencies.solid-js' });
|
|
1158
|
-
}
|
|
1159
|
-
if (deps['vite-plugin-solid']) {
|
|
1160
|
-
confidence += 20;
|
|
1161
|
-
sources.push({ type: 'package.json', field: 'dependencies.vite-plugin-solid' });
|
|
1162
|
-
}
|
|
1163
|
-
if (deps['solid-start'] || deps['@solidjs/start']) {
|
|
1164
|
-
confidence += 10;
|
|
1165
|
-
sources.push({ type: 'package.json', field: 'dependencies.solid-start' });
|
|
1166
|
-
}
|
|
1167
|
-
if (confidence === 0) {
|
|
1168
|
-
return null;
|
|
1169
|
-
}
|
|
1170
|
-
return {
|
|
1171
|
-
id: 'solid',
|
|
1172
|
-
name: 'Solid',
|
|
1173
|
-
category: 'frontend',
|
|
1174
|
-
version,
|
|
1175
|
-
confidence: min(confidence, 100),
|
|
1176
|
-
detectedFrom: sources,
|
|
1177
|
-
};
|
|
1178
|
-
}
|
|
1179
|
-
|
|
1180
|
-
/**
|
|
1181
|
-
* Detect Qwik in project.
|
|
1182
989
|
*
|
|
1183
|
-
* @
|
|
1184
|
-
*
|
|
1185
|
-
*
|
|
990
|
+
* @example Detecting Vue.js framework
|
|
991
|
+
* ```typescript
|
|
992
|
+
* const result = vueDetector('/path/to/vue-app', {
|
|
993
|
+
* dependencies: { 'vue': '^3.0.0', '@vue/cli-service': '^5.0.0' }
|
|
994
|
+
* })
|
|
995
|
+
* // => {
|
|
996
|
+
* // id: 'vue',
|
|
997
|
+
* // name: 'Vue',
|
|
998
|
+
* // category: 'frontend',
|
|
999
|
+
* // version: '3.0.0',
|
|
1000
|
+
* // confidence: 85,
|
|
1001
|
+
* // detectedFrom: [
|
|
1002
|
+
* // { type: 'package.json', field: 'dependencies.vue' },
|
|
1003
|
+
* // { type: 'package.json', field: 'dependencies.@vue/cli-service' }
|
|
1004
|
+
* // ]
|
|
1005
|
+
* // }
|
|
1006
|
+
* ```
|
|
1186
1007
|
*/
|
|
1187
|
-
function
|
|
1008
|
+
function vueDetector(projectPath, packageJson) {
|
|
1188
1009
|
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
1189
1010
|
const sources = [];
|
|
1190
1011
|
let confidence = 0;
|
|
1191
1012
|
let version;
|
|
1013
|
+
const metaFrameworks = [];
|
|
1192
1014
|
const deps = collectAllDependencies(pkg);
|
|
1193
|
-
|
|
1194
|
-
if (deps['@builder.io/qwik']) {
|
|
1015
|
+
if (deps['vue']) {
|
|
1195
1016
|
confidence += 70;
|
|
1196
|
-
version = parseVersionString(deps['
|
|
1197
|
-
sources.push({ type: 'package.json', field: 'dependencies
|
|
1017
|
+
version = parseVersionString(deps['vue']);
|
|
1018
|
+
sources.push({ type: 'package.json', field: 'dependencies.vue' });
|
|
1198
1019
|
}
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
sources.push({ type: 'package.json', field: 'dependencies.@builder.io/qwik-city' });
|
|
1020
|
+
if (deps['@vue/cli-service']) {
|
|
1021
|
+
confidence += 15;
|
|
1022
|
+
sources.push({ type: 'package.json', field: 'dependencies.@vue/cli-service' });
|
|
1203
1023
|
}
|
|
1204
|
-
|
|
1024
|
+
const hasVueFiles = exists(node_path.join(projectPath, 'src', 'App.vue')) || exists(node_path.join(projectPath, 'src', 'main.vue'));
|
|
1025
|
+
if (hasVueFiles) {
|
|
1205
1026
|
confidence += 10;
|
|
1206
|
-
sources.push({ type: '
|
|
1207
|
-
}
|
|
1208
|
-
if (confidence === 0) {
|
|
1209
|
-
return null;
|
|
1210
|
-
}
|
|
1211
|
-
return {
|
|
1212
|
-
id: 'qwik',
|
|
1213
|
-
name: 'Qwik',
|
|
1214
|
-
category: 'frontend',
|
|
1215
|
-
version,
|
|
1216
|
-
confidence: min(confidence, 100),
|
|
1217
|
-
detectedFrom: sources,
|
|
1218
|
-
};
|
|
1219
|
-
}
|
|
1220
|
-
|
|
1221
|
-
/**
|
|
1222
|
-
* Detect Astro in project.
|
|
1223
|
-
*
|
|
1224
|
-
* @param projectPath - Project directory path
|
|
1225
|
-
* @param packageJson - Optional pre-loaded package.json
|
|
1226
|
-
* @returns Detection result or null if not detected
|
|
1227
|
-
*/
|
|
1228
|
-
function astroDetector(projectPath, packageJson) {
|
|
1229
|
-
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
1230
|
-
const sources = [];
|
|
1231
|
-
let confidence = 0;
|
|
1232
|
-
let version;
|
|
1233
|
-
const deps = collectAllDependencies(pkg);
|
|
1234
|
-
if (deps['astro']) {
|
|
1235
|
-
confidence += 70;
|
|
1236
|
-
version = parseVersionString(deps['astro']);
|
|
1237
|
-
sources.push({ type: 'package.json', field: 'dependencies.astro' });
|
|
1238
|
-
}
|
|
1239
|
-
if (exists(node_path.join(projectPath, 'astro.config.mjs')) ||
|
|
1240
|
-
exists(node_path.join(projectPath, 'astro.config.ts')) ||
|
|
1241
|
-
exists(node_path.join(projectPath, 'astro.config.js'))) {
|
|
1242
|
-
confidence += 25;
|
|
1243
|
-
sources.push({ type: 'config-file', path: 'astro.config.*' });
|
|
1027
|
+
sources.push({ type: 'directory', path: 'src/*.vue' });
|
|
1244
1028
|
}
|
|
1245
|
-
if (exists(node_path.join(projectPath, '
|
|
1029
|
+
if (exists(node_path.join(projectPath, 'vue.config.js'))) {
|
|
1246
1030
|
confidence += 5;
|
|
1247
|
-
sources.push({ type: '
|
|
1031
|
+
sources.push({ type: 'config-file', path: 'vue.config.js' });
|
|
1032
|
+
}
|
|
1033
|
+
if (deps['nuxt'] || deps['nuxt3']) {
|
|
1034
|
+
metaFrameworks.push({
|
|
1035
|
+
id: 'nuxt',
|
|
1036
|
+
name: 'Nuxt',
|
|
1037
|
+
category: 'meta-framework',
|
|
1038
|
+
version: parseVersionString(deps['nuxt'] ?? deps['nuxt3']),
|
|
1039
|
+
confidence: 90,
|
|
1040
|
+
detectedFrom: [{ type: 'package.json', field: 'dependencies.nuxt' }],
|
|
1041
|
+
});
|
|
1248
1042
|
}
|
|
1249
1043
|
if (confidence === 0) {
|
|
1250
1044
|
return null;
|
|
1251
1045
|
}
|
|
1252
1046
|
return {
|
|
1253
|
-
id: '
|
|
1254
|
-
name: '
|
|
1255
|
-
category: '
|
|
1047
|
+
id: 'vue',
|
|
1048
|
+
name: 'Vue',
|
|
1049
|
+
category: 'frontend',
|
|
1256
1050
|
version,
|
|
1257
|
-
confidence: min(confidence, 100),
|
|
1051
|
+
confidence: index_cjs_js$7.min(confidence, 100),
|
|
1258
1052
|
detectedFrom: sources,
|
|
1053
|
+
metaFrameworks: metaFrameworks.length > 0 ? metaFrameworks : undefined,
|
|
1259
1054
|
};
|
|
1260
1055
|
}
|
|
1261
1056
|
|
|
@@ -1280,6 +1075,17 @@ const frameworkDetectors = [
|
|
|
1280
1075
|
* @param projectPath - Project directory path
|
|
1281
1076
|
* @param packageJson - Optional pre-loaded package.json
|
|
1282
1077
|
* @returns Array of detected frameworks, sorted by confidence
|
|
1078
|
+
*
|
|
1079
|
+
* @example Detecting multiple frontend frameworks
|
|
1080
|
+
* ```typescript
|
|
1081
|
+
* const frameworks = detectFrontendFrameworks('/path/to/nextjs-app', {
|
|
1082
|
+
* dependencies: { 'react': '^18.0.0', 'next': '^14.0.0' }
|
|
1083
|
+
* })
|
|
1084
|
+
* // => [
|
|
1085
|
+
* // { id: 'nextjs', name: 'Next.js', category: 'meta-framework', confidence: 70, ... },
|
|
1086
|
+
* // { id: 'react', name: 'React', category: 'frontend', confidence: 60, ... }
|
|
1087
|
+
* // ]
|
|
1088
|
+
* ```
|
|
1283
1089
|
*/
|
|
1284
1090
|
function detectFrontendFrameworks(projectPath, packageJson) {
|
|
1285
1091
|
const pkg = packageJson ?? readPackageJsonIfExists(projectPath);
|
|
@@ -1307,4 +1113,3 @@ exports.solidDetector = solidDetector;
|
|
|
1307
1113
|
exports.svelteDetector = svelteDetector;
|
|
1308
1114
|
exports.sveltekitDetector = sveltekitDetector;
|
|
1309
1115
|
exports.vueDetector = vueDetector;
|
|
1310
|
-
//# sourceMappingURL=index.cjs.js.map
|