@wavehouse/chtypes 0.5.2 → 1.0.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 (195) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +34 -38
  3. package/dist/abi1/buildinfo.d.ts +40 -0
  4. package/dist/abi1/buildinfo.d.ts.map +1 -0
  5. package/dist/abi1/buildinfo.js +83 -0
  6. package/dist/abi1/buildinfo.js.map +1 -0
  7. package/dist/abi1/calls.gen.d.ts +55 -0
  8. package/dist/abi1/calls.gen.d.ts.map +1 -0
  9. package/dist/abi1/calls.gen.js +110 -0
  10. package/dist/abi1/calls.gen.js.map +1 -0
  11. package/dist/abi1/decls.gen.d.ts +115 -0
  12. package/dist/abi1/decls.gen.d.ts.map +1 -0
  13. package/dist/abi1/decls.gen.js +1613 -0
  14. package/dist/abi1/decls.gen.js.map +1 -0
  15. package/dist/abi1/errmap.gen.d.ts +18 -0
  16. package/dist/abi1/errmap.gen.d.ts.map +1 -0
  17. package/dist/abi1/errmap.gen.js +66 -0
  18. package/dist/abi1/errmap.gen.js.map +1 -0
  19. package/dist/abi1/errors.d.ts +107 -0
  20. package/dist/abi1/errors.d.ts.map +1 -0
  21. package/dist/abi1/errors.js +134 -0
  22. package/dist/abi1/errors.js.map +1 -0
  23. package/dist/abi1/handles.d.ts +31 -0
  24. package/dist/abi1/handles.d.ts.map +1 -0
  25. package/dist/abi1/handles.js +76 -0
  26. package/dist/abi1/handles.js.map +1 -0
  27. package/dist/abi1/index.d.ts +17 -0
  28. package/dist/abi1/index.d.ts.map +1 -0
  29. package/dist/abi1/index.js +17 -0
  30. package/dist/abi1/index.js.map +1 -0
  31. package/dist/abi1/libc.d.ts +54 -0
  32. package/dist/abi1/libc.d.ts.map +1 -0
  33. package/dist/abi1/libc.gen.d.ts +12 -0
  34. package/dist/abi1/libc.gen.d.ts.map +1 -0
  35. package/dist/abi1/libc.gen.js +75 -0
  36. package/dist/abi1/libc.gen.js.map +1 -0
  37. package/dist/abi1/libc.js +109 -0
  38. package/dist/abi1/libc.js.map +1 -0
  39. package/dist/abi1/loader.d.ts +99 -0
  40. package/dist/abi1/loader.d.ts.map +1 -0
  41. package/dist/abi1/loader.js +261 -0
  42. package/dist/abi1/loader.js.map +1 -0
  43. package/dist/abi1/raw.d.ts +104 -0
  44. package/dist/abi1/raw.d.ts.map +1 -0
  45. package/dist/abi1/raw.js +296 -0
  46. package/dist/abi1/raw.js.map +1 -0
  47. package/dist/abi1/strictjson.d.ts +19 -0
  48. package/dist/abi1/strictjson.d.ts.map +1 -0
  49. package/dist/abi1/strictjson.js +78 -0
  50. package/dist/abi1/strictjson.js.map +1 -0
  51. package/dist/abi1/vocab.gen.d.ts +169 -0
  52. package/dist/abi1/vocab.gen.d.ts.map +1 -0
  53. package/dist/abi1/vocab.gen.js +306 -0
  54. package/dist/abi1/vocab.gen.js.map +1 -0
  55. package/dist/cli.d.ts +25 -26
  56. package/dist/cli.d.ts.map +1 -1
  57. package/dist/cli.js +206 -218
  58. package/dist/cli.js.map +1 -1
  59. package/dist/documents.d.ts +195 -0
  60. package/dist/documents.d.ts.map +1 -0
  61. package/dist/documents.js +389 -0
  62. package/dist/documents.js.map +1 -0
  63. package/dist/env.d.ts +16 -0
  64. package/dist/env.d.ts.map +1 -0
  65. package/dist/env.js +57 -0
  66. package/dist/env.js.map +1 -0
  67. package/dist/index.d.ts +19 -24
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +17 -23
  70. package/dist/index.js.map +1 -1
  71. package/dist/json.d.ts +11 -89
  72. package/dist/json.d.ts.map +1 -1
  73. package/dist/json.js +16 -180
  74. package/dist/json.js.map +1 -1
  75. package/dist/library.d.ts +53 -309
  76. package/dist/library.d.ts.map +1 -1
  77. package/dist/library.js +77 -315
  78. package/dist/library.js.map +1 -1
  79. package/dist/ocifetch/constants.gen.d.ts +84 -0
  80. package/dist/ocifetch/constants.gen.d.ts.map +1 -0
  81. package/dist/ocifetch/constants.gen.js +92 -0
  82. package/dist/ocifetch/constants.gen.js.map +1 -0
  83. package/dist/ocifetch/dsse.d.ts +114 -0
  84. package/dist/ocifetch/dsse.d.ts.map +1 -0
  85. package/dist/ocifetch/dsse.js +331 -0
  86. package/dist/ocifetch/dsse.js.map +1 -0
  87. package/dist/ocifetch/ensure.d.ts +65 -0
  88. package/dist/ocifetch/ensure.d.ts.map +1 -0
  89. package/dist/ocifetch/ensure.js +775 -0
  90. package/dist/ocifetch/ensure.js.map +1 -0
  91. package/dist/ocifetch/errors.d.ts +92 -0
  92. package/dist/ocifetch/errors.d.ts.map +1 -0
  93. package/dist/ocifetch/errors.js +101 -0
  94. package/dist/ocifetch/errors.js.map +1 -0
  95. package/dist/ocifetch/goldens.d.ts +44 -0
  96. package/dist/ocifetch/goldens.d.ts.map +1 -0
  97. package/dist/ocifetch/goldens.js +62 -0
  98. package/dist/ocifetch/goldens.js.map +1 -0
  99. package/dist/ocifetch/http.d.ts +124 -0
  100. package/dist/ocifetch/http.d.ts.map +1 -0
  101. package/dist/ocifetch/http.js +549 -0
  102. package/dist/ocifetch/http.js.map +1 -0
  103. package/dist/ocifetch/index.d.ts +17 -0
  104. package/dist/ocifetch/index.d.ts.map +1 -0
  105. package/dist/ocifetch/index.js +14 -0
  106. package/dist/ocifetch/index.js.map +1 -0
  107. package/dist/ocifetch/layout.d.ts +126 -0
  108. package/dist/ocifetch/layout.d.ts.map +1 -0
  109. package/dist/ocifetch/layout.js +375 -0
  110. package/dist/ocifetch/layout.js.map +1 -0
  111. package/dist/ocifetch/localverify.d.ts +43 -0
  112. package/dist/ocifetch/localverify.d.ts.map +1 -0
  113. package/dist/ocifetch/localverify.js +164 -0
  114. package/dist/ocifetch/localverify.js.map +1 -0
  115. package/dist/ocifetch/lock.d.ts +39 -0
  116. package/dist/ocifetch/lock.d.ts.map +1 -0
  117. package/dist/ocifetch/lock.js +140 -0
  118. package/dist/ocifetch/lock.js.map +1 -0
  119. package/dist/ocifetch/oci.d.ts +100 -0
  120. package/dist/ocifetch/oci.d.ts.map +1 -0
  121. package/dist/ocifetch/oci.js +323 -0
  122. package/dist/ocifetch/oci.js.map +1 -0
  123. package/dist/ocifetch/referrers.d.ts +55 -0
  124. package/dist/ocifetch/referrers.d.ts.map +1 -0
  125. package/dist/ocifetch/referrers.js +132 -0
  126. package/dist/ocifetch/referrers.js.map +1 -0
  127. package/dist/ocifetch/types.d.ts +167 -0
  128. package/dist/ocifetch/types.d.ts.map +1 -0
  129. package/dist/ocifetch/types.js +88 -0
  130. package/dist/ocifetch/types.js.map +1 -0
  131. package/dist/ocifetch/unpack.d.ts +55 -0
  132. package/dist/ocifetch/unpack.d.ts.map +1 -0
  133. package/dist/ocifetch/unpack.js +205 -0
  134. package/dist/ocifetch/unpack.js.map +1 -0
  135. package/dist/registry.d.ts +38 -387
  136. package/dist/registry.d.ts.map +1 -1
  137. package/dist/registry.js +94 -819
  138. package/dist/registry.js.map +1 -1
  139. package/dist/schema.d.ts +77 -588
  140. package/dist/schema.d.ts.map +1 -1
  141. package/dist/schema.js +87 -549
  142. package/dist/schema.js.map +1 -1
  143. package/dist/settings.d.ts +27 -36
  144. package/dist/settings.d.ts.map +1 -1
  145. package/dist/settings.js +75 -25
  146. package/dist/settings.js.map +1 -1
  147. package/dist/setup.d.ts +37 -0
  148. package/dist/setup.d.ts.map +1 -0
  149. package/dist/setup.js +60 -0
  150. package/dist/setup.js.map +1 -0
  151. package/dist/tar.d.ts +27 -11
  152. package/dist/tar.d.ts.map +1 -1
  153. package/dist/tar.js +54 -32
  154. package/dist/tar.js.map +1 -1
  155. package/package.json +2 -2
  156. package/dist/discover.d.ts +0 -142
  157. package/dist/discover.d.ts.map +0 -1
  158. package/dist/discover.js +0 -288
  159. package/dist/discover.js.map +0 -1
  160. package/dist/error-codes.d.ts +0 -80
  161. package/dist/error-codes.d.ts.map +0 -1
  162. package/dist/error-codes.js +0 -139
  163. package/dist/error-codes.js.map +0 -1
  164. package/dist/errors.d.ts +0 -284
  165. package/dist/errors.d.ts.map +0 -1
  166. package/dist/errors.js +0 -321
  167. package/dist/errors.js.map +0 -1
  168. package/dist/fetch.d.ts +0 -382
  169. package/dist/fetch.d.ts.map +0 -1
  170. package/dist/fetch.js +0 -1498
  171. package/dist/fetch.js.map +0 -1
  172. package/dist/ffi.d.ts +0 -410
  173. package/dist/ffi.d.ts.map +0 -1
  174. package/dist/ffi.js +0 -1154
  175. package/dist/ffi.js.map +0 -1
  176. package/dist/format.d.ts +0 -128
  177. package/dist/format.d.ts.map +0 -1
  178. package/dist/format.js +0 -132
  179. package/dist/format.js.map +0 -1
  180. package/dist/numeric.d.ts +0 -20
  181. package/dist/numeric.d.ts.map +0 -1
  182. package/dist/numeric.js +0 -107
  183. package/dist/numeric.js.map +0 -1
  184. package/dist/paths.d.ts +0 -55
  185. package/dist/paths.d.ts.map +0 -1
  186. package/dist/paths.js +0 -87
  187. package/dist/paths.js.map +0 -1
  188. package/dist/results.d.ts +0 -495
  189. package/dist/results.d.ts.map +0 -1
  190. package/dist/results.js +0 -406
  191. package/dist/results.js.map +0 -1
  192. package/dist/transform.d.ts +0 -73
  193. package/dist/transform.d.ts.map +0 -1
  194. package/dist/transform.js +0 -533
  195. package/dist/transform.js.map +0 -1
