neon 2.47.0 → 3.1.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 (198) hide show
  1. package/README.md +54 -0
  2. package/dist/_shared/auth_selection.js +76 -79
  3. package/dist/_shared/credentials.js +166 -187
  4. package/dist/_shared/env-core/env.js +395 -0
  5. package/dist/_shared/env-core/reuse-secrets.js +179 -0
  6. package/dist/_shared/paths.js +129 -126
  7. package/dist/_shared/profiles.js +192 -242
  8. package/dist/_shared/secure_file.js +36 -38
  9. package/dist/_virtual/_rolldown/runtime.js +13 -0
  10. package/dist/analytics.js +163 -207
  11. package/dist/api.js +815 -758
  12. package/dist/auth.js +121 -141
  13. package/dist/auth_context.js +39 -53
  14. package/dist/cli.js +4 -7
  15. package/dist/commands/api.js +220 -250
  16. package/dist/commands/api_keys.js +251 -314
  17. package/dist/commands/auth.js +283 -328
  18. package/dist/commands/bootstrap.js +372 -437
  19. package/dist/commands/branches.js +304 -455
  20. package/dist/commands/bucket.js +374 -514
  21. package/dist/commands/checkout.js +213 -298
  22. package/dist/commands/config.js +575 -658
  23. package/dist/commands/connection_string.js +137 -165
  24. package/dist/commands/data_api.js +238 -260
  25. package/dist/commands/databases.js +67 -76
  26. package/dist/commands/deploy.js +31 -25
  27. package/dist/commands/dev.js +642 -681
  28. package/dist/commands/diff.js +156 -200
  29. package/dist/commands/env.js +243 -303
  30. package/dist/commands/functions.js +275 -341
  31. package/dist/commands/index.js +70 -65
  32. package/dist/commands/init.js +84 -119
  33. package/dist/commands/inspect.js +55 -55
  34. package/dist/commands/ip_allow.js +88 -120
  35. package/dist/commands/link.js +874 -1019
  36. package/dist/commands/logs.js +291 -0
  37. package/dist/commands/neon_auth.js +725 -933
  38. package/dist/commands/operations.js +34 -25
  39. package/dist/commands/orgs.js +28 -18
  40. package/dist/commands/profile.js +614 -845
  41. package/dist/commands/projects.js +313 -373
  42. package/dist/commands/psql.js +60 -58
  43. package/dist/commands/roles.js +55 -58
  44. package/dist/commands/schema_diff.js +87 -131
  45. package/dist/commands/set_context.js +34 -26
  46. package/dist/commands/snapshots.js +288 -413
  47. package/dist/commands/status.js +41 -37
  48. package/dist/commands/user.js +21 -10
  49. package/dist/commands/vpc_endpoints.js +85 -113
  50. package/dist/config.js +7 -6
  51. package/dist/config_format.js +50 -66
  52. package/dist/config_template.js +128 -157
  53. package/dist/context.js +183 -235
  54. package/dist/current_branch_fast_path.js +40 -49
  55. package/dist/dev/env.js +313 -394
  56. package/dist/dev/functions.js +54 -64
  57. package/dist/dev/inputs.js +46 -58
  58. package/dist/dev/runtime.js +135 -164
  59. package/dist/dev/websocket.js +766 -959
  60. package/dist/env.js +27 -33
  61. package/dist/env_file.js +118 -132
  62. package/dist/env_services.js +36 -38
  63. package/dist/errors.js +57 -68
  64. package/dist/functions_api.js +45 -43
  65. package/dist/help.js +189 -140
  66. package/dist/index.js +182 -257
  67. package/dist/init/agents.js +137 -118
  68. package/dist/init/auth.js +58 -68
  69. package/dist/init/bootstrap.js +325 -396
  70. package/dist/init/build_config.js +4 -2
  71. package/dist/init/detect_agent.js +56 -101
  72. package/dist/init/editors.js +35 -52
  73. package/dist/init/enrich_output.js +51 -66
  74. package/dist/init/extension.js +134 -171
  75. package/dist/init/inspect.js +179 -266
  76. package/dist/init/interactive.js +510 -622
  77. package/dist/init/neonctl.js +117 -168
  78. package/dist/init/orchestrate.js +157 -173
  79. package/dist/init/phases/auth.js +188 -202
  80. package/dist/init/phases/cleanup.js +23 -23
  81. package/dist/init/phases/db.js +251 -277
  82. package/dist/init/phases/getting_started.js +213 -223
  83. package/dist/init/phases/mcp.js +174 -224
  84. package/dist/init/phases/migrations.js +247 -248
  85. package/dist/init/phases/neon_auth.js +114 -133
  86. package/dist/init/phases/setup.js +546 -703
  87. package/dist/init/phases/skills.js +75 -86
  88. package/dist/init/phases/status.js +72 -67
  89. package/dist/init/resolve_context.js +102 -99
  90. package/dist/init/route_command.js +91 -98
  91. package/dist/init/skills.js +174 -218
  92. package/dist/init/vsix.js +77 -99
  93. package/dist/log.js +17 -16
  94. package/dist/neon_services.js +104 -129
  95. package/dist/parameters.gen.js +481 -471
  96. package/dist/pkg.js +17 -19
  97. package/dist/profile_keys.js +44 -47
  98. package/dist/psql/cli.js +44 -47
  99. package/dist/psql/command/cmd_cond.js +231 -406
  100. package/dist/psql/command/cmd_connect.js +557 -764
  101. package/dist/psql/command/cmd_copy.js +727 -983
  102. package/dist/psql/command/cmd_describe.js +1499 -1688
  103. package/dist/psql/command/cmd_format.js +733 -905
  104. package/dist/psql/command/cmd_io.js +1293 -2082
  105. package/dist/psql/command/cmd_lo.js +297 -359
  106. package/dist/psql/command/cmd_meta.js +727 -878
  107. package/dist/psql/command/cmd_misc.js +138 -172
  108. package/dist/psql/command/cmd_pipeline.js +547 -1099
  109. package/dist/psql/command/cmd_restrict.js +119 -155
  110. package/dist/psql/command/cmd_show.js +529 -688
  111. package/dist/psql/command/dispatch.js +261 -325
  112. package/dist/psql/command/inputQueue.js +35 -33
  113. package/dist/psql/command/shared.js +49 -63
  114. package/dist/psql/complete/filenames.js +90 -133
  115. package/dist/psql/complete/index.js +59 -97
  116. package/dist/psql/complete/matcher.js +236 -300
  117. package/dist/psql/complete/psqlVars.js +218 -223
  118. package/dist/psql/complete/queries.js +159 -177
  119. package/dist/psql/complete/rules.js +1493 -2299
  120. package/dist/psql/core/common.js +762 -1180
  121. package/dist/psql/core/help.js +456 -546
  122. package/dist/psql/core/mainloop.js +692 -1302
  123. package/dist/psql/core/prompt.js +391 -408
  124. package/dist/psql/core/settings.js +429 -644
  125. package/dist/psql/core/sqlHelp.js +480 -554
  126. package/dist/psql/core/startup.js +626 -815
  127. package/dist/psql/core/syncVars.js +67 -110
  128. package/dist/psql/core/variables.js +156 -278
  129. package/dist/psql/describe/formatters.js +884 -1285
  130. package/dist/psql/describe/processNamePattern.js +173 -260
  131. package/dist/psql/describe/queries.js +1368 -2403
  132. package/dist/psql/describe/versionGate.js +32 -41
  133. package/dist/psql/index.js +1414 -1927
  134. package/dist/psql/io/history.js +232 -271
  135. package/dist/psql/io/input.js +103 -108
  136. package/dist/psql/io/lineEditor/buffer.js +238 -319
  137. package/dist/psql/io/lineEditor/complete.js +135 -213
  138. package/dist/psql/io/lineEditor/filename.js +139 -148
  139. package/dist/psql/io/lineEditor/index.js +653 -870
  140. package/dist/psql/io/lineEditor/keymap.js +544 -702
  141. package/dist/psql/io/lineEditor/vt100.js +294 -341
  142. package/dist/psql/io/pgpass.js +158 -187
  143. package/dist/psql/io/pgservice.js +146 -183
  144. package/dist/psql/io/psqlrc.js +328 -403
  145. package/dist/psql/print/aligned.js +1020 -1683
  146. package/dist/psql/print/asciidoc.js +180 -214
  147. package/dist/psql/print/crosstab.js +281 -442
  148. package/dist/psql/print/csv.js +48 -70
  149. package/dist/psql/print/html.js +195 -226
  150. package/dist/psql/print/json.js +75 -88
  151. package/dist/psql/print/latex.js +291 -364
  152. package/dist/psql/print/pager.js +171 -242
  153. package/dist/psql/print/troff.js +194 -226
  154. package/dist/psql/print/unaligned.js +69 -95
  155. package/dist/psql/print/units.js +167 -169
  156. package/dist/psql/scanner/slash.js +428 -483
  157. package/dist/psql/scanner/sql.js +445 -889
  158. package/dist/psql/scanner/stringutils.js +309 -379
  159. package/dist/psql/types/index.js +2 -7
  160. package/dist/psql/types/scanner.js +25 -22
  161. package/dist/psql/wire/connection.js +2042 -2803
  162. package/dist/psql/wire/copy.js +84 -100
  163. package/dist/psql/wire/notify.js +39 -59
  164. package/dist/psql/wire/pipeline.js +305 -518
  165. package/dist/psql/wire/protocol.js +349 -417
  166. package/dist/psql/wire/sasl.js +180 -265
  167. package/dist/psql/wire/tls.js +400 -561
  168. package/dist/storage_api.js +115 -129
  169. package/dist/test_utils/fixtures.js +94 -113
  170. package/dist/test_utils/oauth_server.js +10 -7
  171. package/dist/test_utils/project_dir.js +33 -0
  172. package/dist/utils/ai_gateway_notice.js +131 -162
  173. package/dist/utils/api_enums.js +21 -28
  174. package/dist/utils/auth.js +10 -4
  175. package/dist/utils/branch_notice.js +20 -19
  176. package/dist/utils/branch_picker.js +83 -89
  177. package/dist/utils/cli_name.js +15 -12
  178. package/dist/utils/compute_units.js +20 -27
  179. package/dist/utils/config_diff.js +127 -158
  180. package/dist/utils/enrichers.js +95 -148
  181. package/dist/utils/esbuild.js +133 -147
  182. package/dist/utils/flags.js +35 -47
  183. package/dist/utils/formats.js +8 -15
  184. package/dist/utils/git_diff.js +69 -80
  185. package/dist/utils/inspect_db.js +101 -143
  186. package/dist/utils/inspect_queries.js +179 -142
  187. package/dist/utils/middlewares.js +37 -44
  188. package/dist/utils/openapi.js +87 -99
  189. package/dist/utils/package_manager.js +312 -110
  190. package/dist/utils/point_in_time.js +49 -53
  191. package/dist/utils/psql.js +89 -106
  192. package/dist/utils/service_picker.js +55 -58
  193. package/dist/utils/string.js +5 -5
  194. package/dist/utils/ui.js +38 -55
  195. package/dist/utils/write_sync.js +26 -35
  196. package/dist/utils/zip.js +4 -3
  197. package/dist/writer.js +67 -87
  198. package/package.json +9 -7
