neonctl 2.28.0 → 2.29.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.
- package/README.md +2 -2
- package/dist/analytics.js +35 -33
- package/dist/api.js +34 -34
- package/dist/auth.js +50 -44
- package/dist/cli.js +2 -2
- package/dist/commands/auth.js +58 -52
- package/dist/commands/bootstrap.js +115 -157
- package/dist/commands/branches.js +154 -147
- package/dist/commands/bucket.js +124 -118
- package/dist/commands/checkout.js +49 -49
- package/dist/commands/config.js +212 -88
- package/dist/commands/connection_string.js +62 -62
- package/dist/commands/data_api.js +96 -96
- package/dist/commands/databases.js +23 -23
- package/dist/commands/deploy.js +12 -12
- package/dist/commands/dev.js +114 -114
- package/dist/commands/env.js +43 -43
- package/dist/commands/functions.js +97 -98
- package/dist/commands/index.js +26 -26
- package/dist/commands/init.js +23 -22
- package/dist/commands/ip_allow.js +29 -29
- package/dist/commands/link.js +223 -166
- package/dist/commands/neon_auth.js +381 -363
- package/dist/commands/operations.js +11 -11
- package/dist/commands/orgs.js +8 -8
- package/dist/commands/projects.js +101 -99
- package/dist/commands/psql.js +31 -31
- package/dist/commands/roles.js +21 -21
- package/dist/commands/schema_diff.js +23 -23
- package/dist/commands/set_context.js +17 -17
- package/dist/commands/status.js +17 -17
- package/dist/commands/user.js +5 -5
- package/dist/commands/vpc_endpoints.js +50 -50
- package/dist/config.js +7 -7
- package/dist/config_format.js +5 -5
- package/dist/context.js +23 -16
- package/dist/current_branch_fast_path.js +6 -6
- package/dist/dev/env.js +33 -33
- package/dist/dev/functions.js +4 -4
- package/dist/dev/inputs.js +6 -6
- package/dist/dev/runtime.js +25 -25
- package/dist/env.js +14 -14
- package/dist/env_file.js +13 -13
- package/dist/errors.js +19 -19
- package/dist/functions_api.js +10 -10
- package/dist/help.js +15 -15
- package/dist/index.js +94 -92
- package/dist/log.js +2 -2
- package/dist/pkg.js +5 -5
- package/dist/psql/cli.js +4 -2
- package/dist/psql/command/cmd_cond.js +61 -61
- package/dist/psql/command/cmd_connect.js +159 -154
- package/dist/psql/command/cmd_copy.js +107 -97
- package/dist/psql/command/cmd_describe.js +368 -363
- package/dist/psql/command/cmd_format.js +276 -263
- package/dist/psql/command/cmd_io.js +269 -263
- package/dist/psql/command/cmd_lo.js +74 -66
- package/dist/psql/command/cmd_meta.js +148 -148
- package/dist/psql/command/cmd_misc.js +17 -17
- package/dist/psql/command/cmd_pipeline.js +142 -135
- package/dist/psql/command/cmd_restrict.js +25 -25
- package/dist/psql/command/cmd_show.js +183 -168
- package/dist/psql/command/dispatch.js +26 -26
- package/dist/psql/command/shared.js +14 -14
- package/dist/psql/complete/filenames.js +16 -16
- package/dist/psql/complete/index.js +4 -4
- package/dist/psql/complete/matcher.js +33 -32
- package/dist/psql/complete/psqlVars.js +173 -173
- package/dist/psql/complete/queries.js +5 -3
- package/dist/psql/complete/rules.js +900 -863
- package/dist/psql/core/common.js +136 -133
- package/dist/psql/core/help.js +343 -343
- package/dist/psql/core/mainloop.js +160 -153
- package/dist/psql/core/prompt.js +126 -123
- package/dist/psql/core/settings.js +111 -111
- package/dist/psql/core/sqlHelp.js +150 -150
- package/dist/psql/core/startup.js +211 -205
- package/dist/psql/core/syncVars.js +14 -14
- package/dist/psql/core/variables.js +24 -24
- package/dist/psql/describe/formatters.js +302 -289
- package/dist/psql/describe/processNamePattern.js +28 -28
- package/dist/psql/describe/queries.js +656 -651
- package/dist/psql/index.js +436 -411
- package/dist/psql/io/history.js +36 -36
- package/dist/psql/io/input.js +15 -15
- package/dist/psql/io/lineEditor/buffer.js +27 -25
- package/dist/psql/io/lineEditor/complete.js +15 -15
- package/dist/psql/io/lineEditor/filename.js +22 -22
- package/dist/psql/io/lineEditor/index.js +65 -62
- package/dist/psql/io/lineEditor/keymap.js +325 -318
- package/dist/psql/io/lineEditor/vt100.js +60 -60
- package/dist/psql/io/pgpass.js +18 -18
- package/dist/psql/io/pgservice.js +14 -14
- package/dist/psql/io/psqlrc.js +46 -46
- package/dist/psql/print/aligned.js +175 -166
- package/dist/psql/print/asciidoc.js +51 -51
- package/dist/psql/print/crosstab.js +34 -31
- package/dist/psql/print/csv.js +25 -22
- package/dist/psql/print/html.js +54 -54
- package/dist/psql/print/json.js +12 -12
- package/dist/psql/print/latex.js +118 -118
- package/dist/psql/print/pager.js +28 -26
- package/dist/psql/print/troff.js +48 -48
- package/dist/psql/print/unaligned.js +15 -14
- package/dist/psql/print/units.js +17 -17
- package/dist/psql/scanner/slash.js +48 -46
- package/dist/psql/scanner/sql.js +88 -84
- package/dist/psql/scanner/stringutils.js +21 -17
- package/dist/psql/types/index.js +7 -7
- package/dist/psql/types/scanner.js +8 -8
- package/dist/psql/wire/connection.js +341 -327
- package/dist/psql/wire/copy.js +7 -7
- package/dist/psql/wire/pipeline.js +26 -24
- package/dist/psql/wire/protocol.js +102 -102
- package/dist/psql/wire/sasl.js +62 -62
- package/dist/psql/wire/tls.js +79 -73
- package/dist/storage_api.js +15 -15
- package/dist/test_utils/fixtures.js +34 -31
- package/dist/test_utils/oauth_server.js +5 -5
- package/dist/utils/api_enums.js +13 -13
- package/dist/utils/branch_notice.js +5 -5
- package/dist/utils/branch_picker.js +26 -26
- package/dist/utils/compute_units.js +4 -4
- package/dist/utils/enrichers.js +20 -15
- package/dist/utils/esbuild.js +28 -28
- package/dist/utils/formats.js +1 -1
- package/dist/utils/middlewares.js +3 -3
- package/dist/utils/package_manager.js +68 -0
- package/dist/utils/point_in_time.js +12 -12
- package/dist/utils/psql.js +30 -30
- package/dist/utils/string.js +2 -2
- package/dist/utils/ui.js +9 -9
- package/dist/utils/zip.js +1 -1
- package/dist/writer.js +17 -17
- 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
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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:
|
|
90
|
-
helpKey:
|
|
89
|
+
name: "restrict",
|
|
90
|
+
helpKey: "restrict",
|
|
91
91
|
run: (ctx) => {
|
|
92
|
-
const arg = ctx.nextArg(
|
|
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:
|
|
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:
|
|
99
|
+
return Promise.resolve({ status: "error" });
|
|
100
100
|
}
|
|
101
101
|
ctx.settings.restrictedKey = arg;
|
|
102
|
-
return Promise.resolve({ status:
|
|
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:
|
|
111
|
-
helpKey:
|
|
110
|
+
name: "unrestrict",
|
|
111
|
+
helpKey: "unrestrict",
|
|
112
112
|
run: (ctx) => {
|
|
113
|
-
const arg = ctx.nextArg(
|
|
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:
|
|
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:
|
|
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:
|
|
125
|
+
return Promise.resolve({ status: "error" });
|
|
126
126
|
}
|
|
127
127
|
ctx.settings.restrictedKey = null;
|
|
128
|
-
return Promise.resolve({ status:
|
|
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(
|
|
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:
|
|
163
|
+
return Promise.resolve({ status: "error" });
|
|
164
164
|
}
|
|
165
165
|
return originalRun(ctx);
|
|
166
166
|
},
|