package/dist/transform.js DELETED
@@ -1,533 +0,0 @@
1
- /**
2
- * Silent-transformation detection — a port of `go/chtypes/transform.go`.
3
- *
4
- * ClickHouse has no notion of "I changed your value": `readIntText` wraps mod
5
- * 2^N, `SerializationDateTime` truncates, `parseUUID` maps every non-hex byte to
6
- * 0xff, and all of it returns success. So the fact of a change has to be
7
- * established from outside, and this is the one part of chtypes that is derived
8
- * rather than executed by ClickHouse — which makes it the one part a binding can
9
- * get wrong without the C library noticing. Omitting it scores 0 % recall on the
10
- * arbiter's transformation axis regardless of everything else.
11
- *
12
- * Two independent detectors run and their union is reported:
13
- *
14
- * 1. **Supplied vs stored** — the raw input text against ClickHouse's rendering
15
- * of what it kept. Models nothing; catches changes a widened type makes
16
- * identically (2024-02-30 -> 2024-03-01) and types with no wider type to
17
- * compare against (Float64, Int256, String).
18
- * 2. **Reference type** — the C layer already parsed each field a second time
19
- * through a structurally identical type with widened leaves and reported it
20
- * as `ref` / `ref_type`. This names the reason precisely (an overflow wrap
21
- * versus a decimal truncation) and still fires where the supplied text is
22
- * not comparable (a CSV field, a base64 blob).
23
- *
24
- * Neither reimplements a coercion rule: the first compares two values already in
25
- * hand, the second compares two ClickHouse answers.
26
- *
27
- * Both compare **bytes**. A supplied field and a stored `String` can each be any
28
- * byte sequence, and two different byte sequences that both decode to U+FFFD are
29
- * not the same value — deciding on decoded text would silently merge them, and
30
- * `equivalent`'s fast path would then call a real change identical.
31
- */
32
- import { parseJsonValue } from './json.js';
33
- import { denormal, isNumericText, numEqual, parseRational, trimQuotes } from './numeric.js';
34
- /** The stable reason vocabulary. The harness groups on these strings. */
35
- export const Reason = {
36
- OverflowWrap: 'overflow_wrap',
37
- NullToDefault: 'null_to_default',
38
- NullLoss: 'null_loss',
39
- DecimalTruncate: 'decimal_truncate',
40
- DateClamp: 'date_clamp',
41
- DateTimeWrap: 'datetime_wrap',
42
- DateShift: 'date_shift',
43
- UuidMangle: 'uuid_mangle',
44
- IpMangle: 'ip_mangle',
45
- FloatPrecision: 'float_precision',
46
- LossyNumeric: 'lossy_numeric',
47
- FixedStringPad: 'fixedstring_pad',
48
- Emptied: 'emptied',
49
- ElementChanged: 'element_changed',
50
- EnumCoerce: 'enum_coerce',
51
- ValueChanged: 'value_changed',
52
- Poisoned: 'poisoned',
53
- DuplicateKeyDropped: 'duplicate_key_dropped',
54
- Reformat: 'reformat',
55
- DefaultFilled: 'default_filled',
56
- ZeroFilled: 'zero_filled',
57
- DefaultMaterialized: 'default_materialized',
58
- TtlExpired: 'ttl_expired',
59
- TtlColumnExpired: 'ttl_column_expired',
60
- };
61
- /**
62
- * Four reasons change how a value is written, or add one the row never carried,
63
- * without losing information. Everything else is a warning. All of them are
64
- * still reported: a preview must show the tenant what the table will hold, and
65
- * 1700000000 becoming "2023-11-14 22:13:20" is a visible change.
66
- */
67
- const NON_LOSSY = new Set([
68
- Reason.Reformat,
69
- Reason.DefaultFilled,
70
- Reason.ZeroFilled,
71
- Reason.DefaultMaterialized,
72
- ]);
73
- /**
74
- * Whether a transform reason means information was LOST (a warning to raise to
75
- * the tenant) rather than merely re-spelled or filled in. False for exactly
76
- * four reasons — `reformat`, `default_filled`, `zero_filled`,
77
- * `default_materialized` — true for everything else, unknown strings included:
78
- * a reason nobody has audited must degrade to a warning, never to silence.
79
- * Mirrors `Transform#lossy`. Never throws.
80
- */
81
- export function isLossyReason(reason) {
82
- return !NON_LOSSY.has(reason);
83
- }
84
- const EMPTY = Buffer.alloc(0);
85
- const UNREADABLE = Buffer.from('<unreadable>', 'utf8');
86
- /**
87
- * One reported change. Built from bytes, with the text spellings derived — so a
88
- * consumer that can take bytes never sees a U+FFFD this binding invented.
89
- */
90
- function transform(column, input, stored, reason) {
91
- return {
92
- column,
93
- input: input.toString('utf8'),
94
- stored: stored.toString('utf8'),
95
- inputBytes: input,
96
- storedBytes: stored,
97
- reason,
98
- row: 0,
99
- lossy: isLossyReason(reason),
100
- };
101
- }
102
- /** Classify one column of a row document. */
103
- export function classify(c) {
104
- switch (c.src) {
105
- case 'skipped':
106
- case 'default_expr_unsupported':
107
- case 'default_volatile_unresolved':
108
- case 'default_pending':
109
- // Source.EphemeralInput (issue #97): a listed EPHEMERAL column's value
110
- // is read but never stored, so — like 'skipped' — there is no stored
111
- // value to have silently changed. NOT Source.MaterializedInput: under
112
- // insert_allow_materialized_columns=1 that value IS stored, replacing
113
- // the column's expression, and must still be classified.
114
- case 'ephemeral_input':
115
- return [];
116
- default:
117
- break;
118
- }
119
- // The accept-then-poison class: ClickHouse stores a value it cannot read back.
120
- // Not a changed value — a destroyed one — but silent at insert time.
121
- if (c.poison) {
122
- return [transform(c.name, c.inputBytes, UNREADABLE, Reason.Poisoned)];
123
- }
124
- const stored = c.storedBytes;
125
- // A duplicate key whose later value ClickHouse discarded. Reported first
126
- // because the value comparison below sees only the value that survived.
127
- if (c.dupDropped) {
128
- return [transform(c.name, c.inputBytes, stored, Reason.DuplicateKeyDropped)];
129
- }
130
- // A column the row did not supply that ClickHouse populated. Input is empty —
131
- // an absent column has none — and the reason says where the value came from.
132
- switch (c.src) {
133
- case 'default':
134
- return [transform(c.name, EMPTY, stored, Reason.DefaultFilled)];
135
- case 'default_substituted':
136
- return [transform(c.name, EMPTY, stored, Reason.DefaultMaterialized)];
137
- case 'absent':
138
- return [transform(c.name, EMPTY, stored, Reason.ZeroFilled)];
139
- default:
140
- break;
141
- }
142
- // ---- detector 2: reference type. Run first because it names the reason.
143
- let refReason = '';
144
- if (c.refType !== '' && c.refBytes.length > 0 && !equivalent(c.base, stored, c.refBytes)) {
145
- refReason = reasonFor(c.base, c.stored, c.ref);
146
- }
147
- // ---- detector 1: supplied vs stored.
148
- let suppliedReason = '';
149
- if (c.src === 'input') {
150
- const sup = parseJsonValue(c.inputBytes);
151
- const st = parseJsonValue(stored);
152
- if (sup !== null && st !== null) {
153
- if (!sameValue(sup, st)) {
154
- suppliedReason = severity(sup, st);
155
- }
156
- else if (!sameKindDeep(sup, st)) {
157
- // Same value, different JSON type: "1024" -> 1024, or a number inside an
158
- // Array(Map(String,String)) coming back as a string. Nothing is lost, but
159
- // the preview and the table disagree on the type, and the check has to
160
- // recurse: the change is often inside a container.
161
- suppliedReason = Reason.Reformat;
162
- }
163
- }
164
- else if (c.nullInput && !c.nullable) {
165
- // A null the format layer replaced with a default. In CSV/TSV the raw text
166
- // is `\N`, which is not JSON, so it never reaches the branch above — and
167
- // this is the single largest lossy class.
168
- suppliedReason = Reason.NullToDefault;
169
- }
170
- }
171
- if (refReason === '' && suppliedReason === '')
172
- return [];
173
- // Prefer the reference detector's reason — it can tell an overflow wrap from a
174
- // decimal truncation — but never let it downgrade a lossy finding to reformat.
175
- let reason = refReason;
176
- if (reason === '' || (reason === Reason.Reformat && suppliedReason !== '')) {
177
- reason = suppliedReason;
178
- }
179
- // An unclassified numeric/temporal leaf (no reference-ladder entry in the
180
- // C layer): the precise detector never ran, so a visible change cannot be
181
- // vouched non-lossy. Claim lossy rather than hide a possible loss.
182
- if (c.refUnclassified && reason === Reason.Reformat) {
183
- reason = Reason.ValueChanged;
184
- }
185
- return [transform(c.name, c.inputBytes, stored, reason)];
186
- }
187
- // ------------------------------------------------------ supplied vs stored
188
- /** A scalar's own bytes, and whether it was a JSON string rather than a number. */
189
- function scalar(v) {
190
- switch (v.kind) {
191
- case 'number':
192
- return { bytes: v.bytes, isString: false };
193
- case 'string':
194
- return { bytes: v.bytes, isString: true };
195
- default:
196
- return { bytes: EMPTY, isString: false };
197
- }
198
- }
199
- function scalarText(v) {
200
- const s = scalar(v);
201
- return { text: s.bytes.toString('utf8'), isString: s.isString };
202
- }
203
- function isNumericValue(v) {
204
- const { text } = scalarText(v);
205
- return text !== '' && isNumericText(text);
206
- }
207
- /**
208
- * An object's members as a map, later keys winning — which is what a JS object,
209
- * Go's `map[string]any` and the arbiter's `json.loads` all do, so the comparison
210
- * here means the same thing as the harness's. The raw bytes keep the duplicates
211
- * (`rawBytes`); only this comparison collapses them.
212
- *
213
- * Keys are mapped through latin1, the one JS encoding that round-trips arbitrary
214
- * bytes, so two keys that differ only outside UTF-8 stay distinct.
215
- */
216
- function membersOf(v) {
217
- const out = new Map();
218
- for (let i = 0; i < v.keys.length; i++) {
219
- out.set(v.keys[i].toString('latin1'), v.items[i]);
220
- }
221
- return out;
222
- }
223
- /**
224
- * Equal after canonicalization, where a number and its decimal string spelling
225
- * are the same value (5 vs "5") but a float that has thrown away 60 digits of an
226
- * Int256 is not. Mirrors the arbiter's `_same_value`.
227
- */
228
- function sameValue(a, b) {
229
- if (a.kind === 'array') {
230
- if (b.kind !== 'array' || a.items.length !== b.items.length)
231
- return false;
232
- return a.items.every((x, i) => sameValue(x, b.items[i]));
233
- }
234
- if (a.kind === 'object') {
235
- if (b.kind !== 'object')
236
- return false;
237
- const am = membersOf(a);
238
- const bm = membersOf(b);
239
- if (am.size !== bm.size)
240
- return false;
241
- for (const [k, av] of am) {
242
- const bv = bm.get(k);
243
- if (bv === undefined || !sameValue(av, bv))
244
- return false;
245
- }
246
- return true;
247
- }
248
- if (a.kind === 'null' || b.kind === 'null')
249
- return a.kind === 'null' && b.kind === 'null';
250
- if (a.kind === 'bool')
251
- return b.kind === 'bool' && a.raw.equals(b.raw);
252
- if (b.kind === 'bool')
253
- return false;
254
- const x = scalar(a);
255
- const y = scalar(b);
256
- if (x.isString === y.isString && x.bytes.equals(y.bytes))
257
- return true;
258
- const xt = x.bytes.toString('utf8');
259
- const yt = y.bytes.toString('utf8');
260
- // Denormals: ClickHouse renders them as the strings "nan" / "inf" / "-inf".
261
- if (denormal(xt) !== '' || denormal(yt) !== '') {
262
- return denormal(xt) === denormal(yt);
263
- }
264
- const ra = parseRational(xt);
265
- const rb = parseRational(yt);
266
- if (ra === null || rb === null)
267
- return false;
268
- return ra.num * rb.den === rb.num * ra.den;
269
- }
270
- /** Mirrors the arbiter's `_severity`. */
271
- function severity(a, b) {
272
- if (isNumericValue(a) && isNumericValue(b))
273
- return Reason.LossyNumeric;
274
- if (a.kind === 'null' && b.kind !== 'null')
275
- return Reason.NullToDefault; // the arbiter's `null_filled`
276
- if (a.kind !== 'null' && b.kind === 'null')
277
- return Reason.NullLoss;
278
- const x = scalarText(a);
279
- const y = scalarText(b);
280
- if (x.isString && y.isString) {
281
- if (dateish(x.text) && dateish(y.text)) {
282
- return x.text.slice(0, 10) !== y.text.slice(0, 10) ? Reason.DateShift : Reason.Reformat;
283
- }
284
- if (x.text !== '' && y.text === '')
285
- return Reason.Emptied;
286
- return Reason.Reformat;
287
- }
288
- if (y.isString && denormal(y.text) !== '')
289
- return Reason.LossyNumeric;
290
- return Reason.Reformat;
291
- }
292
- /**
293
- * Compare JSON shape recursively. Two values can be equal by `sameValue` and
294
- * still differ in type somewhere inside — `[{"a": 1}]` stored as `[{"a": "1"}]`
295
- * is the same data with a different wire type, which a subscriber reading the
296
- * preview would see and the table would not have.
297
- */
298
- function sameKindDeep(a, b) {
299
- if (a.kind !== b.kind)
300
- return false;
301
- // Two strings that are "equal" only after denormal folding are still a visible
302
- // change: the row said "NaN" and the table holds "nan".
303
- if (a.kind === 'string')
304
- return a.bytes.equals(b.bytes);
305
- if (a.kind === 'array') {
306
- if (a.items.length !== b.items.length)
307
- return false;
308
- return a.items.every((x, i) => sameKindDeep(x, b.items[i]));
309
- }
310
- if (a.kind === 'object') {
311
- const am = membersOf(a);
312
- const bm = membersOf(b);
313
- if (am.size !== bm.size)
314
- return false;
315
- for (const [k, av] of am) {
316
- const bv = bm.get(k);
317
- if (bv === undefined || !sameKindDeep(av, bv))
318
- return false;
319
- }
320
- return true;
321
- }
322
- return true;
323
- }
324
- function dateish(s) {
325
- if (s.length < 10)
326
- return false;
327
- for (let i = 0; i < 10; i++) {
328
- const c = s[i];
329
- if (i === 4 || i === 7) {
330
- if (c !== '-')
331
- return false;
332
- }
333
- else if (c < '0' || c > '9') {
334
- return false;
335
- }
336
- }
337
- return true;
338
- }
339
- // ---------------------------------------------------------- reference type
340
- function reasonFor(base, stored, ref) {
341
- if (base.startsWith('Enum'))
342
- return Reason.EnumCoerce;
343
- if (base.startsWith('Array') || base.startsWith('Tuple') || base.startsWith('Map')) {
344
- return Reason.ElementChanged;
345
- }
346
- if (base.startsWith('Decimal')) {
347
- return trimQuotes(ref).startsWith(trimQuotes(stored)) ? Reason.DecimalTruncate : Reason.OverflowWrap;
348
- }
349
- if (base.startsWith('DateTime'))
350
- return Reason.DateTimeWrap;
351
- if (base.startsWith('Date'))
352
- return Reason.DateClamp;
353
- // Time / Time64 (25.8+): the same truncation mechanism as DateTime64 —
354
- // sub-second ticks at the declared scale, whole seconds in Time.
355
- if (base.startsWith('Time'))
356
- return Reason.DateTimeWrap;
357
- if (base === 'UUID')
358
- return Reason.UuidMangle;
359
- if (base === 'IPv4' || base === 'IPv6')
360
- return Reason.IpMangle;
361
- if (base === 'Float32' || base === 'Float64' || base === 'BFloat16')
362
- return Reason.FloatPrecision;
363
- if (base.startsWith('FixedString'))
364
- return Reason.FixedStringPad;
365
- if (isIntFamily(base))
366
- return Reason.OverflowWrap;
367
- return Reason.ValueChanged;
368
- }
369
- function isIntFamily(base) {
370
- return base.startsWith('UInt') || base.startsWith('Int') || base === 'Bool';
371
- }
372
- /**
373
- * Whether two ClickHouse renderings mean the same value. Only formatting
374
- * differences are collapsed — anything else is a real change.
375
- *
376
- * Identity is decided on the bytes: a `FixedString` padded from `0xff` to
377
- * `0xff 0x00 0x00` is two different values that decode to the same lossy text,
378
- * and calling those equivalent would drop a real `fixedstring_pad`.
379
- */
380
- function equivalent(base, storedBytes, refBytes) {
381
- if (storedBytes.equals(refBytes))
382
- return true;
383
- const stored = storedBytes.toString('utf8');
384
- const ref = refBytes.toString('utf8');
385
- // Bool renders as true/false; its Int256 reference renders as 1/0.
386
- if (base === 'Bool')
387
- return boolNorm(stored) === boolNorm(ref);
388
- // DateTime64 references widen the scale: ".123" vs ".123000000" — and so
389
- // do Time64's (Time/Time64 arrived in 25.8; same rendering shape).
390
- if (base.startsWith('DateTime') || base.startsWith('Time'))
391
- return trimFrac(stored) === trimFrac(ref);
392
- // Decimal references widen the scale: "2.50" vs "2.5000000".
393
- if (base.startsWith('Decimal') || isIntFamily(base) || base === 'Float32' || base === 'Float64' || base === 'BFloat16') {
394
- return numEqual(stored, ref);
395
- }
396
- if (base.startsWith('Array') || base.startsWith('Tuple') || base.startsWith('Map')) {
397
- return compactJson(stored) === compactJson(ref) || numListEqual(stored, ref);
398
- }
399
- return false;
400
- }
401
- function boolNorm(s) {
402
- switch (s.replace(/^"|"$/g, '')) {
403
- case 'true':
404
- case '1':
405
- return '1';
406
- case 'false':
407
- case '0':
408
- return '0';
409
- default:
410
- return s;
411
- }
412
- }
413
- /**
414
- * Drop trailing zeros (and a bare dot) from a datetime's fractional part so
415
- * DateTime64(3) and its DateTime64(9) reference compare equal.
416
- */
417
- function trimFrac(s) {
418
- const i = s.lastIndexOf('.');
419
- if (i < 0)
420
- return s;
421
- let end = s.length;
422
- const quoted = end > 0 && s[end - 1] === '"';
423
- if (quoted)
424
- end--;
425
- const frac = s.slice(i + 1, end).replace(/0+$/, '');
426
- let out = s.slice(0, i);
427
- if (frac !== '')
428
- out += `.${frac}`;
429
- if (quoted)
430
- out += '"';
431
- return out;
432
- }
433
- /**
434
- * Compare two rendered containers element-wise as numbers, so [1,2] and
435
- * [1.000,2.000] agree while [1,0,3] and [1,256,3] do not.
436
- */
437
- function numListEqual(a, b) {
438
- const ta = tokenizeNums(a);
439
- const tb = tokenizeNums(b);
440
- if (ta.length !== tb.length || ta.length === 0)
441
- return false;
442
- for (let i = 0; i < ta.length; i++) {
443
- if (!numEqual(ta[i], tb[i]))
444
- return false;
445
- }
446
- return skeleton(a) === skeleton(b);
447
- }
448
- /** Pull the numeric literals out of a rendered container. */
449
- function tokenizeNums(s) {
450
- const out = [];
451
- let i = 0;
452
- while (i < s.length) {
453
- const c = s[i];
454
- if (c === '"') {
455
- i++;
456
- while (i < s.length && s[i] !== '"') {
457
- if (s[i] === '\\')
458
- i++;
459
- i++;
460
- }
461
- i++;
462
- continue;
463
- }
464
- if (c === '-' || c === '+' || (c >= '0' && c <= '9')) {
465
- let j = i + 1;
466
- while (j < s.length) {
467
- const d = s[j];
468
- if (d === '.' || d === 'e' || d === 'E' || d === '-' || d === '+' || (d >= '0' && d <= '9'))
469
- j++;
470
- else
471
- break;
472
- }
473
- out.push(s.slice(i, j));
474
- i = j;
475
- continue;
476
- }
477
- i++;
478
- }
479
- return out;
480
- }
481
- /**
482
- * Keep only structural punctuation, so two renderings that agree numerically but
483
- * differ in shape are still reported as different.
484
- */
485
- function skeleton(s) {
486
- let out = '';
487
- let inString = false;
488
- for (let i = 0; i < s.length; i++) {
489
- const c = s[i];
490
- if (inString) {
491
- if (c === '\\')
492
- i++;
493
- else if (c === '"') {
494
- inString = false;
495
- out += '"';
496
- }
497
- continue;
498
- }
499
- if (c === '"') {
500
- inString = true;
501
- out += '"';
502
- continue;
503
- }
504
- if ('[]{}(),:'.includes(c))
505
- out += c;
506
- }
507
- return out;
508
- }
509
- function compactJson(s) {
510
- let out = '';
511
- let inString = false;
512
- for (let i = 0; i < s.length; i++) {
513
- const c = s[i];
514
- if (inString) {
515
- out += c;
516
- if (c === '\\' && i + 1 < s.length) {
517
- i++;
518
- out += s[i];
519
- }
520
- else if (c === '"') {
521
- inString = false;
522
- }
523
- continue;
524
- }
525
- if (c === ' ' || c === '\t' || c === '\n' || c === '\r')
526
- continue;
527
- if (c === '"')
528
- inString = true;
529
- out += c;
530
- }
531
- return out;
532
- }
533
- //# sourceMappingURL=transform.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"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"}