@@ -1,191 +1,154 @@
1
+ import { NEON_EXTENSION_ID, downloadVsix } from "./vsix.js";
1
2
  import { existsSync } from "node:fs";
2
3
  import { unlink } from "node:fs/promises";
3
4
  import { execa } from "execa";
4
- import { downloadVsix, NEON_EXTENSION_ID } from "./vsix.js";
5
+ //#region src/init/extension.ts
5
6
  /**
6
- * Uses macOS mdfind to locate an app by bundle identifier
7
- */
7
+ * Uses macOS mdfind to locate an app by bundle identifier
8
+ */
8
9
  async function findAppWithMdfind(bundleId) {
9
- try {
10
- const result = await execa("mdfind", [`kMDItemCFBundleIdentifier == '${bundleId}'`], { timeout: 5000 });
11
- const paths = result.stdout.trim().split("\n").filter(Boolean);
12
- return paths[0] || null;
13
- }
14
- catch {
15
- return null;
16
- }
10
+ try {
11
+ return (await execa("mdfind", [`kMDItemCFBundleIdentifier == '${bundleId}'`], { timeout: 5e3 })).stdout.trim().split("\n").filter(Boolean)[0] || null;
12
+ } catch {
13
+ return null;
14
+ }
17
15
  }
18
16
  /**
19
- * Known installation paths for VS Code CLI
20
- */
17
+ * Known installation paths for VS Code CLI
18
+ */
21
19
  function getVSCodePaths() {
22
- const platform = process.platform;
23
- const home = process.env.HOME || "";
24
- if (platform === "darwin") {
25
- return [
26
- "/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code",
27
- "/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/bin/code-insiders",
28
- `${home}/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code`,
29
- `${home}/Downloads/Visual Studio Code.app/Contents/Resources/app/bin/code`,
30
- ];
31
- }
32
- if (platform === "linux") {
33
- return [
34
- "/usr/share/code/bin/code",
35
- "/usr/bin/code",
36
- "/snap/bin/code",
37
- "/usr/share/code-insiders/bin/code-insiders",
38
- ];
39
- }
40
- if (platform === "win32") {
41
- const localAppData = process.env.LOCALAPPDATA || "";
42
- const programFiles = process.env.PROGRAMFILES || "C:\\Program Files";
43
- return [
44
- `${localAppData}\\Programs\\Microsoft VS Code\\bin\\code.cmd`,
45
- `${programFiles}\\Microsoft VS Code\\bin\\code.cmd`,
46
- `${localAppData}\\Programs\\Microsoft VS Code Insiders\\bin\\code-insiders.cmd`,
47
- ];
48
- }
49
- return [];
20
+ const platform = process.platform;
21
+ const home = process.env.HOME || "";
22
+ if (platform === "darwin") return [
23
+ "/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code",
24
+ "/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/bin/code-insiders",
25
+ `${home}/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code`,
26
+ `${home}/Downloads/Visual Studio Code.app/Contents/Resources/app/bin/code`
27
+ ];
28
+ if (platform === "linux") return [
29
+ "/usr/share/code/bin/code",
30
+ "/usr/bin/code",
31
+ "/snap/bin/code",
32
+ "/usr/share/code-insiders/bin/code-insiders"
33
+ ];
34
+ if (platform === "win32") {
35
+ const localAppData = process.env.LOCALAPPDATA || "";
36
+ const programFiles = process.env.PROGRAMFILES || "C:\\Program Files";
37
+ return [
38
+ `${localAppData}\\Programs\\Microsoft VS Code\\bin\\code.cmd`,
39
+ `${programFiles}\\Microsoft VS Code\\bin\\code.cmd`,
40
+ `${localAppData}\\Programs\\Microsoft VS Code Insiders\\bin\\code-insiders.cmd`
41
+ ];
42
+ }
43
+ return [];
50
44
  }
