@askdb/studio 0.2.0-beta.3 → 0.2.0-beta.30

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.
@@ -0,0 +1,138 @@
1
+ import { basename } from "node:path";
2
+ import { getAskDbRuntimeConfig } from "@askdb/config";
3
+ import { introspect, } from "@askdb/introspect";
4
+ import { createConnectorRegistry, } from "@askdb/connectors";
5
+ import { postgresConnectorProvider } from "@askdb/postgres";
6
+ import { mysqlConnectorProvider } from "@askdb/mysql";
7
+ import { sqliteConnectorProvider } from "@askdb/sqlite";
8
+ import { sqlServerConnectorProvider } from "@askdb/sqlserver";
9
+ import { prismaConnectorProvider } from "@askdb/prisma";
10
+ const connectorRegistry = createConnectorRegistry([
11
+ postgresConnectorProvider,
12
+ mysqlConnectorProvider,
13
+ sqliteConnectorProvider,
14
+ sqlServerConnectorProvider,
15
+ prismaConnectorProvider,
16
+ ]);
17
+ /**
18
+ * Resolve what a server-side introspection run would do, from the runtime
19
+ * config alone. Mirrors the CLI's flag-free resolution in
20
+ * `apps/cli/src/introspect.ts` (config provider + per-engine connection).
21
+ * Never includes credentials in `sourceLabel` — it is shown in the UI.
22
+ */
23
+ export function resolveStudioIntrospectionPlan() {
24
+ const rt = getAskDbRuntimeConfig();
25
+ const engine = rt.introspection.provider;
26
+ if (!connectorRegistry.hasProvider(engine)) {
27
+ return { ok: false, engine: null, error: `Unsupported introspection provider: ${engine}` };
28
+ }
29
+ const connection = resolveConnection(engine);
30
+ if (!connection.ok)
31
+ return { ok: false, engine, error: connection.error };
32
+ return { ok: true, engine, sourceLabel: connection.sourceLabel };
33
+ }
34
+ function resolveConnection(engine) {
35
+ const rt = getAskDbRuntimeConfig();
36
+ switch (engine) {
37
+ case "postgres": {
38
+ const url = rt.introspection.postgresDatabaseUrl;
39
+ if (!url) {
40
+ return {
41
+ ok: false,
42
+ error: "No Postgres connection configured. Set introspection.providerConfig.postgres.databaseUrl in askdb.config.ts (bound to an env var in .env).",
43
+ };
44
+ }
45
+ return { ok: true, url, sourceLabel: redactUrl(url) };
46
+ }
47
+ case "mysql": {
48
+ const url = rt.introspection.mysqlDatabaseUrl;
49
+ if (!url) {
50
+ return {
51
+ ok: false,
52
+ error: "No MySQL connection configured. Set introspection.providerConfig.mysql.databaseUrl in askdb.config.ts (bound to an env var in .env).",
53
+ };
54
+ }
55
+ return { ok: true, url, sourceLabel: redactUrl(url) };
56
+ }
57
+ case "sqlserver": {
58
+ const url = rt.introspection.sqlserverDatabaseUrl;
59
+ if (!url) {
60
+ return {
61
+ ok: false,
62
+ error: "No SQL Server connection configured. Set introspection.providerConfig.sqlserver.databaseUrl in askdb.config.ts (bound to an env var in .env).",
63
+ };
64
+ }
65
+ return { ok: true, url, sourceLabel: redactUrl(url) };
66
+ }
67
+ case "sqlite": {
68
+ const file = rt.introspection.sqliteFile;
69
+ if (!file) {
70
+ return {
71
+ ok: false,
72
+ error: "No SQLite file configured. Set introspection.providerConfig.sqlite.file in askdb.config.ts.",
73
+ };
74
+ }
75
+ return { ok: true, url: file, sourceLabel: file };
76
+ }
77
+ case "prisma": {
78
+ // When unset, @askdb/prisma auto-discovers prisma/schema.prisma in the project root.
79
+ const schemaPath = rt.introspection.prismaSchemaPath;
80
+ return {
81
+ ok: true,
82
+ schemaPath,
83
+ sourceLabel: schemaPath ?? "auto-discovered prisma/schema.prisma",
84
+ };
85
+ }
86
+ }
87
+ }
88
+ /** Strip credentials from a connection string for display (never shown raw in the UI). */
89
+ function redactUrl(raw) {
90
+ try {
91
+ const url = new URL(raw);
92
+ return `${url.protocol}//${url.host}${url.pathname}`;
93
+ }
94
+ catch {
95
+ // ADO.NET-style or otherwise unparseable — show only that it is configured.
96
+ return "configured connection";
97
+ }
98
+ }
99
+ /**
100
+ * Run introspection server-side into `outDir`, preserving any existing
101
+ * enrichment markdown (the writer keeps `tables/*.md`, `concepts.md`, and
102
+ * `tenant-policy.md` when `existingArtifactDir` is supplied — the same
103
+ * guarantee `askdb introspect` gives).
104
+ */
105
+ export async function runStudioIntrospection(options) {
106
+ const plan = resolveStudioIntrospectionPlan();
107
+ if (!plan.ok)
108
+ throw new Error(plan.error);
109
+ const connection = resolveConnection(plan.engine);
110
+ if (!connection.ok)
111
+ throw new Error(connection.error);
112
+ const schemaId = options.schemaId ?? inferSchemaId(options.outDir);
113
+ const connectorConfig = {
114
+ provider: plan.engine,
115
+ url: connection.url,
116
+ schemaPath: connection.schemaPath,
117
+ schemaId,
118
+ };
119
+ const runConfig = connectorRegistry.createConnector(connectorConfig);
120
+ const connector = runConfig.connector;
121
+ const result = await introspect(runConfig.input, {
122
+ outDir: options.outDir,
123
+ schemaId,
124
+ existingArtifactDir: options.hasExistingArtifact ? options.outDir : undefined,
125
+ }, { connector });
126
+ return {
127
+ engine: plan.engine,
128
+ schemaId,
129
+ tables: result.schema.schemas.reduce((sum, namespace) => sum + namespace.tables.length, 0),
130
+ warnings: result.warnings.map((warning) => typeof warning === "string" ? warning : JSON.stringify(warning)),
131
+ };
132
+ }
133
+ function inferSchemaId(path) {
134
+ const name = basename(path);
135
+ const inferred = name.endsWith(".schema") ? name.slice(0, -".schema".length) : name;
136
+ return inferred || "introspected";
137
+ }
138
+ //# sourceMappingURL=introspection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"introspection.js","sourceRoot":"","sources":["../src/introspection.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,12 +1,21 @@
1
1
  import { createServer } from "node:http";
