dbctx 1.0.3 → 1.3.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 (119) hide show
  1. package/dist/app/assemble.d.mts +5 -0
  2. package/dist/app/assemble.d.mts.map +1 -0
  3. package/dist/app/assemble.mjs +161 -0
  4. package/dist/app/config.d.mts +9 -0
  5. package/dist/app/config.d.mts.map +1 -0
  6. package/dist/app/config.mjs +49 -0
  7. package/dist/app/db.d.mts +9 -0
  8. package/dist/app/db.d.mts.map +1 -0
  9. package/dist/app/db.mjs +181 -0
  10. package/dist/app/detect.d.mts +11 -0
  11. package/dist/app/detect.d.mts.map +1 -0
  12. package/dist/app/detect.mjs +105 -0
  13. package/dist/app/index.d.mts +3 -0
  14. package/dist/app/index.d.mts.map +1 -0
  15. package/dist/app/index.mjs +81 -0
  16. package/dist/app/open-url.d.mts +4 -0
  17. package/dist/app/open-url.d.mts.map +1 -0
  18. package/dist/app/open-url.mjs +27 -0
  19. package/dist/app/session.d.mts +8 -0
  20. package/dist/app/session.d.mts.map +1 -0
  21. package/dist/app/session.mjs +155 -0
  22. package/dist/app/ssh.d.mts +3 -0
  23. package/dist/app/ssh.d.mts.map +1 -0
  24. package/dist/app/ssh.mjs +207 -0
  25. package/dist/db/analyze.d.mts +1 -1
  26. package/dist/db/analyze.d.mts.map +1 -1
  27. package/dist/db/analyze.mjs +1 -1
  28. package/dist/db/attributes.d.mts +3 -3
  29. package/dist/db/attributes.d.mts.map +1 -1
  30. package/dist/db/attributes.mjs +2 -2
  31. package/dist/db/enums.d.mts +1 -1
  32. package/dist/db/enums.d.mts.map +1 -1
  33. package/dist/db/enums.mjs +2 -2
  34. package/dist/db/file-stats.d.mts +1 -1
  35. package/dist/db/file-stats.d.mts.map +1 -1
  36. package/dist/db/file-stats.mjs +1 -1
  37. package/dist/db/foreign-keys.d.mts +2 -2
  38. package/dist/db/foreign-keys.d.mts.map +1 -1
  39. package/dist/db/foreign-keys.mjs +1 -1
  40. package/dist/db/index.d.mts +9 -9
  41. package/dist/db/index.d.mts.map +1 -1
  42. package/dist/db/index.mjs +10 -10
  43. package/dist/db/indexes.d.mts +1 -1
  44. package/dist/db/indexes.d.mts.map +1 -1
  45. package/dist/db/indexes.mjs +1 -1
  46. package/dist/db/relations.d.mts +2 -2
  47. package/dist/db/relations.d.mts.map +1 -1
  48. package/dist/db/relations.mjs +2 -2
  49. package/dist/db/stats.d.mts +1 -1
  50. package/dist/db/stats.d.mts.map +1 -1
  51. package/dist/db/stats.mjs +2 -2
  52. package/dist/db/version.d.mts +2 -1
  53. package/dist/db/version.d.mts.map +1 -1
  54. package/dist/db/version.mjs +9 -1
  55. package/dist/index.d.mts +4 -3
  56. package/dist/index.d.mts.map +1 -1
  57. package/dist/index.mjs +105 -51
  58. package/dist/lib/trpc-url.d.mts +2 -0
  59. package/dist/lib/trpc-url.d.mts.map +1 -0
  60. package/dist/lib/trpc-url.mjs +6 -0
  61. package/dist/lib/trpc.d.mts +7 -0
  62. package/dist/lib/trpc.d.mts.map +1 -0
  63. package/dist/lib/trpc.mjs +37 -0
  64. package/dist/lib/trpc.react.d.mts +4 -0
  65. package/dist/lib/trpc.react.d.mts.map +1 -0
  66. package/dist/lib/trpc.react.mjs +3 -0
  67. package/dist/lib/version.d.mts +2 -0
  68. package/dist/lib/version.d.mts.map +1 -0
  69. package/dist/lib/version.mjs +5 -0
  70. package/dist/providers/TrpcProvider.d.ts +9 -0
  71. package/dist/providers/TrpcProvider.d.ts.map +1 -0
  72. package/dist/providers/TrpcProvider.js +41 -0
  73. package/dist/schemas/index.d.mts +106 -1
  74. package/dist/schemas/index.d.mts.map +1 -1
  75. package/dist/schemas/index.mjs +27 -2
  76. package/dist/store.d.mts +64 -0
  77. package/dist/store.d.mts.map +1 -0
  78. package/dist/store.mjs +68 -0
  79. package/dist/{App.d.ts → types/connection.d.mts} +3 -9
  80. package/dist/types/connection.d.mts.map +1 -0
  81. package/dist/types/connection.mjs +2 -0
  82. package/dist/ui/App.d.ts +10 -0
  83. package/dist/ui/App.d.ts.map +1 -0
  84. package/dist/ui/App.js +13 -0
  85. package/dist/ui/components/DB.d.ts +10 -0
  86. package/dist/ui/components/DB.d.ts.map +1 -0
  87. package/dist/ui/components/DB.js +22 -0
  88. package/dist/{components → ui/components}/Error.d.ts +1 -1
  89. package/dist/ui/components/Error.d.ts.map +1 -0
  90. package/dist/ui/components/Error.js +6 -0
  91. package/dist/ui/components/Gate.d.ts +10 -0
  92. package/dist/ui/components/Gate.d.ts.map +1 -0
  93. package/dist/ui/components/Gate.js +15 -0
  94. package/dist/ui/components/Introspect.d.ts +10 -0
  95. package/dist/ui/components/Introspect.d.ts.map +1 -0
  96. package/dist/ui/components/Introspect.js +66 -0
  97. package/dist/ui/components/PasswordInput.d.ts +7 -0
  98. package/dist/ui/components/PasswordInput.d.ts.map +1 -0
  99. package/dist/ui/components/PasswordInput.js +32 -0
  100. package/dist/ui/components/SSH.d.ts +10 -0
  101. package/dist/ui/components/SSH.d.ts.map +1 -0
  102. package/dist/ui/components/SSH.js +22 -0
  103. package/dist/ui/components/Session.d.ts +10 -0
  104. package/dist/ui/components/Session.d.ts.map +1 -0
  105. package/dist/ui/components/Session.js +47 -0
  106. package/dist/ui/components/Spinner.d.ts +3 -0
  107. package/dist/ui/components/Spinner.d.ts.map +1 -0
  108. package/dist/ui/components/Spinner.js +18 -0
  109. package/dist/ui/components/Splash.d.ts +3 -0
  110. package/dist/ui/components/Splash.d.ts.map +1 -0
  111. package/dist/ui/components/Splash.js +13 -0
  112. package/dist/validatePaths.d.mts +1 -1
  113. package/dist/validatePaths.d.mts.map +1 -1
  114. package/dist/validatePaths.mjs +17 -11
  115. package/package.json +22 -2
  116. package/dist/App.d.ts.map +0 -1
  117. package/dist/App.js +0 -9
  118. package/dist/components/Error.d.ts.map +0 -1
  119. package/dist/components/Error.js +0 -6
