veryfront 0.1.47 → 0.1.49
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/esm/cli/app/components/inline-input.d.ts +1 -4
- package/esm/cli/app/components/inline-input.d.ts.map +1 -1
- package/esm/cli/app/components/inline-input.js +1 -1
- package/esm/cli/app/components/list-select.d.ts +0 -8
- package/esm/cli/app/components/list-select.d.ts.map +1 -1
- package/esm/cli/app/components/list-select.js +0 -13
- package/esm/cli/app/operations/project-creation.d.ts +2 -14
- package/esm/cli/app/operations/project-creation.d.ts.map +1 -1
- package/esm/cli/app/operations/project-creation.js +3 -68
- package/esm/cli/app/shell.js +2 -2
- package/esm/cli/app/utils.d.ts +1 -2
- package/esm/cli/app/utils.d.ts.map +1 -1
- package/esm/cli/app/utils.js +1 -17
- package/esm/cli/app/views/dashboard.d.ts +0 -4
- package/esm/cli/app/views/dashboard.d.ts.map +1 -1
- package/esm/cli/app/views/dashboard.js +0 -15
- package/esm/cli/app/views/startup.d.ts +0 -4
- package/esm/cli/app/views/startup.d.ts.map +1 -1
- package/esm/cli/app/views/startup.js +0 -7
- package/esm/cli/auth/login.d.ts.map +1 -1
- package/esm/cli/auth/login.js +1 -2
- package/esm/cli/auth/token-store.js +1 -1
- package/esm/cli/auth/utils.d.ts +2 -1
- package/esm/cli/auth/utils.d.ts.map +1 -1
- package/esm/cli/commands/build/handler.d.ts +1 -1
- package/esm/cli/commands/generate/integration-generator.js +1 -1
- package/esm/cli/commands/init/catalog.js +3 -3
- package/esm/cli/commands/init/command-help.js +2 -2
- package/esm/cli/commands/init/config-generator.d.ts.map +1 -1
- package/esm/cli/commands/init/config-generator.js +8 -0
- package/esm/cli/commands/init/types.d.ts +1 -1
- package/esm/cli/commands/init/types.d.ts.map +1 -1
- package/esm/cli/commands/install/types.d.ts +2 -2
- package/esm/cli/commands/merge/command.d.ts +1 -1
- package/esm/cli/help/formatters.d.ts +1 -1
- package/esm/cli/help/formatters.d.ts.map +1 -1
- package/esm/cli/help/formatters.js +8 -4
- package/esm/cli/help/main-help.d.ts.map +1 -1
- package/esm/cli/help/main-help.js +2 -2
- package/esm/cli/help/tips.js +1 -1
- package/esm/cli/mcp/remote-file-tools.js +1 -1
- package/esm/cli/mcp/server.d.ts +0 -1
- package/esm/cli/mcp/server.d.ts.map +1 -1
- package/esm/cli/mcp/server.js +2 -5
- package/esm/cli/mcp/tools/catalog-tools.d.ts +3 -3
- package/esm/cli/mcp/tools/catalog-tools.js +3 -3
- package/esm/cli/mcp/tools/dev-tools.d.ts +1 -1
- package/esm/cli/mcp/tools/dev-tools.d.ts.map +1 -1
- package/esm/cli/mcp/tools/dev-tools.js +1 -2
- package/esm/cli/mcp/tools/scaffold-tools.d.ts +2 -2
- package/esm/cli/mcp/tools.d.ts +1 -2
- package/esm/cli/mcp/tools.d.ts.map +1 -1
- package/esm/cli/mcp/tools.js +1 -2
- package/esm/cli/shared/reserve-slug.d.ts.map +1 -1
- package/esm/cli/shared/reserve-slug.js +1 -3
- package/esm/cli/sync/ignore.d.ts +1 -1
- package/esm/cli/sync/ignore.d.ts.map +1 -1
- package/esm/cli/sync/ignore.js +22 -18
- package/esm/cli/templates/index.js +2 -2
- package/esm/cli/templates/manifest.d.ts +10 -8
- package/esm/cli/templates/manifest.js +15 -13
- package/esm/cli/templates/types.d.ts +1 -1
- package/esm/cli/templates/types.d.ts.map +1 -1
- package/esm/cli/ui/colors.d.ts +0 -1
- package/esm/cli/ui/colors.d.ts.map +1 -1
- package/esm/cli/ui/colors.js +0 -10
- package/esm/cli/ui/dot-matrix.d.ts.map +1 -1
- package/esm/cli/ui/dot-matrix.js +2 -5
- package/esm/cli/ui/tui.js +2 -3
- package/esm/cli/utils/index.js +1 -2
- package/esm/cli/utils/package-manager.d.ts.map +1 -1
- package/esm/cli/utils/package-manager.js +3 -4
- package/esm/deno.d.ts +10 -0
- package/esm/deno.js +30 -20
- package/esm/src/agent/chat-handler.d.ts +22 -0
- package/esm/src/agent/chat-handler.d.ts.map +1 -1
- package/esm/src/agent/chat-handler.js +88 -28
- package/esm/src/agent/factory.d.ts +0 -8
- package/esm/src/agent/factory.d.ts.map +1 -1
- package/esm/src/agent/factory.js +50 -1
- package/esm/src/agent/index.d.ts +17 -2
- package/esm/src/agent/index.d.ts.map +1 -1
- package/esm/src/agent/index.js +17 -2
- package/esm/src/agent/memory/memory.d.ts +2 -2
- package/esm/src/agent/memory/memory.d.ts.map +1 -1
- package/esm/src/agent/memory/memory.js +0 -1
- package/esm/src/agent/react/index.d.ts +1 -1
- package/esm/src/agent/react/index.d.ts.map +1 -1
- package/esm/src/agent/react/use-chat/index.d.ts +1 -1
- package/esm/src/agent/react/use-chat/index.d.ts.map +1 -1
- package/esm/src/agent/react/use-chat/streaming/handler.d.ts.map +1 -1
- package/esm/src/agent/react/use-chat/streaming/handler.js +42 -4
- package/esm/src/agent/react/use-chat/streaming/parts-builder.d.ts +2 -2
- package/esm/src/agent/react/use-chat/streaming/parts-builder.d.ts.map +1 -1
- package/esm/src/agent/react/use-chat/streaming/parts-builder.js +14 -1
- package/esm/src/agent/react/use-chat/streaming/types.d.ts +5 -0
- package/esm/src/agent/react/use-chat/streaming/types.d.ts.map +1 -1
- package/esm/src/agent/react/use-chat/types.d.ts +23 -1
- package/esm/src/agent/react/use-chat/types.d.ts.map +1 -1
- package/esm/src/agent/react/use-chat/use-chat.d.ts +15 -1
- package/esm/src/agent/react/use-chat/use-chat.d.ts.map +1 -1
- package/esm/src/agent/react/use-chat/use-chat.js +187 -35
- package/esm/src/agent/runtime/index.d.ts +18 -0
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +167 -36
- package/esm/src/agent/runtime/tool-helpers.d.ts +6 -1
- package/esm/src/agent/runtime/tool-helpers.d.ts.map +1 -1
- package/esm/src/agent/runtime/tool-helpers.js +10 -1
- package/esm/src/agent/schemas/agent.schema.d.ts +4 -4
- package/esm/src/agent/types.d.ts +10 -0
- package/esm/src/agent/types.d.ts.map +1 -1
- package/esm/src/ai/registry-manager.d.ts.map +1 -1
- package/esm/src/ai/registry-manager.js +2 -1
- package/esm/src/build/bundler/code-splitter/manifest-builder.d.ts +0 -2
- package/esm/src/build/bundler/code-splitter/manifest-builder.d.ts.map +1 -1
- package/esm/src/build/bundler/code-splitter/manifest-builder.js +1 -1
- package/esm/src/build/compiler/mdx-compiler/validator.d.ts.map +1 -1
- package/esm/src/build/compiler/mdx-compiler/validator.js +2 -3
- package/esm/src/build/compiler/mdx-to-js.d.ts +0 -2
- package/esm/src/build/compiler/mdx-to-js.d.ts.map +1 -1
- package/esm/src/build/compiler/mdx-to-js.js +0 -81
- package/esm/src/build/index.d.ts +0 -6
- package/esm/src/build/index.d.ts.map +1 -1
- package/esm/src/build/index.js +0 -1
- package/esm/src/build/production-build/build/route-collector.d.ts.map +1 -1
- package/esm/src/build/production-build/build/route-collector.js +2 -3
- package/esm/src/build/production-build/client-runtime.d.ts +7 -3
- package/esm/src/build/production-build/client-runtime.d.ts.map +1 -1
- package/esm/src/build/production-build/client-runtime.js +9 -9
- package/esm/src/build/production-build/templates.d.ts +5 -9
- package/esm/src/build/production-build/templates.d.ts.map +1 -1
- package/esm/src/build/production-build/templates.js +6 -18
- package/esm/src/build/vendor-cache.d.ts.map +1 -1
- package/esm/src/build/vendor-cache.js +0 -5
- package/esm/src/cache/tokenizing-gateway.d.ts +0 -2
- package/esm/src/cache/tokenizing-gateway.d.ts.map +1 -1
- package/esm/src/cache/tokenizing-gateway.js +1 -3
- package/esm/src/chat/index.d.ts +33 -24
- package/esm/src/chat/index.d.ts.map +1 -1
- package/esm/src/chat/index.js +40 -26
- package/esm/src/config/define-config.d.ts.map +1 -1
- package/esm/src/config/define-config.js +28 -25
- package/esm/src/config/loader.d.ts.map +1 -1
- package/esm/src/config/loader.js +10 -7
- package/esm/src/config/schemas/config.schema.d.ts +58 -12
- package/esm/src/config/schemas/config.schema.d.ts.map +1 -1
- package/esm/src/config/schemas/config.schema.js +12 -0
- package/esm/src/data/data-fetcher.d.ts +1 -2
- package/esm/src/data/data-fetcher.d.ts.map +1 -1
- package/esm/src/data/data-fetcher.js +14 -15
- package/esm/src/data/server-data-fetcher.d.ts +0 -3
- package/esm/src/data/server-data-fetcher.d.ts.map +1 -1
- package/esm/src/data/server-data-fetcher.js +1 -8
- package/esm/src/data/static-data-fetcher.d.ts +1 -3
- package/esm/src/data/static-data-fetcher.d.ts.map +1 -1
- package/esm/src/data/static-data-fetcher.js +1 -3
- package/esm/src/discovery/discovery-engine.d.ts.map +1 -1
- package/esm/src/discovery/discovery-engine.js +19 -1
- package/esm/src/discovery/discovery-utils.d.ts +0 -4
- package/esm/src/discovery/discovery-utils.d.ts.map +1 -1
- package/esm/src/discovery/discovery-utils.js +0 -6
- package/esm/src/discovery/file-discovery.d.ts +3 -1
- package/esm/src/discovery/file-discovery.d.ts.map +1 -1
- package/esm/src/discovery/file-discovery.js +3 -8
- package/esm/src/discovery/handlers/index.d.ts +1 -0
- package/esm/src/discovery/handlers/index.d.ts.map +1 -1
- package/esm/src/discovery/handlers/index.js +1 -0
- package/esm/src/discovery/handlers/skill-handler.d.ts +26 -0
- package/esm/src/discovery/handlers/skill-handler.d.ts.map +1 -0
- package/esm/src/discovery/handlers/skill-handler.js +87 -0
- package/esm/src/discovery/handlers/task-handler.d.ts.map +1 -1
- package/esm/src/discovery/handlers/task-handler.js +1 -5
- package/esm/src/discovery/transpiler.d.ts.map +1 -1
- package/esm/src/discovery/transpiler.js +7 -2
- package/esm/src/discovery/types.d.ts +3 -0
- package/esm/src/discovery/types.d.ts.map +1 -1
- package/esm/src/embedding/chunk.d.ts +18 -0
- package/esm/src/embedding/chunk.d.ts.map +1 -0
- package/esm/src/embedding/chunk.js +48 -0
- package/esm/src/embedding/embedding.d.ts +23 -0
- package/esm/src/embedding/embedding.d.ts.map +1 -0
- package/esm/src/embedding/embedding.js +54 -0
- package/esm/src/embedding/index.d.ts +29 -0
- package/esm/src/embedding/index.d.ts.map +1 -0
- package/esm/src/embedding/index.js +26 -0
- package/esm/src/embedding/react/use-uploads.d.ts +31 -0
- package/esm/src/embedding/react/use-uploads.d.ts.map +1 -0
- package/esm/src/embedding/react/use-uploads.js +71 -0
- package/esm/src/embedding/resolve.d.ts +27 -0
- package/esm/src/embedding/resolve.d.ts.map +1 -0
- package/esm/src/embedding/resolve.js +94 -0
- package/esm/src/embedding/types.d.ts +90 -0
- package/esm/src/embedding/types.d.ts.map +1 -0
- package/esm/src/embedding/types.js +1 -0
- package/esm/src/embedding/upload-handler.d.ts +43 -0
- package/esm/src/embedding/upload-handler.d.ts.map +1 -0
- package/esm/src/embedding/upload-handler.js +144 -0
- package/esm/src/embedding/upload-loader.d.ts +14 -0
- package/esm/src/embedding/upload-loader.d.ts.map +1 -0
- package/esm/src/embedding/upload-loader.js +70 -0
- package/esm/src/embedding/upload-store.d.ts +27 -0
- package/esm/src/embedding/upload-store.d.ts.map +1 -0
- package/esm/src/embedding/upload-store.js +244 -0
- package/esm/src/embedding/vector-store.d.ts +33 -0
- package/esm/src/embedding/vector-store.d.ts.map +1 -0
- package/esm/src/embedding/vector-store.js +215 -0
- package/esm/src/errors/error-registry.d.ts +2 -1
- package/esm/src/errors/error-registry.d.ts.map +1 -1
- package/esm/src/errors/http-error.d.ts +1 -2
- package/esm/src/errors/http-error.d.ts.map +1 -1
- package/esm/src/errors/http-error.js +2 -2
- package/esm/src/errors/middleware/cli-error-boundary.d.ts.map +1 -1
- package/esm/src/errors/middleware/cli-error-boundary.js +13 -2
- package/esm/src/errors/middleware/wrap-unknown.d.ts +0 -7
- package/esm/src/errors/middleware/wrap-unknown.d.ts.map +1 -1
- package/esm/src/errors/middleware/wrap-unknown.js +0 -9
- package/esm/src/errors/veryfront-error.d.ts +0 -3
- package/esm/src/errors/veryfront-error.d.ts.map +1 -1
- package/esm/src/errors/veryfront-error.js +0 -5
- package/esm/src/html/schemas/html.schema.d.ts +2 -2
- package/esm/src/html/styles-builder/css-hash-cache.d.ts.map +1 -1
- package/esm/src/html/styles-builder/css-hash-cache.js +1 -2
- package/esm/src/html/styles-builder/plugin-loader.d.ts.map +1 -1
- package/esm/src/html/styles-builder/plugin-loader.js +50 -21
- package/esm/src/html/styles-builder/tailwind-compiler-cache.d.ts.map +1 -1
- package/esm/src/html/styles-builder/tailwind-compiler-cache.js +12 -4
- package/esm/src/html/utils.d.ts +0 -7
- package/esm/src/html/utils.d.ts.map +1 -1
- package/esm/src/html/utils.js +0 -25
- package/esm/src/modules/component-registry/registry.d.ts +0 -3
- package/esm/src/modules/component-registry/registry.d.ts.map +1 -1
- package/esm/src/modules/component-registry/registry.js +0 -3
- package/esm/src/modules/import-map/default-import-map.d.ts.map +1 -1
- package/esm/src/modules/import-map/default-import-map.js +8 -0
- package/esm/src/modules/react-loader/component-loader.d.ts.map +1 -1
- package/esm/src/modules/react-loader/component-loader.js +1 -0
- package/esm/src/modules/react-loader/ssr-module-loader/loader.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/loader.js +10 -1
- package/esm/src/modules/react-loader/ssr-module-loader/types.d.ts +2 -0
- package/esm/src/modules/react-loader/ssr-module-loader/types.d.ts.map +1 -1
- package/esm/src/modules/react-loader/types.d.ts +2 -0
- package/esm/src/modules/react-loader/types.d.ts.map +1 -1
- package/esm/src/modules/server/module-server.d.ts +2 -0
- package/esm/src/modules/server/module-server.d.ts.map +1 -1
- package/esm/src/modules/server/module-server.js +2 -1
- package/esm/src/oauth/handlers/callback-handler.d.ts +2 -0
- package/esm/src/oauth/handlers/callback-handler.d.ts.map +1 -1
- package/esm/src/oauth/handlers/callback-handler.js +10 -4
- package/esm/src/oauth/providers/common.d.ts.map +1 -1
- package/esm/src/oauth/providers/common.js +0 -23
- package/esm/src/observability/auto-instrument/react-instrumentation.js +2 -1
- package/esm/src/observability/instruments/instruments-factory.d.ts +1 -1
- package/esm/src/observability/instruments/instruments-factory.d.ts.map +1 -1
- package/esm/src/observability/instruments/instruments-factory.js +5 -4
- package/esm/src/observability/metrics/config.js +5 -4
- package/esm/src/observability/metrics/manager.js +1 -1
- package/esm/src/observability/tracing/span-operations.d.ts.map +1 -1
- package/esm/src/observability/tracing/span-operations.js +14 -8
- package/esm/src/platform/compat/console/node.d.ts +0 -1
- package/esm/src/platform/compat/console/node.d.ts.map +1 -1
- package/esm/src/platform/compat/console/node.js +4 -11
- package/esm/src/platform/compat/fs.d.ts.map +1 -1
- package/esm/src/platform/compat/fs.js +4 -2
- package/esm/src/platform/compat/opaque-deps.d.ts +18 -2
- package/esm/src/platform/compat/opaque-deps.d.ts.map +1 -1
- package/esm/src/platform/compat/opaque-deps.js +19 -0
- package/esm/src/platform/compat/path/basic-operations.d.ts.map +1 -1
- package/esm/src/platform/compat/path/basic-operations.js +17 -10
- package/esm/src/platform/compat/path/resolution.d.ts.map +1 -1
- package/esm/src/platform/compat/path/resolution.js +65 -20
- package/esm/src/platform/compat/path/url-conversion.d.ts.map +1 -1
- package/esm/src/platform/compat/path/url-conversion.js +3 -2
- package/esm/src/platform/compat/process.d.ts +2 -14
- package/esm/src/platform/compat/process.d.ts.map +1 -1
- package/esm/src/platform/compat/process.js +92 -70
- package/esm/src/provider/index.d.ts +1 -1
- package/esm/src/provider/index.d.ts.map +1 -1
- package/esm/src/provider/index.js +1 -1
- package/esm/src/provider/local/ai-sdk-adapter.d.ts.map +1 -1
- package/esm/src/provider/local/ai-sdk-adapter.js +18 -18
- package/esm/src/provider/local/env.d.ts.map +1 -1
- package/esm/src/provider/local/env.js +2 -1
- package/esm/src/provider/local/local-embedding-adapter.d.ts +19 -0
- package/esm/src/provider/local/local-embedding-adapter.d.ts.map +1 -0
- package/esm/src/provider/local/local-embedding-adapter.js +32 -0
- package/esm/src/provider/local/local-embedding-engine.d.ts +17 -0
- package/esm/src/provider/local/local-embedding-engine.d.ts.map +1 -0
- package/esm/src/provider/local/local-embedding-engine.js +63 -0
- package/esm/src/provider/local/local-engine.d.ts +7 -0
- package/esm/src/provider/local/local-engine.d.ts.map +1 -1
- package/esm/src/provider/local/local-engine.js +1 -1
- package/esm/src/provider/local/model-catalog.d.ts +10 -1
- package/esm/src/provider/local/model-catalog.d.ts.map +1 -1
- package/esm/src/provider/local/model-catalog.js +61 -0
- package/esm/src/provider/model-registry.d.ts +10 -0
- package/esm/src/provider/model-registry.d.ts.map +1 -1
- package/esm/src/provider/model-registry.js +43 -0
- package/esm/src/proxy/retry.d.ts +3 -3
- package/esm/src/proxy/retry.d.ts.map +1 -1
- package/esm/src/proxy/retry.js +0 -7
- package/esm/src/proxy/tracing.d.ts +1 -5
- package/esm/src/proxy/tracing.d.ts.map +1 -1
- package/esm/src/proxy/tracing.js +1 -7
- package/esm/src/react/components/ai/agent-card.js +13 -13
- package/esm/src/react/components/ai/chat/components/animations.d.ts +5 -0
- package/esm/src/react/components/ai/chat/components/animations.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/components/animations.js +13 -1
- package/esm/src/react/components/ai/chat/components/attachment-pill.d.ts +15 -0
- package/esm/src/react/components/ai/chat/components/attachment-pill.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/attachment-pill.js +40 -0
- package/esm/src/react/components/ai/chat/components/branch-picker.d.ts +9 -0
- package/esm/src/react/components/ai/chat/components/branch-picker.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/branch-picker.js +17 -0
- package/esm/src/react/components/ai/chat/components/code-block.d.ts +8 -0
- package/esm/src/react/components/ai/chat/components/code-block.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/code-block.js +38 -0
- package/esm/src/react/components/ai/chat/components/drop-zone.d.ts +7 -0
- package/esm/src/react/components/ai/chat/components/drop-zone.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/drop-zone.js +14 -0
- package/esm/src/react/components/ai/chat/components/empty-state.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/components/empty-state.js +10 -8
- package/esm/src/react/components/ai/chat/components/inference-badge.js +1 -1
- package/esm/src/react/components/ai/chat/components/inline-citation.d.ts +10 -0
- package/esm/src/react/components/ai/chat/components/inline-citation.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/inline-citation.js +59 -0
- package/esm/src/react/components/ai/chat/components/message-actions.d.ts +3 -2
- package/esm/src/react/components/ai/chat/components/message-actions.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/components/message-actions.js +10 -10
- package/esm/src/react/components/ai/chat/components/message-edit-form.d.ts +8 -0
- package/esm/src/react/components/ai/chat/components/message-edit-form.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/message-edit-form.js +46 -0
- package/esm/src/react/components/ai/chat/components/message-feedback.d.ts +9 -0
- package/esm/src/react/components/ai/chat/components/message-feedback.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/message-feedback.js +19 -0
- package/esm/src/react/components/ai/chat/components/quick-actions.d.ts +14 -0
- package/esm/src/react/components/ai/chat/components/quick-actions.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/quick-actions.js +7 -0
- package/esm/src/react/components/ai/chat/components/reasoning.d.ts +3 -4
- package/esm/src/react/components/ai/chat/components/reasoning.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/components/reasoning.js +11 -6
- package/esm/src/react/components/ai/chat/components/sidebar.d.ts +14 -0
- package/esm/src/react/components/ai/chat/components/sidebar.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/sidebar.js +92 -0
- package/esm/src/react/components/ai/chat/components/skill-badge.d.ts +12 -0
- package/esm/src/react/components/ai/chat/components/skill-badge.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/skill-badge.js +34 -0
- package/esm/src/react/components/ai/chat/components/sources.d.ts +13 -0
- package/esm/src/react/components/ai/chat/components/sources.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/sources.js +28 -0
- package/esm/src/react/components/ai/chat/components/step-indicator.d.ts +8 -0
- package/esm/src/react/components/ai/chat/components/step-indicator.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/step-indicator.js +15 -0
- package/esm/src/react/components/ai/chat/components/tab-switcher.d.ts +16 -0
- package/esm/src/react/components/ai/chat/components/tab-switcher.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/tab-switcher.js +28 -0
- package/esm/src/react/components/ai/chat/components/tool-ui.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/components/tool-ui.js +23 -21
- package/esm/src/react/components/ai/chat/components/upgrade-cta.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/components/upgrade-cta.js +3 -3
- package/esm/src/react/components/ai/chat/components/uploads-panel.d.ts +16 -0
- package/esm/src/react/components/ai/chat/components/uploads-panel.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/uploads-panel.js +46 -0
- package/esm/src/react/components/ai/chat/composition/api.d.ts +10 -5
- package/esm/src/react/components/ai/chat/composition/api.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/composition/api.js +12 -20
- package/esm/src/react/components/ai/chat/composition/chat-composer.d.ts +35 -0
- package/esm/src/react/components/ai/chat/composition/chat-composer.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/composition/chat-composer.js +53 -0
- package/esm/src/react/components/ai/chat/composition/chat-empty.d.ts +20 -0
- package/esm/src/react/components/ai/chat/composition/chat-empty.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/composition/chat-empty.js +23 -0
- package/esm/src/react/components/ai/chat/composition/chat-if.d.ts +14 -0
- package/esm/src/react/components/ai/chat/composition/chat-if.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/composition/chat-if.js +11 -0
- package/esm/src/react/components/ai/chat/composition/chat-message-list.d.ts +36 -0
- package/esm/src/react/components/ai/chat/composition/chat-message-list.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/composition/chat-message-list.js +113 -0
- package/esm/src/react/components/ai/chat/composition/chat-root.d.ts +43 -0
- package/esm/src/react/components/ai/chat/composition/chat-root.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/composition/chat-root.js +78 -0
- package/esm/src/react/components/ai/chat/composition/error-banner.d.ts +12 -0
- package/esm/src/react/components/ai/chat/composition/error-banner.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/composition/error-banner.js +17 -0
- package/esm/src/react/components/ai/chat/composition/message.d.ts +54 -0
- package/esm/src/react/components/ai/chat/composition/message.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/composition/message.js +175 -0
- package/esm/src/react/components/ai/chat/composition/model-avatar.d.ts +14 -0
- package/esm/src/react/components/ai/chat/composition/model-avatar.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/composition/model-avatar.js +60 -0
- package/esm/src/react/components/ai/chat/contexts/chat-context.d.ts +45 -0
- package/esm/src/react/components/ai/chat/contexts/chat-context.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/contexts/chat-context.js +20 -0
- package/esm/src/react/components/ai/chat/contexts/composer-context.d.ts +34 -0
- package/esm/src/react/components/ai/chat/contexts/composer-context.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/contexts/composer-context.js +21 -0
- package/esm/src/react/components/ai/chat/contexts/index.d.ts +13 -0
- package/esm/src/react/components/ai/chat/contexts/index.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/contexts/index.js +12 -0
- package/esm/src/react/components/ai/chat/contexts/message-context.d.ts +30 -0
- package/esm/src/react/components/ai/chat/contexts/message-context.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/contexts/message-context.js +21 -0
- package/esm/src/react/components/ai/chat/contexts/thread-list-context.d.ts +23 -0
- package/esm/src/react/components/ai/chat/contexts/thread-list-context.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/contexts/thread-list-context.js +21 -0
- package/esm/src/react/components/ai/chat/hooks/use-threads.d.ts +24 -0
- package/esm/src/react/components/ai/chat/hooks/use-threads.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/hooks/use-threads.js +151 -0
- package/esm/src/react/components/ai/chat/index.d.ts +102 -17
- package/esm/src/react/components/ai/chat/index.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/index.js +164 -95
- package/esm/src/react/components/ai/chat/utils/export.d.ts +10 -0
- package/esm/src/react/components/ai/chat/utils/export.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/utils/export.js +64 -0
- package/esm/src/react/components/ai/chat/utils/message-parts.d.ts +12 -0
- package/esm/src/react/components/ai/chat/utils/message-parts.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/utils/message-parts.js +55 -0
- package/esm/src/react/components/ai/chat-with-sidebar.d.ts +98 -0
- package/esm/src/react/components/ai/chat-with-sidebar.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat-with-sidebar.js +165 -0
- package/esm/src/react/components/ai/chat.d.ts +10 -1
- package/esm/src/react/components/ai/chat.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat.js +25 -1
- package/esm/src/react/components/ai/error-boundary.js +6 -6
- package/esm/src/react/components/ai/icons/index.d.ts +9 -0
- package/esm/src/react/components/ai/icons/index.d.ts.map +1 -1
- package/esm/src/react/components/ai/icons/index.js +82 -0
- package/esm/src/react/components/ai/markdown.d.ts.map +1 -1
- package/esm/src/react/components/ai/markdown.js +12 -12
- package/esm/src/react/components/ai/model-selector.d.ts +10 -2
- package/esm/src/react/components/ai/model-selector.d.ts.map +1 -1
- package/esm/src/react/components/ai/model-selector.js +138 -4
- package/esm/src/react/components/ai/theme.d.ts +96 -13
- package/esm/src/react/components/ai/theme.d.ts.map +1 -1
- package/esm/src/react/components/ai/theme.js +177 -21
- package/esm/src/react/primitives/input-box.d.ts.map +1 -1
- package/esm/src/react/primitives/input-box.js +16 -3
- package/esm/src/rendering/cache/index.d.ts +1 -5
- package/esm/src/rendering/cache/index.d.ts.map +1 -1
- package/esm/src/rendering/cache/index.js +1 -5
- package/esm/src/rendering/component-handling.d.ts +2 -0
- package/esm/src/rendering/component-handling.d.ts.map +1 -1
- package/esm/src/rendering/component-handling.js +7 -9
- package/esm/src/rendering/orchestrator/pipeline.d.ts +11 -2
- package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
- package/esm/src/rendering/page-renderer.d.ts.map +1 -1
- package/esm/src/rendering/page-renderer.js +1 -0
- package/esm/src/rendering/shared/context-aware-cache.d.ts.map +1 -1
- package/esm/src/rendering/shared/context-aware-cache.js +0 -4
- package/esm/src/repositories/schemas/index.d.ts +1 -1
- package/esm/src/repositories/schemas/index.d.ts.map +1 -1
- package/esm/src/repositories/schemas/index.js +1 -1
- package/esm/src/repositories/schemas/repository.schema.d.ts +0 -11
- package/esm/src/repositories/schemas/repository.schema.d.ts.map +1 -1
- package/esm/src/repositories/schemas/repository.schema.js +0 -13
- package/esm/src/repositories/types.d.ts +1 -1
- package/esm/src/repositories/types.d.ts.map +1 -1
- package/esm/src/routing/api/module-loader/esbuild-plugin.d.ts.map +1 -1
- package/esm/src/routing/api/module-loader/esbuild-plugin.js +11 -24
- package/esm/src/routing/api/module-loader/loader.d.ts +1 -0
- package/esm/src/routing/api/module-loader/loader.d.ts.map +1 -1
- package/esm/src/routing/api/module-loader/loader.js +347 -27
- package/esm/src/routing/api/openapi/path-utils.d.ts +0 -19
- package/esm/src/routing/api/openapi/path-utils.d.ts.map +1 -1
- package/esm/src/routing/api/openapi/path-utils.js +0 -34
- package/esm/src/routing/api/openapi/spec-generator.d.ts.map +1 -1
- package/esm/src/routing/api/openapi/spec-generator.js +1 -19
- package/esm/src/routing/api/openapi/types.d.ts +1 -0
- package/esm/src/routing/api/openapi/types.d.ts.map +1 -1
- package/esm/src/routing/api/openapi/types.js +18 -0
- package/esm/src/sandbox/sandbox.d.ts +1 -0
- package/esm/src/sandbox/sandbox.d.ts.map +1 -1
- package/esm/src/sandbox/sandbox.js +7 -8
- package/esm/src/security/http/cors/constants.d.ts +0 -2
- package/esm/src/security/http/cors/constants.d.ts.map +1 -1
- package/esm/src/security/http/cors/constants.js +0 -2
- package/esm/src/security/http/response/index.d.ts +3 -4
- package/esm/src/security/http/response/index.d.ts.map +1 -1
- package/esm/src/security/http/response/index.js +2 -3
- package/esm/src/server/context/enriched-context.d.ts +0 -8
- package/esm/src/server/context/enriched-context.d.ts.map +1 -1
- package/esm/src/server/context/enriched-context.js +1 -12
- package/esm/src/server/dev-server/server.d.ts.map +1 -1
- package/esm/src/server/dev-server/server.js +11 -4
- package/esm/src/server/dev-ui/manifest.d.ts +20 -20
- package/esm/src/server/dev-ui/manifest.js +20 -20
- package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts +9 -0
- package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts.map +1 -0
- package/esm/src/server/handlers/dev/framework-candidates.generated.js +5187 -0
- package/esm/src/server/handlers/dev/styles-candidate-scanner.d.ts.map +1 -1
- package/esm/src/server/handlers/dev/styles-candidate-scanner.js +3 -190
- package/esm/src/server/handlers/request/module/module-server-handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/module/module-server-handler.js +1 -0
- package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/index.js +14 -24
- package/esm/src/server/shared/renderer/memory/pressure.d.ts +0 -7
- package/esm/src/server/shared/renderer/memory/pressure.d.ts.map +1 -1
- package/esm/src/server/shared/renderer/memory/pressure.js +1 -13
- package/esm/src/server/utils/domain-lookup.d.ts +0 -4
- package/esm/src/server/utils/domain-lookup.d.ts.map +1 -1
- package/esm/src/server/utils/domain-lookup.js +0 -3
- package/esm/src/skill/allowed-tools.d.ts +54 -0
- package/esm/src/skill/allowed-tools.d.ts.map +1 -0
- package/esm/src/skill/allowed-tools.js +87 -0
- package/esm/src/skill/executor.d.ts +28 -0
- package/esm/src/skill/executor.d.ts.map +1 -0
- package/esm/src/skill/executor.js +187 -0
- package/esm/src/skill/index.d.ts +19 -0
- package/esm/src/skill/index.d.ts.map +1 -0
- package/esm/src/skill/index.js +24 -0
- package/esm/src/skill/parser.d.ts +30 -0
- package/esm/src/skill/parser.d.ts.map +1 -0
- package/esm/src/skill/parser.js +162 -0
- package/esm/src/skill/path-safety.d.ts +22 -0
- package/esm/src/skill/path-safety.d.ts.map +1 -0
- package/esm/src/skill/path-safety.js +156 -0
- package/esm/src/skill/prompt-augmentation.d.ts +19 -0
- package/esm/src/skill/prompt-augmentation.d.ts.map +1 -0
- package/esm/src/skill/prompt-augmentation.js +36 -0
- package/esm/src/skill/registry.d.ts +25 -0
- package/esm/src/skill/registry.d.ts.map +1 -0
- package/esm/src/skill/registry.js +42 -0
- package/esm/src/skill/tools.d.ts +27 -0
- package/esm/src/skill/tools.d.ts.map +1 -0
- package/esm/src/skill/tools.js +149 -0
- package/esm/src/skill/types.d.ts +85 -0
- package/esm/src/skill/types.d.ts.map +1 -0
- package/esm/src/skill/types.js +27 -0
- package/esm/src/studio/bridge/bridge-bundle.generated.d.ts +1 -1
- package/esm/src/studio/bridge/bridge-bundle.generated.d.ts.map +1 -1
- package/esm/src/studio/bridge/bridge-bundle.generated.js +1 -1
- package/esm/src/studio/element-selector-injector.d.ts +0 -2
- package/esm/src/studio/element-selector-injector.d.ts.map +1 -1
- package/esm/src/task/runner.d.ts +6 -0
- package/esm/src/task/runner.d.ts.map +1 -1
- package/esm/src/task/runner.js +8 -8
- package/esm/src/tool/factory.js +31 -39
- package/esm/src/transforms/esm/http-cache-helpers.d.ts +0 -8
- package/esm/src/transforms/esm/http-cache-helpers.d.ts.map +1 -1
- package/esm/src/transforms/esm/http-cache-helpers.js +0 -20
- package/esm/src/transforms/esm/path-resolver.d.ts +0 -14
- package/esm/src/transforms/esm/path-resolver.d.ts.map +1 -1
- package/esm/src/transforms/esm/path-resolver.js +1 -92
- package/esm/src/transforms/esm/source-url-embed.d.ts +0 -14
- package/esm/src/transforms/esm/source-url-embed.d.ts.map +1 -1
- package/esm/src/transforms/esm/source-url-embed.js +0 -47
- package/esm/src/transforms/esm/transform-cache.d.ts.map +1 -1
- package/esm/src/transforms/esm/transform-cache.js +2 -6
- package/esm/src/transforms/mdx/index.d.ts +0 -1
- package/esm/src/transforms/mdx/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/index.js +0 -4
- package/esm/src/transforms/pipeline/context.d.ts +0 -1
- package/esm/src/transforms/pipeline/context.d.ts.map +1 -1
- package/esm/src/transforms/pipeline/context.js +0 -1
- package/esm/src/transforms/pipeline/index.d.ts +1 -2
- package/esm/src/transforms/pipeline/index.d.ts.map +1 -1
- package/esm/src/transforms/pipeline/index.js +0 -3
- package/esm/src/transforms/pipeline/stages/ssr-http-cache.d.ts.map +1 -1
- package/esm/src/transforms/pipeline/stages/ssr-http-cache.js +0 -1
- package/esm/src/transforms/plugins/rehype-node-positions.d.ts.map +1 -1
- package/esm/src/transforms/plugins/rehype-node-positions.js +1 -0
- package/esm/src/types/entities/getEntityInfo.js +1 -1
- package/esm/src/types/index.d.ts +2 -13
- package/esm/src/types/index.d.ts.map +1 -1
- package/esm/src/types/server.d.ts +2 -1
- package/esm/src/types/server.d.ts.map +1 -1
- package/esm/src/utils/cache-file-ops.d.ts +1 -1
- package/esm/src/utils/cache-file-ops.d.ts.map +1 -1
- package/esm/src/utils/cache-file-ops.js +5 -6
- package/esm/src/utils/lru-wrapper.d.ts.map +1 -1
- package/esm/src/utils/lru-wrapper.js +2 -4
- package/esm/src/workflow/claude-code/event-publisher.d.ts +0 -4
- package/esm/src/workflow/claude-code/event-publisher.d.ts.map +1 -1
- package/esm/src/workflow/claude-code/event-publisher.js +2 -6
- package/esm/src/workflow/executor/workflow-executor.d.ts.map +1 -1
- package/esm/src/workflow/executor/workflow-executor.js +6 -1
- package/esm/src/workflow/react/use-workflow-list.d.ts.map +1 -1
- package/esm/src/workflow/react/use-workflow-list.js +2 -1
- package/esm/src/workflow/schemas/workflow.schema.d.ts +8 -8
- package/package.json +10 -3
- package/src/cli/app/components/inline-input.ts +0 -5
- package/src/cli/app/components/list-select.ts +0 -21
- package/src/cli/app/operations/project-creation.ts +4 -109
- package/src/cli/app/shell.ts +2 -2
- package/src/cli/app/utils.ts +0 -22
- package/src/cli/app/views/dashboard.ts +0 -17
- package/src/cli/app/views/startup.ts +0 -13
- package/src/cli/auth/login.ts +1 -2
- package/src/cli/auth/token-store.ts +1 -1
- package/src/cli/auth/utils.ts +2 -1
- package/src/cli/commands/generate/integration-generator.ts +1 -1
- package/src/cli/commands/init/catalog.ts +3 -3
- package/src/cli/commands/init/command-help.ts +2 -2
- package/src/cli/commands/init/config-generator.ts +9 -0
- package/src/cli/commands/init/types.ts +1 -1
- package/src/cli/help/formatters.ts +11 -4
- package/src/cli/help/main-help.ts +2 -3
- package/src/cli/help/tips.ts +1 -1
- package/src/cli/mcp/remote-file-tools.ts +1 -1
- package/src/cli/mcp/server.ts +2 -5
- package/src/cli/mcp/tools/catalog-tools.ts +3 -3
- package/src/cli/mcp/tools/dev-tools.ts +1 -2
- package/src/cli/mcp/tools.ts +8 -2
- package/src/cli/shared/reserve-slug.ts +1 -4
- package/src/cli/sync/ignore.ts +26 -21
- package/src/cli/templates/index.ts +2 -2
- package/src/cli/templates/manifest.js +15 -13
- package/src/cli/templates/types.ts +1 -1
- package/src/cli/ui/colors.ts +0 -12
- package/src/cli/ui/dot-matrix.ts +3 -6
- package/src/cli/ui/tui.ts +3 -3
- package/src/cli/utils/index.ts +1 -1
- package/src/cli/utils/package-manager.ts +3 -4
- package/src/deno.js +30 -20
- package/src/src/agent/chat-handler.ts +138 -28
- package/src/src/agent/factory.ts +58 -9
- package/src/src/agent/index.ts +24 -2
- package/src/src/agent/memory/memory.ts +0 -9
- package/src/src/agent/react/index.ts +2 -0
- package/src/src/agent/react/use-chat/index.ts +2 -0
- package/src/src/agent/react/use-chat/streaming/handler.ts +66 -5
- package/src/src/agent/react/use-chat/streaming/parts-builder.ts +18 -1
- package/src/src/agent/react/use-chat/streaming/types.ts +6 -0
- package/src/src/agent/react/use-chat/types.ts +26 -1
- package/src/src/agent/react/use-chat/use-chat.ts +245 -36
- package/src/src/agent/runtime/index.ts +213 -35
- package/src/src/agent/runtime/tool-helpers.ts +9 -0
- package/src/src/agent/types.ts +10 -0
- package/src/src/ai/registry-manager.ts +2 -1
- package/src/src/build/bundler/code-splitter/manifest-builder.ts +1 -1
- package/src/src/build/compiler/mdx-compiler/validator.ts +3 -7
- package/src/src/build/compiler/mdx-to-js.ts +0 -101
- package/src/src/build/index.ts +0 -8
- package/src/src/build/production-build/build/route-collector.ts +2 -4
- package/src/src/build/production-build/client-runtime.ts +21 -5
- package/src/src/build/production-build/templates.ts +9 -18
- package/src/src/build/vendor-cache.ts +0 -6
- package/src/src/cache/tokenizing-gateway.ts +1 -9
- package/src/src/chat/index.ts +169 -34
- package/src/src/config/define-config.ts +30 -29
- package/src/src/config/loader.ts +10 -9
- package/src/src/config/schemas/config.schema.ts +12 -0
- package/src/src/data/data-fetcher.ts +15 -21
- package/src/src/data/server-data-fetcher.ts +1 -8
- package/src/src/data/static-data-fetcher.ts +1 -6
- package/src/src/discovery/discovery-engine.ts +27 -0
- package/src/src/discovery/discovery-utils.ts +0 -7
- package/src/src/discovery/file-discovery.ts +3 -9
- package/src/src/discovery/handlers/index.ts +1 -0
- package/src/src/discovery/handlers/skill-handler.ts +123 -0
- package/src/src/discovery/handlers/task-handler.ts +1 -5
- package/src/src/discovery/transpiler.ts +7 -2
- package/src/src/discovery/types.ts +3 -0
- package/src/src/embedding/chunk.ts +60 -0
- package/src/src/embedding/embedding.ts +62 -0
- package/src/src/embedding/index.ts +49 -0
- package/src/src/embedding/react/use-uploads.ts +101 -0
- package/src/src/embedding/resolve.ts +126 -0
- package/src/src/embedding/types.ts +103 -0
- package/src/src/embedding/upload-handler.ts +180 -0
- package/src/src/embedding/upload-loader.ts +76 -0
- package/src/src/embedding/upload-store.ts +299 -0
- package/src/src/embedding/vector-store.ts +282 -0
- package/src/src/errors/error-registry.ts +2 -2
- package/src/src/errors/http-error.ts +7 -3
- package/src/src/errors/middleware/cli-error-boundary.ts +28 -2
- package/src/src/errors/middleware/wrap-unknown.ts +0 -10
- package/src/src/errors/veryfront-error.ts +0 -9
- package/src/src/html/styles-builder/css-hash-cache.ts +5 -2
- package/src/src/html/styles-builder/plugin-loader.ts +58 -21
- package/src/src/html/styles-builder/tailwind-compiler-cache.ts +11 -4
- package/src/src/html/utils.ts +0 -33
- package/src/src/modules/component-registry/registry.ts +0 -3
- package/src/src/modules/import-map/default-import-map.ts +10 -0
- package/src/src/modules/react-loader/component-loader.ts +1 -0
- package/src/src/modules/react-loader/ssr-module-loader/loader.ts +12 -1
- package/src/src/modules/react-loader/ssr-module-loader/types.ts +2 -0
- package/src/src/modules/react-loader/types.ts +2 -0
- package/src/src/modules/server/module-server.ts +4 -1
- package/src/src/modules/server/websocket-handler.ts +1 -1
- package/src/src/oauth/handlers/callback-handler.ts +17 -5
- package/src/src/oauth/providers/base.ts +3 -3
- package/src/src/oauth/providers/common.ts +0 -23
- package/src/src/observability/auto-instrument/react-instrumentation.ts +2 -2
- package/src/src/observability/instruments/instruments-factory.ts +6 -6
- package/src/src/observability/metrics/config.ts +5 -5
- package/src/src/observability/metrics/manager.ts +1 -1
- package/src/src/observability/tracing/span-operations.ts +14 -9
- package/src/src/platform/compat/console/node.ts +4 -14
- package/src/src/platform/compat/fs.ts +14 -3
- package/src/src/platform/compat/opaque-deps.ts +32 -2
- package/src/src/platform/compat/path/basic-operations.ts +19 -10
- package/src/src/platform/compat/path/resolution.ts +69 -18
- package/src/src/platform/compat/path/url-conversion.ts +10 -6
- package/src/src/platform/compat/process.ts +133 -76
- package/src/src/provider/index.ts +1 -0
- package/src/src/provider/local/ai-sdk-adapter.ts +40 -37
- package/src/src/provider/local/env.ts +4 -1
- package/src/src/provider/local/local-embedding-adapter.ts +37 -0
- package/src/src/provider/local/local-embedding-engine.ts +88 -0
- package/src/src/provider/local/local-engine.ts +1 -1
- package/src/src/provider/local/model-catalog.ts +67 -1
- package/src/src/provider/model-registry.ts +47 -0
- package/src/src/proxy/retry.ts +0 -9
- package/src/src/proxy/tracing.ts +1 -9
- package/src/src/react/components/ai/agent-card.tsx +13 -13
- package/src/src/react/components/ai/chat/components/animations.tsx +31 -1
- package/src/src/react/components/ai/chat/components/attachment-pill.tsx +110 -0
- package/src/src/react/components/ai/chat/components/branch-picker.tsx +70 -0
- package/src/src/react/components/ai/chat/components/code-block.tsx +82 -0
- package/src/src/react/components/ai/chat/components/drop-zone.tsx +49 -0
- package/src/src/react/components/ai/chat/components/empty-state.tsx +20 -8
- package/src/src/react/components/ai/chat/components/inference-badge.tsx +1 -1
- package/src/src/react/components/ai/chat/components/inline-citation.tsx +150 -0
- package/src/src/react/components/ai/chat/components/message-actions.tsx +73 -51
- package/src/src/react/components/ai/chat/components/message-edit-form.tsx +95 -0
- package/src/src/react/components/ai/chat/components/message-feedback.tsx +72 -0
- package/src/src/react/components/ai/chat/components/quick-actions.tsx +38 -0
- package/src/src/react/components/ai/chat/components/reasoning.tsx +40 -35
- package/src/src/react/components/ai/chat/components/sidebar.tsx +204 -0
- package/src/src/react/components/ai/chat/components/skill-badge.tsx +51 -0
- package/src/src/react/components/ai/chat/components/sources.tsx +99 -0
- package/src/src/react/components/ai/chat/components/step-indicator.tsx +33 -0
- package/src/src/react/components/ai/chat/components/tab-switcher.tsx +69 -0
- package/src/src/react/components/ai/chat/components/tool-ui.tsx +31 -29
- package/src/src/react/components/ai/chat/components/upgrade-cta.tsx +3 -4
- package/src/src/react/components/ai/chat/components/uploads-panel.tsx +129 -0
- package/src/src/react/components/ai/chat/composition/api.tsx +12 -62
- package/src/src/react/components/ai/chat/composition/chat-composer.tsx +205 -0
- package/src/src/react/components/ai/chat/composition/chat-empty.tsx +77 -0
- package/src/src/react/components/ai/chat/composition/chat-if.tsx +25 -0
- package/src/src/react/components/ai/chat/composition/chat-message-list.tsx +356 -0
- package/src/src/react/components/ai/chat/composition/chat-root.tsx +181 -0
- package/src/src/react/components/ai/chat/composition/error-banner.tsx +38 -0
- package/src/src/react/components/ai/chat/composition/message.tsx +337 -0
- package/src/src/react/components/ai/chat/composition/model-avatar.tsx +103 -0
- package/src/src/react/components/ai/chat/contexts/chat-context.tsx +78 -0
- package/src/src/react/components/ai/chat/contexts/composer-context.tsx +59 -0
- package/src/src/react/components/ai/chat/contexts/index.ts +36 -0
- package/src/src/react/components/ai/chat/contexts/message-context.tsx +49 -0
- package/src/src/react/components/ai/chat/contexts/thread-list-context.tsx +40 -0
- package/src/src/react/components/ai/chat/hooks/use-threads.ts +208 -0
- package/src/src/react/components/ai/chat/index.tsx +389 -230
- package/src/src/react/components/ai/chat/utils/export.ts +77 -0
- package/src/src/react/components/ai/chat/utils/message-parts.ts +63 -1
- package/src/src/react/components/ai/chat-with-sidebar.tsx +371 -0
- package/src/src/react/components/ai/chat.tsx +122 -7
- package/src/src/react/components/ai/error-boundary.tsx +6 -6
- package/src/src/react/components/ai/icons/index.ts +100 -0
- package/src/src/react/components/ai/markdown.tsx +12 -15
- package/src/src/react/components/ai/model-selector.tsx +223 -15
- package/src/src/react/components/ai/theme.ts +205 -39
- package/src/src/react/primitives/input-box.tsx +27 -4
- package/src/src/rendering/cache/index.ts +12 -5
- package/src/src/rendering/component-handling.ts +9 -9
- package/src/src/rendering/orchestrator/pipeline.ts +12 -2
- package/src/src/rendering/page-renderer.ts +1 -0
- package/src/src/rendering/renderer.ts +1 -1
- package/src/src/rendering/shared/context-aware-cache.ts +0 -5
- package/src/src/repositories/schemas/index.ts +0 -2
- package/src/src/repositories/schemas/repository.schema.ts +0 -15
- package/src/src/repositories/types.ts +1 -6
- package/src/src/routing/api/module-loader/esbuild-plugin.ts +11 -25
- package/src/src/routing/api/module-loader/loader.ts +421 -17
- package/src/src/routing/api/openapi/path-utils.ts +0 -39
- package/src/src/routing/api/openapi/spec-generator.ts +1 -20
- package/src/src/routing/api/openapi/types.ts +20 -0
- package/src/src/sandbox/sandbox.ts +8 -8
- package/src/src/security/http/cors/constants.ts +0 -4
- package/src/src/security/http/response/index.ts +3 -9
- package/src/src/server/context/enriched-context.ts +1 -19
- package/src/src/server/dev-server/server.ts +11 -4
- package/src/src/server/dev-ui/manifest.js +20 -20
- package/src/src/server/handlers/dev/framework-candidates.generated.ts +5188 -0
- package/src/src/server/handlers/dev/styles-candidate-scanner.ts +3 -191
- package/src/src/server/handlers/request/module/module-server-handler.ts +1 -0
- package/src/src/server/runtime-handler/index.ts +17 -28
- package/src/src/server/shared/renderer/memory/pressure.ts +2 -15
- package/src/src/server/utils/domain-lookup.ts +0 -4
- package/src/src/skill/allowed-tools.ts +107 -0
- package/src/src/skill/executor.ts +215 -0
- package/src/src/skill/index.ts +60 -0
- package/src/src/skill/parser.ts +214 -0
- package/src/src/skill/path-safety.ts +203 -0
- package/src/src/skill/prompt-augmentation.ts +48 -0
- package/src/src/skill/registry.ts +51 -0
- package/src/src/skill/tools.ts +197 -0
- package/src/src/skill/types.ts +107 -0
- package/src/src/studio/bridge/bridge-bundle.generated.ts +1 -1
- package/src/src/studio/element-selector-injector.ts +0 -2
- package/src/src/task/runner.ts +10 -8
- package/src/src/tool/factory.ts +54 -54
- package/src/src/transforms/esm/http-cache-helpers.ts +0 -20
- package/src/src/transforms/esm/path-resolver.ts +1 -140
- package/src/src/transforms/esm/source-url-embed.ts +0 -53
- package/src/src/transforms/esm/transform-cache.ts +3 -7
- package/src/src/transforms/mdx/index.ts +0 -5
- package/src/src/transforms/pipeline/context.ts +0 -2
- package/src/src/transforms/pipeline/index.ts +0 -4
- package/src/src/transforms/pipeline/stages/ssr-http-cache.ts +0 -1
- package/src/src/transforms/plugins/rehype-node-positions.ts +1 -0
- package/src/src/types/entities/getEntityInfo.ts +1 -1
- package/src/src/types/index.ts +1 -20
- package/src/src/types/server.ts +1 -1
- package/src/src/utils/cache-file-ops.ts +5 -5
- package/src/src/utils/logger/logger.ts +2 -2
- package/src/src/utils/lru-wrapper.ts +2 -8
- package/src/src/workflow/claude-code/event-publisher.ts +13 -4
- package/src/src/workflow/executor/workflow-executor.ts +7 -2
- package/src/src/workflow/react/use-workflow-list.ts +3 -2
- package/esm/src/transforms/mdx/parser.d.ts +0 -4
- package/esm/src/transforms/mdx/parser.d.ts.map +0 -1
- package/esm/src/transforms/mdx/parser.js +0 -49
- package/src/src/transforms/mdx/parser.ts +0 -65
|
@@ -11,7 +11,176 @@ import { isDeno, isNode } from "../../../platform/compat/runtime.js";
|
|
|
11
11
|
import { withSpan } from "../../../observability/tracing/otlp-setup.js";
|
|
12
12
|
import { isCompiledBinary } from "../../../utils/index.js";
|
|
13
13
|
import { wrapWithCurrentContext } from "../../../platform/adapters/fs/veryfront/multi-project-adapter.js";
|
|
14
|
+
import { isWithinDirectory } from "../../../security/path-validation.js";
|
|
14
15
|
const logger = serverLogger.component("api");
|
|
16
|
+
/**
|
|
17
|
+
* Validates that a module path is contained within the project directory.
|
|
18
|
+
* Prevents path traversal attacks that could load arbitrary files from the host.
|
|
19
|
+
*/
|
|
20
|
+
function validateModulePath(modulePath, projectDir) {
|
|
21
|
+
const resolved = pathHelper.resolve(modulePath);
|
|
22
|
+
const resolvedProject = pathHelper.resolve(projectDir);
|
|
23
|
+
if (!isWithinDirectory(resolvedProject, resolved)) {
|
|
24
|
+
throw toError(createError({
|
|
25
|
+
type: "api",
|
|
26
|
+
message: `[API] module path escapes project directory: ${modulePath}`,
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Node.js built-in module names — shared across the CJS shim, esbuild externals, and Deno rewrites. */
|
|
31
|
+
const NODE_BUILTINS = [
|
|
32
|
+
"assert",
|
|
33
|
+
"buffer",
|
|
34
|
+
"child_process",
|
|
35
|
+
"cluster",
|
|
36
|
+
"console",
|
|
37
|
+
"constants",
|
|
38
|
+
"crypto",
|
|
39
|
+
"dgram",
|
|
40
|
+
"dns",
|
|
41
|
+
"events",
|
|
42
|
+
"fs",
|
|
43
|
+
"http",
|
|
44
|
+
"http2",
|
|
45
|
+
"https",
|
|
46
|
+
"module",
|
|
47
|
+
"net",
|
|
48
|
+
"os",
|
|
49
|
+
"path",
|
|
50
|
+
"perf_hooks",
|
|
51
|
+
"process",
|
|
52
|
+
"querystring",
|
|
53
|
+
"readline",
|
|
54
|
+
"stream",
|
|
55
|
+
"string_decoder",
|
|
56
|
+
"timers",
|
|
57
|
+
"tls",
|
|
58
|
+
"tty",
|
|
59
|
+
"url",
|
|
60
|
+
"util",
|
|
61
|
+
"v8",
|
|
62
|
+
"vm",
|
|
63
|
+
"worker_threads",
|
|
64
|
+
"zlib",
|
|
65
|
+
];
|
|
66
|
+
async function readProjectDependencies(projectDir, fs) {
|
|
67
|
+
try {
|
|
68
|
+
const content = await fs.readTextFile(pathHelper.join(projectDir, "package.json"));
|
|
69
|
+
const pkg = JSON.parse(content);
|
|
70
|
+
return new Map(Object.entries(pkg.dependencies ?? {}));
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return new Map();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Generates a CJS module loader shim for compiled Deno binaries.
|
|
78
|
+
*
|
|
79
|
+
* In compiled binaries, `createRequire()` can resolve module paths and load
|
|
80
|
+
* built-in modules (fs, path, etc.), but cannot load CJS files from disk
|
|
81
|
+
* (loadMaybeCjs fails with "path not found"). This shim works around that
|
|
82
|
+
* limitation by using `Deno.readTextFileSync` to read CJS files and
|
|
83
|
+
* `new Function` to evaluate them in a proper CJS wrapper with require,
|
|
84
|
+
* exports, module, __filename, and __dirname bindings.
|
|
85
|
+
*/
|
|
86
|
+
function generateCompiledBinaryRequireShim(projectDir) {
|
|
87
|
+
const builtinSet = JSON.stringify(NODE_BUILTINS);
|
|
88
|
+
const safeProjectDir = JSON.stringify(projectDir + "/package.json");
|
|
89
|
+
const safeProjectRoot = JSON.stringify(pathHelper.resolve(projectDir));
|
|
90
|
+
return `
|
|
91
|
+
import { createRequire as __vf_createRequire } from "node:module";
|
|
92
|
+
import { dirname as __vf_dirname, resolve as __vf_resolve } from "node:path";
|
|
93
|
+
var __vf_builtinRequire = __vf_createRequire(${safeProjectDir});
|
|
94
|
+
var __vf_builtinSet = new Set(${builtinSet});
|
|
95
|
+
var __vf_projectRoot = ${safeProjectRoot};
|
|
96
|
+
var __vf_cache = Object.create(null);
|
|
97
|
+
function __vf_assertContained(resolved) {
|
|
98
|
+
var norm = __vf_resolve(resolved).replace(/\\\\/g, "/");
|
|
99
|
+
var root = __vf_projectRoot.replace(/\\\\/g, "/");
|
|
100
|
+
if (!norm.startsWith(root + "/") && norm !== root) {
|
|
101
|
+
throw new Error("CJS loader blocked path outside project: " + resolved);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function __vf_loadCjs(id, parentDir) {
|
|
105
|
+
if (id.startsWith("node:")) return __vf_builtinRequire(id);
|
|
106
|
+
if (__vf_builtinSet.has(id)) return __vf_builtinRequire(id);
|
|
107
|
+
var slashIdx = id.indexOf("/");
|
|
108
|
+
if (slashIdx > 0 && __vf_builtinSet.has(id.slice(0, slashIdx))) return __vf_builtinRequire(id);
|
|
109
|
+
var resolved;
|
|
110
|
+
if (id.startsWith(".") || id.startsWith("/")) {
|
|
111
|
+
resolved = __vf_resolve(parentDir, id);
|
|
112
|
+
if (!resolved.match(/\\.[a-zA-Z0-9]+$/)) {
|
|
113
|
+
var exts = [".js", ".cjs", ".json", "/index.js", "/index.cjs", "/index.json"];
|
|
114
|
+
for (var i = 0; i < exts.length; i++) {
|
|
115
|
+
try { Deno.statSync(resolved + exts[i]); resolved += exts[i]; break; } catch {}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
__vf_assertContained(resolved);
|
|
119
|
+
} else {
|
|
120
|
+
resolved = __vf_builtinRequire.resolve(id);
|
|
121
|
+
}
|
|
122
|
+
if (resolved in __vf_cache) return __vf_cache[resolved];
|
|
123
|
+
var code = Deno.readTextFileSync(resolved);
|
|
124
|
+
if (resolved.endsWith(".json")) {
|
|
125
|
+
var json = JSON.parse(code);
|
|
126
|
+
__vf_cache[resolved] = json;
|
|
127
|
+
return json;
|
|
128
|
+
}
|
|
129
|
+
var mod = { exports: {} };
|
|
130
|
+
__vf_cache[resolved] = mod.exports;
|
|
131
|
+
var dir = __vf_dirname(resolved);
|
|
132
|
+
var childReq = function(childId) { return __vf_loadCjs(childId, dir); };
|
|
133
|
+
childReq.resolve = function(childId) {
|
|
134
|
+
if (childId.startsWith(".") || childId.startsWith("/")) return __vf_resolve(dir, childId);
|
|
135
|
+
return __vf_builtinRequire.resolve(childId);
|
|
136
|
+
};
|
|
137
|
+
childReq.ensure = function(mods, cb) { cb(); };
|
|
138
|
+
var fn = new Function("exports", "require", "module", "__filename", "__dirname", "global", "globalThis", "Worker", code);
|
|
139
|
+
fn(mod.exports, childReq, mod, resolved, dir, globalThis, globalThis, undefined);
|
|
140
|
+
__vf_cache[resolved] = mod.exports;
|
|
141
|
+
return mod.exports;
|
|
142
|
+
}
|
|
143
|
+
function __vf_interopDefault(m) { return m && m.__esModule && m.default !== undefined ? m.default : m; }
|
|
144
|
+
var require = function(id) { return __vf_loadCjs(id, ${JSON.stringify(projectDir)}); };
|
|
145
|
+
require.resolve = function(id) { return __vf_builtinRequire.resolve(id); };
|
|
146
|
+
require.ensure = function(mods, cb) { cb(); };
|
|
147
|
+
`.trim();
|
|
148
|
+
}
|
|
149
|
+
function resolveExportEntry(entry) {
|
|
150
|
+
if (typeof entry === "string")
|
|
151
|
+
return entry;
|
|
152
|
+
if (entry && typeof entry === "object") {
|
|
153
|
+
const obj = entry;
|
|
154
|
+
// Prefer import > default > first string value
|
|
155
|
+
for (const key of ["import", "default"]) {
|
|
156
|
+
const val = obj[key];
|
|
157
|
+
if (typeof val === "string")
|
|
158
|
+
return val;
|
|
159
|
+
if (val && typeof val === "object") {
|
|
160
|
+
const nested = val;
|
|
161
|
+
if (typeof nested.default === "string")
|
|
162
|
+
return nested.default;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
export function toCjsDestructureBindings(bindings) {
|
|
169
|
+
const inner = bindings.trim().replace(/^\{\s*/, "").replace(/\s*\}$/, "");
|
|
170
|
+
if (!inner)
|
|
171
|
+
return "{}";
|
|
172
|
+
const converted = inner
|
|
173
|
+
.split(",")
|
|
174
|
+
.map((part) => part.trim())
|
|
175
|
+
.filter(Boolean)
|
|
176
|
+
.map((part) => {
|
|
177
|
+
const aliasMatch = part.match(/^([A-Za-z_$][\w$]*)\s+as\s+([A-Za-z_$][\w$]*)$/);
|
|
178
|
+
if (aliasMatch)
|
|
179
|
+
return `${aliasMatch[1]}: ${aliasMatch[2]}`;
|
|
180
|
+
return part;
|
|
181
|
+
});
|
|
182
|
+
return `{ ${converted.join(", ")} }`;
|
|
183
|
+
}
|
|
15
184
|
const FILE_EXTENSIONS = ["", ".ts", ".tsx", ".js", ".jsx", ".mjs"];
|
|
16
185
|
const EXT_TO_LOADER = {
|
|
17
186
|
tsx: "tsx",
|
|
@@ -27,6 +196,7 @@ export function loadHandlerModule(options) {
|
|
|
27
196
|
return withSpan("api.loadHandlerModule", async () => {
|
|
28
197
|
const { projectDir, modulePath, adapter, config } = options;
|
|
29
198
|
const fs = createFileSystem();
|
|
199
|
+
validateModulePath(modulePath, projectDir);
|
|
30
200
|
try {
|
|
31
201
|
const module = await loadModule({ modulePath, projectDir, adapter, fs, config });
|
|
32
202
|
return extractAPIRouteHandlers(module);
|
|
@@ -118,12 +288,16 @@ function createImportMapPlugin(projectDir, adapter, config) {
|
|
|
118
288
|
const absolutePath = pathHelper.isAbsolute(resolvedPath)
|
|
119
289
|
? resolvedPath
|
|
120
290
|
: pathHelper.resolve(projectDir, resolvedPath);
|
|
291
|
+
if (!isWithinDirectory(pathHelper.resolve(projectDir), absolutePath)) {
|
|
292
|
+
logger.error(`[API] Import map entry escapes project directory: ${args.path} -> ${absolutePath}`);
|
|
293
|
+
return { errors: [{ text: `Import map path escapes project: ${args.path}` }] };
|
|
294
|
+
}
|
|
121
295
|
logger.debug(`Import map resolved: ${args.path} -> ${absolutePath}`);
|
|
122
296
|
return { path: absolutePath, namespace: "import-map" };
|
|
123
297
|
});
|
|
124
298
|
build.onLoad({ filter: /.*/, namespace: "import-map" }, wrapWithCurrentContext(async (args) => {
|
|
125
299
|
try {
|
|
126
|
-
const { filePath, contents } = await readFileWithExtensions(adapter, args.path, FILE_EXTENSIONS);
|
|
300
|
+
const { filePath, contents } = await readFileWithExtensions(adapter, args.path, FILE_EXTENSIONS, projectDir);
|
|
127
301
|
return {
|
|
128
302
|
contents,
|
|
129
303
|
loader: getLoaderForFile(filePath),
|
|
@@ -140,7 +314,7 @@ function createImportMapPlugin(projectDir, adapter, config) {
|
|
|
140
314
|
};
|
|
141
315
|
}
|
|
142
316
|
/** Resolves relative imports through the adapter's virtual FS for remote projects. */
|
|
143
|
-
function createAdapterResolvePlugin(adapter) {
|
|
317
|
+
function createAdapterResolvePlugin(adapter, projectDir) {
|
|
144
318
|
return {
|
|
145
319
|
name: "vf-adapter-resolve",
|
|
146
320
|
setup(build) {
|
|
@@ -151,6 +325,12 @@ function createAdapterResolvePlugin(adapter) {
|
|
|
151
325
|
if (!baseDir)
|
|
152
326
|
return undefined;
|
|
153
327
|
const absolutePath = pathHelper.resolve(baseDir, args.path);
|
|
328
|
+
if (!isWithinDirectory(pathHelper.resolve(projectDir), absolutePath)) {
|
|
329
|
+
logger.error(`[API] Adapter resolve path escapes project: ${args.path} -> ${absolutePath}`);
|
|
330
|
+
return {
|
|
331
|
+
errors: [{ text: `Relative import escapes project: ${args.path}` }],
|
|
332
|
+
};
|
|
333
|
+
}
|
|
154
334
|
logger.debug(`[API] Adapter resolve: ${args.path} (from ${args.importer || "stdin"}) -> ${absolutePath}`);
|
|
155
335
|
return { path: absolutePath, namespace: "vf-adapter" };
|
|
156
336
|
});
|
|
@@ -161,7 +341,7 @@ function createAdapterResolvePlugin(adapter) {
|
|
|
161
341
|
// cannot resolve the per-project adapter and all file reads fail silently.
|
|
162
342
|
build.onLoad({ filter: /.*/, namespace: "vf-adapter" }, wrapWithCurrentContext(async (args) => {
|
|
163
343
|
try {
|
|
164
|
-
const { filePath, contents } = await readFileWithExtensions(adapter, args.path, FILE_EXTENSIONS);
|
|
344
|
+
const { filePath, contents } = await readFileWithExtensions(adapter, args.path, FILE_EXTENSIONS, projectDir);
|
|
165
345
|
return {
|
|
166
346
|
contents,
|
|
167
347
|
loader: getLoaderForFile(filePath),
|
|
@@ -179,7 +359,7 @@ function createAdapterResolvePlugin(adapter) {
|
|
|
179
359
|
}
|
|
180
360
|
function loadAndTranspileModule(modulePath, projectDir, adapter, fs, config) {
|
|
181
361
|
return withSpan("api.loadAndTranspileModule", async () => {
|
|
182
|
-
const { filePath: resolvedPath, contents: source } = await readFileWithExtensions(adapter, modulePath, FILE_EXTENSIONS);
|
|
362
|
+
const { filePath: resolvedPath, contents: source } = await readFileWithExtensions(adapter, modulePath, FILE_EXTENSIONS, projectDir);
|
|
183
363
|
if (!source) {
|
|
184
364
|
throw toError(createError({
|
|
185
365
|
type: "file",
|
|
@@ -189,7 +369,43 @@ function loadAndTranspileModule(modulePath, projectDir, adapter, fs, config) {
|
|
|
189
369
|
const loader = getEsbuildLoader(resolvedPath);
|
|
190
370
|
const allowedHosts = await loadSecurityConfig(projectDir, adapter);
|
|
191
371
|
validateHTTPImports(source, allowedHosts);
|
|
372
|
+
const allDeps = await readProjectDependencies(projectDir, fs);
|
|
373
|
+
// Filter out framework-managed packages from user deps. These are already
|
|
374
|
+
// handled by the framework's own external/rewrite logic and should not be
|
|
375
|
+
// treated as user npm packages.
|
|
376
|
+
const frameworkPackages = new Set(["ai", "zod", "veryfront", "react", "react-dom", "path"]);
|
|
377
|
+
const frameworkPrefixes = ["@ai-sdk/", "@opentelemetry/", "node:", "veryfront/"];
|
|
378
|
+
const userDeps = new Map();
|
|
379
|
+
for (const [name, version] of allDeps) {
|
|
380
|
+
if (frameworkPackages.has(name))
|
|
381
|
+
continue;
|
|
382
|
+
if (frameworkPrefixes.some((p) => name.startsWith(p)))
|
|
383
|
+
continue;
|
|
384
|
+
userDeps.set(name, version);
|
|
385
|
+
}
|
|
386
|
+
// Always externalize user npm dependencies. The bundled handler is loaded
|
|
387
|
+
// from a temp file and user deps are resolved at runtime:
|
|
388
|
+
// - Node.js: via file:// URLs pointing to node_modules
|
|
389
|
+
// - Deno (compiled or not): via createRequire or npm: specifiers
|
|
390
|
+
// Bundling CJS deps inline (especially complex ones like pdf-parse/pdf.js)
|
|
391
|
+
// breaks their internal global state management during esbuild's CJS→ESM
|
|
392
|
+
// conversion.
|
|
393
|
+
const userExternals = [];
|
|
394
|
+
for (const name of userDeps.keys()) {
|
|
395
|
+
userExternals.push(name, `${name}/*`);
|
|
396
|
+
}
|
|
192
397
|
const { build } = await import("esbuild");
|
|
398
|
+
// Many npm packages use CJS require() for Node built-ins (e.g. require('fs')).
|
|
399
|
+
// When esbuild bundles CJS into ESM output, these become __require() shims that
|
|
400
|
+
// fail at runtime. Inject a createRequire-based shim so require() works in ESM.
|
|
401
|
+
// Use projectDir as the resolve base so require() finds the project's node_modules.
|
|
402
|
+
const safeProjectDir = JSON.stringify(projectDir + "/package.json");
|
|
403
|
+
const requireShim = isDeno && isCompiledBinary()
|
|
404
|
+
? generateCompiledBinaryRequireShim(projectDir)
|
|
405
|
+
: [
|
|
406
|
+
'import { createRequire as __vf_createRequire } from "node:module";',
|
|
407
|
+
`var require = __vf_createRequire(${safeProjectDir});`,
|
|
408
|
+
].join("\n");
|
|
193
409
|
const result = await build({
|
|
194
410
|
bundle: true,
|
|
195
411
|
write: false,
|
|
@@ -199,6 +415,7 @@ function loadAndTranspileModule(modulePath, projectDir, adapter, fs, config) {
|
|
|
199
415
|
jsx: "automatic",
|
|
200
416
|
jsxImportSource: "react",
|
|
201
417
|
resolveExtensions: [".ts", ".tsx", ".js", ".jsx", ".mjs"],
|
|
418
|
+
banner: { js: requireShim },
|
|
202
419
|
external: [
|
|
203
420
|
"ai",
|
|
204
421
|
"ai/*",
|
|
@@ -206,10 +423,11 @@ function loadAndTranspileModule(modulePath, projectDir, adapter, fs, config) {
|
|
|
206
423
|
"@ai-sdk/*",
|
|
207
424
|
"zod",
|
|
208
425
|
"node:*",
|
|
426
|
+
...NODE_BUILTINS,
|
|
209
427
|
"veryfront",
|
|
210
428
|
"veryfront/*",
|
|
211
429
|
"@opentelemetry/*",
|
|
212
|
-
|
|
430
|
+
...userExternals,
|
|
213
431
|
],
|
|
214
432
|
stdin: {
|
|
215
433
|
contents: source,
|
|
@@ -219,7 +437,7 @@ function loadAndTranspileModule(modulePath, projectDir, adapter, fs, config) {
|
|
|
219
437
|
},
|
|
220
438
|
plugins: [
|
|
221
439
|
createImportMapPlugin(projectDir, adapter, config),
|
|
222
|
-
createAdapterResolvePlugin(adapter),
|
|
440
|
+
createAdapterResolvePlugin(adapter, projectDir),
|
|
223
441
|
createHTTPPlugin(allowedHosts),
|
|
224
442
|
],
|
|
225
443
|
});
|
|
@@ -233,12 +451,22 @@ function loadAndTranspileModule(modulePath, projectDir, adapter, fs, config) {
|
|
|
233
451
|
logger.info(`built handler ${resolvedPath}`);
|
|
234
452
|
const js = result.outputFiles?.[0]?.text ?? "export {}";
|
|
235
453
|
logger.debug(`transpiled size ${js.length} bytes`);
|
|
236
|
-
return loadModuleFromCode(js, projectDir, fs);
|
|
454
|
+
return loadModuleFromCode(js, projectDir, fs, userDeps);
|
|
237
455
|
}, { "api.modulePath": modulePath, "api.projectDir": projectDir });
|
|
238
456
|
}
|
|
239
|
-
async function readFileWithExtensions(adapter, basePath, extensions) {
|
|
457
|
+
async function readFileWithExtensions(adapter, basePath, extensions, projectDir) {
|
|
458
|
+
const resolvedProjectDir = projectDir ? pathHelper.resolve(projectDir) : undefined;
|
|
240
459
|
for (const ext of extensions) {
|
|
241
460
|
const filePath = ext ? basePath + ext : basePath;
|
|
461
|
+
if (resolvedProjectDir) {
|
|
462
|
+
const resolved = pathHelper.resolve(filePath);
|
|
463
|
+
if (!isWithinDirectory(resolvedProjectDir, resolved)) {
|
|
464
|
+
throw toError(createError({
|
|
465
|
+
type: "api",
|
|
466
|
+
message: `[API] file path escapes project directory: ${filePath}`,
|
|
467
|
+
}));
|
|
468
|
+
}
|
|
469
|
+
}
|
|
242
470
|
try {
|
|
243
471
|
const contents = await adapter.fs.readFile(filePath);
|
|
244
472
|
return { filePath, contents };
|
|
@@ -252,10 +480,10 @@ async function readFileWithExtensions(adapter, basePath, extensions) {
|
|
|
252
480
|
message: `File not found: ${basePath}`,
|
|
253
481
|
}));
|
|
254
482
|
}
|
|
255
|
-
async function loadModuleFromCode(code, projectDir, fs) {
|
|
483
|
+
async function loadModuleFromCode(code, projectDir, fs, userDeps = new Map()) {
|
|
256
484
|
const tempDir = await fs.makeTempDir({ prefix: "vf-api-" });
|
|
257
485
|
const tempFile = pathHelper.join(tempDir, "handler.mjs");
|
|
258
|
-
const transformedCode = await rewriteExternalImports(code, projectDir, fs);
|
|
486
|
+
const transformedCode = await rewriteExternalImports(code, projectDir, fs, userDeps);
|
|
259
487
|
// In compiled Deno binaries, external modules loaded from temp files cannot
|
|
260
488
|
// resolve "veryfront" since the source is embedded in the binary's virtual FS.
|
|
261
489
|
// Write runtime shims: a root shim for `from "veryfront"` and per-subpath shims
|
|
@@ -276,6 +504,8 @@ async function loadModuleFromCode(code, projectDir, fs) {
|
|
|
276
504
|
await fs.writeTextFile(pathHelper.join(tempDir, shimName), shimCode);
|
|
277
505
|
}
|
|
278
506
|
}
|
|
507
|
+
// Note: user npm dependencies are externalized and loaded at runtime via
|
|
508
|
+
// a custom CJS loader (see generateCompiledBinaryRequireShim), no shims needed.
|
|
279
509
|
}
|
|
280
510
|
await fs.writeTextFile(tempFile, transformedCode);
|
|
281
511
|
try {
|
|
@@ -290,7 +520,7 @@ async function loadModuleFromCode(code, projectDir, fs) {
|
|
|
290
520
|
await fs.remove(tempDir, { recursive: true });
|
|
291
521
|
}
|
|
292
522
|
}
|
|
293
|
-
async function rewriteExternalImports(code, projectDir, fs) {
|
|
523
|
+
async function rewriteExternalImports(code, projectDir, fs, userDeps = new Map()) {
|
|
294
524
|
let transformed = code;
|
|
295
525
|
if (isNode) {
|
|
296
526
|
try {
|
|
@@ -303,13 +533,7 @@ async function rewriteExternalImports(code, projectDir, fs) {
|
|
|
303
533
|
const pkgJson = JSON.parse(await fs.readTextFile(packageJsonPath));
|
|
304
534
|
let entryPoint;
|
|
305
535
|
if (pkgJson.exports) {
|
|
306
|
-
|
|
307
|
-
if (typeof dotExport === "string")
|
|
308
|
-
entryPoint = dotExport;
|
|
309
|
-
else if (dotExport?.import)
|
|
310
|
-
entryPoint = dotExport.import;
|
|
311
|
-
else if (dotExport?.default)
|
|
312
|
-
entryPoint = dotExport.default;
|
|
536
|
+
entryPoint = resolveExportEntry(pkgJson.exports["."]);
|
|
313
537
|
}
|
|
314
538
|
entryPoint ||= pkgJson.module || pkgJson.main || "index.js";
|
|
315
539
|
if (!entryPoint)
|
|
@@ -330,24 +554,47 @@ async function rewriteExternalImports(code, projectDir, fs) {
|
|
|
330
554
|
"@ai-sdk/provider",
|
|
331
555
|
"@ai-sdk/provider-utils",
|
|
332
556
|
];
|
|
557
|
+
for (const name of userDeps.keys()) {
|
|
558
|
+
if (!externalPackagesToResolve.includes(name)) {
|
|
559
|
+
externalPackagesToResolve.push(name);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
333
562
|
for (const pkg of externalPackagesToResolve) {
|
|
334
563
|
const escapedPkg = pkg.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
335
|
-
|
|
336
|
-
const
|
|
564
|
+
// Match both exact imports (from "pkg") and subpath imports (from "pkg/sub")
|
|
565
|
+
const staticImportRegex = new RegExp(`from\\s*["']${escapedPkg}(/[^"']*)?["']`, "g");
|
|
566
|
+
const dynamicImportRegex = new RegExp(`import\\s*\\(\\s*["']${escapedPkg}(/[^"']*)?["']\\s*\\)`, "g");
|
|
337
567
|
const needsStatic = staticImportRegex.test(transformed);
|
|
568
|
+
staticImportRegex.lastIndex = 0;
|
|
338
569
|
const needsDynamic = dynamicImportRegex.test(transformed);
|
|
570
|
+
dynamicImportRegex.lastIndex = 0;
|
|
339
571
|
if (!needsStatic && !needsDynamic)
|
|
340
572
|
continue;
|
|
573
|
+
const packageDir = pathToFileURL(pathHelper.join(projectDir, "node_modules", pkg)).href;
|
|
341
574
|
const resolvedUrl = await resolvePackageToFileUrl(pkg);
|
|
342
|
-
if (!resolvedUrl)
|
|
343
|
-
continue;
|
|
344
575
|
if (needsStatic) {
|
|
345
|
-
transformed = transformed.replace(staticImportRegex,
|
|
346
|
-
|
|
576
|
+
transformed = transformed.replace(staticImportRegex, (_, subpath) => {
|
|
577
|
+
if (subpath) {
|
|
578
|
+
const subUrl = `${packageDir}${subpath}`;
|
|
579
|
+
logger.debug(`Resolved ${pkg}${subpath} -> ${subUrl}`);
|
|
580
|
+
return `from "${subUrl}"`;
|
|
581
|
+
}
|
|
582
|
+
if (!resolvedUrl)
|
|
583
|
+
return `from "${pkg}"`;
|
|
584
|
+
logger.debug(`Resolved ${pkg} -> ${resolvedUrl}`);
|
|
585
|
+
return `from "${resolvedUrl}"`;
|
|
586
|
+
});
|
|
347
587
|
}
|
|
348
588
|
if (needsDynamic) {
|
|
349
|
-
transformed = transformed.replace(dynamicImportRegex,
|
|
350
|
-
|
|
589
|
+
transformed = transformed.replace(dynamicImportRegex, (_, subpath) => {
|
|
590
|
+
if (subpath) {
|
|
591
|
+
const subUrl = `${packageDir}${subpath}`;
|
|
592
|
+
return `import("${subUrl}")`;
|
|
593
|
+
}
|
|
594
|
+
if (!resolvedUrl)
|
|
595
|
+
return `import("${pkg}")`;
|
|
596
|
+
return `import("${resolvedUrl}")`;
|
|
597
|
+
});
|
|
351
598
|
}
|
|
352
599
|
}
|
|
353
600
|
const vfPackagePath = pathHelper.join(projectDir, "node_modules", "veryfront");
|
|
@@ -442,6 +689,69 @@ async function rewriteExternalImports(code, projectDir, fs) {
|
|
|
442
689
|
for (const { pattern, replacement } of rewrites) {
|
|
443
690
|
transformed = transformed.replace(pattern, replacement);
|
|
444
691
|
}
|
|
692
|
+
// Rewrite bare Node.js built-in imports to node: prefix for Deno compatibility.
|
|
693
|
+
// npm packages often use require('fs') / from "fs" without the node: prefix.
|
|
694
|
+
for (const mod of NODE_BUILTINS) {
|
|
695
|
+
const escaped = mod.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
696
|
+
transformed = transformed.replace(new RegExp(`from\\s+["']${escaped}["']`, "g"), `from "node:${mod}"`);
|
|
697
|
+
transformed = transformed.replace(new RegExp(`import\\s*\\(\\s*["']${escaped}["']\\s*\\)`, "g"), `import("node:${mod}")`);
|
|
698
|
+
}
|
|
699
|
+
// Rewrite user-installed npm dependencies.
|
|
700
|
+
// In non-compiled Deno: use npm: specifiers (resolved by Deno's npm support).
|
|
701
|
+
// In compiled binaries: use the createRequire-based `require` shim (already
|
|
702
|
+
// injected by the esbuild banner) to load CJS packages from node_modules,
|
|
703
|
+
// since npm: specifiers only work for packages embedded at compile time.
|
|
704
|
+
if (isCompiledBinary()) {
|
|
705
|
+
for (const name of userDeps.keys()) {
|
|
706
|
+
const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
707
|
+
// Default imports: import foo from "pkg" → const foo = __vf_interopDefault(require("pkg"))
|
|
708
|
+
// interopDefault unwraps .default for ESM packages transpiled to CJS
|
|
709
|
+
transformed = transformed.replace(new RegExp(`import\\s+(\\w+)\\s+from\\s+["']${escaped}["']`, "g"), (_, localName) => `const ${localName} = __vf_interopDefault(require("${name}"))`);
|
|
710
|
+
// Named imports: import { a, b } from "pkg" → const { a, b } = require("pkg")
|
|
711
|
+
transformed = transformed.replace(new RegExp(`import\\s+(\\{[^}]+\\})\\s+from\\s+["']${escaped}["']`, "g"), (_, bindings) => `const ${toCjsDestructureBindings(bindings)} = require("${name}")`);
|
|
712
|
+
// Namespace imports: import * as foo from "pkg" → const foo = require("pkg")
|
|
713
|
+
transformed = transformed.replace(new RegExp(`import\\s+\\*\\s+as\\s+(\\w+)\\s+from\\s+["']${escaped}["']`, "g"), (_, localName) => `const ${localName} = require("${name}")`);
|
|
714
|
+
// Mixed imports: import foo, { bar } from "pkg"
|
|
715
|
+
transformed = transformed.replace(new RegExp(`import\\s+(\\w+)\\s*,\\s*(\\{[^}]+\\})\\s+from\\s+["']${escaped}["']`, "g"), (_, defaultName, bindings) => {
|
|
716
|
+
const tmp = `__vf_tmp_${defaultName}`;
|
|
717
|
+
return `const ${tmp} = require("${name}"); const ${defaultName} = __vf_interopDefault(${tmp}); const ${toCjsDestructureBindings(bindings)} = ${tmp}`;
|
|
718
|
+
});
|
|
719
|
+
// Subpath static imports: from "pkg/sub" → require("pkg/sub")
|
|
720
|
+
transformed = transformed.replace(new RegExp(`import\\s+(\\w+|\\*\\s+as\\s+\\w+|\\{[^}]+\\})\\s+from\\s+["']${escaped}(/[^"']+)["']`, "g"), (_, binding, subpath) => {
|
|
721
|
+
const trimmedBinding = String(binding).trim();
|
|
722
|
+
if (trimmedBinding.startsWith("{")) {
|
|
723
|
+
return `const ${toCjsDestructureBindings(trimmedBinding)} = require("${name}${subpath}")`;
|
|
724
|
+
}
|
|
725
|
+
const name_ = trimmedBinding.startsWith("*")
|
|
726
|
+
? trimmedBinding.replace(/\*\s+as\s+/, "")
|
|
727
|
+
: trimmedBinding;
|
|
728
|
+
return `const ${name_} = require("${name}${subpath}")`;
|
|
729
|
+
});
|
|
730
|
+
// Dynamic imports: import("pkg") → Promise.resolve(require("pkg"))
|
|
731
|
+
transformed = transformed.replace(new RegExp(`import\\s*\\(\\s*["']${escaped}(/[^"']*)?["']\\s*\\)`, "g"), (_, subpath) => `Promise.resolve(require("${name}${subpath || ""}"))`);
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
else {
|
|
735
|
+
for (const [name, version] of userDeps) {
|
|
736
|
+
const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
737
|
+
// Resolve exact installed version from node_modules (falls back to range)
|
|
738
|
+
let resolvedVersion = version;
|
|
739
|
+
try {
|
|
740
|
+
const pkgPath = pathHelper.join(projectDir, "node_modules", name, "package.json");
|
|
741
|
+
const pkgContent = await fs.readTextFile(pkgPath);
|
|
742
|
+
const pkg = JSON.parse(pkgContent);
|
|
743
|
+
if (pkg.version)
|
|
744
|
+
resolvedVersion = pkg.version;
|
|
745
|
+
}
|
|
746
|
+
catch {
|
|
747
|
+
// Fall back to declared range
|
|
748
|
+
}
|
|
749
|
+
// Static: from "pkg" and from "pkg/sub"
|
|
750
|
+
transformed = transformed.replace(new RegExp(`from\\s+["']${escaped}(/[^"']*)?["']`, "g"), (_, subpath) => `from "npm:${name}@${resolvedVersion}${subpath || ""}"`);
|
|
751
|
+
// Dynamic: import("pkg") and import("pkg/sub")
|
|
752
|
+
transformed = transformed.replace(new RegExp(`import\\s*\\(\\s*["']${escaped}(/[^"']*)?["']\\s*\\)`, "g"), (_, subpath) => `import("npm:${name}@${resolvedVersion}${subpath || ""}")`);
|
|
753
|
+
}
|
|
754
|
+
}
|
|
445
755
|
// In compiled binaries, "veryfront" resolves to embedded source that can't be
|
|
446
756
|
// imported from external temp files. Rewrite to use local runtime shims.
|
|
447
757
|
if (isCompiledBinary()) {
|
|
@@ -496,11 +806,21 @@ function extractSubpathsFromCode(code) {
|
|
|
496
806
|
*/
|
|
497
807
|
async function registerVfModules(subpaths) {
|
|
498
808
|
const modules = (dntShim.dntGlobalThis.__vfModules ?? {});
|
|
809
|
+
// __VERYFRONT_MODULES__ is populated by the discovery transpiler via hash
|
|
810
|
+
// imports (#veryfront/...) which resolve correctly in compiled binaries.
|
|
811
|
+
// Check it first before attempting bare specifier dynamic imports.
|
|
812
|
+
const discoveryModules = dntShim.dntGlobalThis.__VERYFRONT_MODULES__;
|
|
499
813
|
for (const subpath of subpaths) {
|
|
500
814
|
if (modules[subpath])
|
|
501
815
|
continue;
|
|
816
|
+
const specifier = `veryfront/${subpath}`;
|
|
817
|
+
const fromDiscovery = discoveryModules?.[specifier];
|
|
818
|
+
if (fromDiscovery) {
|
|
819
|
+
modules[subpath] = fromDiscovery;
|
|
820
|
+
logger.debug(`[API] Registered module ${specifier} from discovery globals`);
|
|
821
|
+
continue;
|
|
822
|
+
}
|
|
502
823
|
try {
|
|
503
|
-
const specifier = `veryfront/${subpath}`;
|
|
504
824
|
modules[subpath] = await import(specifier);
|
|
505
825
|
logger.debug(`[API] Registered module ${specifier} on globalThis`);
|
|
506
826
|
}
|
|
@@ -56,25 +56,6 @@ export declare function toOpenAPIPath(pattern: string): string;
|
|
|
56
56
|
* ```
|
|
57
57
|
*/
|
|
58
58
|
export declare function extractPathParams(pattern: string): PathParam[];
|
|
59
|
-
/**
|
|
60
|
-
* Convert file path to route pattern.
|
|
61
|
-
*
|
|
62
|
-
* Transforms a file system path to an API route pattern.
|
|
63
|
-
*
|
|
64
|
-
* @param filePath - File path relative to pages/api or app directory
|
|
65
|
-
* @param routePrefix - Prefix to add (e.g., "/api")
|
|
66
|
-
* @returns Route pattern
|
|
67
|
-
*
|
|
68
|
-
* @example
|
|
69
|
-
* ```typescript
|
|
70
|
-
* filePathToPattern("users/[id]/route.ts", "/api")
|
|
71
|
-
* // → "/api/users/[id]"
|
|
72
|
-
*
|
|
73
|
-
* filePathToPattern("users/[id].ts", "/api")
|
|
74
|
-
* // → "/api/users/[id]"
|
|
75
|
-
* ```
|
|
76
|
-
*/
|
|
77
|
-
export declare function filePathToPattern(filePath: string, routePrefix?: string): string;
|
|
78
59
|
/**
|
|
79
60
|
* Generate a unique operation ID from method and path.
|
|
80
61
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../../../../src/src/routing/api/openapi/path-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,uEAAuE;IACvE,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYrD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CAyB9D;AAED
|
|
1
|
+
{"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../../../../src/src/routing/api/openapi/path-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,uEAAuE;IACvE,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYrD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CAyB9D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAYxE"}
|
|
@@ -71,40 +71,6 @@ export function extractPathParams(pattern) {
|
|
|
71
71
|
}
|
|
72
72
|
return params;
|
|
73
73
|
}
|
|
74
|
-
/**
|
|
75
|
-
* Convert file path to route pattern.
|
|
76
|
-
*
|
|
77
|
-
* Transforms a file system path to an API route pattern.
|
|
78
|
-
*
|
|
79
|
-
* @param filePath - File path relative to pages/api or app directory
|
|
80
|
-
* @param routePrefix - Prefix to add (e.g., "/api")
|
|
81
|
-
* @returns Route pattern
|
|
82
|
-
*
|
|
83
|
-
* @example
|
|
84
|
-
* ```typescript
|
|
85
|
-
* filePathToPattern("users/[id]/route.ts", "/api")
|
|
86
|
-
* // → "/api/users/[id]"
|
|
87
|
-
*
|
|
88
|
-
* filePathToPattern("users/[id].ts", "/api")
|
|
89
|
-
* // → "/api/users/[id]"
|
|
90
|
-
* ```
|
|
91
|
-
*/
|
|
92
|
-
export function filePathToPattern(filePath, routePrefix = "") {
|
|
93
|
-
let pattern = filePath
|
|
94
|
-
.replace(/\.(ts|tsx|js|jsx)$/, "")
|
|
95
|
-
.replace(/\/route$/, "")
|
|
96
|
-
.replace(/\/index$/, "");
|
|
97
|
-
if (!pattern.startsWith("/"))
|
|
98
|
-
pattern = `/${pattern}`;
|
|
99
|
-
if (routePrefix && !pattern.startsWith(routePrefix)) {
|
|
100
|
-
pattern = `${routePrefix}${pattern}`;
|
|
101
|
-
}
|
|
102
|
-
pattern = pattern.replace(/\/+/g, "/");
|
|
103
|
-
if (pattern.length > 1 && pattern.endsWith("/")) {
|
|
104
|
-
pattern = pattern.slice(0, -1);
|
|
105
|
-
}
|
|
106
|
-
return pattern;
|
|
107
|
-
}
|
|
108
74
|
/**
|
|
109
75
|
* Generate a unique operation ID from method and path.
|
|
110
76
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-generator.d.ts","sourceRoot":"","sources":["../../../../../src/src/routing/api/openapi/spec-generator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,yBAAyB,CAAC;AAEzE,OAAO,
|
|
1
|
+
{"version":3,"file":"spec-generator.d.ts","sourceRoot":"","sources":["../../../../../src/src/routing/api/openapi/spec-generator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,yBAAyB,CAAC;AAEzE,OAAO,EAOL,KAAK,WAAW,EAEjB,MAAM,YAAY,CAAC;AAUpB,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,WAAW,CAAC,CAkCtB;AAmID,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAEpD"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* @module routing/api/openapi/spec-generator
|
|
7
7
|
*/
|
|
8
8
|
import { loadHandlerModule } from "../module-loader/loader.js";
|
|
9
|
-
import { OPENAPI_METADATA, } from "./types.js";
|
|
9
|
+
import { getDefaultStatusDescription, OPENAPI_METADATA, } from "./types.js";
|
|
10
10
|
import { extractPathParams, generateOperationId, toOpenAPIPath } from "./path-utils.js";
|
|
11
11
|
import { logger as baseLogger } from "../../../utils/index.js";
|
|
12
12
|
const logger = baseLogger.component("open-api");
|
|
@@ -181,21 +181,3 @@ function toYaml(obj, indent) {
|
|
|
181
181
|
}
|
|
182
182
|
return String(obj);
|
|
183
183
|
}
|
|
184
|
-
function getDefaultStatusDescription(statusCode) {
|
|
185
|
-
const descriptions = {
|
|
186
|
-
200: "Successful response",
|
|
187
|
-
201: "Resource created",
|
|
188
|
-
204: "No content",
|
|
189
|
-
400: "Bad request",
|
|
190
|
-
401: "Unauthorized",
|
|
191
|
-
403: "Forbidden",
|
|
192
|
-
404: "Not found",
|
|
193
|
-
409: "Conflict",
|
|
194
|
-
422: "Unprocessable entity",
|
|
195
|
-
429: "Too many requests",
|
|
196
|
-
500: "Internal server error",
|
|
197
|
-
502: "Bad gateway",
|
|
198
|
-
503: "Service unavailable",
|
|
199
|
-
};
|
|
200
|
-
return descriptions[statusCode] || `Response with status ${statusCode}`;
|
|
201
|
-
}
|