@bimetal/crud 0.35.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/LICENSE ADDED
@@ -0,0 +1,57 @@
1
+ Copyright 2026 Andreas Biederbeck
2
+
3
+ Apache License
4
+
5
+ Version 2.0, January 2004
6
+
7
+ http://www.apache.org/licenses/
8
+
9
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
10
+
11
+ 1. Definitions.
12
+
13
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
14
+
15
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
16
+
17
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
18
+
19
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
20
+
21
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
22
+
23
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
24
+
25
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
26
+
27
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
28
+
29
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
30
+
31
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
32
+
33
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
34
+
35
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
36
+
37
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
38
+
39
+ You must give any other recipients of the Work or Derivative Works a copy of this License; and
40
+
41
+ You must cause any modified files to carry prominent notices stating that You changed the files; and
42
+
43
+ You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
44
+
45
+ If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
46
+
47
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
48
+
49
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
50
+
51
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
52
+
53
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
54
+
55
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
56
+
57
+ END OF TERMS AND CONDITIONS
package/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # @bimetal/crud
2
+
3
+ > ⚠️ **Experimental** — published under the `experimental` npm dist-tag, not `latest`. The API is small and stable in shape, but unproven in composition. `npm i @bimetal/crud@experimental`.
4
+
5
+ **CRUD on the surface, event-sourcing in the engine.** You write `create`/`update`/`remove`/`list`; you get **undo, redo and a full change history for free** — without ever learning "aggregate / projection / CQRS". The default is CRUD; event-sourcing is the motor, not the interface.
6
+
7
+ ```ts
8
+ import { createCrudStore } from '@bimetal/crud';
9
+
10
+ const todos = createCrudStore<{ id: string; title: string; done: boolean }>({ type: 'todo' });
11
+
12
+ const id = await todos.create({ title: 'Write docs', done: false });
13
+ await todos.update(id, { done: true });
14
+ await todos.undo(id); // back to done: false — for free
15
+ await todos.redo(id); // forward to done: true again — the mirror of undo
16
+ todos.list(); // the current snapshot
17
+ todos.getHistory(id); // the full change history (the real events)
18
+ todos.subscribe(items => …); // reactive
19
+ ```
20
+
21
+ Mutations are `async`: the append can hit an async adapter (SQLite, sync), and a validation or `ConcurrencyError` surfaces through the returned promise instead of being swallowed. Reads (`get`/`list`/`getHistory`) are synchronous.
22
+
23
+ ## What you get, and why it's free
24
+
25
+ Every call is a real `DomainEvent` on an append-only log. So **undo**, **redo** and the **full change history** are not features you add — they fall out of the engine, with zero extra code (on a conventional CRUD stack, days-to-weeks of work). And because every change is a stored event, **sync, offline and persistence** are available the moment you connect an EventStore/sync adapter through `config` — compatible by construction, not automatic out of the box.
26
+
27
+ ## The one honest boundary
28
+
29
+ `@bimetal/crud` is **strictly single-entity**:
30
+
31
+ - no cross-aggregate consistency, no multi-entity transactions,
32
+ - no domain invariants beyond the optional `validate(entity)`,
33
+ - no resolver / merge / LWW / timestamp-tiebreaker — `ConcurrencyError` stays visible (first-writer-wins).
34
+
35
+ ## Graduating up — the free upgrade path
36
+
37
+ When real invariants or multi-entity atomicity arrive, you **graduate** to a hand-written aggregate over `@bimetal/event-sourcing` (see the `domain-store-bauen` cookbook). The key point: **you migrate the logic, not the data.** The change history carries over — as long as your hand-written aggregate keeps folding (or upcasts) the existing `bimetal.<type>.*` events. A deliberate legacy-fold, not a drop-in aggregate swap; but no throwaway prototype, no data rewrite, no lock-in downward. The CRUD facade is the entrance with a documented exit upward, not a replacement for aggregate design.
38
+
39
+ ## License
40
+
41
+ Apache-2.0 — see `LICENSE`.
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../../node_modules/typescript/lib/lib.es5.d.ts","../../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../../node_modules/typescript/lib/lib.es2023.d.ts","../../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../event-sourcing/dist/persistent-map.d.ts","../../event-sourcing/dist/types.d.ts","../../event-sourcing/dist/wrap-intent.d.ts","../../event-sourcing/dist/create-domain-store.d.ts","../../event-sourcing/dist/aggregate-helpers.d.ts","../../event-sourcing/dist/errors.d.ts","../../event-sourcing/dist/unknown-event-type.d.ts","../../event-sourcing/dist/schema-version.d.ts","../../event-sourcing/dist/id.d.ts","../../event-sourcing/dist/validation.d.ts","../../event-sourcing/dist/diagnostics.d.ts","../../event-sourcing/dist/in-memory-store.d.ts","../../event-sourcing/dist/validate-envelopes.d.ts","../../event-sourcing/dist/event-bus.d.ts","../../event-sourcing/dist/topic.d.ts","../../event-sourcing/dist/broker-bridge.d.ts","../../event-sourcing/dist/in-memory-snapshot-store.d.ts","../../event-sourcing/dist/index.d.ts","../src/create-crud-store.ts","../src/index.ts","../../../../node_modules/@types/alpinejs/index.d.ts","../../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../../node_modules/@types/node/globals.typedarray.d.ts","../../../../node_modules/@types/node/buffer.buffer.d.ts","../../../../node_modules/@types/node/globals.d.ts","../../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../../node_modules/@types/node/web-globals/blob.d.ts","../../../../node_modules/@types/node/web-globals/console.d.ts","../../../../node_modules/@types/node/web-globals/crypto.d.ts","../../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../../node_modules/@types/node/web-globals/encoding.d.ts","../../../../node_modules/@types/node/web-globals/events.d.ts","../../../../node_modules/undici-types/utility.d.ts","../../../../node_modules/undici-types/header.d.ts","../../../../node_modules/undici-types/readable.d.ts","../../../../node_modules/undici-types/fetch.d.ts","../../../../node_modules/undici-types/formdata.d.ts","../../../../node_modules/undici-types/connector.d.ts","../../../../node_modules/undici-types/client-stats.d.ts","../../../../node_modules/undici-types/client.d.ts","../../../../node_modules/undici-types/errors.d.ts","../../../../node_modules/undici-types/dispatcher.d.ts","../../../../node_modules/undici-types/global-dispatcher.d.ts","../../../../node_modules/undici-types/global-origin.d.ts","../../../../node_modules/undici-types/pool-stats.d.ts","../../../../node_modules/undici-types/pool.d.ts","../../../../node_modules/undici-types/handlers.d.ts","../../../../node_modules/undici-types/balanced-pool.d.ts","../../../../node_modules/undici-types/round-robin-pool.d.ts","../../../../node_modules/undici-types/h2c-client.d.ts","../../../../node_modules/undici-types/agent.d.ts","../../../../node_modules/undici-types/mock-interceptor.d.ts","../../../../node_modules/undici-types/mock-call-history.d.ts","../../../../node_modules/undici-types/mock-agent.d.ts","../../../../node_modules/undici-types/mock-client.d.ts","../../../../node_modules/undici-types/mock-pool.d.ts","../../../../node_modules/undici-types/snapshot-agent.d.ts","../../../../node_modules/undici-types/mock-errors.d.ts","../../../../node_modules/undici-types/proxy-agent.d.ts","../../../../node_modules/undici-types/socks5-proxy-agent.d.ts","../../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../../node_modules/undici-types/retry-handler.d.ts","../../../../node_modules/undici-types/retry-agent.d.ts","../../../../node_modules/undici-types/api.d.ts","../../../../node_modules/undici-types/cache-interceptor.d.ts","../../../../node_modules/undici-types/interceptors.d.ts","../../../../node_modules/undici-types/util.d.ts","../../../../node_modules/undici-types/cookies.d.ts","../../../../node_modules/undici-types/patch.d.ts","../../../../node_modules/undici-types/websocket.d.ts","../../../../node_modules/undici-types/eventsource.d.ts","../../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../../node_modules/undici-types/content-type.d.ts","../../../../node_modules/undici-types/cache.d.ts","../../../../node_modules/undici-types/index.d.ts","../../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../../node_modules/@types/node/web-globals/importmeta.d.ts","../../../../node_modules/@types/node/web-globals/messaging.d.ts","../../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../../node_modules/@types/node/web-globals/performance.d.ts","../../../../node_modules/@types/node/web-globals/storage.d.ts","../../../../node_modules/@types/node/web-globals/streams.d.ts","../../../../node_modules/@types/node/web-globals/timers.d.ts","../../../../node_modules/@types/node/web-globals/url.d.ts","../../../../node_modules/@types/node/assert.d.ts","../../../../node_modules/@types/node/assert/strict.d.ts","../../../../node_modules/@types/node/async_hooks.d.ts","../../../../node_modules/@types/node/buffer.d.ts","../../../../node_modules/@types/node/child_process.d.ts","../../../../node_modules/@types/node/cluster.d.ts","../../../../node_modules/@types/node/console.d.ts","../../../../node_modules/@types/node/constants.d.ts","../../../../node_modules/@types/node/crypto.d.ts","../../../../node_modules/@types/node/dgram.d.ts","../../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../../node_modules/@types/node/dns.d.ts","../../../../node_modules/@types/node/dns/promises.d.ts","../../../../node_modules/@types/node/domain.d.ts","../../../../node_modules/@types/node/events.d.ts","../../../../node_modules/@types/node/fs.d.ts","../../../../node_modules/@types/node/fs/promises.d.ts","../../../../node_modules/@types/node/http.d.ts","../../../../node_modules/@types/node/http2.d.ts","../../../../node_modules/@types/node/https.d.ts","../../../../node_modules/@types/node/inspector.d.ts","../../../../node_modules/@types/node/inspector.generated.d.ts","../../../../node_modules/@types/node/inspector/promises.d.ts","../../../../node_modules/@types/node/module.d.ts","../../../../node_modules/@types/node/net.d.ts","../../../../node_modules/buffer/index.d.ts","../../../../node_modules/@types/node/os.d.ts","../../../../node_modules/@types/node/path.d.ts","../../../../node_modules/@types/node/path/posix.d.ts","../../../../node_modules/@types/node/path/win32.d.ts","../../../../node_modules/@types/node/perf_hooks.d.ts","../../../../node_modules/@types/node/process.d.ts","../../../../node_modules/@types/node/punycode.d.ts","../../../../node_modules/@types/node/querystring.d.ts","../../../../node_modules/@types/node/quic.d.ts","../../../../node_modules/@types/node/readline.d.ts","../../../../node_modules/@types/node/readline/promises.d.ts","../../../../node_modules/@types/node/repl.d.ts","../../../../node_modules/@types/node/sea.d.ts","../../../../node_modules/@types/node/sqlite.d.ts","../../../../node_modules/@types/node/stream.d.ts","../../../../node_modules/@types/node/stream/consumers.d.ts","../../../../node_modules/@types/node/stream/promises.d.ts","../../../../node_modules/@types/node/stream/web.d.ts","../../../../node_modules/@types/node/string_decoder.d.ts","../../../../node_modules/@types/node/test.d.ts","../../../../node_modules/@types/node/test/reporters.d.ts","../../../../node_modules/@types/node/timers.d.ts","../../../../node_modules/@types/node/timers/promises.d.ts","../../../../node_modules/@types/node/tls.d.ts","../../../../node_modules/@types/node/trace_events.d.ts","../../../../node_modules/@types/node/tty.d.ts","../../../../node_modules/@types/node/url.d.ts","../../../../node_modules/@types/node/util.d.ts","../../../../node_modules/@types/node/util/types.d.ts","../../../../node_modules/@types/node/v8.d.ts","../../../../node_modules/@types/node/vm.d.ts","../../../../node_modules/@types/node/wasi.d.ts","../../../../node_modules/@types/node/worker_threads.d.ts","../../../../node_modules/@types/node/zlib.d.ts","../../../../node_modules/@types/node/index.d.ts","../../../../node_modules/@types/amqplib/properties.d.ts","../../../../node_modules/@types/amqplib/index.d.ts","../../../../node_modules/@types/aria-query/index.d.ts","../../../../node_modules/@babel/types/lib/index.d.ts","../../../../node_modules/@types/babel__generator/index.d.ts","../../../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../../../node_modules/@types/babel__template/index.d.ts","../../../../node_modules/@types/babel__traverse/index.d.ts","../../../../node_modules/@types/babel__core/index.d.ts","../../../../node_modules/@types/better-sqlite3/index.d.ts","../../../../node_modules/@types/connect/index.d.ts","../../../../node_modules/@types/body-parser/index.d.ts","../../../../node_modules/@types/deep-eql/index.d.ts","../../../../node_modules/assertion-error/index.d.ts","../../../../node_modules/@types/chai/index.d.ts","../../../../node_modules/@types/ms/index.d.ts","../../../../node_modules/@types/debug/index.d.ts","../../../../node_modules/@types/estree/index.d.ts","../../../../node_modules/@types/estree-jsx/index.d.ts","../../../../node_modules/@types/send/index.d.ts","../../../../node_modules/@types/qs/index.d.ts","../../../../node_modules/@types/range-parser/index.d.ts","../../../../node_modules/@types/express-serve-static-core/index.d.ts","../../../../node_modules/@types/http-errors/index.d.ts","../../../../node_modules/@types/serve-static/index.d.ts","../../../../node_modules/@types/express/index.d.ts","../../../../node_modules/@types/google-protobuf/index.d.ts","../../../../node_modules/@types/unist/index.d.ts","../../../../node_modules/@types/hast/index.d.ts","../../../../node_modules/@types/mdast/index.d.ts","../../../../node_modules/@types/mime/index.d.ts","../../../../node_modules/@types/react/global.d.ts","../../../../node_modules/csstype/index.d.ts","../../../../node_modules/@types/react/index.d.ts","../../../../node_modules/@types/react-dom/index.d.ts","../../../../node_modules/@types/trusted-types/lib/index.d.ts","../../../../node_modules/@types/trusted-types/index.d.ts","../../../../node_modules/@types/whatwg-mimetype/index.d.ts","../../../../node_modules/@types/ws/index.d.ts"],"fileIdsList":[[87,151,159,163,166,168,169,170,183,212],[87,151,159,163,166,168,169,170,183],[87,151,159,162,163,166,168,169,170,183,208,209],[87,151,159,163,166,168,169,170,183,212,213,214,215,216],[87,151,159,163,166,168,169,170,183,212,214],[87,151,159,163,166,168,169,170,183,208],[87,151,159,163,165,166,168,169,170,183,208,219],[87,151,159,163,166,168,169,170,183,221,222],[87,151,159,163,165,166,168,169,170,183,208],[87,151,159,163,166,168,169,170,183,224],[87,151,159,163,166,168,169,170,183,226,227],[87,151,159,162,163,165,166,168,169,170,183,208,228,229,230],[87,151,159,163,166,168,169,170,183,220,231,233],[87,151,159,163,166,168,169,170,183,236],[87,148,149,151,159,163,166,168,169,170,183],[87,150,151,159,163,166,168,169,170,183],[151,159,163,166,168,169,170,183],[87,151,159,163,166,168,169,170,183,191],[87,151,152,157,159,162,163,166,168,169,170,172,183,188,200],[87,151,152,153,159,162,163,166,168,169,170,183],[87,151,154,159,163,166,168,169,170,183,201],[87,151,155,156,159,163,166,168,169,170,174,183],[87,151,156,159,163,166,168,169,170,183,188,197],[87,151,157,159,162,163,166,168,169,170,172,183],[87,150,151,158,159,163,166,168,169,170,183],[87,151,159,160,163,166,168,169,170,183],[87,151,159,161,162,163,166,168,169,170,183],[87,150,151,159,162,163,166,168,169,170,183],[87,151,159,162,163,164,166,168,169,170,183,188,200],[87,151,159,162,163,164,166,168,169,170,183,188,191],[87,138,151,159,162,163,165,166,168,169,170,172,183,188,200],[87,151,159,162,163,165,166,168,169,170,172,183,188,197,200],[87,151,159,163,165,166,167,168,169,170,183,188,197,200],[85,86,87,88,89,90,91,92,93,94,95,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207],[87,151,159,162,163,166,168,169,170,183],[87,151,159,163,166,168,170,183],[87,151,159,163,166,168,169,170,171,183,200],[87,151,159,162,163,166,168,169,170,172,183,188],[87,151,159,163,166,168,169,170,174,183],[87,151,159,163,166,168,169,170,175,183],[87,151,159,162,163,166,168,169,170,178,183],[87,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207],[87,151,159,163,166,168,169,170,180,183],[87,151,159,163,166,168,169,170,181,183],[87,151,156,159,163,166,168,169,170,172,183,191],[87,151,159,162,163,166,168,169,170,183,184],[87,151,159,163,166,168,169,170,183,185,201,204],[87,151,159,162,163,166,168,169,170,183,188,190,191],[87,151,159,163,166,168,169,170,183,189,191],[87,151,159,163,166,168,169,170,183,191,201],[87,151,159,163,166,168,169,170,183,192],[87,148,151,159,163,166,168,169,170,183,188,194,200],[87,151,159,163,166,168,169,170,183,188,193],[87,151,159,162,163,166,168,169,170,183,195,196],[87,151,159,163,166,168,169,170,183,195,196],[87,151,156,159,163,166,168,169,170,172,183,188,197],[87,151,159,163,166,168,169,170,183,198],[87,151,159,163,166,168,169,170,172,183,199],[87,151,159,163,165,166,168,169,170,181,183,200],[87,151,159,163,166,168,169,170,183,201,202],[87,151,156,159,163,166,168,169,170,183,202],[87,151,159,163,166,168,169,170,183,188,203],[87,151,159,163,166,168,169,170,171,183,204],[87,151,159,163,166,168,169,170,183,205],[87,151,154,159,163,166,168,169,170,183],[87,151,156,159,163,166,168,169,170,183],[87,151,159,163,166,168,169,170,183,201],[87,138,151,159,163,166,168,169,170,183],[87,151,159,163,166,168,169,170,183,200],[87,151,159,163,166,168,169,170,183,206],[87,151,159,163,166,168,169,170,178,183],[87,151,159,163,166,168,169,170,183,196],[87,138,151,159,162,163,164,166,168,169,170,178,183,188,191,200,203,204,206],[87,151,159,163,166,168,169,170,183,188,207],[87,151,159,163,166,168,169,170,183,242],[87,151,159,163,166,168,169,170,183,240,241],[87,151,159,163,166,168,169,170,183,188,208],[87,151,159,163,165,166,168,169,170,183,208,232],[87,151,159,163,166,168,169,170,183,244],[87,151,159,162,163,165,166,167,168,169,170,172,183,188,197,200,207,208],[87,102,105,108,109,151,159,163,166,168,169,170,183,200],[87,105,151,159,163,166,168,169,170,183,188,200],[87,105,109,151,159,163,166,168,169,170,183,200],[87,151,159,163,166,168,169,170,183,188],[87,99,151,159,163,166,168,169,170,183],[87,103,151,159,163,166,168,169,170,183],[87,101,102,105,151,159,163,166,168,169,170,183,200],[87,151,159,163,166,168,169,170,172,183,197],[87,99,151,159,163,166,168,169,170,183,208],[87,101,105,151,159,163,166,168,169,170,172,183,200],[87,96,97,98,100,104,151,159,162,163,166,168,169,170,183,188,200],[87,105,114,122,151,159,163,166,168,169,170,183],[87,97,103,151,159,163,166,168,169,170,183],[87,105,132,133,151,159,163,166,168,169,170,183],[87,97,100,105,151,159,163,166,168,169,170,183,191,200,208],[87,105,151,159,163,166,168,169,170,183],[87,101,105,151,159,163,166,168,169,170,183,200],[87,96,151,159,163,166,168,169,170,183],[87,99,100,101,103,104,105,106,107,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,151,159,163,166,168,169,170,183],[87,105,125,128,151,159,163,166,168,169,170,183],[87,105,114,115,116,151,159,163,166,168,169,170,183],[87,103,105,115,117,151,159,163,166,168,169,170,183],[87,104,151,159,163,166,168,169,170,183],[87,97,99,105,151,159,163,166,168,169,170,183],[87,105,109,115,117,151,159,163,166,168,169,170,183],[87,109,151,159,163,166,168,169,170,183],[87,103,105,108,151,159,163,166,168,169,170,183,200],[87,97,101,105,114,151,159,163,166,168,169,170,183],[87,105,125,151,159,163,166,168,169,170,183],[87,117,151,159,163,166,168,169,170,183],[87,97,101,105,109,151,159,163,166,168,169,170,183],[87,99,105,132,151,159,163,166,168,169,170,183,191,206,208],[81,87,151,159,163,166,168,169,170,183],[82,87,151,159,163,166,168,169,170,183],[64,65,87,151,159,163,166,168,169,170,183],[65,87,151,159,163,166,168,169,170,183],[65,74,87,151,159,163,166,168,169,170,183],[64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,87,151,159,163,166,168,169,170,183],[64,87,151,159,163,166,168,169,170,183]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},"fcf823d8280b8269c62f5890fb8ff8fd8ffa4f42312b967f165a5392072b92e5","9cf7b9446575c7252b0108d5e26c6dde9d5baa44016278792d3385482cbebede","98e32045a66fc1149ec1376399c67f0695df6a7521cefa601cdf268824148dbf","2ef32b4ebefd965188a09d2c4f51751ce519a817124d44427239a9ee56c18946","d03c096e83af396af5405987166a881eebe72357444c297db9a03c304c79c504","a9a3080cf7d4e0b51fabf746b122956e206a7d3e2eb581afccd91d7c62681313","ebf3442c0a338efedbea9ccd9abd68254d4105f225432c07a0213febecc39c9f","94f7d4d0a95a4d4b5449e20827aaa1db1478d8591731fe711095611761f53a31","acb314e7ae9f9f2dd28ef4f0f1d916e8ad65a01521235b925111046edebbc45d","bee65ce2569ac0753abfea6840d048c1b8c4682d0717dd38ee06a0874179041b","df8bca724310793c45b8e6df8d77744b55a5986fd2dceb74bbfb2361890eed61","6820f466fb16c4ad8ccbf50cf9cd8b72aeeff8302951c16c18d5725f64824a41","2ab4762455ccd4174565c6c4005e7556443408ed172946392bf515db5485a83d","91a9e7fe477539623392444a3d866e27ff0ed28cf220026ac4c7ca169007fae0","1795a3dd93df189f4f60b4052ef2c26fdfc631984712f5a49e9fffabf5b925fe","d893c2d36626b6f491eaa94c6c41a93ae1b110fed06138a3aa2b172ac0c09b42","68c6bba43ac9b6477d7843d770ae1d14ac495f52ae6d9f1f99cf44024623804c","1fd8dfcb12337e89598d2f5098146b2675214b4e6e3ac542e3b1af65d502cfb0",{"version":"30bbeac665a5bc28e1d49b1c38691fd779e600139e69ae7d018ab39c41d87458","signature":"05575c69b5e4280d5d630c498a5ec770b6b2a375964632a602d8ca04d50d4652"},"325994e252402765ec8a5a5424e0fa0694853aadc1ab12cd1d0952b7a9480945",{"version":"6e5da9faab20faaecae9de78547333a59f775ac44950758a141fb7a671ad0b80","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"14e9acf826baba0ef4b5665704084896e7bcc06f65a9ab13af7e93d27d6b7069","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"21adf13435b9b748529c8cedf80f884e5130b9684188120a686cd2b26a2059c7","impliedFormat":1},{"version":"eec76bf6b9346f3f95fa402621b889489e96930e72295b0369022f332e9b4a6a","impliedFormat":1},{"version":"0ecd58f413f9bc3b7d4383eae31b0c8fc576985cd7404d6f99f8c643543ade74","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"d33ce35e3f9cfcc1d94eca415bdd3bde94d5b153ffdd33e6c4455c029986c630","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"4dc59f6e1dbf3d5f66660fceabe6c174d3261b37b696ae1854f0dbaf255fc753","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"436d7b4543b340b0f3eef4310d524242e41369b9652aa9c70428767c4dcac455","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"114f493b30f364255290472111b5a4791d5902c308645670cd0401429cbc6930","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"8caeb65fdc3bfe0d13f86f67324fcb2d858ed1c55f1f0cce892eb1acfb9f3239","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"e3905f6902f0b69e5eefc230daa69fdd4ab707a973ec2d086d65af1b3ea47ef0","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"1fede9296beac11ce8e6b425396a1791f64341f2be85deebb6286faf6e16306e","affectsGlobalScope":true,"impliedFormat":1},{"version":"80219a97fd3ce5f91af5c355a264844027a899b3d9a3cd41cf6f3bc5947edc95","impliedFormat":1},{"version":"89444c76f16bf7994e230d98e1bc3f01d654de04ef02f60430d9a98d5b450a8b","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"fac3e88881b35d3a757ed891ac912b2674792c25e2a1a74e1f5fbc72d19a9792","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"6fe28249ac0c7bc19a79aa9264baf00efbd080e868dbe1d3052033ad1c64f206","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"c51b3c3f6c5aa5b121124f4b593996826aab90667f95de88c1ff13c1736e11ba","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"a74edb3bab7394a9dbde529d60632be590def2f5f01024dbd85441587fbfbbe0","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"00049ccc87f3f37726db03c01ca68fe74fd9c0109b68c29eb9923ebec2c76b13","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"7fde0e1be5c8be204ffbf428abfcf01da2eb0f130e1bc3f539eb7275f4fd1f58","impliedFormat":1},{"version":"e284328553df5f425a5d33d36a0c3fa66b46af9d097cad6f4d2e8696dfdeb0f1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"016b29bf4926b80255a108c53a1451717350059da04fcae64d1075f5e93bbb39","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"3856f7d31d0c47ec0dded3ec552519a3cd6639c1ad7be279dd1b31abffd8cc85","impliedFormat":1},{"version":"e16b319e5aca1031168de823c4946ff8e29629c4c8cc0ec0fcfe2a8ab2155043","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"2c3c5c0f54055e87640f5d233716fd889f3034fc7911d603b642369b0dbeb2a7","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"4ebf086fa2e5ef2b65133a944cb3f8ab518a22087727dfbfc802a3654c396f2f","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"0c51e46ad16a1d483119debc7227cd8fb6f8534408802cef1ce23d298b5a2dd5","impliedFormat":1},{"version":"cd1ac3689ea594fc7fc0e632de1e009106506055603f6457a361e87e15624f80","impliedFormat":1},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"556ccd493ec36c7d7cb130d51be66e147b91cc1415be383d71da0f1e49f742a9","impliedFormat":1},{"version":"b6d03c9cfe2cf0ba4c673c209fcd7c46c815b2619fd2aad59fc4229aaef2ed43","impliedFormat":1},{"version":"95aba78013d782537cc5e23868e736bec5d377b918990e28ed56110e3ae8b958","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"13b77ab19ef7aadd86a1e54f2f08ea23a6d74e102909e3c00d31f231ed040f62","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"c2a6a737189ced24ffe0634e9239b087e4c26378d0490f95141b9b9b042b746c","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"89e326922cadcc2331d7e851011cf9f0456a681aaf3c95b48b81f8d80e8cdfba","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"5d08a179b846f5ee674624b349ebebe2121c455e3a265dc93da4e8d9e89722b4","impliedFormat":1},{"version":"d34aa8df2d0b18fb56b1d772ff9b3c7aea7256cf0d692f969be6e1d27b74d660","impliedFormat":1},{"version":"93a3b8e57c68e348fc4054b245bd7cf4893225f56c991028844b693c2fa8c03c","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"6823ccc7b5b77bbf898d878dbcad18aa45e0fa96bdd0abd0de98d514845d9ed9","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"168d88e14e0d81fe170e0dadd38ae9d217476c11435ea640ddb9b7382bdb6c1f","impliedFormat":1},{"version":"8e04cf0688e0d921111659c2b55851957017148fa7b977b02727477d155b3c47","impliedFormat":1},{"version":"4f817d326453d8d578758889131c3cab8665a0aa252df1ea254a83b653422efa","impliedFormat":1},{"version":"89121c1bf2990f5219bfd802a3e7fc557de447c62058d6af68d6b6348d64499a","impliedFormat":1},{"version":"79b4369233a12c6fa4a07301ecb7085802c98f3a77cf9ab97eee27e1656f82e6","impliedFormat":1},{"version":"d4a22007b481fe2a2e6bfd3a42c00cd62d41edb36d30fc4697df2692e9891fc8","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc782ff85b2cb10075ecffc158af7bfb27ff97bf8491c917efea0c3d622d5ac4","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"18942319aff2c9619e05c379641b571f0958506472a4b539f906be08fcccf806","impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1}],"root":[82,83],"options":{"composite":true,"declaration":true,"declarationMap":true,"module":99,"noFallthroughCasesInSwitch":true,"noUncheckedSideEffectImports":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":10,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[214,1],[212,2],[84,2],[210,3],[209,2],[211,2],[217,4],[213,1],[215,5],[216,1],[218,6],[220,7],[223,8],[219,9],[225,10],[221,2],[227,11],[226,2],[231,12],[234,13],[235,2],[237,14],[232,2],[238,14],[239,2],[224,2],[148,15],[149,15],[150,16],[87,17],[151,18],[152,19],[153,20],[85,2],[154,21],[155,22],[156,23],[157,24],[158,25],[159,26],[160,26],[161,27],[162,28],[163,29],[164,30],[88,2],[86,2],[165,31],[166,32],[167,33],[208,34],[168,35],[169,36],[170,35],[171,37],[172,38],[174,39],[175,40],[176,40],[177,40],[178,41],[179,42],[180,43],[181,44],[182,45],[183,46],[184,46],[185,47],[186,2],[187,2],[188,48],[189,49],[190,48],[191,50],[192,51],[193,52],[194,53],[195,54],[196,55],[197,56],[198,57],[199,58],[200,59],[201,60],[202,61],[203,62],[204,63],[205,64],[89,35],[90,2],[91,65],[92,66],[93,2],[94,67],[95,2],[139,68],[140,69],[141,70],[142,70],[143,71],[144,2],[145,18],[146,72],[147,69],[206,73],[207,74],[229,2],[230,2],[243,75],[240,2],[242,76],[228,77],[233,78],[245,79],[244,2],[236,2],[246,2],[247,80],[222,2],[173,2],[241,2],[62,2],[63,2],[12,2],[11,2],[2,2],[13,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[3,2],[21,2],[22,2],[4,2],[23,2],[27,2],[24,2],[25,2],[26,2],[28,2],[29,2],[30,2],[5,2],[31,2],[32,2],[33,2],[34,2],[6,2],[38,2],[35,2],[36,2],[37,2],[39,2],[7,2],[40,2],[45,2],[46,2],[41,2],[42,2],[43,2],[44,2],[8,2],[50,2],[47,2],[48,2],[49,2],[51,2],[9,2],[52,2],[53,2],[54,2],[56,2],[55,2],[57,2],[58,2],[10,2],[59,2],[1,2],[60,2],[61,2],[114,81],[127,82],[111,83],[128,84],[137,85],[102,86],[103,87],[101,88],[136,6],[131,89],[135,90],[105,91],[124,92],[104,93],[134,94],[99,95],[100,89],[106,96],[107,2],[113,97],[110,96],[97,98],[138,99],[129,100],[117,101],[116,96],[118,102],[121,103],[115,104],[119,105],[132,6],[108,106],[109,107],[122,108],[98,84],[126,109],[125,96],[112,107],[120,110],[123,111],[130,2],[96,2],[133,112],[82,113],[83,114],[68,115],[79,116],[67,116],[74,116],[69,116],[77,116],[72,2],[80,116],[75,117],[81,118],[64,2],[71,116],[78,116],[65,119],[70,2],[76,116],[73,2],[66,116]],"latestChangedDtsFile":"./index.d.ts","version":"5.8.3"}
@@ -0,0 +1,98 @@
1
+ import type { DomainEvent, DomainStoreBaseConfig, SerializedStore, Unsubscribe } from '@bimetal/event-sourcing';
2
+ /** The one requirement on a CRUD entity: a string `id`. Everything else is your own shape. */
3
+ export interface CrudEntity {
4
+ readonly id: string;
5
+ }
6
+ /** Configuration for {@link createCrudStore}. */
7
+ export interface CreateCrudStoreOptions<T extends CrudEntity> {
8
+ /**
9
+ * Entity type name — used as the event-type namespace (`bimetal.<type>.Created`) and the
10
+ * default stream id. Give each distinct entity kind its own store (`type: 'todo'`, `'note'`, …).
11
+ */
12
+ readonly type: string;
13
+ /**
14
+ * Optional field validator, run against the full entity on create and against the merged
15
+ * result on update. Throw (e.g. via `DataValidationError`) to reject. This is the ONLY place
16
+ * for rules — deliberately no cross-entity invariants (see the
17
+ * package README on when to graduate to a hand-written aggregate).
18
+ */
19
+ readonly validate?: (entity: T) => void;
20
+ /** Id generator for new entities (and internal command/envelope ids). Defaults to a random UUID. */
21
+ readonly generateId?: () => string;
22
+ /** Advanced: base store config (eventStore, clock, middleware, metadata, snapshots, streamId). */
23
+ readonly config?: Partial<DomainStoreBaseConfig>;
24
+ }
25
+ /**
26
+ * A CRUD store: `create`/`update`/`remove`/`get`/`list` — with `undo`, `redo`, and a full change
27
+ * history (`getHistory`) falling out of the event-sourced engine underneath, for free.
28
+ *
29
+ * Mutations are async: the event-sourced append can hit an async adapter (SQLite, sync), and a
30
+ * validation or `ConcurrencyError` surfaces through the returned promise rather than being
31
+ * swallowed. Reads (`get`/`list`/`getHistory`) are synchronous.
32
+ */
33
+ export interface CrudStore<T extends CrudEntity> {
34
+ /** Create an entity. `id` is auto-generated unless you pass one. Resolves to the entity's id. */
35
+ create(data: Omit<T, 'id'> & {
36
+ readonly id?: string;
37
+ }): Promise<string>;
38
+ /** Apply a partial change to an existing entity. No-op (no event) if nothing actually changes. */
39
+ update(id: string, changes: Partial<Omit<T, 'id'>>): Promise<void>;
40
+ /** Remove an entity. No-op if it does not exist (idempotent). */
41
+ remove(id: string): Promise<void>;
42
+ /** Undo the entity's last change — free, because every change is an event. No-op if nothing to undo. */
43
+ undo(id: string): Promise<void>;
44
+ /** Redo the entity's last undone change — the mirror of {@link CrudStore.undo}. No-op if nothing to redo. */
45
+ redo(id: string): Promise<void>;
46
+ /** The current entity by id, or `undefined`. */
47
+ get(id: string): T | undefined;
48
+ /** A snapshot of all entities. */
49
+ list(): readonly T[];
50
+ /** The full event history for one entity, in append order. */
51
+ getHistory(id: string): DomainEvent[];
52
+ /** Subscribe to changes; each notification hands a fresh snapshot of the list. */
53
+ subscribe(handler: (items: readonly T[]) => void): Unsubscribe;
54
+ /** Current version (number of committed events). */
55
+ readonly version: number;
56
+ /**
57
+ * Load state from the connected EventStore (via `config.eventStore`). Call this
58
+ * once after creating a store on an EventStore that already holds events —
59
+ * otherwise `list()` starts empty and only sees events appended afterwards.
60
+ */
61
+ hydrate(): Promise<void>;
62
+ /** Rebuild in-memory state from the EventStore (drops and re-folds). */
63
+ rebuild(): Promise<void>;
64
+ /** Serialize the event log for SSR/transport (see `hydrateFrom`). */
65
+ serialize(): SerializedStore;
66
+ /** Seed state from a serialized event log (SSR/hydration) — replays without minting new events. */
67
+ hydrateFrom(serialized: SerializedStore): Promise<void>;
68
+ /** Release subscriptions. */
69
+ destroy(): void;
70
+ }
71
+ /**
72
+ * A CRUD facade over the event-sourcing engine. The surface is plain CRUD; underneath, every
73
+ * call is a real `DomainEvent` on an append-only log — so undo, redo, and a full change history come
74
+ * for free; sync/offline/persistence are available when you connect an adapter via `config`. The
75
+ * consumer never meets "aggregate / projection / CQRS".
76
+ *
77
+ * @remarks
78
+ * Strictly **single-entity**: no cross-aggregate consistency, no invariants beyond `validate`, and
79
+ * — by design — no resolver/merge/LWW in the core. When real invariants or multi-entity atomicity
80
+ * arrive, graduate to a hand-written aggregate over `@bimetal/event-sourcing` — the history carries
81
+ * over as long as your aggregate keeps folding (or upcasts) the existing `bimetal.<type>.*` events.
82
+ * See the package README.
83
+ *
84
+ * @param options - {@link CreateCrudStoreOptions}.
85
+ * @returns A {@link CrudStore} for entity type `T`.
86
+ *
87
+ * @example
88
+ * ```ts
89
+ * const todos = createCrudStore<{ id: string; title: string; done: boolean }>({ type: 'todo' });
90
+ * const id = await todos.create({ title: 'x', done: false });
91
+ * await todos.update(id, { done: true });
92
+ * await todos.undo(id); // back to done: false — for free
93
+ * await todos.redo(id); // forward to done: true again — the mirror of undo
94
+ * todos.list(); // the current snapshot
95
+ * ```
96
+ */
97
+ export declare function createCrudStore<T extends CrudEntity>(options: CreateCrudStoreOptions<T>): CrudStore<T>;
98
+ //# sourceMappingURL=create-crud-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-crud-store.d.ts","sourceRoot":"","sources":["../src/create-crud-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,WAAW,EACX,qBAAqB,EAGrB,eAAe,EACf,WAAW,EACZ,MAAM,yBAAyB,CAAC;AAgBjC,8FAA8F;AAC9F,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,iDAAiD;AACjD,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,UAAU;IAC1D;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IACxC,oGAAoG;IACpG,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;IACnC,kGAAkG;IAClG,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAClD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,UAAU;IAC7C,iGAAiG;IACjG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,kGAAkG;IAClG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,iEAAiE;IACjE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,wGAAwG;IACxG,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,6GAA6G;IAC7G,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,gDAAgD;IAChD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAC/B,kCAAkC;IAClC,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;IACrB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;IACtC,kFAAkF;IAClF,SAAS,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,KAAK,IAAI,GAAG,WAAW,CAAC;IAC/D,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,wEAAwE;IACxE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,qEAAqE;IACrE,SAAS,IAAI,eAAe,CAAC;IAC7B,mGAAmG;IACnG,WAAW,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,6BAA6B;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,UAAU,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CA0OtG"}
@@ -0,0 +1,259 @@
1
+ import { createDomainStore, initialAggregateState, getStack, getRedoStack, recordMutation, recordUndo, recordRedo, trackCommandId, unknownEventType, deepEqual, defaultGenerateId, DataValidationError, } from '@bimetal/event-sourcing';
2
+ /**
3
+ * A CRUD facade over the event-sourcing engine. The surface is plain CRUD; underneath, every
4
+ * call is a real `DomainEvent` on an append-only log — so undo, redo, and a full change history come
5
+ * for free; sync/offline/persistence are available when you connect an adapter via `config`. The
6
+ * consumer never meets "aggregate / projection / CQRS".
7
+ *
8
+ * @remarks
9
+ * Strictly **single-entity**: no cross-aggregate consistency, no invariants beyond `validate`, and
10
+ * — by design — no resolver/merge/LWW in the core. When real invariants or multi-entity atomicity
11
+ * arrive, graduate to a hand-written aggregate over `@bimetal/event-sourcing` — the history carries
12
+ * over as long as your aggregate keeps folding (or upcasts) the existing `bimetal.<type>.*` events.
13
+ * See the package README.
14
+ *
15
+ * @param options - {@link CreateCrudStoreOptions}.
16
+ * @returns A {@link CrudStore} for entity type `T`.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const todos = createCrudStore<{ id: string; title: string; done: boolean }>({ type: 'todo' });
21
+ * const id = await todos.create({ title: 'x', done: false });
22
+ * await todos.update(id, { done: true });
23
+ * await todos.undo(id); // back to done: false — for free
24
+ * await todos.redo(id); // forward to done: true again — the mirror of undo
25
+ * todos.list(); // the current snapshot
26
+ * ```
27
+ */
28
+ export function createCrudStore(options) {
29
+ const { type, validate } = options;
30
+ // `type` is the event-type namespace (`bimetal.<type>.…`) and the default stream id — it must be
31
+ // a clean identifier so the emitted event types stay canonical (no dots/spaces/special chars).
32
+ if (!/^[a-zA-Z][a-zA-Z0-9-]*$/.test(type)) {
33
+ throw new DataValidationError({
34
+ type: 'VALIDATION_ERROR',
35
+ message: `crud store type "${type}" must match /^[a-zA-Z][a-zA-Z0-9-]*$/ (it is the event-type namespace and stream id)`,
36
+ });
37
+ }
38
+ const genId = options.generateId ?? defaultGenerateId;
39
+ // Instance-specific event types (the `type` namespace). Switched on below (runtime === compare).
40
+ const CREATED = `bimetal.${type}.Created`;
41
+ const UPDATED = `bimetal.${type}.Updated`;
42
+ const DELETED = `bimetal.${type}.Deleted`;
43
+ const REVERTED = `bimetal.${type}.Reverted`;
44
+ const REDONE = `bimetal.${type}.Redone`;
45
+ // ── Aggregate: commands → intents, events → state. Undo/redo stack bookkeeping is
46
+ // single-sourced in the shared record* helpers (see redo-in-core.md). ──
47
+ const aggregate = {
48
+ initialState: initialAggregateState(),
49
+ handle(state, command) {
50
+ if (command.id && state.processedCommandIds.includes(command.id))
51
+ return [];
52
+ switch (command.type) {
53
+ case 'crud.Create': {
54
+ const { entity } = command.payload;
55
+ if (!entity || typeof entity.id !== 'string' || entity.id === '') {
56
+ throw new DataValidationError({ type: 'VALIDATION_ERROR', message: 'entity.id must be a non-empty string' });
57
+ }
58
+ if (state.events.has(entity.id)) {
59
+ throw new DataValidationError({ type: 'VALIDATION_ERROR', message: `entity "${entity.id}" already exists` });
60
+ }
61
+ validate?.(entity);
62
+ return [{ type: CREATED, entityId: entity.id, payload: { entity }, schemaVersion: 1 }];
63
+ }
64
+ case 'crud.Update': {
65
+ const { id, changes } = command.payload;
66
+ if ('id' in changes) {
67
+ throw new DataValidationError({ type: 'VALIDATION_ERROR', message: 'cannot change id via update' });
68
+ }
69
+ const existing = state.events.get(id);
70
+ if (!existing)
71
+ throw new DataValidationError({ type: 'ENTITY_NOT_FOUND', entityId: id });
72
+ const merged = { ...existing, ...changes };
73
+ if (deepEqual(merged, existing))
74
+ return []; // no-op: nothing changed → no event, no undo entry
75
+ validate?.(merged);
76
+ return [{ type: UPDATED, entityId: id, payload: { changes }, schemaVersion: 1 }];
77
+ }
78
+ case 'crud.Remove': {
79
+ const { id } = command.payload;
80
+ const existing = state.events.get(id);
81
+ if (!existing)
82
+ return []; // idempotent delete
83
+ return [{ type: DELETED, entityId: id, payload: { deletedEntity: existing }, schemaVersion: 1 }];
84
+ }
85
+ case 'crud.Undo': {
86
+ const { id } = command.payload;
87
+ const stack = getStack(state, id);
88
+ if (stack.length === 0)
89
+ return []; // nothing to undo
90
+ const previous = stack[stack.length - 1];
91
+ if (previous === null) {
92
+ const current = state.events.get(id);
93
+ if (!current)
94
+ return [];
95
+ // The entity didn't exist before its last action → undo-of-create = delete.
96
+ return [{ type: DELETED, entityId: id, payload: { deletedEntity: current, isUndoOfCreate: true }, schemaVersion: 1 }];
97
+ }
98
+ return [{ type: REVERTED, entityId: id, payload: { restoredState: previous }, schemaVersion: 1 }];
99
+ }
100
+ case 'crud.Redo': {
101
+ const { id } = command.payload;
102
+ const redoStack = getRedoStack(state, id);
103
+ if (redoStack.length === 0)
104
+ return []; // nothing to redo
105
+ const target = redoStack[redoStack.length - 1];
106
+ if (target === null) {
107
+ // The redone action was a remove (undo had restored the entity) → redo removes it again.
108
+ const current = state.events.get(id);
109
+ if (!current)
110
+ return [];
111
+ return [{ type: DELETED, entityId: id, payload: { deletedEntity: current, isRedoOfRemove: true }, schemaVersion: 1 }];
112
+ }
113
+ return [{ type: REDONE, entityId: id, payload: { restoredState: target }, schemaVersion: 1 }];
114
+ }
115
+ default:
116
+ return [];
117
+ }
118
+ },
119
+ apply(state, event) {
120
+ const processedCommandIds = trackCommandId(state.processedCommandIds, event.metadata.causationId);
121
+ const entityId = event.envelope.entityId;
122
+ const version = event.envelope.version;
123
+ // events is a PersistentMap — set/delete return a NEW map sharing structure
124
+ // with `state.events` (O(log n)), no full copy.
125
+ switch (event.type) {
126
+ case CREATED: {
127
+ const { entity } = event.payload;
128
+ const events = state.events.set(entity.id, entity);
129
+ return { version, events, processedCommandIds, ...recordMutation(state, entityId, null) };
130
+ }
131
+ case UPDATED: {
132
+ const existing = state.events.get(entityId) ?? null;
133
+ const events = existing
134
+ ? state.events.set(entityId, { ...existing, ...event.payload.changes })
135
+ : state.events;
136
+ return { version, events, processedCommandIds, ...recordMutation(state, entityId, existing) };
137
+ }
138
+ case DELETED: {
139
+ const current = state.events.get(entityId) ?? null;
140
+ const events = state.events.delete(entityId);
141
+ const payload = event.payload;
142
+ // isUndoOfCreate → undo compensation; isRedoOfRemove → redo compensation; plain → normal mutation.
143
+ if (payload.isUndoOfCreate)
144
+ return { version, events, processedCommandIds, ...recordUndo(state, entityId, current) };
145
+ if (payload.isRedoOfRemove)
146
+ return { version, events, processedCommandIds, ...recordRedo(state, entityId, current) };
147
+ return { version, events, processedCommandIds, ...recordMutation(state, entityId, payload.deletedEntity) };
148
+ }
149
+ case REVERTED: {
150
+ const current = state.events.get(entityId) ?? null; // pre-restore state → onto the redo stack
151
+ const { restoredState } = event.payload;
152
+ const events = state.events.set(restoredState.id, restoredState);
153
+ return { version, events, processedCommandIds, ...recordUndo(state, entityId, current) };
154
+ }
155
+ case REDONE: {
156
+ const current = state.events.get(entityId) ?? null; // pre-redo state → back onto the undo stack
157
+ const { restoredState } = event.payload;
158
+ const events = state.events.set(restoredState.id, restoredState);
159
+ return { version, events, processedCommandIds, ...recordRedo(state, entityId, current) };
160
+ }
161
+ default:
162
+ // Dynamic (non-literal) event-type switch → TS can't narrow to `never` here; the
163
+ // cast keeps unknownEventType's runtime guard (foreign event in the stream → named error).
164
+ return unknownEventType(event, type);
165
+ }
166
+ },
167
+ };
168
+ // ── Projection: the same events → the entity list. ──
169
+ const projection = {
170
+ initialState: [],
171
+ version: 1,
172
+ apply(state, event) {
173
+ const entityId = event.envelope.entityId;
174
+ switch (event.type) {
175
+ case CREATED: {
176
+ const { entity } = event.payload;
177
+ return state.some((e) => e.id === entity.id) ? state : [...state, entity];
178
+ }
179
+ case UPDATED:
180
+ return state.map((e) => (e.id === entityId ? { ...e, ...event.payload.changes } : e));
181
+ case DELETED:
182
+ return state.filter((e) => e.id !== entityId);
183
+ case REVERTED:
184
+ case REDONE: {
185
+ const { restoredState } = event.payload;
186
+ // Set the entity to the (un/re-)stored state. In place if still present (preserve
187
+ // order); re-append if its position was gone (matches the aggregate map: Map.set on an
188
+ // existing key keeps position, a re-added key lands last). Same shape for undo and redo.
189
+ return state.some((e) => e.id === entityId)
190
+ ? state.map((e) => (e.id === entityId ? restoredState : e))
191
+ : [...state, restoredState];
192
+ }
193
+ default:
194
+ // Dynamic (non-literal) event-type switch → TS can't narrow to `never` here; the
195
+ // cast keeps unknownEventType's runtime guard (foreign event in the stream → named error).
196
+ return unknownEventType(event, type);
197
+ }
198
+ },
199
+ };
200
+ const domain = createDomainStore({
201
+ aggregate,
202
+ projection,
203
+ buildUndoCommand: (entityId, commandId) => ({ type: 'crud.Undo', id: commandId, payload: { id: entityId } }),
204
+ buildRedoCommand: (entityId, commandId) => ({ type: 'crud.Redo', id: commandId, payload: { id: entityId } }),
205
+ restoreReadModelFromState: (state) => Array.from(state.events.values()),
206
+ config: { defaultStreamId: type, generateId: genId, ...options.config },
207
+ });
208
+ return {
209
+ async create(data) {
210
+ const id = data.id ?? genId();
211
+ const entity = { ...data, id };
212
+ await domain.dispatch({ type: 'crud.Create', id: genId(), payload: { entity } });
213
+ return id;
214
+ },
215
+ async update(id, changes) {
216
+ await domain.dispatch({ type: 'crud.Update', id: genId(), payload: { id, changes: changes } });
217
+ },
218
+ async remove(id) {
219
+ await domain.dispatch({ type: 'crud.Remove', id: genId(), payload: { id } });
220
+ },
221
+ async undo(id) {
222
+ await domain.undo(id);
223
+ },
224
+ async redo(id) {
225
+ await domain.redo(id);
226
+ },
227
+ get(id) {
228
+ return domain.getReadModel().find((e) => e.id === id);
229
+ },
230
+ list() {
231
+ return domain.getReadModel();
232
+ },
233
+ getHistory(id) {
234
+ return domain.getHistory(id);
235
+ },
236
+ subscribe(handler) {
237
+ return domain.subscribe(handler);
238
+ },
239
+ get version() {
240
+ return domain.version;
241
+ },
242
+ hydrate() {
243
+ return domain.hydrate();
244
+ },
245
+ rebuild() {
246
+ return domain.rebuild();
247
+ },
248
+ serialize() {
249
+ return domain.serialize();
250
+ },
251
+ hydrateFrom(serialized) {
252
+ return domain.hydrateFrom(serialized);
253
+ },
254
+ destroy() {
255
+ domain.destroy?.();
256
+ },
257
+ };
258
+ }
259
+ //# sourceMappingURL=create-crud-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-crud-store.js","sourceRoot":"","sources":["../src/create-crud-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @module @bimetal/crud
3
+ *
4
+ * ⚠️ **Experimental** (published under the `experimental` dist-tag). A CRUD facade over
5
+ * `@bimetal/event-sourcing`: plain `create`/`update`/`remove`/`list` — with `undo`,
6
+ * `getHistory` and a full change history falling out of the event-sourced engine underneath
7
+ * for free, without ever meeting "aggregate / projection / CQRS".
8
+ *
9
+ * Strictly **single-entity**: no cross-aggregate consistency, no invariants beyond `validate`,
10
+ * no resolver/merge/LWW. When real invariants or multi-entity atomicity arrive, graduate to a
11
+ * hand-written aggregate — the history carries over as long as your aggregate keeps folding (or
12
+ * upcasts) the existing `bimetal.<type>.*` events. See the README.
13
+ */
14
+ export { createCrudStore } from './create-crud-store.js';
15
+ export type { CrudEntity, CreateCrudStoreOptions, CrudStore } from './create-crud-store.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @module @bimetal/crud
3
+ *
4
+ * ⚠️ **Experimental** (published under the `experimental` dist-tag). A CRUD facade over
5
+ * `@bimetal/event-sourcing`: plain `create`/`update`/`remove`/`list` — with `undo`,
6
+ * `getHistory` and a full change history falling out of the event-sourced engine underneath
7
+ * for free, without ever meeting "aggregate / projection / CQRS".
8
+ *
9
+ * Strictly **single-entity**: no cross-aggregate consistency, no invariants beyond `validate`,
10
+ * no resolver/merge/LWW. When real invariants or multi-entity atomicity arrive, graduate to a
11
+ * hand-written aggregate — the history carries over as long as your aggregate keeps folding (or
12
+ * upcasts) the existing `bimetal.<type>.*` events. See the README.
13
+ */
14
+ export { createCrudStore } from './create-crud-store.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@bimetal/crud",
3
+ "version": "0.35.0",
4
+ "description": "CRUD facade over event-sourcing: create/update/remove/list plus undo, history and audit for free — single-entity, no ES vocabulary required. Graduates to a hand-written aggregate when real invariants arrive.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md",
17
+ "LICENSE"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc -b",
21
+ "dev": "tsc -b --watch",
22
+ "typecheck": "tsc --noEmit -p tsconfig.test.json",
23
+ "test": "vitest run",
24
+ "test:watch": "vitest",
25
+ "prepublishOnly": "npm run build"
26
+ },
27
+ "dependencies": {
28
+ "@bimetal/event-sourcing": "^0.35.0"
29
+ },
30
+ "devDependencies": {
31
+ "vitest": "^3.2.1"
32
+ },
33
+ "publishConfig": {
34
+ "tag": "experimental"
35
+ },
36
+ "sideEffects": false,
37
+ "license": "Apache-2.0",
38
+ "author": "Andreas Biederbeck",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "https://github.com/bimetal/bimetal.git",
42
+ "directory": "packages/engine/crud"
43
+ },
44
+ "keywords": [
45
+ "crud",
46
+ "event-sourcing",
47
+ "undo",
48
+ "history",
49
+ "audit",
50
+ "headless",
51
+ "experimental"
52
+ ]
53
+ }