51
45
  /**
52
- * Known installation paths for Cursor CLI
53
- */
46
+ * Known installation paths for Cursor CLI
47
+ */
54
48
  function getCursorPaths() {
55
- const platform = process.platform;
56
- const home = process.env.HOME || "";
57
- if (platform === "darwin") {
58
- return [
59
- "/Applications/Cursor.app/Contents/Resources/app/bin/cursor",
60
- `${home}/Applications/Cursor.app/Contents/Resources/app/bin/cursor`,
61
- `${home}/Downloads/Cursor.app/Contents/Resources/app/bin/cursor`,
62
- ];
63
- }
64
- if (platform === "linux") {
65
- return [
66
- "/usr/share/cursor/bin/cursor",
67
- "/usr/bin/cursor",
68
- `${home}/.local/bin/cursor`,
69
- "/opt/cursor/bin/cursor",
70
- ];
71
- }
72
- if (platform === "win32") {
73
- const localAppData = process.env.LOCALAPPDATA || "";
74
- const programFiles = process.env.PROGRAMFILES || "C:\\Program Files";
75
- return [
76
- `${localAppData}\\Programs\\Cursor\\resources\\app\\bin\\cursor.cmd`,
77
- `${localAppData}\\cursor\\Cursor.exe`,
78
- `${programFiles}\\Cursor\\resources\\app\\bin\\cursor.cmd`,
79
- ];
80
- }
81
- return [];
49
+ const platform = process.platform;
50
+ const home = process.env.HOME || "";
51
+ if (platform === "darwin") return [
52
+ "/Applications/Cursor.app/Contents/Resources/app/bin/cursor",
53
+ `${home}/Applications/Cursor.app/Contents/Resources/app/bin/cursor`,
54
+ `${home}/Downloads/Cursor.app/Contents/Resources/app/bin/cursor`
55
+ ];
56
+ if (platform === "linux") return [
57
+ "/usr/share/cursor/bin/cursor",
58
+ "/usr/bin/cursor",
59
+ `${home}/.local/bin/cursor`,
60
+ "/opt/cursor/bin/cursor"
61
+ ];
62
+ if (platform === "win32") {
63
+ const localAppData = process.env.LOCALAPPDATA || "";
64
+ const programFiles = process.env.PROGRAMFILES || "C:\\Program Files";
65
+ return [
66
+ `${localAppData}\\Programs\\Cursor\\resources\\app\\bin\\cursor.cmd`,
67
+ `${localAppData}\\cursor\\Cursor.exe`,
68
+ `${programFiles}\\Cursor\\resources\\app\\bin\\cursor.cmd`
69
+ ];
70
+ }
71
+ return [];
82
72
  }
