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
@@ -1,40 +1,44 @@
1
+ import { t as __exportAll } from "../_chunks/rolldown-runtime-D7D4PA-g.js";
1
2
  import { fillSingleProject } from "../utils/enrichers.js";
2
3
  import { status } from "./config.js";
4
+ //#region src/commands/status.ts
5
+ var status_exports = /* @__PURE__ */ __exportAll({
6
+ builder: () => builder,
7
+ command: () => command,
8
+ describe: () => describe,
9
+ handler: () => handler
10
+ });
3
11
  /**
4
- * `neon status` is a top-level alias for `neon config status` — the most-reached-for
5
- * config subcommand. It mirrors that command's options (including `--current-branch`,
6
- * the offline branch probe) and delegates to the same `status` handler.
7
- *
8
- * Because it has a handler but no subcommands, `status` must also be listed in
9
- * `NO_SUBCOMMANDS_VERBS` (see index.ts) so the help-fallback middleware doesn't
10
- * intercept a bare `neon status`.
11
- */
12
- export const command = "status";
13
- export const describe = "Show the branch's live Neon state (alias of `config status`)";
14
- export const builder = (argv) => argv
15
- .usage("$0 status [options]")
16
- .options({
17
- "project-id": {
18
- describe: "Project ID",
19
- type: "string",
20
- },
21
- branch: {
22
- describe: "Branch ID or name",
23
- type: "string",
24
- },
25
- "config-json": {
26
- describe: "Print only the branch's live config as neon.ts-shaped JSON " +
27
- "(services + branch tuning + preview), to stdout. Useful for " +
28
- "scripting or copying into a neon.ts.",
29
- type: "boolean",
30
- default: false,
31
- },
32
- "current-branch": {
33
- describe: "Print only the linked branch name from the local .neon file " +
34
- "(no network). Exits non-zero when no branch is pinned.",
35
- type: "boolean",
36
- default: false,
37
- },
38
- })
39
- .middleware(fillSingleProject);
40
- export const handler = (args) => status(args);
12
+ * `neon status` is a top-level alias for `neon config status` — the most-reached-for
13
+ * config subcommand. It mirrors that command's options (including `--current-branch`,
14
+ * the offline branch probe) and delegates to the same `status` handler.
15
+ *
16
+ * Because it has a handler but no subcommands, `status` must also be listed in
17
+ * `NO_SUBCOMMANDS_VERBS` (see index.ts) so the help-fallback middleware doesn't
18
+ * intercept a bare `neon status`.
19
+ */
20
+ const command = "status";
21
+ const describe = "Show the branch's live Neon state (alias of `config status`)";
22
+ const builder = (argv) => argv.usage("$0 status [options]").options({
23
+ "project-id": {
24
+ describe: "Project ID",
25
+ type: "string"
26
+ },
27
+ branch: {
28
+ describe: "Branch ID or name",
29
+ type: "string"
30
+ },
31
+ "config-json": {
32
+ describe: "Print only the branch's live config as neon.ts-shaped JSON (services + branch tuning + preview), to stdout. Useful for scripting or copying into a neon.ts.",
33
+ type: "boolean",
34
+ default: false
35
+ },
36
+ "current-branch": {
37
+ describe: "Print only the linked branch name from the local .neon file (no network). Exits non-zero when no branch is pinned.",
38
+ type: "boolean",
39
+ default: false
40
+ }
41
+ }).middleware(fillSingleProject);
42
+ const handler = (args) => status(args);
43
+ //#endregion
44
+ export { builder, command, describe, handler, status_exports as t };
@@ -1,15 +1,26 @@
1
+ import { t as __exportAll } from "../_chunks/rolldown-runtime-D7D4PA-g.js";
1
2
  import { writer } from "../writer.js";
