neonctl 2.28.0 → 2.29.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 (135) hide show
  1. package/README.md +71 -71
  2. package/dist/analytics.js +35 -33
  3. package/dist/api.js +34 -34
  4. package/dist/auth.js +50 -44
  5. package/dist/cli.js +2 -2
  6. package/dist/commands/auth.js +58 -52
  7. package/dist/commands/bootstrap.js +115 -157
  8. package/dist/commands/branches.js +154 -147
  9. package/dist/commands/bucket.js +124 -118
  10. package/dist/commands/checkout.js +49 -49
  11. package/dist/commands/config.js +212 -88
  12. package/dist/commands/connection_string.js +62 -62
  13. package/dist/commands/data_api.js +96 -96
  14. package/dist/commands/databases.js +23 -23
  15. package/dist/commands/deploy.js +12 -12
  16. package/dist/commands/dev.js +114 -114
  17. package/dist/commands/env.js +43 -43
  18. package/dist/commands/functions.js +97 -98
  19. package/dist/commands/index.js +26 -26
  20. package/dist/commands/init.js +23 -22
  21. package/dist/commands/ip_allow.js +29 -29
  22. package/dist/commands/link.js +223 -166
  23. package/dist/commands/neon_auth.js +381 -363
  24. package/dist/commands/operations.js +11 -11
  25. package/dist/commands/orgs.js +8 -8
  26. package/dist/commands/projects.js +101 -99
  27. package/dist/commands/psql.js +31 -31
  28. package/dist/commands/roles.js +21 -21
  29. package/dist/commands/schema_diff.js +23 -23
  30. package/dist/commands/set_context.js +17 -17
  31. package/dist/commands/status.js +17 -17
  32. package/dist/commands/user.js +5 -5
  33. package/dist/commands/vpc_endpoints.js +50 -50
  34. package/dist/config.js +7 -7
  35. package/dist/config_format.js +5 -5
  36. package/dist/context.js +23 -16
  37. package/dist/current_branch_fast_path.js +6 -6
  38. package/dist/dev/env.js +34 -34
  39. package/dist/dev/functions.js +4 -4
  40. package/dist/dev/inputs.js +6 -6
  41. package/dist/dev/runtime.js +25 -25
  42. package/dist/env.js +14 -14
  43. package/dist/env_file.js +13 -13
  44. package/dist/errors.js +19 -19
  45. package/dist/functions_api.js +10 -10
  46. package/dist/help.js +15 -15
  47. package/dist/index.js +94 -92
  48. package/dist/log.js +2 -2
  49. package/dist/pkg.js +5 -5
  50. package/dist/psql/cli.js +4 -2
  51. package/dist/psql/command/cmd_cond.js +61 -61
  52. package/dist/psql/command/cmd_connect.js +159 -154
  53. package/dist/psql/command/cmd_copy.js +107 -97
  54. package/dist/psql/command/cmd_describe.js +368 -363
  55. package/dist/psql/command/cmd_format.js +276 -263
  56. package/dist/psql/command/cmd_io.js +269 -263
  57. package/dist/psql/command/cmd_lo.js +74 -66
  58. package/dist/psql/command/cmd_meta.js +148 -148
  59. package/dist/psql/command/cmd_misc.js +17 -17
  60. package/dist/psql/command/cmd_pipeline.js +142 -135
  61. package/dist/psql/command/cmd_restrict.js +25 -25
  62. package/dist/psql/command/cmd_show.js +183 -168
  63. package/dist/psql/command/dispatch.js +26 -26
  64. package/dist/psql/command/shared.js +14 -14
  65. package/dist/psql/complete/filenames.js +16 -16
  66. package/dist/psql/complete/index.js +4 -4
  67. package/dist/psql/complete/matcher.js +33 -32
  68. package/dist/psql/complete/psqlVars.js +173 -173
  69. package/dist/psql/complete/queries.js +5 -3
  70. package/dist/psql/complete/rules.js +900 -863
  71. package/dist/psql/core/common.js +136 -133
  72. package/dist/psql/core/help.js +343 -343
  73. package/dist/psql/core/mainloop.js +160 -153
  74. package/dist/psql/core/prompt.js +126 -123
  75. package/dist/psql/core/settings.js +111 -111
  76. package/dist/psql/core/sqlHelp.js +150 -150
  77. package/dist/psql/core/startup.js +211 -205
  78. package/dist/psql/core/syncVars.js +14 -14
  79. package/dist/psql/core/variables.js +24 -24
  80. package/dist/psql/describe/formatters.js +302 -289
  81. package/dist/psql/describe/processNamePattern.js +28 -28
  82. package/dist/psql/describe/queries.js +656 -651
  83. package/dist/psql/index.js +436 -411
  84. package/dist/psql/io/history.js +36 -36
  85. package/dist/psql/io/input.js +15 -15
  86. package/dist/psql/io/lineEditor/buffer.js +27 -25
  87. package/dist/psql/io/lineEditor/complete.js +15 -15
  88. package/dist/psql/io/lineEditor/filename.js +22 -22
  89. package/dist/psql/io/lineEditor/index.js +65 -62
  90. package/dist/psql/io/lineEditor/keymap.js +325 -318
  91. package/dist/psql/io/lineEditor/vt100.js +60 -60
  92. package/dist/psql/io/pgpass.js +18 -18
  93. package/dist/psql/io/pgservice.js +14 -14
  94. package/dist/psql/io/psqlrc.js +46 -46
  95. package/dist/psql/print/aligned.js +175 -166
  96. package/dist/psql/print/asciidoc.js +51 -51
  97. package/dist/psql/print/crosstab.js +34 -31
  98. package/dist/psql/print/csv.js +25 -22
  99. package/dist/psql/print/html.js +54 -54
  100. package/dist/psql/print/json.js +12 -12
  101. package/dist/psql/print/latex.js +118 -118
  102. package/dist/psql/print/pager.js +28 -26
  103. package/dist/psql/print/troff.js +48 -48
  104. package/dist/psql/print/unaligned.js +15 -14
  105. package/dist/psql/print/units.js +17 -17
  106. package/dist/psql/scanner/slash.js +48 -46
  107. package/dist/psql/scanner/sql.js +88 -84
  108. package/dist/psql/scanner/stringutils.js +21 -17
  109. package/dist/psql/types/index.js +7 -7
  110. package/dist/psql/types/scanner.js +8 -8
  111. package/dist/psql/wire/connection.js +341 -327
  112. package/dist/psql/wire/copy.js +7 -7
  113. package/dist/psql/wire/pipeline.js +26 -24
  114. package/dist/psql/wire/protocol.js +102 -102
  115. package/dist/psql/wire/sasl.js +62 -62
  116. package/dist/psql/wire/tls.js +79 -73
  117. package/dist/storage_api.js +15 -15
  118. package/dist/test_utils/fixtures.js +34 -31
  119. package/dist/test_utils/oauth_server.js +5 -5
  120. package/dist/utils/api_enums.js +13 -13
  121. package/dist/utils/branch_notice.js +5 -5
  122. package/dist/utils/branch_picker.js +26 -26
  123. package/dist/utils/compute_units.js +4 -4
  124. package/dist/utils/enrichers.js +20 -15
  125. package/dist/utils/esbuild.js +28 -28
  126. package/dist/utils/formats.js +1 -1
  127. package/dist/utils/middlewares.js +3 -3
  128. package/dist/utils/package_manager.js +68 -0
  129. package/dist/utils/point_in_time.js +12 -12
  130. package/dist/utils/psql.js +30 -30
  131. package/dist/utils/string.js +2 -2
  132. package/dist/utils/ui.js +9 -9
  133. package/dist/utils/zip.js +1 -1
  134. package/dist/writer.js +17 -17
  135. package/package.json +6 -7
