@objectstack/driver-sqlite-wasm 17.0.0-rc.6 → 17.1.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.
- package/CHANGELOG.md +1739 -1
- package/package.json +8 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,1743 @@
|
|
|
1
1
|
# @objectstack/driver-sqlite-wasm
|
|
2
2
|
|
|
3
|
+
## 17.1.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 7337f30: chore(deps): production-dependency patch bumps from the weekly Dependabot group (#9212)
|
|
8
|
+
|
|
9
|
+
Routine dependency-range refresh, no behavior change: `@oclif/core` 4.13.2→4.13.3,
|
|
10
|
+
`esbuild` 0.28.1→0.28.2 and `better-sqlite3` ^13.0.2→^13.0.3 (optional) on
|
|
11
|
+
`@objectstack/cli`; `mingo` 7.2.2→7.2.4 on `@objectstack/driver-memory`; `nanoid`
|
|
12
|
+
6.0.0→6.0.1 on `@objectstack/driver-mongodb`, `@objectstack/driver-sql`,
|
|
13
|
+
`@objectstack/driver-sqlite-wasm` and `@objectstack/driver-turso`, plus
|
|
14
|
+
`better-sqlite3` ^13.0.2→^13.0.3 (optional on `@objectstack/driver-sql`, peer on
|
|
15
|
+
`@objectstack/driver-turso`); `js-yaml` 5.2.2→5.2.3 on `@objectstack/metadata`;
|
|
16
|
+
`@noble/hashes` 2.2.0→2.3.0 and `jose` 6.2.5→6.2.8 on `@objectstack/plugin-auth`;
|
|
17
|
+
`nodemailer` 9.0.3→9.0.5 on `@objectstack/plugin-email`; `@hono/node-server`
|
|
18
|
+
2.0.12→2.1.1 and `hono` 4.12.34→4.13.2 on `@objectstack/plugin-hono-server`;
|
|
19
|
+
`pinyin-pro` 3.28.2→3.29.1 on `@objectstack/plugin-pinyin-search`; and
|
|
20
|
+
`@noble/ciphers` 2.2.0→2.3.0 on `@objectstack/service-settings`.
|
|
21
|
+
|
|
22
|
+
Every entry above changed a `dependencies`, `optionalDependencies` or
|
|
23
|
+
`peerDependencies` range in the published manifest — the only kind of change
|
|
24
|
+
that reaches a consumer's install. The same Dependabot group also bumped
|
|
25
|
+
`devDependencies` on `@objectstack/hono`, `@objectstack/client`,
|
|
26
|
+
`@objectstack/core`, `@objectstack/plugin-sharing` and `@objectstack/spec`
|
|
27
|
+
(none consumer-facing), and touched the private `apps/docs`,
|
|
28
|
+
`examples/app-todo` and workspace-root manifests (none published) — none of
|
|
29
|
+
those get an entry here.
|
|
30
|
+
- Updated dependencies [56656aa]
|
|
31
|
+
- Updated dependencies [07e630e]
|
|
32
|
+
- Updated dependencies [2f65b1b]
|
|
33
|
+
- Updated dependencies [720ee95]
|
|
34
|
+
- Updated dependencies [f287435]
|
|
35
|
+
- Updated dependencies [2782805]
|
|
36
|
+
- Updated dependencies [e43d63a]
|
|
37
|
+
- Updated dependencies [9aa8890]
|
|
38
|
+
- Updated dependencies [7c9c1dd]
|
|
39
|
+
- Updated dependencies [8bbf459]
|
|
40
|
+
- Updated dependencies [75b7c24]
|
|
41
|
+
- Updated dependencies [d5552ca]
|
|
42
|
+
- Updated dependencies [d9813a9]
|
|
43
|
+
- Updated dependencies [8640fb2]
|
|
44
|
+
- Updated dependencies [2420641]
|
|
45
|
+
- Updated dependencies [2ad91c3]
|
|
46
|
+
- Updated dependencies [f57fb38]
|
|
47
|
+
- Updated dependencies [00777a0]
|
|
48
|
+
- Updated dependencies [d491625]
|
|
49
|
+
- Updated dependencies [2c570f3]
|
|
50
|
+
- Updated dependencies [7337f30]
|
|
51
|
+
- Updated dependencies [420804d]
|
|
52
|
+
- Updated dependencies [cbf4b40]
|
|
53
|
+
- Updated dependencies [9c4d096]
|
|
54
|
+
- Updated dependencies [86431f7]
|
|
55
|
+
- Updated dependencies [716ac9b]
|
|
56
|
+
- Updated dependencies [a38408a]
|
|
57
|
+
- Updated dependencies [62b1427]
|
|
58
|
+
- Updated dependencies [7ea1372]
|
|
59
|
+
- Updated dependencies [23abe27]
|
|
60
|
+
- Updated dependencies [985a9cd]
|
|
61
|
+
- Updated dependencies [5f5e234]
|
|
62
|
+
- Updated dependencies [a8189ae]
|
|
63
|
+
- Updated dependencies [26e70fb]
|
|
64
|
+
- Updated dependencies [42b05af]
|
|
65
|
+
- Updated dependencies [2b292ce]
|
|
66
|
+
- Updated dependencies [abcf853]
|
|
67
|
+
- Updated dependencies [8b9eba5]
|
|
68
|
+
- Updated dependencies [d575779]
|
|
69
|
+
- Updated dependencies [94f7ef8]
|
|
70
|
+
- Updated dependencies [c5ac5e4]
|
|
71
|
+
- Updated dependencies [a777944]
|
|
72
|
+
- Updated dependencies [dd88e1c]
|
|
73
|
+
- Updated dependencies [856527c]
|
|
74
|
+
- Updated dependencies [870f710]
|
|
75
|
+
- Updated dependencies [79c46da]
|
|
76
|
+
- Updated dependencies [7ff3975]
|
|
77
|
+
- Updated dependencies [29d055b]
|
|
78
|
+
- Updated dependencies [65589d6]
|
|
79
|
+
- Updated dependencies [2c86fe3]
|
|
80
|
+
- Updated dependencies [e196c6a]
|
|
81
|
+
- Updated dependencies [24173e9]
|
|
82
|
+
- Updated dependencies [4ab7523]
|
|
83
|
+
- Updated dependencies [19539b4]
|
|
84
|
+
- Updated dependencies [a9df51c]
|
|
85
|
+
- Updated dependencies [f8eb736]
|
|
86
|
+
- Updated dependencies [11b779e]
|
|
87
|
+
- Updated dependencies [ab8b10f]
|
|
88
|
+
- Updated dependencies [739fe5b]
|
|
89
|
+
- Updated dependencies [4bfe1a5]
|
|
90
|
+
- Updated dependencies [2065e31]
|
|
91
|
+
- Updated dependencies [b69d0f5]
|
|
92
|
+
- Updated dependencies [4d47afe]
|
|
93
|
+
- Updated dependencies [e4e5c6e]
|
|
94
|
+
- Updated dependencies [9a56784]
|
|
95
|
+
- Updated dependencies [c8806ae]
|
|
96
|
+
- Updated dependencies [bb96297]
|
|
97
|
+
- Updated dependencies [d00d2f6]
|
|
98
|
+
- Updated dependencies [df0c12d]
|
|
99
|
+
- Updated dependencies [d31785f]
|
|
100
|
+
- Updated dependencies [c308a4f]
|
|
101
|
+
- Updated dependencies [3b3f67d]
|
|
102
|
+
- Updated dependencies [e2899f6]
|
|
103
|
+
- Updated dependencies [3851f87]
|
|
104
|
+
- Updated dependencies [2a29caa]
|
|
105
|
+
- Updated dependencies [09a6eee]
|
|
106
|
+
- Updated dependencies [1a7f907]
|
|
107
|
+
- Updated dependencies [cd455c8]
|
|
108
|
+
- Updated dependencies [e1bb0ca]
|
|
109
|
+
- Updated dependencies [30d3752]
|
|
110
|
+
- Updated dependencies [c80e7ae]
|
|
111
|
+
- Updated dependencies [09a9a8a]
|
|
112
|
+
- Updated dependencies [07026cf]
|
|
113
|
+
- Updated dependencies [5d4f3d5]
|
|
114
|
+
- Updated dependencies [4d80e8b]
|
|
115
|
+
- Updated dependencies [30b1c63]
|
|
116
|
+
- Updated dependencies [079b457]
|
|
117
|
+
- Updated dependencies [e43b211]
|
|
118
|
+
- Updated dependencies [890b38f]
|
|
119
|
+
- Updated dependencies [8bee54b]
|
|
120
|
+
- Updated dependencies [7a537ce]
|
|
121
|
+
- Updated dependencies [593c4bf]
|
|
122
|
+
- Updated dependencies [ff08691]
|
|
123
|
+
- Updated dependencies [60e0f90]
|
|
124
|
+
- Updated dependencies [90c5285]
|
|
125
|
+
- Updated dependencies [402c125]
|
|
126
|
+
- Updated dependencies [7901b2d]
|
|
127
|
+
- Updated dependencies [56bca91]
|
|
128
|
+
- Updated dependencies [79394d7]
|
|
129
|
+
- Updated dependencies [730fd9a]
|
|
130
|
+
- Updated dependencies [44bc51d]
|
|
131
|
+
- Updated dependencies [73cfddf]
|
|
132
|
+
- Updated dependencies [a4acb8d]
|
|
133
|
+
- Updated dependencies [d634e66]
|
|
134
|
+
- Updated dependencies [682b86b]
|
|
135
|
+
- Updated dependencies [6a1b45e]
|
|
136
|
+
- @objectstack/spec@17.1.0
|
|
137
|
+
- @objectstack/core@17.1.0
|
|
138
|
+
- @objectstack/driver-sql@17.1.0
|
|
139
|
+
|
|
140
|
+
## 17.0.0
|
|
141
|
+
|
|
142
|
+
### Major Changes
|
|
143
|
+
|
|
144
|
+
- d367f03: refactor(drivers)!: 五个驱动的 query 参数跟进 `DriverQuery`,休眠的类型谎言就此没有藏身处 (#6075)
|
|
145
|
+
|
|
146
|
+
#5181(PR #6076)把 `IDataDriver.find/findOne/count/updateMany/deleteMany/explain` 的 query 参数收窄为 `DriverQuery`(`Omit<QueryAST, 'object'>`),并在同一条 changeset 里写明:「把驱动签名一并迁到 `DriverQuery` 是后续的机械收尾」。这就是那次收尾。
|
|
147
|
+
|
|
148
|
+
在此之前,五个驱动的实现仍旧声明 `query: QueryAST`(turso 侧是 `query: any`)。**它不红,也不会红** —— 方法参数按双变比较,实现声明得比契约宽照样满足契约。但调用方现在**有权**省略 `object`,于是这些实现的类型说 `query.object` 是 `string`,运行期却可能是 `undefined`:一句休眠的谎言,没有任何门拦得住下一个照着它写代码的人。
|
|
149
|
+
|
|
150
|
+
收尾之后,「驱动读 `query.object`」直接变成编译错误:
|
|
151
|
+
|
|
152
|
+
```ts
|
|
153
|
+
// 收窄前:编译通过,运行期可能是 undefined —— 谎言
|
|
154
|
+
// 收窄后:error TS2339: Property 'object' does not exist on type 'DriverQuery'.
|
|
155
|
+
const name = query.object;
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**零运行时改动。** 本次改的全部是类型注解:五个驱动的六个契约方法签名,以及为让类型自洽而必须跟进的少量私有辅助方法参数(mongodb 的 `buildFindOptions` / `buildSortSpec`,sql 的 `findRows` / `orderKeysFor`,turso 的 `toRemoteQuery` / `toRemoteReadQuery`,memory 的 `performAggregation`)—— 它们都只转发或读取 `where` / `orderBy` / `groupBy` 这些字段,本来就不读 `object`。turso 的几处 `query: any` 一并收紧,多拿回一批本已放弃的检查。emit 无差异,测试全绿(memory 524、mongodb 206、sql 906、sqlite-wasm 254、turso 788)。
|
|
159
|
+
|
|
160
|
+
**迁移面:删掉驱动调用字面量里的 `object:` 键**,与 #5181 是同一句话,只是现在也覆盖了直接按具体驱动类(`SqlDriver` / `MemoryDriver` / …)而非按 `IDataDriver` 取类型的调用方。编译器会逐处指出来(TS2353 `'object' does not exist in type 'DriverQuery'`)。本仓下游 25 个包实测零处需要改动,改动只落在五个驱动自己的测试里。
|
|
161
|
+
|
|
162
|
+
标 major 的依据与 #5181 一致:**源码级破坏性**(调用点内联字面量),运行时行为零变化。`check:api-surface` 只记录导出的存在与否、不记录签名,因此这条说明同样是该变更唯一的下游载体。
|
|
163
|
+
|
|
164
|
+
`aggregate` / `distinct` / `syncSchemasBatch` 不在本次范围内 —— 它们不是 `IDataDriver` 收窄的那六个方法,其中 `syncSchemasBatch` 的条目里 `object` 是被真实读取的必填键,`expand` 条目里的 `object` 同理命名的是关联对象,都不是冗余。
|
|
165
|
+
|
|
166
|
+
- 62159bd: refactor(driver-sql)!: `SqlDriver.distinct` 的第三参收成裸 `FilterCondition`,一个静默返回全集的写法就此编译不过 (#6320)
|
|
167
|
+
|
|
168
|
+
`distinct` 不在 `IDataDriver` 上,所以 #5181(PR #6076)与 #6075(PR #6210)的收窄都没走到它,#6212 批 A+E(#6355)收的是 `analyzeQuery` / `findWithWindowFunctions`,也没覆盖它。它的方法体一直说得很清楚——`applyFilters(builder, filters)` 拿的是**实参本身**,因此它要的是 `find()` 放在 `query.where` 里的那个值,**不是 query 信封**;`filters?: any` 只是没把这句话写进类型里。
|
|
169
|
+
|
|
170
|
+
```ts
|
|
171
|
+
// 收窄前后都成立,一处调用点都不用改
|
|
172
|
+
await driver.distinct("orders", "product", { status: "completed" });
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**收窄真正买到的东西,是实测出来的,不是推断的。** 三行数据(`Laptop`/`Mouse` 为 `completed`,`Ghost` 为 `pending`),逐个形状喂给 `distinct('orders','product', …)`:
|
|
176
|
+
|
|
177
|
+
| 第三参 | 收窄前 | 收窄后 |
|
|
178
|
+
| :--------------------------- | :--------------------------------- | :----------- |
|
|
179
|
+
| `{ status: 'completed' }` | 返回 `["Laptop","Mouse"]` | 不变 |
|
|
180
|
+
| 省略 | 返回全集 | 不变 |
|
|
181
|
+
| `'completed'`(标量) | **编译通过,返回全集** | **编译错误** |
|
|
182
|
+
| `{ object, where }`(信封) | 抛 `INVALID_FILTER` / 400 | 不变 |
|
|
183
|
+
| `['status','=','completed']` | 抛 `INVALID_FILTER` / 400(#5158) | 不变 |
|
|
184
|
+
|
|
185
|
+
第三行就是本次消掉的那一格:一个真心想问「completed 订单里有哪些商品」的调用,编译通过,然后拿到**每一个**商品。`applyFilters` 对「真值但非对象、非数组」的 filter 不发射任何谓词(该方法尾注写着这件事),于是过滤条件被整条丢掉。方向是**放宽**——这正是 #6320 与 #5234 同族的那类「静默错答案」。
|
|
186
|
+
|
|
187
|
+
**有一格是任何类型都关不上的,本次如实写进注释而不是假装关上了。** `FilterCondition` 的键**就是字段名**,所以它是开放映射(`[key: string]: any`):`{ object, where }` 在结构上是一个完全合法的 filter——约束两个分别叫 `object` 和 `where` 的列。没有任何注解能把它和正当 filter 分开。#6320 提出的「让反向错配也编译不过」在这个参数上**不可达**,实测确认;能拿到的保证是**运行期响亮失败**:信封里的 `where` 是对象,而没有任何比较值可以是对象,于是 `assertCompilableComparand` 抛 `INVALID_FILTER` / 400。这半边 driver-sql 从来就不是静默的;`driver-memory` 那半边(裸 filter 交给它会静默返回全集)留在 #5499 冻结面内,本次不碰。
|
|
188
|
+
|
|
189
|
+
**零运行时改动**:非测试改动 100% 是一个类型注解加一段注释,无逻辑、无行为、无 emit 差异。
|
|
190
|
+
|
|
191
|
+
**逐处复核了全部 14 个调用点**(本单正文记的是 3 处,实测偏低):driver-sql 11 处、driver-sqlite-wasm 3 处、driver-turso 0 处;其中真正传第三参的是 4 处(driver-sql 2 + driver-sqlite-wasm 2),全部本来就写的裸 filter,**零报错、零 fixture 改动**。
|
|
192
|
+
|
|
193
|
+
**driver-sqlite-wasm 也标 major**:`SqliteWasmDriver extends SqlDriver` 且不覆写 `distinct`,所以它**已发布的 `.d.ts`** 里这个方法的签名同样收窄,它的使用者看到的是同一个变化。该包读的是 driver-sql 构建后的 `dist/*.d.ts` 而非源码,是一处已知门禁盲区,本次用「往参数类型里临时塞一个调用方不可能满足的成员、重建、看调用点是否逐一变红」证明它确实读到了新 d.ts:driver-sql 6 处红、driver-sqlite-wasm 3 处红,与预判逐一相符。
|
|
194
|
+
|
|
195
|
+
### 迁移
|
|
196
|
+
|
|
197
|
+
调用点若把**标量**(或任何非 `FilterCondition` 值)交给第三参,编译器会指出来:
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
error TS2345: Argument of type 'string' is not assignable to parameter of type 'FilterCondition'.
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
改法是把它写成它本来就该是的裸 filter 对象(`'completed'` → `{ status: 'completed' }`)。⚠️ 这类调用点在收窄前拿到的是**未过滤的全集**,所以这不是一次等价改写:修完之后返回值会变,而变化后的那个才是调用方本来想要的答案。本仓零处这样的调用点。
|
|
204
|
+
|
|
205
|
+
⚠️ 无类型的 JS 调用方**既不会拿到编译错误、也不会有任何行为变化**(本次零运行时改动)。对他们而言,上面那条是「你一直没在过滤」的**唯一通知渠道** —— 这也是本次记台账条目的理由,见下。
|
|
206
|
+
|
|
207
|
+
<!-- adr-0087: registered driver-sql-distinct-bare-filter-typed -->
|
|
208
|
+
|
|
209
|
+
### Minor Changes
|
|
210
|
+
|
|
211
|
+
- 92a67f2: feat(drivers,spec)!: `GroupByNode.alias` is honoured by the SQL faces — one aggregate, one column key (#6401)
|
|
212
|
+
|
|
213
|
+
`GroupByNodeSchema` has declared `alias` ("Alias for the projected group
|
|
214
|
+
value", defaulting to `field`) for as long as the structured `groupBy` entry has
|
|
215
|
+
existed. Exactly one execution path read it. The result: the SAME query came
|
|
216
|
+
back with a different result-column key depending on which path the engine
|
|
217
|
+
happened to take.
|
|
218
|
+
|
|
219
|
+
```ts
|
|
220
|
+
groupBy: [{ field: "closed_at", dateGranularity: "month", alias: "qtr" }];
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
- pushed down to a driver ⇒ rows keyed **`closed_at`**
|
|
224
|
+
- run through the in-memory fallback ⇒ rows keyed **`qtr`**
|
|
225
|
+
|
|
226
|
+
And the choice between them is `engine.ts`'s
|
|
227
|
+
`allStructuredSupported && !tzRequiresInMemory` — a driver capability bit and a
|
|
228
|
+
`timezone`, neither of which the caller can see. That is the multi-face
|
|
229
|
+
consistency invariant broken in its quietest form: both answers are valid rows,
|
|
230
|
+
so nothing throws and nothing looks wrong.
|
|
231
|
+
|
|
232
|
+
**Resolved to ENFORCE**, and the leg was chosen by measurement rather than
|
|
233
|
+
taste. ADR-0049 splits on whether the feature already exists: a _dangling_
|
|
234
|
+
promise is removed, a _live_ one with a missing gate is enforced. `alias` is
|
|
235
|
+
live — three consumers read it and change behaviour
|
|
236
|
+
(`in-memory-aggregation.ts`, `MemoryDriver.performAggregation`, and
|
|
237
|
+
`chartAggregateCategoryKey`), and the publish gate _compels_ it:
|
|
238
|
+
`validate-react-page-props.ts` errors `REACT_CHART_AXIS_UNKNOWN` unless a
|
|
239
|
+
chart's category axis is bound to `alias ?? field`, telling the author in so
|
|
240
|
+
many words to "bind it to" the alias. A key the build gate makes you write is
|
|
241
|
+
not a dangling promise. The count of real non-test producers is **zero**, which
|
|
242
|
+
is what makes enforcing safe rather than what argues against it: no shipped
|
|
243
|
+
payload changes its result keys.
|
|
244
|
+
|
|
245
|
+
**What changed, on every SQL face at once** — a fix landing on one and not its
|
|
246
|
+
twin is the #6203 shape, and `TursoDriver` picks its face from `url`:
|
|
247
|
+
|
|
248
|
+
- **`driver-sql`** — both limbs of the structured `groupBy` branch project
|
|
249
|
+
`alias ?? field`: the date-bucket limb aliases the bucket expression to it,
|
|
250
|
+
and the plain limb emits `?? as ??` (only when the name actually moves — an
|
|
251
|
+
alias equal to the field emits no self-rename). `presentedOutput` is now keyed
|
|
252
|
+
by the OUTPUT column, matching how the aggregation branch beside it has always
|
|
253
|
+
worked; an aliased group value went unpresented before.
|
|
254
|
+
- **`driver-turso` REMOTE** — the same projection, `"field" AS "alias"`. The
|
|
255
|
+
alias reaches the statement as a quoted identifier and is therefore held to
|
|
256
|
+
`assertSafeIdentifier`, exactly like `field`.
|
|
257
|
+
- **`driver-sqlite-wasm`** — inherits `SqlDriver`'s compiler; covered by its own
|
|
258
|
+
conformance suite rather than by assumption.
|
|
259
|
+
|
|
260
|
+
**GROUP BY still keys on the FIELD** on every face. Only the projection is
|
|
261
|
+
renamed, so the buckets are unchanged. This is deliberate and pinned: SQLite
|
|
262
|
+
resolves output names in `GROUP BY`, so a face that grouped by the alias would
|
|
263
|
+
look correct here and diverge on a dialect that does not.
|
|
264
|
+
|
|
265
|
+
`having` needed no change and now means one thing: it is applied over the
|
|
266
|
+
aggregated row's own columns, so a filter on a group projection references the
|
|
267
|
+
alias on every path — previously the alias on one path and the field on the
|
|
268
|
+
other.
|
|
269
|
+
|
|
270
|
+
**Conformance.** `AGGREGATION_CASES` (#6409) gains a `groupByAlias` axis and two
|
|
271
|
+
cases. Their VALUES are an existing case verbatim — only the key moves — so they
|
|
272
|
+
can fail only on the key, which is the point: every wrong answer in this area is
|
|
273
|
+
a valid query returning plausible rows. `objectql`'s in-memory fallback is now
|
|
274
|
+
**enrolled** as a fourth face, answering #6409's open question ②: it is the face
|
|
275
|
+
the SQL three were converged onto, so the new behaviour would otherwise be
|
|
276
|
+
pinned against nothing, and reaching it needs no engine at all —
|
|
277
|
+
`applyInMemoryAggregation` is a pure function of rows and an AST.
|
|
278
|
+
|
|
279
|
+
**Reverse verification**, predicted before running. Reverting the in-memory face
|
|
280
|
+
to `g.field`: only the two alias cases move and only ONE fails — the degenerate
|
|
281
|
+
`alias === field` case stays green, which is why both are in the table.
|
|
282
|
+
Reverting the harness to read `c.groupBy` instead of `c.groupByAlias ?? c.groupBy`
|
|
283
|
+
— the copied-neighbour mistake: everything passes on an unmodified face, a false
|
|
284
|
+
GREEN, which is the failure mode that would have made the axis vacuous.
|
|
285
|
+
|
|
286
|
+
**Frozen drivers (#5499), measured from source, not flipped.** `driver-memory`
|
|
287
|
+
already returned `{ field, alias: node.alias ?? node.field }` and projects under
|
|
288
|
+
the alias — it had independently reached the enforce answer, so it needed no
|
|
289
|
+
alignment. `driver-mongodb` is a recorded DEBT row and the defect is wider than
|
|
290
|
+
`alias`: `buildAggregationPipeline` types `groupBy` as `string[]` and builds
|
|
291
|
+
`groupId[field] = '$' + field`, so a structured node — aliased or not — becomes
|
|
292
|
+
the literal key `"[object Object]"`. It cannot take a structured `GroupByNode`
|
|
293
|
+
at all; `mongodb-driver.ts` passes `(query as any).groupBy`, which is why `tsc`
|
|
294
|
+
never saw it. Tracked on #6814.
|
|
295
|
+
|
|
296
|
+
**Compatibility.** A caller who writes `alias` and reads the result under
|
|
297
|
+
`field` on a pushdown path will now find the value under `alias` — which is what
|
|
298
|
+
the key has always meant on the fallback path, and what the chart gate already
|
|
299
|
+
required. Callers who never write `alias` are unaffected: the emitted SQL is
|
|
300
|
+
byte-identical.
|
|
301
|
+
|
|
302
|
+
<!-- adr-0087: not-required (no-migration-prescription) Nothing is retired: `GroupByNodeSchema.alias` keeps its declaration, its spelling and its type — it starts being HONOURED by three faces that parsed and ignored it. There is no tombstone to write and no authored metadata to rewrite, so there is no mechanical transform a migration could prescribe: every stack that validated before validates after, unchanged. The behaviour change is in the RESULT of a runtime query (a result-column key moves from `field` to `alias` on the pushdown path, converging on what the in-memory path and the chart publish gate already required), which the ledger has no channel for and no upgrader could apply a codemod to. The bang is on the changeset because callers who read that column by the field name must move, and the measured non-test producer count for the key is zero. -->
|
|
303
|
+
|
|
304
|
+
- 82397b6: feat(drivers,objectql): `$regex` / `$options` are refused everywhere, and `$icontains` is implemented on the SQL family (#5702)
|
|
305
|
+
|
|
306
|
+
The driver half of the #4706 ruling. #5701 landed the contract (the vocabulary,
|
|
307
|
+
the `RETIRED_FILTER_OPERATORS` prescriptions, the shared text case-set) and
|
|
308
|
+
#5710 flipped the last live producer — `plugin-auth`'s ObjectQL adapter, which
|
|
309
|
+
emitted `$regex` on the authentication path — so the refusal can now land
|
|
310
|
+
without breaking sign-in.
|
|
311
|
+
|
|
312
|
+
**BREAKING for anyone writing `$regex` or `$options` in a filter.** Both are
|
|
313
|
+
refused on every backend with `INVALID_FILTER` / 400 and a message that names
|
|
314
|
+
the replacement. `$regex` was never a declared operator: `driver-sql` compiled
|
|
315
|
+
it to a LIKE-escaped substring (so `a.b` matched only the literal `a.b`),
|
|
316
|
+
`driver-memory` ran it as a real `RegExp` (so the same filter also matched
|
|
317
|
+
`axb`, and an _invalid_ pattern was caught and answered `false` — zero rows, in
|
|
318
|
+
silence), and `objectql`'s `having` did the same. Write `$icontains` for the
|
|
319
|
+
case-insensitive substring search this was almost always used for, `$contains`
|
|
320
|
+
for a case-sensitive one; a pattern that genuinely needs a regex has no
|
|
321
|
+
filter-level replacement.
|
|
322
|
+
|
|
323
|
+
**`$icontains` now runs on the SQL family** — `driver-sql`, `driver-sqlite-wasm`,
|
|
324
|
+
and both of `driver-turso`'s transports (the remote one does not go through
|
|
325
|
+
knex, so it needed its own). It compiles to `LOWER(col) LIKE LOWER(?) ESCAPE ?`
|
|
326
|
+
through the same `applyLike` / `pushLike` that carries the `%` / `_` / `\`
|
|
327
|
+
escaping, as a `fold` parameter rather than a second emitter — a copied emitter
|
|
328
|
+
is where the escape class would have been dropped, and an unescaped `%` matches
|
|
329
|
+
every row. An empty or non-string comparand is refused on the validating walk
|
|
330
|
+
(an empty one matches every row, which widens rather than narrows). On SQLite
|
|
331
|
+
`lower()` folds ASCII only, which IS the contract (#4706 Q1 = A): `$icontains:
|
|
332
|
+
'café'` does not match `CAFÉ`.
|
|
333
|
+
|
|
334
|
+
<!-- adr-0087: registered filter-regex-options-retired -->
|
|
335
|
+
|
|
336
|
+
`driver-mongodb`'s unknown-operator arm was throwing a bare `Error` with no
|
|
337
|
+
`code` and no `status`, three lines from the helper in its own file that sets
|
|
338
|
+
`INVALID_FILTER` / 400 — a 500-shaped body for a 400-class client mistake. It
|
|
339
|
+
now speaks the same envelope as its three siblings.
|
|
340
|
+
|
|
341
|
+
Two parts of the ruling are deliberately NOT in this change and stay tracked in
|
|
342
|
+
`scripts/check-driver-conformance.mjs`'s ledger: the `$contains` family's
|
|
343
|
+
case-sensitivity (#4706 Q2 = A) needs SQLite's `LIKE` replaced by a case-exact
|
|
344
|
+
construct in the driver, the RLS lowering and the analytics lowering together,
|
|
345
|
+
or one permission rule compiles to two row sets (#6518); and `$icontains` on the
|
|
346
|
+
JS evaluation faces needs the spec vocabulary to take the operator, which cannot
|
|
347
|
+
happen before `driver-memory` has an arm for it (#6520).
|
|
348
|
+
|
|
349
|
+
- f1544e2: feat(driver-sql): compile `$field` to a column-to-column comparison on SQL push-down (#5222)
|
|
350
|
+
|
|
351
|
+
`FieldReferenceSchema` (`{ $field: 'other_column' }`) is declared in the spec and
|
|
352
|
+
genuinely PRODUCED — `compileCelToFilter` emits it whenever a CEL permission/RLS
|
|
353
|
+
rule compares one field to another — but its only implementation was the
|
|
354
|
+
in-memory evaluator. #5041 measured the consequence and installed a loud refusal
|
|
355
|
+
(`INVALID_FILTER` / 400, replacing a bare `TypeError` and, inside an `$in` list,
|
|
356
|
+
a silent zero-row answer), deliberately leaving the capability itself to this
|
|
357
|
+
change. Until now, therefore, one permission rule had two behaviours chosen by
|
|
358
|
+
whether the query reached a database.
|
|
359
|
+
|
|
360
|
+
The six scalar comparison operators — `$eq` / `$ne` / `$gt` / `$gte` / `$lt` /
|
|
361
|
+
`$lte`, including the array-triple authorings that lower to them — now compile
|
|
362
|
+
`{ $field: 'col' }` into a real column reference:
|
|
363
|
+
|
|
364
|
+
```js
|
|
365
|
+
{
|
|
366
|
+
amount: {
|
|
367
|
+
$gt: {
|
|
368
|
+
$field: "budget";
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
} // → where "amount" > "budget"
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
**Nothing that worked before changes.** This is additive: every shape that
|
|
375
|
+
compiled still compiles identically, and the refusal gate was NARROWED, never
|
|
376
|
+
removed. A minor bump because a previously-400 filter now returns rows.
|
|
377
|
+
|
|
378
|
+
**The refused arm, and why each entry is there** (all keep `INVALID_FILTER` /
|
|
379
|
+
400):
|
|
380
|
+
|
|
381
|
+
- **Dotted paths** (`{ $field: 'account.owner_id' }`) — maintainer ruling: v1 is
|
|
382
|
+
same-table columns only. No JOIN planning, no alias-qualified columns.
|
|
383
|
+
- **Undeclared columns**, on either side — the `$field` value lands in a SQL
|
|
384
|
+
identifier position, so only fields the object declares are accepted, refused
|
|
385
|
+
at COMPILE time rather than by the database. Federated/external tables
|
|
386
|
+
(ADR-0015), whose column set this driver does not own, are refused wholesale.
|
|
387
|
+
- **The tenant-isolation column**, on either side — a privilege-escalation
|
|
388
|
+
comparison surface. Closed on both sides because the operands of `=` commute.
|
|
389
|
+
- **Cross-class comparisons** (a number against text, a date against text) —
|
|
390
|
+
SQLite orders by storage class first while the in-memory evaluator applies JS
|
|
391
|
+
coercion, so the two paths genuinely disagree and neither answer can be made
|
|
392
|
+
the other. Refused rather than shipped as a silent divergence.
|
|
393
|
+
- **`$in` / `$nin` / `$between` list members** — the in-memory evaluator does not
|
|
394
|
+
resolve a reference inside a list either (`resolveValue` returns an array
|
|
395
|
+
unchanged), so there is no correct semantics for SQL to be equivalent to.
|
|
396
|
+
- **The string operators** (`$contains`, `$startsWith`, …) — a column-side LIKE
|
|
397
|
+
pattern cannot be metacharacter-escaped portably, and an unescaped one is the
|
|
398
|
+
`%`-matches-every-row filter bypass.
|
|
399
|
+
- **The bare `{ field: { $field: 'other' } }` spelling** — what
|
|
400
|
+
`parseFilterAST(['a', '=', { $field: 'b' }])` lowers to. Still refused, because
|
|
401
|
+
the in-memory evaluator answers `false` for it rather than reading it as an
|
|
402
|
+
equality; the refusal now names `$eq` as the spelling that compiles instead of
|
|
403
|
+
falling through to a generic operator list.
|
|
404
|
+
|
|
405
|
+
**Equivalence is proven, not asserted.** A cross-path conformance suite runs each
|
|
406
|
+
supported shape through the in-memory evaluator AND through SQL push-down against
|
|
407
|
+
the same seeded rows, holding both to the same declared id list. Its fixture
|
|
408
|
+
carries every NULL arrangement two columns can be in — target NULL, referent
|
|
409
|
+
NULL, and BOTH NULL — because three-valued SQL against a two-valued JS matcher is
|
|
410
|
+
the one place these paths can genuinely diverge. Every emitted predicate is
|
|
411
|
+
therefore written TOTAL: `{ a: { $eq: { $field: 'b' } } }` matches a row where
|
|
412
|
+
both columns are NULL, which a plain `a = b` would drop, and `$not` over any
|
|
413
|
+
cross-field leaf is its exact complement.
|
|
414
|
+
|
|
415
|
+
The suite runs the full driver axis — SQLite always, live Postgres and MySQL
|
|
416
|
+
when the runner provisions them — and on both SQL drivers: `driver-sqlite-wasm`
|
|
417
|
+
inherits the compiler but executes through its own sql.js dialect, which binds
|
|
418
|
+
the identifier list itself. The dialect axis is not ceremony here: a cross-field
|
|
419
|
+
predicate is the one filter shape whose SQL carries two identifiers and no bound
|
|
420
|
+
value, and the class rule has a different failure per backend — comparing text to
|
|
421
|
+
a number is a silent wrong answer on SQLite (storage classes order before values)
|
|
422
|
+
but `operator does not exist: text > integer` on Postgres. The guard is what
|
|
423
|
+
keeps either from being reached.
|
|
424
|
+
|
|
425
|
+
- 3172831: fix(drivers): text-operator case folding is the CONTRACT's answer, not the dialect's (#6518)
|
|
426
|
+
|
|
427
|
+
The `$contains` family and `$icontains` returned **different rows on different
|
|
428
|
+
databases** for the same filter, because case sensitivity was decided by whatever
|
|
429
|
+
`LIKE` happened to mean on the dialect underneath. Both directions **over-matched**
|
|
430
|
+
— they returned rows the filter excludes, which on an ADR-0021 RLS read scope is
|
|
431
|
+
over-reach rather than a loose filter (#3948):
|
|
432
|
+
|
|
433
|
+
| | `$contains` / `$notContains` / `$startsWith` / `$endsWith` — case-SENSITIVE (#4706 Q2 = A) | `$icontains` — folds ASCII ONLY (#4706 Q1 = A) |
|
|
434
|
+
| :--------------------------- | :----------------------------------------------------------------------------------------- | :--------------------------------------------- |
|
|
435
|
+
| SQLite / turso / sqlite-wasm | ❌ `LIKE` folds ASCII | ✅ `lower()` is ASCII-only |
|
|
436
|
+
| Postgres | ✅ `LIKE` is case-exact | ❌ `LOWER()` folds all of Unicode |
|
|
437
|
+
| MySQL | ❌ follows the column's collation | ❌ `LOWER()` folds all of Unicode |
|
|
438
|
+
|
|
439
|
+
Read across: **each dialect was already right on the half another one got wrong**,
|
|
440
|
+
which is why neither half could be found from one backend alone.
|
|
441
|
+
|
|
442
|
+
## What now runs
|
|
443
|
+
|
|
444
|
+
The construct is chosen per dialect, in one emitter, so the escaping and the fold
|
|
445
|
+
stay a single code path (an unescaped wildcard is a filter bypass, P0 — #5567):
|
|
446
|
+
|
|
447
|
+
- **SQLite family → `GLOB`.** `LIKE`'s ASCII fold cannot be switched off per
|
|
448
|
+
statement (`PRAGMA case_sensitive_like` is connection-global, so one query would
|
|
449
|
+
redefine every other query on the connection), and `CAST(col AS BLOB) LIKE ?` was
|
|
450
|
+
measured to match _nothing at all_. `GLOB` is case-exact and brings its own
|
|
451
|
+
escaped class — `*`, `?`, `[` as the self-closing classes `[*]`, `[?]`, `[[]`,
|
|
452
|
+
because SQLite's grammar gives `GLOB` no `ESCAPE` clause. `$icontains` keeps
|
|
453
|
+
`lower()` on both operands, still ASCII-only.
|
|
454
|
+
- **Postgres → `LIKE`, unchanged.** Only the fold moved, from `LOWER()` to an
|
|
455
|
+
explicit `translate()` over the 26 ASCII letters. Measured on a live PostgreSQL
|
|
456
|
+
16 (ICU database): `LOWER('CAFÉ')` is `'café'` — the over-fold — while the
|
|
457
|
+
`translate()` form leaves `É` alone.
|
|
458
|
+
- **MySQL → `LIKE` over `CAST(… AS BINARY)`**, so the comparison is byte-wise and
|
|
459
|
+
no collation decides the case; `$icontains` folds byte-wise over the same binary
|
|
460
|
+
rendering, which is ASCII-only because UTF-8 is self-synchronising.
|
|
461
|
+
- **Any other client** keeps the previous `LIKE` / `LOWER()` shape — it is the only
|
|
462
|
+
form that still runs there — and is recorded as residue rather than left to be
|
|
463
|
+
discovered.
|
|
464
|
+
|
|
465
|
+
`driver-turso`'s remote transport carries the twin (it compiles filters itself and
|
|
466
|
+
inherits nothing), and the two transports are now held to the same rows by a
|
|
467
|
+
parity suite that runs the shared `FILTER_TEXT_CASES` on both.
|
|
468
|
+
|
|
469
|
+
## Behaviour change — read this before upgrading
|
|
470
|
+
|
|
471
|
+
A filter whose comparand's case did not match the stored text used to match on
|
|
472
|
+
SQLite/turso/sqlite-wasm and may have matched on MySQL. It no longer does:
|
|
473
|
+
|
|
474
|
+
```ts
|
|
475
|
+
// rows: { id: '1', name: 'ACME Corp' }, { id: '2', name: 'acme corp' }
|
|
476
|
+
{
|
|
477
|
+
name: {
|
|
478
|
+
$contains: "acme";
|
|
479
|
+
}
|
|
480
|
+
} // was ['1','2'] on SQLite → now ['2'] everywhere
|
|
481
|
+
{
|
|
482
|
+
name: {
|
|
483
|
+
$icontains: "acme";
|
|
484
|
+
}
|
|
485
|
+
} // ['1','2'] — unchanged, and now correct on PG/MySQL too
|
|
486
|
+
{
|
|
487
|
+
name: {
|
|
488
|
+
$icontains: "café";
|
|
489
|
+
}
|
|
490
|
+
} // was ['3','4'] on PG/MySQL → now ['4'] everywhere
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
If you were relying on `$contains` to ignore case, **write `$icontains`** — that is
|
|
494
|
+
the operator for it, and it now folds the same ASCII-only range on every backend.
|
|
495
|
+
Result sets only ever get NARROWER, never wider, so a filter that was already
|
|
496
|
+
correct stays correct.
|
|
497
|
+
|
|
498
|
+
## Why `minor` rather than `major`
|
|
499
|
+
|
|
500
|
+
No declared surface moves. `$contains` still exists, still takes the same
|
|
501
|
+
comparand, and `filter.zod.ts` is untouched — the case-sensitivity this delivers
|
|
502
|
+
was **already published** as the contract by #5701 (`FILTER_TEXT_CASES`, one
|
|
503
|
+
release earlier in this same v17 major), and the drivers were the half that had
|
|
504
|
+
not caught up. This is Prime Directive #12 applied in the direction it points:
|
|
505
|
+
declared = enforced. It is graded the way its sibling #5702/#6549 was graded for
|
|
506
|
+
the same operator family in the same rc cycle, and it registers nothing in the
|
|
507
|
+
ADR-0087 registries because it retires no authorable key.
|
|
508
|
+
|
|
509
|
+
## What is deliberately NOT in this change
|
|
510
|
+
|
|
511
|
+
`driver-memory` and `driver-mongodb` still fold case on their query paths — they
|
|
512
|
+
are the #5499 frozen family, so their `FILTER_TEXT_CASES` cells stay honest DEBT
|
|
513
|
+
and are tracked as #6682 (case sensitivity) and #6520 (`$icontains`). The
|
|
514
|
+
`service-analytics` SQL compilers were measured already compliant: they emit
|
|
515
|
+
Postgres-shaped statements, where `LIKE` is case-exact, and that assumption is now
|
|
516
|
+
written down and pinned rather than implied.
|
|
517
|
+
|
|
518
|
+
### Patch Changes
|
|
519
|
+
|
|
520
|
+
- 0af50a3: fix(driver-sql,service-analytics): a bare-day upper bound covers the whole day on `Field.datetime` (#3777)
|
|
521
|
+
|
|
522
|
+
A bare `YYYY-MM-DD` comparand anchors to midnight UTC. That is right for a
|
|
523
|
+
lower bound and was silently wrong for an upper one: the dashboard date-range
|
|
524
|
+
filter compiles `{ $gte: from, $lte: to }` with bare-day bounds, so on a
|
|
525
|
+
`datetime` column every row created after 00:00 of the `to` day vanished from
|
|
526
|
+
the result — no error, the chart renders, the numbers are just smaller. The
|
|
527
|
+
default configuration hit it: the filter's default field is `created_at`
|
|
528
|
+
(a system-injected `Field.datetime`) and 7 of the 13 presets end "today".
|
|
529
|
+
|
|
530
|
+
The translation is operator-sensitive and half-open, applied at every
|
|
531
|
+
comparison emitter:
|
|
532
|
+
|
|
533
|
+
- `SqlDriver` (and `SqliteWasmDriver` by inheritance): `$lte`/`<=` with a
|
|
534
|
+
bare-day comparand on a `datetime` column compiles to `< next-day-midnight`
|
|
535
|
+
in the column's storage form; `$between [min, max]` with a bare-day max
|
|
536
|
+
decomposes to `>= min AND < next-day(max)`. Both the plain and the
|
|
537
|
+
legacy-repair (mixed-storage) column paths, both `where` spellings.
|
|
538
|
+
- `NativeSQLStrategy`: `dateRange` windows and `lte` filters bind `< next-day`
|
|
539
|
+
instead of an inclusive `BETWEEN`/`<=` when the bound is a bare day.
|
|
540
|
+
- The `/analytics/sql` rendering and the dataset preview evaluator apply the
|
|
541
|
+
same rule, so the echoed SQL and drafted numbers reproduce execution.
|
|
542
|
+
|
|
543
|
+
`@objectstack/core` gains the shared primitive `nextUtcCalendarDay(value)`:
|
|
544
|
+
the next calendar day of a valid bare `YYYY-MM-DD` (else `null` — instants,
|
|
545
|
+
`Date`s and impossible days are never widened).
|
|
546
|
+
|
|
547
|
+
Unchanged on purpose, per the semantics table on #3777: `date`/`time` columns
|
|
548
|
+
(`<= day` is already whole-day-correct there), full-ISO/`Date` comparands
|
|
549
|
+
(instant semantics), and `$gte`/`$gt`/`$lt` (midnight anchoring is correct for
|
|
550
|
+
those). No authored metadata changes: a dashboard's existing
|
|
551
|
+
`{ $gte, $lte }` window now simply includes its final day.
|
|
552
|
+
|
|
553
|
+
- 2e836de: chore(packaging): CHANGELOG.md ships in every npm tarball (#4261)
|
|
554
|
+
|
|
555
|
+
The AGENTS.md post-task checklist requires breaking changesets to carry their
|
|
556
|
+
FROM → TO migration because "this text ships to consumers as `CHANGELOG.md`
|
|
557
|
+
inside the npm package and is what an upgrading agent greps after the tombstone
|
|
558
|
+
error." That delivery path was severed for 68 of the 69 publishable packages:
|
|
559
|
+
npm packs `package.json` / `README*` / `LICENSE*` unconditionally but — unlike
|
|
560
|
+
older npm versions — not `CHANGELOG.md`, and the canonical
|
|
561
|
+
`"files": ["dist", "README.md"]` whitelist never named it. Measured on npm
|
|
562
|
+
10.9.7: `npm pack --dry-run` on `@objectstack/types` shipped 3 files while its
|
|
563
|
+
70KB `CHANGELOG.md` stayed behind. Only `@objectstack/spec` listed it
|
|
564
|
+
explicitly.
|
|
565
|
+
|
|
566
|
+
The tombstone-error scenario is precisely the one where the repo is out of
|
|
567
|
+
reach — the upgrading agent has `node_modules` and nothing else — so the
|
|
568
|
+
migration text has to ride in the tarball. Every publishable package now
|
|
569
|
+
declares `CHANGELOG.md` in `files`, and the canonical whitelist is
|
|
570
|
+
`["dist", "README.md", "CHANGELOG.md"]`.
|
|
571
|
+
|
|
572
|
+
The other half is the gate: `check:published-files` gains a fifth invariant,
|
|
573
|
+
COMPLETE — a whitelist that fails to cover `CHANGELOG.md` fails the
|
|
574
|
+
always-required lint job, so the next package cannot silently sever the path
|
|
575
|
+
again. `@objectstack/spec`'s per-package EXTRA_ENTRIES exemption dissolves
|
|
576
|
+
into the canonical set.
|
|
577
|
+
|
|
578
|
+
Consumer-visible change: one more file per install (the package's changelog,
|
|
579
|
+
e.g. 70.8KB for `@objectstack/types`), and `grep -r "removed key"
|
|
580
|
+
node_modules/@objectstack/*/CHANGELOG.md` now finds the migration it was
|
|
581
|
+
promised.
|
|
582
|
+
|
|
583
|
+
- 9881074: test(drivers): the "held to by a gate" claim now has a gate behind it (#4363)
|
|
584
|
+
|
|
585
|
+
Three changesets — filter combinator semantics (#3774), temporal storage form
|
|
586
|
+
(ADR-0053), deterministic paged reads (objectui#3106 / #4363) — each introduced
|
|
587
|
+
a shared case-set in `@objectstack/spec/data` with some version of the claim
|
|
588
|
+
that a future driver "is held to this by a gate rather than by remembering it".
|
|
589
|
+
|
|
590
|
+
There was no gate. The case-sets are exports sitting in a package; nothing
|
|
591
|
+
obliged a driver to import them. Measured on `main`, the matrix had three holes:
|
|
592
|
+
`driver-sqlite-wasm` ran neither pagination case-set, and neither it nor
|
|
593
|
+
`driver-mongodb` ran the filter-logic one — including a hole in the very
|
|
594
|
+
case-set whose changeset made the claim.
|
|
595
|
+
|
|
596
|
+
`scripts/check-driver-conformance.mjs` (`pnpm check:driver-conformance`, wired
|
|
597
|
+
into lint.yml's required job) makes the hole the failure. Every
|
|
598
|
+
(driver × case-set) cell is covered — some file under the package's `src/`
|
|
599
|
+
imports _and drives_ the case-set's marker export — or carries a measured
|
|
600
|
+
DEBT/EXEMPT entry, reconciled in both directions. A third direction, CLASSIFIED,
|
|
601
|
+
holds the other end: a new `*-conformance.ts` fixture nobody classified fails
|
|
602
|
+
the run rather than starting life uncovered, which is the direction that
|
|
603
|
+
actually rots (#4203). It caught an unclassified `TEMPORAL_TIME_CASES` on its
|
|
604
|
+
first run.
|
|
605
|
+
|
|
606
|
+
`driver-sqlite-wasm` gains the pagination suite the gate found missing. It
|
|
607
|
+
inherits `SqlDriver`'s ORDER BY construction, so nothing is re-implemented —
|
|
608
|
+
what the suite pins is that the clause survives a different _engine_: this
|
|
609
|
+
driver swaps knex's transport for a custom sql.js dialect that compiles,
|
|
610
|
+
executes and marshals every row through its own path, and a dialect that
|
|
611
|
+
reordered or dropped the trailing `ORDER BY id` would fail in no other suite.
|
|
612
|
+
|
|
613
|
+
The two filter-logic holes are ledgered as DEBT rather than fixed here, with
|
|
614
|
+
their reasons printed on every run and tracked in #4405. The mongodb row is the
|
|
615
|
+
substantive one: `translateFilter` is an independent FilterCondition backend —
|
|
616
|
+
the fifth, and the one #3774 never enrolled when it counted "the four".
|
|
617
|
+
|
|
618
|
+
- 4384921: fix(spec,drivers): `bypassTenantAudit` becomes a declared driver option, and `findOne` stops accepting a bare id (#4311)
|
|
619
|
+
|
|
620
|
+
Three drivers built with `tsup` and tested with `vitest`, so no `tsc` had ever
|
|
621
|
+
read them. Onboarding them to the #4311 type-check ratchet surfaced 292 errors,
|
|
622
|
+
and most of what looked like sloppy test fixtures was the types being wrong.
|
|
623
|
+
|
|
624
|
+
**`DriverOptions.bypassTenantAudit` is now declared.** It has been live for a
|
|
625
|
+
long time without being on the schema: `SqlDriver.auditMissingTenant` reads it
|
|
626
|
+
to suppress the "tenant-scoped write without `tenantId`" warning, the driver's
|
|
627
|
+
own warning text tells callers to set it, `ObjectQLEngine` sets it for
|
|
628
|
+
system-context calls, and `service-settings` / `service-datasource` pass it on
|
|
629
|
+
every global-scope write. Because the schema never had it, the driver read it
|
|
630
|
+
through `(options as any)` and no caller was type-checked. The declaration
|
|
631
|
+
states the limit as well: it silences a diagnostic and MUST NOT change which
|
|
632
|
+
rows a write touches — suppressing an audit warning is not a permission.
|
|
633
|
+
|
|
634
|
+
The same cast covered `timezone`, `tenantId`, `tenantIds` and `preserveAudit`,
|
|
635
|
+
all long since declared. Those reads now go through `DriverOptions`, so the next
|
|
636
|
+
undeclared option fails the build instead of hiding behind an existing cast.
|
|
637
|
+
|
|
638
|
+
**`SqlDriver.findOne(object, id)` is removed.** An undeclared
|
|
639
|
+
`typeof query === 'string' | 'number'` branch accepted a bare id. It was on no
|
|
640
|
+
contract, nothing outside that package's own tests used it, and the other two
|
|
641
|
+
drivers answered the identical call differently — `MemoryDriver` spreads the
|
|
642
|
+
string into `{0:'t',1:'1'}`, `MongoDBDriver` reads `query.where` as `undefined`
|
|
643
|
+
and returns an arbitrary row. It also bypassed the shared `findRows()` path, so
|
|
644
|
+
it skipped field selection, temporal coercion, unknown-column recovery and the
|
|
645
|
+
`singleRowLookup` ORDER BY decision. Spell an id lookup as the query it is:
|
|
646
|
+
|
|
647
|
+
```ts
|
|
648
|
+
-(await driver.findOne("task", "t1"));
|
|
649
|
+
+(await driver.findOne("task", { object: "task", where: { id: "t1" } }));
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
**`SqlDriver.initObjects` declares the `tenancy` it consumes.** Each object is
|
|
653
|
+
fed to `computeAndRecordTenantField`, which reads `obj.tenancy` to pick the
|
|
654
|
+
tenant column and to set or clear the sticky explicit-opt-out — but the
|
|
655
|
+
parameter type listed only `{ name, fields }`, so a caller that spelled the key
|
|
656
|
+
correctly was rejected while the driver read it anyway.
|
|
657
|
+
`registerExternalObject` already had it.
|
|
658
|
+
|
|
659
|
+
**`AnalyticsQueryInput` joins `AnalyticsQuery`.** `timezone` is
|
|
660
|
+
`.default('UTC')`, so the parsed type requires it and an authored literal does
|
|
661
|
+
not have it — the same two-tier split `QueryInput`/`QueryAST` already names on
|
|
662
|
+
the query side. `InMemoryDriver.create`/`bulkCreate` also declare their
|
|
663
|
+
`IDataDriver` return types; without them TS inferred the literal the method
|
|
664
|
+
builds and every other column of the created row disappeared from the caller's
|
|
665
|
+
view.
|
|
666
|
+
|
|
667
|
+
One silent runtime bug fell out of the same pass: a driver test asked for
|
|
668
|
+
`orderBy: [['id', 'asc']]`, the driver reads `item.field`, a tuple has none, and
|
|
669
|
+
the sort never reached SQL. The tuple spelling appears nowhere else.
|
|
670
|
+
|
|
671
|
+
- 06ba036: feat(drivers): `@objectstack/driver-turso` 迁回本仓并公开发布,五个 driver 统一收进 `packages/drivers/` (#4645)
|
|
672
|
+
|
|
673
|
+
`TursoDriver` 一直以 `extends SqlDriver` 的方式**跨仓库继承**本仓的类,自己却住在闭源的
|
|
674
|
+
`objectstack-ai/cloud`(`publishConfig: restricted`)。而本仓的 runtime 早就把 turso 当一等
|
|
675
|
+
公民——`http-dispatcher.ts` 里环境 provisioning 的偏好顺序第一位就是它,`POST /cloud/environments`
|
|
676
|
+
的 `driver` 参数示例是 `memory | turso`,`objectql/src/engine.ts` 还带着一段 turso 专属的瞬时
|
|
677
|
+
`fetch failed` 重试。开源侧的代码路径引用着一个自己仓里既测不到也 grep 不到的 driver,闭源侧则
|
|
678
|
+
在每次 pin bump 时追赶父类的重构。维护者裁定把核心迁回本仓、公开 Apache-2.0 发布。
|
|
679
|
+
|
|
680
|
+
**新包 `@objectstack/driver-turso`(`packages/drivers/driver-turso`,Apache-2.0,`access: public`)**
|
|
681
|
+
带着它在 cloud 的全部实现与测试落地:`TursoDriver`(local / replica / remote 三种传输模式)、
|
|
682
|
+
`RemoteTransport`(纯 `@libsql/client` 走 HTTP/WebSocket,无原生依赖,可跑 serverless/edge)、
|
|
683
|
+
驱动的 spec/Studio 元数据,以及 15 个测试文件 538 条断言——全部 hermetic,默认 CI 下不碰网络、
|
|
684
|
+
不要凭据(remote 面走包内的 sqlite stub)。
|
|
685
|
+
|
|
686
|
+
**留在 cloud(不随迁)**:按租户路由的 `multi-tenant.ts`(云产品差异化能力)及其 schema、
|
|
687
|
+
`vector-poc.test.ts`。因此本包的 barrel **不再导出** `createMultiTenantRouter` /
|
|
688
|
+
`MultiTenantConfig` / `MultiTenantRouter`,也不导出多租户 schema——它们从来不是这个 driver 的
|
|
689
|
+
一部分,只是曾经同包而已。
|
|
690
|
+
|
|
691
|
+
**目录重组**:五个 `IDataDriver` 实现(`driver-memory` / `driver-mongodb` / `driver-sql` /
|
|
692
|
+
`driver-sqlite-wasm` + 迁入的 `driver-turso`)现在都住在 `packages/drivers/`,
|
|
693
|
+
`knowledge-*` 与 `embedder-*` 留在 `packages/plugins/`。四个存量包**内容零改动**,只有
|
|
694
|
+
`repository.directory` 随目录更新——包名、入口、导出面、行为全部不变,消费者无需改动任何 import。
|
|
695
|
+
|
|
696
|
+
这也把 turso 交给了本仓的仓库级守卫:`check:driver-conformance` 从磁盘发现 driver 包,
|
|
697
|
+
迁入即入矩阵(5 drivers × 5 case-sets)。它的 temporal 两格是真绿(local 与 remote 双面套件),
|
|
698
|
+
filter 组合语义与两个分页 case-set 记为 measured DEBT——remote 传输自带一套 `buildWhereSQL` 与
|
|
699
|
+
`LIMIT`/`OFFSET` 拼装,是独立实现,"继承所以没问题"正是这些共享套件存在来证伪的假设。
|
|
700
|
+
补齐工作跟踪在 #5590。
|
|
701
|
+
|
|
702
|
+
- 9b43ee2: test(drivers): the filter-logic standard now covers the backend it was counted without (#4405)
|
|
703
|
+
|
|
704
|
+
`FILTER_LOGIC_CASES` (#3774) opens by calling itself the standard "the four
|
|
705
|
+
independent FilterCondition backends are each checked against". Five backends
|
|
706
|
+
exist. `driver-mongodb`'s `translateFilter` was missed, not excluded — an
|
|
707
|
+
independent implementation whose `$and`/`$or`/`$not` translation shares no line
|
|
708
|
+
of code with the SQL compiler or the in-memory matcher, and the only one whose
|
|
709
|
+
target language cannot spell the standard directly: MongoDB has no
|
|
710
|
+
document-level `$not` at all (the server answers `unknown top level operator:
|
|
711
|
+
$not`), so a negation has to leave as `$nor`, and a branch's own keys have to
|
|
712
|
+
stay in one document while `$and`/`$or` clauses are lifted beside them. That
|
|
713
|
+
route was never checked against the shared cases. Both DEBT rows the #4363 gate
|
|
714
|
+
recorded are now cleared, and `scripts/check-driver-conformance.mjs` reports
|
|
715
|
+
`ok` for every cell of the matrix.
|
|
716
|
+
|
|
717
|
+
**`driver-mongodb` runs the table twice, and the split is deliberate.**
|
|
718
|
+
`mongodb-filter-logic-translation.test.ts` drives every shared case through
|
|
719
|
+
`translateFilter` and evaluates the emitted MongoDB _document_ over the shared
|
|
720
|
+
fixture — a pure function, no server, so it always runs. That matters here more
|
|
721
|
+
than anywhere: `mongodb-memory-server` downloads a ~123 MB binary from
|
|
722
|
+
fastdl.mongodb.org, and a defect only a downloadable binary can catch is a
|
|
723
|
+
defect nobody catches on a restricted network. Its in-process reader is strict
|
|
724
|
+
by construction — every shape it does not model throws instead of evaluating to
|
|
725
|
+
true, a document-level `$not` included — and its own discrimination is pinned by
|
|
726
|
+
cases that require a widened document to FAIL the case it widens, so "all green"
|
|
727
|
+
cannot mean "the reader says yes to everything".
|
|
728
|
+
`mongodb-filter-logic-conformance.test.ts` runs the same table against a real
|
|
729
|
+
mongod and answers the one question the first half cannot — does MongoDB agree?
|
|
730
|
+
— skipping cleanly (never silently) when the binary is unreachable.
|
|
731
|
+
|
|
732
|
+
**`driver-sqlite-wasm` runs the table through its own engine.** It inherits
|
|
733
|
+
`SqlDriver`'s filter compiler, so nothing is re-implemented; what the suite pins
|
|
734
|
+
is that a nested `(… AND …) OR (… AND …)` survives the custom sql.js dialect
|
|
735
|
+
that compiles, binds and marshals it — the same seam its temporal and pagination
|
|
736
|
+
suites cover for their clauses. Tracked as DEBT rather than EXEMPT because
|
|
737
|
+
"inherits, therefore fine" is the assumption those suites exist to disprove; the
|
|
738
|
+
suite is what disproves it.
|
|
739
|
+
|
|
740
|
+
**No divergence was found.** `translateFilter` answers all seventeen shared
|
|
741
|
+
cases correctly today, `$not`-inside-a-branch and nested `$and`-inside-`$or`
|
|
742
|
+
included, so no translation change ships here — what changes is that the next
|
|
743
|
+
edit to it cannot quietly widen a filter. Both suites were verified to be
|
|
744
|
+
discriminating rather than decorative by reintroducing the #3774 miscompile
|
|
745
|
+
(propagating `or` into a branch's own contents): 15 of the mongodb translation
|
|
746
|
+
suite's 26 tests fail, and 13 of the wasm suite's 18.
|
|
747
|
+
|
|
748
|
+
`packages/spec`'s `filter-logic-conformance.ts` header now says five and names
|
|
749
|
+
the fifth — a code comment; no schema, export or generated artifact moved.
|
|
750
|
+
|
|
751
|
+
- c53aa53: File-backed SQLite now runs `journal_mode = WAL` (#3941).
|
|
752
|
+
|
|
753
|
+
`SqlDriver.connect()` set `auto_vacuum` and left the journal mode alone, so
|
|
754
|
+
every ObjectStack SQLite database ran SQLite's built-in default — a rollback
|
|
755
|
+
journal. That is the worst mode for the shape this platform actually has, which
|
|
756
|
+
is **several processes on one file**: a dev server, `os migrate`,
|
|
757
|
+
`os meta resync`, a test run. Measured, on the same file:
|
|
758
|
+
|
|
759
|
+
| | rollback journal | WAL |
|
|
760
|
+
| :--------------------------------------------- | :------------------------------------------------- | :---------------------------------------------------------------- |
|
|
761
|
+
| writer while another process holds a read open | `SQLITE_BUSY` — committing needs an exclusive lock | proceeds |
|
|
762
|
+
| idle attached connection visible to SQL | no — a lock lasts only as long as its transaction | yes (`locking_mode = EXCLUSIVE` + `BEGIN IMMEDIATE` reports busy) |
|
|
763
|
+
|
|
764
|
+
The second row is why the `os migrate` occupancy check had to inspect file
|
|
765
|
+
descriptors to see a live server at all (#3940): under a rollback journal there
|
|
766
|
+
was nothing in the database to see. That signal stays — it names the process,
|
|
767
|
+
which WAL's lock probe cannot — but the SQL probe is now authoritative for
|
|
768
|
+
databases ObjectStack created rather than a fallback that was blind in practice.
|
|
769
|
+
Concurrent _writers_ still serialize; SQLite allows one at a time in any mode.
|
|
770
|
+
|
|
771
|
+
Journal mode is a persistent property of the file, so an existing database is
|
|
772
|
+
converted in place on the next connect (a header change — no rows are touched)
|
|
773
|
+
and stays converted. Two consequences to plan for:
|
|
774
|
+
|
|
775
|
+
- `app.db-wal` / `app.db-shm` exist beside the database while a connection is
|
|
776
|
+
attached, and `app.db-wal` can hold committed transactions. A clean shutdown
|
|
777
|
+
checkpoints them away; a naive copy of `app.db` alone while a server runs does
|
|
778
|
+
not. Use `sqlite3 app.db ".backup …"`.
|
|
779
|
+
- **WAL does not work on network filesystems** (NFS/SMB). Opt out with
|
|
780
|
+
`OS_DATABASE_SQLITE_JOURNAL_MODE=delete`, or per datasource with
|
|
781
|
+
`sqliteJournalMode: 'delete'` in the driver config (which outranks the env
|
|
782
|
+
var). Either form _applies_ `delete`, so it also converts a database that
|
|
783
|
+
already adopted WAL back — skipping would have stranded it.
|
|
784
|
+
|
|
785
|
+
Nothing here fails a boot, and nothing is assumed: `PRAGMA journal_mode = X`
|
|
786
|
+
answers with the mode actually in force rather than raising on refusal, so the
|
|
787
|
+
reply is read back; and because a filesystem can accept WAL and then fail the
|
|
788
|
+
first read _through_ it, the mode is proven with a read and rolled back to
|
|
789
|
+
`delete` if that fails — with a warning naming the file and the escape hatch.
|
|
790
|
+
`synchronous` is untouched, so durability is exactly what it was. `:memory:`
|
|
791
|
+
databases are left alone, as is `auto_vacuum = INCREMENTAL`, which keeps
|
|
792
|
+
reclaiming under WAL (ADR-0057).
|
|
793
|
+
|
|
794
|
+
`os db clean` now counts `-wal` / `-shm` as part of the database when it measures
|
|
795
|
+
what a `VACUUM` reclaimed, so bytes that were sitting in the log do not read as a
|
|
796
|
+
reclaim of zero.
|
|
797
|
+
|
|
798
|
+
`@objectstack/driver-sqlite-wasm` deliberately stays out of WAL. Its live
|
|
799
|
+
database is in the WASM heap and what reaches disk is a byte image it exports, so
|
|
800
|
+
nothing reads the database across processes and the pragma buys it nothing —
|
|
801
|
+
while still being a persistent header change in the operator's file. sql.js
|
|
802
|
+
_accepts_ the pragma (its VFS is memory-backed), so this had to be declared
|
|
803
|
+
rather than discovered.
|
|
804
|
+
|
|
805
|
+
It also now parks a `-wal` left behind by an unclean native-driver exit rather
|
|
806
|
+
than loading the image beside it: wasm SQLite cannot read that log, and leaving
|
|
807
|
+
it next to a freshly rewritten image would let a later real SQLite replay frames
|
|
808
|
+
that no longer belong to it. The warning names the file it parked and how to
|
|
809
|
+
recover what was in it.
|
|
810
|
+
|
|
811
|
+
- bee5ffe: drivers: every SQL read door routes through the tenant chokepoint (#6792)
|
|
812
|
+
|
|
813
|
+
`SqlDriver.applyTenantScope()` owns read-side tenant isolation for the whole SQL family —
|
|
814
|
+
the `tenantId` early-out, the "object has no tenant field" early-out, the NULL-org
|
|
815
|
+
platform-row rule (#2734) and the ADR-0105 D2 union posture (#3623). Its own docstring
|
|
816
|
+
said "every CRUD method routes through it". Nothing ever checked that, and it was false
|
|
817
|
+
for as long as it had existed. **Three** read doors built their query through
|
|
818
|
+
`getBuilder()` and never arrived:
|
|
819
|
+
|
|
820
|
+
- **`findWithWindowFunctions()`** — the documented #4286 window door. It returns **rows**,
|
|
821
|
+
so on a deployment where the scope would have applied (`options.tenantId` set, object
|
|
822
|
+
has a tenant field) it returned rows belonging to **every** tenant. Measured with two
|
|
823
|
+
tenants seeded plus one NULL-org platform row: `tenantId: 'org_a'` returned
|
|
824
|
+
`[a1, a2, b1, b2, p1]` here against `find()`'s `[a1, a2, p1]` — another tenant's rows,
|
|
825
|
+
handed over at the driver layer.
|
|
826
|
+
- **`analyzeQuery()` / `explain()`** — returns a **plan**, not rows, so this is a smaller
|
|
827
|
+
fix and it is made on its own merits rather than folded into the one above. It is the
|
|
828
|
+
same defect #6577 fixed on these two methods one builder line lower: a plan is only
|
|
829
|
+
worth reading if it explains the statement `find()` would actually run, and a missing
|
|
830
|
+
tenant predicate changes selectivity and therefore which index the planner picks.
|
|
831
|
+
Compiled `select * from account` where `find()` sent the `organization_id` clause.
|
|
832
|
+
- **`distinct()`** — returns one column's **values** for every tenant. This one was in no
|
|
833
|
+
card. #6792 states the opposite, listing `distinct` among the scoped call sites; the
|
|
834
|
+
13th read site is `aggregate()`. It was found by measuring the invariant rather than
|
|
835
|
+
re-reading it.
|
|
836
|
+
|
|
837
|
+
All three now call `applyTenantScope()` beside their `getBuilder()` line, the position
|
|
838
|
+
`findRows()` uses. They route through the chokepoint rather than re-deriving a predicate:
|
|
839
|
+
a local equality would silently drop NULL-org platform rows (#2734) and collapse group
|
|
840
|
+
reads to active-org reach (#3623). Both of the chokepoint's early-outs are inherited
|
|
841
|
+
unchanged, so an unscoped admin/seed read (no `tenantId`) and any object without a tenant
|
|
842
|
+
field behave exactly as before.
|
|
843
|
+
|
|
844
|
+
**The durable half is a gate, not the three lines.** `pnpm check:tenant-chokepoint`
|
|
845
|
+
(`scripts/check-tenant-chokepoint.mjs`, wired into `.github/workflows/lint.yml`) re-derives
|
|
846
|
+
the invariant from the AST across the `SqlDriver` family on every run: a method that builds
|
|
847
|
+
through `getBuilder(object, options)` must call `applyTenantScope()` on that builder, or
|
|
848
|
+
carry a written exemption. Insert builders are exempt structurally — write-side tenancy is
|
|
849
|
+
`injectTenantOnInsert` — rather than by a name list. It is keyed on the **builder** and not
|
|
850
|
+
on the method signature, because the signature criterion the card sketches ("takes
|
|
851
|
+
`(object, …, options)` and returns rows") misses `distinct` (no `query` parameter) and
|
|
852
|
+
`analyzeQuery` (returns a plan). Verified red against the pre-fix tree, red against a
|
|
853
|
+
newly-added unscoped door, and silent once that door is scoped.
|
|
854
|
+
|
|
855
|
+
The chokepoint docstring no longer asserts the invariant; it names the gate that proves it.
|
|
856
|
+
|
|
857
|
+
If you call these doors directly on a multi-tenant deployment, pass `options.tenantId` as
|
|
858
|
+
you would to `find()` — that is what now takes effect. Callers that never passed it are
|
|
859
|
+
unaffected; that remains the documented unscoped/admin path.
|
|
860
|
+
|
|
861
|
+
- 24915d2: fix(driver-sqlite-wasm): a `RETURNING` write is a write — persist it (#4518)
|
|
862
|
+
|
|
863
|
+
A file-backed `sqlite-wasm` database flushed its schema at boot and then
|
|
864
|
+
recorded nothing else. Every table was on disk; every row written after schema
|
|
865
|
+
sync lived only in the WASM heap and died with the process. Reopening the file
|
|
866
|
+
found a complete, empty database.
|
|
867
|
+
|
|
868
|
+
**Cause.** The Knex dialect picked its execution branch from _"does this
|
|
869
|
+
statement return rows"_ — and then marked the database dirty only on the other,
|
|
870
|
+
row-less branch. `INSERT … RETURNING *` returns rows, so it executed on the
|
|
871
|
+
row-returning branch and never set the flag. Since the `on-disconnect` flush is
|
|
872
|
+
gated on the same flag, nothing rescued it afterwards either: **both** persist
|
|
873
|
+
strategies dropped the write. ObjectQL writes through `RETURNING *` (it hands
|
|
874
|
+
the stored row back to the caller), so this covered essentially all business
|
|
875
|
+
data, along with `knex.raw('INSERT …')` and any other mutation arriving without
|
|
876
|
+
a Knex `method`.
|
|
877
|
+
|
|
878
|
+
**Fix.** "Does this statement change the database?" is now one exported
|
|
879
|
+
predicate — `statementMutatesDatabase(sql, method)` — classifying by Knex method
|
|
880
|
+
_and_ SQL text, applied at a single funnel after execution. It is independent of
|
|
881
|
+
which branch executed the statement, so a mutation can no longer slip through by
|
|
882
|
+
returning rows, by arriving without a method, or by taking a branch that forgot
|
|
883
|
+
to say so. Transaction control still routes to `noteTransactionControl`, which
|
|
884
|
+
keeps deferring flushes until the transaction closes (#1494), and mutating
|
|
885
|
+
`PRAGMA` assignments (`auto_vacuum`, `user_version`) now count as writes too.
|
|
886
|
+
|
|
887
|
+
**What changes for you.** Nothing to author. File-backed wasm SQLite now
|
|
888
|
+
actually persists under `on-write` / `debounced:*`, and `disconnect()` is a real
|
|
889
|
+
durability boundary: when it returns, committed data is on disk. This is what
|
|
890
|
+
`bootStack({ databaseFile })` in `@objectstack/verify` needed to make `stop()` →
|
|
891
|
+
second `bootStack` a genuine cold boot — the suspended-run restart proof
|
|
892
|
+
ADR-0019 promises is now asserted end to end in the dogfood gate. Expect more
|
|
893
|
+
disk writes than before on a file-backed dev database, because previously there
|
|
894
|
+
were almost none.
|
|
895
|
+
|
|
896
|
+
**One internal signature moved.** `WasmSqliteConnection.markDirty(method?)` is
|
|
897
|
+
now `markDirty()`. It used to re-filter the caller's Knex method against its own
|
|
898
|
+
allowlist, which made "did this mutate?" a decision taken in two places that
|
|
899
|
+
could — and did — disagree. If you call it directly, drop the argument; the
|
|
900
|
+
dialect classifies, the connection obeys.
|
|
901
|
+
|
|
902
|
+
- Updated dependencies [50616d9]
|
|
903
|
+
- Updated dependencies [430dcc2]
|
|
904
|
+
- Updated dependencies [690ccf2]
|
|
905
|
+
- Updated dependencies [6a67d7a]
|
|
906
|
+
- Updated dependencies [333a374]
|
|
907
|
+
- Updated dependencies [9fe9c1d]
|
|
908
|
+
- Updated dependencies [3d5c090]
|
|
909
|
+
- Updated dependencies [e5bd768]
|
|
910
|
+
- Updated dependencies [08b5a3d]
|
|
911
|
+
- Updated dependencies [e027b3e]
|
|
912
|
+
- Updated dependencies [e6ac4bd]
|
|
913
|
+
- Updated dependencies [c2429b0]
|
|
914
|
+
- Updated dependencies [445a0c2]
|
|
915
|
+
- Updated dependencies [d99aeb3]
|
|
916
|
+
- Updated dependencies [f6609e6]
|
|
917
|
+
- Updated dependencies [4727eb8]
|
|
918
|
+
- Updated dependencies [a70358a]
|
|
919
|
+
- Updated dependencies [0ecc656]
|
|
920
|
+
- Updated dependencies [06772eb]
|
|
921
|
+
- Updated dependencies [d4e0809]
|
|
922
|
+
- Updated dependencies [80334c7]
|
|
923
|
+
- Updated dependencies [f63cd09]
|
|
924
|
+
- Updated dependencies [97e7e3c]
|
|
925
|
+
- Updated dependencies [ce5242c]
|
|
926
|
+
- Updated dependencies [a7163ea]
|
|
927
|
+
- Updated dependencies [e6e9379]
|
|
928
|
+
- Updated dependencies [5823d59]
|
|
929
|
+
- Updated dependencies [3140f9c]
|
|
930
|
+
- Updated dependencies [9500ba4]
|
|
931
|
+
- Updated dependencies [fa3d0cf]
|
|
932
|
+
- Updated dependencies [af5a224]
|
|
933
|
+
- Updated dependencies [71f76e1]
|
|
934
|
+
- Updated dependencies [37b1346]
|
|
935
|
+
- Updated dependencies [99736a0]
|
|
936
|
+
- Updated dependencies [fe67e34]
|
|
937
|
+
- Updated dependencies [fdb4f50]
|
|
938
|
+
- Updated dependencies [270650f]
|
|
939
|
+
- Updated dependencies [3aef718]
|
|
940
|
+
- Updated dependencies [1bd5652]
|
|
941
|
+
- Updated dependencies [14252d3]
|
|
942
|
+
- Updated dependencies [7fb436c]
|
|
943
|
+
- Updated dependencies [879ea13]
|
|
944
|
+
- Updated dependencies [8828b9e]
|
|
945
|
+
- Updated dependencies [1ea6bce]
|
|
946
|
+
- Updated dependencies [c1dcacd]
|
|
947
|
+
- Updated dependencies [ad303ed]
|
|
948
|
+
- Updated dependencies [32ccb23]
|
|
949
|
+
- Updated dependencies [f5a4ef0]
|
|
950
|
+
- Updated dependencies [2d3e255]
|
|
951
|
+
- Updated dependencies [a8940e4]
|
|
952
|
+
- Updated dependencies [7d7521f]
|
|
953
|
+
- Updated dependencies [5dc4d02]
|
|
954
|
+
- Updated dependencies [f724f69]
|
|
955
|
+
- Updated dependencies [98877c9]
|
|
956
|
+
- Updated dependencies [98877c9]
|
|
957
|
+
- Updated dependencies [53068c1]
|
|
958
|
+
- Updated dependencies [ee58392]
|
|
959
|
+
- Updated dependencies [f16e54e]
|
|
960
|
+
- Updated dependencies [06be54e]
|
|
961
|
+
- Updated dependencies [28ad90e]
|
|
962
|
+
- Updated dependencies [76d74ec]
|
|
963
|
+
- Updated dependencies [201b31f]
|
|
964
|
+
- Updated dependencies [e6b1b69]
|
|
965
|
+
- Updated dependencies [29e28a3]
|
|
966
|
+
- Updated dependencies [c7f4417]
|
|
967
|
+
- Updated dependencies [259459d]
|
|
968
|
+
- Updated dependencies [3f7f14e]
|
|
969
|
+
- Updated dependencies [e2616e0]
|
|
970
|
+
- Updated dependencies [6fdc5c6]
|
|
971
|
+
- Updated dependencies [8b9d71e]
|
|
972
|
+
- Updated dependencies [05154a1]
|
|
973
|
+
- Updated dependencies [33f5e23]
|
|
974
|
+
- Updated dependencies [259af21]
|
|
975
|
+
- Updated dependencies [f8644c7]
|
|
976
|
+
- Updated dependencies [306ca50]
|
|
977
|
+
- Updated dependencies [978fed2]
|
|
978
|
+
- Updated dependencies [cfc293f]
|
|
979
|
+
- Updated dependencies [587fc91]
|
|
980
|
+
- Updated dependencies [de70b42]
|
|
981
|
+
- Updated dependencies [9b6fe7c]
|
|
982
|
+
- Updated dependencies [fb3d99b]
|
|
983
|
+
- Updated dependencies [1986594]
|
|
984
|
+
- Updated dependencies [6968885]
|
|
985
|
+
- Updated dependencies [eaed61f]
|
|
986
|
+
- Updated dependencies [cdfbee2]
|
|
987
|
+
- Updated dependencies [ad4af62]
|
|
988
|
+
- Updated dependencies [debe2f6]
|
|
989
|
+
- Updated dependencies [d44dbfa]
|
|
990
|
+
- Updated dependencies [29c6c9d]
|
|
991
|
+
- Updated dependencies [d21c001]
|
|
992
|
+
- Updated dependencies [ad047d2]
|
|
993
|
+
- Updated dependencies [8c711fb]
|
|
994
|
+
- Updated dependencies [f1cc3a3]
|
|
995
|
+
- Updated dependencies [09e4547]
|
|
996
|
+
- Updated dependencies [97b0798]
|
|
997
|
+
- Updated dependencies [474fe39]
|
|
998
|
+
- Updated dependencies [0bc685a]
|
|
999
|
+
- Updated dependencies [b949059]
|
|
1000
|
+
- Updated dependencies [2826d1e]
|
|
1001
|
+
- Updated dependencies [be1c52c]
|
|
1002
|
+
- Updated dependencies [c5ff96d]
|
|
1003
|
+
- Updated dependencies [5a84d41]
|
|
1004
|
+
- Updated dependencies [84e7be9]
|
|
1005
|
+
- Updated dependencies [91f4c78]
|
|
1006
|
+
- Updated dependencies [ddc2527]
|
|
1007
|
+
- Updated dependencies [820eff9]
|
|
1008
|
+
- Updated dependencies [a6c3f38]
|
|
1009
|
+
- Updated dependencies [debc23a]
|
|
1010
|
+
- Updated dependencies [0f8ad09]
|
|
1011
|
+
- Updated dependencies [553a47f]
|
|
1012
|
+
- Updated dependencies [43a7a8d]
|
|
1013
|
+
- Updated dependencies [a98085f]
|
|
1014
|
+
- Updated dependencies [20b1a9e]
|
|
1015
|
+
- Updated dependencies [344a22a]
|
|
1016
|
+
- Updated dependencies [4827e91]
|
|
1017
|
+
- Updated dependencies [8d895ff]
|
|
1018
|
+
- Updated dependencies [86f7a20]
|
|
1019
|
+
- Updated dependencies [a3a884d]
|
|
1020
|
+
- Updated dependencies [cfed092]
|
|
1021
|
+
- Updated dependencies [203a449]
|
|
1022
|
+
- Updated dependencies [8f9689f]
|
|
1023
|
+
- Updated dependencies [73f69dc]
|
|
1024
|
+
- Updated dependencies [04c56aa]
|
|
1025
|
+
- Updated dependencies [f6472d7]
|
|
1026
|
+
- Updated dependencies [57a3bb3]
|
|
1027
|
+
- Updated dependencies [b3efeb7]
|
|
1028
|
+
- Updated dependencies [ecb39ea]
|
|
1029
|
+
- Updated dependencies [ddd075a]
|
|
1030
|
+
- Updated dependencies [88154be]
|
|
1031
|
+
- Updated dependencies [db12b88]
|
|
1032
|
+
- Updated dependencies [62452c6]
|
|
1033
|
+
- Updated dependencies [6f6fec7]
|
|
1034
|
+
- Updated dependencies [7d1ff75]
|
|
1035
|
+
- Updated dependencies [e8dc61e]
|
|
1036
|
+
- Updated dependencies [9c82146]
|
|
1037
|
+
- Updated dependencies [5f9a987]
|
|
1038
|
+
- Updated dependencies [744b8f5]
|
|
1039
|
+
- Updated dependencies [ac37fc6]
|
|
1040
|
+
- Updated dependencies [2f3e793]
|
|
1041
|
+
- Updated dependencies [4820f55]
|
|
1042
|
+
- Updated dependencies [462d9c4]
|
|
1043
|
+
- Updated dependencies [78caf51]
|
|
1044
|
+
- Updated dependencies [7d21581]
|
|
1045
|
+
- Updated dependencies [37785ed]
|
|
1046
|
+
- Updated dependencies [62a789b]
|
|
1047
|
+
- Updated dependencies [2e284b2]
|
|
1048
|
+
- Updated dependencies [d8e8d9c]
|
|
1049
|
+
- Updated dependencies [789ad63]
|
|
1050
|
+
- Updated dependencies [f2445c9]
|
|
1051
|
+
- Updated dependencies [94e749b]
|
|
1052
|
+
- Updated dependencies [ea1d916]
|
|
1053
|
+
- Updated dependencies [2af1988]
|
|
1054
|
+
- Updated dependencies [0af50a3]
|
|
1055
|
+
- Updated dependencies [1b49eaf]
|
|
1056
|
+
- Updated dependencies [ae31a19]
|
|
1057
|
+
- Updated dependencies [2e836de]
|
|
1058
|
+
- Updated dependencies [e0f300b]
|
|
1059
|
+
- Updated dependencies [0161c7f]
|
|
1060
|
+
- Updated dependencies [e900015]
|
|
1061
|
+
- Updated dependencies [db02d47]
|
|
1062
|
+
- Updated dependencies [b5bdf48]
|
|
1063
|
+
- Updated dependencies [23338c3]
|
|
1064
|
+
- Updated dependencies [12a19a8]
|
|
1065
|
+
- Updated dependencies [5b843fb]
|
|
1066
|
+
- Updated dependencies [62b6a2f]
|
|
1067
|
+
- Updated dependencies [7e5af5c]
|
|
1068
|
+
- Updated dependencies [5b4780b]
|
|
1069
|
+
- Updated dependencies [a933452]
|
|
1070
|
+
- Updated dependencies [9d1d9c7]
|
|
1071
|
+
- Updated dependencies [8140915]
|
|
1072
|
+
- Updated dependencies [a019e52]
|
|
1073
|
+
- Updated dependencies [e8f8f6c]
|
|
1074
|
+
- Updated dependencies [41dcda3]
|
|
1075
|
+
- Updated dependencies [7b48cf9]
|
|
1076
|
+
- Updated dependencies [b5404f4]
|
|
1077
|
+
- Updated dependencies [64fc6d5]
|
|
1078
|
+
- Updated dependencies [b746aa0]
|
|
1079
|
+
- Updated dependencies [b4487aa]
|
|
1080
|
+
- Updated dependencies [1007379]
|
|
1081
|
+
- Updated dependencies [65ca83a]
|
|
1082
|
+
- Updated dependencies [0bfdf46]
|
|
1083
|
+
- Updated dependencies [947d4f9]
|
|
1084
|
+
- Updated dependencies [f764691]
|
|
1085
|
+
- Updated dependencies [e120a5a]
|
|
1086
|
+
- Updated dependencies [e5bd2f6]
|
|
1087
|
+
- Updated dependencies [e650d67]
|
|
1088
|
+
- Updated dependencies [04476e7]
|
|
1089
|
+
- Updated dependencies [67bf2e2]
|
|
1090
|
+
- Updated dependencies [eaaf03c]
|
|
1091
|
+
- Updated dependencies [d17df80]
|
|
1092
|
+
- Updated dependencies [7d0e7b5]
|
|
1093
|
+
- Updated dependencies [c6d1cb4]
|
|
1094
|
+
- Updated dependencies [6513c17]
|
|
1095
|
+
- Updated dependencies [36030ff]
|
|
1096
|
+
- Updated dependencies [79228cd]
|
|
1097
|
+
- Updated dependencies [6117f7b]
|
|
1098
|
+
- Updated dependencies [e533b0b]
|
|
1099
|
+
- Updated dependencies [cdf4d9a]
|
|
1100
|
+
- Updated dependencies [aee1806]
|
|
1101
|
+
- Updated dependencies [c13350b]
|
|
1102
|
+
- Updated dependencies [c13350b]
|
|
1103
|
+
- Updated dependencies [2c1988c]
|
|
1104
|
+
- Updated dependencies [9ca2d85]
|
|
1105
|
+
- Updated dependencies [c13350b]
|
|
1106
|
+
- Updated dependencies [891d345]
|
|
1107
|
+
- Updated dependencies [42e3b01]
|
|
1108
|
+
- Updated dependencies [c8124e5]
|
|
1109
|
+
- Updated dependencies [a52e2ef]
|
|
1110
|
+
- Updated dependencies [5293114]
|
|
1111
|
+
- Updated dependencies [376a061]
|
|
1112
|
+
- Updated dependencies [c142ced]
|
|
1113
|
+
- Updated dependencies [211abdb]
|
|
1114
|
+
- Updated dependencies [b3363e9]
|
|
1115
|
+
- Updated dependencies [39eb01b]
|
|
1116
|
+
- Updated dependencies [eda599e]
|
|
1117
|
+
- Updated dependencies [a1a4140]
|
|
1118
|
+
- Updated dependencies [7c7e246]
|
|
1119
|
+
- Updated dependencies [2ef1807]
|
|
1120
|
+
- Updated dependencies [f35cdc5]
|
|
1121
|
+
- Updated dependencies [d03fe25]
|
|
1122
|
+
- Updated dependencies [217e2e6]
|
|
1123
|
+
- Updated dependencies [2672f85]
|
|
1124
|
+
- Updated dependencies [20bc357]
|
|
1125
|
+
- Updated dependencies [11066f6]
|
|
1126
|
+
- Updated dependencies [916af17]
|
|
1127
|
+
- Updated dependencies [84c86fb]
|
|
1128
|
+
- Updated dependencies [2a2a9fb]
|
|
1129
|
+
- Updated dependencies [86a71d1]
|
|
1130
|
+
- Updated dependencies [c001422]
|
|
1131
|
+
- Updated dependencies [77022a9]
|
|
1132
|
+
- Updated dependencies [d5c75e2]
|
|
1133
|
+
- Updated dependencies [03d26f7]
|
|
1134
|
+
- Updated dependencies [5966c2a]
|
|
1135
|
+
- Updated dependencies [2382580]
|
|
1136
|
+
- Updated dependencies [9ea2bc5]
|
|
1137
|
+
- Updated dependencies [a2e157c]
|
|
1138
|
+
- Updated dependencies [95c4227]
|
|
1139
|
+
- Updated dependencies [2a61116]
|
|
1140
|
+
- Updated dependencies [52760bf]
|
|
1141
|
+
- Updated dependencies [5543020]
|
|
1142
|
+
- Updated dependencies [880d343]
|
|
1143
|
+
- Updated dependencies [6e82972]
|
|
1144
|
+
- Updated dependencies [d4df105]
|
|
1145
|
+
- Updated dependencies [4615a18]
|
|
1146
|
+
- Updated dependencies [f505689]
|
|
1147
|
+
- Updated dependencies [d9fa683]
|
|
1148
|
+
- Updated dependencies [32d3800]
|
|
1149
|
+
- Updated dependencies [606d577]
|
|
1150
|
+
- Updated dependencies [4384921]
|
|
1151
|
+
- Updated dependencies [d367f03]
|
|
1152
|
+
- Updated dependencies [45e711a]
|
|
1153
|
+
- Updated dependencies [465a0fa]
|
|
1154
|
+
- Updated dependencies [cf5e033]
|
|
1155
|
+
- Updated dependencies [6de592c]
|
|
1156
|
+
- Updated dependencies [d254421]
|
|
1157
|
+
- Updated dependencies [e2798fa]
|
|
1158
|
+
- Updated dependencies [06ba036]
|
|
1159
|
+
- Updated dependencies [3c628ce]
|
|
1160
|
+
- Updated dependencies [c2d9098]
|
|
1161
|
+
- Updated dependencies [0fd8556]
|
|
1162
|
+
- Updated dependencies [3c7bcc0]
|
|
1163
|
+
- Updated dependencies [4b6cac7]
|
|
1164
|
+
- Updated dependencies [7631964]
|
|
1165
|
+
- Updated dependencies [ac471a0]
|
|
1166
|
+
- Updated dependencies [60ae58e]
|
|
1167
|
+
- Updated dependencies [7f62706]
|
|
1168
|
+
- Updated dependencies [667fa44]
|
|
1169
|
+
- Updated dependencies [37e38d1]
|
|
1170
|
+
- Updated dependencies [e906126]
|
|
1171
|
+
- Updated dependencies [ce92674]
|
|
1172
|
+
- Updated dependencies [08363a0]
|
|
1173
|
+
- Updated dependencies [444de5b]
|
|
1174
|
+
- Updated dependencies [0f17114]
|
|
1175
|
+
- Updated dependencies [a227ed7]
|
|
1176
|
+
- Updated dependencies [7cb922e]
|
|
1177
|
+
- Updated dependencies [1d22114]
|
|
1178
|
+
- Updated dependencies [1eb13a0]
|
|
1179
|
+
- Updated dependencies [c52e608]
|
|
1180
|
+
- Updated dependencies [9613396]
|
|
1181
|
+
- Updated dependencies [3f7b4ff]
|
|
1182
|
+
- Updated dependencies [74155c7]
|
|
1183
|
+
- Updated dependencies [b5f9397]
|
|
1184
|
+
- Updated dependencies [ed77493]
|
|
1185
|
+
- Updated dependencies [6908830]
|
|
1186
|
+
- Updated dependencies [8b06bba]
|
|
1187
|
+
- Updated dependencies [58a03d2]
|
|
1188
|
+
- Updated dependencies [2bacd1a]
|
|
1189
|
+
- Updated dependencies [e47b342]
|
|
1190
|
+
- Updated dependencies [4c54037]
|
|
1191
|
+
- Updated dependencies [dc530b4]
|
|
1192
|
+
- Updated dependencies [9f601e8]
|
|
1193
|
+
- Updated dependencies [6a9dec6]
|
|
1194
|
+
- Updated dependencies [0f7157b]
|
|
1195
|
+
- Updated dependencies [4dc1c7d]
|
|
1196
|
+
- Updated dependencies [d9bef45]
|
|
1197
|
+
- Updated dependencies [4dfd002]
|
|
1198
|
+
- Updated dependencies [f549a0d]
|
|
1199
|
+
- Updated dependencies [51c5227]
|
|
1200
|
+
- Updated dependencies [82da264]
|
|
1201
|
+
- Updated dependencies [f586f1a]
|
|
1202
|
+
- Updated dependencies [77be690]
|
|
1203
|
+
- Updated dependencies [4ed7ed4]
|
|
1204
|
+
- Updated dependencies [9b9b70f]
|
|
1205
|
+
- Updated dependencies [f5a9bc2]
|
|
1206
|
+
- Updated dependencies [e59786e]
|
|
1207
|
+
- Updated dependencies [2fa4ca1]
|
|
1208
|
+
- Updated dependencies [bcf1112]
|
|
1209
|
+
- Updated dependencies [baeb4f0]
|
|
1210
|
+
- Updated dependencies [29488cc]
|
|
1211
|
+
- Updated dependencies [881a3cc]
|
|
1212
|
+
- Updated dependencies [f5a2320]
|
|
1213
|
+
- Updated dependencies [ad6317b]
|
|
1214
|
+
- Updated dependencies [811c30c]
|
|
1215
|
+
- Updated dependencies [a4a85c8]
|
|
1216
|
+
- Updated dependencies [859cb83]
|
|
1217
|
+
- Updated dependencies [07a4e26]
|
|
1218
|
+
- Updated dependencies [9774b78]
|
|
1219
|
+
- Updated dependencies [8a88885]
|
|
1220
|
+
- Updated dependencies [deb538f]
|
|
1221
|
+
- Updated dependencies [b49ccfd]
|
|
1222
|
+
- Updated dependencies [c7406b0]
|
|
1223
|
+
- Updated dependencies [5b89711]
|
|
1224
|
+
- Updated dependencies [85d95e7]
|
|
1225
|
+
- Updated dependencies [08cd163]
|
|
1226
|
+
- Updated dependencies [0c8a22f]
|
|
1227
|
+
- Updated dependencies [6f98c2d]
|
|
1228
|
+
- Updated dependencies [5f7669e]
|
|
1229
|
+
- Updated dependencies [becbe53]
|
|
1230
|
+
- Updated dependencies [b127c8b]
|
|
1231
|
+
- Updated dependencies [763931e]
|
|
1232
|
+
- Updated dependencies [ec975f1]
|
|
1233
|
+
- Updated dependencies [168f60f]
|
|
1234
|
+
- Updated dependencies [b07d829]
|
|
1235
|
+
- Updated dependencies [de9af8a]
|
|
1236
|
+
- Updated dependencies [eb4204b]
|
|
1237
|
+
- Updated dependencies [a80302a]
|
|
1238
|
+
- Updated dependencies [a648e96]
|
|
1239
|
+
- Updated dependencies [a47ac06]
|
|
1240
|
+
- Updated dependencies [e4c61a7]
|
|
1241
|
+
- Updated dependencies [cc60165]
|
|
1242
|
+
- Updated dependencies [474f131]
|
|
1243
|
+
- Updated dependencies [081aa6f]
|
|
1244
|
+
- Updated dependencies [91f4c78]
|
|
1245
|
+
- Updated dependencies [050cd82]
|
|
1246
|
+
- Updated dependencies [4d552af]
|
|
1247
|
+
- Updated dependencies [44d677c]
|
|
1248
|
+
- Updated dependencies [c32944d]
|
|
1249
|
+
- Updated dependencies [1dd780f]
|
|
1250
|
+
- Updated dependencies [e8d0c21]
|
|
1251
|
+
- Updated dependencies [244ca86]
|
|
1252
|
+
- Updated dependencies [546ab3c]
|
|
1253
|
+
- Updated dependencies [c4df271]
|
|
1254
|
+
- Updated dependencies [c8d6f6e]
|
|
1255
|
+
- Updated dependencies [0b51bb6]
|
|
1256
|
+
- Updated dependencies [d9971d3]
|
|
1257
|
+
- Updated dependencies [7dc1067]
|
|
1258
|
+
- Updated dependencies [4f13be2]
|
|
1259
|
+
- Updated dependencies [a41ba5c]
|
|
1260
|
+
- Updated dependencies [189854c]
|
|
1261
|
+
- Updated dependencies [5d4de37]
|
|
1262
|
+
- Updated dependencies [0e3a226]
|
|
1263
|
+
- Updated dependencies [92a67f2]
|
|
1264
|
+
- Updated dependencies [9136327]
|
|
1265
|
+
- Updated dependencies [bf0ae99]
|
|
1266
|
+
- Updated dependencies [eb3e650]
|
|
1267
|
+
- Updated dependencies [abeb375]
|
|
1268
|
+
- Updated dependencies [cb3b6cd]
|
|
1269
|
+
- Updated dependencies [73b7234]
|
|
1270
|
+
- Updated dependencies [d2b97c3]
|
|
1271
|
+
- Updated dependencies [61cc079]
|
|
1272
|
+
- Updated dependencies [45dc446]
|
|
1273
|
+
- Updated dependencies [0e96e46]
|
|
1274
|
+
- Updated dependencies [c1d44f7]
|
|
1275
|
+
- Updated dependencies [59b794f]
|
|
1276
|
+
- Updated dependencies [ef4efa8]
|
|
1277
|
+
- Updated dependencies [cbb6a5c]
|
|
1278
|
+
- Updated dependencies [fc3a36a]
|
|
1279
|
+
- Updated dependencies [ab9fb5c]
|
|
1280
|
+
- Updated dependencies [69787f0]
|
|
1281
|
+
- Updated dependencies [5d022a1]
|
|
1282
|
+
- Updated dependencies [042b9ee]
|
|
1283
|
+
- Updated dependencies [f985b3f]
|
|
1284
|
+
- Updated dependencies [795b6e1]
|
|
1285
|
+
- Updated dependencies [d52d4fe]
|
|
1286
|
+
- Updated dependencies [742cebb]
|
|
1287
|
+
- Updated dependencies [175d789]
|
|
1288
|
+
- Updated dependencies [f549a0d]
|
|
1289
|
+
- Updated dependencies [427344c]
|
|
1290
|
+
- Updated dependencies [8af76ae]
|
|
1291
|
+
- Updated dependencies [1d4756e]
|
|
1292
|
+
- Updated dependencies [720c5ad]
|
|
1293
|
+
- Updated dependencies [a8d1e24]
|
|
1294
|
+
- Updated dependencies [b85cc54]
|
|
1295
|
+
- Updated dependencies [a36db28]
|
|
1296
|
+
- Updated dependencies [7a8476f]
|
|
1297
|
+
- Updated dependencies [518ca7a]
|
|
1298
|
+
- Updated dependencies [41642b0]
|
|
1299
|
+
- Updated dependencies [4cca74c]
|
|
1300
|
+
- Updated dependencies [88ef03e]
|
|
1301
|
+
- Updated dependencies [9a4932a]
|
|
1302
|
+
- Updated dependencies [3f8817a]
|
|
1303
|
+
- Updated dependencies [a2443e3]
|
|
1304
|
+
- Updated dependencies [e1554b1]
|
|
1305
|
+
- Updated dependencies [9e2caf3]
|
|
1306
|
+
- Updated dependencies [4856789]
|
|
1307
|
+
- Updated dependencies [81ce41a]
|
|
1308
|
+
- Updated dependencies [85e1e4e]
|
|
1309
|
+
- Updated dependencies [c3f4916]
|
|
1310
|
+
- Updated dependencies [55dbbba]
|
|
1311
|
+
- Updated dependencies [33e0385]
|
|
1312
|
+
- Updated dependencies [dac6a08]
|
|
1313
|
+
- Updated dependencies [72c3c86]
|
|
1314
|
+
- Updated dependencies [2d8dba3]
|
|
1315
|
+
- Updated dependencies [7f1a635]
|
|
1316
|
+
- Updated dependencies [2205363]
|
|
1317
|
+
- Updated dependencies [09fe58d]
|
|
1318
|
+
- Updated dependencies [f9fc874]
|
|
1319
|
+
- Updated dependencies [d62f8eb]
|
|
1320
|
+
- Updated dependencies [d0a5ceb]
|
|
1321
|
+
- Updated dependencies [a7586cd]
|
|
1322
|
+
- Updated dependencies [4c5e80e]
|
|
1323
|
+
- Updated dependencies [ef678d0]
|
|
1324
|
+
- Updated dependencies [4b5702a]
|
|
1325
|
+
- Updated dependencies [011b386]
|
|
1326
|
+
- Updated dependencies [e18a162]
|
|
1327
|
+
- Updated dependencies [394b7a1]
|
|
1328
|
+
- Updated dependencies [ce92674]
|
|
1329
|
+
- Updated dependencies [0f2fdcd]
|
|
1330
|
+
- Updated dependencies [d6d1a50]
|
|
1331
|
+
- Updated dependencies [cf2c9b7]
|
|
1332
|
+
- Updated dependencies [8ffa8b9]
|
|
1333
|
+
- Updated dependencies [d127ff0]
|
|
1334
|
+
- Updated dependencies [674ac99]
|
|
1335
|
+
- Updated dependencies [833b512]
|
|
1336
|
+
- Updated dependencies [36d90fc]
|
|
1337
|
+
- Updated dependencies [7777e8f]
|
|
1338
|
+
- Updated dependencies [9b86cf6]
|
|
1339
|
+
- Updated dependencies [d063a96]
|
|
1340
|
+
- Updated dependencies [8825a06]
|
|
1341
|
+
- Updated dependencies [5087ac6]
|
|
1342
|
+
- Updated dependencies [677b591]
|
|
1343
|
+
- Updated dependencies [cf7c694]
|
|
1344
|
+
- Updated dependencies [ddd0f06]
|
|
1345
|
+
- Updated dependencies [d77d1b7]
|
|
1346
|
+
- Updated dependencies [0f9faa2]
|
|
1347
|
+
- Updated dependencies [2d1ddf0]
|
|
1348
|
+
- Updated dependencies [354b00f]
|
|
1349
|
+
- Updated dependencies [3de535b]
|
|
1350
|
+
- Updated dependencies [fe2e15a]
|
|
1351
|
+
- Updated dependencies [5b79a34]
|
|
1352
|
+
- Updated dependencies [502564d]
|
|
1353
|
+
- Updated dependencies [603cab8]
|
|
1354
|
+
- Updated dependencies [c757854]
|
|
1355
|
+
- Updated dependencies [471839d]
|
|
1356
|
+
- Updated dependencies [507b92a]
|
|
1357
|
+
- Updated dependencies [46365ab]
|
|
1358
|
+
- Updated dependencies [b508244]
|
|
1359
|
+
- Updated dependencies [6146b67]
|
|
1360
|
+
- Updated dependencies [df95346]
|
|
1361
|
+
- Updated dependencies [3dede58]
|
|
1362
|
+
- Updated dependencies [c6b6bb4]
|
|
1363
|
+
- Updated dependencies [594508e]
|
|
1364
|
+
- Updated dependencies [7cf42fe]
|
|
1365
|
+
- Updated dependencies [5966c2a]
|
|
1366
|
+
- Updated dependencies [0045682]
|
|
1367
|
+
- Updated dependencies [7309c81]
|
|
1368
|
+
- Updated dependencies [2f59da0]
|
|
1369
|
+
- Updated dependencies [d56012f]
|
|
1370
|
+
- Updated dependencies [f78dd83]
|
|
1371
|
+
- Updated dependencies [a2cd18a]
|
|
1372
|
+
- Updated dependencies [9051802]
|
|
1373
|
+
- Updated dependencies [20bc1ec]
|
|
1374
|
+
- Updated dependencies [1c625ca]
|
|
1375
|
+
- Updated dependencies [2f8328c]
|
|
1376
|
+
- Updated dependencies [2a6c279]
|
|
1377
|
+
- Updated dependencies [9319586]
|
|
1378
|
+
- Updated dependencies [8c8f0df]
|
|
1379
|
+
- Updated dependencies [8ad609c]
|
|
1380
|
+
- Updated dependencies [bbee302]
|
|
1381
|
+
- Updated dependencies [90c2b15]
|
|
1382
|
+
- Updated dependencies [4638aaa]
|
|
1383
|
+
- Updated dependencies [0222d3c]
|
|
1384
|
+
- Updated dependencies [08863dd]
|
|
1385
|
+
- Updated dependencies [33a5ff4]
|
|
1386
|
+
- Updated dependencies [9e01213]
|
|
1387
|
+
- Updated dependencies [071d0dc]
|
|
1388
|
+
- Updated dependencies [f293d45]
|
|
1389
|
+
- Updated dependencies [56664f5]
|
|
1390
|
+
- Updated dependencies [71f205d]
|
|
1391
|
+
- Updated dependencies [f067930]
|
|
1392
|
+
- Updated dependencies [414395b]
|
|
1393
|
+
- Updated dependencies [42eeb7d]
|
|
1394
|
+
- Updated dependencies [31cbe90]
|
|
1395
|
+
- Updated dependencies [6b7129a]
|
|
1396
|
+
- Updated dependencies [c5adfe1]
|
|
1397
|
+
- Updated dependencies [97ace2a]
|
|
1398
|
+
- Updated dependencies [26e1029]
|
|
1399
|
+
- Updated dependencies [0a936ea]
|
|
1400
|
+
- Updated dependencies [90bbf25]
|
|
1401
|
+
- Updated dependencies [023c00b]
|
|
1402
|
+
- Updated dependencies [eb91eba]
|
|
1403
|
+
- Updated dependencies [42da73d]
|
|
1404
|
+
- Updated dependencies [01e124d]
|
|
1405
|
+
- Updated dependencies [4addd9d]
|
|
1406
|
+
- Updated dependencies [ef7b5ef]
|
|
1407
|
+
- Updated dependencies [9514767]
|
|
1408
|
+
- Updated dependencies [8f20201]
|
|
1409
|
+
- Updated dependencies [155507e]
|
|
1410
|
+
- Updated dependencies [643b7c7]
|
|
1411
|
+
- Updated dependencies [7bba90b]
|
|
1412
|
+
- Updated dependencies [8813b90]
|
|
1413
|
+
- Updated dependencies [108ba8d]
|
|
1414
|
+
- Updated dependencies [2a5f04a]
|
|
1415
|
+
- Updated dependencies [4f740b0]
|
|
1416
|
+
- Updated dependencies [7ce02eb]
|
|
1417
|
+
- Updated dependencies [b4ad984]
|
|
1418
|
+
- Updated dependencies [a9f32df]
|
|
1419
|
+
- Updated dependencies [aeb9b27]
|
|
1420
|
+
- Updated dependencies [7d27da0]
|
|
1421
|
+
- Updated dependencies [d0d5205]
|
|
1422
|
+
- Updated dependencies [4fccace]
|
|
1423
|
+
- Updated dependencies [1a15893]
|
|
1424
|
+
- Updated dependencies [b70e534]
|
|
1425
|
+
- Updated dependencies [7e05d8e]
|
|
1426
|
+
- Updated dependencies [8f1851e]
|
|
1427
|
+
- Updated dependencies [61ea810]
|
|
1428
|
+
- Updated dependencies [2233a85]
|
|
1429
|
+
- Updated dependencies [67452d1]
|
|
1430
|
+
- Updated dependencies [089767f]
|
|
1431
|
+
- Updated dependencies [a13827e]
|
|
1432
|
+
- Updated dependencies [66d99ec]
|
|
1433
|
+
- Updated dependencies [cb43296]
|
|
1434
|
+
- Updated dependencies [b61afc1]
|
|
1435
|
+
- Updated dependencies [79021fc]
|
|
1436
|
+
- Updated dependencies [7733604]
|
|
1437
|
+
- Updated dependencies [40e420f]
|
|
1438
|
+
- Updated dependencies [62dd69a]
|
|
1439
|
+
- Updated dependencies [d13004a]
|
|
1440
|
+
- Updated dependencies [be7360c]
|
|
1441
|
+
- Updated dependencies [e15e679]
|
|
1442
|
+
- Updated dependencies [2ddba89]
|
|
1443
|
+
- Updated dependencies [2ab1257]
|
|
1444
|
+
- Updated dependencies [3fe0ff1]
|
|
1445
|
+
- Updated dependencies [0fc6219]
|
|
1446
|
+
- Updated dependencies [061406d]
|
|
1447
|
+
- Updated dependencies [e4c8b6c]
|
|
1448
|
+
- Updated dependencies [acb10f6]
|
|
1449
|
+
- Updated dependencies [605e190]
|
|
1450
|
+
- Updated dependencies [c6c59f1]
|
|
1451
|
+
- Updated dependencies [b0e78a8]
|
|
1452
|
+
- Updated dependencies [f31cc8d]
|
|
1453
|
+
- Updated dependencies [f343dc4]
|
|
1454
|
+
- Updated dependencies [8269e32]
|
|
1455
|
+
- Updated dependencies [74f7339]
|
|
1456
|
+
- Updated dependencies [a6c35a2]
|
|
1457
|
+
- Updated dependencies [c2f1002]
|
|
1458
|
+
- Updated dependencies [4cc4fb7]
|
|
1459
|
+
- Updated dependencies [97b6658]
|
|
1460
|
+
- Updated dependencies [28d1eb7]
|
|
1461
|
+
- Updated dependencies [06770c0]
|
|
1462
|
+
- Updated dependencies [2c26040]
|
|
1463
|
+
- Updated dependencies [f758cec]
|
|
1464
|
+
- Updated dependencies [5b47ab5]
|
|
1465
|
+
- Updated dependencies [b09d8d9]
|
|
1466
|
+
- Updated dependencies [b09d8d9]
|
|
1467
|
+
- Updated dependencies [8675db6]
|
|
1468
|
+
- Updated dependencies [b09d8d9]
|
|
1469
|
+
- Updated dependencies [27358d5]
|
|
1470
|
+
- Updated dependencies [1c3da1f]
|
|
1471
|
+
- Updated dependencies [c1f344b]
|
|
1472
|
+
- Updated dependencies [3eb1b2b]
|
|
1473
|
+
- Updated dependencies [9c93465]
|
|
1474
|
+
- Updated dependencies [a34fd2e]
|
|
1475
|
+
- Updated dependencies [ebb209c]
|
|
1476
|
+
- Updated dependencies [76bcb83]
|
|
1477
|
+
- Updated dependencies [59b85c0]
|
|
1478
|
+
- Updated dependencies [889ae47]
|
|
1479
|
+
- Updated dependencies [4f4c3fb]
|
|
1480
|
+
- Updated dependencies [78f0be8]
|
|
1481
|
+
- Updated dependencies [6e357ed]
|
|
1482
|
+
- Updated dependencies [d6938bf]
|
|
1483
|
+
- Updated dependencies [35f7fb4]
|
|
1484
|
+
- Updated dependencies [0410522]
|
|
1485
|
+
- Updated dependencies [63b33e6]
|
|
1486
|
+
- Updated dependencies [f163028]
|
|
1487
|
+
- Updated dependencies [814db6d]
|
|
1488
|
+
- Updated dependencies [a5302c7]
|
|
1489
|
+
- Updated dependencies [9c5abf4]
|
|
1490
|
+
- Updated dependencies [82397b6]
|
|
1491
|
+
- Updated dependencies [31e0be9]
|
|
1492
|
+
- Updated dependencies [4bfd455]
|
|
1493
|
+
- Updated dependencies [ffd2ce2]
|
|
1494
|
+
- Updated dependencies [2a44c1d]
|
|
1495
|
+
- Updated dependencies [7084313]
|
|
1496
|
+
- Updated dependencies [f07808c]
|
|
1497
|
+
- Updated dependencies [7ffc3d3]
|
|
1498
|
+
- Updated dependencies [88346ba]
|
|
1499
|
+
- Updated dependencies [4631592]
|
|
1500
|
+
- Updated dependencies [62f8017]
|
|
1501
|
+
- Updated dependencies [32ff033]
|
|
1502
|
+
- Updated dependencies [a831df1]
|
|
1503
|
+
- Updated dependencies [f752ee3]
|
|
1504
|
+
- Updated dependencies [a1b61e0]
|
|
1505
|
+
- Updated dependencies [cd6b9f2]
|
|
1506
|
+
- Updated dependencies [2cb6d3c]
|
|
1507
|
+
- Updated dependencies [af2a095]
|
|
1508
|
+
- Updated dependencies [5ac93d4]
|
|
1509
|
+
- Updated dependencies [695cfbd]
|
|
1510
|
+
- Updated dependencies [0e043d8]
|
|
1511
|
+
- Updated dependencies [93f267f]
|
|
1512
|
+
- Updated dependencies [7445149]
|
|
1513
|
+
- Updated dependencies [ec796d5]
|
|
1514
|
+
- Updated dependencies [071d0dc]
|
|
1515
|
+
- Updated dependencies [0024abf]
|
|
1516
|
+
- Updated dependencies [8dd98bf]
|
|
1517
|
+
- Updated dependencies [e87fea1]
|
|
1518
|
+
- Updated dependencies [c65e529]
|
|
1519
|
+
- Updated dependencies [0848bea]
|
|
1520
|
+
- Updated dependencies [d51bed2]
|
|
1521
|
+
- Updated dependencies [dadd1ad]
|
|
1522
|
+
- Updated dependencies [acbf364]
|
|
1523
|
+
- Updated dependencies [3ca34c1]
|
|
1524
|
+
- Updated dependencies [7adc841]
|
|
1525
|
+
- Updated dependencies [239c3a3]
|
|
1526
|
+
- Updated dependencies [b8b3c64]
|
|
1527
|
+
- Updated dependencies [2f2e63c]
|
|
1528
|
+
- Updated dependencies [4845f85]
|
|
1529
|
+
- Updated dependencies [486d526]
|
|
1530
|
+
- Updated dependencies [94a0bbc]
|
|
1531
|
+
- Updated dependencies [d6bfb3d]
|
|
1532
|
+
- Updated dependencies [8a9c079]
|
|
1533
|
+
- Updated dependencies [7b005b4]
|
|
1534
|
+
- Updated dependencies [cc3555e]
|
|
1535
|
+
- Updated dependencies [a2266a6]
|
|
1536
|
+
- Updated dependencies [d25a0ec]
|
|
1537
|
+
- Updated dependencies [89d7b35]
|
|
1538
|
+
- Updated dependencies [94f7b6a]
|
|
1539
|
+
- Updated dependencies [5c94f83]
|
|
1540
|
+
- Updated dependencies [ea936f3]
|
|
1541
|
+
- Updated dependencies [f98fa65]
|
|
1542
|
+
- Updated dependencies [0c0fbd9]
|
|
1543
|
+
- Updated dependencies [667b83e]
|
|
1544
|
+
- Updated dependencies [f3141d8]
|
|
1545
|
+
- Updated dependencies [7687f7b]
|
|
1546
|
+
- Updated dependencies [5a84d41]
|
|
1547
|
+
- Updated dependencies [fd3013a]
|
|
1548
|
+
- Updated dependencies [85ec26d]
|
|
1549
|
+
- Updated dependencies [73e576f]
|
|
1550
|
+
- Updated dependencies [f6476fc]
|
|
1551
|
+
- Updated dependencies [69ac82c]
|
|
1552
|
+
- Updated dependencies [4ac12ef]
|
|
1553
|
+
- Updated dependencies [833ed84]
|
|
1554
|
+
- Updated dependencies [a18abf3]
|
|
1555
|
+
- Updated dependencies [c6a4eeb]
|
|
1556
|
+
- Updated dependencies [1659072]
|
|
1557
|
+
- Updated dependencies [f450ae7]
|
|
1558
|
+
- Updated dependencies [abceb0d]
|
|
1559
|
+
- Updated dependencies [627b188]
|
|
1560
|
+
- Updated dependencies [8d4eae7]
|
|
1561
|
+
- Updated dependencies [c5a5996]
|
|
1562
|
+
- Updated dependencies [0c302a7]
|
|
1563
|
+
- Updated dependencies [b88f5e8]
|
|
1564
|
+
- Updated dependencies [857a6cf]
|
|
1565
|
+
- Updated dependencies [65a3a84]
|
|
1566
|
+
- Updated dependencies [6633337]
|
|
1567
|
+
- Updated dependencies [21676eb]
|
|
1568
|
+
- Updated dependencies [e9cb9ab]
|
|
1569
|
+
- Updated dependencies [42cc219]
|
|
1570
|
+
- Updated dependencies [d7e0b42]
|
|
1571
|
+
- Updated dependencies [3510e4a]
|
|
1572
|
+
- Updated dependencies [f00d8d4]
|
|
1573
|
+
- Updated dependencies [5326b36]
|
|
1574
|
+
- Updated dependencies [aa4b90d]
|
|
1575
|
+
- Updated dependencies [ccd9397]
|
|
1576
|
+
- Updated dependencies [503be86]
|
|
1577
|
+
- Updated dependencies [647ec8b]
|
|
1578
|
+
- Updated dependencies [54299ca]
|
|
1579
|
+
- Updated dependencies [3264516]
|
|
1580
|
+
- Updated dependencies [ae490ef]
|
|
1581
|
+
- Updated dependencies [e124711]
|
|
1582
|
+
- Updated dependencies [dc61def]
|
|
1583
|
+
- Updated dependencies [bca935b]
|
|
1584
|
+
- Updated dependencies [d92c72d]
|
|
1585
|
+
- Updated dependencies [c54c822]
|
|
1586
|
+
- Updated dependencies [8dcc0f5]
|
|
1587
|
+
- Updated dependencies [75b9e51]
|
|
1588
|
+
- Updated dependencies [f61c8cf]
|
|
1589
|
+
- Updated dependencies [e3ef52b]
|
|
1590
|
+
- Updated dependencies [0a2f233]
|
|
1591
|
+
- Updated dependencies [8621cdd]
|
|
1592
|
+
- Updated dependencies [251e888]
|
|
1593
|
+
- Updated dependencies [07f1822]
|
|
1594
|
+
- Updated dependencies [e336549]
|
|
1595
|
+
- Updated dependencies [3bb9340]
|
|
1596
|
+
- Updated dependencies [1e604c4]
|
|
1597
|
+
- Updated dependencies [04fab5e]
|
|
1598
|
+
- Updated dependencies [183b4c4]
|
|
1599
|
+
- Updated dependencies [7f713b6]
|
|
1600
|
+
- Updated dependencies [d40f43a]
|
|
1601
|
+
- Updated dependencies [2fdb36e]
|
|
1602
|
+
- Updated dependencies [62159bd]
|
|
1603
|
+
- Updated dependencies [193cd5c]
|
|
1604
|
+
- Updated dependencies [f1544e2]
|
|
1605
|
+
- Updated dependencies [7457a09]
|
|
1606
|
+
- Updated dependencies [5aae790]
|
|
1607
|
+
- Updated dependencies [07f1822]
|
|
1608
|
+
- Updated dependencies [d48aad5]
|
|
1609
|
+
- Updated dependencies [5f0852f]
|
|
1610
|
+
- Updated dependencies [c53aa53]
|
|
1611
|
+
- Updated dependencies [6f23667]
|
|
1612
|
+
- Updated dependencies [cde1975]
|
|
1613
|
+
- Updated dependencies [0bc685a]
|
|
1614
|
+
- Updated dependencies [20526f5]
|
|
1615
|
+
- Updated dependencies [efedd28]
|
|
1616
|
+
- Updated dependencies [5d21a48]
|
|
1617
|
+
- Updated dependencies [5278e11]
|
|
1618
|
+
- Updated dependencies [c5eef1d]
|
|
1619
|
+
- Updated dependencies [e5e7ee0]
|
|
1620
|
+
- Updated dependencies [23dba62]
|
|
1621
|
+
- Updated dependencies [e0f300b]
|
|
1622
|
+
- Updated dependencies [761a0ba]
|
|
1623
|
+
- Updated dependencies [c960170]
|
|
1624
|
+
- Updated dependencies [19365b7]
|
|
1625
|
+
- Updated dependencies [ba98e26]
|
|
1626
|
+
- Updated dependencies [b7ed26d]
|
|
1627
|
+
- Updated dependencies [a2ebea2]
|
|
1628
|
+
- Updated dependencies [800bdb0]
|
|
1629
|
+
- Updated dependencies [9d4dfc4]
|
|
1630
|
+
- Updated dependencies [1059965]
|
|
1631
|
+
- Updated dependencies [def5919]
|
|
1632
|
+
- Updated dependencies [ee264b2]
|
|
1633
|
+
- Updated dependencies [60b672e]
|
|
1634
|
+
- Updated dependencies [6b441a8]
|
|
1635
|
+
- Updated dependencies [ce0cfe9]
|
|
1636
|
+
- Updated dependencies [04f1182]
|
|
1637
|
+
- Updated dependencies [be87153]
|
|
1638
|
+
- Updated dependencies [dd0f681]
|
|
1639
|
+
- Updated dependencies [60f0dd8]
|
|
1640
|
+
- Updated dependencies [a87c5cd]
|
|
1641
|
+
- Updated dependencies [a47f338]
|
|
1642
|
+
- Updated dependencies [b3a3d83]
|
|
1643
|
+
- Updated dependencies [7a55913]
|
|
1644
|
+
- Updated dependencies [35accbf]
|
|
1645
|
+
- Updated dependencies [6038de7]
|
|
1646
|
+
- Updated dependencies [fc5f536]
|
|
1647
|
+
- Updated dependencies [bee5ffe]
|
|
1648
|
+
- Updated dependencies [5647006]
|
|
1649
|
+
- Updated dependencies [e654bfd]
|
|
1650
|
+
- Updated dependencies [01a7337]
|
|
1651
|
+
- Updated dependencies [b45c71e]
|
|
1652
|
+
- Updated dependencies [d71ff32]
|
|
1653
|
+
- Updated dependencies [3172831]
|
|
1654
|
+
- Updated dependencies [f8cfbb4]
|
|
1655
|
+
- Updated dependencies [939f579]
|
|
1656
|
+
- Updated dependencies [6e6c872]
|
|
1657
|
+
- Updated dependencies [2598216]
|
|
1658
|
+
- Updated dependencies [11949fc]
|
|
1659
|
+
- Updated dependencies [2c7e62d]
|
|
1660
|
+
- Updated dependencies [eb95d97]
|
|
1661
|
+
- Updated dependencies [b098b0e]
|
|
1662
|
+
- Updated dependencies [4d00b13]
|
|
1663
|
+
- Updated dependencies [1363084]
|
|
1664
|
+
- Updated dependencies [fa5758e]
|
|
1665
|
+
- Updated dependencies [38f7e4f]
|
|
1666
|
+
- Updated dependencies [eb7613c]
|
|
1667
|
+
- Updated dependencies [c57f3cf]
|
|
1668
|
+
- Updated dependencies [ecc9110]
|
|
1669
|
+
- Updated dependencies [e4c2dc8]
|
|
1670
|
+
- Updated dependencies [97faca3]
|
|
1671
|
+
- Updated dependencies [57bab76]
|
|
1672
|
+
- Updated dependencies [c89d18c]
|
|
1673
|
+
- Updated dependencies [1bd2795]
|
|
1674
|
+
- Updated dependencies [f7bd4e2]
|
|
1675
|
+
- Updated dependencies [694c350]
|
|
1676
|
+
- Updated dependencies [361bd5b]
|
|
1677
|
+
- Updated dependencies [acf34e3]
|
|
1678
|
+
- Updated dependencies [aac90a5]
|
|
1679
|
+
- Updated dependencies [3da3da5]
|
|
1680
|
+
- Updated dependencies [1e6ab15]
|
|
1681
|
+
- Updated dependencies [b90086a]
|
|
1682
|
+
- Updated dependencies [8186a70]
|
|
1683
|
+
- Updated dependencies [a329cca]
|
|
1684
|
+
- Updated dependencies [c87ef70]
|
|
1685
|
+
- Updated dependencies [3cb0618]
|
|
1686
|
+
- Updated dependencies [32a0874]
|
|
1687
|
+
- Updated dependencies [6eec18c]
|
|
1688
|
+
- Updated dependencies [4d7bebf]
|
|
1689
|
+
- Updated dependencies [821ac7a]
|
|
1690
|
+
- Updated dependencies [8f81731]
|
|
1691
|
+
- Updated dependencies [7055c22]
|
|
1692
|
+
- Updated dependencies [785a748]
|
|
1693
|
+
- Updated dependencies [3af0354]
|
|
1694
|
+
- Updated dependencies [866ff16]
|
|
1695
|
+
- Updated dependencies [5a85e67]
|
|
1696
|
+
- Updated dependencies [8b50cb3]
|
|
1697
|
+
- Updated dependencies [a0fdc56]
|
|
1698
|
+
- Updated dependencies [b95577a]
|
|
1699
|
+
- Updated dependencies [0dcbc11]
|
|
1700
|
+
- Updated dependencies [2342ee4]
|
|
1701
|
+
- Updated dependencies [d88f3e9]
|
|
1702
|
+
- Updated dependencies [ad5fe25]
|
|
1703
|
+
- Updated dependencies [c183a12]
|
|
1704
|
+
- Updated dependencies [83c161f]
|
|
1705
|
+
- Updated dependencies [d8c4957]
|
|
1706
|
+
- Updated dependencies [b9f930b]
|
|
1707
|
+
- Updated dependencies [f24cb83]
|
|
1708
|
+
- Updated dependencies [5dbbb92]
|
|
1709
|
+
- Updated dependencies [ea90179]
|
|
1710
|
+
- Updated dependencies [1818998]
|
|
1711
|
+
- Updated dependencies [ce92674]
|
|
1712
|
+
- Updated dependencies [5ef0b5b]
|
|
1713
|
+
- Updated dependencies [8c2db68]
|
|
1714
|
+
- Updated dependencies [22b5e54]
|
|
1715
|
+
- Updated dependencies [0166bd5]
|
|
1716
|
+
- Updated dependencies [8064b07]
|
|
1717
|
+
- Updated dependencies [09ee21c]
|
|
1718
|
+
- Updated dependencies [4a56dbd]
|
|
1719
|
+
- Updated dependencies [289d04a]
|
|
1720
|
+
- Updated dependencies [f549a0d]
|
|
1721
|
+
- Updated dependencies [48fbacb]
|
|
1722
|
+
- Updated dependencies [06df4fa]
|
|
1723
|
+
- Updated dependencies [3fc2e48]
|
|
1724
|
+
- Updated dependencies [c9b809f]
|
|
1725
|
+
- Updated dependencies [e8f435c]
|
|
1726
|
+
- Updated dependencies [32386f8]
|
|
1727
|
+
- Updated dependencies [9b702dc]
|
|
1728
|
+
- Updated dependencies [ab16331]
|
|
1729
|
+
- Updated dependencies [41610f6]
|
|
1730
|
+
- Updated dependencies [69f1dfd]
|
|
1731
|
+
- Updated dependencies [bbe05de]
|
|
1732
|
+
- Updated dependencies [355e951]
|
|
1733
|
+
- Updated dependencies [a1dd1e4]
|
|
1734
|
+
- Updated dependencies [a5dcb74]
|
|
1735
|
+
- Updated dependencies [dadb43f]
|
|
1736
|
+
- Updated dependencies [3556b67]
|
|
1737
|
+
- @objectstack/spec@17.0.0
|
|
1738
|
+
- @objectstack/core@17.0.0
|
|
1739
|
+
- @objectstack/driver-sql@17.0.0
|
|
1740
|
+
|
|
3
1741
|
## 17.0.0-rc.6
|
|
4
1742
|
|
|
5
1743
|
### Major Changes
|
|
@@ -194,7 +1932,7 @@
|
|
|
194
1932
|
`lower()` folds ASCII only, which IS the contract (#4706 Q1 = A): `$icontains:
|
|
195
1933
|
'café'` does not match `CAFÉ`.
|
|
196
1934
|
|
|
197
|
-
|
|
1935
|
+
<!-- adr-0087: registered filter-regex-options-retired -->
|
|
198
1936
|
|
|
199
1937
|
`driver-mongodb`'s unknown-operator arm was throwing a bare `Error` with no
|
|
200
1938
|
`code` and no `status`, three lines from the helper in its own file that sets
|