@objectstack/metadata 17.0.0-rc.1 → 17.0.0-rc.3
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 +328 -0
- package/dist/index.cjs +240 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +63 -2
- package/dist/index.d.ts +63 -2
- package/dist/index.js +243 -49
- package/dist/index.js.map +1 -1
- package/dist/node.cjs +240 -49
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.cts +2 -2
- package/dist/node.d.ts +2 -2
- package/dist/node.js +243 -49
- package/dist/node.js.map +1 -1
- package/package.json +9 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,333 @@
|
|
|
1
1
|
# @objectstack/metadata
|
|
2
2
|
|
|
3
|
+
## 17.0.0-rc.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [2e284b2]
|
|
8
|
+
- @objectstack/spec@17.0.0-rc.3
|
|
9
|
+
- @objectstack/core@17.0.0-rc.3
|
|
10
|
+
- @objectstack/metadata-core@17.0.0-rc.3
|
|
11
|
+
- @objectstack/platform-objects@17.0.0-rc.3
|
|
12
|
+
- @objectstack/types@17.0.0-rc.3
|
|
13
|
+
- @objectstack/metadata-fs@17.0.0-rc.3
|
|
14
|
+
|
|
15
|
+
## 17.0.0-rc.2
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- c4ab50b: fix(metadata): `sys_metadata` 的 DDL 失败不再被静默吞掉 —— 只有「表已存在」这一种原因可以静音 (#4728)
|
|
20
|
+
|
|
21
|
+
`DatabaseLoader.ensureSchema()` 过去用一个空 `catch` 吞掉 **全部** DDL 失败,并且照样把
|
|
22
|
+
`schemaReady` 置为 `true`:
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
} catch {
|
|
26
|
+
// If syncSchema fails (e.g. table already exists), mark ready and continue
|
|
27
|
+
this.schemaReady = true;
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
注释里的免责理由只覆盖了失败原因中最良性的一种,却用它为**所有**原因开脱。真实的失败
|
|
32
|
+
(权限不足、数据源根本没连上、列类型冲突)之后,表或新列压根不存在,而进程的状态与成功
|
|
33
|
+
路径**逐字节相同**,启动日志里一行痕迹都没有 —— 这正是 #4420 的形态:声称已持久化、实
|
|
34
|
+
际没落盘、系统看起来完全健康。#4632 把它定成规则(AGENTS.md → "Degradation log levels"),
|
|
35
|
+
机械检查 `pnpm check:durability-log-level` 已经能发现这一处。
|
|
36
|
+
|
|
37
|
+
现在按**错误类型**判别,而不是按注释里的乐观假设:
|
|
38
|
+
|
|
39
|
+
- **良性的「已存在」**(SQLite 的 `table … already exists` / `duplicate column name`、
|
|
40
|
+
Postgres 的 SQLSTATE `42P07`/`42701`/`42710`、MySQL 的 `ER_TABLE_EXISTS_ERROR` 等及其
|
|
41
|
+
`errno`,并跟随 `cause` 链)—— 表确实已就绪,当作 no-op 静默通过,并照常执行后续的
|
|
42
|
+
`project_id → environment_id` 迁移与 ADR-0005 索引。
|
|
43
|
+
- **其余一切失败** —— 以 `console.error` 上报,文案同时说清**后果**(`sys_metadata` 的表/
|
|
44
|
+
列未创建,后续每一次元数据写入都会报错、或在宽松驱动上悄悄丢列,而服务器仍报告健康)
|
|
45
|
+
与**修复动作**(修掉下面那条驱动/数据源错误后重启)。只说**一次**,不是每次写入都刷屏。
|
|
46
|
+
- `schemaReady` **不再**在真实失败后置 `true`。启动依旧不被阻断(该方法不抛),但 loader
|
|
47
|
+
不再声称一个它并不具备的就绪状态,下一次元数据操作会重试 —— 数据源只是还在连接这类瞬
|
|
48
|
+
时故障因此可以自愈,恢复时补一条 `info`。
|
|
49
|
+
|
|
50
|
+
`ensureHistorySchema()` 按同一规则对齐:良性「已存在」不再每次写入都打一条 `error`(过度
|
|
51
|
+
使用 `error` 是镜像失败),真实失败则同样只响亮一次并保持重试。
|
|
52
|
+
|
|
53
|
+
无 API / schema 变更;新增内部工具 `isSchemaAlreadyExistsError()`(未从包入口导出)。
|
|
54
|
+
`scripts/durability-degradation.baseline.json` 中指向本单的条目随之删除(该文件 shrink-only)。
|
|
55
|
+
|
|
56
|
+
- 3c7bcc0: feat(spec)!: converge the 11 contracts-vs-domain dual-source type names (#4538)
|
|
57
|
+
|
|
58
|
+
`packages/spec/src/contracts/` hand-wrote parameter/result interfaces whose
|
|
59
|
+
names collided with same-named zod-derived types in the domains — the #4411
|
|
60
|
+
trap, tracked as 11 rows of `dual-source-exports.baseline.json`. Each name was
|
|
61
|
+
judged individually against a three-repo import-level scan (framework, cloud,
|
|
62
|
+
objectui): which declaration actually flows at runtime decides the direction.
|
|
63
|
+
All 11 rows are deleted from the baseline; no name below is exported twice
|
|
64
|
+
anymore.
|
|
65
|
+
|
|
66
|
+
**Converged — `./contracts` now re-exports the domain zod type (same
|
|
67
|
+
declaration on both entries, imports keep compiling from either):**
|
|
68
|
+
|
|
69
|
+
- `NotificationChannel` → `system/notification.zod`'s
|
|
70
|
+
`z.infer<NotificationChannelSchema>` (member sets were identical).
|
|
71
|
+
- `ValidationResult` → `kernel/plugin-validator.zod` (shapes were identical).
|
|
72
|
+
- `HealthStatus` → `kernel/startup-orchestrator.zod` (`details` narrows
|
|
73
|
+
`Record<string, any>` → `Record<string, unknown>`).
|
|
74
|
+
- `PluginStartupResult` → `kernel/startup-orchestrator.zod`. FROM `plugin:
|
|
75
|
+
Plugin` (live object) and `error?: Error` TO the serializable projection
|
|
76
|
+
(`plugin: { name, version? }`-passthrough, `error?: { name, message,
|
|
77
|
+
stack?, code? }`). Neither side had any consumer outside spec; the
|
|
78
|
+
zod-validatable shape wins.
|
|
79
|
+
- `StartupOptions` → `kernel/startup-orchestrator.zod` — the PARSED tier
|
|
80
|
+
(defaults applied). `IStartupOrchestrator.orchestrateStartup` now takes
|
|
81
|
+
`StartupOptionsInput` (the caller-authored all-optional tier, also
|
|
82
|
+
re-exported from `./contracts`). Fix for callers typed to the old
|
|
83
|
+
all-optional `StartupOptions`: rename to `StartupOptionsInput`.
|
|
84
|
+
- `JobExecution` → `system/job.zod`. The system schema's `duration` field is
|
|
85
|
+
RENAMED `durationMs` — that is what every job adapter produces and what the
|
|
86
|
+
`sys_job_run.duration_ms` column round-trips; the schema described records
|
|
87
|
+
nothing ever wrote. Fix: `duration` → `durationMs` when parsing
|
|
88
|
+
`JobExecutionSchema` payloads.
|
|
89
|
+
- `AnalyticsQuery` → `data/analytics.zod`. The domain schema aligned to the
|
|
90
|
+
contract's semantics first: `timezone` LOST its `.default('UTC')` — absence
|
|
91
|
+
is meaningful (the engine resolves org timezone, #1982/#2018; the
|
|
92
|
+
`/analytics` entry always refused to apply that default). The schema is now
|
|
93
|
+
transform-free, so `AnalyticsQuery` ≡ `AnalyticsQueryInput` (both kept
|
|
94
|
+
exported). Fix for code that relied on `.parse()` injecting `timezone:
|
|
95
|
+
'UTC'`: pass the timezone explicitly or resolve it via the engine chain
|
|
96
|
+
(`selection.timezone ?? context.timezone ?? 'UTC'`).
|
|
97
|
+
|
|
98
|
+
**Renamed — two genuinely different concepts were sharing one name (both
|
|
99
|
+
flow at runtime):**
|
|
100
|
+
|
|
101
|
+
- `./contracts` `DriverCapabilities` → **`AnalyticsDriverCapabilities`**
|
|
102
|
+
(`{ nativeSql, objectqlAggregate, inMemory }`, the analytics strategy-chain
|
|
103
|
+
execution-path probe). The `DriverCapabilities` name now belongs solely to
|
|
104
|
+
the data domain's driver feature-flag record (`DriverCapabilitiesSchema`,
|
|
105
|
+
what `IDataDriver.supports` declares). Fix: importers of the trio from
|
|
106
|
+
`@objectstack/spec/contracts` (or `@objectstack/service-analytics`, whose
|
|
107
|
+
re-export is renamed in lockstep) rename the import; importers who meant
|
|
108
|
+
the driver flags import `DriverCapabilities` from `@objectstack/spec/data`.
|
|
109
|
+
|
|
110
|
+
**Removed — the domain-side declaration was dead (zero import-level consumers
|
|
111
|
+
in framework/cloud/objectui; the #4411 family's last survivors):**
|
|
112
|
+
|
|
113
|
+
- `system` `MetadataExportOptionsSchema` / `MetadataExportOptions` and
|
|
114
|
+
`MetadataImportOptionsSchema` / `MetadataImportOptions` (the
|
|
115
|
+
`output`/`source`-directory bags). The names now have ONE declaration each:
|
|
116
|
+
the `IMetadataService.exportMetadata` / `importMetadata` parameter
|
|
117
|
+
interfaces on `./contracts` (`types`/`namespaces`/`format` and
|
|
118
|
+
`conflictResolution`/`validate`/`dryRun`), which `MetadataManager`
|
|
119
|
+
implements. No tombstone/D2 conversion, deliberately — these are runtime
|
|
120
|
+
option-bag types, not authorable metadata (same reasoning as #4458).
|
|
121
|
+
`@objectstack/metadata` re-exports the two names from `./contracts` now
|
|
122
|
+
(it previously re-exported the dead system-side shapes its own manager
|
|
123
|
+
did not accept).
|
|
124
|
+
- `system` `JobSchedule` (the `= Schedule` back-compat alias). The name's one
|
|
125
|
+
declaration is the `IJobService.schedule` boundary shape on `./contracts`
|
|
126
|
+
(plain-string cron `expression`); the authored metadata type keeps its real
|
|
127
|
+
name `Schedule`. Fix: `import type { JobSchedule } from
|
|
128
|
+
'@objectstack/spec/system'` → `Schedule` (authoring tier) or the
|
|
129
|
+
`./contracts` `JobSchedule` (service boundary), whichever you meant.
|
|
130
|
+
|
|
131
|
+
- 9fd9ae7: Init-time service consumption is now declared everywhere, and the declaration is enforced (#4471, ADR-0116). A new CI gate (`check:init-service-contract`) walks every plugin's `init()` call graph — including private helpers, the shape that shipped #4420 — and errors on any init-reachable `getService('X')` of a workspace-provided service that is not covered by `dependencies`, `optionalDependencies`, or `requiresServices`. Eleven previously undeclared init-time consumers (metadata, rest, cli serve plugins, and seven services) now declare `optionalDependencies` on their providers, so the kernel orders them deterministically instead of by registration luck; each still degrades on purpose when the provider is not composed. Plugin authors: a best-effort init-time `getService` must declare its provider in `optionalDependencies` (declared tolerance) — the checker never exempts it.
|
|
132
|
+
- f78dd83: fix(metadata,client): `subscribeMetadata` callbacks receive real `MetadataEvent`s — the producer now fulfils the declared contract (#4602)
|
|
133
|
+
|
|
134
|
+
`@objectstack/spec/api`'s `MetadataEvent` declares top-level `id` (uuid,
|
|
135
|
+
required), `metadataType`, `name`, `definition?`, `userId?` — and after
|
|
136
|
+
#4587's convergence it is the **only** declared contract for realtime
|
|
137
|
+
metadata-change events. But the producer (`MetadataManager`) published a raw
|
|
138
|
+
`RealtimeEventPayload` envelope with everything nested under `payload` and no
|
|
139
|
+
`id`/`userId`, while the client SDK force-cast that envelope into the callback
|
|
140
|
+
(`callback(event as any as MetadataEvent)`). Subscribers who wrote
|
|
141
|
+
`event.name` / `event.metadataType` — exactly what the types promised —
|
|
142
|
+
compiled green and read `undefined` at runtime.
|
|
143
|
+
|
|
144
|
+
Producer now fulfils the contract:
|
|
145
|
+
|
|
146
|
+
- `MetadataManager.register()` / `unregister()` build a true `MetadataEvent`
|
|
147
|
+
(generated uuid `id`, flattened top-level fields, `userId` when the write
|
|
148
|
+
declares an actor) and validate it with `MetadataEventSchema.parse` before
|
|
149
|
+
publishing. The transport envelope is unchanged (`RealtimeEventPayload`,
|
|
150
|
+
with `payload` carrying the complete `MetadataEvent`).
|
|
151
|
+
- A `register()` **overwrite now publishes `metadata.{type}.updated`** instead
|
|
152
|
+
of a second `.created`, mirroring the existing `added`/`changed` watcher
|
|
153
|
+
split. Previously `.updated` was declared with no producer at all.
|
|
154
|
+
- `MetadataEventType` is a closed enum: metadata types outside it (e.g.
|
|
155
|
+
`translation`) have no declared realtime event, so nothing is published for
|
|
156
|
+
them (debug-logged) instead of emitting an event every schema-compliant
|
|
157
|
+
consumer must reject.
|
|
158
|
+
|
|
159
|
+
Consumer validates instead of casting:
|
|
160
|
+
|
|
161
|
+
- `@objectstack/client`'s `subscribeMetadata` (and therefore
|
|
162
|
+
`@objectstack/client-react`'s metadata hooks, which delegate to it) unwraps
|
|
163
|
+
the envelope and runs `MetadataEventSchema.safeParse` at the boundary. An
|
|
164
|
+
off-contract payload is rejected loudly (handler error, callback never
|
|
165
|
+
invoked) — never coerced or passed through. The `as any as MetadataEvent`
|
|
166
|
+
double-cast is gone.
|
|
167
|
+
|
|
168
|
+
New seam: `MetadataWriteOptions.userId` (`@objectstack/spec/contracts`) lets
|
|
169
|
+
write paths that know the acting user carry it into the published event's
|
|
170
|
+
`userId`. Existing callers are unaffected — the field is optional and absence
|
|
171
|
+
means "no human actor".
|
|
172
|
+
|
|
173
|
+
- beefe89: fix(metadata): 历史序号 `event_seq` 不再从一次失败的读里凭空发号 —— 只有「表还没建」可以从 1 开始 (#4825)
|
|
174
|
+
|
|
175
|
+
`DatabaseLoader.nextEventSeq()` 过去把读 `sys_metadata_history` 的**全部**失败折成同一个答案:
|
|
176
|
+
|
|
177
|
+
```ts
|
|
178
|
+
} catch {
|
|
179
|
+
// Table not provisioned yet or driver error — start at 1.
|
|
180
|
+
return 1;
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
注释同时点名了两种原因,然后用同一个 `return 1` 对待。这是 #4728 刚修掉的同一种形状,但危害是
|
|
185
|
+
**更贵的那一半**:#4728 是「字节没落盘」,本条是「**落盘的字节是错的**」。历史表里已经有 N 行时,
|
|
186
|
+
一次瞬时读失败(连接抖动、超时、权限)会让下一条历史拿到 `event_seq = 1`,与既有行**直接撞号**,
|
|
187
|
+
而 insert **成功**、日志**一行没有**。`event_seq` 正是历史列表排序与 rollback 定位的依据,撞号之后
|
|
188
|
+
版本顺序就永久不可信 —— 重试不修、重启也不修。
|
|
189
|
+
|
|
190
|
+
现在按**错误类型**判别,复用 #4728 落地的那套判别机制(`packages/metadata/src/utils/schema-sync-errors.ts`
|
|
191
|
+
里新增的 `isMissingTableError()` 与既有 `isSchemaAlreadyExistsError()` 共用同一个 code / errno /
|
|
192
|
+
message + `cause` 链匹配器,而不是在同一个包里另起一套错误判别):
|
|
193
|
+
|
|
194
|
+
- **良性的「表还没建」**(SQLite `no such table: …`、Postgres SQLSTATE `42P01` /
|
|
195
|
+
`relation "…" does not exist`、MySQL `ER_NO_SUCH_TABLE` / errno `1146`,并跟随 `cause` 链)——
|
|
196
|
+
没有行,就没有可撞的号,`1` 确实是下一个号,静默返回。
|
|
197
|
+
- **其余一切读失败** —— `nextEventSeq()` 原样抛出。调用方 `createHistoryRecord()` 以
|
|
198
|
+
`console.error` 上报**后果**(该条历史记录未写入;元数据写入本身已成功,所以服务器仍报告健康,
|
|
199
|
+
而变更历史正在悄悄出现空洞,版本时间线与 rollback 目标将不完整)、**为什么是空洞而不是错号**
|
|
200
|
+
(从 1 发号会与既有行撞号,把「不完整」变成「顺序错误」,后者无人能发现)与**修复动作**,
|
|
201
|
+
然后**跳过这条历史记录**。
|
|
202
|
+
- 判别的方向刻意保守:凡是没有被正面识别为「表不存在」的,一律当作真实失败。`does not exist`
|
|
203
|
+
本身不够 —— `role "…" does not exist`、`database "…" does not exist`、`column "…" does not exist`
|
|
204
|
+
都是真实失败,对着一张可能满是行的表返回 1 正是要避免的事,所以消息匹配要求 table/relation 与
|
|
205
|
+
该短语同现。
|
|
206
|
+
|
|
207
|
+
两条边界保持不变:元数据写入本身**不**因此失败(记录已经落盘,把它报成失败是比原缺陷更糟的谎),
|
|
208
|
+
以及本路径已知的并发撞号限制(非事务,canonical producer 仍是 `SysMetadataRepository`)——那是被
|
|
209
|
+
记录过的限制,与「读失败静默重置到 1」是两回事。报告只说**一次**,恢复时补一条 `info`。
|
|
210
|
+
|
|
211
|
+
无 API / schema 变更;新增内部工具 `isMissingTableError()`(未从包入口导出)。
|
|
212
|
+
|
|
213
|
+
- Updated dependencies [430dcc2]
|
|
214
|
+
- Updated dependencies [e6ac4bd]
|
|
215
|
+
- Updated dependencies [80334c7]
|
|
216
|
+
- Updated dependencies [ce5242c]
|
|
217
|
+
- Updated dependencies [a7163ea]
|
|
218
|
+
- Updated dependencies [e6e9379]
|
|
219
|
+
- Updated dependencies [98877c9]
|
|
220
|
+
- Updated dependencies [98877c9]
|
|
221
|
+
- Updated dependencies [c44dd5e]
|
|
222
|
+
- Updated dependencies [e6b1b69]
|
|
223
|
+
- Updated dependencies [ad047d2]
|
|
224
|
+
- Updated dependencies [2826d1e]
|
|
225
|
+
- Updated dependencies [5a84d41]
|
|
226
|
+
- Updated dependencies [20b1a9e]
|
|
227
|
+
- Updated dependencies [203a449]
|
|
228
|
+
- Updated dependencies [ac37fc6]
|
|
229
|
+
- Updated dependencies [4820f55]
|
|
230
|
+
- Updated dependencies [462d9c4]
|
|
231
|
+
- Updated dependencies [7d21581]
|
|
232
|
+
- Updated dependencies [f2445c9]
|
|
233
|
+
- Updated dependencies [23338c3]
|
|
234
|
+
- Updated dependencies [5b843fb]
|
|
235
|
+
- Updated dependencies [b4487aa]
|
|
236
|
+
- Updated dependencies [65ca83a]
|
|
237
|
+
- Updated dependencies [67bf2e2]
|
|
238
|
+
- Updated dependencies [c6d1cb4]
|
|
239
|
+
- Updated dependencies [36030ff]
|
|
240
|
+
- Updated dependencies [6117f7b]
|
|
241
|
+
- Updated dependencies [e533b0b]
|
|
242
|
+
- Updated dependencies [cdf4d9a]
|
|
243
|
+
- Updated dependencies [aee1806]
|
|
244
|
+
- Updated dependencies [c13350b]
|
|
245
|
+
- Updated dependencies [c13350b]
|
|
246
|
+
- Updated dependencies [9ca2d85]
|
|
247
|
+
- Updated dependencies [c13350b]
|
|
248
|
+
- Updated dependencies [891d345]
|
|
249
|
+
- Updated dependencies [a52e2ef]
|
|
250
|
+
- Updated dependencies [5293114]
|
|
251
|
+
- Updated dependencies [20bc357]
|
|
252
|
+
- Updated dependencies [5966c2a]
|
|
253
|
+
- Updated dependencies [2382580]
|
|
254
|
+
- Updated dependencies [d9fa683]
|
|
255
|
+
- Updated dependencies [3c7bcc0]
|
|
256
|
+
- Updated dependencies [4b6cac7]
|
|
257
|
+
- Updated dependencies [7631964]
|
|
258
|
+
- Updated dependencies [ac471a0]
|
|
259
|
+
- Updated dependencies [60ae58e]
|
|
260
|
+
- Updated dependencies [ce92674]
|
|
261
|
+
- Updated dependencies [9f601e8]
|
|
262
|
+
- Updated dependencies [51c5227]
|
|
263
|
+
- Updated dependencies [a4a85c8]
|
|
264
|
+
- Updated dependencies [07a4e26]
|
|
265
|
+
- Updated dependencies [ec975f1]
|
|
266
|
+
- Updated dependencies [eb4204b]
|
|
267
|
+
- Updated dependencies [4f13be2]
|
|
268
|
+
- Updated dependencies [61cc079]
|
|
269
|
+
- Updated dependencies [0e96e46]
|
|
270
|
+
- Updated dependencies [b25a116]
|
|
271
|
+
- Updated dependencies [d52d4fe]
|
|
272
|
+
- Updated dependencies [742cebb]
|
|
273
|
+
- Updated dependencies [ce92674]
|
|
274
|
+
- Updated dependencies [cf2c9b7]
|
|
275
|
+
- Updated dependencies [833b512]
|
|
276
|
+
- Updated dependencies [0f9faa2]
|
|
277
|
+
- Updated dependencies [7cf42fe]
|
|
278
|
+
- Updated dependencies [5966c2a]
|
|
279
|
+
- Updated dependencies [f78dd83]
|
|
280
|
+
- Updated dependencies [a2cd18a]
|
|
281
|
+
- Updated dependencies [4638aaa]
|
|
282
|
+
- Updated dependencies [0222d3c]
|
|
283
|
+
- Updated dependencies [071d0dc]
|
|
284
|
+
- Updated dependencies [0a936ea]
|
|
285
|
+
- Updated dependencies [023c00b]
|
|
286
|
+
- Updated dependencies [155507e]
|
|
287
|
+
- Updated dependencies [7bba90b]
|
|
288
|
+
- Updated dependencies [7e05d8e]
|
|
289
|
+
- Updated dependencies [061406d]
|
|
290
|
+
- Updated dependencies [c1f344b]
|
|
291
|
+
- Updated dependencies [9c93465]
|
|
292
|
+
- Updated dependencies [ebb209c]
|
|
293
|
+
- Updated dependencies [65f184b]
|
|
294
|
+
- Updated dependencies [63b33e6]
|
|
295
|
+
- Updated dependencies [2a44c1d]
|
|
296
|
+
- Updated dependencies [695cfbd]
|
|
297
|
+
- Updated dependencies [7445149]
|
|
298
|
+
- Updated dependencies [071d0dc]
|
|
299
|
+
- Updated dependencies [0848bea]
|
|
300
|
+
- Updated dependencies [d51bed2]
|
|
301
|
+
- Updated dependencies [b8b3c64]
|
|
302
|
+
- Updated dependencies [0c0fbd9]
|
|
303
|
+
- Updated dependencies [f3141d8]
|
|
304
|
+
- Updated dependencies [5a84d41]
|
|
305
|
+
- Updated dependencies [fd3013a]
|
|
306
|
+
- Updated dependencies [21676eb]
|
|
307
|
+
- Updated dependencies [e336549]
|
|
308
|
+
- Updated dependencies [d40f43a]
|
|
309
|
+
- Updated dependencies [e5e7ee0]
|
|
310
|
+
- Updated dependencies [a2ebea2]
|
|
311
|
+
- Updated dependencies [800bdb0]
|
|
312
|
+
- Updated dependencies [04f1182]
|
|
313
|
+
- Updated dependencies [5647006]
|
|
314
|
+
- Updated dependencies [38f7e4f]
|
|
315
|
+
- Updated dependencies [c57f3cf]
|
|
316
|
+
- Updated dependencies [97faca3]
|
|
317
|
+
- Updated dependencies [ad5fe25]
|
|
318
|
+
- Updated dependencies [ea90179]
|
|
319
|
+
- Updated dependencies [ce92674]
|
|
320
|
+
- Updated dependencies [5ef0b5b]
|
|
321
|
+
- Updated dependencies [48fbacb]
|
|
322
|
+
- Updated dependencies [355e951]
|
|
323
|
+
- Updated dependencies [dadb43f]
|
|
324
|
+
- @objectstack/spec@17.0.0-rc.2
|
|
325
|
+
- @objectstack/platform-objects@17.0.0-rc.2
|
|
326
|
+
- @objectstack/core@17.0.0-rc.2
|
|
327
|
+
- @objectstack/types@17.0.0-rc.2
|
|
328
|
+
- @objectstack/metadata-core@17.0.0-rc.2
|
|
329
|
+
- @objectstack/metadata-fs@17.0.0-rc.2
|
|
330
|
+
|
|
3
331
|
## 17.0.0-rc.1
|
|
4
332
|
|
|
5
333
|
### Major Changes
|