83
73
  /**
84
- * Finds the CLI command for an editor by checking known installation paths
85
- * On macOS, also uses mdfind to locate the app if standard paths fail
86
- * Falls back to the simple command name if no full path is found (in case it's in PATH)
87
- */
88
- export async function findEditorCommand(editor) {
89
- let paths;
90
- let fallbackCommand;
91
- let bundleId = null;
92
- if (editor === "VS Code") {
93
- paths = getVSCodePaths();
94
- fallbackCommand = "code";
95
- bundleId = "com.microsoft.VSCode";
96
- }
97
- else if (editor === "Cursor") {
98
- paths = getCursorPaths();
99
- fallbackCommand = "cursor";
100
- bundleId = "com.todesktop.230313mzl4w4u92";
101
- }
102
- else {
103
- return null;
104
- }
105
- for (const path of paths) {
106
- if (existsSync(path)) {
107
- return path;
108
- }
109
- }
110
- // On macOS, try mdfind to locate the app dynamically
111
- if (process.platform === "darwin" && bundleId) {
112
- const appPath = await findAppWithMdfind(bundleId);
113
- if (appPath) {
114
- const cliPath = `${appPath}/Contents/Resources/app/bin/${fallbackCommand}`;
115
- if (existsSync(cliPath)) {
116
- return cliPath;
117
- }
118
- }
119
- }
120
- return fallbackCommand;
74
+ * Finds the CLI command for an editor by checking known installation paths
75
+ * On macOS, also uses mdfind to locate the app if standard paths fail
76
+ * Falls back to the simple command name if no full path is found (in case it's in PATH)
77
+ */
78
+ async function findEditorCommand(editor) {
79
+ let paths;
80
+ let fallbackCommand;
81
+ let bundleId = null;
82
+ if (editor === "VS Code") {
83
+ paths = getVSCodePaths();
84
+ fallbackCommand = "code";
85
+ bundleId = "com.microsoft.VSCode";
86
+ } else if (editor === "Cursor") {
87
+ paths = getCursorPaths();
88
+ fallbackCommand = "cursor";
89
+ bundleId = "com.todesktop.230313mzl4w4u92";
90
+ } else return null;
91
+ for (const path of paths) if (existsSync(path)) return path;
92
+ if (process.platform === "darwin" && bundleId) {
93
+ const appPath = await findAppWithMdfind(bundleId);
94
+ if (appPath) {
95
+ const cliPath = `${appPath}/Contents/Resources/app/bin/${fallbackCommand}`;
96
+ if (existsSync(cliPath)) return cliPath;
97
+ }
98
+ }
99
+ return fallbackCommand;
121
100
  }
122
101
  /**
123
- * Checks if the extension is installed by querying the editor's extension list
124
- */
125
- export async function isExtensionInstalled(editor) {
126
- const command = await findEditorCommand(editor);
127
- if (!command) {
128
- return false;
129
- }
130
- try {
131
- const result = await execa(command, ["--list-extensions"], {
132
- timeout: 5000,
133
- });
134
- return result.stdout.includes(NEON_EXTENSION_ID);
135
- }
136
- catch {
137
- return false;
138
- }
102
+ * Checks if the extension is installed by querying the editor's extension list
103
+ */
104
+ async function isExtensionInstalled(editor) {
105
+ const command = await findEditorCommand(editor);
106
+ if (!command) return false;
107
+ try {
108
+ return (await execa(command, ["--list-extensions"], { timeout: 5e3 })).stdout.includes(NEON_EXTENSION_ID);
109
+ } catch {
110
+ return false;
111
+ }
139
112
  }
140
113
  /**
141
- * Installs the Neon Local Connect extension for VS Code or Cursor.
142
- *
143
- * Strategy:
144
- * 1. Try `--install-extension <id>` directly (uses the editor's configured marketplace)
145
- * 2. If that fails, download .vsix (from proxy or Open VSX) and install locally
146
- * 3. Set NEON_VSX_GALLERY_URL to use a corporate proxy for the download
147
- */
148
- export async function installExtension(editor) {
149
- const command = await findEditorCommand(editor);
150
- if (!command) {
151
- return false;
152
- }
153
- // Try direct marketplace install first
154
- try {
155
- await execa(command, ["--install-extension", NEON_EXTENSION_ID], {
156
- stdio: "pipe",
157
- timeout: 60000,
158
- });
159
- return true;
160
- }
161
- catch {
162
- // Fall through to VSIX download
163
- }
164
- // Download .vsix and install locally
165
- const vsixPath = await downloadVsix();
166
- if (!vsixPath) {
167
- return false;
168
- }
169
- try {
170
- await execa(command, ["--install-extension", vsixPath], {
171
- stdio: "pipe",
172
- timeout: 60000,
173
- });
174
- return true;
175
- }
176
- catch {
177
- return false;
178
- }
179
- finally {
180
- try {
181
- await unlink(vsixPath);
182
- }
183
- catch { }
184
- }
114
+ * Installs the Neon Local Connect extension for VS Code or Cursor.
115
+ *
116
+ * Strategy:
117
+ * 1. Try `--install-extension <id>` directly (uses the editor's configured marketplace)
118
+ * 2. If that fails, download .vsix (from proxy or Open VSX) and install locally
119
+ * 3. Set NEON_VSX_GALLERY_URL to use a corporate proxy for the download
120
+ */
121
+ async function installExtension(editor) {
122
+ const command = await findEditorCommand(editor);
123
+ if (!command) return false;
124
+ try {
125
+ await execa(command, ["--install-extension", NEON_EXTENSION_ID], {
126
+ stdio: "pipe",
127
+ timeout: 6e4
128
+ });
129
+ return true;
130
+ } catch {}
131
+ const vsixPath = await downloadVsix();
132
+ if (!vsixPath) return false;
133
+ try {
134
+ await execa(command, ["--install-extension", vsixPath], {
135
+ stdio: "pipe",
136
+ timeout: 6e4
137
+ });
138
+ return true;
139
+ } catch {
140
+ return false;
141
+ } finally {
142
+ try {
143
+ await unlink(vsixPath);
144
+ } catch {}
145
+ }
185
146
  }
186
147
  /**
187
- * Returns the editor types that should use extension installation (vs MCP)
188
- */
189
- export function usesExtension(editor) {
190
- return editor === "VS Code" || editor === "Cursor";
148
+ * Returns the editor types that should use extension installation (vs MCP)
149
+ */
150
+ function usesExtension(editor) {
151
+ return editor === "VS Code" || editor === "Cursor";
191
152
  }
153
+ //#endregion
154
+ export { findEditorCommand, installExtension, isExtensionInstalled, usesExtension };