@@ -31,7 +31,7 @@
31
31
  * `\restrict NAME` provided. A mismatch keeps the session in
32
32
  * restricted mode and returns an error.
33
33
  */
34
- import { writeErr } from './shared.js';
34
+ import { writeErr } from "./shared.js";
35
35
  /** Standard refusal message emitted when a gated command is invoked while
36
36
  * the session is in restricted mode. Public so callers and tests can match
37
37
  * against the exact string. */
@@ -48,19 +48,19 @@ export const RESTRICTED_REFUSAL_MESSAGE = (cmdName) => `\\${cmdName}: command is
48
48
  * registry level" and avoids touching cmd_copy.ts internals.
49
49
  */
50
50
  export const RESTRICTED_COMMANDS = new Set([
51
- '!', // shell escape
52
- 'cd', // change directory
53
- 'copy', // \copy — including \copy FROM PROGRAM
54
- 'setenv', // mutate process env
55
- 'w', // \w / \write — file write of query buffer
51
+ "!", // shell escape
52
+ "cd", // change directory
53
+ "copy", // \copy — including \copy FROM PROGRAM
54
+ "setenv", // mutate process env
55
+ "w", // \w / \write — file write of query buffer
56
56
  // `\o`/`\g`/`\gx` route through openWriter(), which spawns `sh -c <cmd>`
57
57
  // for a `|command` target (arbitrary shell exec) and writes the filesystem
58
58
  // for a FILE target; `\s FILE` writes history to disk. Block them by name
59
59
  // (review item #13). Plain query execution still works via `;`.
60
- 'o', // \o [FILE | |cmd]
61
- 'g', // \g [FILE | |cmd]
62
- 'gx', // \gx [FILE | |cmd]
63
- 's', // \s [FILE] — write command history
60
+ "o", // \o [FILE | |cmd]
61
+ "g", // \g [FILE | |cmd]
62
+ "gx", // \gx [FILE | |cmd]
63
+ "s", // \s [FILE] — write command history
64
64
  ]);
65
65
  /**
66
66
  * True iff the session is currently in restricted mode. Reads the
@@ -86,20 +86,20 @@ export const isCommandRestricted = (settings, primaryName) => isRestricted(setti
86
86
  * with an Assert; we surface it as a regular command error.
87
87
  */
88
88
  export const cmdRestrict = {
89
- name: 'restrict',
90
- helpKey: 'restrict',
89
+ name: "restrict",
90
+ helpKey: "restrict",
91
91
  run: (ctx) => {
92
- const arg = ctx.nextArg('normal');
92
+ const arg = ctx.nextArg("normal");
93
93
  if (arg === null || arg.length === 0) {
94
94
  writeErr(`\\${ctx.cmdName}: missing required argument\n`);
95
- return Promise.resolve({ status: 'error' });
95
+ return Promise.resolve({ status: "error" });
96
96
  }
97
97
  if (isRestricted(ctx.settings)) {
98
98
  writeErr(`\\${ctx.cmdName}: already in restricted mode\n`);
99
- return Promise.resolve({ status: 'error' });
99
+ return Promise.resolve({ status: "error" });
100
100
  }
101
101
  ctx.settings.restrictedKey = arg;
102
- return Promise.resolve({ status: 'ok' });
102
+ return Promise.resolve({ status: "ok" });
103
103
  },
104
104
  };
105
105
  /**
@@ -107,25 +107,25 @@ export const cmdRestrict = {
107
107
  * given to the original `\restrict`.
108
108
  */
109
109
  export const cmdUnrestrict = {
110
- name: 'unrestrict',
111
- helpKey: 'unrestrict',
110
+ name: "unrestrict",
111
+ helpKey: "unrestrict",
112
112
  run: (ctx) => {
113
- const arg = ctx.nextArg('normal');
113
+ const arg = ctx.nextArg("normal");
114
114
  if (arg === null || arg.length === 0) {
115
115
  writeErr(`\\${ctx.cmdName}: missing required argument\n`);
116
- return Promise.resolve({ status: 'error' });
116
+ return Promise.resolve({ status: "error" });
117
117
  }
118
118
  const current = restrictedName(ctx.settings);
119
119
  if (current === null) {
120
120
  writeErr(`\\${ctx.cmdName}: not currently in restricted mode\n`);
121
- return Promise.resolve({ status: 'error' });
121
+ return Promise.resolve({ status: "error" });
122
122
  }
123
123
  if (arg !== current) {
124
124
  writeErr(`\\${ctx.cmdName}: wrong key\n`);
125
- return Promise.resolve({ status: 'error' });
125
+ return Promise.resolve({ status: "error" });
126
126
  }
127
127
  ctx.settings.restrictedKey = null;
128
- return Promise.resolve({ status: 'ok' });
128
+ return Promise.resolve({ status: "ok" });
129
129
  },
130
130
  };
131
131
  /**
@@ -148,7 +148,7 @@ export const registerRestrictCommands = (registry) => {
148
148
  * call is a no-op. Must be called *after* all restricted commands have
149
149
  * been registered (so we see them via `registry.lookup`).
150
150
  */
151
- const WRAPPED_FLAG = Symbol.for('neonctl.psql.restrictWrapped');
151
+ const WRAPPED_FLAG = Symbol.for("neonctl.psql.restrictWrapped");
152
152
  export const wrapRestrictedCommands = (registry) => {
153
153
  for (const name of RESTRICTED_COMMANDS) {
154
154
  const spec = registry.lookup(name);
@@ -160,7 +160,7 @@ export const wrapRestrictedCommands = (registry) => {
160
160
  run: (ctx) => {
161
161
  if (isRestricted(ctx.settings)) {
162
162
  writeErr(RESTRICTED_REFUSAL_MESSAGE(ctx.cmdName));
163
- return Promise.resolve({ status: 'error' });
163
+ return Promise.resolve({ status: "error" });
164
164
  }
165
165
  return originalRun(ctx);
166
166
  },