2
- export const command = "me";
3
- export const describe = "Show current user";
4
- export const builder = (yargs) => yargs.option("context-file", {
5
- hidden: true,
3
+ //#region src/commands/user.ts
4
+ var user_exports = /* @__PURE__ */ __exportAll({
5
+ builder: () => builder,
6
+ command: () => "me",
7
+ describe: () => describe,
8
+ handler: () => handler
6
9
  });
7
- export const handler = async (args) => {
8
- await me(args);
10
+ const command = "me";
11
+ const describe = "Show current user";
12
+ const builder = (yargs) => yargs.option("context-file", { hidden: true });
13
+ const handler = async (args) => {
14
+ await me(args);
9
15
  };
10
16
  const me = async (props) => {
11
- const { data } = await props.apiClient.getCurrentUserInfo();
12
- writer(props).end(data, {
13
- fields: ["login", "email", "name", "projects_limit"],
14
- });
17
+ const { data } = await props.apiClient.getCurrentUserInfo();
18
+ writer(props).end(data, { fields: [
19
+ "login",
20
+ "email",
21
+ "name",
22
+ "projects_limit"
23
+ ] });
15
24
  };
25
+ //#endregion
26
+ export { builder, command, describe, handler, user_exports as t };
@@ -1,134 +1,106 @@
1
+ import { t as __exportAll } from "../_chunks/rolldown-runtime-D7D4PA-g.js";
1
2
  import { log } from "../log.js";
2
- import { fillSingleOrg, fillSingleProject } from "../utils/enrichers.js";
3
3
  import { writer } from "../writer.js";
4
+ import { fillSingleOrg, fillSingleProject } from "../utils/enrichers.js";
4
5
  import { REGIONS } from "./projects.js";
6
+ //#region src/commands/vpc_endpoints.ts
7
+ var vpc_endpoints_exports = /* @__PURE__ */ __exportAll({
8
+ builder: () => builder,
9
+ command: () => "vpc",
10
+ describe: () => describe
11
+ });
5
12
  const VPC_ENDPOINT_FIELDS = ["vpc_endpoint_id", "label"];
6
13
  const VPC_ENDPOINT_DETAILS_FIELDS = [
7
- "vpc_endpoint_id",
8
- "label",
9
- "state",
10
- "num_restricted_projects",
11
- "example_restricted_projects",
14
+ "vpc_endpoint_id",
15
+ "label",
16
+ "state",
17
+ "num_restricted_projects",
18
+ "example_restricted_projects"
12
19
  ];
13
- export const command = "vpc";
14
- export const describe = "Manage VPC endpoints and project VPC restrictions";
15
- export const builder = (argv) => {
16
- return argv
17
- .usage("$0 vpc <sub-command> [options]")
18
- .command("endpoint", "Manage VPC endpoints.\n" +
19
- "See: https://neon.tech/docs/guides/neon-private-networking\n" +
20
- "After adding an endpoint to an organization, client connections will be accepted\n" +
21
- "from the corresponding VPC for all projects in the organization, unless overridden\n" +
22
- "by a project-level VPC endpoint restriction.", (yargs) => {
23
- return yargs
24
- .options({
25
- "org-id": {
26
- describe: "Organization ID",
27
- type: "string",
28
- },
29
- "region-id": {
30
- describe: `The region ID. Possible values: ${REGIONS.join(", ")}`,
31
- type: "string",
32
- demandOption: true,
33
- },
34
- })
35
- .middleware(fillSingleOrg)
36
- .command("list", "List configured VPC endpoints for this organization.", (yargs) => yargs, async (args) => {
37
- await listOrg(args);
38
- })
39
- .command({
40
- command: "assign <id>",
41
- aliases: ["update <id>", "add <id>"],
42
- describe: "Add or update a VPC endpoint for this organization.\n" +
43
- "Note: Azure regions are not yet supported.",
44
- builder: (yargs) => yargs.options({
45
- label: {
46
- describe: "An optional descriptive label for the VPC endpoint",
47
- type: "string",
48
- },
49
- }),
50
- handler: async (args) => {
51
- await assignOrg(args);
52
- },
53
- })
54
- .command("remove <id>", "Remove a VPC endpoint from this organization.", (yargs) => yargs, async (args) => {
55
- await removeOrg(args);
56
- })
57
- .command("status <id>", "Get the status of a VPC endpoint for this organization.", (yargs) => yargs, async (args) => {
58
- await statusOrg(args);
59
- });
60
- })
61
- .command("project", "Manage project-level VPC endpoint restrictions.\n" +
62
- "By default, connections are accepted from any VPC configured at the organization level.\n" +
63
- "A project-level VPC endpoint restriction can be used to restrict connections to a specific VPC.", (yargs) => {
64
- return yargs
65
- .options({
66
- "project-id": {
67
- describe: "Project ID",
68
- type: "string",
69
- },
70
- })
71
- .middleware(fillSingleProject)
72
- .command("list", "List VPC endpoint restrictions for this project.", (yargs) => yargs, async (args) => {
73
- await listProject(args);
74
- })
75
- .command({
76
- command: "restrict <id>",
77
- aliases: ["update <id>"],
78
- describe: "Configure or update a VPC endpoint restriction for this project.",
79
- builder: (yargs) => yargs.options({
80
- label: {
81
- describe: "An optional descriptive label for the VPC endpoint restriction",
82
- type: "string",
83
- },
84
- }),
85
- handler: async (args) => {
86
- await assignProject(args);
87
- },
88
- })
89
- .command("remove <id>", "Remove a VPC endpoint restriction from this project.", (yargs) => yargs, async (args) => {
90
- await removeProject(args);
91
- });
92
- });
20
+ const command = "vpc";
21
+ const describe = "Manage VPC endpoints and project VPC restrictions";
22
+ const builder = (argv) => {
23
+ return argv.usage("$0 vpc <sub-command> [options]").command("endpoint", "Manage VPC endpoints.\nSee: https://neon.tech/docs/guides/neon-private-networking\nAfter adding an endpoint to an organization, client connections will be accepted\nfrom the corresponding VPC for all projects in the organization, unless overridden\nby a project-level VPC endpoint restriction.", (yargs) => {
24
+ return yargs.options({
25
+ "org-id": {
26
+ describe: "Organization ID",
27
+ type: "string"
28
+ },
29
+ "region-id": {
30
+ describe: `The region ID. Possible values: ${REGIONS.join(", ")}`,
31
+ type: "string",
32
+ demandOption: true
33
+ }
34
+ }).middleware(fillSingleOrg).command("list", "List configured VPC endpoints for this organization.", (yargs) => yargs, async (args) => {
35
+ await listOrg(args);
36
+ }).command({
37
+ command: "assign <id>",
38
+ aliases: ["update <id>", "add <id>"],
39
+ describe: "Add or update a VPC endpoint for this organization.\nNote: Azure regions are not yet supported.",
40
+ builder: (yargs) => yargs.options({ label: {
41
+ describe: "An optional descriptive label for the VPC endpoint",
42
+ type: "string"
43
+ } }),
44
+ handler: async (args) => {
45
+ await assignOrg(args);
46
+ }
47
+ }).command("remove <id>", "Remove a VPC endpoint from this organization.", (yargs) => yargs, async (args) => {
48
+ await removeOrg(args);
49
+ }).command("status <id>", "Get the status of a VPC endpoint for this organization.", (yargs) => yargs, async (args) => {
50
+ await statusOrg(args);
51
+ });
52
+ }).command("project", "Manage project-level VPC endpoint restrictions.\nBy default, connections are accepted from any VPC configured at the organization level.\nA project-level VPC endpoint restriction can be used to restrict connections to a specific VPC.", (yargs) => {
53
+ return yargs.options({ "project-id": {
54
+ describe: "Project ID",
55
+ type: "string"
56
+ } }).middleware(fillSingleProject).command("list", "List VPC endpoint restrictions for this project.", (yargs) => yargs, async (args) => {
57
+ await listProject(args);
58
+ }).command({
59
+ command: "restrict <id>",
60
+ aliases: ["update <id>"],
61
+ describe: "Configure or update a VPC endpoint restriction for this project.",
62
+ builder: (yargs) => yargs.options({ label: {
63
+ describe: "An optional descriptive label for the VPC endpoint restriction",
64
+ type: "string"
65
+ } }),
66
+ handler: async (args) => {
67
+ await assignProject(args);
68
+ }
69
+ }).command("remove <id>", "Remove a VPC endpoint restriction from this project.", (yargs) => yargs, async (args) => {
70
+ await removeProject(args);
71
+ });
72
+ });
93
73
  };
94
74
  const listOrg = async (props) => {
95
- const { data } = await props.apiClient.listOrganizationVpcEndpoints(props.orgId, props.regionId);
96
- writer(props).end(data.endpoints, {
97
- fields: VPC_ENDPOINT_FIELDS,
98
- });
75
+ const { data } = await props.apiClient.listOrganizationVpcEndpoints(props.orgId, props.regionId);
76
+ writer(props).end(data.endpoints, { fields: VPC_ENDPOINT_FIELDS });
99
77
  };
100
78
  const assignOrg = async (props) => {
101
- const vpcEndpointAssignment = {
102
- label: props.label || "",
103
- };
104
- const { data } = await props.apiClient.assignOrganizationVpcEndpoint(props.orgId, props.regionId, props.id, vpcEndpointAssignment);
105
- writer(props).end(data, { fields: [] });
106
- if (props.regionId.startsWith("azure")) {
107
- log.info("VPC endpoint configuration is not supported for Azure regions");
108
- }
79
+ const vpcEndpointAssignment = { label: props.label || "" };
80
+ const { data } = await props.apiClient.assignOrganizationVpcEndpoint(props.orgId, props.regionId, props.id, vpcEndpointAssignment);
81
+ writer(props).end(data, { fields: [] });
82
+ if (props.regionId.startsWith("azure")) log.info("VPC endpoint configuration is not supported for Azure regions");
109
83
  };
110
84
  const removeOrg = async (props) => {
111
- const { data } = await props.apiClient.deleteOrganizationVpcEndpoint(props.orgId, props.regionId, props.id);
112
- writer(props).end(data, { fields: [] });
85
+ const { data } = await props.apiClient.deleteOrganizationVpcEndpoint(props.orgId, props.regionId, props.id);
86
+ writer(props).end(data, { fields: [] });
113
87
  };
114
88
  const statusOrg = async (props) => {
115
- const { data } = await props.apiClient.getOrganizationVpcEndpointDetails(props.orgId, props.regionId, props.id);
116
- writer(props).end(data, { fields: VPC_ENDPOINT_DETAILS_FIELDS });
89
+ const { data } = await props.apiClient.getOrganizationVpcEndpointDetails(props.orgId, props.regionId, props.id);
90
+ writer(props).end(data, { fields: VPC_ENDPOINT_DETAILS_FIELDS });
117
91
  };
118
92
  const listProject = async (props) => {
119
- const { data } = await props.apiClient.listProjectVpcEndpoints(props.projectId);
120
- writer(props).end(data.endpoints, {
121
- fields: VPC_ENDPOINT_FIELDS,
122
- });
93
+ const { data } = await props.apiClient.listProjectVpcEndpoints(props.projectId);
94
+ writer(props).end(data.endpoints, { fields: VPC_ENDPOINT_FIELDS });
123
95
  };
124
96
  const assignProject = async (props) => {
125
- const vpcEndpointAssignment = {
126
- label: props.label || "",
127
- };
128
- const { data } = await props.apiClient.assignProjectVpcEndpoint(props.projectId, props.id, vpcEndpointAssignment);
129
- writer(props).end(data, { fields: [] });
97
+ const vpcEndpointAssignment = { label: props.label || "" };
98
+ const { data } = await props.apiClient.assignProjectVpcEndpoint(props.projectId, props.id, vpcEndpointAssignment);
99
+ writer(props).end(data, { fields: [] });
130
100
  };
131
101
  const removeProject = async (props) => {
132
- const { data } = await props.apiClient.deleteProjectVpcEndpoint(props.projectId, props.id);
133
- writer(props).end(data, { fields: [] });
102
+ const { data } = await props.apiClient.deleteProjectVpcEndpoint(props.projectId, props.id);
103
+ writer(props).end(data, { fields: [] });
134
104
  };
105
+ //#endregion
106
+ export { builder, command, describe, vpc_endpoints_exports as t };
package/dist/config.js CHANGED
@@ -1,8 +1,9 @@
1
- import { existsSync, mkdirSync } from "node:fs";
2
1
  import { isCi } from "./env.js";
3
- export { CREDENTIALS_FILE, credentialsPath, defaultDir, isInsideConfigDir, isOwnedCredentialPath, } from "./_shared/paths.js";
4
- export const ensureConfigDir = ({ "config-dir": configDirArg, "force-auth": forceAuth, }) => {
5
- if (!existsSync(configDirArg) && (!isCi() || forceAuth)) {
6
- mkdirSync(configDirArg, { recursive: true });
7
- }
2
+ import { a as isOwnedCredentialPath, i as isInsideConfigDir, n as credentialsPath, r as defaultDir, t as CREDENTIALS_FILE } from "./_chunks/paths-DMq0Lt7a.js";
3
+ import { existsSync, mkdirSync } from "node:fs";
4
+ //#region src/config.ts
5
+ const ensureConfigDir = ({ "config-dir": configDirArg, "force-auth": forceAuth }) => {
6
+ if (!existsSync(configDirArg) && (!isCi() || forceAuth)) mkdirSync(configDirArg, { recursive: true });
8
7
  };
8
+ //#endregion
9
+ export { CREDENTIALS_FILE, credentialsPath, defaultDir, ensureConfigDir, isInsideConfigDir, isOwnedCredentialPath };
@@ -1,72 +1,56 @@
1
+ //#region src/config_format.ts
1
2
  /**
2
- * Render a TTL in whole seconds back to the canonical `neon.ts` duration string (e.g.
3
- * `604800` -> `"7d"`), falling back to seconds when no clean unit boundary matches. Mirrors
4
- * the formatter `@neon/config` uses when it emits a TTL, so `config status` shows
5
- * the same value a user would write in `neon.ts`.
6
- */
7
- export const formatDurationSeconds = (totalSeconds) => {
8
- const units = [
9
- ["w", 7 * 24 * 60 * 60],
10
- ["d", 24 * 60 * 60],
11
- ["h", 60 * 60],
12
- ["m", 60],
13
- ];
14
- for (const [unit, perUnit] of units) {
15
- if (totalSeconds % perUnit === 0)
16
- return `${totalSeconds / perUnit}${unit}`;
17
- }
18
- return `${totalSeconds}s`;
3
+ * Render a TTL in whole seconds back to the canonical `neon.ts` duration string (e.g.
4
+ * `604800` -> `"7d"`), falling back to seconds when no clean unit boundary matches. Mirrors
5
+ * the formatter `@neon/config` uses when it emits a TTL, so `config status` shows
6
+ * the same value a user would write in `neon.ts`.
7
+ */
8
+ const formatDurationSeconds = (totalSeconds) => {
9
+ for (const [unit, perUnit] of [
10
+ ["w", 604800],
11
+ ["d", 86400],
12
+ ["h", 3600],
13
+ ["m", 60]
14
+ ]) if (totalSeconds % perUnit === 0) return `${totalSeconds / perUnit}${unit}`;
15
+ return `${totalSeconds}s`;
19
16
  };
20
17
  /**
21
- * Project a resolved branch config (plus the separately-pulled preview state, since
22
- * functions/buckets don't live on the closure) into a {@link NeonConfigView}.
23
- *
24
- * - Service toggles are surfaced as `true` only when enabled (disabled is the absence of
25
- * the key, exactly as in `neon.ts`).
26
- * - `ttlSeconds` is rendered back to a duration string (`7d`).
27
- * - The `branch` section is the JSON-able part of what would otherwise be the `branch`
28
- * closure: `parent` / `ttl` / `protected` / `postgres.computeSettings`.
29
- * - `branch` and `preview` are omitted entirely when they would be empty.
30
- */
31
- export const toNeonConfigView = (resolved, preview) => {
32
- const view = {};
33
- if (resolved.authEnabled)
34
- view.auth = true;
35
- if (resolved.dataApiEnabled)
36
- view.dataApi = true;
37
- const previewView = toPreviewView(preview);
38
- if (previewView)
39
- view.preview = previewView;
40
- const branch = {};
41
- if (resolved.parent !== undefined)
42
- branch.parent = resolved.parent;
43
- if (resolved.ttlSeconds !== undefined)
44
- branch.ttl = formatDurationSeconds(resolved.ttlSeconds);
45
- if (resolved.protected !== undefined)
46
- branch.protected = resolved.protected;
47
- if (resolved.postgres?.computeSettings)
48
- branch.postgres = resolved.postgres;
49
- if (Object.keys(branch).length > 0)
50
- view.branch = branch;
51
- return view;
18
+ * Project a resolved branch config (plus the separately-pulled preview state, since
19
+ * functions/buckets don't live on the closure) into a {@link NeonConfigView}.
20
+ *
21
+ * - Service toggles are surfaced as `true` only when enabled (disabled is the absence of
22
+ * the key, exactly as in `neon.ts`).
23
+ * - `ttlSeconds` is rendered back to a duration string (`7d`).
24
+ * - The `branch` section is the JSON-able part of what would otherwise be the `branch`
25
+ * closure: `parent` / `ttl` / `protected` / `postgres.computeSettings`.
26
+ * - `branch` and `preview` are omitted entirely when they would be empty.
27
+ */
28
+ const toNeonConfigView = (resolved, preview) => {
29
+ const view = {};
30
+ if (resolved.authEnabled) view.auth = true;
31
+ if (resolved.dataApiEnabled) view.dataApi = true;
32
+ const previewView = toPreviewView(preview);
33
+ if (previewView) view.preview = previewView;
34
+ const branch = {};
35
+ if (resolved.parent !== void 0) branch.parent = resolved.parent;
36
+ if (resolved.ttlSeconds !== void 0) branch.ttl = formatDurationSeconds(resolved.ttlSeconds);
37
+ if (resolved.protected !== void 0) branch.protected = resolved.protected;
38
+ if (resolved.postgres?.computeSettings) branch.postgres = resolved.postgres;
39
+ if (Object.keys(branch).length > 0) view.branch = branch;
40
+ return view;
52
41
  };
53
42
  const toPreviewView = (preview) => {
54
- if (!preview)
55
- return undefined;
56
- const out = {};
57
- if (preview.functions.length > 0) {
58
- out.functions = Object.fromEntries(preview.functions.map((fn) => [fn.slug, { name: fn.name }]));
59
- }
60
- if (preview.buckets.length > 0) {
61
- out.buckets = Object.fromEntries(preview.buckets.map((b) => [b.name, { access: b.access }]));
62
- }
63
- if (preview.credentials.length > 0) {
64
- out.credentials = preview.credentials.map((c) => ({
65
- id: c.tokenIdShort,
66
- ...(c.name ? { name: c.name } : {}),
67
- scopes: c.scopes,
68
- ...(c.lastUsedAt ? { lastUsedAt: c.lastUsedAt } : {}),
69
- }));
70
- }
71
- return Object.keys(out).length > 0 ? out : undefined;
43
+ if (!preview) return void 0;
44
+ const out = {};
45
+ if (preview.functions.length > 0) out.functions = Object.fromEntries(preview.functions.map((fn) => [fn.slug, { name: fn.name }]));
46
+ if (preview.buckets.length > 0) out.buckets = Object.fromEntries(preview.buckets.map((b) => [b.name, { access: b.access }]));
47
+ if (preview.credentials.length > 0) out.credentials = preview.credentials.map((c) => ({
48
+ id: c.tokenIdShort,
49
+ ...c.name ? { name: c.name } : {},
50
+ scopes: c.scopes,
51
+ ...c.lastUsedAt ? { lastUsedAt: c.lastUsedAt } : {}
52
+ }));
53
+ return Object.keys(out).length > 0 ? out : void 0;
72
54
  };
55
+ //#endregion
56
+ export { formatDurationSeconds, toNeonConfigView };