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.
- package/README.md +70 -5
- package/dist/_chunks/auth_selection-DGgq6ifc.js +83 -0
- package/dist/_chunks/cmd_pipeline-CUbBO9U_.js +2818 -0
- package/dist/_chunks/credentials-MYdHdKah.js +188 -0
- package/dist/_chunks/env-NbA61JR3.js +585 -0
- package/dist/_chunks/env_services-Tz9G4JeT.js +531 -0
- package/dist/_chunks/paths-DMq0Lt7a.js +151 -0
- package/dist/_chunks/profiles-Ir29rqns.js +217 -0
- package/dist/_chunks/psql-DWH-kc69.js +2169 -0
- package/dist/_chunks/rolldown-runtime-D7D4PA-g.js +13 -0
- package/dist/_chunks/secure_file-BucZj4yQ.js +39 -0
- package/dist/analytics.js +163 -207
- package/dist/api.js +815 -758
- package/dist/auth.js +121 -141
- package/dist/auth_context.js +39 -53
- package/dist/cli.js +4 -7
- package/dist/commands/api.js +220 -250
- package/dist/commands/api_keys.js +251 -314
- package/dist/commands/auth.js +283 -328
- package/dist/commands/bootstrap.js +372 -437
- package/dist/commands/branches.js +304 -455
- package/dist/commands/bucket.js +374 -514
- package/dist/commands/checkout.js +213 -298
- package/dist/commands/config.js +573 -690
- package/dist/commands/connection_string.js +137 -165
- package/dist/commands/data_api.js +238 -260
- package/dist/commands/databases.js +67 -76
- package/dist/commands/deploy.js +31 -25
- package/dist/commands/dev.js +639 -719
- package/dist/commands/diff.js +156 -200
- package/dist/commands/env.js +255 -305
- package/dist/commands/functions.js +275 -355
- package/dist/commands/index.js +70 -65
- package/dist/commands/init.js +84 -119
- package/dist/commands/inspect.js +55 -55
- package/dist/commands/ip_allow.js +88 -120
- package/dist/commands/link.js +874 -1019
- package/dist/commands/logs.js +291 -0
- package/dist/commands/neon_auth.js +725 -933
- package/dist/commands/operations.js +34 -25
- package/dist/commands/orgs.js +28 -18
- package/dist/commands/profile.js +615 -846
- package/dist/commands/projects.js +313 -373
- package/dist/commands/psql.js +60 -58
- package/dist/commands/roles.js +55 -58
- package/dist/commands/schema_diff.js +87 -131
- package/dist/commands/set_context.js +34 -26
- package/dist/commands/snapshots.js +288 -413
- package/dist/commands/status.js +41 -37
- package/dist/commands/user.js +21 -10
- package/dist/commands/vpc_endpoints.js +85 -113
- package/dist/config.js +7 -6
- package/dist/config_format.js +50 -66
- package/dist/config_template.js +128 -157
- package/dist/context.js +183 -235
- package/dist/current_branch_fast_path.js +40 -49
- package/dist/dev/env.js +2 -446
- package/dist/dev/functions.js +54 -68
- package/dist/dev/inputs.js +46 -58
- package/dist/dev/runtime.js +135 -164
- package/dist/dev/websocket.js +766 -959
- package/dist/env.js +27 -33
- package/dist/env_file.js +118 -132
- package/dist/env_services.js +2 -51
- package/dist/errors.js +57 -68
- package/dist/functions_api.js +45 -43
- package/dist/help.js +189 -140
- package/dist/index.js +182 -257
- package/dist/init/agents.js +137 -118
- package/dist/init/auth.js +58 -68
- package/dist/init/bootstrap.js +325 -396
- package/dist/init/build_config.js +4 -2
- package/dist/init/detect_agent.js +56 -101
- package/dist/init/editors.js +35 -52
- package/dist/init/enrich_output.js +51 -66
- package/dist/init/extension.js +134 -171
- package/dist/init/inspect.js +179 -266
- package/dist/init/interactive.js +510 -622
- package/dist/init/neonctl.js +117 -168
- package/dist/init/orchestrate.js +157 -173
- package/dist/init/phases/auth.js +188 -202
- package/dist/init/phases/cleanup.js +23 -23
- package/dist/init/phases/db.js +251 -277
- package/dist/init/phases/getting_started.js +213 -223
- package/dist/init/phases/mcp.js +174 -224
- package/dist/init/phases/migrations.js +247 -248
- package/dist/init/phases/neon_auth.js +114 -133
- package/dist/init/phases/setup.js +546 -703
- package/dist/init/phases/skills.js +75 -86
- package/dist/init/phases/status.js +72 -67
- package/dist/init/resolve_context.js +102 -99
- package/dist/init/route_command.js +91 -98
- package/dist/init/skills.js +174 -218
- package/dist/init/vsix.js +77 -99
- package/dist/log.js +17 -16
- package/dist/neon_services.js +104 -129
- package/dist/parameters.gen.js +481 -471
- package/dist/pkg.js +17 -19
- package/dist/profile_keys.js +44 -47
- package/dist/psql/cli.js +44 -47
- package/dist/psql/command/cmd_cond.js +231 -406
- package/dist/psql/command/cmd_connect.js +557 -764
- package/dist/psql/command/cmd_copy.js +728 -984
- package/dist/psql/command/cmd_describe.js +1499 -1688
- package/dist/psql/command/cmd_format.js +733 -905
- package/dist/psql/command/cmd_io.js +2 -2193
- package/dist/psql/command/cmd_lo.js +297 -359
- package/dist/psql/command/cmd_meta.js +727 -878
- package/dist/psql/command/cmd_misc.js +138 -172
- package/dist/psql/command/cmd_pipeline.js +2 -1148
- package/dist/psql/command/cmd_restrict.js +119 -155
- package/dist/psql/command/cmd_show.js +529 -688
- package/dist/psql/command/dispatch.js +260 -325
- package/dist/psql/command/inputQueue.js +35 -33
- package/dist/psql/command/shared.js +49 -63
- package/dist/psql/complete/filenames.js +90 -133
- package/dist/psql/complete/index.js +59 -97
- package/dist/psql/complete/matcher.js +236 -300
- package/dist/psql/complete/psqlVars.js +218 -223
- package/dist/psql/complete/queries.js +159 -177
- package/dist/psql/complete/rules.js +1493 -2299
- package/dist/psql/core/common.js +2 -1253
- package/dist/psql/core/help.js +456 -546
- package/dist/psql/core/mainloop.js +692 -1303
- package/dist/psql/core/prompt.js +391 -408
- package/dist/psql/core/settings.js +429 -644
- package/dist/psql/core/sqlHelp.js +480 -554
- package/dist/psql/core/startup.js +2 -846
- package/dist/psql/core/syncVars.js +67 -110
- package/dist/psql/core/variables.js +156 -278
- package/dist/psql/describe/formatters.js +884 -1285
- package/dist/psql/describe/processNamePattern.js +173 -260
- package/dist/psql/describe/queries.js +1368 -2403
- package/dist/psql/describe/versionGate.js +32 -41
- package/dist/psql/index.js +2 -2030
- package/dist/psql/io/history.js +232 -271
- package/dist/psql/io/input.js +103 -108
- package/dist/psql/io/lineEditor/buffer.js +238 -319
- package/dist/psql/io/lineEditor/complete.js +135 -213
- package/dist/psql/io/lineEditor/filename.js +139 -148
- package/dist/psql/io/lineEditor/index.js +653 -870
- package/dist/psql/io/lineEditor/keymap.js +544 -702
- package/dist/psql/io/lineEditor/vt100.js +294 -341
- package/dist/psql/io/pgpass.js +158 -187
- package/dist/psql/io/pgservice.js +146 -183
- package/dist/psql/io/psqlrc.js +328 -403
- package/dist/psql/print/aligned.js +1020 -1683
- package/dist/psql/print/asciidoc.js +180 -214
- package/dist/psql/print/crosstab.js +281 -442
- package/dist/psql/print/csv.js +48 -70
- package/dist/psql/print/html.js +195 -226
- package/dist/psql/print/json.js +75 -88
- package/dist/psql/print/latex.js +291 -364
- package/dist/psql/print/pager.js +171 -242
- package/dist/psql/print/troff.js +194 -226
- package/dist/psql/print/unaligned.js +69 -95
- package/dist/psql/print/units.js +167 -169
- package/dist/psql/scanner/slash.js +428 -483
- package/dist/psql/scanner/sql.js +445 -889
- package/dist/psql/scanner/stringutils.js +309 -379
- package/dist/psql/types/index.js +8 -7
- package/dist/psql/types/scanner.js +25 -22
- package/dist/psql/wire/connection.js +2042 -2803
- package/dist/psql/wire/copy.js +84 -100
- package/dist/psql/wire/notify.js +39 -59
- package/dist/psql/wire/pipeline.js +305 -518
- package/dist/psql/wire/protocol.js +349 -417
- package/dist/psql/wire/sasl.js +180 -265
- package/dist/psql/wire/tls.js +400 -561
- package/dist/storage_api.js +115 -129
- package/dist/test_utils/fixtures.js +94 -113
- package/dist/test_utils/oauth_server.js +10 -7
- package/dist/test_utils/project_dir.js +33 -0
- package/dist/utils/ai_gateway_notice.js +131 -162
- package/dist/utils/api_enums.js +21 -28
- package/dist/utils/auth.js +10 -4
- package/dist/utils/branch_notice.js +20 -19
- package/dist/utils/branch_picker.js +83 -89
- package/dist/utils/cli_name.js +15 -12
- package/dist/utils/compute_units.js +20 -27
- package/dist/utils/config_diff.js +127 -158
- package/dist/utils/enrichers.js +95 -148
- package/dist/utils/esbuild.js +130 -189
- package/dist/utils/flags.js +35 -47
- package/dist/utils/formats.js +8 -15
- package/dist/utils/git_diff.js +69 -80
- package/dist/utils/inspect_db.js +101 -143
- package/dist/utils/inspect_queries.js +179 -142
- package/dist/utils/middlewares.js +39 -45
- package/dist/utils/openapi.js +87 -99
- package/dist/utils/package_manager.js +312 -110
- package/dist/utils/point_in_time.js +49 -53
- package/dist/utils/psql.js +89 -106
- package/dist/utils/service_picker.js +55 -58
- package/dist/utils/string.js +5 -5
- package/dist/utils/ui.js +38 -55
- package/dist/utils/write_sync.js +26 -35
- package/dist/utils/zip.js +4 -3
- package/dist/writer.js +67 -87
- package/package.json +11 -6
- package/dist/_shared/auth_selection.js +0 -86
- package/dist/_shared/credentials.js +0 -209
- package/dist/_shared/env-core/env.js +0 -558
- package/dist/_shared/env-core/reuse-secrets.js +0 -223
- package/dist/_shared/paths.js +0 -148
- package/dist/_shared/profiles.js +0 -276
- package/dist/_shared/secure_file.js +0 -43
|
@@ -1,230 +1,196 @@
|
|
|
1
1
|
import { boolDisplayOf, renderCellValue } from "./units.js";
|
|
2
|
+
//#region src/psql/print/asciidoc.ts
|
|
2
3
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
4
|
+
* AsciiDoc printer.
|
|
5
|
+
*
|
|
6
|
+
* Mirrors print.c `print_asciidoc_text` and `print_asciidoc_vertical`.
|
|
7
|
+
*
|
|
8
|
+
* Output shape (flat):
|
|
9
|
+
* .title
|
|
10
|
+
* [options="header",cols="<l,<l,>l",frame="all",grid="all"]
|
|
11
|
+
* |====
|
|
12
|
+
* ^l|col1 ^l|col2 ^l|col3
|
|
13
|
+
* |val1 |val2 |val3
|
|
14
|
+
* |====
|
|
15
|
+
*
|
|
16
|
+
* ....
|
|
17
|
+
* (N rows)
|
|
18
|
+
* ....
|
|
19
|
+
*
|
|
20
|
+
* Output shape (expanded, `\pset expanded on`):
|
|
21
|
+
* .title
|
|
22
|
+
* [cols="h,l",frame="all",grid="all"]
|
|
23
|
+
* |====
|
|
24
|
+
* 2+^|Record 1
|
|
25
|
+
* <l|col1 <l|val1
|
|
26
|
+
* <l|col2 >l|val2
|
|
27
|
+
* ...
|
|
28
|
+
* |====
|
|
29
|
+
* (no row count footer)
|
|
30
|
+
*
|
|
31
|
+
* - `topt.border`:
|
|
32
|
+
* 0 → `,frame="none",grid="none"`
|
|
33
|
+
* 1 → `,frame="none"`
|
|
34
|
+
* 2 → `,frame="all",grid="all"`
|
|
35
|
+
* Borders outside 0..2 fall back to "no extra clause" (matches the
|
|
36
|
+
* switch with no default in print.c).
|
|
37
|
+
* - Numeric columns (per the OID heuristic) get `>l`, others `<l`.
|
|
38
|
+
* Headers in flat mode are centered with `^l|`. In expanded mode
|
|
39
|
+
* header cells render with `<l|` and value cells use the alignment
|
|
40
|
+
* letter from the data column.
|
|
41
|
+
* - AsciiDoc's only structurally hostile character is `|` (it ends a
|
|
42
|
+
* cell), so the escape helper only rewrites that to `\|`. Newlines
|
|
43
|
+
* pass through — AsciiDoc continues a cell over an embedded newline.
|
|
44
|
+
* - Whitespace-only cells are emitted as just `|` (with a trailing
|
|
45
|
+
* space for inter-cell separation), matching the upstream
|
|
46
|
+
* "protect against needless spaces" branch.
|
|
47
|
+
* - Expanded mode never emits the `(N rows)` footer; only user-set
|
|
48
|
+
* footers appear (matches upstream `print_asciidoc_vertical`).
|
|
49
|
+
*/
|
|
50
|
+
const NUMERIC_OIDS = /* @__PURE__ */ new Set([
|
|
51
|
+
21,
|
|
52
|
+
23,
|
|
53
|
+
20,
|
|
54
|
+
700,
|
|
55
|
+
701,
|
|
56
|
+
1700,
|
|
57
|
+
1186
|
|
58
|
+
]);
|
|
59
|
+
const asciidocPrinter = {
|
|
60
|
+
format: "asciidoc",
|
|
61
|
+
printQuery(rs, opts, out) {
|
|
62
|
+
if (opts.topt.expanded === "on") return printExpanded(rs, opts, out);
|
|
63
|
+
return printFlat(rs, opts, out);
|
|
64
|
+
}
|
|
60
65
|
};
|
|
61
66
|
const printFlat = (rs, opts, out) => {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
buf += "|====\n";
|
|
117
|
-
if (stopTable && !tuplesOnly) {
|
|
118
|
-
const effective = effectiveFooters(rs, topt, footers);
|
|
119
|
-
if (effective.length > 0) {
|
|
120
|
-
buf += "\n....\n";
|
|
121
|
-
for (const f of effective)
|
|
122
|
-
buf += f + "\n";
|
|
123
|
-
buf += "....\n";
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
out.write(buf);
|
|
127
|
-
return Promise.resolve();
|
|
67
|
+
const topt = opts.topt;
|
|
68
|
+
const tuplesOnly = topt.tuplesOnly;
|
|
69
|
+
const startTable = topt.startTable;
|
|
70
|
+
const stopTable = topt.stopTable;
|
|
71
|
+
const nullPrint = opts.nullPrint !== "" ? opts.nullPrint : topt.nullPrint;
|
|
72
|
+
const title = opts.title ?? topt.title;
|
|
73
|
+
const footers = opts.footers ?? topt.footers;
|
|
74
|
+
const headers = rs.fields.map((f) => f.name);
|
|
75
|
+
const aligns = rs.fields.map((f) => NUMERIC_OIDS.has(f.dataTypeID) ? "r" : "l");
|
|
76
|
+
const ncols = rs.fields.length;
|
|
77
|
+
const boolDisplay = boolDisplayOf(topt);
|
|
78
|
+
const cells = rs.rows.map((row) => row.map((cell, i) => renderCell(cell, nullPrint, topt.numericLocale, rs.fields[i]?.dataTypeID, boolDisplay)));
|
|
79
|
+
let buf = "";
|
|
80
|
+
if (startTable) {
|
|
81
|
+
buf += "\n";
|
|
82
|
+
if (!tuplesOnly && title) buf += "." + title + "\n";
|
|
83
|
+
buf += "[";
|
|
84
|
+
if (!tuplesOnly) buf += "options=\"header\",";
|
|
85
|
+
buf += "cols=\"";
|
|
86
|
+
buf += aligns.map((a) => a === "r" ? ">l" : "<l").join(",");
|
|
87
|
+
buf += "\"";
|
|
88
|
+
buf += borderClause(topt.border);
|
|
89
|
+
buf += "]\n";
|
|
90
|
+
buf += "|====\n";
|
|
91
|
+
if (!tuplesOnly) {
|
|
92
|
+
headers.forEach((h, idx) => {
|
|
93
|
+
if (idx !== 0) buf += " ";
|
|
94
|
+
buf += "^l|" + escapeAsciidoc(h);
|
|
95
|
+
});
|
|
96
|
+
buf += "\n";
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
for (const row of cells) {
|
|
100
|
+
row.forEach((value, idx) => {
|
|
101
|
+
if (idx !== 0) buf += " ";
|
|
102
|
+
buf += "|";
|
|
103
|
+
if (isWhitespaceOnly(value)) {
|
|
104
|
+
if (idx !== ncols - 1) buf += " ";
|
|
105
|
+
} else buf += escapeAsciidoc(value);
|
|
106
|
+
});
|
|
107
|
+
buf += "\n";
|
|
108
|
+
}
|
|
109
|
+
buf += "|====\n";
|
|
110
|
+
if (stopTable && !tuplesOnly) {
|
|
111
|
+
const effective = effectiveFooters(rs, topt, footers);
|
|
112
|
+
if (effective.length > 0) {
|
|
113
|
+
buf += "\n....\n";
|
|
114
|
+
for (const f of effective) buf += f + "\n";
|
|
115
|
+
buf += "....\n";
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
out.write(buf);
|
|
119
|
+
return Promise.resolve();
|
|
128
120
|
};
|
|
129
121
|
const printExpanded = (rs, opts, out) => {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
if (stopTable && !tuplesOnly) {
|
|
175
|
-
// Expanded mode does NOT emit the default "(N rows)" footer —
|
|
176
|
-
// only user-supplied footers (matches print_asciidoc_vertical).
|
|
177
|
-
if (footers && footers.length > 0) {
|
|
178
|
-
buf += "\n....\n";
|
|
179
|
-
for (const f of footers)
|
|
180
|
-
buf += f + "\n";
|
|
181
|
-
buf += "....\n";
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
out.write(buf);
|
|
185
|
-
return Promise.resolve();
|
|
122
|
+
const topt = opts.topt;
|
|
123
|
+
const tuplesOnly = topt.tuplesOnly;
|
|
124
|
+
const startTable = topt.startTable;
|
|
125
|
+
const stopTable = topt.stopTable;
|
|
126
|
+
const nullPrint = opts.nullPrint !== "" ? opts.nullPrint : topt.nullPrint;
|
|
127
|
+
const title = opts.title ?? topt.title;
|
|
128
|
+
const footers = opts.footers ?? topt.footers;
|
|
129
|
+
const headers = rs.fields.map((f) => f.name);
|
|
130
|
+
const aligns = rs.fields.map((f) => NUMERIC_OIDS.has(f.dataTypeID) ? "r" : "l");
|
|
131
|
+
const boolDisplay = boolDisplayOf(topt);
|
|
132
|
+
const cells = rs.rows.map((row) => row.map((cell, i) => renderCell(cell, nullPrint, topt.numericLocale, rs.fields[i]?.dataTypeID, boolDisplay)));
|
|
133
|
+
let buf = "";
|
|
134
|
+
if (startTable) {
|
|
135
|
+
buf += "\n";
|
|
136
|
+
if (!tuplesOnly && title) buf += "." + title + "\n";
|
|
137
|
+
buf += "[cols=\"h,l\"";
|
|
138
|
+
buf += borderClause(topt.border);
|
|
139
|
+
buf += "]\n";
|
|
140
|
+
buf += "|====\n";
|
|
141
|
+
}
|
|
142
|
+
let record = topt.prior + 1;
|
|
143
|
+
cells.forEach((row) => {
|
|
144
|
+
if (!tuplesOnly) {
|
|
145
|
+
buf += `2+^|Record ${String(record)}\n`;
|
|
146
|
+
record += 1;
|
|
147
|
+
} else buf += "2+|\n";
|
|
148
|
+
row.forEach((value, idx) => {
|
|
149
|
+
buf += "<l|" + escapeAsciidoc(headers[idx]);
|
|
150
|
+
buf += " " + (aligns[idx] === "r" ? ">l" : "<l") + "|";
|
|
151
|
+
if (isWhitespaceOnly(value)) buf += " ";
|
|
152
|
+
else buf += escapeAsciidoc(value);
|
|
153
|
+
buf += "\n";
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
buf += "|====\n";
|
|
157
|
+
if (stopTable && !tuplesOnly) {
|
|
158
|
+
if (footers && footers.length > 0) {
|
|
159
|
+
buf += "\n....\n";
|
|
160
|
+
for (const f of footers) buf += f + "\n";
|
|
161
|
+
buf += "....\n";
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
out.write(buf);
|
|
165
|
+
return Promise.resolve();
|
|
186
166
|
};
|
|
187
167
|
const borderClause = (border) => {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
return ',frame="all",grid="all"';
|
|
195
|
-
default:
|
|
196
|
-
return "";
|
|
197
|
-
}
|
|
168
|
+
switch (border) {
|
|
169
|
+
case 0: return ",frame=\"none\",grid=\"none\"";
|
|
170
|
+
case 1: return ",frame=\"none\"";
|
|
171
|
+
case 2: return ",frame=\"all\",grid=\"all\"";
|
|
172
|
+
default: return "";
|
|
173
|
+
}
|
|
198
174
|
};
|
|
199
175
|
const effectiveFooters = (rs, topt, footers) => {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
return [];
|
|
176
|
+
if (footers && footers.length > 0) return footers;
|
|
177
|
+
if (topt.defaultFooter) {
|
|
178
|
+
const n = rs.rows.length;
|
|
179
|
+
return [`(${String(n)} ${n === 1 ? "row" : "rows"})`];
|
|
180
|
+
}
|
|
181
|
+
return [];
|
|
207
182
|
};
|
|
208
183
|
const isWhitespaceOnly = (s) => {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
if (ch !== " " && ch !== "\t")
|
|
213
|
-
return false;
|
|
214
|
-
}
|
|
215
|
-
return true;
|
|
184
|
+
if (s.length === 0) return true;
|
|
185
|
+
for (const ch of s) if (ch !== " " && ch !== " ") return false;
|
|
186
|
+
return true;
|
|
216
187
|
};
|
|
217
188
|
const escapeAsciidoc = (input) => {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
for (const ch of input) {
|
|
223
|
-
if (ch === "|")
|
|
224
|
-
out += "\\|";
|
|
225
|
-
else
|
|
226
|
-
out += ch;
|
|
227
|
-
}
|
|
228
|
-
return out;
|
|
189
|
+
let out = "";
|
|
190
|
+
for (const ch of input) if (ch === "|") out += "\\|";
|
|
191
|
+
else out += ch;
|
|
192
|
+
return out;
|
|
229
193
|
};
|
|
230
194
|
const renderCell = (cell, nullPrint, numericLocale, dataTypeID, boolDisplay) => renderCellValue(cell, nullPrint, numericLocale, dataTypeID, boolDisplay);
|
|
195
|
+
//#endregion
|
|
196
|
+
export { asciidocPrinter };
|