package/dist/db/stats.mjs CHANGED
@@ -13,7 +13,7 @@ export const fetchRelationStats = async (pool, relationName) => {
13
13
  JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace AND n.nspname = s.schemaname
14
14
  WHERE s.schemaname = 'public'
15
15
  AND s.tablename = $1
16
- ORDER BY s.attnum
16
+ ORDER BY s.attname
17
17
  `, [relationName]);
18
18
  if (result.rows.length === 0) {
19
19
  return {
@@ -31,4 +31,4 @@ export const fetchRelationStats = async (pool, relationName) => {
31
31
  })),
32
32
  };
33
33
  };
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiZGIvc3RhdHMubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEtBQUssRUFBRSxJQUFVLEVBQUUsWUFBb0IsRUFBMkIsRUFBRTtJQUNsRyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQzNCOzs7Ozs7Ozs7Ozs7Ozs7U0FlQyxFQUNELENBQUMsWUFBWSxDQUFDLENBQ2pCLENBQUM7SUFFRixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU87WUFDSCxhQUFhLEVBQUUsWUFBWTtZQUMzQixtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLFVBQVUsRUFBRSxFQUFFO1NBQ2pCLENBQUM7SUFDTixDQUFDO0lBRUQsT0FBTztRQUNILGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFDM0MsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7UUFDdkQsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRSxjQUFjO1lBQ2Qsa0JBQWtCO1NBQ3JCLENBQUMsQ0FBQztLQUNOLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBvb2wgfSBmcm9tIFwicGdcIjtcblxuZXhwb3J0IHR5cGUgVEF0dHJpYnV0ZVN0YXRzID0ge1xuICAgIGF0dHJpYnV0ZV9uYW1lOiBzdHJpbmc7XG4gICAgZXN0aW1hdGVkX2Rpc3RpbmN0OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBUUmVsYXRpb25TdGF0cyA9IHtcbiAgICByZWxhdGlvbl9uYW1lOiBzdHJpbmc7XG4gICAgZXN0aW1hdGVkX3Jvd19jb3VudDogbnVtYmVyO1xuICAgIGF0dHJpYnV0ZXM6IFRBdHRyaWJ1dGVTdGF0c1tdO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUmVsYXRpb25TdGF0cyA9IGFzeW5jIChwb29sOiBQb29sLCByZWxhdGlvbk5hbWU6IHN0cmluZyk6IFByb21pc2U8VFJlbGF0aW9uU3RhdHM+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PFRBdHRyaWJ1dGVTdGF0cyAmIHsgcmVsYXRpb25fbmFtZTogc3RyaW5nOyBlc3RpbWF0ZWRfcm93X2NvdW50OiBudW1iZXIgfT4oXG4gICAgICAgIGBcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICBzLnRhYmxlbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgYy5yZWx0dXBsZXM6OmJpZ2ludCBBUyBlc3RpbWF0ZWRfcm93X2NvdW50LFxuICAgICAgICAgICAgcy5hdHRuYW1lIEFTIGF0dHJpYnV0ZV9uYW1lLFxuICAgICAgICAgICAgQ0FTRVxuICAgICAgICAgICAgICAgIFdIRU4gcy5uX2Rpc3RpbmN0ID4gMCBUSEVOIHMubl9kaXN0aW5jdFxuICAgICAgICAgICAgICAgIEVMU0UgYWJzKHMubl9kaXN0aW5jdCkgKiBjLnJlbHR1cGxlc1xuICAgICAgICAgICAgRU5EOjpiaWdpbnQgQVMgZXN0aW1hdGVkX2Rpc3RpbmN0XG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19zdGF0cyBzXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjIE9OIGMucmVsbmFtZSA9IHMudGFibGVuYW1lXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlIEFORCBuLm5zcG5hbWUgPSBzLnNjaGVtYW5hbWVcbiAgICAgICAgV0hFUkUgcy5zY2hlbWFuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgIEFORCBzLnRhYmxlbmFtZSA9ICQxXG4gICAgICAgIE9SREVSIEJZIHMuYXR0bnVtXG4gICAgICAgIGAsXG4gICAgICAgIFtyZWxhdGlvbk5hbWVdXG4gICAgKTtcblxuICAgIGlmIChyZXN1bHQucm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlbGF0aW9uX25hbWU6IHJlbGF0aW9uTmFtZSxcbiAgICAgICAgICAgIGVzdGltYXRlZF9yb3dfY291bnQ6IDAsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICByZWxhdGlvbl9uYW1lOiByZXN1bHQucm93c1swXS5yZWxhdGlvbl9uYW1lLFxuICAgICAgICBlc3RpbWF0ZWRfcm93X2NvdW50OiByZXN1bHQucm93c1swXS5lc3RpbWF0ZWRfcm93X2NvdW50LFxuICAgICAgICBhdHRyaWJ1dGVzOiByZXN1bHQucm93cy5tYXAoKHsgYXR0cmlidXRlX25hbWUsIGVzdGltYXRlZF9kaXN0aW5jdCB9KSA9PiAoe1xuICAgICAgICAgICAgYXR0cmlidXRlX25hbWUsXG4gICAgICAgICAgICBlc3RpbWF0ZWRfZGlzdGluY3QsXG4gICAgICAgIH0pKSxcbiAgICB9O1xufTtcbiJdfQ==
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiZGIvc3RhdHMubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEtBQUssRUFDbkMsSUFBVSxFQUNWLFlBQW9CLEVBQ0csRUFBRTtJQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBRzNCOzs7Ozs7Ozs7Ozs7Ozs7U0FlQyxFQUNELENBQUMsWUFBWSxDQUFDLENBQ2pCLENBQUM7SUFFRixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU87WUFDSCxhQUFhLEVBQUUsWUFBWTtZQUMzQixtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLFVBQVUsRUFBRSxFQUFFO1NBQ2pCLENBQUM7SUFDTixDQUFDO0lBRUQsT0FBTztRQUNILGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFDM0MsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7UUFDdkQsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxjQUFjLEVBQUUsa0JBQWtCLEVBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRSxjQUFjO1lBQ2Qsa0JBQWtCO1NBQ3JCLENBQUMsQ0FBQztLQUNOLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUQXR0cmlidXRlU3RhdHMgPSB7XG4gICAgYXR0cmlidXRlX25hbWU6IHN0cmluZztcbiAgICBlc3RpbWF0ZWRfZGlzdGluY3Q6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFRSZWxhdGlvblN0YXRzID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBlc3RpbWF0ZWRfcm93X2NvdW50OiBudW1iZXI7XG4gICAgYXR0cmlidXRlczogVEF0dHJpYnV0ZVN0YXRzW107XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hSZWxhdGlvblN0YXRzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgcmVsYXRpb25OYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPFRSZWxhdGlvblN0YXRzPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxcbiAgICAgICAgVEF0dHJpYnV0ZVN0YXRzICYge3JlbGF0aW9uX25hbWU6IHN0cmluZzsgZXN0aW1hdGVkX3Jvd19jb3VudDogbnVtYmVyfVxuICAgID4oXG4gICAgICAgIGBcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICBzLnRhYmxlbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgYy5yZWx0dXBsZXM6OmJpZ2ludCBBUyBlc3RpbWF0ZWRfcm93X2NvdW50LFxuICAgICAgICAgICAgcy5hdHRuYW1lIEFTIGF0dHJpYnV0ZV9uYW1lLFxuICAgICAgICAgICAgQ0FTRVxuICAgICAgICAgICAgICAgIFdIRU4gcy5uX2Rpc3RpbmN0ID4gMCBUSEVOIHMubl9kaXN0aW5jdFxuICAgICAgICAgICAgICAgIEVMU0UgYWJzKHMubl9kaXN0aW5jdCkgKiBjLnJlbHR1cGxlc1xuICAgICAgICAgICAgRU5EOjpiaWdpbnQgQVMgZXN0aW1hdGVkX2Rpc3RpbmN0XG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19zdGF0cyBzXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjIE9OIGMucmVsbmFtZSA9IHMudGFibGVuYW1lXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlIEFORCBuLm5zcG5hbWUgPSBzLnNjaGVtYW5hbWVcbiAgICAgICAgV0hFUkUgcy5zY2hlbWFuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgIEFORCBzLnRhYmxlbmFtZSA9ICQxXG4gICAgICAgIE9SREVSIEJZIHMuYXR0bmFtZVxuICAgICAgICBgLFxuICAgICAgICBbcmVsYXRpb25OYW1lXSxcbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdC5yb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVsYXRpb25fbmFtZTogcmVsYXRpb25OYW1lLFxuICAgICAgICAgICAgZXN0aW1hdGVkX3Jvd19jb3VudDogMCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHJlbGF0aW9uX25hbWU6IHJlc3VsdC5yb3dzWzBdLnJlbGF0aW9uX25hbWUsXG4gICAgICAgIGVzdGltYXRlZF9yb3dfY291bnQ6IHJlc3VsdC5yb3dzWzBdLmVzdGltYXRlZF9yb3dfY291bnQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHJlc3VsdC5yb3dzLm1hcCgoe2F0dHJpYnV0ZV9uYW1lLCBlc3RpbWF0ZWRfZGlzdGluY3R9KSA9PiAoe1xuICAgICAgICAgICAgYXR0cmlidXRlX25hbWUsXG4gICAgICAgICAgICBlc3RpbWF0ZWRfZGlzdGluY3QsXG4gICAgICAgIH0pKSxcbiAgICB9O1xufTtcbiJdfQ==
@@ -1,4 +1,4 @@
1
- import type { Pool } from "pg";
1
+ import type { Pool } from 'pg';
2
2
  export type TPostgresVersion = {
3
3
  version: string;
4
4
  version_num: number;
@@ -9,5 +9,6 @@ export type TDatabaseIdentifier = {
9
9
  database_oid: number;
10
10
  database_name: string;
11
11
  };
12
+ export declare const fetchDatabaseComment: (pool: Pool) => Promise<string | null>;
12
13
  export declare const fetchDatabaseIdentifier: (pool: Pool) => Promise<TDatabaseIdentifier>;
13
14
  //# sourceMappingURL=version.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.mts","sourceRoot":"./src/","sources":["db/version.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,MAAM,MAAM,gBAAgB,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,MAAM,IAAI,KAAG,OAAO,CAAC,gBAAgB,CAQ/E,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAU,MAAM,IAAI,KAAG,OAAO,CAAC,mBAAmB,CAUrF,CAAC"}
1
+ {"version":3,"file":"version.d.mts","sourceRoot":"./src/","sources":["db/version.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAE7B,MAAM,MAAM,gBAAgB,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,KACX,OAAO,CAAC,gBAAgB,CAQ1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,KACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAQvB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAChC,MAAM,IAAI,KACX,OAAO,CAAC,mBAAmB,CAU7B,CAAC"}
@@ -6,6 +6,14 @@ export const fetchPostgresVersion = async (pool) => {
6
6
  `);
7
7
  return result.rows[0];
8
8
  };
