qvdjs 2.0.0 → 2.0.2
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 +16 -16
- package/dist/index.cjs +295 -110
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +294 -109
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -38,7 +38,7 @@ files, and validate output in your own Qlik environment** before relying on it.
|
|
|
38
38
|
Qlik file and writing it back reproduces its symbol table byte for byte, whichever way it was read; a
|
|
39
39
|
value you change is written as Qlik stores that kind of value. Where that boundary lies is the first
|
|
40
40
|
thing worth reading:
|
|
41
|
-
[What a round trip preserves](https://qvdjs.ptarmiganlabs.com/
|
|
41
|
+
[What a round trip preserves](https://qvdjs.ptarmiganlabs.com/v2.0/overview/what-a-round-trip-preserves/).
|
|
42
42
|
|
|
43
43
|
## Checked against Qlik Sense
|
|
44
44
|
|
|
@@ -65,7 +65,7 @@ Two differences are by design: Qlik often gives a field more bits in the index t
|
|
|
65
65
|
where qvdjs uses the fewest, and qvdjs adds no tags or number formats of its own - Qlik works tags out
|
|
66
66
|
when it loads a file. QVD is also QlikView's format, but QlikView is not part of the comparison.
|
|
67
67
|
|
|
68
|
-
→ [Checked against Qlik Sense](https://qvdjs.ptarmiganlabs.com/
|
|
68
|
+
→ [Checked against Qlik Sense](https://qvdjs.ptarmiganlabs.com/v2.0/overview/checked-against-qlik-sense/)
|
|
69
69
|
|
|
70
70
|
## Four ways to open a file
|
|
71
71
|
|
|
@@ -107,7 +107,7 @@ Reaching for `fromQvd` when you wanted one of the other three is the common mist
|
|
|
107
107
|
`fromQvd(path, {maxRows: 0})` is **not** a substitute for `readMetadata`: it loads no rows but still
|
|
108
108
|
parses the whole symbol table, which grows with the data.
|
|
109
109
|
|
|
110
|
-
→ [Choosing an entry point](https://qvdjs.ptarmiganlabs.com/
|
|
110
|
+
→ [Choosing an entry point](https://qvdjs.ptarmiganlabs.com/v2.0/getting-started/)
|
|
111
111
|
|
|
112
112
|
## What a cell holds
|
|
113
113
|
|
|
@@ -171,7 +171,7 @@ NULL. A dual value - a `QvdDual`, or an object with exactly the keys `number` an
|
|
|
171
171
|
as a dual, which is how a number gets the text Qlik displays. As in Qlik, a field holds one text per
|
|
172
172
|
number, the first written. Anything else is refused with a `QvdValidationError`.
|
|
173
173
|
|
|
174
|
-
→ [Writing a QVD](https://qvdjs.ptarmiganlabs.com/
|
|
174
|
+
→ [Writing a QVD](https://qvdjs.ptarmiganlabs.com/v2.0/guides/)
|
|
175
175
|
|
|
176
176
|
## Reading part of a file
|
|
177
177
|
|
|
@@ -211,7 +211,7 @@ try {
|
|
|
211
211
|
When it is `iterate()` that overflowed, the context carries `recommendedChunkSize` as well, so a
|
|
212
212
|
caller cannot mistake one recommendation for the other.
|
|
213
213
|
|
|
214
|
-
→ [Memory and file size limits](https://qvdjs.ptarmiganlabs.com/
|
|
214
|
+
→ [Memory and file size limits](https://qvdjs.ptarmiganlabs.com/v2.0/overview/memory-and-file-size-limits/)
|
|
215
215
|
|
|
216
216
|
## Metadata
|
|
217
217
|
|
|
@@ -228,7 +228,7 @@ df.setFileMetadata({tableName: 'UpdatedProducts'});
|
|
|
228
228
|
await df.toQvd('products-v2.qvd');
|
|
229
229
|
```
|
|
230
230
|
|
|
231
|
-
→ [Metadata reference](https://qvdjs.ptarmiganlabs.com/
|
|
231
|
+
→ [Metadata reference](https://qvdjs.ptarmiganlabs.com/v2.0/reference/)
|
|
232
232
|
|
|
233
233
|
## File paths are sandboxed
|
|
234
234
|
|
|
@@ -252,7 +252,7 @@ is a different file at that name. Either is a `QvdSecurityError` whose `context.
|
|
|
252
252
|
swapped for a symlink in the moment between the check and the open — is the one gap left, so keep
|
|
253
253
|
the allowed directory's own subdirectories out of untrusted hands.
|
|
254
254
|
|
|
255
|
-
→ [Path security](https://qvdjs.ptarmiganlabs.com/
|
|
255
|
+
→ [Path security](https://qvdjs.ptarmiganlabs.com/v2.0/overview/path-security/)
|
|
256
256
|
|
|
257
257
|
## Errors
|
|
258
258
|
|
|
@@ -273,7 +273,7 @@ without reporting an error; `error.context.filePosition` says where the file sto
|
|
|
273
273
|
`error.name` is always the class name, in the CommonJS and ES module builds alike, so it works across
|
|
274
274
|
a module boundary where `instanceof` may not.
|
|
275
275
|
|
|
276
|
-
→ [Troubleshooting](https://qvdjs.ptarmiganlabs.com/
|
|
276
|
+
→ [Troubleshooting](https://qvdjs.ptarmiganlabs.com/v2.0/troubleshooting/)
|
|
277
277
|
|
|
278
278
|
## Known limitations
|
|
279
279
|
|
|
@@ -286,7 +286,7 @@ Honest boundaries rather than an issue list — these are the ones that change w
|
|
|
286
286
|
| **A killed process can leave a temporary file** | A write builds `<name>.qvdjs-<hex>.tmp` beside the QVD and removes it however the write ends — unless the process is killed outright, or the removal is itself refused, in which case the error names the file in `context.temporaryFile`. The QVD is untouched either way, and such a file can be deleted. `{atomic: false}` writes none when it rewrites a QVD that exists, and damages the QVD instead; a QVD that does not exist yet is renamed into place in either mode. |
|
|
287
287
|
| **The writer takes numbers, strings, dual values and `null`** | Anything else - a `Date`, a boolean, an array, a `QvdSymbol` - is refused with a `QvdValidationError` naming the field and the row. Convert first: a `Date` to `new QvdDual(dateToQlikSerial(date), text)`, the serial and the text Qlik shows, which is how Qlik stores a date; a boolean to `-1` and `0`, as a Qlik comparison stores it. |
|
|
288
288
|
|
|
289
|
-
→ [What a round trip preserves](https://qvdjs.ptarmiganlabs.com/
|
|
289
|
+
→ [What a round trip preserves](https://qvdjs.ptarmiganlabs.com/v2.0/overview/what-a-round-trip-preserves/)
|
|
290
290
|
|
|
291
291
|
## Documentation
|
|
292
292
|
|
|
@@ -295,13 +295,13 @@ where everything above is covered properly:
|
|
|
295
295
|
|
|
296
296
|
| | |
|
|
297
297
|
| ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
|
|
298
|
-
| [Getting started](https://qvdjs.ptarmiganlabs.com/
|
|
299
|
-
| [Guides](https://qvdjs.ptarmiganlabs.com/
|
|
300
|
-
| [Concepts](https://qvdjs.ptarmiganlabs.com/
|
|
301
|
-
| [Reference](https://qvdjs.ptarmiganlabs.com/
|
|
302
|
-
| [Performance](https://qvdjs.ptarmiganlabs.com/
|
|
303
|
-
| [Troubleshooting](https://qvdjs.ptarmiganlabs.com/
|
|
304
|
-
| [Checked against Qlik Sense](https://qvdjs.ptarmiganlabs.com/
|
|
298
|
+
| [Getting started](https://qvdjs.ptarmiganlabs.com/v2.0/getting-started/) | Install, choose an entry point, first read and write |
|
|
299
|
+
| [Guides](https://qvdjs.ptarmiganlabs.com/v2.0/guides/) | One page per task, runnable sample code |
|
|
300
|
+
| [Concepts](https://qvdjs.ptarmiganlabs.com/v2.0/concepts/) | The QVD format, symbols and duals, bit stuffing, the memory model |
|
|
301
|
+
| [Reference](https://qvdjs.ptarmiganlabs.com/v2.0/reference/) | Every class, method, option and error |
|
|
302
|
+
| [Performance](https://qvdjs.ptarmiganlabs.com/v2.0/performance/) | Measured baselines, and how to read them |
|
|
303
|
+
| [Troubleshooting](https://qvdjs.ptarmiganlabs.com/v2.0/troubleshooting/) | What each failure means, and what to do about it |
|
|
304
|
+
| [Checked against Qlik Sense](https://qvdjs.ptarmiganlabs.com/v2.0/overview/checked-against-qlik-sense/) | How qvdjs's output is compared with Qlik Sense's |
|
|
305
305
|
|
|
306
306
|
Benchmarks run weekly and publish to
|
|
307
307
|
[ptarmiganlabs.github.io/qvdjs](https://ptarmiganlabs.github.io/qvdjs/).
|