@agentuity/cli 2.0.11 → 3.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cmd/ai/prompt/index.d.ts.map +1 -1
- package/dist/cmd/ai/prompt/index.js +2 -7
- package/dist/cmd/ai/prompt/index.js.map +1 -1
- package/dist/cmd/build/adapters/generic.d.ts +29 -0
- package/dist/cmd/build/adapters/generic.d.ts.map +1 -0
- package/dist/cmd/build/adapters/generic.js +190 -0
- package/dist/cmd/build/adapters/generic.js.map +1 -0
- package/dist/cmd/build/adapters/index.d.ts +15 -0
- package/dist/cmd/build/adapters/index.d.ts.map +1 -0
- package/dist/cmd/build/adapters/index.js +24 -0
- package/dist/cmd/build/adapters/index.js.map +1 -0
- package/dist/cmd/build/adapters/nextjs.d.ts +11 -0
- package/dist/cmd/build/adapters/nextjs.d.ts.map +1 -0
- package/dist/cmd/build/adapters/nextjs.js +118 -0
- package/dist/cmd/build/adapters/nextjs.js.map +1 -0
- package/dist/cmd/build/adapters/static-server.d.ts +23 -0
- package/dist/cmd/build/adapters/static-server.d.ts.map +1 -0
- package/dist/cmd/build/adapters/static-server.js +137 -0
- package/dist/cmd/build/adapters/static-server.js.map +1 -0
- package/dist/cmd/build/adapters/types.d.ts +71 -0
- package/dist/cmd/build/adapters/types.d.ts.map +1 -0
- package/dist/cmd/build/adapters/types.js +8 -0
- package/dist/cmd/build/adapters/types.js.map +1 -0
- package/dist/cmd/build/detect/engine.d.ts +24 -0
- package/dist/cmd/build/detect/engine.d.ts.map +1 -0
- package/dist/cmd/build/detect/engine.js +91 -0
- package/dist/cmd/build/detect/engine.js.map +1 -0
- package/dist/cmd/build/detect/frameworks.d.ts +66 -0
- package/dist/cmd/build/detect/frameworks.d.ts.map +1 -0
- package/dist/cmd/build/detect/frameworks.js +278 -0
- package/dist/cmd/build/detect/frameworks.js.map +1 -0
- package/dist/cmd/build/detect/generic.d.ts +13 -0
- package/dist/cmd/build/detect/generic.d.ts.map +1 -0
- package/dist/cmd/build/detect/generic.js +62 -0
- package/dist/cmd/build/detect/generic.js.map +1 -0
- package/dist/cmd/build/detect/index.d.ts +27 -0
- package/dist/cmd/build/detect/index.d.ts.map +1 -0
- package/dist/cmd/build/detect/index.js +76 -0
- package/dist/cmd/build/detect/index.js.map +1 -0
- package/dist/cmd/build/detect/types.d.ts +91 -0
- package/dist/cmd/build/detect/types.d.ts.map +1 -0
- package/dist/cmd/build/detect/types.js +9 -0
- package/dist/cmd/build/detect/types.js.map +1 -0
- package/dist/cmd/build/detect/util.d.ts +41 -0
- package/dist/cmd/build/detect/util.d.ts.map +1 -0
- package/dist/cmd/build/detect/util.js +101 -0
- package/dist/cmd/build/detect/util.js.map +1 -0
- package/dist/cmd/build/index.d.ts.map +1 -1
- package/dist/cmd/build/index.js +49 -22
- package/dist/cmd/build/index.js.map +1 -1
- package/dist/cmd/build/package/index.d.ts +30 -0
- package/dist/cmd/build/package/index.d.ts.map +1 -0
- package/dist/cmd/build/package/index.js +39 -0
- package/dist/cmd/build/package/index.js.map +1 -0
- package/dist/cmd/build/package/launch.d.ts +56 -0
- package/dist/cmd/build/package/launch.d.ts.map +1 -0
- package/dist/cmd/build/package/launch.js +56 -0
- package/dist/cmd/build/package/launch.js.map +1 -0
- package/dist/cmd/build/typecheck.d.ts.map +1 -1
- package/dist/cmd/build/typecheck.js +8 -0
- package/dist/cmd/build/typecheck.js.map +1 -1
- package/dist/cmd/cloud/deploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy.js +63 -13
- package/dist/cmd/cloud/deploy.js.map +1 -1
- package/dist/cmd/coder/create.js +7 -7
- package/dist/cmd/coder/create.js.map +1 -1
- package/dist/cmd/coder/update.js +8 -8
- package/dist/cmd/coder/update.js.map +1 -1
- package/dist/cmd/coder/workspace/create.js +9 -9
- package/dist/cmd/coder/workspace/create.js.map +1 -1
- package/dist/cmd/dev/index.d.ts +9 -0
- package/dist/cmd/dev/index.d.ts.map +1 -1
- package/dist/cmd/dev/index.js +127 -923
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/project/auth/shared.d.ts.map +1 -1
- package/dist/cmd/project/auth/shared.js +14 -38
- package/dist/cmd/project/auth/shared.js.map +1 -1
- package/dist/cmd/project/create.d.ts.map +1 -1
- package/dist/cmd/project/create.js +12 -19
- package/dist/cmd/project/create.js.map +1 -1
- package/dist/cmd/project/frameworks-ai-examples.d.ts +15 -0
- package/dist/cmd/project/frameworks-ai-examples.d.ts.map +1 -0
- package/dist/cmd/project/frameworks-ai-examples.js +160 -0
- package/dist/cmd/project/frameworks-ai-examples.js.map +1 -0
- package/dist/cmd/project/frameworks-landing-pages.d.ts +17 -0
- package/dist/cmd/project/frameworks-landing-pages.d.ts.map +1 -0
- package/dist/cmd/project/frameworks-landing-pages.js +242 -0
- package/dist/cmd/project/frameworks-landing-pages.js.map +1 -0
- package/dist/cmd/project/frameworks.d.ts +58 -0
- package/dist/cmd/project/frameworks.d.ts.map +1 -0
- package/dist/cmd/project/frameworks.js +152 -0
- package/dist/cmd/project/frameworks.js.map +1 -0
- package/dist/cmd/project/reconcile.d.ts.map +1 -1
- package/dist/cmd/project/reconcile.js +10 -23
- package/dist/cmd/project/reconcile.js.map +1 -1
- package/dist/cmd/project/remote-import.js +1 -1
- package/dist/cmd/project/scaffold.d.ts +58 -0
- package/dist/cmd/project/scaffold.d.ts.map +1 -0
- package/dist/cmd/project/scaffold.js +223 -0
- package/dist/cmd/project/scaffold.js.map +1 -0
- package/dist/cmd/project/template-flow.d.ts +8 -4
- package/dist/cmd/project/template-flow.d.ts.map +1 -1
- package/dist/cmd/project/template-flow.js +93 -144
- package/dist/cmd/project/template-flow.js.map +1 -1
- package/dist/deploy-metadata.d.ts +49 -0
- package/dist/deploy-metadata.d.ts.map +1 -0
- package/dist/deploy-metadata.js +183 -0
- package/dist/deploy-metadata.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +24 -30
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +13 -8
- package/src/cmd/ai/prompt/index.ts +2 -7
- package/src/cmd/build/adapters/generic.ts +239 -0
- package/src/cmd/build/adapters/index.ts +30 -0
- package/src/cmd/build/adapters/nextjs.ts +146 -0
- package/src/cmd/build/adapters/static-server.ts +143 -0
- package/src/cmd/build/adapters/types.ts +93 -0
- package/src/cmd/build/detect/engine.ts +111 -0
- package/src/cmd/build/detect/frameworks.ts +335 -0
- package/src/cmd/build/detect/generic.ts +71 -0
- package/src/cmd/build/detect/index.ts +122 -0
- package/src/cmd/build/detect/types.ts +109 -0
- package/src/cmd/build/detect/util.ts +104 -0
- package/src/cmd/build/index.ts +64 -24
- package/src/cmd/build/package/index.ts +66 -0
- package/src/cmd/build/package/launch.ts +104 -0
- package/src/cmd/build/typecheck.ts +9 -0
- package/src/cmd/cloud/deploy.ts +86 -13
- package/src/cmd/coder/create.ts +8 -8
- package/src/cmd/coder/update.ts +7 -7
- package/src/cmd/coder/workspace/create.ts +10 -10
- package/src/cmd/dev/index.ts +155 -1059
- package/src/cmd/project/auth/shared.ts +14 -39
- package/src/cmd/project/create.ts +14 -19
- package/src/cmd/project/frameworks-ai-examples.ts +166 -0
- package/src/cmd/project/frameworks-landing-pages.ts +267 -0
- package/src/cmd/project/frameworks.ts +223 -0
- package/src/cmd/project/reconcile.ts +10 -22
- package/src/cmd/project/remote-import.ts +1 -1
- package/src/cmd/project/scaffold.ts +300 -0
- package/src/cmd/project/template-flow.ts +102 -156
- package/src/deploy-metadata.ts +253 -0
- package/src/index.ts +0 -2
- package/src/types.ts +0 -31
- package/dist/agents-docs.d.ts +0 -23
- package/dist/agents-docs.d.ts.map +0 -1
- package/dist/agents-docs.js +0 -56
- package/dist/agents-docs.js.map +0 -1
- package/dist/cmd/ai/prompt/agent.d.ts +0 -10
- package/dist/cmd/ai/prompt/agent.d.ts.map +0 -1
- package/dist/cmd/ai/prompt/agent.js +0 -28
- package/dist/cmd/ai/prompt/agent.js.map +0 -1
- package/dist/cmd/build/app-router-detector.d.ts +0 -39
- package/dist/cmd/build/app-router-detector.d.ts.map +0 -1
- package/dist/cmd/build/app-router-detector.js +0 -229
- package/dist/cmd/build/app-router-detector.js.map +0 -1
- package/dist/cmd/build/format-schema.d.ts +0 -6
- package/dist/cmd/build/format-schema.d.ts.map +0 -1
- package/dist/cmd/build/format-schema.js +0 -60
- package/dist/cmd/build/format-schema.js.map +0 -1
- package/dist/cmd/build/vite/agent-discovery.d.ts +0 -37
- package/dist/cmd/build/vite/agent-discovery.d.ts.map +0 -1
- package/dist/cmd/build/vite/agent-discovery.js +0 -263
- package/dist/cmd/build/vite/agent-discovery.js.map +0 -1
- package/dist/cmd/build/vite/beacon-plugin.d.ts +0 -19
- package/dist/cmd/build/vite/beacon-plugin.d.ts.map +0 -1
- package/dist/cmd/build/vite/beacon-plugin.js +0 -137
- package/dist/cmd/build/vite/beacon-plugin.js.map +0 -1
- package/dist/cmd/build/vite/browser-env-plugin.d.ts +0 -9
- package/dist/cmd/build/vite/browser-env-plugin.d.ts.map +0 -1
- package/dist/cmd/build/vite/browser-env-plugin.js +0 -28
- package/dist/cmd/build/vite/browser-env-plugin.js.map +0 -1
- package/dist/cmd/build/vite/bun-dev-server.d.ts +0 -67
- package/dist/cmd/build/vite/bun-dev-server.d.ts.map +0 -1
- package/dist/cmd/build/vite/bun-dev-server.js +0 -340
- package/dist/cmd/build/vite/bun-dev-server.js.map +0 -1
- package/dist/cmd/build/vite/bundle-files.d.ts +0 -12
- package/dist/cmd/build/vite/bundle-files.d.ts.map +0 -1
- package/dist/cmd/build/vite/bundle-files.js +0 -107
- package/dist/cmd/build/vite/bundle-files.js.map +0 -1
- package/dist/cmd/build/vite/config-loader.d.ts +0 -29
- package/dist/cmd/build/vite/config-loader.d.ts.map +0 -1
- package/dist/cmd/build/vite/config-loader.js +0 -57
- package/dist/cmd/build/vite/config-loader.js.map +0 -1
- package/dist/cmd/build/vite/db-rewrite.d.ts +0 -50
- package/dist/cmd/build/vite/db-rewrite.d.ts.map +0 -1
- package/dist/cmd/build/vite/db-rewrite.js +0 -169
- package/dist/cmd/build/vite/db-rewrite.js.map +0 -1
- package/dist/cmd/build/vite/docs-generator.d.ts +0 -13
- package/dist/cmd/build/vite/docs-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/docs-generator.js +0 -97
- package/dist/cmd/build/vite/docs-generator.js.map +0 -1
- package/dist/cmd/build/vite/env-types-generator.d.ts +0 -26
- package/dist/cmd/build/vite/env-types-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/env-types-generator.js +0 -110
- package/dist/cmd/build/vite/env-types-generator.js.map +0 -1
- package/dist/cmd/build/vite/index.d.ts +0 -3
- package/dist/cmd/build/vite/index.d.ts.map +0 -1
- package/dist/cmd/build/vite/index.js +0 -4
- package/dist/cmd/build/vite/index.js.map +0 -1
- package/dist/cmd/build/vite/lifecycle-generator.d.ts +0 -19
- package/dist/cmd/build/vite/lifecycle-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/lifecycle-generator.js +0 -328
- package/dist/cmd/build/vite/lifecycle-generator.js.map +0 -1
- package/dist/cmd/build/vite/metadata-generator.d.ts +0 -36
- package/dist/cmd/build/vite/metadata-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/metadata-generator.js +0 -575
- package/dist/cmd/build/vite/metadata-generator.js.map +0 -1
- package/dist/cmd/build/vite/prompt-generator.d.ts +0 -23
- package/dist/cmd/build/vite/prompt-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/prompt-generator.js +0 -123
- package/dist/cmd/build/vite/prompt-generator.js.map +0 -1
- package/dist/cmd/build/vite/public-asset-path-plugin.d.ts +0 -45
- package/dist/cmd/build/vite/public-asset-path-plugin.d.ts.map +0 -1
- package/dist/cmd/build/vite/public-asset-path-plugin.js +0 -166
- package/dist/cmd/build/vite/public-asset-path-plugin.js.map +0 -1
- package/dist/cmd/build/vite/route-discovery.d.ts +0 -64
- package/dist/cmd/build/vite/route-discovery.d.ts.map +0 -1
- package/dist/cmd/build/vite/route-discovery.js +0 -187
- package/dist/cmd/build/vite/route-discovery.js.map +0 -1
- package/dist/cmd/build/vite/server-bundler.d.ts +0 -20
- package/dist/cmd/build/vite/server-bundler.d.ts.map +0 -1
- package/dist/cmd/build/vite/server-bundler.js +0 -388
- package/dist/cmd/build/vite/server-bundler.js.map +0 -1
- package/dist/cmd/build/vite/static-renderer.d.ts +0 -26
- package/dist/cmd/build/vite/static-renderer.d.ts.map +0 -1
- package/dist/cmd/build/vite/static-renderer.js +0 -188
- package/dist/cmd/build/vite/static-renderer.js.map +0 -1
- package/dist/cmd/build/vite/tailwind-source-plugin.d.ts +0 -15
- package/dist/cmd/build/vite/tailwind-source-plugin.d.ts.map +0 -1
- package/dist/cmd/build/vite/tailwind-source-plugin.js +0 -61
- package/dist/cmd/build/vite/tailwind-source-plugin.js.map +0 -1
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts +0 -24
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +0 -1
- package/dist/cmd/build/vite/vite-asset-server-config.js +0 -285
- package/dist/cmd/build/vite/vite-asset-server-config.js.map +0 -1
- package/dist/cmd/build/vite/vite-asset-server.d.ts +0 -30
- package/dist/cmd/build/vite/vite-asset-server.d.ts.map +0 -1
- package/dist/cmd/build/vite/vite-asset-server.js +0 -109
- package/dist/cmd/build/vite/vite-asset-server.js.map +0 -1
- package/dist/cmd/build/vite/vite-builder.d.ts +0 -59
- package/dist/cmd/build/vite/vite-builder.d.ts.map +0 -1
- package/dist/cmd/build/vite/vite-builder.js +0 -401
- package/dist/cmd/build/vite/vite-builder.js.map +0 -1
- package/dist/cmd/build/vite/workbench-generator.d.ts +0 -10
- package/dist/cmd/build/vite/workbench-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/workbench-generator.js +0 -135
- package/dist/cmd/build/vite/workbench-generator.js.map +0 -1
- package/dist/cmd/build/vite/ws-proxy.d.ts +0 -53
- package/dist/cmd/build/vite/ws-proxy.d.ts.map +0 -1
- package/dist/cmd/build/vite/ws-proxy.js +0 -95
- package/dist/cmd/build/vite/ws-proxy.js.map +0 -1
- package/dist/cmd/build/vite-bundler.d.ts +0 -29
- package/dist/cmd/build/vite-bundler.d.ts.map +0 -1
- package/dist/cmd/build/vite-bundler.js +0 -93
- package/dist/cmd/build/vite-bundler.js.map +0 -1
- package/dist/cmd/dev/agents.d.ts +0 -2
- package/dist/cmd/dev/agents.d.ts.map +0 -1
- package/dist/cmd/dev/agents.js +0 -123
- package/dist/cmd/dev/agents.js.map +0 -1
- package/dist/cmd/dev/api.d.ts +0 -20
- package/dist/cmd/dev/api.d.ts.map +0 -1
- package/dist/cmd/dev/api.js +0 -42
- package/dist/cmd/dev/api.js.map +0 -1
- package/dist/cmd/dev/dev-lock.d.ts +0 -62
- package/dist/cmd/dev/dev-lock.d.ts.map +0 -1
- package/dist/cmd/dev/dev-lock.js +0 -250
- package/dist/cmd/dev/dev-lock.js.map +0 -1
- package/dist/cmd/dev/download.d.ts +0 -11
- package/dist/cmd/dev/download.d.ts.map +0 -1
- package/dist/cmd/dev/download.js +0 -94
- package/dist/cmd/dev/download.js.map +0 -1
- package/dist/cmd/dev/file-watcher.d.ts +0 -24
- package/dist/cmd/dev/file-watcher.d.ts.map +0 -1
- package/dist/cmd/dev/file-watcher.js +0 -349
- package/dist/cmd/dev/file-watcher.js.map +0 -1
- package/dist/cmd/dev/process-manager.d.ts +0 -104
- package/dist/cmd/dev/process-manager.d.ts.map +0 -1
- package/dist/cmd/dev/process-manager.js +0 -204
- package/dist/cmd/dev/process-manager.js.map +0 -1
- package/dist/cmd/dev/sync.d.ts +0 -12
- package/dist/cmd/dev/sync.d.ts.map +0 -1
- package/dist/cmd/dev/sync.js +0 -227
- package/dist/cmd/dev/sync.js.map +0 -1
- package/dist/cmd/dev/templates.d.ts +0 -3
- package/dist/cmd/dev/templates.d.ts.map +0 -1
- package/dist/cmd/dev/templates.js +0 -58
- package/dist/cmd/dev/templates.js.map +0 -1
- package/dist/cmd/project/download.d.ts +0 -35
- package/dist/cmd/project/download.d.ts.map +0 -1
- package/dist/cmd/project/download.js +0 -403
- package/dist/cmd/project/download.js.map +0 -1
- package/dist/cmd/project/templates.d.ts +0 -9
- package/dist/cmd/project/templates.d.ts.map +0 -1
- package/dist/cmd/project/templates.js +0 -34
- package/dist/cmd/project/templates.js.map +0 -1
- package/src/agents-docs.ts +0 -86
- package/src/cmd/ai/prompt/agent.md +0 -305
- package/src/cmd/ai/prompt/agent.ts +0 -31
- package/src/cmd/build/app-router-detector.ts +0 -320
- package/src/cmd/build/format-schema.ts +0 -66
- package/src/cmd/build/vite/agent-discovery.ts +0 -380
- package/src/cmd/build/vite/beacon-plugin.ts +0 -164
- package/src/cmd/build/vite/browser-env-plugin.ts +0 -34
- package/src/cmd/build/vite/bun-dev-server.ts +0 -458
- package/src/cmd/build/vite/bundle-files.ts +0 -135
- package/src/cmd/build/vite/config-loader.ts +0 -76
- package/src/cmd/build/vite/db-rewrite.ts +0 -189
- package/src/cmd/build/vite/docs-generator.ts +0 -103
- package/src/cmd/build/vite/env-types-generator.ts +0 -145
- package/src/cmd/build/vite/index.ts +0 -3
- package/src/cmd/build/vite/lifecycle-generator.ts +0 -381
- package/src/cmd/build/vite/metadata-generator.ts +0 -713
- package/src/cmd/build/vite/prompt-generator.ts +0 -169
- package/src/cmd/build/vite/public-asset-path-plugin.ts +0 -209
- package/src/cmd/build/vite/route-discovery.ts +0 -271
- package/src/cmd/build/vite/server-bundler.ts +0 -481
- package/src/cmd/build/vite/static-renderer.ts +0 -239
- package/src/cmd/build/vite/tailwind-source-plugin.ts +0 -73
- package/src/cmd/build/vite/vite-asset-server-config.ts +0 -349
- package/src/cmd/build/vite/vite-asset-server.ts +0 -154
- package/src/cmd/build/vite/vite-builder.ts +0 -503
- package/src/cmd/build/vite/workbench-generator.ts +0 -152
- package/src/cmd/build/vite/ws-proxy.ts +0 -126
- package/src/cmd/build/vite-bundler.ts +0 -137
- package/src/cmd/dev/agents.ts +0 -140
- package/src/cmd/dev/api.ts +0 -65
- package/src/cmd/dev/dev-lock.ts +0 -332
- package/src/cmd/dev/download.ts +0 -117
- package/src/cmd/dev/file-watcher.ts +0 -423
- package/src/cmd/dev/process-manager.ts +0 -261
- package/src/cmd/dev/sync.ts +0 -411
- package/src/cmd/dev/templates.ts +0 -66
- package/src/cmd/project/download.ts +0 -505
- package/src/cmd/project/templates.ts +0 -56
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build adapter types.
|
|
3
|
+
*
|
|
4
|
+
* Adapters know how to build a specific framework and package the result.
|
|
5
|
+
* They receive a DetectedFramework and produce a BuildResult.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { DetectedFramework, PackageJsonData } from '../detect/types';
|
|
9
|
+
import type { Logger, DeployOptions } from '../../../types';
|
|
10
|
+
import type { BuildReportCollector } from '../../../build-report';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Result of a successful build.
|
|
14
|
+
*/
|
|
15
|
+
export interface BuildResult {
|
|
16
|
+
/** Absolute path to the build output directory */
|
|
17
|
+
outputDir: string;
|
|
18
|
+
|
|
19
|
+
/** The start command to run the application */
|
|
20
|
+
startCommand?: string;
|
|
21
|
+
|
|
22
|
+
/** Server entrypoint file (relative to outputDir) */
|
|
23
|
+
serverEntry?: string;
|
|
24
|
+
|
|
25
|
+
/** Static/CDN assets directory (absolute path), for CDN upload enumeration */
|
|
26
|
+
staticDir?: string;
|
|
27
|
+
|
|
28
|
+
/** Port the app listens on */
|
|
29
|
+
port?: number;
|
|
30
|
+
|
|
31
|
+
/** Build duration in milliseconds */
|
|
32
|
+
duration: number;
|
|
33
|
+
|
|
34
|
+
/** Human-readable build log lines */
|
|
35
|
+
logs: string[];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Options passed to a build adapter.
|
|
40
|
+
*/
|
|
41
|
+
export interface BuildAdapterOptions {
|
|
42
|
+
/** Absolute path to the project root */
|
|
43
|
+
projectDir: string;
|
|
44
|
+
|
|
45
|
+
/** Detected framework info */
|
|
46
|
+
framework: DetectedFramework;
|
|
47
|
+
|
|
48
|
+
/** Parsed package.json */
|
|
49
|
+
packageJson: PackageJsonData;
|
|
50
|
+
|
|
51
|
+
/** Absolute path to write build output */
|
|
52
|
+
outputDir: string;
|
|
53
|
+
|
|
54
|
+
/** Logger instance */
|
|
55
|
+
logger: Logger;
|
|
56
|
+
|
|
57
|
+
/** Build report collector for structured error reporting */
|
|
58
|
+
collector?: BuildReportCollector;
|
|
59
|
+
|
|
60
|
+
/** Development mode (less minification, inline sourcemaps) */
|
|
61
|
+
dev?: boolean;
|
|
62
|
+
|
|
63
|
+
/** Project ID (for Agentuity metadata) */
|
|
64
|
+
projectId?: string;
|
|
65
|
+
|
|
66
|
+
/** Org ID (for Agentuity metadata) */
|
|
67
|
+
orgId?: string;
|
|
68
|
+
|
|
69
|
+
/** Region (for Agentuity metadata) */
|
|
70
|
+
region?: string;
|
|
71
|
+
|
|
72
|
+
/** Deployment ID (for Agentuity metadata) */
|
|
73
|
+
deploymentId?: string;
|
|
74
|
+
|
|
75
|
+
/** Deployment options from CLI (git info, trigger, etc.) */
|
|
76
|
+
deploymentOptions?: DeployOptions;
|
|
77
|
+
|
|
78
|
+
/** Deployment config from agentuity.json (resources, mode, dependencies, domains) */
|
|
79
|
+
deploymentConfig?: Record<string, unknown>;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* A build adapter that knows how to build a specific framework.
|
|
84
|
+
*/
|
|
85
|
+
export interface BuildAdapter {
|
|
86
|
+
/** Framework this adapter handles */
|
|
87
|
+
name: string;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Run the build for this framework.
|
|
91
|
+
*/
|
|
92
|
+
build(options: BuildAdapterOptions): Promise<BuildResult>;
|
|
93
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework detection engine.
|
|
3
|
+
*
|
|
4
|
+
* Evaluates detector rules from the framework database against a real project
|
|
5
|
+
* directory. Handles three rule types:
|
|
6
|
+
* - matchPackage: check if package exists in dependencies/devDependencies
|
|
7
|
+
* - path: check if a file exists at the given path
|
|
8
|
+
* - path + matchContent: check if a file exists AND its content matches a regex
|
|
9
|
+
*
|
|
10
|
+
* The `every` array requires ALL rules to match.
|
|
11
|
+
* The `some` array requires at least ONE rule to match.
|
|
12
|
+
* If both are present, both conditions must be satisfied.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import type { DetectorRule, FrameworkDefinition } from './frameworks';
|
|
17
|
+
import type { PackageJsonData } from './types';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Check if a single detector rule matches the project.
|
|
21
|
+
*/
|
|
22
|
+
async function matchRule(
|
|
23
|
+
rule: DetectorRule,
|
|
24
|
+
projectDir: string,
|
|
25
|
+
pkg: PackageJsonData
|
|
26
|
+
): Promise<boolean> {
|
|
27
|
+
// Package match: check dependencies and devDependencies
|
|
28
|
+
if (rule.matchPackage) {
|
|
29
|
+
const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
30
|
+
return rule.matchPackage in allDeps;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// File path match (with optional content matching)
|
|
34
|
+
if (rule.path) {
|
|
35
|
+
const filePath = join(projectDir, rule.path);
|
|
36
|
+
const file = Bun.file(filePath);
|
|
37
|
+
if (!(await file.exists())) return false;
|
|
38
|
+
|
|
39
|
+
// If matchContent is specified, check file content against regex
|
|
40
|
+
if (rule.matchContent) {
|
|
41
|
+
try {
|
|
42
|
+
const content = await file.text();
|
|
43
|
+
return new RegExp(rule.matchContent).test(content);
|
|
44
|
+
} catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// File exists, no content check needed
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Check if a framework definition matches the project.
|
|
58
|
+
*/
|
|
59
|
+
async function matchFramework(
|
|
60
|
+
fw: FrameworkDefinition,
|
|
61
|
+
projectDir: string,
|
|
62
|
+
pkg: PackageJsonData
|
|
63
|
+
): Promise<boolean> {
|
|
64
|
+
const { detectors } = fw;
|
|
65
|
+
if (!detectors) return false;
|
|
66
|
+
|
|
67
|
+
// Check 'every' rules: ALL must match
|
|
68
|
+
if (detectors.every && detectors.every.length > 0) {
|
|
69
|
+
for (const rule of detectors.every) {
|
|
70
|
+
if (!(await matchRule(rule, projectDir, pkg))) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Check 'some' rules: at least ONE must match
|
|
77
|
+
if (detectors.some && detectors.some.length > 0) {
|
|
78
|
+
let anyMatch = false;
|
|
79
|
+
for (const rule of detectors.some) {
|
|
80
|
+
if (await matchRule(rule, projectDir, pkg)) {
|
|
81
|
+
anyMatch = true;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (!anyMatch) return false;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// If we have 'every' rules and they all matched (and 'some' either matched or wasn't present), pass
|
|
89
|
+
// If we only have 'some' rules and one matched, pass
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Run detection against the framework database.
|
|
95
|
+
* Returns the first matching framework definition, or null.
|
|
96
|
+
*
|
|
97
|
+
* The framework list is evaluated in order — more specific frameworks
|
|
98
|
+
* should be listed before generic ones.
|
|
99
|
+
*/
|
|
100
|
+
export async function detectFromDatabase(
|
|
101
|
+
projectDir: string,
|
|
102
|
+
pkg: PackageJsonData,
|
|
103
|
+
frameworkList: FrameworkDefinition[]
|
|
104
|
+
): Promise<FrameworkDefinition | null> {
|
|
105
|
+
for (const fw of frameworkList) {
|
|
106
|
+
if (await matchFramework(fw, projectDir, pkg)) {
|
|
107
|
+
return fw;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework detection database.
|
|
3
|
+
*
|
|
4
|
+
* Package detection rules (which npm packages and config files identify each
|
|
5
|
+
* framework) were informed by the @vercel/frameworks package (Apache-2.0,
|
|
6
|
+
* Copyright 2017 Vercel Inc, github.com/vercel/vercel/tree/main/packages/frameworks).
|
|
7
|
+
*
|
|
8
|
+
* All Vercel-specific properties (logos, CDN URLs, runtime config, routing
|
|
9
|
+
* rules, deploy targets) have been stripped. Only generic framework facts
|
|
10
|
+
* remain: package names, config filenames, default build commands, and output
|
|
11
|
+
* directories as documented by each framework's own docs.
|
|
12
|
+
*
|
|
13
|
+
* Framework entries are ordered by specificity — more specific frameworks
|
|
14
|
+
* (e.g., SvelteKit) should be listed before generic ones (e.g., Vite).
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
// ─── Types ───────────────────────────────────────────────────────────────────
|
|
18
|
+
|
|
19
|
+
export interface DetectorRule {
|
|
20
|
+
/** Match a package in dependencies or devDependencies */
|
|
21
|
+
matchPackage?: string;
|
|
22
|
+
/** Match a file path (relative to project root) */
|
|
23
|
+
path?: string;
|
|
24
|
+
/** Regex pattern to match against file content (requires `path`) */
|
|
25
|
+
matchContent?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface FrameworkDefinition {
|
|
29
|
+
/** Human-readable name */
|
|
30
|
+
name: string;
|
|
31
|
+
/** Unique slug identifier */
|
|
32
|
+
slug: string;
|
|
33
|
+
/** Default build command (null = no build step) */
|
|
34
|
+
buildCommand: string | null;
|
|
35
|
+
/** Default output directory for static assets */
|
|
36
|
+
outputDirectory: string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Static/CDN asset directory, relative to the project root.
|
|
39
|
+
*
|
|
40
|
+
* Points to the directory containing files suitable for CDN upload
|
|
41
|
+
* (JS bundles, CSS, images, fonts, etc.) after the build runs.
|
|
42
|
+
*
|
|
43
|
+
* - `null` means the entire outputDirectory IS the static output
|
|
44
|
+
* (pure static-site generators, SPAs) — resolved to outputDirectory.
|
|
45
|
+
* - A string path (e.g., `.next/static`, `.output/public`) is resolved
|
|
46
|
+
* relative to the project root, since some frameworks put static
|
|
47
|
+
* assets outside their main output directory.
|
|
48
|
+
* - `undefined` (omitted) means no known static asset directory.
|
|
49
|
+
*/
|
|
50
|
+
staticDir?: string | null;
|
|
51
|
+
/** Environment variable prefix for browser-inlined values */
|
|
52
|
+
envPrefix?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Detection rules.
|
|
55
|
+
* - `every`: ALL must match for the framework to be detected.
|
|
56
|
+
* - `some`: at least ONE must match (in addition to all `every` rules).
|
|
57
|
+
*/
|
|
58
|
+
detectors: {
|
|
59
|
+
every?: DetectorRule[];
|
|
60
|
+
some?: DetectorRule[];
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// ─── Framework Database ──────────────────────────────────────────────────────
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* JS/TS framework definitions for detection.
|
|
68
|
+
*
|
|
69
|
+
* Order matters — first match wins. More specific frameworks come first,
|
|
70
|
+
* generic catch-alls (Vite, Parcel) come last.
|
|
71
|
+
*/
|
|
72
|
+
export const frameworkDefinitions: FrameworkDefinition[] = [
|
|
73
|
+
// ── Meta-frameworks (most specific, check first) ──
|
|
74
|
+
|
|
75
|
+
{
|
|
76
|
+
name: 'Next.js',
|
|
77
|
+
slug: 'nextjs',
|
|
78
|
+
buildCommand: 'next build',
|
|
79
|
+
outputDirectory: null, // Dynamic — reads from next.config
|
|
80
|
+
staticDir: '.next/static', // Relative to project root (adapter handles standalone copy)
|
|
81
|
+
envPrefix: 'NEXT_PUBLIC_',
|
|
82
|
+
detectors: {
|
|
83
|
+
every: [{ matchPackage: 'next' }],
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'Nuxt',
|
|
88
|
+
slug: 'nuxt',
|
|
89
|
+
buildCommand: 'nuxt build',
|
|
90
|
+
outputDirectory: 'dist',
|
|
91
|
+
staticDir: '.output/public', // Nitro output; static assets served from here
|
|
92
|
+
envPrefix: 'NUXT_ENV_',
|
|
93
|
+
detectors: {
|
|
94
|
+
some: [
|
|
95
|
+
{ matchPackage: 'nuxt' },
|
|
96
|
+
{ matchPackage: 'nuxt3' },
|
|
97
|
+
{ matchPackage: 'nuxt-edge' },
|
|
98
|
+
{ matchPackage: 'nuxt-nightly' },
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'Remix',
|
|
104
|
+
slug: 'remix',
|
|
105
|
+
buildCommand: 'remix build',
|
|
106
|
+
outputDirectory: 'public',
|
|
107
|
+
staticDir: 'public/build', // Built browser bundles
|
|
108
|
+
detectors: {
|
|
109
|
+
some: [
|
|
110
|
+
{ matchPackage: '@remix-run/dev' },
|
|
111
|
+
{ path: 'remix.config.js' },
|
|
112
|
+
{ path: 'remix.config.mjs' },
|
|
113
|
+
],
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'React Router',
|
|
118
|
+
slug: 'react-router',
|
|
119
|
+
buildCommand: 'react-router build',
|
|
120
|
+
outputDirectory: 'build',
|
|
121
|
+
staticDir: 'build/client', // Client-side assets
|
|
122
|
+
detectors: {
|
|
123
|
+
some: [
|
|
124
|
+
{ path: 'react-router.config.js' },
|
|
125
|
+
{ path: 'react-router.config.ts' },
|
|
126
|
+
{ path: 'vite.config.js', matchContent: '@react-router/dev/vite' },
|
|
127
|
+
{ path: 'vite.config.ts', matchContent: '@react-router/dev/vite' },
|
|
128
|
+
],
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'SvelteKit',
|
|
133
|
+
slug: 'sveltekit',
|
|
134
|
+
buildCommand: 'vite build',
|
|
135
|
+
outputDirectory: 'public',
|
|
136
|
+
staticDir: 'build/client', // adapter-node client assets
|
|
137
|
+
detectors: {
|
|
138
|
+
every: [
|
|
139
|
+
{
|
|
140
|
+
path: 'package.json',
|
|
141
|
+
matchContent: '"(dev)?(d|D)ependencies":\\s*{[^}]*"@sveltejs\\/kit":\\s*".+?"[^}]*}',
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: 'Astro',
|
|
148
|
+
slug: 'astro',
|
|
149
|
+
buildCommand: 'astro build',
|
|
150
|
+
outputDirectory: 'dist',
|
|
151
|
+
staticDir: null, // Entire dist/ is static (SSG default); dist/client/ for SSR
|
|
152
|
+
envPrefix: 'PUBLIC_',
|
|
153
|
+
detectors: {
|
|
154
|
+
every: [{ matchPackage: 'astro' }],
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: 'SolidStart',
|
|
159
|
+
slug: 'solidstart',
|
|
160
|
+
buildCommand: 'vinxi build',
|
|
161
|
+
outputDirectory: '.output',
|
|
162
|
+
staticDir: '.output/public', // Nitro-based static assets
|
|
163
|
+
envPrefix: 'VITE_',
|
|
164
|
+
detectors: {
|
|
165
|
+
every: [{ matchPackage: 'solid-js' }, { matchPackage: '@solidjs/start' }],
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
name: 'TanStack Start',
|
|
170
|
+
slug: 'tanstack-start',
|
|
171
|
+
buildCommand: 'vite build',
|
|
172
|
+
outputDirectory: 'dist',
|
|
173
|
+
staticDir: '.output/public', // Nitro-based; similar to Nuxt/SolidStart
|
|
174
|
+
detectors: {
|
|
175
|
+
every: [{ matchPackage: '@tanstack/router-plugin' }, { matchPackage: 'nitro' }],
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
name: 'RedwoodJS',
|
|
180
|
+
slug: 'redwoodjs',
|
|
181
|
+
buildCommand: 'yarn rw build',
|
|
182
|
+
outputDirectory: null, // Dynamic — depends on target
|
|
183
|
+
staticDir: 'web/dist', // Redwood web-side build output
|
|
184
|
+
envPrefix: 'REDWOOD_ENV_',
|
|
185
|
+
detectors: {
|
|
186
|
+
every: [{ matchPackage: '@redwoodjs/core' }],
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
|
|
190
|
+
// ── Static site generators ──
|
|
191
|
+
|
|
192
|
+
{
|
|
193
|
+
name: 'Gatsby.js',
|
|
194
|
+
slug: 'gatsby',
|
|
195
|
+
buildCommand: 'gatsby build',
|
|
196
|
+
outputDirectory: 'public',
|
|
197
|
+
staticDir: null, // Entire public/ is static output
|
|
198
|
+
envPrefix: 'GATSBY_',
|
|
199
|
+
detectors: {
|
|
200
|
+
every: [{ matchPackage: 'gatsby' }],
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
name: 'Eleventy',
|
|
205
|
+
slug: 'eleventy',
|
|
206
|
+
buildCommand: 'npx @11ty/eleventy',
|
|
207
|
+
outputDirectory: '_site',
|
|
208
|
+
staticDir: null, // Entire _site/ is static output
|
|
209
|
+
detectors: {
|
|
210
|
+
every: [{ matchPackage: '@11ty/eleventy' }],
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: 'VitePress',
|
|
215
|
+
slug: 'vitepress',
|
|
216
|
+
buildCommand: 'vitepress build docs',
|
|
217
|
+
outputDirectory: 'docs/.vitepress/dist',
|
|
218
|
+
staticDir: null, // Entire output is static
|
|
219
|
+
detectors: {
|
|
220
|
+
every: [{ matchPackage: 'vitepress' }],
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: 'VuePress',
|
|
225
|
+
slug: 'vuepress',
|
|
226
|
+
buildCommand: 'vuepress build src',
|
|
227
|
+
outputDirectory: 'src/.vuepress/dist',
|
|
228
|
+
staticDir: null, // Entire output is static
|
|
229
|
+
detectors: {
|
|
230
|
+
every: [{ matchPackage: 'vuepress' }],
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
name: 'Docusaurus',
|
|
235
|
+
slug: 'docusaurus',
|
|
236
|
+
buildCommand: 'docusaurus build',
|
|
237
|
+
outputDirectory: 'build',
|
|
238
|
+
staticDir: null, // Entire build/ is static output
|
|
239
|
+
detectors: {
|
|
240
|
+
some: [{ matchPackage: '@docusaurus/core' }],
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
name: 'Hexo',
|
|
245
|
+
slug: 'hexo',
|
|
246
|
+
buildCommand: 'hexo generate',
|
|
247
|
+
outputDirectory: 'public',
|
|
248
|
+
staticDir: null, // Entire public/ is static output
|
|
249
|
+
detectors: {
|
|
250
|
+
every: [{ matchPackage: 'hexo' }],
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
|
|
254
|
+
// ── UI frameworks (with CLI build) ──
|
|
255
|
+
|
|
256
|
+
{
|
|
257
|
+
name: 'Angular',
|
|
258
|
+
slug: 'angular',
|
|
259
|
+
buildCommand: 'ng build',
|
|
260
|
+
outputDirectory: 'dist',
|
|
261
|
+
staticDir: null, // Entire dist/ is static output (browser subfolder in v17+)
|
|
262
|
+
detectors: {
|
|
263
|
+
every: [{ matchPackage: '@angular/cli' }],
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
name: 'Vue.js',
|
|
268
|
+
slug: 'vue',
|
|
269
|
+
buildCommand: 'vue-cli-service build',
|
|
270
|
+
outputDirectory: 'dist',
|
|
271
|
+
staticDir: null, // Entire dist/ is static output
|
|
272
|
+
envPrefix: 'VUE_APP_',
|
|
273
|
+
detectors: {
|
|
274
|
+
every: [{ matchPackage: '@vue/cli-service' }],
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
name: 'Create React App',
|
|
279
|
+
slug: 'create-react-app',
|
|
280
|
+
buildCommand: 'react-scripts build',
|
|
281
|
+
outputDirectory: 'build',
|
|
282
|
+
staticDir: null, // Entire build/ is static output
|
|
283
|
+
envPrefix: 'REACT_APP_',
|
|
284
|
+
detectors: {
|
|
285
|
+
some: [{ matchPackage: 'react-scripts' }, { matchPackage: 'react-dev-utils' }],
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
name: 'Preact',
|
|
290
|
+
slug: 'preact',
|
|
291
|
+
buildCommand: 'preact build',
|
|
292
|
+
outputDirectory: 'build',
|
|
293
|
+
staticDir: null, // Entire build/ is static output
|
|
294
|
+
detectors: {
|
|
295
|
+
every: [{ matchPackage: 'preact-cli' }],
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
|
|
299
|
+
// ── Server frameworks (no default build step) ──
|
|
300
|
+
|
|
301
|
+
{
|
|
302
|
+
name: 'Nitro',
|
|
303
|
+
slug: 'nitro',
|
|
304
|
+
buildCommand: 'nitro build',
|
|
305
|
+
outputDirectory: 'dist',
|
|
306
|
+
staticDir: '.output/public', // Nitro static assets
|
|
307
|
+
detectors: {
|
|
308
|
+
some: [{ matchPackage: 'nitropack' }, { matchPackage: 'nitro' }],
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
|
|
312
|
+
// ── Generic bundlers (least specific, check last) ──
|
|
313
|
+
|
|
314
|
+
{
|
|
315
|
+
name: 'Vite',
|
|
316
|
+
slug: 'vite',
|
|
317
|
+
buildCommand: 'vite build',
|
|
318
|
+
outputDirectory: 'dist',
|
|
319
|
+
staticDir: null, // Entire dist/ is static output
|
|
320
|
+
envPrefix: 'VITE_',
|
|
321
|
+
detectors: {
|
|
322
|
+
every: [{ matchPackage: 'vite' }],
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
name: 'Parcel',
|
|
327
|
+
slug: 'parcel',
|
|
328
|
+
buildCommand: 'parcel build',
|
|
329
|
+
outputDirectory: 'dist',
|
|
330
|
+
staticDir: null, // Entire dist/ is static output
|
|
331
|
+
detectors: {
|
|
332
|
+
every: [{ matchPackage: 'parcel' }],
|
|
333
|
+
},
|
|
334
|
+
},
|
|
335
|
+
];
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic JS/TS project detector (fallback).
|
|
3
|
+
*
|
|
4
|
+
* This is the catch-all detector for projects that don't match any specific
|
|
5
|
+
* framework. It looks for:
|
|
6
|
+
* 1. A package.json with a "build" script
|
|
7
|
+
* 2. A "start" script or "main" field for the start command
|
|
8
|
+
*
|
|
9
|
+
* If neither is found, detection fails — we can't build what we don't understand.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
import type { FrameworkDetector, DetectedFramework } from './types';
|
|
14
|
+
import { detectPackageManager } from './util';
|
|
15
|
+
|
|
16
|
+
export const genericDetector: FrameworkDetector = {
|
|
17
|
+
name: 'generic',
|
|
18
|
+
priority: 100, // Lowest priority — true fallback
|
|
19
|
+
|
|
20
|
+
async detect(projectDir, pkg): Promise<DetectedFramework | null> {
|
|
21
|
+
// Must have a package.json with something we can work with
|
|
22
|
+
if (!pkg.scripts?.build && !pkg.scripts?.start && !pkg.main) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const pm = await detectPackageManager(projectDir);
|
|
27
|
+
|
|
28
|
+
// Determine build command
|
|
29
|
+
const buildCommand = pkg.scripts?.build ?? null;
|
|
30
|
+
if (!buildCommand) {
|
|
31
|
+
// No build script — might be a runtime-only project
|
|
32
|
+
// We'll still try if there's a start command
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Determine start command
|
|
36
|
+
let startCommand: string | undefined;
|
|
37
|
+
let serverEntry: string | undefined;
|
|
38
|
+
|
|
39
|
+
if (pkg.scripts?.start) {
|
|
40
|
+
startCommand = pkg.scripts.start;
|
|
41
|
+
} else if (pkg.main) {
|
|
42
|
+
// Check if main entry exists
|
|
43
|
+
const mainFile = Bun.file(join(projectDir, pkg.main));
|
|
44
|
+
if (await mainFile.exists()) {
|
|
45
|
+
const runtime = pm === 'bun' ? 'bun' : 'node';
|
|
46
|
+
startCommand = `${runtime} ${pkg.main}`;
|
|
47
|
+
serverEntry = pkg.main;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// If no build and no start, we can't do anything
|
|
52
|
+
if (!buildCommand && !startCommand) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Detect runtime from engines field or package manager
|
|
57
|
+
const runtime = pkg.engines?.bun ? 'bun' : pm === 'bun' ? 'bun' : 'node';
|
|
58
|
+
|
|
59
|
+
return {
|
|
60
|
+
name: 'generic',
|
|
61
|
+
runtime,
|
|
62
|
+
packageManager: pm,
|
|
63
|
+
buildCommand: buildCommand ?? 'echo "No build step"',
|
|
64
|
+
buildOutput: '.', // Generic — build output could be anywhere
|
|
65
|
+
startCommand,
|
|
66
|
+
serverEntry,
|
|
67
|
+
port: 3000,
|
|
68
|
+
confidence: 'low',
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
};
|