neon 3.0.0 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/README.md +70 -5
  2. package/dist/_chunks/auth_selection-DGgq6ifc.js +83 -0
  3. package/dist/_chunks/cmd_pipeline-CUbBO9U_.js +2818 -0
  4. package/dist/_chunks/credentials-MYdHdKah.js +188 -0
  5. package/dist/_chunks/env-NbA61JR3.js +585 -0
  6. package/dist/_chunks/env_services-Tz9G4JeT.js +531 -0
  7. package/dist/_chunks/paths-DMq0Lt7a.js +151 -0
  8. package/dist/_chunks/profiles-Ir29rqns.js +217 -0
  9. package/dist/_chunks/psql-DWH-kc69.js +2169 -0
  10. package/dist/_chunks/rolldown-runtime-D7D4PA-g.js +13 -0
  11. package/dist/_chunks/secure_file-BucZj4yQ.js +39 -0
  12. package/dist/analytics.js +163 -207
  13. package/dist/api.js +815 -758
  14. package/dist/auth.js +121 -141
  15. package/dist/auth_context.js +39 -53
  16. package/dist/cli.js +4 -7
  17. package/dist/commands/api.js +220 -250
  18. package/dist/commands/api_keys.js +251 -314
  19. package/dist/commands/auth.js +283 -328
  20. package/dist/commands/bootstrap.js +372 -437
  21. package/dist/commands/branches.js +304 -455
  22. package/dist/commands/bucket.js +374 -514
  23. package/dist/commands/checkout.js +213 -298
  24. package/dist/commands/config.js +573 -690
  25. package/dist/commands/connection_string.js +137 -165
  26. package/dist/commands/data_api.js +238 -260
  27. package/dist/commands/databases.js +67 -76
  28. package/dist/commands/deploy.js +31 -25
  29. package/dist/commands/dev.js +639 -719
  30. package/dist/commands/diff.js +156 -200
  31. package/dist/commands/env.js +255 -305
  32. package/dist/commands/functions.js +275 -355
  33. package/dist/commands/index.js +70 -65
  34. package/dist/commands/init.js +84 -119
  35. package/dist/commands/inspect.js +55 -55
  36. package/dist/commands/ip_allow.js +88 -120
  37. package/dist/commands/link.js +874 -1019
  38. package/dist/commands/logs.js +291 -0
  39. package/dist/commands/neon_auth.js +725 -933
  40. package/dist/commands/operations.js +34 -25
  41. package/dist/commands/orgs.js +28 -18
  42. package/dist/commands/profile.js +615 -846
  43. package/dist/commands/projects.js +313 -373
  44. package/dist/commands/psql.js +60 -58
  45. package/dist/commands/roles.js +55 -58
  46. package/dist/commands/schema_diff.js +87 -131
  47. package/dist/commands/set_context.js +34 -26
  48. package/dist/commands/snapshots.js +288 -413
  49. package/dist/commands/status.js +41 -37
  50. package/dist/commands/user.js +21 -10
  51. package/dist/commands/vpc_endpoints.js +85 -113
  52. package/dist/config.js +7 -6
  53. package/dist/config_format.js +50 -66
  54. package/dist/config_template.js +128 -157
  55. package/dist/context.js +183 -235
  56. package/dist/current_branch_fast_path.js +40 -49
  57. package/dist/dev/env.js +2 -446
  58. package/dist/dev/functions.js +54 -68
  59. package/dist/dev/inputs.js +46 -58
  60. package/dist/dev/runtime.js +135 -164
  61. package/dist/dev/websocket.js +766 -959
  62. package/dist/env.js +27 -33
  63. package/dist/env_file.js +118 -132
  64. package/dist/env_services.js +2 -51
  65. package/dist/errors.js +57 -68
  66. package/dist/functions_api.js +45 -43
  67. package/dist/help.js +189 -140
  68. package/dist/index.js +182 -257
  69. package/dist/init/agents.js +137 -118
  70. package/dist/init/auth.js +58 -68
  71. package/dist/init/bootstrap.js +325 -396
  72. package/dist/init/build_config.js +4 -2
  73. package/dist/init/detect_agent.js +56 -101
  74. package/dist/init/editors.js +35 -52
  75. package/dist/init/enrich_output.js +51 -66
  76. package/dist/init/extension.js +134 -171
  77. package/dist/init/inspect.js +179 -266
  78. package/dist/init/interactive.js +510 -622
  79. package/dist/init/neonctl.js +117 -168
  80. package/dist/init/orchestrate.js +157 -173
  81. package/dist/init/phases/auth.js +188 -202
  82. package/dist/init/phases/cleanup.js +23 -23
  83. package/dist/init/phases/db.js +251 -277
  84. package/dist/init/phases/getting_started.js +213 -223
  85. package/dist/init/phases/mcp.js +174 -224
  86. package/dist/init/phases/migrations.js +247 -248
  87. package/dist/init/phases/neon_auth.js +114 -133
  88. package/dist/init/phases/setup.js +546 -703
  89. package/dist/init/phases/skills.js +75 -86
  90. package/dist/init/phases/status.js +72 -67
  91. package/dist/init/resolve_context.js +102 -99
  92. package/dist/init/route_command.js +91 -98
  93. package/dist/init/skills.js +174 -218
  94. package/dist/init/vsix.js +77 -99
  95. package/dist/log.js +17 -16
  96. package/dist/neon_services.js +104 -129
  97. package/dist/parameters.gen.js +481 -471
  98. package/dist/pkg.js +17 -19
  99. package/dist/profile_keys.js +44 -47
  100. package/dist/psql/cli.js +44 -47
  101. package/dist/psql/command/cmd_cond.js +231 -406
  102. package/dist/psql/command/cmd_connect.js +557 -764
  103. package/dist/psql/command/cmd_copy.js +728 -984
  104. package/dist/psql/command/cmd_describe.js +1499 -1688
  105. package/dist/psql/command/cmd_format.js +733 -905
  106. package/dist/psql/command/cmd_io.js +2 -2193
  107. package/dist/psql/command/cmd_lo.js +297 -359
  108. package/dist/psql/command/cmd_meta.js +727 -878
  109. package/dist/psql/command/cmd_misc.js +138 -172
  110. package/dist/psql/command/cmd_pipeline.js +2 -1148
  111. package/dist/psql/command/cmd_restrict.js +119 -155
  112. package/dist/psql/command/cmd_show.js +529 -688
  113. package/dist/psql/command/dispatch.js +260 -325
  114. package/dist/psql/command/inputQueue.js +35 -33
  115. package/dist/psql/command/shared.js +49 -63
  116. package/dist/psql/complete/filenames.js +90 -133
  117. package/dist/psql/complete/index.js +59 -97
  118. package/dist/psql/complete/matcher.js +236 -300
  119. package/dist/psql/complete/psqlVars.js +218 -223
  120. package/dist/psql/complete/queries.js +159 -177
  121. package/dist/psql/complete/rules.js +1493 -2299
  122. package/dist/psql/core/common.js +2 -1253
  123. package/dist/psql/core/help.js +456 -546
  124. package/dist/psql/core/mainloop.js +692 -1303
  125. package/dist/psql/core/prompt.js +391 -408
  126. package/dist/psql/core/settings.js +429 -644
  127. package/dist/psql/core/sqlHelp.js +480 -554
  128. package/dist/psql/core/startup.js +2 -846
  129. package/dist/psql/core/syncVars.js +67 -110
  130. package/dist/psql/core/variables.js +156 -278
  131. package/dist/psql/describe/formatters.js +884 -1285
  132. package/dist/psql/describe/processNamePattern.js +173 -260
  133. package/dist/psql/describe/queries.js +1368 -2403
  134. package/dist/psql/describe/versionGate.js +32 -41
  135. package/dist/psql/index.js +2 -2030
  136. package/dist/psql/io/history.js +232 -271
  137. package/dist/psql/io/input.js +103 -108
  138. package/dist/psql/io/lineEditor/buffer.js +238 -319
  139. package/dist/psql/io/lineEditor/complete.js +135 -213
  140. package/dist/psql/io/lineEditor/filename.js +139 -148
  141. package/dist/psql/io/lineEditor/index.js +653 -870
  142. package/dist/psql/io/lineEditor/keymap.js +544 -702
  143. package/dist/psql/io/lineEditor/vt100.js +294 -341
  144. package/dist/psql/io/pgpass.js +158 -187
  145. package/dist/psql/io/pgservice.js +146 -183
  146. package/dist/psql/io/psqlrc.js +328 -403
  147. package/dist/psql/print/aligned.js +1020 -1683
  148. package/dist/psql/print/asciidoc.js +180 -214
  149. package/dist/psql/print/crosstab.js +281 -442
  150. package/dist/psql/print/csv.js +48 -70
  151. package/dist/psql/print/html.js +195 -226
  152. package/dist/psql/print/json.js +75 -88
  153. package/dist/psql/print/latex.js +291 -364
  154. package/dist/psql/print/pager.js +171 -242
  155. package/dist/psql/print/troff.js +194 -226
  156. package/dist/psql/print/unaligned.js +69 -95
  157. package/dist/psql/print/units.js +167 -169
  158. package/dist/psql/scanner/slash.js +428 -483
  159. package/dist/psql/scanner/sql.js +445 -889
  160. package/dist/psql/scanner/stringutils.js +309 -379
  161. package/dist/psql/types/index.js +8 -7
  162. package/dist/psql/types/scanner.js +25 -22
  163. package/dist/psql/wire/connection.js +2042 -2803
  164. package/dist/psql/wire/copy.js +84 -100
  165. package/dist/psql/wire/notify.js +39 -59
  166. package/dist/psql/wire/pipeline.js +305 -518
  167. package/dist/psql/wire/protocol.js +349 -417
  168. package/dist/psql/wire/sasl.js +180 -265
  169. package/dist/psql/wire/tls.js +400 -561
  170. package/dist/storage_api.js +115 -129
  171. package/dist/test_utils/fixtures.js +94 -113
  172. package/dist/test_utils/oauth_server.js +10 -7
  173. package/dist/test_utils/project_dir.js +33 -0
  174. package/dist/utils/ai_gateway_notice.js +131 -162
  175. package/dist/utils/api_enums.js +21 -28
  176. package/dist/utils/auth.js +10 -4
  177. package/dist/utils/branch_notice.js +20 -19
  178. package/dist/utils/branch_picker.js +83 -89
  179. package/dist/utils/cli_name.js +15 -12
  180. package/dist/utils/compute_units.js +20 -27
  181. package/dist/utils/config_diff.js +127 -158
  182. package/dist/utils/enrichers.js +95 -148
  183. package/dist/utils/esbuild.js +130 -189
  184. package/dist/utils/flags.js +35 -47
  185. package/dist/utils/formats.js +8 -15
  186. package/dist/utils/git_diff.js +69 -80
  187. package/dist/utils/inspect_db.js +101 -143
  188. package/dist/utils/inspect_queries.js +179 -142
  189. package/dist/utils/middlewares.js +39 -45
  190. package/dist/utils/openapi.js +87 -99
  191. package/dist/utils/package_manager.js +312 -110
  192. package/dist/utils/point_in_time.js +49 -53
  193. package/dist/utils/psql.js +89 -106
  194. package/dist/utils/service_picker.js +55 -58
  195. package/dist/utils/string.js +5 -5
  196. package/dist/utils/ui.js +38 -55
  197. package/dist/utils/write_sync.js +26 -35
  198. package/dist/utils/zip.js +4 -3
  199. package/dist/writer.js +67 -87
  200. package/package.json +11 -6
  201. package/dist/_shared/auth_selection.js +0 -86
  202. package/dist/_shared/credentials.js +0 -209
  203. package/dist/_shared/env-core/env.js +0 -558
  204. package/dist/_shared/env-core/reuse-secrets.js +0 -223
  205. package/dist/_shared/paths.js +0 -148
  206. package/dist/_shared/profiles.js +0 -276
  207. package/dist/_shared/secure_file.js +0 -43
