@happyvertical/smrt-cli 0.54.3 → 0.55.0

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 (25) hide show
  1. package/dist/{AuditLogCollection-WDHL-_AF-BH_fVbtQ.js → AuditLogCollection-WDHL-_AF-DX3E2T8N.js} +1 -1
  2. package/dist/{OidcIdentity-BjRu3n1g-DLxby4jH.js → OidcIdentity-BjRu3n1g-CDe9x3H4.js} +2 -2
  3. package/dist/{OidcIdentityCollection-B4jYh36_-By9emBa2.js → OidcIdentityCollection-B4jYh36_-C1oRTUpg.js} +1 -1
  4. package/dist/{ProfileAssetCollection-HeMtjBc0-oIL6YSUZ.js → ProfileAssetCollection-HeMtjBc0-CgCD0JbD.js} +3 -3
  5. package/dist/{ProfileCollection-Bt6IJK49-B1_oDwPG.js → ProfileCollection-Bt6IJK49-DBqiNPOC.js} +16 -16
  6. package/dist/{ProfileLinkCollection-u1hhzKTm-Dr0Nz06-.js → ProfileLinkCollection-u1hhzKTm-CpUpK0hy.js} +2 -2
  7. package/dist/{ProfileMetadataCollection-BIYKy4Y3-DIyfp9vR.js → ProfileMetadataCollection-BIYKy4Y3-BxG7J_LE.js} +1 -1
  8. package/dist/{ProfileMetafieldCollection-Buz7gzag-DTX_ZzEU.js → ProfileMetafieldCollection-Buz7gzag-C6-M3UC5.js} +1 -1
  9. package/dist/{ProfileRelationshipCollection-C4g_QLI4-DbDLX7wE.js → ProfileRelationshipCollection-C4g_QLI4-CBcKkX8B.js} +1 -1
  10. package/dist/cli-generator.d.ts.map +1 -1
  11. package/dist/commands/db-command-utils.d.ts +8 -14
  12. package/dist/commands/db-command-utils.d.ts.map +1 -1
  13. package/dist/commands/utilities.d.ts.map +1 -1
  14. package/dist/{commands-D3EYdGNp.js → commands-CMSkayf7.js} +62 -123
  15. package/dist/db-command-utils-Cn8tjy7N.js +40 -0
  16. package/dist/{dist-DE7COF_x.js → dist-BohGxrxH.js} +4 -4
  17. package/dist/{dist-Bzshoi-0.js → dist-BqPmty2V.js} +2 -2
  18. package/dist/{dist-BJgUA7Bn.js → dist-CZX3a2M0.js} +3 -3
  19. package/dist/{dist-D5MGUBs8.js → dist-CzyJ1JlI.js} +15 -15
  20. package/dist/dist-cID_nI8e.js +20 -0
  21. package/dist/index.js +13 -10
  22. package/dist/{oidcProvisioningPrimitives-CYood-2M-5BmKJPFx.js → oidcProvisioningPrimitives-CYood-2M-DBI73_rU.js} +3 -3
  23. package/dist/{resolveIdentity-CvGDegU6--sWLCFfc.js → resolveIdentity-CvGDegU6-BCmnlTTo.js} +14 -14
  24. package/package.json +10 -10
  25. package/dist/dist-KGK8QWAS.js +0 -20
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { i as tenantId, r as TenantScoped } from "./dist-Bzshoi-0.js";
2
+ import { i as tenantId, r as TenantScoped } from "./dist-BqPmty2V.js";
3
3
  import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
4
4
  import { SmrtCollection, SmrtObject, field, foreignKey, smrt } from "@happyvertical/smrt-core";
5
5
  //#region ../profiles/dist/chunks/AuditLogCollection-WDHL-_AF.js
