@hyperfrontend/project-scope 0.1.0
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/ARCHITECTURE.md +370 -0
- package/CHANGELOG.md +10 -0
- package/FUNDING.md +141 -0
- package/LICENSE.md +21 -0
- package/README.md +242 -0
- package/SECURITY.md +82 -0
- package/analyze.d.ts +33 -0
- package/analyze.d.ts.map +1 -0
- package/cli/commands/analyze.d.ts +20 -0
- package/cli/commands/analyze.d.ts.map +1 -0
- package/cli/commands/config.d.ts +20 -0
- package/cli/commands/config.d.ts.map +1 -0
- package/cli/commands/deps.d.ts +18 -0
- package/cli/commands/deps.d.ts.map +1 -0
- package/cli/commands/tree.d.ts +24 -0
- package/cli/commands/tree.d.ts.map +1 -0
- package/cli/index.cjs.js +6639 -0
- package/cli/index.cjs.js.map +1 -0
- package/cli/index.d.ts +7 -0
- package/cli/index.d.ts.map +1 -0
- package/cli/index.esm.js +6629 -0
- package/cli/index.esm.js.map +1 -0
- package/cli/run.d.ts +25 -0
- package/cli/run.d.ts.map +1 -0
- package/cli/types.d.ts +55 -0
- package/cli/types.d.ts.map +1 -0
- package/core/cache.d.ts +157 -0
- package/core/cache.d.ts.map +1 -0
- package/core/encoding/convert.d.ts +32 -0
- package/core/encoding/convert.d.ts.map +1 -0
- package/core/encoding/detect.d.ts +86 -0
- package/core/encoding/detect.d.ts.map +1 -0
- package/core/encoding/index.cjs.js +751 -0
- package/core/encoding/index.cjs.js.map +1 -0
- package/core/encoding/index.d.ts +3 -0
- package/core/encoding/index.d.ts.map +1 -0
- package/core/encoding/index.esm.js +736 -0
- package/core/encoding/index.esm.js.map +1 -0
- package/core/errors/structured-errors.d.ts +64 -0
- package/core/errors/structured-errors.d.ts.map +1 -0
- package/core/fs/directory.d.ts +88 -0
- package/core/fs/directory.d.ts.map +1 -0
- package/core/fs/index.cjs.js +1079 -0
- package/core/fs/index.cjs.js.map +1 -0
- package/core/fs/index.d.ts +6 -0
- package/core/fs/index.d.ts.map +1 -0
- package/core/fs/index.esm.js +1056 -0
- package/core/fs/index.esm.js.map +1 -0
- package/core/fs/read.d.ts +86 -0
- package/core/fs/read.d.ts.map +1 -0
- package/core/fs/stat.d.ts +58 -0
- package/core/fs/stat.d.ts.map +1 -0
- package/core/fs/traversal.d.ts +26 -0
- package/core/fs/traversal.d.ts.map +1 -0
- package/core/fs/write.d.ts +75 -0
- package/core/fs/write.d.ts.map +1 -0
- package/core/index.cjs.js +2376 -0
- package/core/index.cjs.js.map +1 -0
- package/core/index.d.ts +9 -0
- package/core/index.d.ts.map +1 -0
- package/core/index.esm.js +2286 -0
- package/core/index.esm.js.map +1 -0
- package/core/logger.d.ts +111 -0
- package/core/logger.d.ts.map +1 -0
- package/core/path/index.cjs.js +254 -0
- package/core/path/index.cjs.js.map +1 -0
- package/core/path/index.d.ts +5 -0
- package/core/path/index.d.ts.map +1 -0
- package/core/path/index.esm.js +233 -0
- package/core/path/index.esm.js.map +1 -0
- package/core/path/join.d.ts +17 -0
- package/core/path/join.d.ts.map +1 -0
- package/core/path/normalize.d.ts +37 -0
- package/core/path/normalize.d.ts.map +1 -0
- package/core/path/resolve.d.ts +52 -0
- package/core/path/resolve.d.ts.map +1 -0
- package/core/path/segments.d.ts +59 -0
- package/core/path/segments.d.ts.map +1 -0
- package/core/patterns/glob.d.ts +46 -0
- package/core/patterns/glob.d.ts.map +1 -0
- package/core/platform/detect.d.ts +66 -0
- package/core/platform/detect.d.ts.map +1 -0
- package/core/platform/index.cjs.js +241 -0
- package/core/platform/index.cjs.js.map +1 -0
- package/core/platform/index.d.ts +3 -0
- package/core/platform/index.d.ts.map +1 -0
- package/core/platform/index.esm.js +226 -0
- package/core/platform/index.esm.js.map +1 -0
- package/core/platform/line-endings.d.ts +48 -0
- package/core/platform/line-endings.d.ts.map +1 -0
- package/heuristics/dependencies/analyze.d.ts +77 -0
- package/heuristics/dependencies/analyze.d.ts.map +1 -0
- package/heuristics/dependencies/index.cjs.js +1126 -0
- package/heuristics/dependencies/index.cjs.js.map +1 -0
- package/heuristics/dependencies/index.d.ts +2 -0
- package/heuristics/dependencies/index.d.ts.map +1 -0
- package/heuristics/dependencies/index.esm.js +1122 -0
- package/heuristics/dependencies/index.esm.js.map +1 -0
- package/heuristics/entry-points/discover.d.ts +86 -0
- package/heuristics/entry-points/discover.d.ts.map +1 -0
- package/heuristics/entry-points/index.cjs.js +1581 -0
- package/heuristics/entry-points/index.cjs.js.map +1 -0
- package/heuristics/entry-points/index.d.ts +2 -0
- package/heuristics/entry-points/index.d.ts.map +1 -0
- package/heuristics/entry-points/index.esm.js +1577 -0
- package/heuristics/entry-points/index.esm.js.map +1 -0
- package/heuristics/framework/identify.d.ts +84 -0
- package/heuristics/framework/identify.d.ts.map +1 -0
- package/heuristics/framework/index.cjs.js +3618 -0
- package/heuristics/framework/index.cjs.js.map +1 -0
- package/heuristics/framework/index.d.ts +2 -0
- package/heuristics/framework/index.d.ts.map +1 -0
- package/heuristics/framework/index.esm.js +3614 -0
- package/heuristics/framework/index.esm.js.map +1 -0
- package/heuristics/index.cjs.js +4833 -0
- package/heuristics/index.cjs.js.map +1 -0
- package/heuristics/index.d.ts +5 -0
- package/heuristics/index.d.ts.map +1 -0
- package/heuristics/index.esm.js +4822 -0
- package/heuristics/index.esm.js.map +1 -0
- package/heuristics/project-type/detect.d.ts +61 -0
- package/heuristics/project-type/detect.d.ts.map +1 -0
- package/heuristics/project-type/index.cjs.js +3633 -0
- package/heuristics/project-type/index.cjs.js.map +1 -0
- package/heuristics/project-type/index.d.ts +2 -0
- package/heuristics/project-type/index.d.ts.map +1 -0
- package/heuristics/project-type/index.esm.js +3631 -0
- package/heuristics/project-type/index.esm.js.map +1 -0
- package/index.cjs.js +10255 -0
- package/index.cjs.js.map +1 -0
- package/index.d.ts +10 -0
- package/index.d.ts.map +1 -0
- package/index.esm.js +10006 -0
- package/index.esm.js.map +1 -0
- package/models/index.cjs.js +3 -0
- package/models/index.cjs.js.map +1 -0
- package/models/index.d.ts +176 -0
- package/models/index.d.ts.map +1 -0
- package/models/index.esm.js +2 -0
- package/models/index.esm.js.map +1 -0
- package/nx/detect.d.ts +105 -0
- package/nx/detect.d.ts.map +1 -0
- package/nx/devkit-loader.d.ts +62 -0
- package/nx/devkit-loader.d.ts.map +1 -0
- package/nx/index.cjs.js +1302 -0
- package/nx/index.cjs.js.map +1 -0
- package/nx/index.d.ts +4 -0
- package/nx/index.d.ts.map +1 -0
- package/nx/index.esm.js +1286 -0
- package/nx/index.esm.js.map +1 -0
- package/nx/project-config.d.ts +109 -0
- package/nx/project-config.d.ts.map +1 -0
- package/package.json +218 -0
- package/project/config/detect.d.ts +77 -0
- package/project/config/detect.d.ts.map +1 -0
- package/project/config/index.cjs.js +1982 -0
- package/project/config/index.cjs.js.map +1 -0
- package/project/config/index.d.ts +4 -0
- package/project/config/index.d.ts.map +1 -0
- package/project/config/index.esm.js +1971 -0
- package/project/config/index.esm.js.map +1 -0
- package/project/config/parse.d.ts +53 -0
- package/project/config/parse.d.ts.map +1 -0
- package/project/config/patterns.d.ts +31 -0
- package/project/config/patterns.d.ts.map +1 -0
- package/project/index.cjs.js +2585 -0
- package/project/index.cjs.js.map +1 -0
- package/project/index.d.ts +5 -0
- package/project/index.d.ts.map +1 -0
- package/project/index.esm.js +2549 -0
- package/project/index.esm.js.map +1 -0
- package/project/package/dependencies.d.ts +101 -0
- package/project/package/dependencies.d.ts.map +1 -0
- package/project/package/index.cjs.js +972 -0
- package/project/package/index.cjs.js.map +1 -0
- package/project/package/index.d.ts +3 -0
- package/project/package/index.d.ts.map +1 -0
- package/project/package/index.esm.js +957 -0
- package/project/package/index.esm.js.map +1 -0
- package/project/package/read.d.ts +66 -0
- package/project/package/read.d.ts.map +1 -0
- package/project/root/detect.d.ts +65 -0
- package/project/root/detect.d.ts.map +1 -0
- package/project/root/index.cjs.js +860 -0
- package/project/root/index.cjs.js.map +1 -0
- package/project/root/index.d.ts +2 -0
- package/project/root/index.d.ts.map +1 -0
- package/project/root/index.esm.js +853 -0
- package/project/root/index.esm.js.map +1 -0
- package/project/traversal/index.cjs.js +1179 -0
- package/project/traversal/index.cjs.js.map +1 -0
- package/project/traversal/index.d.ts +3 -0
- package/project/traversal/index.d.ts.map +1 -0
- package/project/traversal/index.esm.js +1173 -0
- package/project/traversal/index.esm.js.map +1 -0
- package/project/traversal/search.d.ts +59 -0
- package/project/traversal/search.d.ts.map +1 -0
- package/project/traversal/walk.d.ts +63 -0
- package/project/traversal/walk.d.ts.map +1 -0
- package/tech/backend/detect-all.d.ts +13 -0
- package/tech/backend/detect-all.d.ts.map +1 -0
- package/tech/backend/express.d.ts +11 -0
- package/tech/backend/express.d.ts.map +1 -0
- package/tech/backend/fastify.d.ts +11 -0
- package/tech/backend/fastify.d.ts.map +1 -0
- package/tech/backend/hono.d.ts +11 -0
- package/tech/backend/hono.d.ts.map +1 -0
- package/tech/backend/index.cjs.js +939 -0
- package/tech/backend/index.cjs.js.map +1 -0
- package/tech/backend/index.d.ts +8 -0
- package/tech/backend/index.d.ts.map +1 -0
- package/tech/backend/index.esm.js +931 -0
- package/tech/backend/index.esm.js.map +1 -0
- package/tech/backend/koa.d.ts +11 -0
- package/tech/backend/koa.d.ts.map +1 -0
- package/tech/backend/nestjs.d.ts +11 -0
- package/tech/backend/nestjs.d.ts.map +1 -0
- package/tech/backend/types.d.ts +31 -0
- package/tech/backend/types.d.ts.map +1 -0
- package/tech/build/babel.d.ts +13 -0
- package/tech/build/babel.d.ts.map +1 -0
- package/tech/build/detect-all.d.ts +13 -0
- package/tech/build/detect-all.d.ts.map +1 -0
- package/tech/build/esbuild.d.ts +11 -0
- package/tech/build/esbuild.d.ts.map +1 -0
- package/tech/build/index.cjs.js +1118 -0
- package/tech/build/index.cjs.js.map +1 -0
- package/tech/build/index.d.ts +10 -0
- package/tech/build/index.d.ts.map +1 -0
- package/tech/build/index.esm.js +1102 -0
- package/tech/build/index.esm.js.map +1 -0
- package/tech/build/parcel.d.ts +13 -0
- package/tech/build/parcel.d.ts.map +1 -0
- package/tech/build/rollup.d.ts +13 -0
- package/tech/build/rollup.d.ts.map +1 -0
- package/tech/build/swc.d.ts +13 -0
- package/tech/build/swc.d.ts.map +1 -0
- package/tech/build/types.d.ts +31 -0
- package/tech/build/types.d.ts.map +1 -0
- package/tech/build/vite.d.ts +13 -0
- package/tech/build/vite.d.ts.map +1 -0
- package/tech/build/webpack.d.ts +13 -0
- package/tech/build/webpack.d.ts.map +1 -0
- package/tech/frontend/angular.d.ts +11 -0
- package/tech/frontend/angular.d.ts.map +1 -0
- package/tech/frontend/astro.d.ts +11 -0
- package/tech/frontend/astro.d.ts.map +1 -0
- package/tech/frontend/detect-all.d.ts +13 -0
- package/tech/frontend/detect-all.d.ts.map +1 -0
- package/tech/frontend/gatsby.d.ts +11 -0
- package/tech/frontend/gatsby.d.ts.map +1 -0
- package/tech/frontend/index.cjs.js +1310 -0
- package/tech/frontend/index.cjs.js.map +1 -0
- package/tech/frontend/index.d.ts +15 -0
- package/tech/frontend/index.d.ts.map +1 -0
- package/tech/frontend/index.esm.js +1295 -0
- package/tech/frontend/index.esm.js.map +1 -0
- package/tech/frontend/nextjs.d.ts +11 -0
- package/tech/frontend/nextjs.d.ts.map +1 -0
- package/tech/frontend/nuxt.d.ts +11 -0
- package/tech/frontend/nuxt.d.ts.map +1 -0
- package/tech/frontend/qwik.d.ts +11 -0
- package/tech/frontend/qwik.d.ts.map +1 -0
- package/tech/frontend/react.d.ts +11 -0
- package/tech/frontend/react.d.ts.map +1 -0
- package/tech/frontend/remix.d.ts +11 -0
- package/tech/frontend/remix.d.ts.map +1 -0
- package/tech/frontend/solid.d.ts +11 -0
- package/tech/frontend/solid.d.ts.map +1 -0
- package/tech/frontend/svelte.d.ts +11 -0
- package/tech/frontend/svelte.d.ts.map +1 -0
- package/tech/frontend/sveltekit.d.ts +11 -0
- package/tech/frontend/sveltekit.d.ts.map +1 -0
- package/tech/frontend/types.d.ts +35 -0
- package/tech/frontend/types.d.ts.map +1 -0
- package/tech/frontend/vue.d.ts +11 -0
- package/tech/frontend/vue.d.ts.map +1 -0
- package/tech/index.cjs.js +3684 -0
- package/tech/index.cjs.js.map +1 -0
- package/tech/index.d.ts +96 -0
- package/tech/index.d.ts.map +1 -0
- package/tech/index.esm.js +3603 -0
- package/tech/index.esm.js.map +1 -0
- package/tech/legacy/angularjs.d.ts +12 -0
- package/tech/legacy/angularjs.d.ts.map +1 -0
- package/tech/legacy/backbone.d.ts +11 -0
- package/tech/legacy/backbone.d.ts.map +1 -0
- package/tech/legacy/detect-all.d.ts +13 -0
- package/tech/legacy/detect-all.d.ts.map +1 -0
- package/tech/legacy/ember.d.ts +11 -0
- package/tech/legacy/ember.d.ts.map +1 -0
- package/tech/legacy/index.cjs.js +903 -0
- package/tech/legacy/index.cjs.js.map +1 -0
- package/tech/legacy/index.d.ts +7 -0
- package/tech/legacy/index.d.ts.map +1 -0
- package/tech/legacy/index.esm.js +896 -0
- package/tech/legacy/index.esm.js.map +1 -0
- package/tech/legacy/jquery.d.ts +11 -0
- package/tech/legacy/jquery.d.ts.map +1 -0
- package/tech/legacy/types.d.ts +33 -0
- package/tech/legacy/types.d.ts.map +1 -0
- package/tech/linting/biome.d.ts +11 -0
- package/tech/linting/biome.d.ts.map +1 -0
- package/tech/linting/detect-all.d.ts +13 -0
- package/tech/linting/detect-all.d.ts.map +1 -0
- package/tech/linting/eslint.d.ts +13 -0
- package/tech/linting/eslint.d.ts.map +1 -0
- package/tech/linting/index.cjs.js +992 -0
- package/tech/linting/index.cjs.js.map +1 -0
- package/tech/linting/index.d.ts +7 -0
- package/tech/linting/index.d.ts.map +1 -0
- package/tech/linting/index.esm.js +982 -0
- package/tech/linting/index.esm.js.map +1 -0
- package/tech/linting/prettier.d.ts +13 -0
- package/tech/linting/prettier.d.ts.map +1 -0
- package/tech/linting/stylelint.d.ts +13 -0
- package/tech/linting/stylelint.d.ts.map +1 -0
- package/tech/linting/types.d.ts +31 -0
- package/tech/linting/types.d.ts.map +1 -0
- package/tech/monorepo/detect-all.d.ts +13 -0
- package/tech/monorepo/detect-all.d.ts.map +1 -0
- package/tech/monorepo/index.cjs.js +1021 -0
- package/tech/monorepo/index.cjs.js.map +1 -0
- package/tech/monorepo/index.d.ts +10 -0
- package/tech/monorepo/index.d.ts.map +1 -0
- package/tech/monorepo/index.esm.js +1011 -0
- package/tech/monorepo/index.esm.js.map +1 -0
- package/tech/monorepo/lerna.d.ts +11 -0
- package/tech/monorepo/lerna.d.ts.map +1 -0
- package/tech/monorepo/npm-workspaces.d.ts +11 -0
- package/tech/monorepo/npm-workspaces.d.ts.map +1 -0
- package/tech/monorepo/nx.d.ts +11 -0
- package/tech/monorepo/nx.d.ts.map +1 -0
- package/tech/monorepo/pnpm-workspaces.d.ts +9 -0
- package/tech/monorepo/pnpm-workspaces.d.ts.map +1 -0
- package/tech/monorepo/rush.d.ts +11 -0
- package/tech/monorepo/rush.d.ts.map +1 -0
- package/tech/monorepo/turborepo.d.ts +11 -0
- package/tech/monorepo/turborepo.d.ts.map +1 -0
- package/tech/monorepo/types.d.ts +39 -0
- package/tech/monorepo/types.d.ts.map +1 -0
- package/tech/monorepo/yarn-workspaces.d.ts +11 -0
- package/tech/monorepo/yarn-workspaces.d.ts.map +1 -0
- package/tech/shared-utils/detector-helpers.d.ts +52 -0
- package/tech/shared-utils/detector-helpers.d.ts.map +1 -0
- package/tech/shared-utils/types.d.ts +41 -0
- package/tech/shared-utils/types.d.ts.map +1 -0
- package/tech/testing/cypress.d.ts +13 -0
- package/tech/testing/cypress.d.ts.map +1 -0
- package/tech/testing/detect-all.d.ts +13 -0
- package/tech/testing/detect-all.d.ts.map +1 -0
- package/tech/testing/index.cjs.js +1031 -0
- package/tech/testing/index.cjs.js.map +1 -0
- package/tech/testing/index.d.ts +8 -0
- package/tech/testing/index.d.ts.map +1 -0
- package/tech/testing/index.esm.js +1018 -0
- package/tech/testing/index.esm.js.map +1 -0
- package/tech/testing/jest.d.ts +13 -0
- package/tech/testing/jest.d.ts.map +1 -0
- package/tech/testing/mocha.d.ts +13 -0
- package/tech/testing/mocha.d.ts.map +1 -0
- package/tech/testing/playwright.d.ts +13 -0
- package/tech/testing/playwright.d.ts.map +1 -0
- package/tech/testing/types.d.ts +35 -0
- package/tech/testing/types.d.ts.map +1 -0
- package/tech/testing/vitest.d.ts +13 -0
- package/tech/testing/vitest.d.ts.map +1 -0
- package/tech/types/detectors.d.ts +67 -0
- package/tech/types/detectors.d.ts.map +1 -0
- package/tech/types/index.cjs.js +1045 -0
- package/tech/types/index.cjs.js.map +1 -0
- package/tech/types/index.d.ts +2 -0
- package/tech/types/index.d.ts.map +1 -0
- package/tech/types/index.esm.js +1039 -0
- package/tech/types/index.esm.js.map +1 -0
- package/vfs/commit.d.ts +32 -0
- package/vfs/commit.d.ts.map +1 -0
- package/vfs/diff.d.ts +73 -0
- package/vfs/diff.d.ts.map +1 -0
- package/vfs/factory.d.ts +37 -0
- package/vfs/factory.d.ts.map +1 -0
- package/vfs/fs-tree.d.ts +13 -0
- package/vfs/fs-tree.d.ts.map +1 -0
- package/vfs/index.cjs.js +1600 -0
- package/vfs/index.cjs.js.map +1 -0
- package/vfs/index.d.ts +6 -0
- package/vfs/index.d.ts.map +1 -0
- package/vfs/index.esm.js +1590 -0
- package/vfs/index.esm.js.map +1 -0
- package/vfs/types.d.ts +178 -0
- package/vfs/types.d.ts.map +1 -0
package/ARCHITECTURE.md
ADDED
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
# Architecture
|
|
2
|
+
|
|
3
|
+
This document describes the architecture of `@hyperfrontend/project-scope`, a comprehensive library for analyzing JavaScript/TypeScript project structure, technology stack, and dependencies.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
graph LR
|
|
9
|
+
subgraph "High Level"
|
|
10
|
+
CLI[cli/]
|
|
11
|
+
ANALYZE[analyze.ts]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
subgraph "Domain Logic"
|
|
15
|
+
TECH[tech/]
|
|
16
|
+
HEUR[heuristics/]
|
|
17
|
+
PROJ[project/]
|
|
18
|
+
NX[nx/]
|
|
19
|
+
VFS[vfs/]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
subgraph "Foundation"
|
|
23
|
+
CORE[core/]
|
|
24
|
+
MODELS[models/]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
CLI --> ANALYZE
|
|
28
|
+
ANALYZE --> TECH
|
|
29
|
+
ANALYZE --> HEUR
|
|
30
|
+
ANALYZE --> PROJ
|
|
31
|
+
ANALYZE --> NX
|
|
32
|
+
|
|
33
|
+
TECH --> CORE
|
|
34
|
+
TECH --> PROJ
|
|
35
|
+
HEUR --> CORE
|
|
36
|
+
HEUR --> PROJ
|
|
37
|
+
HEUR --> TECH
|
|
38
|
+
PROJ --> CORE
|
|
39
|
+
NX --> CORE
|
|
40
|
+
NX --> PROJ
|
|
41
|
+
VFS --> CORE
|
|
42
|
+
|
|
43
|
+
CLI --> MODELS
|
|
44
|
+
ANALYZE --> MODELS
|
|
45
|
+
TECH --> MODELS
|
|
46
|
+
HEUR --> MODELS
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Module Structure
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
libs/project-scope/src/
|
|
53
|
+
├── analyze.ts # Main entry point (analyzeProject)
|
|
54
|
+
├── index.ts # Public exports
|
|
55
|
+
├── cli/ # Command-line interface
|
|
56
|
+
├── core/ # Foundation utilities
|
|
57
|
+
├── heuristics/ # Intelligent detection algorithms
|
|
58
|
+
├── models/ # TypeScript types and interfaces
|
|
59
|
+
├── nx/ # NX workspace integration
|
|
60
|
+
├── project/ # Project structure analysis
|
|
61
|
+
├── tech/ # Technology stack detection
|
|
62
|
+
└── vfs/ # Virtual file system
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Data Flow
|
|
66
|
+
|
|
67
|
+
### Analysis Pipeline
|
|
68
|
+
|
|
69
|
+
```mermaid
|
|
70
|
+
sequenceDiagram
|
|
71
|
+
participant User
|
|
72
|
+
participant analyzeProject
|
|
73
|
+
participant tech/detectAll
|
|
74
|
+
participant heuristics
|
|
75
|
+
participant project
|
|
76
|
+
participant core/fs
|
|
77
|
+
|
|
78
|
+
User->>analyzeProject: analyzeProject('./my-project')
|
|
79
|
+
analyzeProject->>core/fs: readPackageJson
|
|
80
|
+
core/fs-->>analyzeProject: PackageJson
|
|
81
|
+
|
|
82
|
+
analyzeProject->>tech/detectAll: detectAll(path, pkg)
|
|
83
|
+
tech/detectAll->>core/fs: exists(), readFile()
|
|
84
|
+
core/fs-->>tech/detectAll: file contents
|
|
85
|
+
tech/detectAll-->>analyzeProject: AllDetections
|
|
86
|
+
|
|
87
|
+
analyzeProject->>heuristics: detectProjectType()
|
|
88
|
+
heuristics->>tech/detectAll: detectAll (cached)
|
|
89
|
+
heuristics-->>analyzeProject: ProjectTypeDetection
|
|
90
|
+
|
|
91
|
+
analyzeProject->>heuristics: discoverEntryPoints()
|
|
92
|
+
heuristics-->>analyzeProject: EntryPointInfo[]
|
|
93
|
+
|
|
94
|
+
analyzeProject->>project: detectConfigs()
|
|
95
|
+
project->>core/fs: findFiles()
|
|
96
|
+
project-->>analyzeProject: DetectedConfig[]
|
|
97
|
+
|
|
98
|
+
analyzeProject-->>User: AnalysisResult
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Core Components
|
|
102
|
+
|
|
103
|
+
### 1. Analysis Engine (`analyze.ts`)
|
|
104
|
+
|
|
105
|
+
The main entry point that orchestrates all detection modules:
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
function analyzeProject(projectPath: string, options?: AnalyzeOptions): AnalysisResult
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Responsibilities:**
|
|
112
|
+
|
|
113
|
+
- Coordinate all detection modules
|
|
114
|
+
- Aggregate results into unified structure
|
|
115
|
+
- Handle options for selective analysis
|
|
116
|
+
- Track analysis metadata (timing, version)
|
|
117
|
+
|
|
118
|
+
### 2. Technology Detection (`tech/`)
|
|
119
|
+
|
|
120
|
+
Detects frameworks, build tools, and testing frameworks:
|
|
121
|
+
|
|
122
|
+
```mermaid
|
|
123
|
+
graph TB
|
|
124
|
+
subgraph "tech/"
|
|
125
|
+
INDEX[index.ts/detectAll]
|
|
126
|
+
FE[frontend/]
|
|
127
|
+
BE[backend/]
|
|
128
|
+
BUILD[build/]
|
|
129
|
+
TEST[testing/]
|
|
130
|
+
MONO[monorepo/]
|
|
131
|
+
TYPES[types/]
|
|
132
|
+
LINT[linting/]
|
|
133
|
+
LEGACY[legacy/]
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
INDEX --> FE
|
|
137
|
+
INDEX --> BE
|
|
138
|
+
INDEX --> BUILD
|
|
139
|
+
INDEX --> TEST
|
|
140
|
+
INDEX --> MONO
|
|
141
|
+
INDEX --> TYPES
|
|
142
|
+
INDEX --> LINT
|
|
143
|
+
INDEX --> LEGACY
|
|
144
|
+
|
|
145
|
+
FE --> DETECT[Detection Results]
|
|
146
|
+
BE --> DETECT
|
|
147
|
+
BUILD --> DETECT
|
|
148
|
+
TEST --> DETECT
|
|
149
|
+
MONO --> DETECT
|
|
150
|
+
TYPES --> DETECT
|
|
151
|
+
LINT --> DETECT
|
|
152
|
+
LEGACY --> DETECT
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Design Patterns:**
|
|
156
|
+
|
|
157
|
+
- Each detector implements a common interface
|
|
158
|
+
- Results include confidence scores (0-100)
|
|
159
|
+
- Detection sources are tracked for transparency
|
|
160
|
+
- Caching with 60-second TTL
|
|
161
|
+
|
|
162
|
+
### 3. Heuristics (`heuristics/`)
|
|
163
|
+
|
|
164
|
+
Intelligent detection using multiple signals:
|
|
165
|
+
|
|
166
|
+
```mermaid
|
|
167
|
+
graph LR
|
|
168
|
+
subgraph "Evidence Collection"
|
|
169
|
+
PKG[package.json patterns]
|
|
170
|
+
DIR[Directory structure]
|
|
171
|
+
FILES[File patterns]
|
|
172
|
+
TECH[Tech detections]
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
subgraph "Scoring"
|
|
176
|
+
SCORE[Score Aggregation]
|
|
177
|
+
CONF[Confidence Calculation]
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
PKG --> SCORE
|
|
181
|
+
DIR --> SCORE
|
|
182
|
+
FILES --> SCORE
|
|
183
|
+
TECH --> SCORE
|
|
184
|
+
SCORE --> CONF
|
|
185
|
+
CONF --> |ProjectTypeDetection| RESULT[Result with Evidence]
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**Key Characteristics:**
|
|
189
|
+
|
|
190
|
+
- Multi-signal analysis for accuracy
|
|
191
|
+
- Evidence tracking for explainability
|
|
192
|
+
- Confidence scoring for reliability indication
|
|
193
|
+
- Caching for performance
|
|
194
|
+
|
|
195
|
+
### 4. Virtual File System (`vfs/`)
|
|
196
|
+
|
|
197
|
+
Transactional file operations:
|
|
198
|
+
|
|
199
|
+
```mermaid
|
|
200
|
+
stateDiagram-v2
|
|
201
|
+
[*] --> Clean: createTree()
|
|
202
|
+
Clean --> Modified: write/delete/rename
|
|
203
|
+
Modified --> Modified: more changes
|
|
204
|
+
Modified --> Clean: commitChanges()
|
|
205
|
+
Modified --> Clean: rollbackChanges()
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**Properties:**
|
|
209
|
+
|
|
210
|
+
- All changes buffered in memory
|
|
211
|
+
- Atomic commit or rollback
|
|
212
|
+
- Path traversal protection
|
|
213
|
+
- Symlink security validation
|
|
214
|
+
|
|
215
|
+
### 5. Core Utilities (`core/`)
|
|
216
|
+
|
|
217
|
+
Foundation layer providing:
|
|
218
|
+
|
|
219
|
+
| Component | Purpose |
|
|
220
|
+
| ----------- | --------------------------------------- |
|
|
221
|
+
| `fs/` | Safe file system operations |
|
|
222
|
+
| `path/` | Cross-platform path manipulation |
|
|
223
|
+
| `logger.ts` | Scoped logging with secret sanitization |
|
|
224
|
+
| `cache.ts` | In-memory caching with TTL |
|
|
225
|
+
| `errors/` | Structured error creation |
|
|
226
|
+
| `patterns/` | ReDoS-safe glob matching |
|
|
227
|
+
| `encoding/` | File encoding detection |
|
|
228
|
+
| `platform/` | OS detection |
|
|
229
|
+
|
|
230
|
+
## Caching Strategy
|
|
231
|
+
|
|
232
|
+
```mermaid
|
|
233
|
+
graph TB
|
|
234
|
+
subgraph "Cache Layers"
|
|
235
|
+
L1[detectAll Cache<br/>TTL: 60s]
|
|
236
|
+
L2[configDetection Cache<br/>TTL: 30s]
|
|
237
|
+
L3[entryPoint Cache<br/>TTL: 60s]
|
|
238
|
+
L4[framework Cache<br/>TTL: 60s]
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
subgraph "Cache Management"
|
|
242
|
+
REG[Cache Registry]
|
|
243
|
+
CLEAR[clearAllCaches]
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
L1 --> REG
|
|
247
|
+
L2 --> REG
|
|
248
|
+
L3 --> REG
|
|
249
|
+
L4 --> REG
|
|
250
|
+
REG --> CLEAR
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
**Cache Characteristics:**
|
|
254
|
+
|
|
255
|
+
- Function-specific TTLs based on volatility
|
|
256
|
+
- Size limits prevent memory issues
|
|
257
|
+
- Skip-cache option for fresh results
|
|
258
|
+
- Global clear for testing
|
|
259
|
+
|
|
260
|
+
## Error Handling
|
|
261
|
+
|
|
262
|
+
```mermaid
|
|
263
|
+
graph LR
|
|
264
|
+
OP[Operation] --> CHECK{Error?}
|
|
265
|
+
CHECK -->|Yes| STRUCT[StructuredError]
|
|
266
|
+
CHECK -->|No| RESULT[Result]
|
|
267
|
+
STRUCT --> CODE[Error Code]
|
|
268
|
+
STRUCT --> CTX[Context Object]
|
|
269
|
+
STRUCT --> MSG[Human Message]
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
**Error Types:**
|
|
273
|
+
|
|
274
|
+
- `FS_NOT_FOUND` - File/directory not found
|
|
275
|
+
- `FS_READ_ERROR` - Read operation failed
|
|
276
|
+
- `FS_WRITE_ERROR` - Write operation failed
|
|
277
|
+
- `FS_PARSE_ERROR` - JSON/config parse failure
|
|
278
|
+
- `CONFIG_NOT_FOUND` - Configuration not found
|
|
279
|
+
- `VALIDATION_ERROR` - Invalid input
|
|
280
|
+
|
|
281
|
+
## Security Considerations
|
|
282
|
+
|
|
283
|
+
### Path Traversal Prevention
|
|
284
|
+
|
|
285
|
+
```typescript
|
|
286
|
+
// VFS normalizes and validates all paths
|
|
287
|
+
tree.read('../../../etc/passwd') // Throws: Path escapes tree root
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### Symlink Security
|
|
291
|
+
|
|
292
|
+
```mermaid
|
|
293
|
+
graph LR
|
|
294
|
+
SYMLINK[Symlink] --> CHECK{Target in root?}
|
|
295
|
+
CHECK -->|Yes| ALLOW[Allow operation]
|
|
296
|
+
CHECK -->|No| DENY[Throw error]
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Secret Sanitization
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
// Logger automatically redacts sensitive keys
|
|
303
|
+
logger.debug('Config loaded', { apiKey: 'secret123' })
|
|
304
|
+
// Output: [scope] Config loaded {"apiKey":"[REDACTED]"}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Sensitive key patterns: `token`, `key`, `password`, `secret`, `credential`, `auth`, `bearer`, `api_key`, `private`, `passphrase`
|
|
308
|
+
|
|
309
|
+
### ReDoS Protection
|
|
310
|
+
|
|
311
|
+
Glob matching uses character-by-character iteration instead of regex to prevent Regular Expression Denial of Service attacks.
|
|
312
|
+
|
|
313
|
+
## Extension Points
|
|
314
|
+
|
|
315
|
+
### Adding a New Framework Detector
|
|
316
|
+
|
|
317
|
+
```typescript
|
|
318
|
+
// tech/frontend/my-framework.ts
|
|
319
|
+
import type { FrameworkDetector } from './types'
|
|
320
|
+
|
|
321
|
+
export const myFrameworkDetector: FrameworkDetector = {
|
|
322
|
+
id: 'my-framework',
|
|
323
|
+
name: 'MyFramework',
|
|
324
|
+
category: 'frontend',
|
|
325
|
+
detect(projectPath, packageJson) {
|
|
326
|
+
// Detection logic
|
|
327
|
+
return {
|
|
328
|
+
id: 'my-framework',
|
|
329
|
+
name: 'MyFramework',
|
|
330
|
+
confidence: 80,
|
|
331
|
+
detectedFrom: [{ type: 'package.json', field: 'dependencies.my-framework' }],
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// Register in tech/frontend/index.ts
|
|
337
|
+
export const frameworkDetectors = [..., myFrameworkDetector]
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### Adding a New CLI Command
|
|
341
|
+
|
|
342
|
+
```typescript
|
|
343
|
+
// cli/commands/my-command.ts
|
|
344
|
+
import type { Command } from '../types'
|
|
345
|
+
|
|
346
|
+
export const myCommandDef: Command = {
|
|
347
|
+
name: 'my-command',
|
|
348
|
+
description: 'Does something useful',
|
|
349
|
+
execute(args, globalOptions) {
|
|
350
|
+
// Command logic
|
|
351
|
+
return { exitCode: 0 }
|
|
352
|
+
},
|
|
353
|
+
getHelp() {
|
|
354
|
+
return 'Usage: project-scope my-command [options]'
|
|
355
|
+
},
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// Register in cli/run.ts
|
|
359
|
+
const commands = { ..., 'my-command': myCommandDef }
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
## Performance Characteristics
|
|
363
|
+
|
|
364
|
+
| Operation | Typical Time | Caching |
|
|
365
|
+
| ----------------------- | ------------ | ------------- |
|
|
366
|
+
| `analyzeProject` (full) | 50-200ms | Per-component |
|
|
367
|
+
| `detectAll` | 20-50ms | 60s TTL |
|
|
368
|
+
| `detectConfigs` | 10-30ms | 30s TTL |
|
|
369
|
+
| `buildDependencyGraph` | 100-500ms | None |
|
|
370
|
+
| `findFiles` | 10-100ms | None |
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
|
+
|
|
5
|
+
## 0.1.0 (2026-03-08)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **lib-project-scope:** complete implementation ([6075fbd](https://github.com/AndrewRedican/hyperfrontend/commit/6075fbd8a8b3b790715d0985612d07a1fb398020))
|
package/FUNDING.md
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Funding & Support
|
|
2
|
+
|
|
3
|
+
Thank you for considering supporting hyperfrontend! Your contributions help maintain and improve this project.
|
|
4
|
+
|
|
5
|
+
## Why Support hyperfrontend?
|
|
6
|
+
|
|
7
|
+
hyperfrontend is an open-source project that provides:
|
|
8
|
+
|
|
9
|
+
- 🔧 Framework-agnostic micro-frontend architecture
|
|
10
|
+
- 📦 Multiple packages and tools for building scalable web applications
|
|
11
|
+
- 📚 Comprehensive documentation and examples
|
|
12
|
+
- 🆓 Free for everyone to use
|
|
13
|
+
|
|
14
|
+
Your support helps:
|
|
15
|
+
|
|
16
|
+
- ⏰ Dedicate more time to development and maintenance
|
|
17
|
+
- 🐛 Fix bugs and address issues faster
|
|
18
|
+
- ✨ Build new features and improvements
|
|
19
|
+
- 📖 Create better documentation and tutorials
|
|
20
|
+
- 🌟 Keep the project sustainable long-term
|
|
21
|
+
|
|
22
|
+
## How to Support
|
|
23
|
+
|
|
24
|
+
### 💖 GitHub Sponsors
|
|
25
|
+
|
|
26
|
+
You can sponsor the project through GitHub Sponsors:
|
|
27
|
+
|
|
28
|
+
**[Sponsor @AndrewRedican on GitHub](https://github.com/sponsors/AndrewRedican)**
|
|
29
|
+
|
|
30
|
+
GitHub Sponsors benefits:
|
|
31
|
+
|
|
32
|
+
- Direct support to the maintainer
|
|
33
|
+
- No platform fees (GitHub covers them)
|
|
34
|
+
- Various sponsorship tiers available
|
|
35
|
+
- Recognition in the project
|
|
36
|
+
|
|
37
|
+
### 🌐 One-time Donations
|
|
38
|
+
|
|
39
|
+
You can also make a one-time contribution:
|
|
40
|
+
|
|
41
|
+
**[Donate via hyperfrontend.dev](https://hyperfrontend.dev/sponsor)**
|
|
42
|
+
|
|
43
|
+
### 🏢 Corporate Sponsorship
|
|
44
|
+
|
|
45
|
+
If your company uses hyperfrontend in production, consider becoming a corporate sponsor:
|
|
46
|
+
|
|
47
|
+
- **Bronze Sponsor** ($100/month) - Logo in README
|
|
48
|
+
- **Silver Sponsor** ($500/month) - Logo in README + website
|
|
49
|
+
- **Gold Sponsor** ($1000/month) - Logo placement + priority support
|
|
50
|
+
- **Platinum Sponsor** ($2500/month) - All benefits + consulting hours
|
|
51
|
+
|
|
52
|
+
Contact: andrew.redican.mejia@gmail.com
|
|
53
|
+
|
|
54
|
+
## Other Ways to Contribute
|
|
55
|
+
|
|
56
|
+
Not everyone can contribute financially, and that's okay! There are many other ways to support:
|
|
57
|
+
|
|
58
|
+
### 💻 Code Contributions
|
|
59
|
+
|
|
60
|
+
- Submit bug fixes
|
|
61
|
+
- Add new features
|
|
62
|
+
- Improve documentation
|
|
63
|
+
- Write tests
|
|
64
|
+
|
|
65
|
+
See our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
66
|
+
|
|
67
|
+
### 📣 Spread the Word
|
|
68
|
+
|
|
69
|
+
- ⭐ Star the repository on GitHub
|
|
70
|
+
- 🐦 Share on social media
|
|
71
|
+
- 📝 Write blog posts or tutorials
|
|
72
|
+
- 🎤 Give talks about hyperfrontend at meetups/conferences
|
|
73
|
+
|
|
74
|
+
### 🐛 Bug Reports
|
|
75
|
+
|
|
76
|
+
- Report issues you encounter
|
|
77
|
+
- Help triage existing issues
|
|
78
|
+
- Provide detailed reproduction steps
|
|
79
|
+
|
|
80
|
+
### 📚 Documentation
|
|
81
|
+
|
|
82
|
+
- Improve existing docs
|
|
83
|
+
- Write tutorials and guides
|
|
84
|
+
- Translate documentation
|
|
85
|
+
- Create video tutorials
|
|
86
|
+
|
|
87
|
+
### 💬 Community Support
|
|
88
|
+
|
|
89
|
+
- Answer questions in issues
|
|
90
|
+
- Help other users on discussions
|
|
91
|
+
- Share your use cases and examples
|
|
92
|
+
|
|
93
|
+
## Current Sponsors
|
|
94
|
+
|
|
95
|
+
Thank you to all our sponsors and backers! 🙏
|
|
96
|
+
|
|
97
|
+
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
98
|
+
|
|
99
|
+
[](#contributors)
|
|
100
|
+
|
|
101
|
+
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
102
|
+
|
|
103
|
+
### Corporate Sponsors
|
|
104
|
+
|
|
105
|
+
<!-- Corporate sponsors will be listed here -->
|
|
106
|
+
|
|
107
|
+
_Interested in corporate sponsorship? [Contact us](mailto:andrew.redican.mejia@gmail.com)_
|
|
108
|
+
|
|
109
|
+
### Individual Sponsors
|
|
110
|
+
|
|
111
|
+
<!-- Sponsors will be automatically listed through GitHub Sponsors -->
|
|
112
|
+
|
|
113
|
+
_Become the first sponsor!_ ❤️
|
|
114
|
+
|
|
115
|
+
## Recognition
|
|
116
|
+
|
|
117
|
+
All sponsors and contributors are recognized in:
|
|
118
|
+
|
|
119
|
+
- Project README
|
|
120
|
+
- Project website (coming soon)
|
|
121
|
+
- Release notes (for significant contributions)
|
|
122
|
+
|
|
123
|
+
## Transparency
|
|
124
|
+
|
|
125
|
+
All sponsorship funds are used for:
|
|
126
|
+
|
|
127
|
+
- Development time and effort
|
|
128
|
+
- Infrastructure costs (hosting, CI/CD, domains)
|
|
129
|
+
- Development tools and services
|
|
130
|
+
- Community building and events
|
|
131
|
+
|
|
132
|
+
## Questions?
|
|
133
|
+
|
|
134
|
+
If you have questions about sponsorship or funding, please contact:
|
|
135
|
+
|
|
136
|
+
**Email**: andrew.redican.mejia@gmail.com
|
|
137
|
+
**GitHub**: [@AndrewRedican](https://github.com/AndrewRedican)
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
Thank you for your support! Every contribution, whether code, documentation, or financial, helps make hyperfrontend better for everyone. 🚀
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Andrew Redican
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|