sensemaking 0.19.0 → 0.19.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/dist/cjs/index.d.cts +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/store/duckdb/fieldStats.js +87 -10
- package/dist/cjs/store/duckdb/fieldStats.js.map +1 -1
- package/dist/cjs/store/duckdb/open.js +3 -2
- package/dist/cjs/store/duckdb/open.js.map +1 -1
- package/dist/cjs/store/duckdb/reconcile.d.cts +2 -6
- package/dist/cjs/store/duckdb/reconcile.d.ts +2 -6
- package/dist/cjs/store/duckdb/reconcile.js +41 -581
- package/dist/cjs/store/duckdb/reconcile.js.map +1 -1
- package/dist/cjs/store/duckdb/store.js +5 -3
- package/dist/cjs/store/duckdb/store.js.map +1 -1
- package/dist/cjs/store/index.d.cts +1 -0
- package/dist/cjs/store/index.d.ts +1 -0
- package/dist/cjs/store/index.js +4 -0
- package/dist/cjs/store/index.js.map +1 -1
- package/dist/cjs/store/reconcile.d.cts +6 -0
- package/dist/cjs/store/reconcile.d.ts +6 -0
- package/dist/cjs/store/reconcile.js +750 -0
- package/dist/cjs/store/reconcile.js.map +1 -0
- package/dist/cjs/store/shared.d.cts +1 -0
- package/dist/cjs/store/shared.d.ts +1 -0
- package/dist/cjs/store/shared.js +37 -0
- package/dist/cjs/store/shared.js.map +1 -1
- package/dist/cjs/store/sqlite/connection.js +1 -1
- package/dist/cjs/store/sqlite/connection.js.map +1 -1
- package/dist/cjs/store/sqlite/open.js +33 -11
- package/dist/cjs/store/sqlite/open.js.map +1 -1
- package/dist/cjs/store/sqlite/reconcile.d.cts +5 -10
- package/dist/cjs/store/sqlite/reconcile.d.ts +5 -10
- package/dist/cjs/store/sqlite/reconcile.js +48 -840
- package/dist/cjs/store/sqlite/reconcile.js.map +1 -1
- package/dist/cjs/store/sqlite/signature.d.cts +6 -0
- package/dist/cjs/store/sqlite/signature.d.ts +6 -0
- package/dist/cjs/store/sqlite/signature.js +380 -0
- package/dist/cjs/store/sqlite/signature.js.map +1 -0
- package/dist/cjs/store/sqlite/store.js +5 -3
- package/dist/cjs/store/sqlite/store.js.map +1 -1
- package/dist/cjs/store/transaction.d.cts +2 -1
- package/dist/cjs/store/transaction.d.ts +2 -1
- package/dist/cjs/store/transaction.js +16 -6
- package/dist/cjs/store/transaction.js.map +1 -1
- package/dist/cjs/store/turso/connection.js +1 -1
- package/dist/cjs/store/turso/connection.js.map +1 -1
- package/dist/cjs/store/turso/open.d.cts +2 -0
- package/dist/cjs/store/turso/open.d.ts +2 -0
- package/dist/cjs/store/turso/open.js +115 -57
- package/dist/cjs/store/turso/open.js.map +1 -1
- package/dist/cjs/store/turso/reconcile.d.cts +3 -6
- package/dist/cjs/store/turso/reconcile.d.ts +3 -6
- package/dist/cjs/store/turso/reconcile.js +159 -596
- package/dist/cjs/store/turso/reconcile.js.map +1 -1
- package/dist/cjs/store/turso/store.js +3 -2
- package/dist/cjs/store/turso/store.js.map +1 -1
- package/dist/cjs/store/types.d.cts +12 -2
- package/dist/cjs/store/types.d.ts +12 -2
- package/dist/cjs/store/types.js +14 -0
- package/dist/cjs/store/types.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/store/duckdb/fieldStats.js +32 -19
- package/dist/esm/store/duckdb/fieldStats.js.map +1 -1
- package/dist/esm/store/duckdb/open.js +3 -2
- package/dist/esm/store/duckdb/open.js.map +1 -1
- package/dist/esm/store/duckdb/reconcile.d.ts +2 -6
- package/dist/esm/store/duckdb/reconcile.js +20 -117
- package/dist/esm/store/duckdb/reconcile.js.map +1 -1
- package/dist/esm/store/duckdb/store.js +5 -3
- package/dist/esm/store/duckdb/store.js.map +1 -1
- package/dist/esm/store/index.d.ts +1 -0
- package/dist/esm/store/index.js +1 -0
- package/dist/esm/store/index.js.map +1 -1
- package/dist/esm/store/reconcile.d.ts +6 -0
- package/dist/esm/store/reconcile.js +130 -0
- package/dist/esm/store/reconcile.js.map +1 -0
- package/dist/esm/store/shared.d.ts +1 -0
- package/dist/esm/store/shared.js +9 -0
- package/dist/esm/store/shared.js.map +1 -1
- package/dist/esm/store/sqlite/connection.js +2 -2
- package/dist/esm/store/sqlite/connection.js.map +1 -1
- package/dist/esm/store/sqlite/open.js +28 -8
- package/dist/esm/store/sqlite/open.js.map +1 -1
- package/dist/esm/store/sqlite/reconcile.d.ts +5 -10
- package/dist/esm/store/sqlite/reconcile.js +31 -198
- package/dist/esm/store/sqlite/reconcile.js.map +1 -1
- package/dist/esm/store/sqlite/signature.d.ts +6 -0
- package/dist/esm/store/sqlite/signature.js +58 -0
- package/dist/esm/store/sqlite/signature.js.map +1 -0
- package/dist/esm/store/sqlite/store.js +5 -3
- package/dist/esm/store/sqlite/store.js.map +1 -1
- package/dist/esm/store/transaction.d.ts +2 -1
- package/dist/esm/store/transaction.js +11 -6
- package/dist/esm/store/transaction.js.map +1 -1
- package/dist/esm/store/turso/connection.js +2 -2
- package/dist/esm/store/turso/connection.js.map +1 -1
- package/dist/esm/store/turso/open.d.ts +2 -0
- package/dist/esm/store/turso/open.js +14 -4
- package/dist/esm/store/turso/open.js.map +1 -1
- package/dist/esm/store/turso/reconcile.d.ts +3 -6
- package/dist/esm/store/turso/reconcile.js +31 -132
- package/dist/esm/store/turso/reconcile.js.map +1 -1
- package/dist/esm/store/turso/store.js +3 -2
- package/dist/esm/store/turso/store.js.map +1 -1
- package/dist/esm/store/types.d.ts +12 -2
- package/dist/esm/store/types.js +12 -1
- package/dist/esm/store/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,750 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "reconcile", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return reconcile;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _indexts = require("../features/index.js");
|
|
12
|
+
var _progressts = require("../output/progress.js");
|
|
13
|
+
var _indexts1 = require("../scan/index.js");
|
|
14
|
+
var _reparsets = require("../scan/reparse.js");
|
|
15
|
+
var _sharedts = require("./shared.js");
|
|
16
|
+
var _transactionts = require("./transaction.js");
|
|
17
|
+
function _array_like_to_array(arr, len) {
|
|
18
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
19
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
20
|
+
return arr2;
|
|
21
|
+
}
|
|
22
|
+
function _array_without_holes(arr) {
|
|
23
|
+
if (Array.isArray(arr)) return _array_like_to_array(arr);
|
|
24
|
+
}
|
|
25
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
26
|
+
try {
|
|
27
|
+
var info = gen[key](arg);
|
|
28
|
+
var value = info.value;
|
|
29
|
+
} catch (error) {
|
|
30
|
+
reject(error);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (info.done) resolve(value);
|
|
34
|
+
else Promise.resolve(value).then(_next, _throw);
|
|
35
|
+
}
|
|
36
|
+
function _async_to_generator(fn) {
|
|
37
|
+
return function() {
|
|
38
|
+
var self = this, args = arguments;
|
|
39
|
+
return new Promise(function(resolve, reject) {
|
|
40
|
+
var gen = fn.apply(self, args);
|
|
41
|
+
function _next(value) {
|
|
42
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
43
|
+
}
|
|
44
|
+
function _throw(err) {
|
|
45
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
46
|
+
}
|
|
47
|
+
_next(undefined);
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function _iterable_to_array(iter) {
|
|
52
|
+
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
|
|
53
|
+
return Array.from(iter);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function _non_iterable_spread() {
|
|
57
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
58
|
+
}
|
|
59
|
+
function _to_consumable_array(arr) {
|
|
60
|
+
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
61
|
+
}
|
|
62
|
+
function _ts_generator(thisArg, body) {
|
|
63
|
+
var f, y, t, _ = {
|
|
64
|
+
label: 0,
|
|
65
|
+
sent: function() {
|
|
66
|
+
if (t[0] & 1) throw t[1];
|
|
67
|
+
return t[1];
|
|
68
|
+
},
|
|
69
|
+
trys: [],
|
|
70
|
+
ops: []
|
|
71
|
+
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
|
|
72
|
+
return d(g, "next", {
|
|
73
|
+
value: verb(0)
|
|
74
|
+
}), d(g, "throw", {
|
|
75
|
+
value: verb(1)
|
|
76
|
+
}), d(g, "return", {
|
|
77
|
+
value: verb(2)
|
|
78
|
+
}), typeof Symbol === "function" && d(g, Symbol.iterator, {
|
|
79
|
+
value: function() {
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
}), g;
|
|
83
|
+
function verb(n) {
|
|
84
|
+
return function(v) {
|
|
85
|
+
return step([
|
|
86
|
+
n,
|
|
87
|
+
v
|
|
88
|
+
]);
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function step(op) {
|
|
92
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
93
|
+
while(g && (g = 0, op[0] && (_ = 0)), _)try {
|
|
94
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
95
|
+
if (y = 0, t) op = [
|
|
96
|
+
op[0] & 2,
|
|
97
|
+
t.value
|
|
98
|
+
];
|
|
99
|
+
switch(op[0]){
|
|
100
|
+
case 0:
|
|
101
|
+
case 1:
|
|
102
|
+
t = op;
|
|
103
|
+
break;
|
|
104
|
+
case 4:
|
|
105
|
+
_.label++;
|
|
106
|
+
return {
|
|
107
|
+
value: op[1],
|
|
108
|
+
done: false
|
|
109
|
+
};
|
|
110
|
+
case 5:
|
|
111
|
+
_.label++;
|
|
112
|
+
y = op[1];
|
|
113
|
+
op = [
|
|
114
|
+
0
|
|
115
|
+
];
|
|
116
|
+
continue;
|
|
117
|
+
case 7:
|
|
118
|
+
op = _.ops.pop();
|
|
119
|
+
_.trys.pop();
|
|
120
|
+
continue;
|
|
121
|
+
default:
|
|
122
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
123
|
+
_ = 0;
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
127
|
+
_.label = op[1];
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
131
|
+
_.label = t[1];
|
|
132
|
+
t = op;
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
if (t && _.label < t[2]) {
|
|
136
|
+
_.label = t[2];
|
|
137
|
+
_.ops.push(op);
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
if (t[2]) _.ops.pop();
|
|
141
|
+
_.trys.pop();
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
op = body.call(thisArg, _);
|
|
145
|
+
} catch (e) {
|
|
146
|
+
op = [
|
|
147
|
+
6,
|
|
148
|
+
e
|
|
149
|
+
];
|
|
150
|
+
y = 0;
|
|
151
|
+
} finally{
|
|
152
|
+
f = t = 0;
|
|
153
|
+
}
|
|
154
|
+
if (op[0] & 5) throw op[1];
|
|
155
|
+
return {
|
|
156
|
+
value: op[0] ? op[1] : void 0,
|
|
157
|
+
done: true
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function _ts_values(o) {
|
|
162
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
163
|
+
if (m) {
|
|
164
|
+
return m.call(o);
|
|
165
|
+
}
|
|
166
|
+
if (o && typeof o.length === "number") {
|
|
167
|
+
return {
|
|
168
|
+
next: function() {
|
|
169
|
+
if (o && i >= o.length) {
|
|
170
|
+
o = void 0;
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
value: o && o[i++],
|
|
174
|
+
done: !o
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
180
|
+
}
|
|
181
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
182
|
+
if (!o) return;
|
|
183
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
184
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
185
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
186
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
187
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
188
|
+
}
|
|
189
|
+
// One reconcile algorithm shared by every store, parameterised by a per-engine ReconcileDialect
|
|
190
|
+
// (types.ts). Ordering is universal, not a dialect concern: ALTER, then the frontmatter upsert,
|
|
191
|
+
// then reconcileContent, then preset_files, then the vanished-frontmatter delete, then feature hooks
|
|
192
|
+
// -- a vanished path's content delete (inside reconcileContent) must precede its frontmatter
|
|
193
|
+
// delete, since sqlite's delete SQL resolves the row via its frontmatter rowid.
|
|
194
|
+
// Feature-owned columns (`_rank`) must stay out of the upsert: a reparse would null the last
|
|
195
|
+
// computed value on every touch, not just the reconciles that recompute it.
|
|
196
|
+
var CORE_FRONTMATTER_COLUMNS = new Set([
|
|
197
|
+
'path',
|
|
198
|
+
'_mtime',
|
|
199
|
+
'_ctime',
|
|
200
|
+
'_size',
|
|
201
|
+
'_parse_error'
|
|
202
|
+
]);
|
|
203
|
+
function reconcile(conn, cfg, baseDir, dialect) {
|
|
204
|
+
return _async_to_generator(function() {
|
|
205
|
+
var files, currentSet, existingStmt, existingRows, existing, vanished, toReparse, features, seenColumns, report, _ref, parsedDocs, warnings, newColumns, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, col, allColumns, writableColumns, insertSql, added, delta, addedSet, reparsedExisting, touched, txStart, durationMs;
|
|
206
|
+
return _ts_generator(this, function(_state) {
|
|
207
|
+
switch(_state.label){
|
|
208
|
+
case 0:
|
|
209
|
+
files = (0, _indexts1.listFiles)(cfg, baseDir);
|
|
210
|
+
currentSet = new Set(files.map(function(f) {
|
|
211
|
+
return f.relPath;
|
|
212
|
+
}));
|
|
213
|
+
return [
|
|
214
|
+
4,
|
|
215
|
+
conn.prepare('SELECT "path", "_mtime", "_size" FROM frontmatter')
|
|
216
|
+
];
|
|
217
|
+
case 1:
|
|
218
|
+
existingStmt = _state.sent();
|
|
219
|
+
return [
|
|
220
|
+
4,
|
|
221
|
+
existingStmt.all()
|
|
222
|
+
];
|
|
223
|
+
case 2:
|
|
224
|
+
existingRows = _state.sent();
|
|
225
|
+
existing = new Map(existingRows.map(function(r) {
|
|
226
|
+
return [
|
|
227
|
+
r.path,
|
|
228
|
+
r
|
|
229
|
+
];
|
|
230
|
+
}));
|
|
231
|
+
vanished = existingRows.filter(function(r) {
|
|
232
|
+
return !currentSet.has(r.path);
|
|
233
|
+
}).map(function(r) {
|
|
234
|
+
return r.path;
|
|
235
|
+
});
|
|
236
|
+
toReparse = files.filter(function(f) {
|
|
237
|
+
var row = existing.get(f.relPath);
|
|
238
|
+
return !row || row._mtime !== f.mtimeMs || row._size !== f.size;
|
|
239
|
+
});
|
|
240
|
+
if (vanished.length === 0 && toReparse.length === 0) return [
|
|
241
|
+
2,
|
|
242
|
+
{
|
|
243
|
+
parsed: 0,
|
|
244
|
+
warnings: []
|
|
245
|
+
}
|
|
246
|
+
];
|
|
247
|
+
features = (0, _indexts.activeFeatures)(cfg);
|
|
248
|
+
return [
|
|
249
|
+
4,
|
|
250
|
+
(0, _sharedts.getColumns)(conn)
|
|
251
|
+
];
|
|
252
|
+
case 3:
|
|
253
|
+
seenColumns = _state.sent();
|
|
254
|
+
// Bulk reparses (a sync, a cold build) are the long silences a query can hit; short
|
|
255
|
+
// reconciles stay silent (progress() has a threshold).
|
|
256
|
+
report = (0, _progressts.progress)('reparsing files', toReparse.length);
|
|
257
|
+
return [
|
|
258
|
+
4,
|
|
259
|
+
(0, _reparsets.reparseFiles)(toReparse, features, cfg, seenColumns, report.tick)
|
|
260
|
+
];
|
|
261
|
+
case 4:
|
|
262
|
+
_ref = _state.sent(), parsedDocs = _ref.docs, warnings = _ref.warnings, newColumns = _ref.newColumns;
|
|
263
|
+
report.finish();
|
|
264
|
+
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
265
|
+
try {
|
|
266
|
+
for(_iterator = newColumns[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
267
|
+
col = _step.value;
|
|
268
|
+
seenColumns.add(col);
|
|
269
|
+
}
|
|
270
|
+
} catch (err) {
|
|
271
|
+
_didIteratorError = true;
|
|
272
|
+
_iteratorError = err;
|
|
273
|
+
} finally{
|
|
274
|
+
try {
|
|
275
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
276
|
+
_iterator.return();
|
|
277
|
+
}
|
|
278
|
+
} finally{
|
|
279
|
+
if (_didIteratorError) {
|
|
280
|
+
throw _iteratorError;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
allColumns = _to_consumable_array(seenColumns);
|
|
285
|
+
// Fence before ALTERing: a store's own failure past this point is a raw, engine-specific
|
|
286
|
+
// error with no indication of the boundary or the levers -- dialect.checkColumnLimit names both.
|
|
287
|
+
dialect.checkColumnLimit(allColumns.length);
|
|
288
|
+
// Columns the frontmatter upsert actually writes: core + parsed frontmatter keys, never a
|
|
289
|
+
// feature-owned reserved column (see CORE_FRONTMATTER_COLUMNS above).
|
|
290
|
+
writableColumns = allColumns.filter(function(c) {
|
|
291
|
+
return CORE_FRONTMATTER_COLUMNS.has(c) || !_indexts1.RESERVED_COLUMNS.has(c);
|
|
292
|
+
});
|
|
293
|
+
// ON CONFLICT DO UPDATE (not OR REPLACE) keeps the row's rowid stable across reparses --
|
|
294
|
+
// sqlite's content rows are coupled to that rowid.
|
|
295
|
+
insertSql = "INSERT INTO frontmatter (".concat(writableColumns.map(_sharedts.quoteIdent).join(', '), ") VALUES (").concat(writableColumns.map(function() {
|
|
296
|
+
return '?';
|
|
297
|
+
}).join(', '), ') ON CONFLICT("path") DO UPDATE SET ').concat(writableColumns.filter(function(c) {
|
|
298
|
+
return c !== 'path';
|
|
299
|
+
}).map(function(c) {
|
|
300
|
+
return "".concat((0, _sharedts.quoteIdent)(c), " = excluded.").concat((0, _sharedts.quoteIdent)(c));
|
|
301
|
+
}).join(', '));
|
|
302
|
+
added = toReparse.filter(function(f) {
|
|
303
|
+
return !existing.has(f.relPath);
|
|
304
|
+
}).map(function(f) {
|
|
305
|
+
return f.relPath;
|
|
306
|
+
});
|
|
307
|
+
delta = {
|
|
308
|
+
files: files,
|
|
309
|
+
reparsed: parsedDocs.map(function(d) {
|
|
310
|
+
return d.relPath;
|
|
311
|
+
}),
|
|
312
|
+
added: added,
|
|
313
|
+
vanished: vanished
|
|
314
|
+
};
|
|
315
|
+
addedSet = new Set(added);
|
|
316
|
+
reparsedExisting = parsedDocs.map(function(d) {
|
|
317
|
+
return d.relPath;
|
|
318
|
+
}).filter(function(p) {
|
|
319
|
+
return !addedSet.has(p);
|
|
320
|
+
});
|
|
321
|
+
// Paths whose content (and, per feature, other rows) need clearing: gone entirely, or about to
|
|
322
|
+
// be reinserted fresh. Disjoint from `added`, which has nothing to clear.
|
|
323
|
+
touched = _to_consumable_array(vanished).concat(_to_consumable_array(reparsedExisting));
|
|
324
|
+
txStart = Date.now();
|
|
325
|
+
return [
|
|
326
|
+
4,
|
|
327
|
+
(0, _transactionts.withTransaction)(conn, function() {
|
|
328
|
+
return _async_to_generator(function() {
|
|
329
|
+
var _feature_remove, _feature_afterReconcile, present, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, col, err, rows, presetRows, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator1, _step1, doc, _iterator2, _step2, presetName, _iteratorNormalCompletion3, _didIteratorError3, _iteratorError3, _iterator3, _step3, feature, err, _iteratorNormalCompletion4, _didIteratorError4, _iteratorError4, _loop, _iterator4, _step4, err, _iteratorNormalCompletion5, _didIteratorError5, _iteratorError5, _iterator5, _step5, feature1, err;
|
|
330
|
+
return _ts_generator(this, function(_state) {
|
|
331
|
+
switch(_state.label){
|
|
332
|
+
case 0:
|
|
333
|
+
return [
|
|
334
|
+
4,
|
|
335
|
+
(0, _sharedts.getColumns)(conn)
|
|
336
|
+
];
|
|
337
|
+
case 1:
|
|
338
|
+
present = _state.sent();
|
|
339
|
+
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
340
|
+
_state.label = 2;
|
|
341
|
+
case 2:
|
|
342
|
+
_state.trys.push([
|
|
343
|
+
2,
|
|
344
|
+
7,
|
|
345
|
+
8,
|
|
346
|
+
9
|
|
347
|
+
]);
|
|
348
|
+
_iterator = newColumns[Symbol.iterator]();
|
|
349
|
+
_state.label = 3;
|
|
350
|
+
case 3:
|
|
351
|
+
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
|
|
352
|
+
3,
|
|
353
|
+
6
|
|
354
|
+
];
|
|
355
|
+
col = _step.value;
|
|
356
|
+
if (!!present.has(col)) return [
|
|
357
|
+
3,
|
|
358
|
+
5
|
|
359
|
+
];
|
|
360
|
+
return [
|
|
361
|
+
4,
|
|
362
|
+
conn.exec("ALTER TABLE frontmatter ADD COLUMN ".concat((0, _sharedts.quoteIdent)(col)).concat(dialect.columnTypeSuffix()))
|
|
363
|
+
];
|
|
364
|
+
case 4:
|
|
365
|
+
_state.sent();
|
|
366
|
+
_state.label = 5;
|
|
367
|
+
case 5:
|
|
368
|
+
_iteratorNormalCompletion = true;
|
|
369
|
+
return [
|
|
370
|
+
3,
|
|
371
|
+
3
|
|
372
|
+
];
|
|
373
|
+
case 6:
|
|
374
|
+
return [
|
|
375
|
+
3,
|
|
376
|
+
9
|
|
377
|
+
];
|
|
378
|
+
case 7:
|
|
379
|
+
err = _state.sent();
|
|
380
|
+
_didIteratorError = true;
|
|
381
|
+
_iteratorError = err;
|
|
382
|
+
return [
|
|
383
|
+
3,
|
|
384
|
+
9
|
|
385
|
+
];
|
|
386
|
+
case 8:
|
|
387
|
+
try {
|
|
388
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
389
|
+
_iterator.return();
|
|
390
|
+
}
|
|
391
|
+
} finally{
|
|
392
|
+
if (_didIteratorError) {
|
|
393
|
+
throw _iteratorError;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
return [
|
|
397
|
+
7
|
|
398
|
+
];
|
|
399
|
+
case 9:
|
|
400
|
+
if (!(parsedDocs.length > 0)) return [
|
|
401
|
+
3,
|
|
402
|
+
11
|
|
403
|
+
];
|
|
404
|
+
rows = parsedDocs.map(function(doc) {
|
|
405
|
+
return writableColumns.map(function(col) {
|
|
406
|
+
var _doc_data_col;
|
|
407
|
+
if (col === 'path') return doc.relPath;
|
|
408
|
+
if (col === '_mtime') return doc.mtimeMs;
|
|
409
|
+
if (col === '_ctime') return doc.ctimeMs;
|
|
410
|
+
if (col === '_size') return doc.size;
|
|
411
|
+
// Written per parse, unlike _rank, which a feature pass owns and the upsert skips.
|
|
412
|
+
if (col === '_parse_error') return doc.parseError;
|
|
413
|
+
return (_doc_data_col = doc.data[col]) !== null && _doc_data_col !== void 0 ? _doc_data_col : null;
|
|
414
|
+
});
|
|
415
|
+
});
|
|
416
|
+
return [
|
|
417
|
+
4,
|
|
418
|
+
conn.runBatch(insertSql, rows)
|
|
419
|
+
];
|
|
420
|
+
case 10:
|
|
421
|
+
_state.sent();
|
|
422
|
+
_state.label = 11;
|
|
423
|
+
case 11:
|
|
424
|
+
// After the upsert, so every doc already has the frontmatter row sqlite's content rowid
|
|
425
|
+
// couples to. ON CONFLICT DO UPDATE preserves that rowid, so a reparse keeps its identity.
|
|
426
|
+
return [
|
|
427
|
+
4,
|
|
428
|
+
dialect.reconcileContent(conn, touched, parsedDocs, delta, cfg)
|
|
429
|
+
];
|
|
430
|
+
case 12:
|
|
431
|
+
_state.sent();
|
|
432
|
+
if (!(touched.length > 0)) return [
|
|
433
|
+
3,
|
|
434
|
+
14
|
|
435
|
+
];
|
|
436
|
+
return [
|
|
437
|
+
4,
|
|
438
|
+
conn.runBatch('DELETE FROM preset_files WHERE "path" = ?', touched.map(function(p) {
|
|
439
|
+
return [
|
|
440
|
+
p
|
|
441
|
+
];
|
|
442
|
+
}))
|
|
443
|
+
];
|
|
444
|
+
case 13:
|
|
445
|
+
_state.sent();
|
|
446
|
+
_state.label = 14;
|
|
447
|
+
case 14:
|
|
448
|
+
presetRows = [];
|
|
449
|
+
_iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined, _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
|
|
450
|
+
try {
|
|
451
|
+
for(_iterator1 = parsedDocs[Symbol.iterator](); !(_iteratorNormalCompletion2 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion2 = true){
|
|
452
|
+
doc = _step1.value;
|
|
453
|
+
try {
|
|
454
|
+
for(_iterator2 = doc.presets[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion1 = true){
|
|
455
|
+
presetName = _step2.value;
|
|
456
|
+
presetRows.push([
|
|
457
|
+
doc.relPath,
|
|
458
|
+
presetName
|
|
459
|
+
]);
|
|
460
|
+
}
|
|
461
|
+
} catch (err) {
|
|
462
|
+
_didIteratorError1 = true;
|
|
463
|
+
_iteratorError1 = err;
|
|
464
|
+
} finally{
|
|
465
|
+
try {
|
|
466
|
+
if (!_iteratorNormalCompletion1 && _iterator2.return != null) {
|
|
467
|
+
_iterator2.return();
|
|
468
|
+
}
|
|
469
|
+
} finally{
|
|
470
|
+
if (_didIteratorError1) {
|
|
471
|
+
throw _iteratorError1;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
} catch (err) {
|
|
477
|
+
_didIteratorError2 = true;
|
|
478
|
+
_iteratorError2 = err;
|
|
479
|
+
} finally{
|
|
480
|
+
try {
|
|
481
|
+
if (!_iteratorNormalCompletion2 && _iterator1.return != null) {
|
|
482
|
+
_iterator1.return();
|
|
483
|
+
}
|
|
484
|
+
} finally{
|
|
485
|
+
if (_didIteratorError2) {
|
|
486
|
+
throw _iteratorError2;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
if (!(presetRows.length > 0)) return [
|
|
491
|
+
3,
|
|
492
|
+
16
|
|
493
|
+
];
|
|
494
|
+
return [
|
|
495
|
+
4,
|
|
496
|
+
conn.runBatch('INSERT INTO preset_files ("path", preset) VALUES (?, ?)', presetRows)
|
|
497
|
+
];
|
|
498
|
+
case 15:
|
|
499
|
+
_state.sent();
|
|
500
|
+
_state.label = 16;
|
|
501
|
+
case 16:
|
|
502
|
+
if (!(vanished.length > 0)) return [
|
|
503
|
+
3,
|
|
504
|
+
18
|
|
505
|
+
];
|
|
506
|
+
return [
|
|
507
|
+
4,
|
|
508
|
+
conn.runBatch('DELETE FROM frontmatter WHERE "path" = ?', vanished.map(function(p) {
|
|
509
|
+
return [
|
|
510
|
+
p
|
|
511
|
+
];
|
|
512
|
+
}))
|
|
513
|
+
];
|
|
514
|
+
case 17:
|
|
515
|
+
_state.sent();
|
|
516
|
+
_state.label = 18;
|
|
517
|
+
case 18:
|
|
518
|
+
_iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = undefined;
|
|
519
|
+
if (!(touched.length > 0)) return [
|
|
520
|
+
3,
|
|
521
|
+
26
|
|
522
|
+
];
|
|
523
|
+
_state.label = 19;
|
|
524
|
+
case 19:
|
|
525
|
+
_state.trys.push([
|
|
526
|
+
19,
|
|
527
|
+
24,
|
|
528
|
+
25,
|
|
529
|
+
26
|
|
530
|
+
]);
|
|
531
|
+
_iterator3 = features[Symbol.iterator]();
|
|
532
|
+
_state.label = 20;
|
|
533
|
+
case 20:
|
|
534
|
+
if (!!(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done)) return [
|
|
535
|
+
3,
|
|
536
|
+
23
|
|
537
|
+
];
|
|
538
|
+
feature = _step3.value;
|
|
539
|
+
return [
|
|
540
|
+
4,
|
|
541
|
+
(_feature_remove = feature.remove) === null || _feature_remove === void 0 ? void 0 : _feature_remove.call(feature, conn, touched, delta)
|
|
542
|
+
];
|
|
543
|
+
case 21:
|
|
544
|
+
_state.sent();
|
|
545
|
+
_state.label = 22;
|
|
546
|
+
case 22:
|
|
547
|
+
_iteratorNormalCompletion3 = true;
|
|
548
|
+
return [
|
|
549
|
+
3,
|
|
550
|
+
20
|
|
551
|
+
];
|
|
552
|
+
case 23:
|
|
553
|
+
return [
|
|
554
|
+
3,
|
|
555
|
+
26
|
|
556
|
+
];
|
|
557
|
+
case 24:
|
|
558
|
+
err = _state.sent();
|
|
559
|
+
_didIteratorError3 = true;
|
|
560
|
+
_iteratorError3 = err;
|
|
561
|
+
return [
|
|
562
|
+
3,
|
|
563
|
+
26
|
|
564
|
+
];
|
|
565
|
+
case 25:
|
|
566
|
+
try {
|
|
567
|
+
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
|
568
|
+
_iterator3.return();
|
|
569
|
+
}
|
|
570
|
+
} finally{
|
|
571
|
+
if (_didIteratorError3) {
|
|
572
|
+
throw _iteratorError3;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
return [
|
|
576
|
+
7
|
|
577
|
+
];
|
|
578
|
+
case 26:
|
|
579
|
+
_iteratorNormalCompletion4 = true, _didIteratorError4 = false, _iteratorError4 = undefined;
|
|
580
|
+
_state.label = 27;
|
|
581
|
+
case 27:
|
|
582
|
+
_state.trys.push([
|
|
583
|
+
27,
|
|
584
|
+
32,
|
|
585
|
+
33,
|
|
586
|
+
34
|
|
587
|
+
]);
|
|
588
|
+
_loop = function() {
|
|
589
|
+
var feature, _feature_store, docsForFeature;
|
|
590
|
+
return _ts_generator(this, function(_state) {
|
|
591
|
+
switch(_state.label){
|
|
592
|
+
case 0:
|
|
593
|
+
feature = _step4.value;
|
|
594
|
+
docsForFeature = parsedDocs.map(function(doc) {
|
|
595
|
+
return {
|
|
596
|
+
path: doc.relPath,
|
|
597
|
+
extracted: doc.extracted[feature.name]
|
|
598
|
+
};
|
|
599
|
+
});
|
|
600
|
+
return [
|
|
601
|
+
4,
|
|
602
|
+
(_feature_store = feature.store) === null || _feature_store === void 0 ? void 0 : _feature_store.call(feature, conn, docsForFeature, delta)
|
|
603
|
+
];
|
|
604
|
+
case 1:
|
|
605
|
+
_state.sent();
|
|
606
|
+
return [
|
|
607
|
+
2
|
|
608
|
+
];
|
|
609
|
+
}
|
|
610
|
+
});
|
|
611
|
+
};
|
|
612
|
+
_iterator4 = features[Symbol.iterator]();
|
|
613
|
+
_state.label = 28;
|
|
614
|
+
case 28:
|
|
615
|
+
if (!!(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done)) return [
|
|
616
|
+
3,
|
|
617
|
+
31
|
|
618
|
+
];
|
|
619
|
+
return [
|
|
620
|
+
5,
|
|
621
|
+
_ts_values(_loop())
|
|
622
|
+
];
|
|
623
|
+
case 29:
|
|
624
|
+
_state.sent();
|
|
625
|
+
_state.label = 30;
|
|
626
|
+
case 30:
|
|
627
|
+
_iteratorNormalCompletion4 = true;
|
|
628
|
+
return [
|
|
629
|
+
3,
|
|
630
|
+
28
|
|
631
|
+
];
|
|
632
|
+
case 31:
|
|
633
|
+
return [
|
|
634
|
+
3,
|
|
635
|
+
34
|
|
636
|
+
];
|
|
637
|
+
case 32:
|
|
638
|
+
err = _state.sent();
|
|
639
|
+
_didIteratorError4 = true;
|
|
640
|
+
_iteratorError4 = err;
|
|
641
|
+
return [
|
|
642
|
+
3,
|
|
643
|
+
34
|
|
644
|
+
];
|
|
645
|
+
case 33:
|
|
646
|
+
try {
|
|
647
|
+
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
|
|
648
|
+
_iterator4.return();
|
|
649
|
+
}
|
|
650
|
+
} finally{
|
|
651
|
+
if (_didIteratorError4) {
|
|
652
|
+
throw _iteratorError4;
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
return [
|
|
656
|
+
7
|
|
657
|
+
];
|
|
658
|
+
case 34:
|
|
659
|
+
_iteratorNormalCompletion5 = true, _didIteratorError5 = false, _iteratorError5 = undefined;
|
|
660
|
+
_state.label = 35;
|
|
661
|
+
case 35:
|
|
662
|
+
_state.trys.push([
|
|
663
|
+
35,
|
|
664
|
+
40,
|
|
665
|
+
41,
|
|
666
|
+
42
|
|
667
|
+
]);
|
|
668
|
+
_iterator5 = features[Symbol.iterator]();
|
|
669
|
+
_state.label = 36;
|
|
670
|
+
case 36:
|
|
671
|
+
if (!!(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done)) return [
|
|
672
|
+
3,
|
|
673
|
+
39
|
|
674
|
+
];
|
|
675
|
+
feature1 = _step5.value;
|
|
676
|
+
return [
|
|
677
|
+
4,
|
|
678
|
+
(_feature_afterReconcile = feature1.afterReconcile) === null || _feature_afterReconcile === void 0 ? void 0 : _feature_afterReconcile.call(feature1, conn, delta)
|
|
679
|
+
];
|
|
680
|
+
case 37:
|
|
681
|
+
_state.sent();
|
|
682
|
+
_state.label = 38;
|
|
683
|
+
case 38:
|
|
684
|
+
_iteratorNormalCompletion5 = true;
|
|
685
|
+
return [
|
|
686
|
+
3,
|
|
687
|
+
36
|
|
688
|
+
];
|
|
689
|
+
case 39:
|
|
690
|
+
return [
|
|
691
|
+
3,
|
|
692
|
+
42
|
|
693
|
+
];
|
|
694
|
+
case 40:
|
|
695
|
+
err = _state.sent();
|
|
696
|
+
_didIteratorError5 = true;
|
|
697
|
+
_iteratorError5 = err;
|
|
698
|
+
return [
|
|
699
|
+
3,
|
|
700
|
+
42
|
|
701
|
+
];
|
|
702
|
+
case 41:
|
|
703
|
+
try {
|
|
704
|
+
if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
|
|
705
|
+
_iterator5.return();
|
|
706
|
+
}
|
|
707
|
+
} finally{
|
|
708
|
+
if (_didIteratorError5) {
|
|
709
|
+
throw _iteratorError5;
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
return [
|
|
713
|
+
7
|
|
714
|
+
];
|
|
715
|
+
case 42:
|
|
716
|
+
return [
|
|
717
|
+
2
|
|
718
|
+
];
|
|
719
|
+
}
|
|
720
|
+
});
|
|
721
|
+
})();
|
|
722
|
+
}, dialect.beginMode())
|
|
723
|
+
];
|
|
724
|
+
case 5:
|
|
725
|
+
_state.sent();
|
|
726
|
+
durationMs = Date.now() - txStart;
|
|
727
|
+
if (!dialect.recordDuration) return [
|
|
728
|
+
3,
|
|
729
|
+
7
|
|
730
|
+
];
|
|
731
|
+
return [
|
|
732
|
+
4,
|
|
733
|
+
dialect.recordDuration(conn, durationMs)
|
|
734
|
+
];
|
|
735
|
+
case 6:
|
|
736
|
+
_state.sent();
|
|
737
|
+
_state.label = 7;
|
|
738
|
+
case 7:
|
|
739
|
+
return [
|
|
740
|
+
2,
|
|
741
|
+
{
|
|
742
|
+
parsed: parsedDocs.length,
|
|
743
|
+
warnings: warnings
|
|
744
|
+
}
|
|
745
|
+
];
|
|
746
|
+
}
|
|
747
|
+
});
|
|
748
|
+
})();
|
|
749
|
+
}
|
|
750
|
+
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|