package/README.md CHANGED
@@ -421,9 +421,9 @@ The human-readable summary line goes to stderr and the diff body to stdout, so `
421
421
 
422
422
  **What gets pulled**, in precedence order:
423
423
 
424
- 1. **`--service`**, when you pass it — exactly those services, whatever else is on the branch and whatever a `neon.ts` says.
424
+ 1. **`--service` and/or `--env`**, when you pass either — their union is the complete selection, ignoring `neon.ts` and unselected branch variables. `--service` adds a service's complete variable bundle; `--env` adds only the individual variables you name.
425
425
  2. **`neon.ts`**, when the working directory has one — the policy is the source of truth, same as `neon dev` and `neon deploy`.
426
- 3. **Everything the branch has** otherwise — Postgres, Neon Auth, the Data API, and object storage read back from the branch, plus the AI Gateway. The gateway has no branch-level state to read back (it is credential-gated, not provisioned), so a bare `env pull` asks for it rather than detecting it, which mints a branch credential. To leave it out, name the services you do want with `--service`.
426
+ 3. **Everything the branch has** otherwise — Postgres, Neon Auth, the Data API, and object storage read back from the branch, plus the AI Gateway. The gateway has no branch-level state to read back, so a bare `env pull` asks for it rather than detecting it and may mint a branch credential. To leave it out, name only what you do want with `--service` and/or `--env`.
427
427
 
428
428
  If the gateway can't be resolved, it is dropped with a warning and the rest of the pull still lands. Gateway variables already in your file for *this* branch are left alone — a pull that couldn't reach the gateway is no evidence the branch has stopped having one — while ones left over from a different branch are pruned like any other stale value.
429
429
 
@@ -440,6 +440,13 @@ neon env pull --service ai-gateway
440
440
  # Repeat the flag or comma-separate; -s, --service and --services are all accepted
441
441
  neon env pull -s postgres -s data-api
442
442
  neon env pull -s postgres,auth
443
+
444
+ # Pull one exact variable; repeat -e or comma-separate for more
445
+ neon env pull -e DATABASE_URL
446
+ neon env pull -e DATABASE_URL,NEON_AUTH_BASE_URL
447
+
448
+ # The selectors compose as a union: all Auth vars plus DATABASE_URL
449
+ neon env pull -s auth -e DATABASE_URL
443
450
  ```
