create-relkit 0.7.2 → 0.7.6
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/create-capabilities.d.ts +34 -0
- package/dist/create-capabilities.d.ts.map +1 -0
- package/dist/create-capabilities.js +137 -0
- package/dist/create-capabilities.js.map +1 -0
- package/dist/create-capabilities.types.d.ts +55 -0
- package/dist/create-capabilities.types.d.ts.map +1 -0
- package/dist/create-capabilities.types.js +2 -0
- package/dist/create-capabilities.types.js.map +1 -0
- package/dist/create-resolver.d.ts.map +1 -1
- package/dist/create-resolver.js +28 -6
- package/dist/create-resolver.js.map +1 -1
- package/dist/domain-artifact.d.ts.map +1 -1
- package/dist/domain-artifact.js +11 -3
- package/dist/domain-artifact.js.map +1 -1
- package/dist/domain-planning.d.ts +5 -0
- package/dist/domain-planning.d.ts.map +1 -1
- package/dist/domain-planning.js +25 -16
- package/dist/domain-planning.js.map +1 -1
- package/dist/generate-deployment-manifest.d.ts +10 -0
- package/dist/generate-deployment-manifest.d.ts.map +1 -0
- package/dist/generate-deployment-manifest.js +56 -0
- package/dist/generate-deployment-manifest.js.map +1 -0
- package/dist/generate-deployment.d.ts +2 -3
- package/dist/generate-deployment.d.ts.map +1 -1
- package/dist/generate-deployment.js +6 -47
- package/dist/generate-deployment.js.map +1 -1
- package/dist/generate-examples.d.ts +11 -0
- package/dist/generate-examples.d.ts.map +1 -0
- package/dist/generate-examples.js +28 -0
- package/dist/generate-examples.js.map +1 -0
- package/dist/generate-files-utilities.d.ts +1 -8
- package/dist/generate-files-utilities.d.ts.map +1 -1
- package/dist/generate-files-utilities.js +5 -19
- package/dist/generate-files-utilities.js.map +1 -1
- package/dist/generate-output.d.ts +2 -1
- package/dist/generate-output.d.ts.map +1 -1
- package/dist/generate-output.js +19 -37
- package/dist/generate-output.js.map +1 -1
- package/dist/generate-output.schemas.d.ts +34 -0
- package/dist/generate-output.schemas.d.ts.map +1 -0
- package/dist/generate-output.schemas.js +33 -0
- package/dist/generate-output.schemas.js.map +1 -0
- package/dist/generate-output.types.d.ts +2 -0
- package/dist/generate-output.types.d.ts.map +1 -1
- package/dist/generate-preparation.d.ts +26 -0
- package/dist/generate-preparation.d.ts.map +1 -0
- package/dist/generate-preparation.js +83 -0
- package/dist/generate-preparation.js.map +1 -0
- package/dist/generate-result.d.ts +34 -0
- package/dist/generate-result.d.ts.map +1 -0
- package/dist/generate-result.js +41 -0
- package/dist/generate-result.js.map +1 -0
- package/dist/generate-stage.d.ts +21 -0
- package/dist/generate-stage.d.ts.map +1 -0
- package/dist/generate-stage.js +52 -0
- package/dist/generate-stage.js.map +1 -0
- package/dist/generate-stage.types.d.ts +11 -0
- package/dist/generate-stage.types.d.ts.map +1 -0
- package/dist/generate-stage.types.js +2 -0
- package/dist/generate-stage.types.js.map +1 -0
- package/dist/generate-workflow.d.ts +10 -7
- package/dist/generate-workflow.d.ts.map +1 -1
- package/dist/generate-workflow.js +22 -101
- package/dist/generate-workflow.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/project-discovery-artifacts.d.ts +15 -0
- package/dist/project-discovery-artifacts.d.ts.map +1 -0
- package/dist/project-discovery-artifacts.js +107 -0
- package/dist/project-discovery-artifacts.js.map +1 -0
- package/dist/project-discovery-artifacts.types.d.ts +22 -0
- package/dist/project-discovery-artifacts.types.d.ts.map +1 -0
- package/dist/project-discovery-artifacts.types.js +2 -0
- package/dist/project-discovery-artifacts.types.js.map +1 -0
- package/dist/project-discovery-facts.d.ts +8 -9
- package/dist/project-discovery-facts.d.ts.map +1 -1
- package/dist/project-discovery-facts.js +29 -135
- package/dist/project-discovery-facts.js.map +1 -1
- package/dist/project-discovery-members.d.ts +16 -0
- package/dist/project-discovery-members.d.ts.map +1 -0
- package/dist/project-discovery-members.js +57 -0
- package/dist/project-discovery-members.js.map +1 -0
- package/dist/project-discovery-types.d.ts +8 -0
- package/dist/project-discovery-types.d.ts.map +1 -1
- package/dist/render-auth-database.d.ts +33 -0
- package/dist/render-auth-database.d.ts.map +1 -0
- package/dist/render-auth-database.js +69 -0
- package/dist/render-auth-database.js.map +1 -0
- package/dist/render-auth-sources.d.ts +8 -2
- package/dist/render-auth-sources.d.ts.map +1 -1
- package/dist/render-auth-sources.js +9 -3
- package/dist/render-auth-sources.js.map +1 -1
- package/dist/render-auth.d.ts +14 -11
- package/dist/render-auth.d.ts.map +1 -1
- package/dist/render-auth.js +41 -108
- package/dist/render-auth.js.map +1 -1
- package/dist/render-database-sources.d.ts +7 -1
- package/dist/render-database-sources.d.ts.map +1 -1
- package/dist/render-database-sources.js +3 -2
- package/dist/render-database-sources.js.map +1 -1
- package/dist/render-database.d.ts +7 -10
- package/dist/render-database.d.ts.map +1 -1
- package/dist/render-database.js +12 -4
- package/dist/render-database.js.map +1 -1
- package/dist/render-database.types.d.ts +15 -0
- package/dist/render-database.types.d.ts.map +1 -0
- package/dist/render-database.types.js +2 -0
- package/dist/render-database.types.js.map +1 -0
- package/dist/render-route-sources.d.ts +3 -1
- package/dist/render-route-sources.d.ts.map +1 -1
- package/dist/render-route-sources.js +4 -2
- package/dist/render-route-sources.js.map +1 -1
- package/dist/render-routes.d.ts +1 -0
- package/dist/render-routes.d.ts.map +1 -1
- package/dist/render-routes.js +2 -1
- package/dist/render-routes.js.map +1 -1
- package/dist/render-service-members.d.ts +32 -0
- package/dist/render-service-members.d.ts.map +1 -0
- package/dist/render-service-members.js +61 -0
- package/dist/render-service-members.js.map +1 -0
- package/dist/render-service-requests.d.ts +35 -0
- package/dist/render-service-requests.d.ts.map +1 -0
- package/dist/render-service-requests.js +62 -0
- package/dist/render-service-requests.js.map +1 -0
- package/dist/render-service-support.d.ts +37 -0
- package/dist/render-service-support.d.ts.map +1 -0
- package/dist/render-service-support.js +74 -0
- package/dist/render-service-support.js.map +1 -0
- package/dist/render-service.d.ts +16 -13
- package/dist/render-service.d.ts.map +1 -1
- package/dist/render-service.js +33 -149
- package/dist/render-service.js.map +1 -1
- package/dist/render-service.types.d.ts +13 -0
- package/dist/render-service.types.d.ts.map +1 -0
- package/dist/render-service.types.js +2 -0
- package/dist/render-service.types.js.map +1 -0
- package/dist/scaffold-layout.d.ts +10 -0
- package/dist/scaffold-layout.d.ts.map +1 -0
- package/dist/scaffold-layout.js +29 -0
- package/dist/scaffold-layout.js.map +1 -0
- package/dist/templates/default/README.md +1 -1
- package/dist/templates/default/v1/agent/.agents/skills/relkit/SKILL.md +48 -0
- package/dist/templates/default/v1/agent/.agents/skills/relkit/references/agent-apis.md +59 -0
- package/dist/templates/default/v1/agent/.agents/skills/relkit/references/cli.md +63 -0
- package/dist/templates/default/v1/agent/.agents/skills/relkit/references/config-environments.md +96 -0
- package/dist/templates/default/v1/agent/.agents/skills/relkit/references/data-apis.md +74 -0
- package/dist/templates/default/v1/agent/.agents/skills/relkit/references/domain-apis.md +92 -0
- package/dist/templates/default/v1/agent/.agents/skills/relkit/references/http-apis.md +70 -0
- package/dist/templates/default/v1/agent/.agents/skills/relkit/references/jobs-apis.md +49 -0
- package/dist/templates/default/v1/agent/.agents/skills/relkit/references/layout-migration.md +35 -0
- package/dist/templates/default/v1/agent/.agents/skills/relkit/references/observability-apis.md +53 -0
- package/dist/templates/default/v1/agent/.agents/skills/relkit/references/realtime-apis.md +98 -0
- package/dist/templates/default/v1/agent/.agents/skills/relkit/references/streaming-apis.md +75 -0
- package/dist/templates/default/v1/agent/.agents/skills/relkit/references/testing-apis.md +71 -0
- package/dist/templates/default/v1/agent/README.md +9 -0
- package/dist/templates/default/v1/agent/package.json +5 -4
- package/dist/templates/default/v1/agent/src/routes/hello/route.ts +2 -1
- package/dist/templates/default/v1/agent/src/{hello → services/hello}/agents/assistant.agent.ts +3 -2
- package/dist/templates/default/v1/agent/src/{hello → services/hello}/agents/review.agent.ts +1 -0
- package/dist/templates/default/v1/agent/src/{hello → services/hello}/functions/hello.function.ts +7 -0
- package/dist/templates/default/v1/agent/src/services/hello/service.ts +5 -0
- package/dist/templates/default/v1/agent/src/{hello → services/hello}/tools/lookup.tool.ts +2 -1
- package/dist/templates/default/v1/agent/tests/fixtures/lookup.tool.ts +2 -1
- package/dist/templates/default/v1/agent/tests/fixtures/mcp-options.ts +2 -1
- package/dist/templates/default/v1/agent/tests/unit/assistant.agent.test.ts +3 -2
- package/dist/templates/default/v1/agent/tests/unit/hello.function.test.ts +2 -1
- package/dist/templates/default/v1/agent/tests/unit/lookup.tool.test.ts +2 -1
- package/dist/templates/default/v1/agent/tests/unit/review.agent.test.ts +2 -1
- package/dist/templates/default/v1/agent/tsconfig.json +1 -0
- package/dist/templates/default/v1/api/.agents/skills/relkit/SKILL.md +48 -0
- package/dist/templates/default/v1/api/.agents/skills/relkit/references/agent-apis.md +59 -0
- package/dist/templates/default/v1/api/.agents/skills/relkit/references/cli.md +63 -0
- package/dist/templates/default/v1/api/.agents/skills/relkit/references/config-environments.md +96 -0
- package/dist/templates/default/v1/api/.agents/skills/relkit/references/data-apis.md +74 -0
- package/dist/templates/default/v1/api/.agents/skills/relkit/references/domain-apis.md +92 -0
- package/dist/templates/default/v1/api/.agents/skills/relkit/references/http-apis.md +70 -0
- package/dist/templates/default/v1/api/.agents/skills/relkit/references/jobs-apis.md +49 -0
- package/dist/templates/default/v1/api/.agents/skills/relkit/references/layout-migration.md +35 -0
- package/dist/templates/default/v1/api/.agents/skills/relkit/references/observability-apis.md +53 -0
- package/dist/templates/default/v1/api/.agents/skills/relkit/references/realtime-apis.md +98 -0
- package/dist/templates/default/v1/api/.agents/skills/relkit/references/streaming-apis.md +75 -0
- package/dist/templates/default/v1/api/.agents/skills/relkit/references/testing-apis.md +71 -0
- package/dist/templates/default/v1/api/README.md +10 -0
- package/dist/templates/default/v1/api/package.json +4 -3
- package/dist/templates/default/v1/api/src/routes/echo/route.ts +2 -1
- package/dist/templates/default/v1/api/src/routes/hello/route.ts +2 -1
- package/dist/templates/default/v1/api/src/routes/orders/route.ts +2 -1
- package/dist/templates/default/v1/api/src/{echo → services/echo}/functions/echo.function.ts +1 -0
- package/dist/templates/default/v1/api/src/services/echo/service.ts +5 -0
- package/dist/templates/default/v1/api/src/{hello → services/hello}/functions/hello.function.ts +7 -0
- package/dist/templates/default/v1/api/src/services/hello/service.ts +5 -0
- package/dist/templates/default/v1/api/src/{orders → services/orders}/functions/create-order.function.ts +2 -1
- package/dist/templates/default/v1/api/src/{orders → services/orders}/functions/price-order.function.ts +1 -0
- package/dist/templates/default/v1/api/src/services/orders/service.ts +8 -0
- package/dist/templates/default/v1/api/tests/unit/echo.function.test.ts +2 -1
- package/dist/templates/default/v1/api/tests/unit/hello.function.test.ts +2 -1
- package/dist/templates/default/v1/api/tests/unit/orders.function.test.ts +2 -1
- package/dist/templates/default/v1/api/tsconfig.json +1 -0
- package/dist/templates/default/v1/fullstack/.agents/skills/relkit/SKILL.md +48 -0
- package/dist/templates/default/v1/fullstack/.agents/skills/relkit/references/agent-apis.md +59 -0
- package/dist/templates/default/v1/fullstack/.agents/skills/relkit/references/cli.md +63 -0
- package/dist/templates/default/v1/fullstack/.agents/skills/relkit/references/config-environments.md +96 -0
- package/dist/templates/default/v1/fullstack/.agents/skills/relkit/references/data-apis.md +74 -0
- package/dist/templates/default/v1/fullstack/.agents/skills/relkit/references/domain-apis.md +92 -0
- package/dist/templates/default/v1/fullstack/.agents/skills/relkit/references/http-apis.md +70 -0
- package/dist/templates/default/v1/fullstack/.agents/skills/relkit/references/jobs-apis.md +49 -0
- package/dist/templates/default/v1/fullstack/.agents/skills/relkit/references/layout-migration.md +35 -0
- package/dist/templates/default/v1/fullstack/.agents/skills/relkit/references/observability-apis.md +53 -0
- package/dist/templates/default/v1/fullstack/.agents/skills/relkit/references/realtime-apis.md +98 -0
- package/dist/templates/default/v1/fullstack/.agents/skills/relkit/references/streaming-apis.md +75 -0
- package/dist/templates/default/v1/fullstack/.agents/skills/relkit/references/testing-apis.md +71 -0
- package/dist/templates/default/v1/fullstack/README.md +16 -0
- package/dist/templates/default/v1/fullstack/package.json +7 -6
- package/dist/templates/default/v1/fullstack/src/routes/hello/route.ts +2 -1
- package/dist/templates/default/v1/fullstack/src/{hello → services/hello}/agents/assistant.agent.ts +3 -2
- package/dist/templates/default/v1/fullstack/src/{hello → services/hello}/agents/review.agent.ts +1 -0
- package/dist/templates/default/v1/fullstack/src/{hello → services/hello}/functions/hello.function.ts +1 -0
- package/dist/templates/default/v1/fullstack/src/services/hello/service.ts +5 -0
- package/dist/templates/default/v1/fullstack/src/{hello → services/hello}/tools/lookup.tool.ts +2 -1
- package/dist/templates/default/v1/fullstack/tests/unit/assistant.agent.test.ts +3 -2
- package/dist/templates/default/v1/fullstack/tests/unit/hello.function.test.ts +2 -1
- package/dist/templates/default/v1/fullstack/tests/unit/review.agent.test.ts +2 -1
- package/dist/templates/default/v1/fullstack/tsconfig.json +1 -0
- package/dist/templates/default/v1/minimal/.agents/skills/relkit/SKILL.md +48 -0
- package/dist/templates/default/v1/minimal/.agents/skills/relkit/references/agent-apis.md +59 -0
- package/dist/templates/default/v1/minimal/.agents/skills/relkit/references/cli.md +63 -0
- package/dist/templates/default/v1/minimal/.agents/skills/relkit/references/config-environments.md +96 -0
- package/dist/templates/default/v1/minimal/.agents/skills/relkit/references/data-apis.md +74 -0
- package/dist/templates/default/v1/minimal/.agents/skills/relkit/references/domain-apis.md +92 -0
- package/dist/templates/default/v1/minimal/.agents/skills/relkit/references/http-apis.md +70 -0
- package/dist/templates/default/v1/minimal/.agents/skills/relkit/references/jobs-apis.md +49 -0
- package/dist/templates/default/v1/minimal/.agents/skills/relkit/references/layout-migration.md +35 -0
- package/dist/templates/default/v1/minimal/.agents/skills/relkit/references/observability-apis.md +53 -0
- package/dist/templates/default/v1/minimal/.agents/skills/relkit/references/realtime-apis.md +98 -0
- package/dist/templates/default/v1/minimal/.agents/skills/relkit/references/streaming-apis.md +75 -0
- package/dist/templates/default/v1/minimal/.agents/skills/relkit/references/testing-apis.md +71 -0
- package/dist/templates/default/v1/minimal/README.md +10 -0
- package/dist/templates/default/v1/minimal/package.json +4 -3
- package/dist/templates/default/v1/minimal/src/routes/hello/route.ts +2 -1
- package/dist/templates/default/v1/minimal/src/{hello → services/hello}/functions/hello.function.ts +7 -0
- package/dist/templates/default/v1/minimal/src/services/hello/service.ts +5 -0
- package/dist/templates/default/v1/minimal/tests/unit/hello.function.test.ts +2 -1
- package/dist/templates/default/v1/minimal/tsconfig.json +1 -0
- package/dist/templates/default/v1/tasks/.agents/skills/relkit/SKILL.md +48 -0
- package/dist/templates/default/v1/tasks/.agents/skills/relkit/references/agent-apis.md +59 -0
- package/dist/templates/default/v1/tasks/.agents/skills/relkit/references/cli.md +63 -0
- package/dist/templates/default/v1/tasks/.agents/skills/relkit/references/config-environments.md +96 -0
- package/dist/templates/default/v1/tasks/.agents/skills/relkit/references/data-apis.md +74 -0
- package/dist/templates/default/v1/tasks/.agents/skills/relkit/references/domain-apis.md +92 -0
- package/dist/templates/default/v1/tasks/.agents/skills/relkit/references/http-apis.md +70 -0
- package/dist/templates/default/v1/tasks/.agents/skills/relkit/references/jobs-apis.md +49 -0
- package/dist/templates/default/v1/tasks/.agents/skills/relkit/references/layout-migration.md +35 -0
- package/dist/templates/default/v1/tasks/.agents/skills/relkit/references/observability-apis.md +53 -0
- package/dist/templates/default/v1/tasks/.agents/skills/relkit/references/realtime-apis.md +98 -0
- package/dist/templates/default/v1/tasks/.agents/skills/relkit/references/streaming-apis.md +75 -0
- package/dist/templates/default/v1/tasks/.agents/skills/relkit/references/testing-apis.md +71 -0
- package/dist/templates/default/v1/tasks/README.md +8 -1
- package/dist/templates/default/v1/tasks/package.json +4 -3
- package/dist/templates/default/v1/tasks/src/routes/health/route.ts +2 -1
- package/dist/templates/default/v1/tasks/src/{orders → services/orders}/functions/health.function.ts +1 -0
- package/dist/templates/default/v1/tasks/src/{orders → services/orders}/jobs/export-orders.job.ts +2 -1
- package/dist/templates/default/v1/tasks/src/services/orders/service.ts +11 -0
- package/dist/templates/default/v1/tasks/src/{orders → services/orders}/tasks/export-orders.task.ts +1 -0
- package/dist/templates/default/v1/tasks/tests/unit/export-orders.task.test.ts +2 -1
- package/dist/templates/default/v1/tasks/tsconfig.json +2 -0
- package/package.json +3 -3
- package/dist/templates/default/v1/agent/src/hello/service.ts +0 -4
- package/dist/templates/default/v1/api/src/echo/service.ts +0 -4
- package/dist/templates/default/v1/api/src/hello/service.ts +0 -4
- package/dist/templates/default/v1/api/src/orders/service.ts +0 -7
- package/dist/templates/default/v1/fullstack/src/hello/service.ts +0 -4
- package/dist/templates/default/v1/minimal/src/hello/service.ts +0 -4
- package/dist/templates/default/v1/tasks/src/orders/service.ts +0 -10
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Projects compiler-recognized descriptor syntax into scaffold artifact records.
|
|
3
|
+
* Shared layout paths supply service names; database/auth keep native capability
|
|
4
|
+
* metadata and ordinary modules remain excluded from descriptor registration.
|
|
5
|
+
*/
|
|
6
|
+
import { prefilterSources } from "@relkit/compiler";
|
|
7
|
+
import { serviceSource, normalizeSourcePath } from "@relkit/contracts";
|
|
8
|
+
import { readFactoryStringProperty } from "./source-edit.js";
|
|
9
|
+
import { discoverDatabaseDetails } from "./project-discovery-database.js";
|
|
10
|
+
import { serviceMembers } from "./project-discovery-members.js";
|
|
11
|
+
/**
|
|
12
|
+
* Collects source-only artifacts after compiler layout validation.
|
|
13
|
+
* @param root - Canonical application root.
|
|
14
|
+
* @param modules - Complete unevaluated authored module inventory.
|
|
15
|
+
* @returns Static artifact/service records with accurate flat or grouped paths.
|
|
16
|
+
*/
|
|
17
|
+
export function collectProjectArtifacts(root, modules) {
|
|
18
|
+
const normalized = modules.map((module) => ({
|
|
19
|
+
...module,
|
|
20
|
+
fileName: normalizeSourcePath(module.fileName, root),
|
|
21
|
+
}));
|
|
22
|
+
const candidates = prefilterSources(normalized, { projectRoot: root }).candidates;
|
|
23
|
+
const sourceByPath = new Map(normalized.map((module) => [module.fileName, module.text]));
|
|
24
|
+
const services = [];
|
|
25
|
+
const artifacts = [];
|
|
26
|
+
for (const candidate of candidates) {
|
|
27
|
+
const source = sourceByPath.get(candidate.fileName);
|
|
28
|
+
if (source === undefined)
|
|
29
|
+
throw new Error("Compiler returned an uninventoried source module.");
|
|
30
|
+
const domain = serviceSource(candidate.fileName)?.name;
|
|
31
|
+
for (const factory of candidate.facts.factoryBindings) {
|
|
32
|
+
const context = {
|
|
33
|
+
modules: normalized,
|
|
34
|
+
candidate,
|
|
35
|
+
factory,
|
|
36
|
+
source,
|
|
37
|
+
binding: factory.binding ?? fileBinding(candidate.fileName),
|
|
38
|
+
...(domain === undefined ? {} : { domain }),
|
|
39
|
+
};
|
|
40
|
+
artifacts.push(artifactFor(context));
|
|
41
|
+
const service = serviceFor(context);
|
|
42
|
+
if (service)
|
|
43
|
+
services.push(service);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return { services, artifacts };
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Projects one known factory without interpreting its runtime options.
|
|
50
|
+
* @param context - Compiler syntax, physical source and normalized binding evidence.
|
|
51
|
+
* @returns Artifact metadata used for identity/collision and renderer selection.
|
|
52
|
+
*/
|
|
53
|
+
function artifactFor(context) {
|
|
54
|
+
const { candidate, factory, source, binding, domain } = context;
|
|
55
|
+
const exported = [...candidate.facts.exports.entries()].find(([, entry]) => entry.binding === factory.binding || entry.factory === factory);
|
|
56
|
+
const id = factory.id === "explicit"
|
|
57
|
+
? readFactoryStringProperty(source, candidate.fileName, factory.factory, "id", factory.factory === "definePrompt" || factory.factory === "defineConstants" ? 1 : 0)
|
|
58
|
+
: undefined;
|
|
59
|
+
return {
|
|
60
|
+
kind: factory.kind,
|
|
61
|
+
path: candidate.fileName,
|
|
62
|
+
binding,
|
|
63
|
+
...(domain === undefined ? {} : { domain }),
|
|
64
|
+
...(id === undefined ? {} : { id }),
|
|
65
|
+
factory: factory.factory,
|
|
66
|
+
exported: exported !== undefined,
|
|
67
|
+
...(exported === undefined
|
|
68
|
+
? {}
|
|
69
|
+
: { exportKind: exported[0] === "default" ? "default" : "named" }),
|
|
70
|
+
options: factory.options,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Preserves generic versus native database/auth service contracts.
|
|
75
|
+
* @param context - One statically recognized declaration and its owning service path.
|
|
76
|
+
* @returns Service metadata, or absence for nonservice declarations.
|
|
77
|
+
*/
|
|
78
|
+
function serviceFor(context) {
|
|
79
|
+
const { candidate, factory, source, modules, binding, domain } = context;
|
|
80
|
+
if (factory.kind !== "service" || domain === undefined)
|
|
81
|
+
return undefined;
|
|
82
|
+
let capability = "generic";
|
|
83
|
+
if (factory.factory === "defineDrizzleService")
|
|
84
|
+
capability = "database";
|
|
85
|
+
else if (factory.factory === "defineBetterAuthService")
|
|
86
|
+
capability = "auth";
|
|
87
|
+
const database = capability === "database"
|
|
88
|
+
? discoverDatabaseDetails(modules, candidate.fileName, source)
|
|
89
|
+
: undefined;
|
|
90
|
+
return {
|
|
91
|
+
domain,
|
|
92
|
+
path: candidate.fileName,
|
|
93
|
+
binding,
|
|
94
|
+
capability,
|
|
95
|
+
...(database ?? {}),
|
|
96
|
+
members: serviceMembers(candidate.facts.serviceMembers.filter((member) => member.service === factory.binding), source, candidate.fileName, factory.factory),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Preserves the conventional fallback binding for unnamed factory declarations.
|
|
101
|
+
* @param path - Physical module whose filename supplies a kebab-case stem.
|
|
102
|
+
* @returns Its camel-case stem or artifact when no filename was available.
|
|
103
|
+
*/
|
|
104
|
+
function fileBinding(path) {
|
|
105
|
+
return (path.split("/").at(-1)?.split(".")[0] ?? "artifact").replace(/-([a-z0-9])/g, (_, value) => value.toUpperCase());
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=project-discovery-artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-discovery-artifacts.js","sourceRoot":"","sources":["../src/project-discovery-artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Describes declaration-only scaffold artifact inputs and collected outputs.
|
|
3
|
+
* Compiler syntax facts provide factory identity; scaffold discovery retains
|
|
4
|
+
* exact physical source paths and does not import application modules.
|
|
5
|
+
*/
|
|
6
|
+
import type { AstPrefilterCandidate, AstSourceModule } from "@relkit/compiler";
|
|
7
|
+
import type { DiscoveredArtifact, DiscoveredService } from "./project-discovery-types.js";
|
|
8
|
+
/** One statically recognized descriptor factory and its source provenance. */
|
|
9
|
+
export interface FactoryContext {
|
|
10
|
+
readonly modules: readonly AstSourceModule[];
|
|
11
|
+
readonly candidate: AstPrefilterCandidate;
|
|
12
|
+
readonly factory: AstPrefilterCandidate["facts"]["factoryBindings"][number];
|
|
13
|
+
readonly source: string;
|
|
14
|
+
readonly binding: string;
|
|
15
|
+
readonly domain?: string;
|
|
16
|
+
}
|
|
17
|
+
/** Static service and artifact records used by add planning. */
|
|
18
|
+
export interface DiscoveredCollections {
|
|
19
|
+
readonly services: readonly DiscoveredService[];
|
|
20
|
+
readonly artifacts: readonly DiscoveredArtifact[];
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=project-discovery-artifacts.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-discovery-artifacts.types.d.ts","sourceRoot":"","sources":["../src/project-discovery-artifacts.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAE1F,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,gEAAgE;AAChE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-discovery-artifacts.types.js","sourceRoot":"","sources":["../src/project-discovery-artifacts.types.ts"],"names":[],"mappings":""}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
+
import { type AstSourceModule } from "@relkit/compiler";
|
|
1
2
|
import type { ProjectDiscovery } from "./project-discovery-types.js";
|
|
2
3
|
/**
|
|
3
|
-
* Converts
|
|
4
|
-
* @param root - Absolute
|
|
5
|
-
* @param appSource -
|
|
6
|
-
* @param modules -
|
|
7
|
-
* @returns
|
|
4
|
+
* Converts authored syntax into layout-aware scaffold discovery records.
|
|
5
|
+
* @param root - Absolute application root.
|
|
6
|
+
* @param appSource - Unevaluated configuration source.
|
|
7
|
+
* @param modules - Complete sorted authored TypeScript source collection.
|
|
8
|
+
* @returns Immutable service, artifact, provider and layout interpretation.
|
|
9
|
+
* @throws AddScaffoldError when mixed/invalid service roots make mutation unsafe.
|
|
8
10
|
*/
|
|
9
|
-
export declare function discoveryFacts(root: string, appSource: string, modules: readonly
|
|
10
|
-
readonly fileName: string;
|
|
11
|
-
readonly text: string;
|
|
12
|
-
}[]): ProjectDiscovery;
|
|
11
|
+
export declare function discoveryFacts(root: string, appSource: string, modules: readonly AstSourceModule[]): ProjectDiscovery;
|
|
13
12
|
//# sourceMappingURL=project-discovery-facts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-discovery-facts.d.ts","sourceRoot":"","sources":["../src/project-discovery-facts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project-discovery-facts.d.ts","sourceRoot":"","sources":["../src/project-discovery-facts.ts"],"names":[],"mappings":"AAMA,OAAO,EAA6B,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAKrE;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,eAAe,EAAE,GAClC,gBAAgB,CA0BlB"}
|
|
@@ -1,147 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assembles declaration-only application discovery after compiler layout validation.
|
|
3
|
+
* The result keeps native specialized service metadata, actual boundaries and
|
|
4
|
+
* provider declarations; no user module or live client is imported.
|
|
5
|
+
*/
|
|
1
6
|
import { join } from "node:path";
|
|
2
|
-
import {
|
|
7
|
+
import { discoverApplicationLayout } from "@relkit/compiler";
|
|
3
8
|
import * as ts from "typescript";
|
|
4
9
|
import { readAppDiscovery } from "./project-discovery-app.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
10
|
+
import { collectProjectArtifacts } from "./project-discovery-artifacts.js";
|
|
11
|
+
import { ADD_FAILURE_CODES, AddScaffoldError } from "./add-types.js";
|
|
7
12
|
/**
|
|
8
|
-
* Converts
|
|
9
|
-
* @param root - Absolute
|
|
10
|
-
* @param appSource -
|
|
11
|
-
* @param modules -
|
|
12
|
-
* @returns
|
|
13
|
+
* Converts authored syntax into layout-aware scaffold discovery records.
|
|
14
|
+
* @param root - Absolute application root.
|
|
15
|
+
* @param appSource - Unevaluated configuration source.
|
|
16
|
+
* @param modules - Complete sorted authored TypeScript source collection.
|
|
17
|
+
* @returns Immutable service, artifact, provider and layout interpretation.
|
|
18
|
+
* @throws AddScaffoldError when mixed/invalid service roots make mutation unsafe.
|
|
13
19
|
*/
|
|
14
20
|
export function discoveryFacts(root, appSource, modules) {
|
|
21
|
+
const layout = discoverApplicationLayout(modules, root);
|
|
22
|
+
if (layout.issues.length)
|
|
23
|
+
throw new AddScaffoldError(ADD_FAILURE_CODES.invalidProject, layout.issues.map((issue) => `${issue.file}: ${issue.message}`).join("\n"));
|
|
15
24
|
const appPath = join(root, "relkit.config.ts");
|
|
16
|
-
const
|
|
17
|
-
const sourceByPath = new Map(modules.map((module) => [module.fileName, module.text]));
|
|
18
|
-
const services = [];
|
|
19
|
-
const artifacts = [];
|
|
20
|
-
for (const candidate of candidates) {
|
|
21
|
-
const domain = sourceDomain(candidate.fileName);
|
|
22
|
-
const source = sourceByPath.get(candidate.fileName);
|
|
23
|
-
// Compiler candidates are drawn only from the exact source module collection above.
|
|
24
|
-
if (source === undefined)
|
|
25
|
-
throw new Error("Compiler returned an unknown source module.");
|
|
26
|
-
for (const factory of candidate.facts.factoryBindings) {
|
|
27
|
-
const binding = factory.binding ?? fileBinding(candidate.fileName);
|
|
28
|
-
const exportedEntry = [...candidate.facts.exports.entries()].find(([, entry]) => entry.binding === factory.binding || entry.factory === factory);
|
|
29
|
-
const id = factory.id === "explicit"
|
|
30
|
-
? readFactoryStringProperty(source, candidate.fileName, factory.factory, "id", factory.factory === "definePrompt" || factory.factory === "defineConstants" ? 1 : 0)
|
|
31
|
-
: undefined;
|
|
32
|
-
artifacts.push({
|
|
33
|
-
kind: factory.kind,
|
|
34
|
-
path: candidate.fileName,
|
|
35
|
-
binding,
|
|
36
|
-
...(domain === undefined ? {} : { domain }),
|
|
37
|
-
...(id === undefined ? {} : { id }),
|
|
38
|
-
factory: factory.factory,
|
|
39
|
-
exported: exportedEntry !== undefined,
|
|
40
|
-
...(exportedEntry === undefined
|
|
41
|
-
? {}
|
|
42
|
-
: {
|
|
43
|
-
exportKind: exportedEntry[0] === "default" ? "default" : "named",
|
|
44
|
-
}),
|
|
45
|
-
options: factory.options,
|
|
46
|
-
});
|
|
47
|
-
if (factory.kind !== "service" || domain === undefined)
|
|
48
|
-
continue;
|
|
49
|
-
const database = factory.factory === "defineDrizzleService"
|
|
50
|
-
? discoverDatabaseDetails(modules, candidate.fileName, source)
|
|
51
|
-
: undefined;
|
|
52
|
-
services.push({
|
|
53
|
-
domain,
|
|
54
|
-
path: candidate.fileName,
|
|
55
|
-
binding,
|
|
56
|
-
capability: factory.factory === "defineDrizzleService"
|
|
57
|
-
? "database"
|
|
58
|
-
: factory.factory === "defineBetterAuthService"
|
|
59
|
-
? "auth"
|
|
60
|
-
: "generic",
|
|
61
|
-
...(database ?? {}),
|
|
62
|
-
members: serviceMembers(candidate.facts.serviceMembers.filter((member) => member.service === factory.binding), source, candidate.fileName, factory.factory),
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
}
|
|
25
|
+
const { services, artifacts } = collectProjectArtifacts(root, modules);
|
|
66
26
|
const app = readAppDiscovery(appSource, appPath, root);
|
|
67
27
|
return Object.freeze({
|
|
68
28
|
projectRoot: root,
|
|
29
|
+
layout,
|
|
69
30
|
packagePath: join(root, "package.json"),
|
|
70
31
|
appPath,
|
|
71
32
|
appFactory: app.factory,
|
|
72
33
|
...(app.envPath === undefined ? {} : { envPath: app.envPath }),
|
|
73
34
|
services: Object.freeze([...new Map(services.map((service) => [service.path, service])).values()].sort(byPath)),
|
|
74
|
-
artifacts: Object.freeze(artifacts.sort(byPath)),
|
|
35
|
+
artifacts: Object.freeze([...artifacts].sort(byPath)),
|
|
75
36
|
profiles: Object.freeze(app.profiles),
|
|
76
37
|
awsPulumiDeployment: importsPackage(appSource, appPath, "@relkit/aws") &&
|
|
77
38
|
importsPackage(appSource, appPath, "@relkit/pulumi"),
|
|
78
39
|
});
|
|
79
40
|
}
|
|
80
41
|
/**
|
|
81
|
-
*
|
|
82
|
-
* @param
|
|
83
|
-
* @param
|
|
84
|
-
* @param
|
|
85
|
-
* @
|
|
86
|
-
* @returns Declared public member bindings.
|
|
87
|
-
*/
|
|
88
|
-
function serviceMembers(facts, source, path, factory) {
|
|
89
|
-
if (facts.length > 0)
|
|
90
|
-
return facts.map((member) => ({
|
|
91
|
-
name: member.member,
|
|
92
|
-
...(member.targetBinding === undefined ? {} : { targetBinding: member.targetBinding }),
|
|
93
|
-
}));
|
|
94
|
-
const root = readFactoryObject(source, path, [factory]);
|
|
95
|
-
return ["functions", "events", "tasks", "jobs"].flatMap((category) => {
|
|
96
|
-
const item = root.properties.find((item) => staticPropertyName(item.name) === category);
|
|
97
|
-
if (!item || !ts.isPropertyAssignment(item))
|
|
98
|
-
return [];
|
|
99
|
-
const value = unwrap(item.initializer);
|
|
100
|
-
if (!value || !ts.isObjectLiteralExpression(value))
|
|
101
|
-
return [];
|
|
102
|
-
return value.properties.flatMap((member) => {
|
|
103
|
-
const name = staticPropertyName(member.name);
|
|
104
|
-
if (name === undefined)
|
|
105
|
-
return [];
|
|
106
|
-
const targetBinding = ts.isShorthandPropertyAssignment(member)
|
|
107
|
-
? member.name.text
|
|
108
|
-
: ts.isPropertyAssignment(member) && ts.isIdentifier(member.initializer)
|
|
109
|
-
? member.initializer.text
|
|
110
|
-
: undefined;
|
|
111
|
-
return [{ name, ...(targetBinding === undefined ? {} : { targetBinding }) }];
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Removes parentheses and TypeScript assertions from a source expression.
|
|
117
|
-
* @param value - AST expression whose static wrapper nodes are ignored.
|
|
118
|
-
* @returns The underlying expression, or undefined when no expression was supplied.
|
|
119
|
-
*/
|
|
120
|
-
function unwrap(value) {
|
|
121
|
-
return value &&
|
|
122
|
-
(ts.isAsExpression(value) ||
|
|
123
|
-
ts.isSatisfiesExpression(value) ||
|
|
124
|
-
ts.isParenthesizedExpression(value))
|
|
125
|
-
? unwrap(value.expression)
|
|
126
|
-
: value;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Extracts a canonical domain from a source-relative path.
|
|
130
|
-
* @param path - Path inside the current project or owned resource.
|
|
131
|
-
* @returns The owning src domain, excluding routes/platform, or undefined outside a domain.
|
|
132
|
-
*/
|
|
133
|
-
function sourceDomain(path) {
|
|
134
|
-
const [src, domain] = path.replaceAll("\\", "/").split("/");
|
|
135
|
-
return src === "src" && domain && domain !== "routes" && domain !== "platform"
|
|
136
|
-
? domain
|
|
137
|
-
: undefined;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Checks declaration-only imports for deployment ownership.
|
|
141
|
-
* @param source - Authored source text inspected or transformed without execution.
|
|
142
|
-
* @param path - Path inside the current project or owned resource.
|
|
143
|
-
* @param packageName - Dependency name matched in static source imports.
|
|
144
|
-
* @returns Whether source contains a static import for the named package.
|
|
42
|
+
* Checks explicit declaration imports used to recognize configured deployment roles.
|
|
43
|
+
* @param source - Unevaluated configuration module.
|
|
44
|
+
* @param path - Physical source filename used by TypeScript syntax parsing.
|
|
45
|
+
* @param packageName - Exact supported integration package to detect.
|
|
46
|
+
* @returns Whether the module contains its explicit static import.
|
|
145
47
|
*/
|
|
146
48
|
function importsPackage(source, path, packageName) {
|
|
147
49
|
return ts
|
|
@@ -151,18 +53,10 @@ function importsPackage(source, path, packageName) {
|
|
|
151
53
|
statement.moduleSpecifier.text === packageName);
|
|
152
54
|
}
|
|
153
55
|
/**
|
|
154
|
-
*
|
|
155
|
-
* @param
|
|
156
|
-
* @
|
|
157
|
-
|
|
158
|
-
function fileBinding(path) {
|
|
159
|
-
return (path.split("/").at(-1)?.split(".")[0] ?? "artifact").replace(/-([a-z0-9])/g, (_, value) => value.toUpperCase());
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Orders pure discovery facts by canonical source path.
|
|
163
|
-
* @param left - First value in deterministic comparison.
|
|
164
|
-
* @param right - Second value in deterministic comparison.
|
|
165
|
-
* @returns Negative, zero or positive ordering of source paths.
|
|
56
|
+
* Orders static records by their real portable source filenames.
|
|
57
|
+
* @param left - First record.
|
|
58
|
+
* @param right - Second record.
|
|
59
|
+
* @returns Stable path ordering without changing logical IDs.
|
|
166
60
|
*/
|
|
167
61
|
function byPath(left, right) {
|
|
168
62
|
return left.path.localeCompare(right.path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-discovery-facts.js","sourceRoot":"","sources":["../src/project-discovery-facts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"project-discovery-facts.js","sourceRoot":"","sources":["../src/project-discovery-facts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,yBAAyB,EAAwB,MAAM,kBAAkB,CAAC;AACnF,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAErE;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,SAAiB,EACjB,OAAmC;IAEnC,MAAM,MAAM,GAAG,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM;QACtB,MAAM,IAAI,gBAAgB,CACxB,iBAAiB,CAAC,cAAc,EAChC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3E,CAAC;IACJ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IAC/C,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvE,MAAM,GAAG,GAAG,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,IAAI;QACjB,MAAM;QACN,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;QACvC,OAAO;QACP,UAAU,EAAE,GAAG,CAAC,OAAO;QACvB,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAC9D,QAAQ,EAAE,MAAM,CAAC,MAAM,CACrB,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CACvF;QACD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACrC,mBAAmB,EACjB,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC;YACjD,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,gBAAgB,CAAC;KACvD,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,MAAc,EAAE,IAAY,EAAE,WAAmB;IACvE,OAAO,EAAE;SACN,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;SAC/E,UAAU,CAAC,IAAI,CACd,CAAC,SAAS,EAAE,EAAE,CACZ,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC;QACjC,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC;QAC7C,SAAS,CAAC,eAAe,CAAC,IAAI,KAAK,WAAW,CACjD,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,SAAS,MAAM,CAAC,IAAsB,EAAE,KAAuB;IAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts callable/event/task/job member names from a service declaration.
|
|
3
|
+
* @param facts - Compiler-recognized member bindings, when available.
|
|
4
|
+
* @param source - Complete owning module source text.
|
|
5
|
+
* @param path - Physical module path supplying source coordinates.
|
|
6
|
+
* @param factory - Recognized service factory name.
|
|
7
|
+
* @returns Static member names and their optional identifiable target bindings.
|
|
8
|
+
*/
|
|
9
|
+
export declare function serviceMembers(facts: readonly {
|
|
10
|
+
readonly member: string;
|
|
11
|
+
readonly targetBinding?: string;
|
|
12
|
+
}[], source: string, path: string, factory: string): {
|
|
13
|
+
targetBinding?: string;
|
|
14
|
+
name: string;
|
|
15
|
+
}[];
|
|
16
|
+
//# sourceMappingURL=project-discovery-members.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-discovery-members.d.ts","sourceRoot":"","sources":["../src/project-discovery-members.ts"],"names":[],"mappings":"AAQA;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EAC9E,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM;;;IAuBhB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads public service member bindings from compiler facts or a compatible
|
|
3
|
+
* TypeScript object declaration. This pure syntax adapter never evaluates member
|
|
4
|
+
* expressions or creates a runtime service; ownership is resolved separately.
|
|
5
|
+
*/
|
|
6
|
+
import * as ts from "typescript";
|
|
7
|
+
import { readFactoryObject, staticPropertyName } from "./source-edit.js";
|
|
8
|
+
/**
|
|
9
|
+
* Extracts callable/event/task/job member names from a service declaration.
|
|
10
|
+
* @param facts - Compiler-recognized member bindings, when available.
|
|
11
|
+
* @param source - Complete owning module source text.
|
|
12
|
+
* @param path - Physical module path supplying source coordinates.
|
|
13
|
+
* @param factory - Recognized service factory name.
|
|
14
|
+
* @returns Static member names and their optional identifiable target bindings.
|
|
15
|
+
*/
|
|
16
|
+
export function serviceMembers(facts, source, path, factory) {
|
|
17
|
+
if (facts.length > 0)
|
|
18
|
+
return facts.map((member) => ({
|
|
19
|
+
name: member.member,
|
|
20
|
+
...(member.targetBinding === undefined ? {} : { targetBinding: member.targetBinding }),
|
|
21
|
+
}));
|
|
22
|
+
const root = readFactoryObject(source, path, [factory]);
|
|
23
|
+
return ["functions", "events", "tasks", "jobs"].flatMap((category) => {
|
|
24
|
+
const item = root.properties.find((item) => staticPropertyName(item.name) === category);
|
|
25
|
+
if (!item || !ts.isPropertyAssignment(item))
|
|
26
|
+
return [];
|
|
27
|
+
const value = unwrap(item.initializer);
|
|
28
|
+
if (!value || !ts.isObjectLiteralExpression(value))
|
|
29
|
+
return [];
|
|
30
|
+
return value.properties.flatMap((member) => {
|
|
31
|
+
const name = staticPropertyName(member.name);
|
|
32
|
+
if (name === undefined)
|
|
33
|
+
return [];
|
|
34
|
+
let targetBinding;
|
|
35
|
+
if (ts.isShorthandPropertyAssignment(member))
|
|
36
|
+
targetBinding = member.name.text;
|
|
37
|
+
else if (ts.isPropertyAssignment(member) && ts.isIdentifier(member.initializer))
|
|
38
|
+
targetBinding = member.initializer.text;
|
|
39
|
+
return [{ name, ...(targetBinding === undefined ? {} : { targetBinding }) }];
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Removes syntax-only wrappers while leaving expressions unevaluated.
|
|
45
|
+
* @param value - Optional source expression wrapped by assertions or parentheses.
|
|
46
|
+
* @returns Underlying expression, or absence when no expression was supplied.
|
|
47
|
+
*/
|
|
48
|
+
function unwrap(value) {
|
|
49
|
+
if (!value)
|
|
50
|
+
return undefined;
|
|
51
|
+
if (ts.isAsExpression(value) ||
|
|
52
|
+
ts.isSatisfiesExpression(value) ||
|
|
53
|
+
ts.isParenthesizedExpression(value))
|
|
54
|
+
return unwrap(value.expression);
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=project-discovery-members.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-discovery-members.js","sourceRoot":"","sources":["../src/project-discovery-members.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEzE;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,KAA8E,EAC9E,MAAc,EACd,IAAY,EACZ,OAAe;IAEf,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAClB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC5B,IAAI,EAAE,MAAM,CAAC,MAAM;YACnB,GAAG,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;SACvF,CAAC,CAAC,CAAC;IACN,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC;QACxF,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,yBAAyB,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACzC,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,EAAE,CAAC;YAClC,IAAI,aAAiC,CAAC;YACtC,IAAI,EAAE,CAAC,6BAA6B,CAAC,MAAM,CAAC;gBAAE,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;iBAC1E,IAAI,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC7E,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;YAC1C,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,MAAM,CAAC,KAAgC;IAC9C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,IACE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC;QACxB,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC;QAC/B,EAAE,CAAC,yBAAyB,CAAC,KAAK,CAAC;QAEnC,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defines immutable declaration-only scaffold discovery records. Compiler syntax
|
|
3
|
+
* supplies layout/ownership; renderers preserve logical identities and provider
|
|
4
|
+
* declarations while creating sources at their selected physical boundaries.
|
|
5
|
+
*/
|
|
1
6
|
import type { SourceFactoryKind } from "@relkit/compiler";
|
|
7
|
+
import type { ApplicationLayout } from "@relkit/contracts";
|
|
2
8
|
import type { DatabaseDialect } from "./add-types.js";
|
|
3
9
|
/**
|
|
4
10
|
* Statically discovered service member name and referenced binding.
|
|
@@ -47,6 +53,8 @@ export interface DiscoveredProfile {
|
|
|
47
53
|
* Deterministic source-only app, provider, service and artifact facts for one project.
|
|
48
54
|
*/
|
|
49
55
|
export interface ProjectDiscovery {
|
|
56
|
+
/** Present on compiler-backed discovery; older supplied planning fixtures may omit it. */
|
|
57
|
+
readonly layout?: ApplicationLayout;
|
|
50
58
|
readonly projectRoot: string;
|
|
51
59
|
readonly packagePath: string;
|
|
52
60
|
readonly appPath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-discovery-types.d.ts","sourceRoot":"","sources":["../src/project-discovery-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACrD,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,WAAW,GAAG,cAAc,CAAC;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;CACvC"}
|
|
1
|
+
{"version":3,"file":"project-discovery-types.d.ts","sourceRoot":"","sources":["../src/project-discovery-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACrD,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0FAA0F;IAC1F,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,WAAW,GAAG,cAAc,CAAC;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;CACvC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates an existing native database and adds Better Auth schema declarations
|
|
3
|
+
* without changing its owner or dialect. Generator filesystem authority inspects
|
|
4
|
+
* collisions; no client activation, migration, seed or credential edit occurs here.
|
|
5
|
+
*/
|
|
6
|
+
import { Effect } from "effect";
|
|
7
|
+
import { GeneratorFileSystem } from "./generator-filesystem.js";
|
|
8
|
+
import type { PlanBuilder } from "./plan-builder.js";
|
|
9
|
+
import type { DiscoveredService } from "./project-discovery-types.js";
|
|
10
|
+
import type { RenderedDatabase } from "./render-database.types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Plans native auth tables and their export after checking existing schema collisions.
|
|
13
|
+
* @param builder - Per-request transaction planning owner.
|
|
14
|
+
* @param database - Existing native database's matching dialect and schema paths.
|
|
15
|
+
* @returns Lazy planned schema edits with typed filesystem/scaffold failures.
|
|
16
|
+
*/
|
|
17
|
+
export declare const addAuthSchemaEffect: (builder: PlanBuilder, database: RenderedDatabase) => Effect.Effect<void, import("./generator-errors.js").GeneratorIoError | import("./generator-errors.js").GeneratorDomainError, GeneratorFileSystem>;
|
|
18
|
+
/**
|
|
19
|
+
* Checks discovered schema/dialect compatibility before planning native auth tables.
|
|
20
|
+
* @param service - Sole discovered native Drizzle service.
|
|
21
|
+
* @param requested - Supported dialect requested by the auth scaffold.
|
|
22
|
+
* @returns The existing service and schema paths with their validated dialect.
|
|
23
|
+
* @throws AddScaffoldError for ambiguous schema metadata or a different native dialect.
|
|
24
|
+
*/
|
|
25
|
+
export declare function existingDatabase(service: DiscoveredService, requested: RenderedDatabase["dialect"]): RenderedDatabase;
|
|
26
|
+
/**
|
|
27
|
+
* Requires a supported non-root static URL for the sole native auth mount.
|
|
28
|
+
* @param value - Requested auth base URL path.
|
|
29
|
+
* @returns Nothing when the mount can be represented by the existing route API.
|
|
30
|
+
* @throws AddScaffoldError when path parameters or a root mount make it unsupported.
|
|
31
|
+
*/
|
|
32
|
+
export declare function validateAuthBasePath(value: string): void;
|
|
33
|
+
//# sourceMappingURL=render-auth-database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-auth-database.d.ts","sourceRoot":"","sources":["../src/render-auth-database.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAKhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAInE;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,yMAU/B,CAAC;AA4BF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,gBAAgB,CAAC,SAAS,CAAC,GACrC,gBAAgB,CAYlB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAIxD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates an existing native database and adds Better Auth schema declarations
|
|
3
|
+
* without changing its owner or dialect. Generator filesystem authority inspects
|
|
4
|
+
* collisions; no client activation, migration, seed or credential edit occurs here.
|
|
5
|
+
*/
|
|
6
|
+
import { Effect } from "effect";
|
|
7
|
+
import { dirname, posix } from "node:path";
|
|
8
|
+
import { observeExecution } from "@relkit/contracts/operation";
|
|
9
|
+
import { GeneratorFileSystem } from "./generator-filesystem.js";
|
|
10
|
+
import { scaffoldErrors, domainError } from "./generator-errors.js";
|
|
11
|
+
import { ADD_FAILURE_CODES, AddScaffoldError } from "./add-types.js";
|
|
12
|
+
import { authSchemaSource } from "./render-auth-schema.js";
|
|
13
|
+
import { addSourceExport } from "./source-edit.js";
|
|
14
|
+
const AUTH_TABLES = ["user", "session", "account", "verification"];
|
|
15
|
+
/**
|
|
16
|
+
* Plans native auth tables and their export after checking existing schema collisions.
|
|
17
|
+
* @param builder - Per-request transaction planning owner.
|
|
18
|
+
* @param database - Existing native database's matching dialect and schema paths.
|
|
19
|
+
* @returns Lazy planned schema edits with typed filesystem/scaffold failures.
|
|
20
|
+
*/
|
|
21
|
+
export const addAuthSchemaEffect = Effect.fn("Scaffold.addAuthSchema")(function* (builder, database) {
|
|
22
|
+
const directory = dirname(database.schemaPath).replaceAll("\\", "/");
|
|
23
|
+
yield* assertNoAuthTablesEffect(builder.discovery.projectRoot, directory);
|
|
24
|
+
yield* builder.createEffect(`${directory}/auth.ts`, authSchemaSource(database.dialect));
|
|
25
|
+
yield* builder.updateEffect(database.schemaPath, (source) => addSourceExport(source, database.schemaPath, 'export * from "./auth.js";'));
|
|
26
|
+
}, (effect) => observeExecution("generator", "planning.addAuthSchema", scaffoldErrors(effect)));
|
|
27
|
+
/**
|
|
28
|
+
* Stops at the first deterministic schema collision before planning any auth edits.
|
|
29
|
+
* @param root - Canonical application root.
|
|
30
|
+
* @param directory - Existing database's physical schema directory.
|
|
31
|
+
* @returns Lazy validation with GeneratorFileSystem required and typed collision failures.
|
|
32
|
+
*/
|
|
33
|
+
const assertNoAuthTablesEffect = Effect.fn("Scaffold.assertNoAuthTables")(function* (root, directory) {
|
|
34
|
+
const fs = yield* GeneratorFileSystem;
|
|
35
|
+
const files = yield* fs.glob(posix.join(root, directory), "**/*.ts");
|
|
36
|
+
// Preserve first-collision order and avoid reading later modules after a rejection.
|
|
37
|
+
for (const file of files) {
|
|
38
|
+
const source = yield* fs.readText(posix.join(root, directory, file));
|
|
39
|
+
if (AUTH_TABLES.some((name) => new RegExp(`\\bexport\\s+const\\s+${name}\\b`).test(source))) {
|
|
40
|
+
return yield* domainError(new AddScaffoldError(ADD_FAILURE_CODES.collision, `The database schema already exports Better Auth table names (${file}).`));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}, (effect) => observeExecution("generator", "planning.assertNoAuthTables", scaffoldErrors(effect)));
|
|
44
|
+
/**
|
|
45
|
+
* Checks discovered schema/dialect compatibility before planning native auth tables.
|
|
46
|
+
* @param service - Sole discovered native Drizzle service.
|
|
47
|
+
* @param requested - Supported dialect requested by the auth scaffold.
|
|
48
|
+
* @returns The existing service and schema paths with their validated dialect.
|
|
49
|
+
* @throws AddScaffoldError for ambiguous schema metadata or a different native dialect.
|
|
50
|
+
*/
|
|
51
|
+
export function existingDatabase(service, requested) {
|
|
52
|
+
if (!service.dialect || !service.schemaPath)
|
|
53
|
+
throw new AddScaffoldError(ADD_FAILURE_CODES.unsupportedSourceShape, "The existing database service has no statically discoverable dialect or schema import.");
|
|
54
|
+
if (service.dialect !== requested)
|
|
55
|
+
throw new AddScaffoldError(ADD_FAILURE_CODES.collision, `The existing database uses ${service.dialect}, not ${requested}.`);
|
|
56
|
+
return { dialect: service.dialect, servicePath: service.path, schemaPath: service.schemaPath };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Requires a supported non-root static URL for the sole native auth mount.
|
|
60
|
+
* @param value - Requested auth base URL path.
|
|
61
|
+
* @returns Nothing when the mount can be represented by the existing route API.
|
|
62
|
+
* @throws AddScaffoldError when path parameters or a root mount make it unsupported.
|
|
63
|
+
*/
|
|
64
|
+
export function validateAuthBasePath(value) {
|
|
65
|
+
if (!/^\/(?:[A-Za-z0-9._~-]+(?:\/[A-Za-z0-9._~-]+)*)?$/.test(value) || value === "/") {
|
|
66
|
+
throw new AddScaffoldError(ADD_FAILURE_CODES.usage, `Invalid auth base path: ${value}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=render-auth-database.js.map
|