@@ -42,7 +42,7 @@ var OidcIdentity = class extends SmrtObject {
42
42
  * Find identity by issuer and subject
43
43
  */
44
44
  static async findBySubject(issuer, subject, options = {}) {
45
- const { OidcIdentityCollection } = await import("./OidcIdentityCollection-B4jYh36_-By9emBa2.js").then((n) => n.r).then((n) => n.r);
45
+ const { OidcIdentityCollection } = await import("./OidcIdentityCollection-B4jYh36_-C1oRTUpg.js").then((n) => n.r).then((n) => n.r);
46
46
  return await (await OidcIdentityCollection.create(options)).findBySubject(issuer, subject);
47
47
  }
48
48
  /** Build the collision-free natural key for one OIDC issuer subject. */
@@ -65,7 +65,7 @@ var OidcIdentity = class extends SmrtObject {
65
65
  static async findOrCreate(profile, oidcData, options = {}) {
66
66
  const profileId = profile.id;
67
67
  if (typeof profileId !== "string" || !profileId) throw new Error("OidcIdentity.findOrCreate() requires a saved Profile.");
68
- const { reuseExistingOidcIdentityForProfile } = await import("./resolveIdentity-CvGDegU6--sWLCFfc.js").then((n) => n.i).then((n) => n.i);
68
+ const { reuseExistingOidcIdentityForProfile } = await import("./resolveIdentity-CvGDegU6-BCmnlTTo.js").then((n) => n.i).then((n) => n.i);
69
69
  const profileOptions = profile.options ?? {};
70
70
  return (await reuseExistingOidcIdentityForProfile(profileId, {
71
71
  email: oidcData.email,
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
2
  import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
3
- import { t as OidcIdentity } from "./OidcIdentity-BjRu3n1g-DLxby4jH.js";
3
+ import { t as OidcIdentity } from "./OidcIdentity-BjRu3n1g-CDe9x3H4.js";
4
4
  import { SmrtCollection } from "@happyvertical/smrt-core";
5
5
  //#region ../profiles/dist/chunks/OidcIdentityCollection-B4jYh36_.js
6
6
  var OidcIdentityCollection_B4jYh36__exports = /* @__PURE__ */ __exportAll({
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { i as tenantId, r as TenantScoped } from "./dist-Bzshoi-0.js";
2
+ import { i as tenantId, r as TenantScoped } from "./dist-BqPmty2V.js";
3
3
  import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
4
- import { a as getOwnedAssetsFromCollection, o as removeOwnedAssetFromCollection, t as addOwnedAssetFromCollection } from "./dist-BJgUA7Bn.js";
4
+ import { a as getOwnedAssetsFromCollection, o as removeOwnedAssetFromCollection, t as addOwnedAssetFromCollection } from "./dist-CZX3a2M0.js";
5
5
  import { SmrtJunction, SmrtObject, crossPackageRef, field, foreignKey, smrt } from "@happyvertical/smrt-core";
6
6
  //#region ../profiles/dist/chunks/ProfileAssetCollection-HeMtjBc0.js
7
7
  var ProfileAssetCollection_HeMtjBc0_exports = /* @__PURE__ */ __exportAll({
@@ -84,7 +84,7 @@ var ProfileAssetCollection = class extends SmrtJunction {
84
84
  profileCollectionPromise = null;
85
85
  async getProfileCollection() {
86
86
  if (!this.profileCollectionPromise) {
87
- const { ProfileCollection } = await import("./ProfileCollection-Bt6IJK49-B1_oDwPG.js").then((n) => n.o).then((n) => n.r);
87
+ const { ProfileCollection } = await import("./ProfileCollection-Bt6IJK49-DBqiNPOC.js").then((n) => n.o).then((n) => n.r);
88
88
  this.profileCollectionPromise = ProfileCollection.create({ db: this.db });
89
89
  }
90
90
  return this.profileCollectionPromise;
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { a as queryGlobal, i as tenantId, l as withSystemContext, n as resolvePrompt, o as queryWithGlobals, r as TenantScoped, s as getTenantId, t as definePrompt } from "./dist-Bzshoi-0.js";
2
+ import { a as queryGlobal, i as tenantId, l as withSystemContext, n as resolvePrompt, o as queryWithGlobals, r as TenantScoped, s as getTenantId, t as definePrompt } from "./dist-BqPmty2V.js";
3
3
  import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
4
- import { a as getOwnedAssetsFromCollection, i as assertValidOwnedAssetSortOrder, n as assertAssetLinkable, o as removeOwnedAssetFromCollection, r as assertValidOwnedAssetRelationship, s as resolveOwnedAssetsById, t as addOwnedAssetFromCollection } from "./dist-BJgUA7Bn.js";
4
+ import { a as getOwnedAssetsFromCollection, i as assertValidOwnedAssetSortOrder, n as assertAssetLinkable, o as removeOwnedAssetFromCollection, r as assertValidOwnedAssetRelationship, s as resolveOwnedAssetsById, t as addOwnedAssetFromCollection } from "./dist-CZX3a2M0.js";
5
5
  import { RuntimeError, SmrtCollection, SmrtObject, ValidationError, field, foreignKey, isAbortedTransactionError, oneToMany, smrt } from "@happyvertical/smrt-core";
6
6
  import { BackfillTableUnavailableError, BackfillTracker } from "@happyvertical/smrt-core/migrations";
7
7
  //#region ../profiles/dist/chunks/ProfileCollection-Bt6IJK49.js
@@ -453,8 +453,8 @@ var Profile = class extends SmrtObject {
453
453
  * @param value - The value to set
454
454
  */
455
455
  async addMetadata(metafieldSlug, value) {
456
- const { ProfileMetafieldCollection } = await import("./ProfileMetafieldCollection-Buz7gzag-DTX_ZzEU.js").then((n) => n.r).then((n) => n.n);
457
- const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-BIYKy4Y3-DIyfp9vR.js").then((n) => n.r).then((n) => n.n);
456
+ const { ProfileMetafieldCollection } = await import("./ProfileMetafieldCollection-Buz7gzag-C6-M3UC5.js").then((n) => n.r).then((n) => n.n);
457
+ const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-BIYKy4Y3-BxG7J_LE.js").then((n) => n.r).then((n) => n.n);
458
458
  const metafield = await this.resolveMetafield(await ProfileMetafieldCollection.create(this.options), metafieldSlug);
459
459
  if (!metafield) throw new Error(`Metafield '${metafieldSlug}' not found`);
460
460
  await metafield.validateValue(value);
@@ -487,7 +487,7 @@ var Profile = class extends SmrtObject {
487
487
  * @returns Object with metafield slugs as keys
488
488
  */
489
489
  async getMetadata() {
490
- const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-BIYKy4Y3-DIyfp9vR.js").then((n) => n.r).then((n) => n.n);
490
+ const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-BIYKy4Y3-BxG7J_LE.js").then((n) => n.r).then((n) => n.n);
491
491
  return await (await ProfileMetadataCollection.create(this.options)).getMetadataObject(this.id);
492
492
  }
493
493
  /**
@@ -504,8 +504,8 @@ var Profile = class extends SmrtObject {
504
504
  * @param metafieldSlug - The slug of the metafield to remove
505
505
  */
506
506
  async removeMetadata(metafieldSlug) {
507
- const { ProfileMetafieldCollection } = await import("./ProfileMetafieldCollection-Buz7gzag-DTX_ZzEU.js").then((n) => n.r).then((n) => n.n);
508
- const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-BIYKy4Y3-DIyfp9vR.js").then((n) => n.r).then((n) => n.n);
507
+ const { ProfileMetafieldCollection } = await import("./ProfileMetafieldCollection-Buz7gzag-C6-M3UC5.js").then((n) => n.r).then((n) => n.n);
508
+ const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-BIYKy4Y3-BxG7J_LE.js").then((n) => n.r).then((n) => n.n);
509
509
  const metafield = await this.resolveMetafield(await ProfileMetafieldCollection.create(this.options), metafieldSlug);
510
510
  if (!metafield) throw new Error(`Metafield '${metafieldSlug}' not found`);
511
511
  const existing = await (await ProfileMetadataCollection.create(this.options)).list({
@@ -530,7 +530,7 @@ var Profile = class extends SmrtObject {
530
530
  return candidates.find((candidate) => ownerTenantId && candidate.tenantId === ownerTenantId) ?? candidates.find((candidate) => !candidate.tenantId) ?? null;
531
531
  }
532
532
  async getProfileLinkCollection() {
533
- const { ProfileLinkCollection } = await import("./ProfileLinkCollection-u1hhzKTm-Dr0Nz06-.js").then((n) => n.i).then((n) => n.r);
533
+ const { ProfileLinkCollection } = await import("./ProfileLinkCollection-u1hhzKTm-CpUpK0hy.js").then((n) => n.i).then((n) => n.r);
534
534
  return ProfileLinkCollection.create({ db: this.db });
535
535
  }
536
536
  /** This profile's web links in display order. */
@@ -547,7 +547,7 @@ var Profile = class extends SmrtObject {
547
547
  return (await this.getProfileLinkCollection()).replaceForProfile(this.id, links);
548
548
  }
549
549
  async getProfileAssetCollection() {
550
- const { ProfileAssetCollection } = await import("./ProfileAssetCollection-HeMtjBc0-oIL6YSUZ.js").then((n) => n.r).then((n) => n.n);
550
+ const { ProfileAssetCollection } = await import("./ProfileAssetCollection-HeMtjBc0-CgCD0JbD.js").then((n) => n.r).then((n) => n.n);
551
551
  return ProfileAssetCollection.create({ db: this.db });
552
552
  }
553
553
  async getAssets(relationship) {
@@ -579,7 +579,7 @@ var Profile = class extends SmrtObject {
579
579
  */
580
580
  async addRelationship(toProfile, relationshipSlug, contextProfile) {
581
581
  const { ProfileRelationshipTypeCollection } = await import("./ProfileRelationshipTypeCollection-_n22WqTb-DiZUWvev.js").then((n) => n.n).then((n) => n.n);
582
- const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-C4g_QLI4-DbDLX7wE.js").then((n) => n.r).then((n) => n.n);
582
+ const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-C4g_QLI4-CBcKkX8B.js").then((n) => n.r).then((n) => n.n);
583
583
  const { ProfileRelationshipType } = await import("./ProfileRelationshipType-U7IwF6Wf-DNavf24e.js").then((n) => n.n).then((n) => n.n);
584
584
  const relationshipType = await (await ProfileRelationshipTypeCollection.create(this.options)).getBySlug(relationshipSlug);
585
585
  if (!relationshipType) throw new Error(`Relationship type '${relationshipSlug}' not found`);
@@ -604,7 +604,7 @@ var Profile = class extends SmrtObject {
604
604
  * @returns Array of ProfileRelationship instances
605
605
  */
606
606
  async getRelationships(options) {
607
- const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-C4g_QLI4-DbDLX7wE.js").then((n) => n.r).then((n) => n.n);
607
+ const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-C4g_QLI4-CBcKkX8B.js").then((n) => n.r).then((n) => n.n);
608
608
  const { ProfileRelationshipTypeCollection } = await import("./ProfileRelationshipTypeCollection-_n22WqTb-DiZUWvev.js").then((n) => n.n).then((n) => n.n);
609
609
  const relationshipCollection = await ProfileRelationshipCollection.create(this.options);
610
610
  const direction = options?.direction || "all";
@@ -649,7 +649,7 @@ var Profile = class extends SmrtObject {
649
649
  */
650
650
  async removeRelationship(toProfile, relationshipSlug) {
651
651
  const { ProfileRelationshipTypeCollection } = await import("./ProfileRelationshipTypeCollection-_n22WqTb-DiZUWvev.js").then((n) => n.n).then((n) => n.n);
652
- const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-C4g_QLI4-DbDLX7wE.js").then((n) => n.r).then((n) => n.n);
652
+ const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-C4g_QLI4-CBcKkX8B.js").then((n) => n.r).then((n) => n.n);
653
653
  const relationshipType = await (await ProfileRelationshipTypeCollection.create(this.options)).getBySlug(relationshipSlug);
654
654
  if (!relationshipType) throw new Error(`Relationship type '${relationshipSlug}' not found`);
655
655
  const relationshipCollection = await ProfileRelationshipCollection.create(this.options);
@@ -773,7 +773,7 @@ var Profile = class extends SmrtObject {
773
773
  * @returns Array of OIDC identity records
774
774
  */
775
775
  async getOidcIdentities() {
776
- const { OidcIdentityCollection } = await import("./OidcIdentityCollection-B4jYh36_-By9emBa2.js").then((n) => n.r).then((n) => n.r);
776
+ const { OidcIdentityCollection } = await import("./OidcIdentityCollection-B4jYh36_-C1oRTUpg.js").then((n) => n.r).then((n) => n.r);
777
777
  return await (await OidcIdentityCollection.create(this.options)).findByProfile(this.id);
778
778
  }
779
779
  /**
@@ -786,7 +786,7 @@ var Profile = class extends SmrtObject {
786
786
  * type, but refuses to create or rebind authority.
787
787
  */
788
788
  async linkOidcIdentity(oidcData) {
789
- const { OidcIdentityCollection } = await import("./OidcIdentityCollection-B4jYh36_-By9emBa2.js").then((n) => n.r).then((n) => n.r);
789
+ const { OidcIdentityCollection } = await import("./OidcIdentityCollection-B4jYh36_-C1oRTUpg.js").then((n) => n.r).then((n) => n.r);
790
790
  return await (await OidcIdentityCollection.create(this.options)).linkToProfile(this, oidcData);
791
791
  }
792
792
  /**
@@ -815,7 +815,7 @@ var Profile = class extends SmrtObject {
815
815
  * @returns Array of audit log entries
816
816
  */
817
817
  async getAuditLogs(limit = 50) {
818
- const { AuditLogCollection } = await import("./AuditLogCollection-WDHL-_AF-BH_fVbtQ.js").then((n) => n.r).then((n) => n.n);
818
+ const { AuditLogCollection } = await import("./AuditLogCollection-WDHL-_AF-DX3E2T8N.js").then((n) => n.r).then((n) => n.n);
819
819
  return await (await AuditLogCollection.create(this.options)).getRecentActivity(this.id, limit);
820
820
  }
821
821
  /**
@@ -825,7 +825,7 @@ var Profile = class extends SmrtObject {
825
825
  * @returns The created audit log entry
826
826
  */
827
827
  async recordAction(options) {
828
- const { AuditLogCollection } = await import("./AuditLogCollection-WDHL-_AF-BH_fVbtQ.js").then((n) => n.r).then((n) => n.n);
828
+ const { AuditLogCollection } = await import("./AuditLogCollection-WDHL-_AF-DX3E2T8N.js").then((n) => n.r).then((n) => n.n);
829
829
  return await (await AuditLogCollection.create(this.options)).record({
830
830
  profile: this,
831
831
  ...options
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { i as tenantId, r as TenantScoped } from "./dist-Bzshoi-0.js";
2
+ import { i as tenantId, r as TenantScoped } from "./dist-BqPmty2V.js";
3
3
  import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
4
4
  import { SmrtCollection, SmrtObject, field, foreignKey, isEmbeddedDatabase, smrt, withEmbeddedWriteTransaction } from "@happyvertical/smrt-core";
5
5
  //#region ../profiles/dist/chunks/ProfileLinkCollection-u1hhzKTm.js
@@ -203,7 +203,7 @@ var ProfileLinkCollection = class ProfileLinkCollection extends SmrtCollection {
203
203
  /** The profile's tenant; throws when the profile is not visible here. */
204
204
  async requireProfileTenant(profileId) {
205
205
  if (!profileId) throw new Error("A profile link needs a profile");
206
- const { ProfileCollection } = await import("./ProfileCollection-Bt6IJK49-B1_oDwPG.js").then((n) => n.o).then((n) => n.r);
206
+ const { ProfileCollection } = await import("./ProfileCollection-Bt6IJK49-DBqiNPOC.js").then((n) => n.o).then((n) => n.r);
207
207
  const profile = await (await ProfileCollection.create({ db: this.db })).get({ id: profileId });
208
208
  if (!profile) throw new Error(`Profile '${profileId}' not found`);
209
209
  return profile.tenantId ?? null;
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { i as tenantId, r as TenantScoped } from "./dist-Bzshoi-0.js";
2
+ import { i as tenantId, r as TenantScoped } from "./dist-BqPmty2V.js";
3
3
  import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
4
4
  import { SmrtCollection, SmrtObject, field, foreignKey, smrt } from "@happyvertical/smrt-core";
5
5
  //#region ../profiles/dist/chunks/ProfileMetadataCollection-BIYKy4Y3.js
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { i as tenantId, r as TenantScoped } from "./dist-Bzshoi-0.js";
2
+ import { i as tenantId, r as TenantScoped } from "./dist-BqPmty2V.js";
3
3
  import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
4
4
  import { SmrtCollection, SmrtObject, field, smrt } from "@happyvertical/smrt-core";
5
5
  //#region ../profiles/dist/chunks/ProfileMetafieldCollection-Buz7gzag.js
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { i as tenantId, r as TenantScoped } from "./dist-Bzshoi-0.js";
2
+ import { i as tenantId, r as TenantScoped } from "./dist-BqPmty2V.js";
3
3
  import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
4
4
  import { SmrtCollection, SmrtObject, foreignKey, oneToMany, smrt } from "@happyvertical/smrt-core";
5
5
  //#region ../profiles/dist/chunks/ProfileRelationshipCollection-C4g_QLI4.js
@@ -1 +1 @@
1
- {"version":3,"file":"cli-generator.d.ts","sourceRoot":"","sources":["../src/cli-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-generator.d.ts","sourceRoot":"","sources":["../src/cli-generator.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,5 @@
1
- export declare function redactConnectionString(value: string): string;
2
- /**
3
- * Redact connection-string credentials embedded anywhere inside arbitrary
4
- * text, rather than a standalone URL value.
5
- *
6
- * Command failure paths surface driver/error text (`error.message`,
7
- * `error.stack`, wrapped `originalError`/`sql` context) that can itself
8
- * contain the connection string a command was given — for example a
9
- * malformed-URL parse error, or a client library that echoes the DSN it
10
- * tried. `redactConnectionString` expects its whole input to parse as a URL;
11
- * this scrubs matches wherever they occur in a larger, unknown-shaped string
12
- * and never throws.
13
- */
14
- export declare function redactConnectionStringsInText(text: string): string;
1
+ import { redactDatabaseUrl, redactDatabaseUrlsInText } from '@happyvertical/smrt-core/utils/database-url';
2
+ export { redactDatabaseUrl, redactDatabaseUrlsInText };
15
3
  /**
16
4
  * Quote a SQL identifier (table name, column name, etc.).
17
5
  *
@@ -19,6 +7,12 @@ export declare function redactConnectionStringsInText(text: string): string;
19
7
  * and DuckDB, and escapes embedded double quotes by doubling them.
20
8
  */
21
9
  export declare function quoteIdentifier(name: string): string;
10
+ /**
11
+ * Render the configured database for command output: scheme, username, host,
12
+ * port and database at most — never the password or query string (#3527).
13
+ * A bare local path (`./data/dev.db`, `:memory:`) is shown as
14
+ * `<dbType>://<path>`.
15
+ */
22
16
  export declare function formatDatabaseDisplayUrl(dbType: string, dbUrl: string): string;
23
17
  export declare function closeDatabaseConnection(db: unknown): Promise<void>;
24
18
  //# sourceMappingURL=db-command-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"db-command-utils.d.ts","sourceRoot":"","sources":["../../src/commands/db-command-utils.ts"],"names":[],"mappings":"AAyCA,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsB5D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CAMR;AAED,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBxE"}
1
+ {"version":3,"file":"db-command-utils.d.ts","sourceRoot":"","sources":["../../src/commands/db-command-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,6CAA6C,CAAC;AAKrD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,CAAC;AAUvD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CAKR;AAED,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/commands/utilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/commands/utilities.ts"],"names":[],"mappings":"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"}