@xemahq/biome-database-nest 0.12.0 → 0.12.1
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/lib/bootstrap.d.ts +1 -1
- package/dist/lib/bootstrap.d.ts.map +1 -1
- package/dist/lib/bootstrap.js +11 -15
- package/dist/lib/bootstrap.js.map +1 -1
- package/dist/lib/control-plane-client.js +1 -1
- package/dist/lib/control-plane-client.js.map +1 -1
- package/dist/lib/nest/biome-database.module.d.ts.map +1 -1
- package/dist/lib/nest/biome-database.module.js +24 -28
- package/dist/lib/nest/biome-database.module.js.map +1 -1
- package/package.json +6 -6
- package/src/lib/bootstrap.ts +2 -7
- package/src/lib/control-plane-client.ts +7 -4
- package/src/lib/nest/biome-database.module.ts +39 -40
package/dist/lib/bootstrap.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ControlPlaneDiscoveryOptions } from './control-plane-discovery';
|
|
2
|
-
import { BiomeDatabaseMigrationMode } from './migration-mode';
|
|
2
|
+
import type { BiomeDatabaseMigrationMode } from './migration-mode';
|
|
3
3
|
import type { KernelState } from '@xemahq/kernel-contracts/kernel-state';
|
|
4
4
|
export interface BiomeDatabaseDeclaration {
|
|
5
5
|
readonly key?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/lib/bootstrap.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/lib/bootstrap.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAGzE,MAAM,WAAW,wBAAwB;IAEvC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAGD,UAAU,oCAAoC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAMzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAOzD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAElC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,4BAA4B,CAAC;CAC/D;AAED,MAAM,WAAW,kCACf,SAAQ,oCAAoC;IAC5C,QAAQ,CAAC,aAAa,EAAE,0BAA0B,CAAC,kBAAkB,CAAC;IACtE,QAAQ,CAAC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAWxD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAGD,MAAM,MAAM,8BAA8B,GACxC,kCAAkC,CAAC;AAqTrC,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,8BAA8B,GACnC,OAAO,CAAC,IAAI,CAAC,CA2Cf"}
|
package/dist/lib/bootstrap.js
CHANGED
|
@@ -13,7 +13,6 @@ const pg_1 = require("pg");
|
|
|
13
13
|
const config_1 = require("./config");
|
|
14
14
|
const control_plane_client_1 = require("./control-plane-client");
|
|
15
15
|
const control_plane_discovery_1 = require("./control-plane-discovery");
|
|
16
|
-
const migration_mode_1 = require("./migration-mode");
|
|
17
16
|
const schema_name_1 = require("./schema-name");
|
|
18
17
|
const LOG_PREFIX = '[biome-database]';
|
|
19
18
|
const bootstrapLogger = new common_1.Logger('BiomeDatabaseBootstrap');
|
|
@@ -177,20 +176,17 @@ async function bootstrapBiomeDatabases(opts) {
|
|
|
177
176
|
}
|
|
178
177
|
return cachedBaseUrl;
|
|
179
178
|
};
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
bootstrapLogger.log(`${LOG_PREFIX} biome=${opts.biomeId} key=${key}: bootstrap complete`);
|
|
192
|
-
}
|
|
193
|
-
return;
|
|
179
|
+
for (const decl of opts.databases) {
|
|
180
|
+
const key = decl.key ?? schema_name_1.DEFAULT_BIOME_DB_KEY;
|
|
181
|
+
bootstrapLogger.log(`${LOG_PREFIX} biome=${opts.biomeId} key=${key}: resolving config for mode=${opts.migrationMode}`);
|
|
182
|
+
const rawConfig = await resolveDatabaseConfig(opts, key, getControlPlaneBaseUrl);
|
|
183
|
+
const config = await materializeInlineCaCert(opts.biomeId, key, rawConfig);
|
|
184
|
+
const directUrl = buildDirectConnectionUrl(opts.biomeId, key, config);
|
|
185
|
+
await ensureSchemaExists(opts.biomeId, key, config, opts.requiredExtensions ?? []);
|
|
186
|
+
await runMigrations(opts.biomeId, key, decl.workspaceDir, directUrl);
|
|
187
|
+
const runtimeUrl = buildRuntimeUrl(opts.biomeId, key, config, directUrl);
|
|
188
|
+
exportResolvedEnv(key, config, runtimeUrl);
|
|
189
|
+
bootstrapLogger.log(`${LOG_PREFIX} biome=${opts.biomeId} key=${key}: bootstrap complete`);
|
|
194
190
|
}
|
|
195
191
|
}
|
|
196
192
|
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/lib/bootstrap.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/lib/bootstrap.ts"],"names":[],"mappings":";;AA8XA,0DA6CC;AA3aD,6CAAyC;AACzC,qCAAuC;AACvC,+CAA6C;AAC7C,qCAAiC;AACjC,yCAAiC;AAEjC,2CAAwC;AACxC,6EAAwE;AACxE,6DAGiC;AACjC,2BAA4B;AAE5B,qCAA6D;AAC7D,iEAAmE;AACnE,uEAGmC;AACnC,+CAAqD;AAuDrD,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAStC,MAAM,eAAe,GAAG,IAAI,eAAM,CAAC,wBAAwB,CAAC,CAAC;AAE7D,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO,GAAG,KAAK,kCAAoB;QACjC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,YAA0D;IAE1D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,GAAG,UAAU,yDAAyD;YACpE,2CAA2C,CAC9C,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;AAC5E,CAAC;AASD,KAAK,UAAU,qBAAqB,CAClC,IAA0C,EAC1C,GAAW,EACX,sBAA6C;IAE7C,MAAM,KAAK,GAAG,IAAA,0CAAiC,EAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3D,OAAO,IAAA,gDAAyB,EAAC,OAAO,EAAE,KAAK,EAAE;QAC/C,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,GAAG,KAAK,kCAAoB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC,CAAC;AACL,CAAC;AASD,KAAK,UAAU,uBAAuB,CACpC,OAAe,EACf,GAAW,EACX,MAA2B;IAE3B,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,EAAE,EAAE,CAAC;QAC9D,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC;SAC9B,MAAM,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC;SAC3B,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,oBAAoB,IAAI,MAAM,CAAC,CAAC;IAChE,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACvC,CAAC;IACD,eAAe,CAAC,GAAG,CACjB,GAAG,UAAU,UAAU,OAAO,QAAQ,GAAG,6BAA6B,QAAQ,EAAE,CACjF,CAAC;IACF,OAAO,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AACrD,CAAC;AAiBD,SAAS,UAAU,CACjB,MAA2B;IAE3B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,aAAa,CAAC;IACpE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACzC,MAAM,EAAE,GACN,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAA,sBAAY,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1E,OAAO;QACL,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,kBAAkB,EAAE,MAAM;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,OAAe,EACf,GAAW,EACX,MAA2B,EAC3B,kBAAqC;IAErC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,MAAM,SAAS,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,CAAC;IACxD,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,WAAM,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,QAAQ;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC;QAKH,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACrC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACb,GAAG,UAAU,UAAU,OAAO,6BAA6B,GAAG,IAAI,CACnE,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,CAAC,KAAK,CAChB,mCAAmC,GAAG,iBAAiB,CACxD,CAAC;YACF,eAAe,CAAC,GAAG,CACjB,GAAG,UAAU,UAAU,OAAO,QAAQ,GAAG,wBAAwB,GAAG,aAAa,CAClF,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,MAAM,CAAC,KAAK,CAAC,4CAA4C,EAAE;gBAC/D,MAAM;aACP,CAAC,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,gCAAgC,MAAM,GAAG,CAAC,CAAC;YAC9D,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7B,eAAe,CAAC,GAAG,CACjB,GAAG,UAAU,UAAU,OAAO,QAAQ,GAAG,qBAAqB,MAAM,UAAU,CAC/E,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAGD,SAAS,wBAAwB,CAC/B,OAAe,EACf,GAAW,EACX,MAA2B;IAE3B,MAAM,SAAS,GAAG,IAAA,yCAAuB,EAAC;QACxC,IAAI,EAAE,MAAM,CAAC,QAAQ;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3E,CAAC,CAAC;IACH,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,GAAG,UAAU,UAAU,OAAO,QAAQ,GAAG,mDAAmD,CAC7F,CAAC;IACJ,CAAC;IACD,OAAO,IAAA,yCAAuB,EAAC,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,OAAe,EACf,GAAW,EACX,YAAoB,EACpB,UAAkB;IAElB,eAAe,CAAC,GAAG,CACjB,GAAG,UAAU,UAAU,OAAO,QAAQ,GAAG,wCAAwC,YAAY,GAAG,CACjG,CAAC;IAUF,MAAM,MAAM,GAAG,MAAM,IAAI,+CAAqB,EAAE,CAAC,GAAG,CAAC;QACnD,YAAY;QACZ,aAAa,EAAE,UAAU;QACzB,GAAG,EAAE,EAAE;KACR,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,GAAG,UAAU,UAAU,OAAO,QAAQ,GAAG,6BAA6B,MAAM,CAAC,QAAQ,OAAO,MAAM,CAAC,MAAM,EAAE,CAC5G,CAAC;IACJ,CAAC;AACH,CAAC;AAiBD,SAAS,eAAe,CACtB,OAAe,EACf,GAAW,EACX,MAA2B,EAC3B,SAAiB;IAEjB,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;QAChE,OAAO,IAAA,yCAAuB,EAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,SAAS,GAAG,IAAA,yCAAuB,EAAC;QACxC,IAAI,EAAE,MAAM,CAAC,QAAQ;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,UAAU;QACvB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC;QAC9C,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,SAAS,EAAE,MAAM,CAAC,eAAe,IAAI,iBAAiB;KACvD,CAAC,CAAC;IACH,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,GAAG,UAAU,UAAU,OAAO,QAAQ,GAAG,yDAAyD,CACnG,CAAC;IACJ,CAAC;IACD,eAAe,CAAC,GAAG,CACjB,GAAG,UAAU,UAAU,OAAO,QAAQ,GAAG,mCAAmC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,EAAE,CACpI,CAAC;IACF,OAAO,IAAA,yCAAuB,EAAC,SAAS,CAAC,CAAC;AAC5C,CAAC;AAUD,SAAS,iBAAiB,CACxB,GAAW,EACX,MAA2B,EAC3B,UAAkB;IAElB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC;IAClD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACpD,CAAC;AACH,CAAC;AAYM,KAAK,UAAU,uBAAuB,CAC3C,IAAoC;IAIpC,IAAI,aAAiC,CAAC;IACtC,MAAM,sBAAsB,GAAG,KAAK,IAAqB,EAAE;QACzD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,aAAa,GAAG,MAAM,IAAA,oDAA0B,EAC9C,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,qBAAqB,CAC3B,CAAC;QACJ,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,kCAAoB,CAAC;QAC7C,eAAe,CAAC,GAAG,CACjB,GAAG,UAAU,UAAU,IAAI,CAAC,OAAO,QAAQ,GAAG,+BAA+B,IAAI,CAAC,aAAa,EAAE,CAClG,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAC3C,IAAI,EACJ,GAAG,EACH,sBAAsB,CACvB,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAC1C,IAAI,CAAC,OAAO,EACZ,GAAG,EACH,SAAS,CACV,CAAC;QACF,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACtE,MAAM,kBAAkB,CACtB,IAAI,CAAC,OAAO,EACZ,GAAG,EACH,MAAM,EACN,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAC9B,CAAC;QACF,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACzE,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC3C,eAAe,CAAC,GAAG,CACjB,GAAG,UAAU,UAAU,IAAI,CAAC,OAAO,QAAQ,GAAG,sBAAsB,CACrE,CAAC;IACN,CAAC;AACH,CAAC"}
|
|
@@ -33,7 +33,7 @@ const REQUIRED_CONFIG_FIELDS = [
|
|
|
33
33
|
];
|
|
34
34
|
function assertCompleteConfig(config, url) {
|
|
35
35
|
const record = config !== null && typeof config === 'object'
|
|
36
|
-
? config
|
|
36
|
+
? Object.fromEntries(Object.entries(config))
|
|
37
37
|
: {};
|
|
38
38
|
const missing = REQUIRED_CONFIG_FIELDS.filter((field) => {
|
|
39
39
|
const value = record[field];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-plane-client.js","sourceRoot":"","sources":["../../src/lib/control-plane-client.ts"],"names":[],"mappings":";;AAmDA,8DAiCC;AApDD,6DAAyE;AAmBlE,KAAK,UAAU,yBAAyB,CAC7C,OAAe,EACf,YAAoB,EACpB,GAAgC;IAEhC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,0BAA0B,CAAC;IAEpE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,YAAY,EAAE;YACvC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC;QACpE,MAAM,IAAI,KAAK,CACb,8BAA8B,GAAG,cAAc,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,EAAE,CACjG,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"control-plane-client.js","sourceRoot":"","sources":["../../src/lib/control-plane-client.ts"],"names":[],"mappings":";;AAmDA,8DAiCC;AApDD,6DAAyE;AAmBlE,KAAK,UAAU,yBAAyB,CAC7C,OAAe,EACf,YAAoB,EACpB,GAAgC;IAEhC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,0BAA0B,CAAC;IAEpE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,YAAY,EAAE;YACvC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC;QACpE,MAAM,IAAI,KAAK,CACb,8BAA8B,GAAG,cAAc,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,EAAE,CACjG,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,MAAM,GAAY,IAAA,gDAA8B,EACpD,OAAO,EACP,8BAA8B,GAAG,EAAE,CACpC,CAAC;IACF,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,sBAAsB,GAAG;IAC7B,MAAM;IACN,MAAM;IACN,UAAU;IACV,UAAU;IACV,UAAU;CACF,CAAC;AASX,SAAS,oBAAoB,CAC3B,MAAe,EACf,GAAW;IAIX,MAAM,MAAM,GACV,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;QAC3C,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,8BAA8B,GAAG,sCAAsC;YACrE,aAAa,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB;YACjD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC;YACrE,gDAAgD,CACnD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"biome-database.module.d.ts","sourceRoot":"","sources":["../../../src/lib/nest/biome-database.module.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,KAAK,EACV,wBAAwB,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAYpD,eAAO,MAAM,oBAAoB,eAEhC,CAAC;AAEF,UAAU,gCAAgC;IAExC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,4CACf,SAAQ,gCAAgC;IACxC,QAAQ,CAAC,aAAa,EAAE,0BAA0B,CAAC,kBAAkB,CAAC;IAKtE,QAAQ,CAAC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAMxD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAID,MAAM,MAAM,0BAA0B,GACpC,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"biome-database.module.d.ts","sourceRoot":"","sources":["../../../src/lib/nest/biome-database.module.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,KAAK,EACV,wBAAwB,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAYpD,eAAO,MAAM,oBAAoB,eAEhC,CAAC;AAEF,UAAU,gCAAgC;IAExC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,4CACf,SAAQ,gCAAgC;IACxC,QAAQ,CAAC,aAAa,EAAE,0BAA0B,CAAC,kBAAkB,CAAC;IAKtE,QAAQ,CAAC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAMxD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAID,MAAM,MAAM,0BAA0B,GACpC,4CAA4C,CAAC;AAsE/C,qBACa,mBAAmB;IAC9B,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,0BAA0B,GAAG,aAAa;CAgDhE"}
|
|
@@ -14,14 +14,22 @@ const service_registry_nest_1 = require("@xemahq/service-registry-nest");
|
|
|
14
14
|
const bootstrap_1 = require("../bootstrap");
|
|
15
15
|
const migration_mode_1 = require("../migration-mode");
|
|
16
16
|
exports.BIOME_DATABASE_READY = Symbol.for('@xemahq/biome-database-nest:ready');
|
|
17
|
+
function assertBiomeDatabaseModuleOptions(opts) {
|
|
18
|
+
if (opts === null ||
|
|
19
|
+
typeof opts !== 'object' ||
|
|
20
|
+
!('migrationMode' in opts) ||
|
|
21
|
+
opts.migrationMode !== migration_mode_1.BiomeDatabaseMigrationMode.ApplicationManaged) {
|
|
22
|
+
throw new Error('[biome-database] migrationMode is required and must be ApplicationManaged.');
|
|
23
|
+
}
|
|
24
|
+
if (!('databases' in opts) ||
|
|
25
|
+
!Array.isArray(opts.databases) ||
|
|
26
|
+
opts.databases.length === 0) {
|
|
27
|
+
throw new Error('[biome-database] every migration mode requires at least one explicit database declaration.');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
17
30
|
let BiomeDatabaseModule = BiomeDatabaseModule_1 = class BiomeDatabaseModule {
|
|
18
31
|
static forRoot(opts) {
|
|
19
|
-
|
|
20
|
-
throw new Error('[biome-database] migrationMode is required and must be a BiomeDatabaseMigrationMode.');
|
|
21
|
-
}
|
|
22
|
-
if (opts.databases.length === 0) {
|
|
23
|
-
throw new Error('[biome-database] every migration mode requires at least one explicit database declaration.');
|
|
24
|
-
}
|
|
32
|
+
assertBiomeDatabaseModuleOptions(opts);
|
|
25
33
|
const databases = opts.databases;
|
|
26
34
|
if ((0, service_registry_nest_1.isOpenApiExtraction)()) {
|
|
27
35
|
return {
|
|
@@ -38,28 +46,16 @@ let BiomeDatabaseModule = BiomeDatabaseModule_1 = class BiomeDatabaseModule {
|
|
|
38
46
|
{
|
|
39
47
|
provide: exports.BIOME_DATABASE_READY,
|
|
40
48
|
useFactory: async (identityBootstrap, kernelState) => {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
kernelState,
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
await (0, bootstrap_1.bootstrapBiomeDatabases)({
|
|
56
|
-
biomeId: opts.biomeId,
|
|
57
|
-
migrationMode: opts.migrationMode,
|
|
58
|
-
databases: databases,
|
|
59
|
-
serviceToken: () => identityBootstrap.getAccessToken(),
|
|
60
|
-
kernelState,
|
|
61
|
-
});
|
|
62
|
-
}
|
|
49
|
+
await (0, bootstrap_1.bootstrapBiomeDatabases)({
|
|
50
|
+
biomeId: opts.biomeId,
|
|
51
|
+
migrationMode: opts.migrationMode,
|
|
52
|
+
databases,
|
|
53
|
+
...(opts.requiredExtensions !== undefined
|
|
54
|
+
? { requiredExtensions: opts.requiredExtensions }
|
|
55
|
+
: {}),
|
|
56
|
+
serviceToken: () => identityBootstrap.getAccessToken(),
|
|
57
|
+
kernelState,
|
|
58
|
+
});
|
|
63
59
|
return true;
|
|
64
60
|
},
|
|
65
61
|
inject: [identity_client_1.IdentityBootstrapService, service_registry_nest_1.KERNEL_STATE_TOKEN],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"biome-database.module.js","sourceRoot":"","sources":["../../../src/lib/nest/biome-database.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAwC;AACxC,6DAAmE;AACnE,yEAGuC;AAEvC,4CAAuD;AACvD,sDAA+D;AAiBlD,QAAA,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAC5C,mCAAmC,CACpC,CAAC;
|
|
1
|
+
{"version":3,"file":"biome-database.module.js","sourceRoot":"","sources":["../../../src/lib/nest/biome-database.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAwC;AACxC,6DAAmE;AACnE,yEAGuC;AAEvC,4CAAuD;AACvD,sDAA+D;AAiBlD,QAAA,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAC5C,mCAAmC,CACpC,CAAC;AA4BF,SAAS,gCAAgC,CACvC,IAAa;IAEb,IACE,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC;QAC1B,IAAI,CAAC,aAAa,KAAK,2CAA0B,CAAC,kBAAkB,EACpE,CAAC;QACD,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,IACE,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC;QACtB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAC3B,CAAC;QACD,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F,CAAC;IACJ,CAAC;AACH,CAAC;AA8CM,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAE9B,MAAM,CAAC,OAAO,CAAC,IAAa;QAC1B,gCAAgC,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,SAAS,GAAwC,IAAI,CAAC,SAAS,CAAC;QAQtE,IAAI,IAAA,2CAAmB,GAAE,EAAE,CAAC;YAC1B,OAAO;gBACL,MAAM,EAAE,qBAAmB;gBAC3B,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,4BAAoB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAC9D,OAAO,EAAE,CAAC,4BAAoB,CAAC;aAChC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,qBAAmB;YAC3B,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,4BAAoB;oBAC7B,UAAU,EAAE,KAAK,EACf,iBAA2C,EAC3C,WAAwB,EACT,EAAE;wBACjB,MAAM,IAAA,mCAAuB,EAAC;4BAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;4BACrB,aAAa,EAAE,IAAI,CAAC,aAAa;4BACjC,SAAS;4BACT,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,SAAS;gCACvC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE;gCACjD,CAAC,CAAC,EAAE,CAAC;4BACP,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,cAAc,EAAE;4BACtD,WAAW;yBACZ,CAAC,CAAC;wBACH,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,MAAM,EAAE,CAAC,0CAAwB,EAAE,0CAAkB,CAAC;iBACvD;aACF;YACD,OAAO,EAAE,CAAC,4BAAoB,CAAC;SAChC,CAAC;IACJ,CAAC;CACF,CAAA;AAjDY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,mBAAmB,CAiD/B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xemahq/biome-database-nest",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.1",
|
|
4
4
|
"description": "Explicit database migration ownership, least-privilege runtime verification, and schema-qualified Prisma wiring for Xema biome services.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Neuralchowder Inc. <developer@xema.dev> (https://xema.dev)",
|
|
@@ -28,15 +28,15 @@
|
|
|
28
28
|
"@types/jest": "^30.0.0",
|
|
29
29
|
"@types/node": "25.2.3",
|
|
30
30
|
"@types/pg": "^8.16.0",
|
|
31
|
-
"@xemahq/identity-client": "^0.
|
|
32
|
-
"@xemahq/kernel-contracts": "^
|
|
33
|
-
"@xemahq/xema-decorators": "^0.5.0",
|
|
31
|
+
"@xemahq/identity-client": "^0.9.1",
|
|
32
|
+
"@xemahq/kernel-contracts": "^8.0.0",
|
|
34
33
|
"jest": "^30.3.0",
|
|
35
34
|
"prettier": "3.6.2",
|
|
36
35
|
"ts-jest": "^29.4.9",
|
|
37
36
|
"typescript": "5.9.3",
|
|
38
|
-
"@xemahq/platform-common": "^0.7.
|
|
39
|
-
"@xemahq/
|
|
37
|
+
"@xemahq/platform-common": "^0.7.4",
|
|
38
|
+
"@xemahq/xema-decorators": "0.5.3",
|
|
39
|
+
"@xemahq/service-registry-nest": "0.7.0"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"@nestjs/common": "^10 || ^11",
|
package/src/lib/bootstrap.ts
CHANGED
|
@@ -18,12 +18,10 @@ import {
|
|
|
18
18
|
resolveControlPlaneBaseUrl,
|
|
19
19
|
type ControlPlaneDiscoveryOptions,
|
|
20
20
|
} from './control-plane-discovery';
|
|
21
|
-
import {
|
|
22
|
-
BiomeDatabaseMigrationMode,
|
|
23
|
-
} from './migration-mode';
|
|
24
21
|
import { DEFAULT_BIOME_DB_KEY } from './schema-name';
|
|
25
22
|
|
|
26
23
|
import type { BiomeDatabaseConfig } from './config';
|
|
24
|
+
import type { BiomeDatabaseMigrationMode } from './migration-mode';
|
|
27
25
|
import type { KernelState } from '@xemahq/kernel-contracts/kernel-state';
|
|
28
26
|
|
|
29
27
|
/** One database whose schema and Prisma migrations the application owns. */
|
|
@@ -398,8 +396,7 @@ export async function bootstrapBiomeDatabases(
|
|
|
398
396
|
return cachedBaseUrl;
|
|
399
397
|
};
|
|
400
398
|
|
|
401
|
-
|
|
402
|
-
for (const decl of opts.databases) {
|
|
399
|
+
for (const decl of opts.databases) {
|
|
403
400
|
const key = decl.key ?? DEFAULT_BIOME_DB_KEY;
|
|
404
401
|
bootstrapLogger.log(
|
|
405
402
|
`${LOG_PREFIX} biome=${opts.biomeId} key=${key}: resolving config for mode=${opts.migrationMode}`,
|
|
@@ -427,7 +424,5 @@ export async function bootstrapBiomeDatabases(
|
|
|
427
424
|
bootstrapLogger.log(
|
|
428
425
|
`${LOG_PREFIX} biome=${opts.biomeId} key=${key}: bootstrap complete`,
|
|
429
426
|
);
|
|
430
|
-
}
|
|
431
|
-
return;
|
|
432
427
|
}
|
|
433
428
|
}
|
|
@@ -76,7 +76,7 @@ export async function fetchSystemDatabaseConfig(
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
const payload = await response.json();
|
|
79
|
-
const config = unwrapPlatformResponseEnvelope<
|
|
79
|
+
const config: unknown = unwrapPlatformResponseEnvelope<unknown>(
|
|
80
80
|
payload,
|
|
81
81
|
`fetchSystemDatabaseConfig: ${url}`,
|
|
82
82
|
);
|
|
@@ -99,12 +99,15 @@ const REQUIRED_CONFIG_FIELDS = [
|
|
|
99
99
|
* fields and the keys actually present, to distinguish "control plane returned
|
|
100
100
|
* a partial config" from "response envelope was not unwrapped".
|
|
101
101
|
*/
|
|
102
|
-
function assertCompleteConfig(
|
|
102
|
+
function assertCompleteConfig(
|
|
103
|
+
config: unknown,
|
|
104
|
+
url: string,
|
|
105
|
+
): asserts config is BiomeDatabaseConfig {
|
|
103
106
|
// A null / non-object body coerces to `{}`, so every required field reads as
|
|
104
107
|
// missing and the diagnostic below fires with "Present keys: []".
|
|
105
|
-
const record =
|
|
108
|
+
const record: Record<string, unknown> =
|
|
106
109
|
config !== null && typeof config === 'object'
|
|
107
|
-
? (config
|
|
110
|
+
? Object.fromEntries(Object.entries(config))
|
|
108
111
|
: {};
|
|
109
112
|
const missing = REQUIRED_CONFIG_FIELDS.filter((field) => {
|
|
110
113
|
const value = record[field];
|
|
@@ -53,6 +53,31 @@ export interface ApplicationManagedBiomeDatabaseModuleOptions
|
|
|
53
53
|
export type BiomeDatabaseModuleOptions =
|
|
54
54
|
ApplicationManagedBiomeDatabaseModuleOptions;
|
|
55
55
|
|
|
56
|
+
function assertBiomeDatabaseModuleOptions(
|
|
57
|
+
opts: unknown,
|
|
58
|
+
): asserts opts is BiomeDatabaseModuleOptions {
|
|
59
|
+
if (
|
|
60
|
+
opts === null ||
|
|
61
|
+
typeof opts !== 'object' ||
|
|
62
|
+
!('migrationMode' in opts) ||
|
|
63
|
+
opts.migrationMode !== BiomeDatabaseMigrationMode.ApplicationManaged
|
|
64
|
+
) {
|
|
65
|
+
throw new Error(
|
|
66
|
+
'[biome-database] migrationMode is required and must be ApplicationManaged.',
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (
|
|
71
|
+
!('databases' in opts) ||
|
|
72
|
+
!Array.isArray(opts.databases) ||
|
|
73
|
+
opts.databases.length === 0
|
|
74
|
+
) {
|
|
75
|
+
throw new Error(
|
|
76
|
+
'[biome-database] every migration mode requires at least one explicit database declaration.',
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
56
81
|
/**
|
|
57
82
|
* Global Nest dynamic module that bootstraps a biome's database using an
|
|
58
83
|
* explicitly selected migration ownership mode.
|
|
@@ -98,22 +123,10 @@ export type BiomeDatabaseModuleOptions =
|
|
|
98
123
|
*/
|
|
99
124
|
@Module({})
|
|
100
125
|
export class BiomeDatabaseModule {
|
|
101
|
-
static forRoot(opts: BiomeDatabaseModuleOptions): DynamicModule
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
throw new Error(
|
|
106
|
-
'[biome-database] migrationMode is required and must be a BiomeDatabaseMigrationMode.',
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
if (opts.databases.length === 0) {
|
|
110
|
-
throw new Error(
|
|
111
|
-
'[biome-database] every migration mode requires at least one explicit database declaration.',
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
const databases:
|
|
115
|
-
| readonly BiomeDatabaseDeclaration[]
|
|
116
|
-
= opts.databases;
|
|
126
|
+
static forRoot(opts: BiomeDatabaseModuleOptions): DynamicModule;
|
|
127
|
+
static forRoot(opts: unknown): DynamicModule {
|
|
128
|
+
assertBiomeDatabaseModuleOptions(opts);
|
|
129
|
+
const databases: readonly BiomeDatabaseDeclaration[] = opts.databases;
|
|
117
130
|
|
|
118
131
|
// Build-time OpenAPI extraction compiles the DI graph for decorator
|
|
119
132
|
// metadata only: it never calls `app.init()`, never issues a query, and
|
|
@@ -140,30 +153,16 @@ export class BiomeDatabaseModule {
|
|
|
140
153
|
identityBootstrap: IdentityBootstrapService,
|
|
141
154
|
kernelState: KernelState,
|
|
142
155
|
): Promise<true> => {
|
|
143
|
-
|
|
144
|
-
opts.
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
: {}),
|
|
154
|
-
serviceToken: () => identityBootstrap.getAccessToken(),
|
|
155
|
-
kernelState,
|
|
156
|
-
});
|
|
157
|
-
} else {
|
|
158
|
-
await bootstrapBiomeDatabases({
|
|
159
|
-
biomeId: opts.biomeId,
|
|
160
|
-
migrationMode: opts.migrationMode,
|
|
161
|
-
databases:
|
|
162
|
-
databases,
|
|
163
|
-
serviceToken: () => identityBootstrap.getAccessToken(),
|
|
164
|
-
kernelState,
|
|
165
|
-
});
|
|
166
|
-
}
|
|
156
|
+
await bootstrapBiomeDatabases({
|
|
157
|
+
biomeId: opts.biomeId,
|
|
158
|
+
migrationMode: opts.migrationMode,
|
|
159
|
+
databases,
|
|
160
|
+
...(opts.requiredExtensions !== undefined
|
|
161
|
+
? { requiredExtensions: opts.requiredExtensions }
|
|
162
|
+
: {}),
|
|
163
|
+
serviceToken: () => identityBootstrap.getAccessToken(),
|
|
164
|
+
kernelState,
|
|
165
|
+
});
|
|
167
166
|
return true;
|
|
168
167
|
},
|
|
169
168
|
inject: [IdentityBootstrapService, KERNEL_STATE_TOKEN],
|