2
+ import { createPgvectorStore } from "@askdb/rag";
2
3
  import { type Workspace } from "@askdb/enrich";
3
- import type { StudioWorkspaceDto } from "./shared/api.js";
4
+ import type { SetupReason, StudioWorkspaceDto } from "./shared/api.js";
4
5
  export type StudioOptions = {
5
6
  schema: string;
6
7
  host?: string;
7
8
  port?: number;
9
+ /**
10
+ * Start in setup mode instead of failing: `"no-config"` when no
11
+ * `askdb.config.*` was found, `"no-artifact"` when the config exists but the
12
+ * schema artifact hasn't been introspected yet. The browser wizard walks the
13
+ * user through the missing steps and flips the server to ready.
14
+ */
15
+ setupReason?: SetupReason | null;
8
16
  };
9
17
  export type StudioServer = ReturnType<typeof createServer>;
18
+ export declare function setStudioPgvectorStoreFactoryForTests(factory: typeof createPgvectorStore | undefined): void;
10
19
  export declare function createStudioServer(options: StudioOptions): StudioServer;
11
20
  export declare function serializeWorkspace(workspace: Workspace): StudioWorkspaceDto;
12
21
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AAiCpF,OAAO,EAYL,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAOV,kBAAkB,EAEnB,MAAM,iBAAiB,CAAC;AAIzB,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AAyC3D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,CAkEvE;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,kBAAkB,CAuC3E"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AA+BpF,OAAO,EAOL,mBAAmB,EAOpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAaL,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAYV,WAAW,EAKX,kBAAkB,EAGnB,MAAM,iBAAiB,CAAC;AAUzB,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AA0D3D,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,OAAO,mBAAmB,GAAG,SAAS,GAC9C,IAAI,CAEN;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,CAwJvE;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,kBAAkB,CA8C3E"}