444
451
 
445
452
  Every services flag in the CLI takes those three spellings, the same value syntax, and the same service names — see [`config init --services`](#getting-a-neonts-config-init).
@@ -452,11 +459,15 @@ Every services flag in the CLI takes those three spellings, the same value synta
452
459
  | `object-storage` | `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_ENDPOINT_URL_S3`, `AWS_REGION` |
453
460
  | `ai-gateway` | `NEON_AI_GATEWAY_TOKEN`, `NEON_AI_GATEWAY_BASE_URL` |
454
461
 
455
- `NEON_BRANCH` is written by every pull — it is branch identity, not a service.
462
+ `-e, --env` accepts any variable in the table plus `NEON_BRANCH`. It is case-sensitive and rejects unknown names rather than silently widening the pull. `NEON_BRANCH` is written by unscoped and service-scoped pulls because it is branch identity, not a service; an env-only pull writes it only when you select it.
463
+
464
+ `--env` never narrows `--service`: `neon env pull -s postgres -e DATABASE_URL` still pulls the complete Postgres bundle (`DATABASE_URL`, `DATABASE_URL_UNPOOLED`, and `NEON_BRANCH`). The two selectors always form a union.
465
+
466
+ **A scoped pull is scoped in both directions.** An unscoped `env pull` owns the Neon-named variables: pointing a directory at a branch without Neon Auth prunes the stale `NEON_AUTH_*` lines. `--service` narrows that to the services you named, while `--env` narrows it to the exact keys you named, so `env pull -e DATABASE_URL` never touches `DATABASE_URL_UNPOOLED`. (`AWS_*` is never pruned by any pull: those names collide with credentials you may set yourself, so `env pull` only ever writes them.)
456
467
 
457
- **A scoped pull is scoped in both directions.** An unscoped `env pull` owns the Neon-named variables: pointing a directory at a branch without Neon Auth prunes the stale `NEON_AUTH_*` lines. `--service` narrows that to the services you named, so `env pull -s ai-gateway` never touches your `DATABASE_URL`. (`AWS_*` is never pruned by any pull: those names collide with credentials you may set yourself, so `env pull` only ever writes them.)
468
+ **A scoped pull also never revokes a credential.** Where an unscoped pull revokes the credential it replaces, a scoped one leaves the old one live — it can't tell which other variables still use it. It says so when it happens; revoke it in the Neon Console if nothing does.
458
469
 
459
- **A scoped pull also never revokes a credential.** Where an unscoped pull revokes the credential it replaces, a scoped one leaves the old one live — it can't tell which other services still use it. It says so when it happens; revoke it in the Neon Console if nothing does.
470
+ `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` must be selected together. Neon issues them as one object-storage credential; pulling only one would pair a fresh half with whatever old half remains in the file.
460
471
 
461
472
  Naming a service the branch does not have is an error, not an empty pull:
462
473
 
@@ -743,6 +754,59 @@ neon snapshots schedule set --branch main --schedule '[{"frequency":"weekly","da
743
754
 
744
755
  All sub-commands honor the [global options](#global-options), including `--output json|yaml|table`.
745
756
 
757
+ ## Logs (`logs`)
758
+
759
+ `neon logs` reads the log records the services on a branch emit — Neon Functions, object storage, and Postgres computes. **Logs require Neon Platform Beta and are currently available only for projects in `aws-us-east-2`.**
760
+
761
+ Every sub-command resolves the project through the standard chain (`--project-id`, then the `.neon` context file, then a single-project auto-detect), and takes `--branch <id|name>`, defaulting to the project's default branch. `logs query` searches the previous hour by default; `logs field-values` searches the previous six hours. The maximum time window is seven days.
762
+
763
+ ```bash
764
+ # The last 30 minutes on the default branch
765
+ neon logs query --since 30m
766
+
767
+ # Postgres compute errors on main, oldest first
768
+ neon logs query --branch main --source pg_endpoint --minimum-severity error --sort-order asc
769
+
770
+ # An explicit window (--start-time replaces --since; --end-time works with either)
771
+ neon logs query --start-time 2025-01-01T00:00:00Z --end-time 2025-01-01T01:00:00Z
772
+
773
+ # One request trace, across every service that took part in it
774
+ neon logs query --trace-id 4bf92f3577b34da6a3ce929d0e0e4736
775
+
776
+ # What the structured filters cannot express: a raw LogQL selection. It replaces
777
+ # them, but the window, --limit, --sort-order and --cursor still apply.
778
+ neon logs query --since 1h --logql '{entity_type="function"} |= "timeout"'
779
+
780
+ # Which fields this branch supports, and the values it has actually seen
781
+ neon logs fields
782
+ neon logs field-values service_name --since 6h --source function
783
+ ```
784
+
785
+ A response holds at most `--limit` records (1–1000; default 100). When more matched, table output prints the `--cursor` to repeat the same query with; `--output json|yaml` returns `is_truncated` and `next_cursor` on the envelope instead, so nothing but the payload lands on stdout. Table output shows the common fields; use structured output for the complete records:
786
+
787
+ ```console
788
+ $ neon logs query --since 24h --output json
789
+ {
790
+ "logs": [
791
+ {
792
+ "timestamp": "2025-01-01T00:00:02.000Z",
793
+ "message": "GET /api/todos 200",
794
+ "source": "function",
795
+ "service_name": "api",
796
+ "severity_text": "INFO",
797
+ "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
798
+ "attributes": { "http_status": 200 }
799
+ }
800
+ ],
801
+ "next_cursor": "eyJvZmZzZXQiOjEwMH0",
802
+ "is_truncated": true
803
+ }
804
+ ```
805
+
806
+ Two combinations are rejected before the request: `--since` with `--start-time`, and `--logql` with any of `--source`, `--service-name`, `--scope-name`, `--minimum-severity`, `--severity-text`, `--body-contains` or `--trace-id`. `--minimum-severity` and `--severity-text` are independent filters and combine with AND. If Neon reports that `--minimum-severity` is unsupported, use `--severity-text` instead; `neon logs field-values severity_text` lists the exact values present on a branch.
807
+
808
+ `--body-contains` compares a case-sensitive substring against the rendered message. Structured bodies, including object storage records, are rendered as compact JSON, so match the JSON form (for example, `"http_status":200`).
809
+
746
810
  ## Profiles
747
811
 
748
812
  The CLI holds one Neon account by default. A profile adds another, and is nothing more than a pointer to a credentials file:
@@ -971,6 +1035,7 @@ API keys in org-7
971
1035
  | function | `deploy`, `list`, `get`, `delete` | Manage Neon Functions |
972
1036
  | [roles](https://neon.com/docs/reference/cli-roles) | `list`, `create`, `delete` | Manage roles |
973
1037
  | [operations](https://neon.com/docs/reference/cli-operations) | `list` | Manage operations |
1038
+ | logs | `query`, `fields`, `field-values` | Query branch logs (Beta) |
974
1039
  | snapshots | `list`, `get`, `create`, `update`, `delete`, `restore`, `finalize`, `schedule get`, `schedule set` | Manage snapshots |
975
1040
  | [connection-string](https://neon.com/docs/reference/cli-connection-string) | | Get connection string |
976
1041
  | [psql](https://neon.com/docs/reference/cli-psql) | | Connect to a database via psql |
@@ -0,0 +1,83 @@
1
+ import "./profiles-Ir29rqns.js";
2
+ //#region ../../internals/cli-core/dist/auth_selection.js
3
+ /**
4
+ * # Which credential an invocation authenticates with
5
+ *
6
+ * Four inputs can each answer "who am I": the `--api-key` flag, `NEON_API_KEY`, the
7
+ * `--profile` flag, and `NEON_PROFILE`. This module decides between them, and it is pure so
8
+ * the decision can be tested without a filesystem, a network, or a config directory.
9
+ *
10
+ * ## The rule
11
+ *
12
+ * **An explicit flag beats an ambient environment variable.** That single rule fixes the bug
13
+ * this module exists for: before it, any API key — including one merely exported into the
14
+ * shell — silently voided `--profile`, so `neon --profile work …` would quietly run as
15
+ * whoever `NEON_API_KEY` belonged to and say nothing about it.
16
+ *
17
+ * | Given | What runs |
18
+ * | --- | --- |
19
+ * | `--api-key` and `--profile` | neither: contradictory explicit flags, so this throws |
20
+ * | `--api-key` and `NEON_PROFILE` | the flag's key |
21
+ * | `--profile` and `NEON_API_KEY` | the profile |
22
+ * | `NEON_API_KEY` and `NEON_PROFILE` | the key, and the ignored profile is named in a warning |
23
+ * | `--profile` or `NEON_PROFILE` alone | that profile |
24
+ * | nothing | `DEFAULT` |
25
+ *
26
+ * Two explicit flags throw rather than picking a winner. They express different intents —
27
+ * `--api-key` supplies a credential, `--profile` selects a stored one — so there is no
28
+ * reading of the command that makes both true, and guessing is how the original bug behaved.
29
+ *
30
+ * When both are merely ambient, the key wins. That keeps CI exactly as it was: a pipeline
31
+ * that injects `NEON_API_KEY` must not change behaviour because a `NEON_PROFILE` leaked into
32
+ * the environment. It warns instead of staying silent, because a disregarded account
33
+ * selection is precisely what nobody noticed last time.
34
+ *
35
+ * `auth` and the `profile` subcommands do not use any of this. They read the same flags with
36
+ * different meanings — `neon auth --profile work` names where to *write* a credential, and
37
+ * `neon profile create work --api-key …` names one to *store* — so their callers skip
38
+ * selection entirely rather than passing exemptions down here.
39
+ */
40
+ let inputs = {
41
+ apiKeyFlag: "",
42
+ apiKeyEnv: "",
43
+ profileEnv: ""
44
+ };
45
+ const recordCredentialInputs = (recorded) => {
46
+ inputs = recorded;
47
+ };
48
+ const credentialInputs = () => inputs;
49
+ const selectCredential = ({ apiKeyFlag, profileFlag, apiKeyEnv, profileEnv }) => {
50
+ const flagKey = nonEmpty(apiKeyFlag);
51
+ const flagProfile = nonEmpty(profileFlag);
52
+ if (flagKey !== void 0 && flagProfile !== void 0) throw new Error("Pass either --api-key or --profile, not both. --api-key supplies a credential directly; --profile selects a stored one.");
53
+ if (flagKey !== void 0) return {
54
+ source: "explicit-api-key",
55
+ apiKey: flagKey
56
+ };
57
+ if (flagProfile !== void 0) return {
58
+ source: "profile",
59
+ profile: flagProfile,
60
+ explicit: true
61
+ };
62
+ const envKey = nonEmpty(apiKeyEnv);
63
+ const envProfile = nonEmpty(profileEnv);
64
+ if (envKey !== void 0) return {
65
+ source: "ambient-api-key",
66
+ apiKey: envKey,
67
+ ...envProfile !== void 0 ? { ignoredProfile: envProfile } : {}
68
+ };
69
+ return {
70
+ source: "profile",
71
+ profile: envProfile ?? "DEFAULT",
72
+ explicit: envProfile !== void 0
73
+ };
74
+ };
75
+ /** The warning for an ambient key that displaced an ambient profile, or `null`. */
76
+ const displacedProfileWarning = (selection) => selection.source === "ambient-api-key" && selection.ignoredProfile !== void 0 ? `NEON_API_KEY is set, so profile "${selection.ignoredProfile}" from NEON_PROFILE was ignored. Pass --profile ${selection.ignoredProfile} to use it instead.` : null;
77
+ function nonEmpty(value) {
78
+ if (typeof value !== "string") return void 0;
79
+ const trimmed = value.trim();
80
+ return trimmed === "" ? void 0 : trimmed;
81
+ }
82
+ //#endregion
83
+ export { selectCredential as i, displacedProfileWarning as n, recordCredentialInputs as r, credentialInputs as t };