@askdb/config 1.0.0-beta.15 → 1.0.0-beta.17

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.
Files changed (45) hide show
  1. package/README.md +4 -4
  2. package/dist/ai-env.d.ts +31 -0
  3. package/dist/ai-env.d.ts.map +1 -0
  4. package/dist/ai-env.js +88 -0
  5. package/dist/ai-env.js.map +1 -0
  6. package/dist/defaults.d.ts +1 -14
  7. package/dist/defaults.d.ts.map +1 -1
  8. package/dist/defaults.js +1 -42
  9. package/dist/defaults.js.map +1 -1
  10. package/dist/index.d.ts +3 -3
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +2 -2
  13. package/dist/index.js.map +1 -1
  14. package/dist/load-merge.js +1 -1
  15. package/dist/load-merge.js.map +1 -1
  16. package/dist/projection.d.ts +6 -0
  17. package/dist/projection.d.ts.map +1 -1
  18. package/dist/projection.js +11 -4
  19. package/dist/projection.js.map +1 -1
  20. package/dist/resolve.d.ts +36 -0
  21. package/dist/resolve.d.ts.map +1 -0
  22. package/dist/{normalize.js → resolve.js} +381 -7
  23. package/dist/resolve.js.map +1 -0
  24. package/dist/runtime-config.d.ts +5 -173
  25. package/dist/runtime-config.d.ts.map +1 -1
  26. package/dist/runtime-config.js +18 -223
  27. package/dist/runtime-config.js.map +1 -1
  28. package/dist/runtime-store.d.ts +9 -5
  29. package/dist/runtime-store.d.ts.map +1 -1
  30. package/dist/runtime-store.js +8 -7
  31. package/dist/runtime-store.js.map +1 -1
  32. package/dist/runtime-types.d.ts +176 -0
  33. package/dist/runtime-types.d.ts.map +1 -0
  34. package/dist/runtime-types.js +2 -0
  35. package/dist/runtime-types.js.map +1 -0
  36. package/dist/types.d.ts +21 -10
  37. package/dist/types.d.ts.map +1 -1
  38. package/package.json +1 -1
  39. package/dist/flatten.d.ts +0 -14
  40. package/dist/flatten.d.ts.map +0 -1
  41. package/dist/flatten.js +0 -253
  42. package/dist/flatten.js.map +0 -1
  43. package/dist/normalize.d.ts +0 -58
  44. package/dist/normalize.d.ts.map +0 -1
  45. package/dist/normalize.js.map +0 -1
@@ -1,7 +1,10 @@
1
- import { ASKDB_AI_PROVIDERS, ASKDB_RAG_EMBEDDERS, ASKDB_REASONING_EFFORTS, } from "./constants.js";
2
- import { DEFAULT_ANTHROPIC_LANGUAGE_MODEL, DEFAULT_AZURE_OPENAI_DEPLOYMENT, DEFAULT_GATEWAY_LANGUAGE_MODEL, DEFAULT_GOOGLE_LANGUAGE_MODEL, DEFAULT_MOCK_RAG_EMBEDDING_DIMENSIONS, DEFAULT_OPENAI_LANGUAGE_MODEL, DEFAULT_RAG_EMBEDDING_MODEL, defaultRagEmbeddingDimensions, parsePositiveInteger, } from "./defaults.js";
3
- /** Every setting a built-in provider connection can carry, besides its name. */
4
- const CONNECTION_FIELDS = ["apiKey", "secondaryApiKey", "resourceName", "baseUrl", "apiVersion"];
1
+ import { ASKDB_AI_PROVIDERS, ASKDB_LOG_LEVELS, ASKDB_MODES_V1, ASKDB_RAG_EMBEDDERS, ASKDB_RAG_STORES, ASKDB_REASONING_EFFORTS, ASKDB_STUDIO_EXECUTE_PROVIDERS, } from "./constants.js";
2
+ import { aiEmbeddingEnv, aiLanguageEnv, CONNECTION_FIELDS, setEnvKey, } from "./ai-env.js";
3
+ import { DEFAULT_ANTHROPIC_LANGUAGE_MODEL, DEFAULT_AZURE_OPENAI_DEPLOYMENT, DEFAULT_GATEWAY_LANGUAGE_MODEL, DEFAULT_GOOGLE_LANGUAGE_MODEL, DEFAULT_HTTP_API_REQUEST_TIMEOUT_MS, DEFAULT_INTROSPECT_OUTPUT_DIR, DEFAULT_MOCK_RAG_EMBEDDING_DIMENSIONS, DEFAULT_OPENAI_LANGUAGE_MODEL, DEFAULT_PGVECTOR_INDEX_STRATEGY, DEFAULT_RAG_EMBEDDING_MODEL, DEFAULT_STUDIO_EXECUTE_MAX_ROWS, DEFAULT_STUDIO_EXECUTE_TIMEOUT_MS, MAX_HTTP_API_REQUEST_TIMEOUT_MS, defaultRagEmbeddingDimensions, } from "./defaults.js";
4
+ /** The default `httpApi.listen.port`. */
5
+ const DEFAULT_HTTP_API_PORT = 3000;
6
+ /** The default `httpApi.listen.host`. */
7
+ const DEFAULT_HTTP_API_HOST = "127.0.0.1";
5
8
  const DEFAULT_CONNECTION = "default";