9
+ export const fetchDatabaseComment = async (pool) => {
10
+ const result = await pool.query(`
11
+ SELECT shobj_description(d.oid, 'pg_database') AS comment
12
+ FROM pg_database d
13
+ WHERE d.datname = current_database()
14
+ `);
15
+ return result.rows[0].comment;
16
+ };
9
17
  export const fetchDatabaseIdentifier = async (pool) => {
10
18
  const result = await pool.query(`
11
19
  SELECT
@@ -16,4 +24,4 @@ export const fetchDatabaseIdentifier = async (pool) => {
16
24
  `);
17
25
  return result.rows[0];
18
26
  };
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJkYi92ZXJzaW9uLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQUUsSUFBVSxFQUE2QixFQUFFO0lBQ2hGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBbUI7Ozs7S0FJakQsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQztBQVFGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEtBQUssRUFBRSxJQUFVLEVBQWdDLEVBQUU7SUFDdEYsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFzQjs7Ozs7O0tBTXBELENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBvb2wgfSBmcm9tIFwicGdcIjtcblxuZXhwb3J0IHR5cGUgVFBvc3RncmVzVmVyc2lvbiA9IHtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgdmVyc2lvbl9udW06IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFBvc3RncmVzVmVyc2lvbiA9IGFzeW5jIChwb29sOiBQb29sKTogUHJvbWlzZTxUUG9zdGdyZXNWZXJzaW9uPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxUUG9zdGdyZXNWZXJzaW9uPihgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbicpIEFTIHZlcnNpb24sXG4gICAgICAgICAgICBjdXJyZW50X3NldHRpbmcoJ3NlcnZlcl92ZXJzaW9uX251bScpOjppbnQgQVMgdmVyc2lvbl9udW1cbiAgICBgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93c1swXTtcbn07XG5cbmV4cG9ydCB0eXBlIFREYXRhYmFzZUlkZW50aWZpZXIgPSB7XG4gICAgc3lzdGVtX2lkZW50aWZpZXI6IHN0cmluZztcbiAgICBkYXRhYmFzZV9vaWQ6IG51bWJlcjtcbiAgICBkYXRhYmFzZV9uYW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hEYXRhYmFzZUlkZW50aWZpZXIgPSBhc3luYyAocG9vbDogUG9vbCk6IFByb21pc2U8VERhdGFiYXNlSWRlbnRpZmllcj4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VERhdGFiYXNlSWRlbnRpZmllcj4oYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIHN5c3RlbV9pZGVudGlmaWVyOjp0ZXh0IEFTIHN5c3RlbV9pZGVudGlmaWVyLFxuICAgICAgICAgICAgKFNFTEVDVCBvaWQ6OmludCBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIGRhdG5hbWUgPSBjdXJyZW50X2RhdGFiYXNlKCkpIEFTIGRhdGFiYXNlX29pZCxcbiAgICAgICAgICAgIGN1cnJlbnRfZGF0YWJhc2UoKSBBUyBkYXRhYmFzZV9uYW1lXG4gICAgICAgIEZST00gcGdfY29udHJvbF9zeXN0ZW0oKVxuICAgIGApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzWzBdO1xufTtcbiJdfQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJkYi92ZXJzaW9uLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQ3JDLElBQVUsRUFDZSxFQUFFO0lBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBbUI7Ozs7S0FJakQsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQztBQVFGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFDckMsSUFBVSxFQUNZLEVBQUU7SUFDeEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUEyQjs7OztLQUl6RCxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2xDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEtBQUssRUFDeEMsSUFBVSxFQUNrQixFQUFFO0lBQzlCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBc0I7Ozs7OztLQU1wRCxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVFBvc3RncmVzVmVyc2lvbiA9IHtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgdmVyc2lvbl9udW06IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFBvc3RncmVzVmVyc2lvbiA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxUUG9zdGdyZXNWZXJzaW9uPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxUUG9zdGdyZXNWZXJzaW9uPihgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbicpIEFTIHZlcnNpb24sXG4gICAgICAgICAgICBjdXJyZW50X3NldHRpbmcoJ3NlcnZlcl92ZXJzaW9uX251bScpOjppbnQgQVMgdmVyc2lvbl9udW1cbiAgICBgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93c1swXTtcbn07XG5cbmV4cG9ydCB0eXBlIFREYXRhYmFzZUlkZW50aWZpZXIgPSB7XG4gICAgc3lzdGVtX2lkZW50aWZpZXI6IHN0cmluZztcbiAgICBkYXRhYmFzZV9vaWQ6IG51bWJlcjtcbiAgICBkYXRhYmFzZV9uYW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hEYXRhYmFzZUNvbW1lbnQgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8e2NvbW1lbnQ6IHN0cmluZyB8IG51bGx9PihgXG4gICAgICAgIFNFTEVDVCBzaG9ial9kZXNjcmlwdGlvbihkLm9pZCwgJ3BnX2RhdGFiYXNlJykgQVMgY29tbWVudFxuICAgICAgICBGUk9NIHBnX2RhdGFiYXNlIGRcbiAgICAgICAgV0hFUkUgZC5kYXRuYW1lID0gY3VycmVudF9kYXRhYmFzZSgpXG4gICAgYCk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NbMF0uY29tbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaERhdGFiYXNlSWRlbnRpZmllciA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxURGF0YWJhc2VJZGVudGlmaWVyPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxURGF0YWJhc2VJZGVudGlmaWVyPihgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgc3lzdGVtX2lkZW50aWZpZXI6OnRleHQgQVMgc3lzdGVtX2lkZW50aWZpZXIsXG4gICAgICAgICAgICAoU0VMRUNUIG9pZDo6aW50IEZST00gcGdfZGF0YWJhc2UgV0hFUkUgZGF0bmFtZSA9IGN1cnJlbnRfZGF0YWJhc2UoKSkgQVMgZGF0YWJhc2Vfb2lkLFxuICAgICAgICAgICAgY3VycmVudF9kYXRhYmFzZSgpIEFTIGRhdGFiYXNlX25hbWVcbiAgICAgICAgRlJPTSBwZ19jb250cm9sX3N5c3RlbSgpXG4gICAgYCk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NbMF07XG59O1xuIl19
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- export type TSSLMode = "disable" | "allow" | "prefer" | "require" | "verify-ca" | "verify-full";
3
- export interface ConnectionOptions {
2
+ export type TSSLMode = 'disable' | 'allow' | 'prefer' | 'require' | 'verify-ca' | 'verify-full';
3
+ export interface TOptions {
4
4
  hostname?: string;
5
5
  port?: number;
6
6
  database?: string;
@@ -9,9 +9,10 @@ export interface ConnectionOptions {
9
9
  sslcert?: string;
10
10
  sslkey?: string;
11
11
  sslrootcert?: string;
12
+ ssh?: string;
12
13
  sshHost?: string;
13
14
  sshPort?: number;
14
15
  sshUsername?: string;
15
- sshPrivateKey?: string;
16
+ sshKey?: string;
16
17
  }
17
18
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"./src/","sources":["index.mts"],"names":[],"mappings":";AAOA,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,CAAC;AAEhG,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"./src/","sources":["index.mts"],"names":[],"mappings":";AAkBA,MAAM,MAAM,QAAQ,GACd,SAAS,GACT,OAAO,GACP,QAAQ,GACR,SAAS,GACT,WAAW,GACX,aAAa,CAAC;AAEpB,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB"}
package/dist/index.mjs CHANGED
@@ -1,75 +1,129 @@
1
1
  #!/usr/bin/env node
2
- import { Command } from "commander";
3
- import { render } from "ink";
4
- import { Error } from "./components/Error.js";
5
- import { App } from "./App.js";
6
- import { validatePathOptions } from "./validatePaths.mjs";
2
+ import { Command } from 'commander';
3
+ import { render } from 'ink';
4
+ import { createElement } from 'react';
5
+ import { Error } from './ui/components/Error.js';
6
+ import { App } from './ui/App.js';
7
+ import { Splash } from './ui/components/Splash.js';
8
+ import { createAppStore } from './store.mjs';
9
+ import { runInAction } from 'mobx';
10
+ import { validatePathOptions, } from './validatePaths.mjs';
11
+ import { run } from './app/index.mjs';
12
+ import { CLIENT_VERSION } from './lib/version.mjs';
13
+ import { scope } from 'scope-utilities';
14
+ const parseSSHTarget = (target) => {
15
+ const atIndex = target.indexOf('@');
16
+ const username = atIndex >= 0 ? target.slice(0, atIndex) : undefined;
17
+ const hostPort = atIndex >= 0 ? target.slice(atIndex + 1) : target;
18
+ const colonIndex = hostPort.lastIndexOf(':');
19
+ const host = colonIndex >= 0 ? hostPort.slice(0, colonIndex) : hostPort;
20
+ const port = colonIndex >= 0
21
+ ? parseInt(hostPort.slice(colonIndex + 1), 10)
22
+ : undefined;
23
+ return { username, host, port };
24
+ };
7
25
  const program = new Command();
8
26
  program
9
- .name("dbctx")
10
- .description("AI generated docs from your application database")
11
- .version("1.0.0")
12
- .argument("[connection-string]", "PostgreSQL connection string (env: DATABASE_URL)")
13
- .option("-h, --hostname <host>", "database hostname (env: PGHOST, default: localhost)")
14
- .option("-p, --port <port>", "database port (env: PGPORT, default: 5432)", parseInt)
15
- .option("-d, --database <name>", "database name (env: PGDATABASE, default: postgres)")
16
- .option("-U, --username <user>", "database username (env: PGUSER, default: postgres)")
17
- .option("--sslmode <mode>", "SSL mode: disable|allow|prefer|require|verify-ca|verify-full (env: PGSSLMODE, default: prefer)")
18
- .option("--sslcert <path>", "path to client certificate (env: PGSSLCERT)")
19
- .option("--sslkey <path>", "path to client private key (env: PGSSLKEY)")
20
- .option("--sslrootcert <path>", "path to root CA certificate (env: PGSSLROOTCERT)")
21
- .option("--ssh-host <host>", "SSH tunnel host (bastion/jump server)")
22
- .option("--ssh-port <port>", "SSH tunnel port (default: 22)", parseInt)
23
- .option("--ssh-username <user>", "SSH tunnel username (default: $USER)")
24
- .option("--ssh-private-key <path>", "path to SSH private key (default: ~/.ssh/id_rsa)")
27
+ .name('dbctx')
28
+ .version(CLIENT_VERSION)
29
+ .helpOption('--help', 'display help for command')
30
+ .addHelpText('beforeAll', () => {
31
+ const { unmount } = render(createElement(Splash));
32
+ unmount();
33
+ return '';
34
+ });
35
+ const generate = program
36
+ .command('generate', { isDefault: true })
37
+ .description('Connect to a PostgreSQL database and generate context')
38
+ .helpOption('--help', 'display help for command')
39
+ .argument('[connection-string]', 'PostgreSQL connection string (env: DATABASE_URL)')
40
+ .option('-h, --hostname <host>', 'database hostname (env: PGHOST, default: localhost)')
41
+ .option('-p, --port <port>', 'database port (env: PGPORT, default: 5432)', parseInt)
42
+ .option('-d, --database <name>', 'database name (env: PGDATABASE, default: postgres)')
43
+ .option('-U, --username <user>', 'database username (env: PGUSER, default: postgres)')
44
+ .option('--sslmode <mode>', 'SSL mode: disable|allow|prefer|require|verify-ca|verify-full (env: PGSSLMODE, default: prefer)')
45
+ .option('--sslcert <path>', 'path to client certificate (env: PGSSLCERT)')
46
+ .option('--sslkey <path>', 'path to client private key (env: PGSSLKEY)')
47
+ .option('--sslrootcert <path>', 'path to root CA certificate (env: PGSSLROOTCERT)')
48
+ .option('--ssh <target>', 'SSH tunnel target (user@host[:port])')
49
+ .option('--ssh-host <host>', 'SSH tunnel host (bastion/jump server)')
50
+ .option('--ssh-port <port>', 'SSH tunnel port (default: 22)', parseInt)
51
+ .option('--ssh-username <user>', 'SSH tunnel username (default: $USER)')
52
+ .option('-i, --ssh-key <path>', 'path to SSH private key (default: ~/.ssh/id_rsa)')
25
53
  .action((connectionString, options) => {
26
- const hasConnectionString = Boolean(connectionString);
27
- const hasIndividualOptions = Boolean(options.hostname || options.port || options.database || options.username);
28
- if (hasConnectionString && hasIndividualOptions) {
29
- render(Error({
30
- message: "Cannot use both connection string and individual options (-h, -p, -d, -U). Use one or the other.",
31
- }));
32
- process.exit(1);
54
+ // Show help if no connection config is provided
55
+ const hasCLIConfig = connectionString !== undefined ||
56
+ options.hostname !== undefined ||
57
+ options.port !== undefined ||
58
+ options.database !== undefined ||
59
+ options.username !== undefined;
60
+ const hasEnvConfig = [
61
+ 'PGHOST',
62
+ 'PGPORT',
63
+ 'PGDATABASE',
64
+ 'PGUSER',
65
+ 'PGPASSWORD',
66
+ 'DATABASE_URL',
67
+ ].some((key) => process.env[key] !== undefined);
68
+ if (!hasCLIConfig && !hasEnvConfig) {
69
+ generate.help();
33
70
  }
71
+ // Validate connection strings are PostgreSQL URLs
72
+ const effectiveConnectionString = connectionString ?? process.env['DATABASE_URL'];
73
+ const connectionStringError = scope(effectiveConnectionString)
74
+ .let((str) => {
75
+ if (str === undefined) {
76
+ return null;
77
+ }
78
+ if (!URL.canParse(str)) {
79
+ return `Malformed connection string "${str}": not a valid URL`;
80
+ }
81
+ const { protocol } = new URL(str);
82
+ if (protocol !== 'postgres:' &&
83
+ protocol !== 'postgresql:') {
84
+ return `Invalid connection string "${str}": expected postgres:// or postgresql://`;
85
+ }
86
+ return null;
87
+ })
88
+ .value();
34
89
  // Validate path options exist on filesystem
35
90
  const { errors: pathErrors, expandedPaths } = validatePathOptions(options);
36
91
  if (pathErrors.length > 0) {
37
92
  const errorMessages = pathErrors
38
93
  .map(({ option, path }) => ` ${option}: ${path}`)
39
- .join("\n");
94
+ .join('\n');
40
95
  render(Error({
41
96
  message: `The following paths do not exist:\n${errorMessages}`,
42
97
  }));
43
98
  process.exit(1);
44
99
  }
45
- // Replace original paths with expanded paths (~ resolved to home directory)
100
+ // Replace original paths with expanded paths
101
+ // (~ resolved to home directory)
46
102
  const validatedOptions = {
47
103
  ...options,
48
104
  ...expandedPaths,
49
105
  };
50
- if (hasIndividualOptions) {
51
- const requiredOptions = [
52
- { key: "hostname", flag: "-h/--hostname" },
53
- { key: "port", flag: "-p/--port" },
54
- { key: "database", flag: "-d/--database" },
55
- { key: "username", flag: "-U/--username" },
56
- ];
57
- const missing = requiredOptions
58
- .filter(({ key }) => !validatedOptions[key])
59
- .map(({ flag }) => flag);
60
- if (missing.length > 0) {
61
- render(Error({
62
- message: `Missing required options: ${missing.join(", ")}`,
63
- }));
64
- process.exit(1);
65
- }
66
- }
67
- // All validations passed - build config and render the app
106
+ // Build config and render the app
107
+ const sshDefaults = validatedOptions.ssh
108
+ ? parseSSHTarget(validatedOptions.ssh)
109
+ : undefined;
68
110
  const config = {
69
- connectionString,
111
+ connectionString: effectiveConnectionString,
70
112
  ...validatedOptions,
113
+ sshHost: validatedOptions.sshHost ?? sshDefaults?.host,
114
+ sshPort: validatedOptions.sshPort ?? sshDefaults?.port,
115
+ sshUsername: validatedOptions.sshUsername ?? sshDefaults?.username,
71
116
  };
72
- render(App({ config }));
117
+ const store = createAppStore(config);
118
+ render(createElement(App, { store }));
119
+ if (connectionStringError) {
120
+ runInAction(() => {
121
+ store.steps.databaseConnection.state = 'error';
122
+ store.steps.databaseConnection.error = connectionStringError;
123
+ });
124
+ return;
125
+ }
126
+ run(store);
73
127
  });
74
128
  program.parse();
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiaW5kZXgubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDN0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlDLE9BQU8sRUFBRSxHQUFHLEVBQTBCLE1BQU0sVUFBVSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBNkIsTUFBTSxxQkFBcUIsQ0FBQztBQW1CckYsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUU5QixPQUFPO0tBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQztLQUNiLFdBQVcsQ0FBQyxrREFBa0QsQ0FBQztLQUMvRCxPQUFPLENBQUMsT0FBTyxDQUFDO0tBQ2hCLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxrREFBa0QsQ0FBQztLQUNuRixNQUFNLENBQUMsdUJBQXVCLEVBQUUscURBQXFELENBQUM7S0FDdEYsTUFBTSxDQUFDLG1CQUFtQixFQUFFLDRDQUE0QyxFQUFFLFFBQVEsQ0FBQztLQUNuRixNQUFNLENBQUMsdUJBQXVCLEVBQUUsb0RBQW9ELENBQUM7S0FDckYsTUFBTSxDQUFDLHVCQUF1QixFQUFFLG9EQUFvRCxDQUFDO0tBQ3JGLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxnR0FBZ0csQ0FBQztLQUM1SCxNQUFNLENBQUMsa0JBQWtCLEVBQUUsNkNBQTZDLENBQUM7S0FDekUsTUFBTSxDQUFDLGlCQUFpQixFQUFFLDRDQUE0QyxDQUFDO0tBQ3ZFLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxrREFBa0QsQ0FBQztLQUNsRixNQUFNLENBQUMsbUJBQW1CLEVBQUUsdUNBQXVDLENBQUM7S0FDcEUsTUFBTSxDQUFDLG1CQUFtQixFQUFFLCtCQUErQixFQUFFLFFBQVEs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ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiaW5rXCI7XG5pbXBvcnQgeyBFcnJvciB9IGZyb20gXCIuL2NvbXBvbmVudHMvRXJyb3IuanNcIjtcbmltcG9ydCB7IEFwcCwgdHlwZSBUQ29ubmVjdGlvbkNvbmZpZyB9IGZyb20gXCIuL0FwcC5qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVQYXRoT3B0aW9ucywgdHlwZSBUUGF0aFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuL3ZhbGlkYXRlUGF0aHMubWpzXCI7XG5cbmV4cG9ydCB0eXBlIFRTU0xNb2RlID0gXCJkaXNhYmxlXCIgfCBcImFsbG93XCIgfCBcInByZWZlclwiIHwgXCJyZXF1aXJlXCIgfCBcInZlcmlmeS1jYVwiIHwgXCJ2ZXJpZnktZnVsbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25PcHRpb25zIHtcbiAgICBob3N0bmFtZT86IHN0cmluZztcbiAgICBwb3J0PzogbnVtYmVyO1xuICAgIGRhdGFiYXNlPzogc3RyaW5nO1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIHNzbG1vZGU/OiBUU1NMTW9kZTtcbiAgICBzc2xjZXJ0Pzogc3RyaW5nO1xuICAgIHNzbGtleT86IHN0cmluZztcbiAgICBzc2xyb290Y2VydD86IHN0cmluZztcbiAgICBzc2hIb3N0Pzogc3RyaW5nO1xuICAgIHNzaFBvcnQ/OiBudW1iZXI7XG4gICAgc3NoVXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgc3NoUHJpdmF0ZUtleT86IHN0cmluZztcbn1cblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgICAubmFtZShcImRiY3R4XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiQUkgZ2VuZXJhdGVkIGRvY3MgZnJvbSB5b3VyIGFwcGxpY2F0aW9uIGRhdGFiYXNlXCIpXG4gICAgLnZlcnNpb24oXCIxLjAuMFwiKVxuICAgIC5hcmd1bWVudChcIltjb25uZWN0aW9uLXN0cmluZ11cIiwgXCJQb3N0Z3JlU1FMIGNvbm5lY3Rpb24gc3RyaW5nIChlbnY6IERBVEFCQVNFX1VSTClcIilcbiAgICAub3B0aW9uKFwiLWgsIC0taG9zdG5hbWUgPGhvc3Q+XCIsIFwiZGF0YWJhc2UgaG9zdG5hbWUgKGVudjogUEdIT1NULCBkZWZhdWx0OiBsb2NhbGhvc3QpXCIpXG4gICAgLm9wdGlvbihcIi1wLCAtLXBvcnQgPHBvcnQ+XCIsIFwiZGF0YWJhc2UgcG9ydCAoZW52OiBQR1BPUlQsIGRlZmF1bHQ6IDU0MzIpXCIsIHBhcnNlSW50KVxuICAgIC5vcHRpb24oXCItZCwgLS1kYXRhYmFzZSA8bmFtZT5cIiwgXCJkYXRhYmFzZSBuYW1lIChlbnY6IFBHREFUQUJBU0UsIGRlZmF1bHQ6IHBvc3RncmVzKVwiKVxuICAgIC5vcHRpb24oXCItVSwgLS11c2VybmFtZSA8dXNlcj5cIiwgXCJkYXRhYmFzZSB1c2VybmFtZSAoZW52OiBQR1VTRVIsIGRlZmF1bHQ6IHBvc3RncmVzKVwiKVxuICAgIC5vcHRpb24oXCItLXNzbG1vZGUgPG1vZGU+XCIsIFwiU1NMIG1vZGU6IGRpc2FibGV8YWxsb3d8cHJlZmVyfHJlcXVpcmV8dmVyaWZ5LWNhfHZlcmlmeS1mdWxsIChlbnY6IFBHU1NMTU9ERSwgZGVmYXVsdDogcHJlZmVyKVwiKVxuICAgIC5vcHRpb24oXCItLXNzbGNlcnQgPHBhdGg+XCIsIFwicGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgKGVudjogUEdTU0xDRVJUKVwiKVxuICAgIC5vcHRpb24oXCItLXNzbGtleSA8cGF0aD5cIiwgXCJwYXRoIHRvIGNsaWVudCBwcml2YXRlIGtleSAoZW52OiBQR1NTTEtFWSlcIilcbiAgICAub3B0aW9uKFwiLS1zc2xyb290Y2VydCA8cGF0aD5cIiwgXCJwYXRoIHRvIHJvb3QgQ0EgY2VydGlmaWNhdGUgKGVudjogUEdTU0xST09UQ0VSVClcIilcbiAgICAub3B0aW9uKFwiLS1zc2gtaG9zdCA8aG9zdD5cIiwgXCJTU0ggdHVubmVsIGhvc3QgKGJhc3Rpb24vanVtcCBzZXJ2ZXIpXCIpXG4gICAgLm9wdGlvbihcIi0tc3NoLXBvcnQgPHBvcnQ+XCIsIFwiU1NIIHR1bm5lbCBwb3J0IChkZWZhdWx0OiAyMilcIiwgcGFyc2VJbnQpXG4gICAgLm9wdGlvbihcIi0tc3NoLXVzZXJuYW1lIDx1c2VyPlwiLCBcIlNTSCB0dW5uZWwgdXNlcm5hbWUgKGRlZmF1bHQ6ICRVU0VSKVwiKVxuICAgIC5vcHRpb24oXCItLXNzaC1wcml2YXRlLWtleSA8cGF0aD5cIiwgXCJwYXRoIHRvIFNTSCBwcml2YXRlIGtleSAoZGVmYXVsdDogfi8uc3NoL2lkX3JzYSlcIilcbiAgICAuYWN0aW9uKChjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsIG9wdGlvbnM6IENvbm5lY3Rpb25PcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0Nvbm5lY3Rpb25TdHJpbmcgPSBCb29sZWFuKGNvbm5lY3Rpb25TdHJpbmcpO1xuICAgICAgICBjb25zdCBoYXNJbmRpdmlkdWFsT3B0aW9ucyA9IEJvb2xlYW4oXG4gICAgICAgICAgICBvcHRpb25zLmhvc3RuYW1lIHx8IG9wdGlvbnMucG9ydCB8fCBvcHRpb25zLmRhdGFiYXNlIHx8IG9wdGlvbnMudXNlcm5hbWVcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoaGFzQ29ubmVjdGlvblN0cmluZyAmJiBoYXNJbmRpdmlkdWFsT3B0aW9ucykge1xuICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgIEVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHVzZSBib3RoIGNvbm5lY3Rpb24gc3RyaW5nIGFuZCBpbmRpdmlkdWFsIG9wdGlvbnMgKC1oLCAtcCwgLWQsIC1VKS4gVXNlIG9uZSBvciB0aGUgb3RoZXIuXCIsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIHBhdGggb3B0aW9ucyBleGlzdCBvbiBmaWxlc3lzdGVtXG4gICAgICAgIGNvbnN0IHsgZXJyb3JzOiBwYXRoRXJyb3JzLCBleHBhbmRlZFBhdGhzIH0gPSB2YWxpZGF0ZVBhdGhPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChwYXRoRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXMgPSBwYXRoRXJyb3JzXG4gICAgICAgICAgICAgICAgLm1hcCgoeyBvcHRpb24sIHBhdGggfTogVFBhdGhWYWxpZGF0aW9uRXJyb3IpID0+IGAgICR7b3B0aW9ufTogJHtwYXRofWApXG4gICAgICAgICAgICAgICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgICAgICAgICAgIHJlbmRlcihcbiAgICAgICAgICAgICAgICBFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgZm9sbG93aW5nIHBhdGhzIGRvIG5vdCBleGlzdDpcXG4ke2Vycm9yTWVzc2FnZXN9YCxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVwbGFjZSBvcmlnaW5hbCBwYXRocyB3aXRoIGV4cGFuZGVkIHBhdGhzICh+IHJlc29sdmVkIHRvIGhvbWUgZGlyZWN0b3J5KVxuICAgICAgICBjb25zdCB2YWxpZGF0ZWRPcHRpb25zOiBDb25uZWN0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAuLi5leHBhbmRlZFBhdGhzLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChoYXNJbmRpdmlkdWFsT3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgcmVxdWlyZWRPcHRpb25zID0gW1xuICAgICAgICAgICAgICAgIHsga2V5OiBcImhvc3RuYW1lXCIsIGZsYWc6IFwiLWgvLS1ob3N0bmFtZVwiIH0sXG4gICAgICAgICAgICAgICAgeyBrZXk6IFwicG9ydFwiLCBmbGFnOiBcIi1wLy0tcG9ydFwiIH0sXG4gICAgICAgICAgICAgICAgeyBrZXk6IFwiZGF0YWJhc2VcIiwgZmxhZzogXCItZC8tLWRhdGFiYXNlXCIgfSxcbiAgICAgICAgICAgICAgICB7IGtleTogXCJ1c2VybmFtZVwiLCBmbGFnOiBcIi1VLy0tdXNlcm5hbWVcIiB9LFxuICAgICAgICAgICAgXSBhcyBjb25zdDtcblxuICAgICAgICAgICAgY29uc3QgbWlzc2luZyA9IHJlcXVpcmVkT3B0aW9uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHsga2V5IH0pID0+ICF2YWxpZGF0ZWRPcHRpb25zW2tleV0pXG4gICAgICAgICAgICAgICAgLm1hcCgoeyBmbGFnIH0pID0+IGZsYWcpO1xuXG4gICAgICAgICAgICBpZiAobWlzc2luZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgICAgICBFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgTWlzc2luZyByZXF1aXJlZCBvcHRpb25zOiAke21pc3Npbmcuam9pbihcIiwgXCIpfWAsXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFsbCB2YWxpZGF0aW9ucyBwYXNzZWQgLSBidWlsZCBjb25maWcgYW5kIHJlbmRlciB0aGUgYXBwXG4gICAgICAgIGNvbnN0IGNvbmZpZzogVENvbm5lY3Rpb25Db25maWcgPSB7XG4gICAgICAgICAgICBjb25uZWN0aW9uU3RyaW5nLFxuICAgICAgICAgICAgLi4udmFsaWRhdGVkT3B0aW9ucyxcbiAgICAgICAgfTtcblxuICAgICAgICByZW5kZXIoQXBwKHsgY29uZmlnIH0pKTtcbiAgICB9KTtcblxucHJvZ3JhbS5wYXJzZSgpO1xuIl19
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiaW5kZXgubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxLQUFLLENBQUM7QUFDM0IsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUNwQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDL0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNoQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDakQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFDSCxtQkFBbUIsR0FFdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDcEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQTBCdEMsTUFBTSxjQUFjLEdBQUcsQ0FDbkIsTUFBYyxFQUtoQixFQUFFO0lBQ0EsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxNQUFNLFFBQVEsR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3JFLE1BQU0sUUFBUSxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbkUsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxNQUFNLElBQUksR0FBRyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3hFLE1BQU0sSUFBSSxHQUNOLFVBQVUsSUFBSSxDQUFDO1FBQ1gsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDOUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUVwQixPQUFPLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUM7QUFFRixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRTlCLE9BQU87S0FDRixJQUFJLENBQUMsT0FBTyxDQUFDO0tBQ2IsT0FBTyxDQUFDLGNBQWMsQ0FBQztLQUN2QixVQUFVLENBQUMsUUFBUSxFQUFFLDBCQUEwQixDQUFDO0tBQ2hELFdBQVcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO0lBQzNCLE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDaEQsT0FBTyxFQUFFLENBQUM7SUFDVixPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUMsQ0FBQyxDQUFDO0FBRVAsTUFBTSxRQUFRLEdBQUcsT0FBTztLQUNuQixPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDO0tBQ3RDLFdBQVcsQ0FBQyx1REFBdUQsQ0FBQztLQUNwRSxVQUFVLENBQUMsUUFBUSxFQUFFLDBCQUEwQixDQUFDO0tBQ2hELFFBQVEsQ0FDTCxxQkFBcUIsRUFDckIsa0RBQWtELENBQ3JEO0tBQ0EsTUFBTSxDQUNILHVCQUF1QixFQUN2QixxREFBcUQsQ0FDeEQ7S0FDQSxNQUFNLENBQ0gsbUJBQW1CLEVBQ25CLDRDQUE0QyxFQUM1QyxRQUFRLENBQ1g7S0FDQSxNQUFNLENBQ0gsdUJBQXVCLEVBQ3ZCLG9EQUFvRCxDQUN2RDtLQUNBLE1BQU0sQ0FDSCx1QkFBdUIsRUFDdkIsb0RBQW9ELENBQ3ZEO0tBQ0EsTUFBTSxDQUNILGtCQUFrQixFQUNsQixnR0FBZ0csQ0FDbkc7S0FDQSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsNkNBQTZDLENBQUM7S0FDekUsTUFBTSxDQUFDLGlCQUFpQixFQUFFLDRDQUE0QyxDQUFDO0tBQ3ZFLE1BQU0sQ0FDSCxzQkFBc0IsRUFDdEIsa0RBQWtELENBQ3JEO0tBQ0EsTUFBTSxDQUFDLGdCQUFnQixFQUFFLHNDQUFzQyxDQUFDO0tBQ2hFLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx1Q0FBdUMsQ0FBQztLQUNwRSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsK0JBQStCLEVBQUUsUUFBUSxDQUFDO0tBQ3RFLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxzQ0FBc0MsQ0FBQztLQUN2RSxNQUFNLENBQ0gsc0JBQXNCLEVBQ3RCLGtEQUFrRCxDQUNyRDtLQUNBLE1BQU0sQ0FBQyxDQUFDLGdCQUFvQyxFQUFFLE9BQWlCLEVBQUUsRUFBRTtJQUNoRSxnREFBZ0Q7SUFDaEQsTUFBTSxZQUFZLEdBQ2QsZ0JBQWdCLEtBQUssU0FBUztRQUM5QixPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVM7UUFDOUIsT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTO1FBQzFCLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUztRQUM5QixPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQztJQUVuQyxNQUFNLFlBQVksR0FBRztRQUNqQixRQUFRO1FBQ1IsUUFBUTtRQUNSLFlBQVk7UUFDWixRQUFRO1FBQ1IsWUFBWTtRQUNaLGNBQWM7S0FDakIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7SUFFaEQsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELE1BQU0seUJBQXlCLEdBQzNCLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFcEQsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLENBQUMseUJBQXlCLENBQUM7U0FDekQsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDVCxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQixPQUFPLGdDQUFnQyxHQUFHLG9CQUFvQixDQUFDO1FBQ25FLENBQUM7UUFFRCxNQUFNLEVBQUMsUUFBUSxFQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsSUFDSSxRQUFRLEtBQUssV0FBVztZQUN4QixRQUFRLEtBQUssYUFBYSxFQUM1QixDQUFDO1lBQ0MsT0FBTyw4QkFBOEIsR0FBRywwQ0FBMEMsQ0FBQztRQUN2RixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQyxDQUFDO1NBQ0QsS0FBSyxFQUFFLENBQUM7SUFFYiw0Q0FBNEM7SUFDNUMsTUFBTSxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFDLEdBQ3JDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRWpDLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixNQUFNLGFBQWEsR0FBRyxVQUFVO2FBQzNCLEdBQUcsQ0FDQSxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBdUIsRUFBRSxFQUFFLENBQ3JDLEtBQUssTUFBTSxLQUFLLElBQUksRUFBRSxDQUM3QjthQUNBLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQixNQUFNLENBQ0YsS0FBSyxDQUFDO1lBQ0YsT0FBTyxFQUFFLHNDQUFzQyxhQUFhLEVBQUU7U0FDakUsQ0FBQyxDQUNMLENBQUM7UUFFRixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCw2Q0FBNkM7SUFDN0MsaUNBQWlDO0lBQ2pDLE1BQU0sZ0JBQWdCLEdBQWE7UUFDL0IsR0FBRyxPQUFPO1FBQ1YsR0FBRyxhQUFhO0tBQ25CLENBQUM7SUFFRixrQ0FBa0M7SUFDbEMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsR0FBRztRQUNwQyxDQUFDLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztRQUN0QyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWhCLE1BQU0sTUFBTSxHQUFzQjtRQUM5QixnQkFBZ0IsRUFBRSx5QkFBeUI7UUFDM0MsR0FBRyxnQkFBZ0I7UUFDbkIsT0FBTyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sSUFBSSxXQUFXLEVBQUUsSUFBSTtRQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxJQUFJLFdBQVcsRUFBRSxJQUFJO1FBQ3RELFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXLElBQUksV0FBVyxFQUFFLFFBQVE7S0FDckUsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVyQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQztJQUVwQyxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDeEIsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNiLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztZQUMvQyxLQUFLLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU87SUFDWCxDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2YsQ0FBQyxDQUFDLENBQUM7QUFFUCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5pbXBvcnQge0NvbW1hbmR9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQge3JlbmRlcn0gZnJvbSAnaW5rJztcbmltcG9ydCB7Y3JlYXRlRWxlbWVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtFcnJvcn0gZnJvbSAnLi91aS9jb21wb25lbnRzL0Vycm9yLmpzJztcbmltcG9ydCB7QXBwfSBmcm9tICcuL3VpL0FwcC5qcyc7XG5pbXBvcnQge1NwbGFzaH0gZnJvbSAnLi91aS9jb21wb25lbnRzL1NwbGFzaC5qcyc7XG5pbXBvcnQge2NyZWF0ZUFwcFN0b3JlfSBmcm9tICcuL3N0b3JlLm1qcyc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcbmltcG9ydCB7XG4gICAgdmFsaWRhdGVQYXRoT3B0aW9ucyxcbiAgICB0eXBlIFRQYXRoVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tICcuL3ZhbGlkYXRlUGF0aHMubWpzJztcbmltcG9ydCB7VENvbm5lY3Rpb25Db25maWd9IGZyb20gJy4vdHlwZXMvY29ubmVjdGlvbi5tanMnO1xuaW1wb3J0IHtydW59IGZyb20gJy4vYXBwL2luZGV4Lm1qcyc7XG5pbXBvcnQge0NMSUVOVF9WRVJTSU9OfSBmcm9tICcuL2xpYi92ZXJzaW9uLm1qcyc7XG5pbXBvcnQge3Njb3BlfSBmcm9tICdzY29wZS11dGlsaXRpZXMnO1xuXG5leHBvcnQgdHlwZSBUU1NMTW9kZSA9XG4gICAgfCAnZGlzYWJsZSdcbiAgICB8ICdhbGxvdydcbiAgICB8ICdwcmVmZXInXG4gICAgfCAncmVxdWlyZSdcbiAgICB8ICd2ZXJpZnktY2EnXG4gICAgfCAndmVyaWZ5LWZ1bGwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRPcHRpb25zIHtcbiAgICBob3N0bmFtZT86IHN0cmluZztcbiAgICBwb3J0PzogbnVtYmVyO1xuICAgIGRhdGFiYXNlPzogc3RyaW5nO1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIHNzbG1vZGU/OiBUU1NMTW9kZTtcbiAgICBzc2xjZXJ0Pzogc3RyaW5nO1xuICAgIHNzbGtleT86IHN0cmluZztcbiAgICBzc2xyb290Y2VydD86IHN0cmluZztcbiAgICBzc2g/OiBzdHJpbmc7XG4gICAgc3NoSG9zdD86IHN0cmluZztcbiAgICBzc2hQb3J0PzogbnVtYmVyO1xuICAgIHNzaFVzZXJuYW1lPzogc3RyaW5nO1xuICAgIHNzaEtleT86IHN0cmluZztcbn1cblxuY29uc3QgcGFyc2VTU0hUYXJnZXQgPSAoXG4gICAgdGFyZ2V0OiBzdHJpbmcsXG4pOiB7XG4gICAgdXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBob3N0OiBzdHJpbmc7XG4gICAgcG9ydDogbnVtYmVyIHwgdW5kZWZpbmVkO1xufSA9PiB7XG4gICAgY29uc3QgYXRJbmRleCA9IHRhcmdldC5pbmRleE9mKCdAJyk7XG4gICAgY29uc3QgdXNlcm5hbWUgPSBhdEluZGV4ID49IDAgPyB0YXJnZXQuc2xpY2UoMCwgYXRJbmRleCkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgaG9zdFBvcnQgPSBhdEluZGV4ID49IDAgPyB0YXJnZXQuc2xpY2UoYXRJbmRleCArIDEpIDogdGFyZ2V0O1xuICAgIGNvbnN0IGNvbG9uSW5kZXggPSBob3N0UG9ydC5sYXN0SW5kZXhPZignOicpO1xuICAgIGNvbnN0IGhvc3QgPSBjb2xvbkluZGV4ID49IDAgPyBob3N0UG9ydC5zbGljZSgwLCBjb2xvbkluZGV4KSA6IGhvc3RQb3J0O1xuICAgIGNvbnN0IHBvcnQgPVxuICAgICAgICBjb2xvbkluZGV4ID49IDBcbiAgICAgICAgICAgID8gcGFyc2VJbnQoaG9zdFBvcnQuc2xpY2UoY29sb25JbmRleCArIDEpLCAxMClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHt1c2VybmFtZSwgaG9zdCwgcG9ydH07XG59O1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbVxuICAgIC5uYW1lKCdkYmN0eCcpXG4gICAgLnZlcnNpb24oQ0xJRU5UX1ZFUlNJT04pXG4gICAgLmhlbHBPcHRpb24oJy0taGVscCcsICdkaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQnKVxuICAgIC5hZGRIZWxwVGV4dCgnYmVmb3JlQWxsJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7dW5tb3VudH0gPSByZW5kZXIoY3JlYXRlRWxlbWVudChTcGxhc2gpKTtcbiAgICAgICAgdW5tb3VudCgpO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG5cbmNvbnN0IGdlbmVyYXRlID0gcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdnZW5lcmF0ZScsIHtpc0RlZmF1bHQ6IHRydWV9KVxuICAgIC5kZXNjcmlwdGlvbignQ29ubmVjdCB0byBhIFBvc3RncmVTUUwgZGF0YWJhc2UgYW5kIGdlbmVyYXRlIGNvbnRleHQnKVxuICAgIC5oZWxwT3B0aW9uKCctLWhlbHAnLCAnZGlzcGxheSBoZWxwIGZvciBjb21tYW5kJylcbiAgICAuYXJndW1lbnQoXG4gICAgICAgICdbY29ubmVjdGlvbi1zdHJpbmddJyxcbiAgICAgICAgJ1Bvc3RncmVTUUwgY29ubmVjdGlvbiBzdHJpbmcgKGVudjogREFUQUJBU0VfVVJMKScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctaCwgLS1ob3N0bmFtZSA8aG9zdD4nLFxuICAgICAgICAnZGF0YWJhc2UgaG9zdG5hbWUgKGVudjogUEdIT1NULCBkZWZhdWx0OiBsb2NhbGhvc3QpJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy1wLCAtLXBvcnQgPHBvcnQ+JyxcbiAgICAgICAgJ2RhdGFiYXNlIHBvcnQgKGVudjogUEdQT1JULCBkZWZhdWx0OiA1NDMyKScsXG4gICAgICAgIHBhcnNlSW50LFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLWQsIC0tZGF0YWJhc2UgPG5hbWU+JyxcbiAgICAgICAgJ2RhdGFiYXNlIG5hbWUgKGVudjogUEdEQVRBQkFTRSwgZGVmYXVsdDogcG9zdGdyZXMpJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy1VLCAtLXVzZXJuYW1lIDx1c2VyPicsXG4gICAgICAgICdkYXRhYmFzZSB1c2VybmFtZSAoZW52OiBQR1VTRVIsIGRlZmF1bHQ6IHBvc3RncmVzKScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLXNzbG1vZGUgPG1vZGU+JyxcbiAgICAgICAgJ1NTTCBtb2RlOiBkaXNhYmxlfGFsbG93fHByZWZlcnxyZXF1aXJlfHZlcmlmeS1jYXx2ZXJpZnktZnVsbCAoZW52OiBQR1NTTE1PREUsIGRlZmF1bHQ6IHByZWZlciknLFxuICAgIClcbiAgICAub3B0aW9uKCctLXNzbGNlcnQgPHBhdGg+JywgJ3BhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIChlbnY6IFBHU1NMQ0VSVCknKVxuICAgIC5vcHRpb24oJy0tc3Nsa2V5IDxwYXRoPicsICdwYXRoIHRvIGNsaWVudCBwcml2YXRlIGtleSAoZW52OiBQR1NTTEtFWSknKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLXNzbHJvb3RjZXJ0IDxwYXRoPicsXG4gICAgICAgICdwYXRoIHRvIHJvb3QgQ0EgY2VydGlmaWNhdGUgKGVudjogUEdTU0xST09UQ0VSVCknLFxuICAgIClcbiAgICAub3B0aW9uKCctLXNzaCA8dGFyZ2V0PicsICdTU0ggdHVubmVsIHRhcmdldCAodXNlckBob3N0Wzpwb3J0XSknKVxuICAgIC5vcHRpb24oJy0tc3NoLWhvc3QgPGhvc3Q+JywgJ1NTSCB0dW5uZWwgaG9zdCAoYmFzdGlvbi9qdW1wIHNlcnZlciknKVxuICAgIC5vcHRpb24oJy0tc3NoLXBvcnQgPHBvcnQ+JywgJ1NTSCB0dW5uZWwgcG9ydCAoZGVmYXVsdDogMjIpJywgcGFyc2VJbnQpXG4gICAgLm9wdGlvbignLS1zc2gtdXNlcm5hbWUgPHVzZXI+JywgJ1NTSCB0dW5uZWwgdXNlcm5hbWUgKGRlZmF1bHQ6ICRVU0VSKScpXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy1pLCAtLXNzaC1rZXkgPHBhdGg+JyxcbiAgICAgICAgJ3BhdGggdG8gU1NIIHByaXZhdGUga2V5IChkZWZhdWx0OiB+Ly5zc2gvaWRfcnNhKScsXG4gICAgKVxuICAgIC5hY3Rpb24oKGNvbm5lY3Rpb25TdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZCwgb3B0aW9uczogVE9wdGlvbnMpID0+IHtcbiAgICAgICAgLy8gU2hvdyBoZWxwIGlmIG5vIGNvbm5lY3Rpb24gY29uZmlnIGlzIHByb3ZpZGVkXG4gICAgICAgIGNvbnN0IGhhc0NMSUNvbmZpZyA9XG4gICAgICAgICAgICBjb25uZWN0aW9uU3RyaW5nICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuaG9zdG5hbWUgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgb3B0aW9ucy5wb3J0ICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuZGF0YWJhc2UgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgb3B0aW9ucy51c2VybmFtZSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IGhhc0VudkNvbmZpZyA9IFtcbiAgICAgICAgICAgICdQR0hPU1QnLFxuICAgICAgICAgICAgJ1BHUE9SVCcsXG4gICAgICAgICAgICAnUEdEQVRBQkFTRScsXG4gICAgICAgICAgICAnUEdVU0VSJyxcbiAgICAgICAgICAgICdQR1BBU1NXT1JEJyxcbiAgICAgICAgICAgICdEQVRBQkFTRV9VUkwnLFxuICAgICAgICBdLnNvbWUoKGtleSkgPT4gcHJvY2Vzcy5lbnZba2V5XSAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICBpZiAoIWhhc0NMSUNvbmZpZyAmJiAhaGFzRW52Q29uZmlnKSB7XG4gICAgICAgICAgICBnZW5lcmF0ZS5oZWxwKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBjb25uZWN0aW9uIHN0cmluZ3MgYXJlIFBvc3RncmVTUUwgVVJMc1xuICAgICAgICBjb25zdCBlZmZlY3RpdmVDb25uZWN0aW9uU3RyaW5nID1cbiAgICAgICAgICAgIGNvbm5lY3Rpb25TdHJpbmcgPz8gcHJvY2Vzcy5lbnZbJ0RBVEFCQVNFX1VSTCddO1xuXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25TdHJpbmdFcnJvciA9IHNjb3BlKGVmZmVjdGl2ZUNvbm5lY3Rpb25TdHJpbmcpXG4gICAgICAgICAgICAubGV0KChzdHIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVUkwuY2FuUGFyc2Uoc3RyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE1hbGZvcm1lZCBjb25uZWN0aW9uIHN0cmluZyBcIiR7c3RyfVwiOiBub3QgYSB2YWxpZCBVUkxgO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHtwcm90b2NvbH0gPSBuZXcgVVJMKHN0cik7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCAhPT0gJ3Bvc3RncmVzOicgJiZcbiAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgIT09ICdwb3N0Z3Jlc3FsOidcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBJbnZhbGlkIGNvbm5lY3Rpb24gc3RyaW5nIFwiJHtzdHJ9XCI6IGV4cGVjdGVkIHBvc3RncmVzOi8vIG9yIHBvc3RncmVzcWw6Ly9gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC52YWx1ZSgpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHBhdGggb3B0aW9ucyBleGlzdCBvbiBmaWxlc3lzdGVtXG4gICAgICAgIGNvbnN0IHtlcnJvcnM6IHBhdGhFcnJvcnMsIGV4cGFuZGVkUGF0aHN9ID1cbiAgICAgICAgICAgIHZhbGlkYXRlUGF0aE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKHBhdGhFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IHBhdGhFcnJvcnNcbiAgICAgICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgICAgICAoe29wdGlvbiwgcGF0aH06IFRQYXRoVmFsaWRhdGlvbkVycm9yKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgYCAgJHtvcHRpb259OiAke3BhdGh9YCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xuXG4gICAgICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICAgICAgRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVGhlIGZvbGxvd2luZyBwYXRocyBkbyBub3QgZXhpc3Q6XFxuJHtlcnJvck1lc3NhZ2VzfWAsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXBsYWNlIG9yaWdpbmFsIHBhdGhzIHdpdGggZXhwYW5kZWQgcGF0aHNcbiAgICAgICAgLy8gKH4gcmVzb2x2ZWQgdG8gaG9tZSBkaXJlY3RvcnkpXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZE9wdGlvbnM6IFRPcHRpb25zID0ge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIC4uLmV4cGFuZGVkUGF0aHMsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQnVpbGQgY29uZmlnIGFuZCByZW5kZXIgdGhlIGFwcFxuICAgICAgICBjb25zdCBzc2hEZWZhdWx0cyA9IHZhbGlkYXRlZE9wdGlvbnMuc3NoXG4gICAgICAgICAgICA/IHBhcnNlU1NIVGFyZ2V0KHZhbGlkYXRlZE9wdGlvbnMuc3NoKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3QgY29uZmlnOiBUQ29ubmVjdGlvbkNvbmZpZyA9IHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb25TdHJpbmc6IGVmZmVjdGl2ZUNvbm5lY3Rpb25TdHJpbmcsXG4gICAgICAgICAgICAuLi52YWxpZGF0ZWRPcHRpb25zLFxuICAgICAgICAgICAgc3NoSG9zdDogdmFsaWRhdGVkT3B0aW9ucy5zc2hIb3N0ID8/IHNzaERlZmF1bHRzPy5ob3N0LFxuICAgICAgICAgICAgc3NoUG9ydDogdmFsaWRhdGVkT3B0aW9ucy5zc2hQb3J0ID8/IHNzaERlZmF1bHRzPy5wb3J0LFxuICAgICAgICAgICAgc3NoVXNlcm5hbWU6IHZhbGlkYXRlZE9wdGlvbnMuc3NoVXNlcm5hbWUgPz8gc3NoRGVmYXVsdHM/LnVzZXJuYW1lLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHN0b3JlID0gY3JlYXRlQXBwU3RvcmUoY29uZmlnKTtcblxuICAgICAgICByZW5kZXIoY3JlYXRlRWxlbWVudChBcHAsIHtzdG9yZX0pKTtcblxuICAgICAgICBpZiAoY29ubmVjdGlvblN0cmluZ0Vycm9yKSB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnN0YXRlID0gJ2Vycm9yJztcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uZXJyb3IgPSBjb25uZWN0aW9uU3RyaW5nRXJyb3I7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bihzdG9yZSk7XG4gICAgfSk7XG5cbnByb2dyYW0ucGFyc2UoKTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export declare const getTRPCURL: () => string;
2
+ //# sourceMappingURL=trpc-url.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trpc-url.d.mts","sourceRoot":"./src/","sources":["lib/trpc-url.mts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,QAAO,MAGoB,CAAC"}
@@ -0,0 +1,6 @@
1
+ const PROD_CORE = 'https://core.dbctx.io';
2
+ const DEV_CORE_PORT = 12001;
3
+ export const getTRPCURL = () => process.env.NODE_ENV === 'production'
4
+ ? `${PROD_CORE}/trpc`
5
+ : `http://localhost:${DEV_CORE_PORT}/trpc`;
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJwYy11cmwubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsibGliL3RycGMtdXJsLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQztBQUMxQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFFNUIsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEdBQVcsRUFBRSxDQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZO0lBQ2pDLENBQUMsQ0FBQyxHQUFHLFNBQVMsT0FBTztJQUNyQixDQUFDLENBQUMsb0JBQW9CLGFBQWEsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgUFJPRF9DT1JFID0gJ2h0dHBzOi8vY29yZS5kYmN0eC5pbyc7XG5jb25zdCBERVZfQ09SRV9QT1JUID0gMTIwMDE7XG5cbmV4cG9ydCBjb25zdCBnZXRUUlBDVVJMID0gKCk6IHN0cmluZyA9PlxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbidcbiAgICAgICAgPyBgJHtQUk9EX0NPUkV9L3RycGNgXG4gICAgICAgIDogYGh0dHA6Ly9sb2NhbGhvc3Q6JHtERVZfQ09SRV9QT1JUfS90cnBjYDtcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import type { TRPCClient } from '@trpc/client';
2
+ import type { TAppRouter } from '@dbctx/core';
3
+ type TGetToken = () => Promise<string | null>;
4
+ export declare const trpc: TRPCClient<TAppRouter>;
5
+ export declare const createAuthenticatedTRPCClient: (getToken: TGetToken) => TRPCClient<TAppRouter>;
6
+ export {};
7
+ //# sourceMappingURL=trpc.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trpc.d.mts","sourceRoot":"./src/","sources":["lib/trpc.mts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAI5C,KAAK,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAgC9C,eAAO,MAAM,IAAI,EAAE,UAAU,CAAC,UAAU,CAEtC,CAAC;AAEH,eAAO,MAAM,6BAA6B,GACtC,UAAU,SAAS,KACpB,UAAU,CAAC,UAAU,CAGlB,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { createTRPCClient, httpBatchLink, splitLink, httpSubscriptionLink, } from '@trpc/client';
2
+ import { EventSource } from 'eventsource';
3
+ import { getTRPCURL } from '#client/lib/trpc-url.mjs';
4
+ const createLinks = (getToken) => {
5
+ const headers = getToken
6
+ ? async () => {
7
+ const token = await getToken();
8
+ return token ? { Authorization: `Bearer ${token}` } : {};
9
+ }
10
+ : undefined;
11
+ return [
12
+ splitLink({
13
+ condition: (op) => op.type === 'subscription',
14
+ true: httpSubscriptionLink({
15
+ url: getTRPCURL(),
16
+ EventSource: EventSource,
17
+ connectionParams: getToken
18
+ ? async () => {
19
+ const token = await getToken();
20
+ return token ? { token } : {};
21
+ }
22
+ : undefined,
23
+ }),
24
+ false: httpBatchLink({
25
+ url: getTRPCURL(),
26
+ headers,
27
+ }),
28
+ }),
29
+ ];
30
+ };
31
+ export const trpc = createTRPCClient({
32
+ links: createLinks(),
33
+ });
34
+ export const createAuthenticatedTRPCClient = (getToken) => createTRPCClient({
35
+ links: createLinks(getToken),
36
+ });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJwYy5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJsaWIvdHJwYy5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsU0FBUyxFQUNULG9CQUFvQixHQUN2QixNQUFNLGNBQWMsQ0FBQztBQUd0QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUlwRCxNQUFNLFdBQVcsR0FBRyxDQUFDLFFBQW9CLEVBQUUsRUFBRTtJQUN6QyxNQUFNLE9BQU8sR0FBRyxRQUFRO1FBQ3BCLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNQLE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxFQUFFLENBQUM7WUFDL0IsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUMsYUFBYSxFQUFFLFVBQVUsS0FBSyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNELENBQUM7UUFDSCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWhCLE9BQU87UUFDSCxTQUFTLENBQUM7WUFDTixTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssY0FBYztZQUM3QyxJQUFJLEVBQUUsb0JBQW9CLENBQUM7Z0JBQ3ZCLEdBQUcsRUFBRSxVQUFVLEVBQUU7Z0JBQ2pCLFdBQVcsRUFDUCxXQUF1RDtnQkFDM0QsZ0JBQWdCLEVBQUUsUUFBUTtvQkFDdEIsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO3dCQUNQLE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxFQUFFLENBQUM7d0JBQy9CLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2hDLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLFNBQVM7YUFDbEIsQ0FBQztZQUNGLEtBQUssRUFBRSxhQUFhLENBQUM7Z0JBQ2pCLEdBQUcsRUFBRSxVQUFVLEVBQUU7Z0JBQ2pCLE9BQU87YUFDVixDQUFDO1NBQ0wsQ0FBQztLQUNMLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQTJCLGdCQUFnQixDQUFhO0lBQ3JFLEtBQUssRUFBRSxXQUFXLEVBQUU7Q0FDdkIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FDekMsUUFBbUIsRUFDRyxFQUFFLENBQ3hCLGdCQUFnQixDQUFhO0lBQ3pCLEtBQUssRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDO0NBQy9CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgY3JlYXRlVFJQQ0NsaWVudCxcbiAgICBodHRwQmF0Y2hMaW5rLFxuICAgIHNwbGl0TGluayxcbiAgICBodHRwU3Vic2NyaXB0aW9uTGluayxcbn0gZnJvbSAnQHRycGMvY2xpZW50JztcbmltcG9ydCB0eXBlIHtUUlBDQ2xpZW50fSBmcm9tICdAdHJwYy9jbGllbnQnO1xuaW1wb3J0IHR5cGUge1RBcHBSb3V0ZXJ9IGZyb20gJ0BkYmN0eC9jb3JlJztcbmltcG9ydCB7RXZlbnRTb3VyY2V9IGZyb20gJ2V2ZW50c291cmNlJztcbmltcG9ydCB7Z2V0VFJQQ1VSTH0gZnJvbSAnI2NsaWVudC9saWIvdHJwYy11cmwubWpzJztcblxudHlwZSBUR2V0VG9rZW4gPSAoKSA9PiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xuXG5jb25zdCBjcmVhdGVMaW5rcyA9IChnZXRUb2tlbj86IFRHZXRUb2tlbikgPT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBnZXRUb2tlblxuICAgICAgICA/IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRUb2tlbigpO1xuICAgICAgICAgICAgICByZXR1cm4gdG9rZW4gPyB7QXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWB9IDoge307XG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBbXG4gICAgICAgIHNwbGl0TGluayh7XG4gICAgICAgICAgICBjb25kaXRpb246IChvcCkgPT4gb3AudHlwZSA9PT0gJ3N1YnNjcmlwdGlvbicsXG4gICAgICAgICAgICB0cnVlOiBodHRwU3Vic2NyaXB0aW9uTGluayh7XG4gICAgICAgICAgICAgICAgdXJsOiBnZXRUUlBDVVJMKCksXG4gICAgICAgICAgICAgICAgRXZlbnRTb3VyY2U6XG4gICAgICAgICAgICAgICAgICAgIEV2ZW50U291cmNlIGFzIHVua25vd24gYXMgdHlwZW9mIGdsb2JhbFRoaXMuRXZlbnRTb3VyY2UsXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvblBhcmFtczogZ2V0VG9rZW5cbiAgICAgICAgICAgICAgICAgICAgPyBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuID8ge3Rva2VufSA6IHt9O1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZhbHNlOiBodHRwQmF0Y2hMaW5rKHtcbiAgICAgICAgICAgICAgICB1cmw6IGdldFRSUENVUkwoKSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pLFxuICAgIF07XG59O1xuXG5leHBvcnQgY29uc3QgdHJwYzogVFJQQ0NsaWVudDxUQXBwUm91dGVyPiA9IGNyZWF0ZVRSUENDbGllbnQ8VEFwcFJvdXRlcj4oe1xuICAgIGxpbmtzOiBjcmVhdGVMaW5rcygpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBdXRoZW50aWNhdGVkVFJQQ0NsaWVudCA9IChcbiAgICBnZXRUb2tlbjogVEdldFRva2VuLFxuKTogVFJQQ0NsaWVudDxUQXBwUm91dGVyPiA9PlxuICAgIGNyZWF0ZVRSUENDbGllbnQ8VEFwcFJvdXRlcj4oe1xuICAgICAgICBsaW5rczogY3JlYXRlTGlua3MoZ2V0VG9rZW4pLFxuICAgIH0pO1xuIl19
@@ -0,0 +1,4 @@
1
+ import type { CreateTRPCReact } from '@trpc/react-query';
2
+ import type { TAppRouter } from '@dbctx/core';
3
+ export declare const trpcReact: CreateTRPCReact<TAppRouter, unknown>;
4
+ //# sourceMappingURL=trpc.react.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trpc.react.d.mts","sourceRoot":"./src/","sources":["lib/trpc.react.mts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAE5C,eAAO,MAAM,SAAS,EAAE,eAAe,CAAC,UAAU,EAAE,OAAO,CAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { createTRPCReact } from '@trpc/react-query';
2
+ export const trpcReact = createTRPCReact();
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJwYy5yZWFjdC5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJsaWIvdHJwYy5yZWFjdC5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBSWxELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FDbEIsZUFBZSxFQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NyZWF0ZVRSUENSZWFjdH0gZnJvbSAnQHRycGMvcmVhY3QtcXVlcnknO1xuaW1wb3J0IHR5cGUge0NyZWF0ZVRSUENSZWFjdH0gZnJvbSAnQHRycGMvcmVhY3QtcXVlcnknO1xuaW1wb3J0IHR5cGUge1RBcHBSb3V0ZXJ9IGZyb20gJ0BkYmN0eC9jb3JlJztcblxuZXhwb3J0IGNvbnN0IHRycGNSZWFjdDogQ3JlYXRlVFJQQ1JlYWN0PFRBcHBSb3V0ZXIsIHVua25vd24+ID1cbiAgICBjcmVhdGVUUlBDUmVhY3Q8VEFwcFJvdXRlcj4oKTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export declare const CLIENT_VERSION: string;
2
+ //# sourceMappingURL=version.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.mts","sourceRoot":"./src/","sources":["lib/version.mts"],"names":[],"mappings":"AAKA,eAAO,MAAM,cAAc,EAAE,MAAoB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { createRequire } from 'node:module';
2
+ const require = createRequire(import.meta.url);
3
+ const pkg = require('../../package.json');
4
+ export const CLIENT_VERSION = pkg.version;
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJsaWIvdmVyc2lvbi5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUxQyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQXNCLENBQUM7QUFFL0QsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFXLEdBQUcsQ0FBQyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NyZWF0ZVJlcXVpcmV9IGZyb20gJ25vZGU6bW9kdWxlJztcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IHBrZyA9IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpIGFzIHt2ZXJzaW9uOiBzdHJpbmd9O1xuXG5leHBvcnQgY29uc3QgQ0xJRU5UX1ZFUlNJT046IHN0cmluZyA9IHBrZy52ZXJzaW9uO1xuIl19
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ type TGetToken = () => Promise<string | null>;
3
+ type TTRPCProviderProps = {
4
+ readonly children: React.ReactNode;
5
+ readonly getToken?: TGetToken;
6
+ };
7
+ export declare const TRPCProvider: ({ children, getToken }: TTRPCProviderProps) => import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=TrpcProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrpcProvider.d.ts","sourceRoot":"./src/","sources":["providers/TrpcProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,KAAK,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAE9C,KAAK,kBAAkB,GAAG;IACtB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACjC,CAAC;AAmCF,eAAO,MAAM,YAAY,GAAI,wBAAsB,kBAAkB,4CAUpE,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
4
+ import { httpBatchLink, splitLink, httpSubscriptionLink } from '@trpc/client';
5
+ import { EventSource } from 'eventsource';
6
+ import { trpcReact } from '#client/lib/trpc.react.mjs';
7
+ import { getTRPCURL } from '#client/lib/trpc-url.mjs';
8
+ const queryClient = new QueryClient();
9
+ const createTRPCClient = (getToken) => trpcReact.createClient({
10
+ links: [
11
+ splitLink({
12
+ condition: (op) => op.type === 'subscription',
13
+ true: httpSubscriptionLink({
14
+ url: getTRPCURL(),
15
+ EventSource: EventSource,
16
+ connectionParams: getToken
17
+ ? async () => {
18
+ const token = await getToken();
19
+ return token ? { token } : {};
20
+ }
21
+ : undefined,
22
+ }),
23
+ false: httpBatchLink({
24
+ url: getTRPCURL(),
25
+ headers: getToken
26
+ ? async () => {
27
+ const token = await getToken();
28
+ return token
29
+ ? { Authorization: `Bearer ${token}` }
30
+ : {};
31
+ }
32
+ : undefined,
33
+ }),
34
+ }),
35
+ ],
36
+ });
37
+ export const TRPCProvider = ({ children, getToken }) => {
38
+ const [trpcClient] = React.useState(() => createTRPCClient(getToken));
39
+ return (_jsx(trpcReact.Provider, { client: trpcClient, queryClient: queryClient, children: _jsx(QueryClientProvider, { client: queryClient, children: children }) }));
40
+ };
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJwY1Byb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsicHJvdmlkZXJzL1RycGNQcm92aWRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDNUUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDckQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBU3BELE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFFdEMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQW9CLEVBQUUsRUFBRSxDQUM5QyxTQUFTLENBQUMsWUFBWSxDQUFDO0lBQ25CLEtBQUssRUFBRTtRQUNILFNBQVMsQ0FBQztZQUNOLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxjQUFjO1lBQzdDLElBQUksRUFBRSxvQkFBb0IsQ0FBQztnQkFDdkIsR0FBRyxFQUFFLFVBQVUsRUFBRTtnQkFDakIsV0FBVyxFQUNQLFdBQXVEO2dCQUMzRCxnQkFBZ0IsRUFBRSxRQUFRO29CQUN0QixDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7d0JBQ1AsTUFBTSxLQUFLLEdBQUcsTUFBTSxRQUFRLEVBQUUsQ0FBQzt3QkFDL0IsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDaEMsQ0FBQztvQkFDSCxDQUFDLENBQUMsU0FBUzthQUNsQixDQUFDO1lBQ0YsS0FBSyxFQUFFLGFBQWEsQ0FBQztnQkFDakIsR0FBRyxFQUFFLFVBQVUsRUFBRTtnQkFDakIsT0FBTyxFQUFFLFFBQVE7b0JBQ2IsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO3dCQUNQLE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxFQUFFLENBQUM7d0JBQy9CLE9BQU8sS0FBSzs0QkFDUixDQUFDLENBQUMsRUFBQyxhQUFhLEVBQUUsVUFBVSxLQUFLLEVBQUUsRUFBQzs0QkFDcEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDYixDQUFDO29CQUNILENBQUMsQ0FBQyxTQUFTO2FBQ2xCLENBQUM7U0FDTCxDQUFDO0tBQ0w7Q0FDSixDQUFDLENBQUM7QUFFUCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQXFCLEVBQUUsRUFBRTtJQUNyRSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRXRFLE9BQU8sQ0FDSCxLQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxZQUM1RCxLQUFDLG1CQUFtQixJQUFDLE1BQU0sRUFBRSxXQUFXLFlBQ25DLFFBQVEsR0FDUyxHQUNMLENBQ3hCLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlcn0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7aHR0cEJhdGNoTGluaywgc3BsaXRMaW5rLCBodHRwU3Vic2NyaXB0aW9uTGlua30gZnJvbSAnQHRycGMvY2xpZW50JztcbmltcG9ydCB7RXZlbnRTb3VyY2V9IGZyb20gJ2V2ZW50c291cmNlJztcbmltcG9ydCB7dHJwY1JlYWN0fSBmcm9tICcjY2xpZW50L2xpYi90cnBjLnJlYWN0Lm1qcyc7XG5pbXBvcnQge2dldFRSUENVUkx9IGZyb20gJyNjbGllbnQvbGliL3RycGMtdXJsLm1qcyc7XG5cbnR5cGUgVEdldFRva2VuID0gKCkgPT4gUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcblxudHlwZSBUVFJQQ1Byb3ZpZGVyUHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICByZWFkb25seSBnZXRUb2tlbj86IFRHZXRUb2tlbjtcbn07XG5cbmNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbmNvbnN0IGNyZWF0ZVRSUENDbGllbnQgPSAoZ2V0VG9rZW4/OiBUR2V0VG9rZW4pID0+XG4gICAgdHJwY1JlYWN0LmNyZWF0ZUNsaWVudCh7XG4gICAgICAgIGxpbmtzOiBbXG4gICAgICAgICAgICBzcGxpdExpbmsoe1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogKG9wKSA9PiBvcC50eXBlID09PSAnc3Vic2NyaXB0aW9uJyxcbiAgICAgICAgICAgICAgICB0cnVlOiBodHRwU3Vic2NyaXB0aW9uTGluayh7XG4gICAgICAgICAgICAgICAgICAgIHVybDogZ2V0VFJQQ1VSTCgpLFxuICAgICAgICAgICAgICAgICAgICBFdmVudFNvdXJjZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50U291cmNlIGFzIHVua25vd24gYXMgdHlwZW9mIGdsb2JhbFRoaXMuRXZlbnRTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25QYXJhbXM6IGdldFRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbiA/IHt0b2tlbn0gOiB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmFsc2U6IGh0dHBCYXRjaExpbmsoe1xuICAgICAgICAgICAgICAgICAgICB1cmw6IGdldFRSUENVUkwoKSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogZ2V0VG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7QXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICB9KTtcblxuZXhwb3J0IGNvbnN0IFRSUENQcm92aWRlciA9ICh7Y2hpbGRyZW4sIGdldFRva2VufTogVFRSUENQcm92aWRlclByb3BzKSA9PiB7XG4gICAgY29uc3QgW3RycGNDbGllbnRdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4gY3JlYXRlVFJQQ0NsaWVudChnZXRUb2tlbikpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPHRycGNSZWFjdC5Qcm92aWRlciBjbGllbnQ9e3RycGNDbGllbnR9IHF1ZXJ5Q2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvdHJwY1JlYWN0LlByb3ZpZGVyPlxuICAgICk7XG59O1xuIl19