@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.
- package/README.md +4 -4
- package/dist/ai-env.d.ts +31 -0
- package/dist/ai-env.d.ts.map +1 -0
- package/dist/ai-env.js +88 -0
- package/dist/ai-env.js.map +1 -0
- package/dist/defaults.d.ts +1 -14
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +1 -42
- package/dist/defaults.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/load-merge.js +1 -1
- package/dist/load-merge.js.map +1 -1
- package/dist/projection.d.ts +6 -0
- package/dist/projection.d.ts.map +1 -1
- package/dist/projection.js +11 -4
- package/dist/projection.js.map +1 -1
- package/dist/resolve.d.ts +36 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/{normalize.js → resolve.js} +381 -7
- package/dist/resolve.js.map +1 -0
- package/dist/runtime-config.d.ts +5 -173
- package/dist/runtime-config.d.ts.map +1 -1
- package/dist/runtime-config.js +18 -223
- package/dist/runtime-config.js.map +1 -1
- package/dist/runtime-store.d.ts +9 -5
- package/dist/runtime-store.d.ts.map +1 -1
- package/dist/runtime-store.js +8 -7
- package/dist/runtime-store.js.map +1 -1
- package/dist/runtime-types.d.ts +176 -0
- package/dist/runtime-types.d.ts.map +1 -0
- package/dist/runtime-types.js +2 -0
- package/dist/runtime-types.js.map +1 -0
- package/dist/types.d.ts +21 -10
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/flatten.d.ts +0 -14
- package/dist/flatten.d.ts.map +0 -1
- package/dist/flatten.js +0 -253
- package/dist/flatten.js.map +0 -1
- package/dist/normalize.d.ts +0 -58
- package/dist/normalize.d.ts.map +0 -1
- 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 {
|
|
3
|
-
|
|
4
|
-
|
|
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 ${
|
|
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
|
-
|
|
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
|
-
|
|
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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"}
|