6
9
  /** Name of the connection a legacy RAG key moves to when it differs from the provider's default connection. */
7
10
  const LEGACY_RAG_CONNECTION = "rag-embeddings";
@@ -129,7 +132,7 @@ function parseConfiguredDimensions(value, key) {
129
132
  return undefined;
130
133
  const parsed = parsePositiveInteger(value);
131
134
  if (parsed === undefined) {
132
- throw new Error(`askdb.config: ${key} must be a positive integer (got ${JSON.stringify(value)}).`);
135
+ throw new Error(`askdb.config: ${key} must be a positive integer (got ${describeValue(value)}).`);
133
136
  }
134
137
  return parsed;
135
138
  }
@@ -267,7 +270,7 @@ function translateLegacyLanguageField(field, configured, table, languageEntry, w
267
270
  * the old and new location, never a value). Throws `askdb.config: …` errors for a config that
268
271
  * can't load.
269
272
  */
270
- export function normalizeAskDbConfig(config) {
273
+ function normalizeAskDbConfig(config) {
271
274
  // The type requires both blocks, but a JS config (or a TS one run without a type check) can
272
275
  // leave one out. Name it here rather than crash on it below (#626).
273
276
  if (!isPlainObject(config.ai)) {
@@ -294,6 +297,10 @@ export function normalizeAskDbConfig(config) {
294
297
  Object.values(ai.embedding ?? {}).some((value) => value !== undefined && value !== null && String(value).trim() !== "")) {
295
298
  throw new Error('askdb.config: ai.embedding is set but the config has no rag block; add rag: { embedder: "ai", store, storeConfig }, or remove ai.embedding.');
296
299
  }
300
+ // Nothing ever read it: the file store writes its files after every change (#676).
301
+ if (rag.storeConfig.file?.autoFlush !== undefined) {
302
+ warn("askdb.config: rag.storeConfig.file.autoFlush is deprecated and ignored (the file store writes its files after every change); remove it.");
303
+ }
297
304
  if (!isMember(rag.embedder, ASKDB_RAG_EMBEDDERS)) {
298
305
  throw new Error(`askdb.config: invalid rag.embedder "${rag.embedder}" (expected one of: ${ASKDB_RAG_EMBEDDERS.join(", ")}).`);
299
306
  }
@@ -411,4 +418,371 @@ export function normalizeAskDbConfig(config) {
411
418
  deprecations,
412
419
  };
413
420
  }
414
- //# sourceMappingURL=normalize.js.map
421
+ // ---------------------------------------------------------------------------
422
+ // Reading one value. Each reader names the config key in its error, never a flat key.
423
+ // ---------------------------------------------------------------------------
424
+ /**
425
+ * A value for an error message: a string quoted, `null`, `undefined`, a number or a boolean as
426
+ * written, anything else by its type. An object or a function is never printed, since its text
427
+ * could hold a key or a connection string.
428
+ */
429
+ function describeValue(value) {
430
+ if (typeof value === "string")
431
+ return JSON.stringify(value);
432
+ if (value === null || value === undefined || typeof value === "number" || typeof value === "boolean") {
433
+ return String(value);
434
+ }
435
+ if (Array.isArray(value))
436
+ return "an array";
437
+ return typeof value === "object" ? "an object" : `a ${typeof value}`;
438
+ }
439
+ /**
440
+ * A string key: trimmed, or `undefined` when unset (`undefined` or `null`) or blank. Any other
441
+ * value fails: hosts read some string keys from the structured config as written (`host.*`,
442
+ * `studio.listen.host`), so a wrong type must stop the load, not a later call.
443
+ */
444
+ function readString(value, key) {
445
+ if (typeof value === "string")
446
+ return nonBlank(value);
447
+ if (value === undefined || value === null)
448
+ return undefined;
449
+ throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected a string).`);
450
+ }
451
+ /**
452
+ * A boolean key must be `true`, `false` or unset. Anything else fails: the string `"false"` is
453
+ * truthy, so reading it as a flag would turn the setting on.
454
+ */
455
+ function readBoolean(value, key) {
456
+ if (value === undefined || typeof value === "boolean")
457
+ return value;
458
+ throw new Error(`askdb.config: ${key} must be a boolean (got ${describeValue(value)}).`);
459
+ }
460
+ /** One of `allowed`, or `undefined` when unset (`undefined`, `null` or `""`). */
461
+ function readMember(value, allowed, key) {
462
+ if (value === undefined || value === null || value === "")
463
+ return undefined;
464
+ if (isMember(value, allowed))
465
+ return value;
466
+ throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected one of: ${allowed.join(", ")}).`);
467
+ }
468
+ /** A list of strings, each trimmed, blanks dropped; `undefined` when unset or empty. */
469
+ function readStringList(value, key) {
470
+ if (value === undefined || value === null)
471
+ return undefined;
472
+ if (!Array.isArray(value) || value.some((item) => typeof item !== "string")) {
473
+ throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected an array of strings).`);
474
+ }
475
+ const list = value.map((item) => item.trim()).filter(Boolean);
476
+ return list.length > 0 ? list : undefined;
477
+ }
478
+ /** A positive integer, or a string holding one; `undefined` for anything else. */
479
+ function parsePositiveInteger(value) {
480
+ if (typeof value === "number")
481
+ return Number.isInteger(value) && value > 0 ? value : undefined;
482
+ if (typeof value !== "string")
483
+ return undefined;
484
+ const t = value.trim();
485
+ if (t === "")
486
+ return undefined;
487
+ const n = Number(t);
488
+ return Number.isInteger(n) && n > 0 ? n : undefined;
489
+ }
490
+ /** A positive-integer key, as a number or a string holding one. */
491
+ function readPositiveInteger(value, key) {
492
+ if (value === undefined)
493
+ return undefined;
494
+ const n = parsePositiveInteger(value);
495
+ if (n === undefined) {
496
+ throw new Error(`askdb.config: ${key} must be a positive integer (got ${describeValue(value)}).`);
497
+ }
498
+ return n;
499
+ }
500
+ /**
501
+ * `httpApi.requestTimeoutMs`: `undefined` when unset; otherwise a positive integer no larger than
502
+ * {@link MAX_HTTP_API_REQUEST_TIMEOUT_MS}, as a number or a string holding one.
503
+ */
504
+ function readRequestTimeoutMs(value, key) {
505
+ if (value === undefined)
506
+ return undefined;
507
+ const n = parsePositiveInteger(value);
508
+ if (n === undefined || n > MAX_HTTP_API_REQUEST_TIMEOUT_MS) {
509
+ throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected a positive integer number of milliseconds, at most ${MAX_HTTP_API_REQUEST_TIMEOUT_MS}).`);
510
+ }
511
+ return n;
512
+ }
513
+ /**
514
+ * `httpApi.listen.port`: `undefined` when unset or `NaN` (`Number(env("PORT"))` with `PORT`
515
+ * unset), as Studio does for `studio.listen.port`. Port `0` asks the OS for a free port. Anything
516
+ * but an integer from 0 to 65535, or a string holding one, fails.
517
+ */
518
+ function readListenPort(value, key) {
519
+ if (value === undefined || (typeof value === "number" && Number.isNaN(value)))
520
+ return undefined;
521
+ const text = typeof value === "string" ? value.trim() : undefined;
522
+ // `Number("")` is 0, so a blank string is checked before it's converted.
523
+ const port = typeof value === "number" ? value : text ? Number(text) : NaN;
524
+ if (!Number.isInteger(port) || port < 0 || port > 65535) {
525
+ throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected an integer from 0 to 65535).`);
526
+ }
527
+ return port;
528
+ }
529
+ const PGVECTOR_INDEX_STRATEGIES = ["ivfflat", "hnsw", "none"];
530
+ /**
531
+ * `rag.storeConfig.pgvector.indexStrategy`, lowercased, or the default when unset or blank. A
532
+ * value that isn't a string counts as unset, as it always has.
533
+ */
534
+ function pgvectorIndexStrategy(raw) {
535
+ if (typeof raw !== "string" || raw.trim() === "")
536
+ return DEFAULT_PGVECTOR_INDEX_STRATEGY;
537
+ const v = raw.trim().toLowerCase();
538
+ if (isMember(v, PGVECTOR_INDEX_STRATEGIES))
539
+ return v;
540
+ throw new Error(`askdb.config: invalid rag.storeConfig.pgvector.indexStrategy "${raw}" (expected one of: ${PGVECTOR_INDEX_STRATEGIES.join(", ")}).`);
541
+ }
542
+ /** Writes `value` under `key` unless it's unset or blank. */
543
+ function setFlat(flat, key, value) {
544
+ setEnvKey(flat, key, value === undefined ? undefined : String(value));
545
+ }
546
+ function resolveIntrospection(intro, flat) {
547
+ const { provider } = intro;
548
+ const engines = intro.providerConfig;
549
+ // Only the active engine's connection is read, so other branches stay `undefined`.
550
+ const connection = (engine) => provider === engine
551
+ ? readString(engines?.[engine]?.databaseUrl, `introspection.providerConfig.${engine}.databaseUrl`)
552
+ : undefined;
553
+ const resolved = {
554
+ provider,
555
+ postgresDatabaseUrl: connection("postgres"),
556
+ prismaSchemaPath: provider === "prisma"
557
+ ? readString(engines?.prisma?.schemaPath, "introspection.providerConfig.prisma.schemaPath")
558
+ : undefined,
559
+ mysqlDatabaseUrl: connection("mysql"),
560
+ schemas: readStringList(intro.schemas, "introspection.schemas"),
561
+ sqliteFile: provider === "sqlite" ? readString(engines?.sqlite?.file, "introspection.providerConfig.sqlite.file") : undefined,
562
+ sqlserverDatabaseUrl: connection("sqlserver"),
563
+ outputDir: readString(intro.outputDir, "introspection.outputDir") ?? DEFAULT_INTROSPECT_OUTPUT_DIR,
564
+ };
565
+ setFlat(flat, "ASKDB_INTROSPECT_POSTGRES_URL", resolved.postgresDatabaseUrl);
566
+ setFlat(flat, "ASKDB_INTROSPECT_MYSQL_URL", resolved.mysqlDatabaseUrl);
567
+ setFlat(flat, "ASKDB_INTROSPECT_SQLITE_FILE", resolved.sqliteFile);
568
+ setFlat(flat, "ASKDB_INTROSPECT_SQLSERVER_URL", resolved.sqlserverDatabaseUrl);
569
+ // The Prisma schema path has no flat key: @askdb/prisma reads `prismaSchemaPath`.
570
+ setFlat(flat, "ASKDB_INTROSPECT_OUT", resolved.outputDir);
571
+ setFlat(flat, "ASKDB_INTROSPECT_SCHEMAS", resolved.schemas?.join(","));
572
+ return resolved;
573
+ }
574
+ function resolveAi(ai, flat) {
575
+ const { language, embedding } = ai;
576
+ const languageEnv = aiLanguageEnv(language);
577
+ // The flat map carries the language section's env view; the embedding section's stays on its own.
578
+ Object.assign(flat, languageEnv);
579
+ return {
580
+ language: {
581
+ provider: language.provider,
582
+ connection: language.connection.name,
583
+ model: language.model,
584
+ env: languageEnv,
585
+ modelFamily: language.modelFamily,
586
+ },
587
+ embedding: embedding
588
+ ? {
589
+ provider: embedding.provider,
590
+ connection: embedding.connection.name,
591
+ model: embedding.model,
592
+ env: aiEmbeddingEnv(embedding),
593
+ dimensions: embedding.dimensions,
594
+ }
595
+ : undefined,
596
+ };
597
+ }
598
+ function resolveRag(rag, ai, flat) {
599
+ const { store, storeConfig } = rag;
600
+ const embedding = ai.embedding;
601
+ setFlat(flat, "ASKDB_RAG_EMBEDDER", embedding ? "ai" : "mock");
602
+ if (embedding) {
603
+ setFlat(flat, "ASKDB_RAG_EMBEDDER_MODEL", embedding.model);
604
+ setFlat(flat, "ASKDB_RAG_EMBEDDER_DIMENSIONS", embedding.dimensions);
605
+ }
606
+ if (!isMember(store, ASKDB_RAG_STORES)) {
607
+ throw new Error(`askdb.config: invalid rag.store ${describeValue(store)} (expected one of: ${ASKDB_RAG_STORES.join(", ")}).`);
608
+ }
609
+ if (store === "file") {
610
+ if (!storeConfig.file)
611
+ throw new Error('askdb.config: rag.store is "file" but `rag.storeConfig.file` is missing.');
612
+ // Unset, the CLI and Studio use `<schema dir>/schema`.
613
+ setFlat(flat, "ASKDB_RAG_FILE_BASE_PATH", readString(storeConfig.file.basePath, "rag.storeConfig.file.basePath"));
614
+ }
615
+ else if (store === "pgvector") {
616
+ const pgvector = storeConfig.pgvector;
617
+ if (!pgvector)
618
+ throw new Error('askdb.config: rag.store is "pgvector" but `rag.storeConfig.pgvector` is missing.');
619
+ const url = readString(pgvector.databaseUrl, "rag.storeConfig.pgvector.databaseUrl");
620
+ if (!url) {
621
+ throw new Error('askdb.config: rag.store is "pgvector" but `rag.storeConfig.pgvector.databaseUrl` is missing; set it, for example `databaseUrl: env("PGVECTOR_URL")`.');
622
+ }
623
+ setFlat(flat, "ASKDB_PGVECTOR_URL", url);
624
+ // With `rag.embedder: "ai"` this is only a size to request: unset, the model's own width
625
+ // applies, learned at index time. The mock embedder's vectors are always 64 wide.
626
+ setFlat(flat, "ASKDB_RAG_EMBEDDER_DIMENSIONS", embedding ? embedding.dimensions : DEFAULT_MOCK_RAG_EMBEDDING_DIMENSIONS);
627
+ setFlat(flat, "ASKDB_PGVECTOR_INDEX_STRATEGY", pgvectorIndexStrategy(pgvector.indexStrategy));
628
+ }
629
+ // The RAG CLI's OpenAI embedder never reads another provider's key or base URL: it uses the
630
+ // embedding connection when that is OpenAI's, else only the OpenAI language connection.
631
+ const openaiEmbedding = embedding?.provider === "openai" ? embedding : undefined;
632
+ const source = openaiEmbedding ?? ai.language;
633
+ return {
634
+ embedder: {
635
+ apiKey: source.env.OPENAI_API_KEY,
636
+ baseURL: source.env.OPENAI_BASE_URL,
637
+ model: openaiEmbedding?.model,
638
+ },
639
+ store,
640
+ storeConfig,
641
+ };
642
+ }
643
+ function resolveLogging(logging, flat) {
644
+ const resolved = {
645
+ level: readMember(logging?.level, ASKDB_LOG_LEVELS, "logging.level"),
646
+ correlationId: readString(logging?.correlationId, "logging.correlationId"),
647
+ logFile: readString(logging?.logFile, "logging.logFile"),
648
+ logStdout: readBoolean(logging?.logStdout, "logging.logStdout") ?? false,
649
+ };
650
+ setFlat(flat, "ASKDB_LOG_LEVEL", resolved.level);
651
+ setFlat(flat, "ASKDB_CORRELATION_ID", resolved.correlationId);
652
+ setFlat(flat, "ASKDB_LOG_FILE", resolved.logFile);
653
+ if (resolved.logStdout)
654
+ setFlat(flat, "ASKDB_LOG_STDOUT", "true");
655
+ return resolved;
656
+ }
657
+ function resolveModes(modes, flat) {
658
+ const resolved = {
659
+ askdbMode: readMember(modes?.askdbMode, ASKDB_MODES_V1, "modes.askdbMode"),
660
+ omitSensitiveFromPrompt: readBoolean(modes?.omitSensitiveFromPrompt, "modes.omitSensitiveFromPrompt") ?? false,
661
+ };
662
+ setFlat(flat, "ASKDB_MODE", resolved.askdbMode);
663
+ if (resolved.omitSensitiveFromPrompt)
664
+ setFlat(flat, "ASKDB_OMIT_SENSITIVE_FROM_PROMPT", "true");
665
+ return resolved;
666
+ }
667
+ /** `host` has no runtime section: `createAskDb` reads `structured.host`. It's checked here all the same. */
668
+ function resolveHost(host, flat) {
669
+ setFlat(flat, "ASKDB_SCHEMA_PATH", readString(host?.schemaPath, "host.schemaPath"));
670
+ setFlat(flat, "ASKDB_SCHEMA_JSON", readString(host?.schemaJson, "host.schemaJson"));
671
+ }
672
+ function resolveHttpApi(httpApi, flat) {
673
+ const port = readListenPort(httpApi?.listen?.port, "httpApi.listen.port");
674
+ const host = readString(httpApi?.listen?.host, "httpApi.listen.host");
675
+ const allowSchemaOverride = readBoolean(httpApi?.allowSchemaOverride, "httpApi.allowSchemaOverride") ?? false;
676
+ const requestTimeoutMs = readRequestTimeoutMs(httpApi?.requestTimeoutMs, "httpApi.requestTimeoutMs");
677
+ setFlat(flat, "PORT", port);
678
+ setFlat(flat, "HOST", host);
679
+ if (allowSchemaOverride)
680
+ setFlat(flat, "ASKDB_HTTP_ALLOW_SCHEMA_OVERRIDE", "true");
681
+ setFlat(flat, "ASKDB_HTTP_REQUEST_TIMEOUT_MS", requestTimeoutMs);
682
+ return {
683
+ listen: { port: port ?? DEFAULT_HTTP_API_PORT, host: host ?? DEFAULT_HTTP_API_HOST },
684
+ allowSchemaOverride,
685
+ requestTimeoutMs: requestTimeoutMs ?? DEFAULT_HTTP_API_REQUEST_TIMEOUT_MS,
686
+ };
687
+ }
688
+ /** The introspection connection for `provider`, when introspection uses that engine. */
689
+ function introspectionConnectionFor(provider, introspection) {
690
+ switch (provider) {
691
+ case "postgres":
692
+ return introspection.postgresDatabaseUrl;
693
+ case "mysql":
694
+ return introspection.mysqlDatabaseUrl;
695
+ case "sqlserver":
696
+ return introspection.sqlserverDatabaseUrl;
697
+ case "sqlite":
698
+ return introspection.sqliteFile;
699
+ }
700
+ }
701
+ function resolveStudio(studio, introspection, flat) {
702
+ // `listen` has no runtime section: Studio reads `structured.studio.listen` and checks the port
703
+ // when it starts, so only the host's type is checked here.
704
+ const listen = studio?.listen;
705
+ setFlat(flat, "ASKDB_STUDIO_HOST", readString(listen?.host, "studio.listen.host"));
706
+ if (listen?.port !== undefined && !Number.isNaN(listen.port))
707
+ setFlat(flat, "ASKDB_STUDIO_PORT", listen.port);
708
+ const execute = studio?.execute;
709
+ // An explicit provider, else the introspection provider when it's a live engine, else postgres.
710
+ // An unknown provider falls back the same way.
711
+ const configured = readString(execute?.provider, "studio.execute.provider");
712
+ const provider = isMember(configured, ASKDB_STUDIO_EXECUTE_PROVIDERS)
713
+ ? configured
714
+ : isMember(introspection.provider, ASKDB_STUDIO_EXECUTE_PROVIDERS)
715
+ ? introspection.provider
716
+ : "postgres";
717
+ const enabled = readBoolean(execute?.enabled, "studio.execute.enabled");
718
+ const useIntrospectionConnection = readBoolean(execute?.useIntrospectionConnection, "studio.execute.useIntrospectionConnection");
719
+ const timeoutMs = readPositiveInteger(execute?.timeoutMs, "studio.execute.timeoutMs");
720
+ const maxRows = readPositiveInteger(execute?.maxRows, "studio.execute.maxRows");
721
+ const configuredUrl = readString(execute?.databaseUrl, "studio.execute.databaseUrl");
722
+ const configuredFile = readString(execute?.file, "studio.execute.file");
723
+ if (configured !== undefined)
724
+ setFlat(flat, "ASKDB_STUDIO_EXECUTE_PROVIDER", provider);
725
+ setFlat(flat, "ASKDB_STUDIO_DATABASE_URL", configuredUrl);
726
+ setFlat(flat, "ASKDB_STUDIO_SQLITE_FILE", configuredFile);
727
+ if (enabled !== undefined)
728
+ setFlat(flat, "ASKDB_STUDIO_EXECUTE_ENABLED", String(enabled));
729
+ if (useIntrospectionConnection !== undefined) {
730
+ setFlat(flat, "ASKDB_STUDIO_EXECUTE_USE_INTROSPECTION_CONNECTION", String(useIntrospectionConnection));
731
+ }
732
+ setFlat(flat, "ASKDB_STUDIO_EXECUTE_TIMEOUT_MS", timeoutMs);
733
+ setFlat(flat, "ASKDB_STUDIO_EXECUTE_MAX_ROWS", maxRows);
734
+ // The introspection connection is reused only when `useIntrospectionConnection` is on, so
735
+ // turning execute on never runs ad-hoc SQL with introspection credentials by accident.
736
+ const explicit = provider === "sqlite" ? configuredFile : configuredUrl;
737
+ const introspectionConnection = introspectionConnectionFor(provider, introspection);
738
+ const connection = explicit ?? (useIntrospectionConnection ? introspectionConnection : undefined);
739
+ return {
740
+ execute: {
741
+ provider,
742
+ databaseUrl: provider === "sqlite" ? undefined : connection,
743
+ file: provider === "sqlite" ? connection : undefined,
744
+ enabled: enabled ?? false,
745
+ useIntrospectionConnection: useIntrospectionConnection ?? false,
746
+ introspectionConnectionAvailable: explicit === undefined && !useIntrospectionConnection && introspectionConnection !== undefined,
747
+ timeoutMs: timeoutMs ?? DEFAULT_STUDIO_EXECUTE_TIMEOUT_MS,
748
+ maxRows: maxRows ?? DEFAULT_STUDIO_EXECUTE_MAX_ROWS,
749
+ },
750
+ };
751
+ }
752
+ /**
753
+ * Resolves every setting of an authored config: checks it, translates deprecated keys and fills in
754
+ * defaults, and writes its flat key. Pure: it reads no environment. Returns one deprecation
755
+ * message per legacy key in use. Throws `askdb.config: …` errors that name the config key for a
756
+ * config that can't load (the loader adds the file name).
757
+ */
758
+ export function resolveAskDbConfig(config) {
759
+ const { config: normalized, deprecations } = normalizeAskDbConfig(config);
760
+ const flat = {};
761
+ const ai = resolveAi(normalized.ai, flat);
762
+ const introspection = resolveIntrospection(config.introspection, flat);
763
+ const rag = resolveRag(normalized.rag, ai, flat);
764
+ const logging = resolveLogging(config.logging, flat);
765
+ const modes = resolveModes(config.modes, flat);
766
+ resolveHost(config.host, flat);
767
+ const dev = { mockSql: readString(config.dev?.mockSql, "dev.mockSql") };
768
+ setFlat(flat, "ASKDB_MOCK_SQL", dev.mockSql);
769
+ const studio = resolveStudio(config.studio, introspection, flat);
770
+ const httpApi = resolveHttpApi(config.httpApi, flat);
771
+ return {
772
+ resolved: {
773
+ ai,
774
+ introspection,
775
+ rag,
776
+ logging,
777
+ httpApi,
778
+ dev,
779
+ modes,
780
+ // Passed through as written: loading has never checked it.
781
+ nlToSql: { dialect: config.dialect },
782
+ studio,
783
+ },
784
+ flat,
785
+ deprecations,
786
+ };
787
+ }
788
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"}