@proseql/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/errors/crud-errors.d.ts +98 -0
- package/dist/errors/crud-errors.d.ts.map +1 -0
- package/dist/errors/crud-errors.js +23 -0
- package/dist/errors/crud-errors.js.map +1 -0
- package/dist/errors/index.d.ts +16 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +12 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/migration-errors.d.ts +22 -0
- package/dist/errors/migration-errors.d.ts.map +1 -0
- package/dist/errors/migration-errors.js +14 -0
- package/dist/errors/migration-errors.js.map +1 -0
- package/dist/errors/plugin-errors.d.ts +15 -0
- package/dist/errors/plugin-errors.d.ts.map +1 -0
- package/dist/errors/plugin-errors.js +11 -0
- package/dist/errors/plugin-errors.js.map +1 -0
- package/dist/errors/query-errors.d.ts +31 -0
- package/dist/errors/query-errors.d.ts.map +1 -0
- package/dist/errors/query-errors.js +11 -0
- package/dist/errors/query-errors.js.map +1 -0
- package/dist/errors/storage-errors.d.ts +30 -0
- package/dist/errors/storage-errors.d.ts.map +1 -0
- package/dist/errors/storage-errors.js +11 -0
- package/dist/errors/storage-errors.js.map +1 -0
- package/dist/factories/crud-factory-with-relationships.d.ts +28 -0
- package/dist/factories/crud-factory-with-relationships.d.ts.map +1 -0
- package/dist/factories/crud-factory-with-relationships.js +8 -0
- package/dist/factories/crud-factory-with-relationships.js.map +1 -0
- package/dist/factories/crud-factory.d.ts +25 -0
- package/dist/factories/crud-factory.d.ts.map +1 -0
- package/dist/factories/crud-factory.js +8 -0
- package/dist/factories/crud-factory.js.map +1 -0
- package/dist/factories/database-effect.d.ts +241 -0
- package/dist/factories/database-effect.d.ts.map +1 -0
- package/dist/factories/database-effect.js +859 -0
- package/dist/factories/database-effect.js.map +1 -0
- package/dist/hooks/hook-runner.d.ts +60 -0
- package/dist/hooks/hook-runner.d.ts.map +1 -0
- package/dist/hooks/hook-runner.js +107 -0
- package/dist/hooks/hook-runner.js.map +1 -0
- package/dist/index.d.ts +84 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +110 -0
- package/dist/index.js.map +1 -0
- package/dist/indexes/index-lookup.d.ts +33 -0
- package/dist/indexes/index-lookup.d.ts.map +1 -0
- package/dist/indexes/index-lookup.js +180 -0
- package/dist/indexes/index-lookup.js.map +1 -0
- package/dist/indexes/index-manager.d.ts +118 -0
- package/dist/indexes/index-manager.d.ts.map +1 -0
- package/dist/indexes/index-manager.js +345 -0
- package/dist/indexes/index-manager.js.map +1 -0
- package/dist/indexes/search-index.d.ts +179 -0
- package/dist/indexes/search-index.d.ts.map +1 -0
- package/dist/indexes/search-index.js +405 -0
- package/dist/indexes/search-index.js.map +1 -0
- package/dist/migrations/migration-runner.d.ts +70 -0
- package/dist/migrations/migration-runner.d.ts.map +1 -0
- package/dist/migrations/migration-runner.js +271 -0
- package/dist/migrations/migration-runner.js.map +1 -0
- package/dist/migrations/migration-types.d.ts +63 -0
- package/dist/migrations/migration-types.d.ts.map +1 -0
- package/dist/migrations/migration-types.js +5 -0
- package/dist/migrations/migration-types.js.map +1 -0
- package/dist/operations/crud/create-with-relationships.d.ts +44 -0
- package/dist/operations/crud/create-with-relationships.d.ts.map +1 -0
- package/dist/operations/crud/create-with-relationships.js +483 -0
- package/dist/operations/crud/create-with-relationships.js.map +1 -0
- package/dist/operations/crud/create.d.ts +48 -0
- package/dist/operations/crud/create.d.ts.map +1 -0
- package/dist/operations/crud/create.js +333 -0
- package/dist/operations/crud/create.js.map +1 -0
- package/dist/operations/crud/delete-with-relationships.d.ts +63 -0
- package/dist/operations/crud/delete-with-relationships.d.ts.map +1 -0
- package/dist/operations/crud/delete-with-relationships.js +395 -0
- package/dist/operations/crud/delete-with-relationships.js.map +1 -0
- package/dist/operations/crud/delete.d.ts +58 -0
- package/dist/operations/crud/delete.d.ts.map +1 -0
- package/dist/operations/crud/delete.js +267 -0
- package/dist/operations/crud/delete.js.map +1 -0
- package/dist/operations/crud/unique-check.d.ts +114 -0
- package/dist/operations/crud/unique-check.d.ts.map +1 -0
- package/dist/operations/crud/unique-check.js +383 -0
- package/dist/operations/crud/unique-check.js.map +1 -0
- package/dist/operations/crud/update-with-relationships.d.ts +45 -0
- package/dist/operations/crud/update-with-relationships.d.ts.map +1 -0
- package/dist/operations/crud/update-with-relationships.js +516 -0
- package/dist/operations/crud/update-with-relationships.js.map +1 -0
- package/dist/operations/crud/update.d.ts +91 -0
- package/dist/operations/crud/update.d.ts.map +1 -0
- package/dist/operations/crud/update.js +505 -0
- package/dist/operations/crud/update.js.map +1 -0
- package/dist/operations/crud/upsert.d.ts +52 -0
- package/dist/operations/crud/upsert.d.ts.map +1 -0
- package/dist/operations/crud/upsert.js +386 -0
- package/dist/operations/crud/upsert.js.map +1 -0
- package/dist/operations/query/aggregate.d.ts +30 -0
- package/dist/operations/query/aggregate.d.ts.map +1 -0
- package/dist/operations/query/aggregate.js +227 -0
- package/dist/operations/query/aggregate.js.map +1 -0
- package/dist/operations/query/cursor-stream.d.ts +18 -0
- package/dist/operations/query/cursor-stream.d.ts.map +1 -0
- package/dist/operations/query/cursor-stream.js +199 -0
- package/dist/operations/query/cursor-stream.js.map +1 -0
- package/dist/operations/query/filter-stream.d.ts +12 -0
- package/dist/operations/query/filter-stream.d.ts.map +1 -0
- package/dist/operations/query/filter-stream.js +167 -0
- package/dist/operations/query/filter-stream.js.map +1 -0
- package/dist/operations/query/filter.d.ts +13 -0
- package/dist/operations/query/filter.d.ts.map +1 -0
- package/dist/operations/query/filter.js +267 -0
- package/dist/operations/query/filter.js.map +1 -0
- package/dist/operations/query/paginate-stream.d.ts +11 -0
- package/dist/operations/query/paginate-stream.d.ts.map +1 -0
- package/dist/operations/query/paginate-stream.js +22 -0
- package/dist/operations/query/paginate-stream.js.map +1 -0
- package/dist/operations/query/query-helpers.d.ts +14 -0
- package/dist/operations/query/query-helpers.d.ts.map +1 -0
- package/dist/operations/query/query-helpers.js +22 -0
- package/dist/operations/query/query-helpers.js.map +1 -0
- package/dist/operations/query/resolve-computed.d.ts +142 -0
- package/dist/operations/query/resolve-computed.d.ts.map +1 -0
- package/dist/operations/query/resolve-computed.js +197 -0
- package/dist/operations/query/resolve-computed.js.map +1 -0
- package/dist/operations/query/search.d.ts +110 -0
- package/dist/operations/query/search.d.ts.map +1 -0
- package/dist/operations/query/search.js +188 -0
- package/dist/operations/query/search.js.map +1 -0
- package/dist/operations/query/select-stream.d.ts +27 -0
- package/dist/operations/query/select-stream.d.ts.map +1 -0
- package/dist/operations/query/select-stream.js +88 -0
- package/dist/operations/query/select-stream.js.map +1 -0
- package/dist/operations/query/select.d.ts +54 -0
- package/dist/operations/query/select.d.ts.map +1 -0
- package/dist/operations/query/select.js +159 -0
- package/dist/operations/query/select.js.map +1 -0
- package/dist/operations/query/sort-stream.d.ts +46 -0
- package/dist/operations/query/sort-stream.d.ts.map +1 -0
- package/dist/operations/query/sort-stream.js +158 -0
- package/dist/operations/query/sort-stream.js.map +1 -0
- package/dist/operations/query/sort.d.ts +9 -0
- package/dist/operations/query/sort.d.ts.map +1 -0
- package/dist/operations/query/sort.js +58 -0
- package/dist/operations/query/sort.js.map +1 -0
- package/dist/operations/relationships/populate-stream.d.ts +29 -0
- package/dist/operations/relationships/populate-stream.d.ts.map +1 -0
- package/dist/operations/relationships/populate-stream.js +159 -0
- package/dist/operations/relationships/populate-stream.js.map +1 -0
- package/dist/operations/relationships/populate.d.ts +15 -0
- package/dist/operations/relationships/populate.d.ts.map +1 -0
- package/dist/operations/relationships/populate.js +228 -0
- package/dist/operations/relationships/populate.js.map +1 -0
- package/dist/plugins/plugin-hooks.d.ts +25 -0
- package/dist/plugins/plugin-hooks.d.ts.map +1 -0
- package/dist/plugins/plugin-hooks.js +64 -0
- package/dist/plugins/plugin-hooks.js.map +1 -0
- package/dist/plugins/plugin-registry.d.ts +26 -0
- package/dist/plugins/plugin-registry.d.ts.map +1 -0
- package/dist/plugins/plugin-registry.js +150 -0
- package/dist/plugins/plugin-registry.js.map +1 -0
- package/dist/plugins/plugin-types.d.ts +95 -0
- package/dist/plugins/plugin-types.d.ts.map +1 -0
- package/dist/plugins/plugin-types.js +6 -0
- package/dist/plugins/plugin-types.js.map +1 -0
- package/dist/plugins/plugin-validation.d.ts +49 -0
- package/dist/plugins/plugin-validation.d.ts.map +1 -0
- package/dist/plugins/plugin-validation.js +295 -0
- package/dist/plugins/plugin-validation.js.map +1 -0
- package/dist/reactive/change-event.d.ts +44 -0
- package/dist/reactive/change-event.d.ts.map +1 -0
- package/dist/reactive/change-event.js +49 -0
- package/dist/reactive/change-event.js.map +1 -0
- package/dist/reactive/change-pubsub.d.ts +32 -0
- package/dist/reactive/change-pubsub.d.ts.map +1 -0
- package/dist/reactive/change-pubsub.js +31 -0
- package/dist/reactive/change-pubsub.js.map +1 -0
- package/dist/reactive/evaluate-query.d.ts +62 -0
- package/dist/reactive/evaluate-query.d.ts.map +1 -0
- package/dist/reactive/evaluate-query.js +57 -0
- package/dist/reactive/evaluate-query.js.map +1 -0
- package/dist/reactive/watch-by-id.d.ts +53 -0
- package/dist/reactive/watch-by-id.d.ts.map +1 -0
- package/dist/reactive/watch-by-id.js +55 -0
- package/dist/reactive/watch-by-id.js.map +1 -0
- package/dist/reactive/watch.d.ts +78 -0
- package/dist/reactive/watch.d.ts.map +1 -0
- package/dist/reactive/watch.js +133 -0
- package/dist/reactive/watch.js.map +1 -0
- package/dist/serializers/codecs/hjson.d.ts +33 -0
- package/dist/serializers/codecs/hjson.d.ts.map +1 -0
- package/dist/serializers/codecs/hjson.js +40 -0
- package/dist/serializers/codecs/hjson.js.map +1 -0
- package/dist/serializers/codecs/json.d.ts +22 -0
- package/dist/serializers/codecs/json.d.ts.map +1 -0
- package/dist/serializers/codecs/json.js +28 -0
- package/dist/serializers/codecs/json.js.map +1 -0
- package/dist/serializers/codecs/json5.d.ts +26 -0
- package/dist/serializers/codecs/json5.d.ts.map +1 -0
- package/dist/serializers/codecs/json5.js +33 -0
- package/dist/serializers/codecs/json5.js.map +1 -0
- package/dist/serializers/codecs/jsonc.d.ts +29 -0
- package/dist/serializers/codecs/jsonc.d.ts.map +1 -0
- package/dist/serializers/codecs/jsonc.js +38 -0
- package/dist/serializers/codecs/jsonc.js.map +1 -0
- package/dist/serializers/codecs/jsonl.d.ts +17 -0
- package/dist/serializers/codecs/jsonl.d.ts.map +1 -0
- package/dist/serializers/codecs/jsonl.js +31 -0
- package/dist/serializers/codecs/jsonl.js.map +1 -0
- package/dist/serializers/codecs/prose.d.ts +419 -0
- package/dist/serializers/codecs/prose.d.ts.map +1 -0
- package/dist/serializers/codecs/prose.js +1060 -0
- package/dist/serializers/codecs/prose.js.map +1 -0
- package/dist/serializers/codecs/toml.d.ts +23 -0
- package/dist/serializers/codecs/toml.d.ts.map +1 -0
- package/dist/serializers/codecs/toml.js +66 -0
- package/dist/serializers/codecs/toml.js.map +1 -0
- package/dist/serializers/codecs/toon.d.ts +20 -0
- package/dist/serializers/codecs/toon.d.ts.map +1 -0
- package/dist/serializers/codecs/toon.js +33 -0
- package/dist/serializers/codecs/toon.js.map +1 -0
- package/dist/serializers/codecs/yaml.d.ts +24 -0
- package/dist/serializers/codecs/yaml.d.ts.map +1 -0
- package/dist/serializers/codecs/yaml.js +31 -0
- package/dist/serializers/codecs/yaml.js.map +1 -0
- package/dist/serializers/format-codec.d.ts +53 -0
- package/dist/serializers/format-codec.d.ts.map +1 -0
- package/dist/serializers/format-codec.js +148 -0
- package/dist/serializers/format-codec.js.map +1 -0
- package/dist/serializers/presets.d.ts +48 -0
- package/dist/serializers/presets.d.ts.map +1 -0
- package/dist/serializers/presets.js +72 -0
- package/dist/serializers/presets.js.map +1 -0
- package/dist/serializers/serializer-service.d.ts +11 -0
- package/dist/serializers/serializer-service.d.ts.map +1 -0
- package/dist/serializers/serializer-service.js +4 -0
- package/dist/serializers/serializer-service.js.map +1 -0
- package/dist/state/collection-state.d.ts +19 -0
- package/dist/state/collection-state.d.ts.map +1 -0
- package/dist/state/collection-state.js +15 -0
- package/dist/state/collection-state.js.map +1 -0
- package/dist/state/state-operations.d.ts +38 -0
- package/dist/state/state-operations.d.ts.map +1 -0
- package/dist/state/state-operations.js +65 -0
- package/dist/state/state-operations.js.map +1 -0
- package/dist/storage/in-memory-adapter-layer.d.ts +16 -0
- package/dist/storage/in-memory-adapter-layer.d.ts.map +1 -0
- package/dist/storage/in-memory-adapter-layer.js +81 -0
- package/dist/storage/in-memory-adapter-layer.js.map +1 -0
- package/dist/storage/persistence-effect.d.ts +244 -0
- package/dist/storage/persistence-effect.d.ts.map +1 -0
- package/dist/storage/persistence-effect.js +551 -0
- package/dist/storage/persistence-effect.js.map +1 -0
- package/dist/storage/storage-service.d.ts +22 -0
- package/dist/storage/storage-service.d.ts.map +1 -0
- package/dist/storage/storage-service.js +4 -0
- package/dist/storage/storage-service.js.map +1 -0
- package/dist/storage/transforms.d.ts +183 -0
- package/dist/storage/transforms.d.ts.map +1 -0
- package/dist/storage/transforms.js +263 -0
- package/dist/storage/transforms.js.map +1 -0
- package/dist/transactions/transaction.d.ts +87 -0
- package/dist/transactions/transaction.d.ts.map +1 -0
- package/dist/transactions/transaction.js +240 -0
- package/dist/transactions/transaction.js.map +1 -0
- package/dist/types/aggregate-types.d.ts +73 -0
- package/dist/types/aggregate-types.d.ts.map +1 -0
- package/dist/types/aggregate-types.js +14 -0
- package/dist/types/aggregate-types.js.map +1 -0
- package/dist/types/computed-types.d.ts +71 -0
- package/dist/types/computed-types.d.ts.map +1 -0
- package/dist/types/computed-types.js +8 -0
- package/dist/types/computed-types.js.map +1 -0
- package/dist/types/crud-relationship-types.d.ts +180 -0
- package/dist/types/crud-relationship-types.d.ts.map +1 -0
- package/dist/types/crud-relationship-types.js +17 -0
- package/dist/types/crud-relationship-types.js.map +1 -0
- package/dist/types/crud-types.d.ts +343 -0
- package/dist/types/crud-types.d.ts.map +1 -0
- package/dist/types/crud-types.js +43 -0
- package/dist/types/crud-types.js.map +1 -0
- package/dist/types/cursor-types.d.ts +52 -0
- package/dist/types/cursor-types.d.ts.map +1 -0
- package/dist/types/cursor-types.js +2 -0
- package/dist/types/cursor-types.js.map +1 -0
- package/dist/types/database-config-types.d.ts +196 -0
- package/dist/types/database-config-types.d.ts.map +1 -0
- package/dist/types/database-config-types.js +11 -0
- package/dist/types/database-config-types.js.map +1 -0
- package/dist/types/hook-types.d.ts +158 -0
- package/dist/types/hook-types.d.ts.map +1 -0
- package/dist/types/hook-types.js +6 -0
- package/dist/types/hook-types.js.map +1 -0
- package/dist/types/index-types.d.ts +42 -0
- package/dist/types/index-types.d.ts.map +1 -0
- package/dist/types/index-types.js +8 -0
- package/dist/types/index-types.js.map +1 -0
- package/dist/types/operators.d.ts +5 -0
- package/dist/types/operators.d.ts.map +1 -0
- package/dist/types/operators.js +297 -0
- package/dist/types/operators.js.map +1 -0
- package/dist/types/query-overloads.d.ts +54 -0
- package/dist/types/query-overloads.d.ts.map +1 -0
- package/dist/types/query-overloads.js +3 -0
- package/dist/types/query-overloads.js.map +1 -0
- package/dist/types/reactive-types.d.ts +75 -0
- package/dist/types/reactive-types.d.ts.map +1 -0
- package/dist/types/reactive-types.js +7 -0
- package/dist/types/reactive-types.js.map +1 -0
- package/dist/types/schema-types.d.ts +56 -0
- package/dist/types/schema-types.d.ts.map +1 -0
- package/dist/types/schema-types.js +8 -0
- package/dist/types/schema-types.js.map +1 -0
- package/dist/types/search-types.d.ts +82 -0
- package/dist/types/search-types.d.ts.map +1 -0
- package/dist/types/search-types.js +110 -0
- package/dist/types/search-types.js.map +1 -0
- package/dist/types/types.d.ts +286 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js +2 -0
- package/dist/types/types.js.map +1 -0
- package/dist/utils/id-generator.d.ts +97 -0
- package/dist/utils/id-generator.d.ts.map +1 -0
- package/dist/utils/id-generator.js +247 -0
- package/dist/utils/id-generator.js.map +1 -0
- package/dist/utils/nested-path.d.ts +56 -0
- package/dist/utils/nested-path.d.ts.map +1 -0
- package/dist/utils/nested-path.js +119 -0
- package/dist/utils/nested-path.js.map +1 -0
- package/dist/utils/path.d.ts +16 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +24 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/validators/foreign-key.d.ts +49 -0
- package/dist/validators/foreign-key.d.ts.map +1 -0
- package/dist/validators/foreign-key.js +153 -0
- package/dist/validators/foreign-key.js.map +1 -0
- package/dist/validators/schema-validator.d.ts +19 -0
- package/dist/validators/schema-validator.d.ts.map +1 -0
- package/dist/validators/schema-validator.js +34 -0
- package/dist/validators/schema-validator.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-config-types.js","sourceRoot":"","sources":["../../src/types/database-config-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkLH;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACrC,MAAwB;IAExB,OAAO,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lifecycle hook types for CRUD operations.
|
|
3
|
+
* Hooks intercept operations before/after mutation for transformation, validation, or side effects.
|
|
4
|
+
*/
|
|
5
|
+
import type { Effect } from "effect";
|
|
6
|
+
import type { HookError } from "../errors/crud-errors.js";
|
|
7
|
+
import type { UpdateWithOperators } from "./crud-types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Context provided to beforeCreate hooks.
|
|
10
|
+
* The hook receives the validated entity about to be inserted and can transform it.
|
|
11
|
+
*/
|
|
12
|
+
export interface BeforeCreateContext<T> {
|
|
13
|
+
readonly operation: "create";
|
|
14
|
+
readonly collection: string;
|
|
15
|
+
readonly data: T;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Context provided to beforeUpdate hooks.
|
|
19
|
+
* The hook receives the current entity state and the update payload, and can transform the update.
|
|
20
|
+
*/
|
|
21
|
+
export interface BeforeUpdateContext<T> {
|
|
22
|
+
readonly operation: "update";
|
|
23
|
+
readonly collection: string;
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly existing: T;
|
|
26
|
+
readonly update: UpdateWithOperators<T>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Context provided to beforeDelete hooks.
|
|
30
|
+
* The hook can inspect the entity about to be deleted and reject if needed.
|
|
31
|
+
*/
|
|
32
|
+
export interface BeforeDeleteContext<T> {
|
|
33
|
+
readonly operation: "delete";
|
|
34
|
+
readonly collection: string;
|
|
35
|
+
readonly id: string;
|
|
36
|
+
readonly entity: T;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Context provided to afterCreate hooks.
|
|
40
|
+
* Contains the entity as it was stored after the create operation.
|
|
41
|
+
*/
|
|
42
|
+
export interface AfterCreateContext<T> {
|
|
43
|
+
readonly operation: "create";
|
|
44
|
+
readonly collection: string;
|
|
45
|
+
readonly entity: T;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Context provided to afterUpdate hooks.
|
|
49
|
+
* Contains both previous and current state to enable diffing.
|
|
50
|
+
*/
|
|
51
|
+
export interface AfterUpdateContext<T> {
|
|
52
|
+
readonly operation: "update";
|
|
53
|
+
readonly collection: string;
|
|
54
|
+
readonly id: string;
|
|
55
|
+
readonly previous: T;
|
|
56
|
+
readonly current: T;
|
|
57
|
+
readonly update: UpdateWithOperators<T>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Context provided to afterDelete hooks.
|
|
61
|
+
* Contains the entity that was deleted.
|
|
62
|
+
*/
|
|
63
|
+
export interface AfterDeleteContext<T> {
|
|
64
|
+
readonly operation: "delete";
|
|
65
|
+
readonly collection: string;
|
|
66
|
+
readonly id: string;
|
|
67
|
+
readonly entity: T;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Context for onCreate change event.
|
|
71
|
+
*/
|
|
72
|
+
export interface OnChangeCreateContext<T> {
|
|
73
|
+
readonly type: "create";
|
|
74
|
+
readonly collection: string;
|
|
75
|
+
readonly entity: T;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Context for onUpdate change event.
|
|
79
|
+
*/
|
|
80
|
+
export interface OnChangeUpdateContext<T> {
|
|
81
|
+
readonly type: "update";
|
|
82
|
+
readonly collection: string;
|
|
83
|
+
readonly id: string;
|
|
84
|
+
readonly previous: T;
|
|
85
|
+
readonly current: T;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Context for onDelete change event.
|
|
89
|
+
*/
|
|
90
|
+
export interface OnChangeDeleteContext<T> {
|
|
91
|
+
readonly type: "delete";
|
|
92
|
+
readonly collection: string;
|
|
93
|
+
readonly id: string;
|
|
94
|
+
readonly entity: T;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Discriminated union of all change contexts.
|
|
98
|
+
* The `type` field discriminates between create, update, and delete events.
|
|
99
|
+
*/
|
|
100
|
+
export type OnChangeContext<T> = OnChangeCreateContext<T> | OnChangeUpdateContext<T> | OnChangeDeleteContext<T>;
|
|
101
|
+
/**
|
|
102
|
+
* Before-hook for create operations.
|
|
103
|
+
* Receives the validated entity about to be inserted and can transform it.
|
|
104
|
+
* Return the (possibly transformed) entity, or fail with HookError to abort.
|
|
105
|
+
*/
|
|
106
|
+
export type BeforeCreateHook<T> = (ctx: BeforeCreateContext<T>) => Effect.Effect<T, HookError>;
|
|
107
|
+
/**
|
|
108
|
+
* Before-hook for update operations.
|
|
109
|
+
* Receives the current entity state and the update payload.
|
|
110
|
+
* Return the (possibly transformed) update payload, or fail with HookError to abort.
|
|
111
|
+
*/
|
|
112
|
+
export type BeforeUpdateHook<T> = (ctx: BeforeUpdateContext<T>) => Effect.Effect<UpdateWithOperators<T>, HookError>;
|
|
113
|
+
/**
|
|
114
|
+
* Before-hook for delete operations.
|
|
115
|
+
* Can inspect the entity about to be deleted and reject if needed.
|
|
116
|
+
* Return void to proceed, or fail with HookError to abort.
|
|
117
|
+
*/
|
|
118
|
+
export type BeforeDeleteHook<T> = (ctx: BeforeDeleteContext<T>) => Effect.Effect<void, HookError>;
|
|
119
|
+
/**
|
|
120
|
+
* After-hook for create operations.
|
|
121
|
+
* Receives the entity as it was stored. Used for side effects.
|
|
122
|
+
* Errors are swallowed (fire-and-forget) - hooks may fail but failures are ignored.
|
|
123
|
+
*/
|
|
124
|
+
export type AfterCreateHook<T> = (ctx: AfterCreateContext<T>) => Effect.Effect<void, unknown>;
|
|
125
|
+
/**
|
|
126
|
+
* After-hook for update operations.
|
|
127
|
+
* Receives both previous and current state to enable diffing.
|
|
128
|
+
* Errors are swallowed (fire-and-forget) - hooks may fail but failures are ignored.
|
|
129
|
+
*/
|
|
130
|
+
export type AfterUpdateHook<T> = (ctx: AfterUpdateContext<T>) => Effect.Effect<void, unknown>;
|
|
131
|
+
/**
|
|
132
|
+
* After-hook for delete operations.
|
|
133
|
+
* Receives the entity that was deleted.
|
|
134
|
+
* Errors are swallowed (fire-and-forget) - hooks may fail but failures are ignored.
|
|
135
|
+
*/
|
|
136
|
+
export type AfterDeleteHook<T> = (ctx: AfterDeleteContext<T>) => Effect.Effect<void, unknown>;
|
|
137
|
+
/**
|
|
138
|
+
* Generic change hook that fires after any mutation.
|
|
139
|
+
* Receives a discriminated union context with type "create", "update", or "delete".
|
|
140
|
+
* Errors are swallowed (fire-and-forget) - hooks may fail but failures are ignored.
|
|
141
|
+
*/
|
|
142
|
+
export type OnChangeHook<T> = (ctx: OnChangeContext<T>) => Effect.Effect<void, unknown>;
|
|
143
|
+
/**
|
|
144
|
+
* Configuration object for lifecycle hooks on a collection.
|
|
145
|
+
* All fields are optional. Missing fields mean no hooks for that lifecycle point.
|
|
146
|
+
* Hooks run in array order: before-hooks chain (each receives previous output),
|
|
147
|
+
* after-hooks and onChange run independently (fire-and-forget).
|
|
148
|
+
*/
|
|
149
|
+
export interface HooksConfig<T> {
|
|
150
|
+
readonly beforeCreate?: ReadonlyArray<BeforeCreateHook<T>>;
|
|
151
|
+
readonly afterCreate?: ReadonlyArray<AfterCreateHook<T>>;
|
|
152
|
+
readonly beforeUpdate?: ReadonlyArray<BeforeUpdateHook<T>>;
|
|
153
|
+
readonly afterUpdate?: ReadonlyArray<AfterUpdateHook<T>>;
|
|
154
|
+
readonly beforeDelete?: ReadonlyArray<BeforeDeleteHook<T>>;
|
|
155
|
+
readonly afterDelete?: ReadonlyArray<AfterDeleteHook<T>>;
|
|
156
|
+
readonly onChange?: ReadonlyArray<OnChangeHook<T>>;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=hook-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-types.d.ts","sourceRoot":"","sources":["../../src/types/hook-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-types.js","sourceRoot":"","sources":["../../src/types/hook-types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for indexing functionality.
|
|
3
|
+
*
|
|
4
|
+
* Indexes accelerate equality queries by maintaining a reverse mapping
|
|
5
|
+
* from field values to entity IDs.
|
|
6
|
+
*/
|
|
7
|
+
import type { Ref } from "effect";
|
|
8
|
+
/**
|
|
9
|
+
* An index mapping field values to sets of entity IDs.
|
|
10
|
+
*
|
|
11
|
+
* For single-field indexes, the key is the field value directly.
|
|
12
|
+
* For compound indexes, the key is a JSON.stringify'd array of field values.
|
|
13
|
+
*
|
|
14
|
+
* The Set<string> contains entity IDs that have that particular value combination.
|
|
15
|
+
*/
|
|
16
|
+
export type IndexMap = Map<unknown, Set<string>>;
|
|
17
|
+
/**
|
|
18
|
+
* A reference to an index that can be updated atomically.
|
|
19
|
+
* Used to maintain consistency between data mutations and index updates.
|
|
20
|
+
*/
|
|
21
|
+
export type IndexRef = Ref.Ref<IndexMap>;
|
|
22
|
+
/**
|
|
23
|
+
* All indexes for a collection, keyed by the normalized index name.
|
|
24
|
+
*
|
|
25
|
+
* The key is a JSON.stringify'd array of field names for consistency:
|
|
26
|
+
* - Single field "email" -> key is '["email"]'
|
|
27
|
+
* - Compound ["userId", "category"] -> key is '["userId","category"]'
|
|
28
|
+
*/
|
|
29
|
+
export type CollectionIndexes = Map<string, IndexRef>;
|
|
30
|
+
/**
|
|
31
|
+
* An index definition normalized to array form.
|
|
32
|
+
*
|
|
33
|
+
* User input can be:
|
|
34
|
+
* - "email" (single field)
|
|
35
|
+
* - ["userId", "category"] (compound)
|
|
36
|
+
*
|
|
37
|
+
* Both normalize to ReadonlyArray<string>:
|
|
38
|
+
* - "email" -> ["email"]
|
|
39
|
+
* - ["userId", "category"] -> ["userId", "category"]
|
|
40
|
+
*/
|
|
41
|
+
export type NormalizedIndex = ReadonlyArray<string>;
|
|
42
|
+
//# sourceMappingURL=index-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-types.d.ts","sourceRoot":"","sources":["../../src/types/index-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAElC;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-types.js","sourceRoot":"","sources":["../../src/types/index-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CustomOperator } from "../plugins/plugin-types.js";
|
|
2
|
+
import type { FilterOperators } from "./types.js";
|
|
3
|
+
export declare function isFilterOperatorObject<T>(filter: T | FilterOperators<T>, customOperators?: Map<string, CustomOperator>): filter is FilterOperators<T>;
|
|
4
|
+
export declare function matchesFilter<T>(value: T, filter: T | FilterOperators<T>, customOperators?: Map<string, CustomOperator>): boolean;
|
|
5
|
+
//# sourceMappingURL=operators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../src/types/operators.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAkHlD,wBAAgB,sBAAsB,CAAC,CAAC,EACvC,MAAM,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAC9B,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAC3C,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,CAqB9B;AAGD,wBAAgB,aAAa,CAAC,CAAC,EAC9B,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAC9B,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAC3C,OAAO,CAqQT"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import { tokenize } from "../operations/query/search.js";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Modular Operator Checking Functions
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Universal operators that work with all types
|
|
6
|
+
function checkUniversalOperator(value, operator, operand, hasOperator) {
|
|
7
|
+
// If operator is not present in the object, return null
|
|
8
|
+
if (!hasOperator)
|
|
9
|
+
return null;
|
|
10
|
+
switch (operator) {
|
|
11
|
+
case "$eq":
|
|
12
|
+
return value === operand;
|
|
13
|
+
case "$ne":
|
|
14
|
+
return value !== operand;
|
|
15
|
+
case "$in":
|
|
16
|
+
return Array.isArray(operand) && operand.includes(value);
|
|
17
|
+
case "$nin":
|
|
18
|
+
return Array.isArray(operand) && !operand.includes(value);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
// String-specific operators
|
|
22
|
+
function checkStringOperator(value, operator, operand, hasOperator) {
|
|
23
|
+
if (!hasOperator)
|
|
24
|
+
return null;
|
|
25
|
+
if (operand === undefined)
|
|
26
|
+
return false; // String operators require a value
|
|
27
|
+
if (value === undefined)
|
|
28
|
+
return false; // Can't perform string operations on undefined
|
|
29
|
+
switch (operator) {
|
|
30
|
+
case "$startsWith":
|
|
31
|
+
return value.startsWith(operand);
|
|
32
|
+
case "$endsWith":
|
|
33
|
+
return value.endsWith(operand);
|
|
34
|
+
case "$contains":
|
|
35
|
+
return value.includes(operand);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Number-specific operators
|
|
39
|
+
function checkNumberOperator(value, operator, operand, hasOperator) {
|
|
40
|
+
if (!hasOperator)
|
|
41
|
+
return null;
|
|
42
|
+
if (operand === undefined)
|
|
43
|
+
return false; // Number operators require a value
|
|
44
|
+
switch (operator) {
|
|
45
|
+
case "$gt":
|
|
46
|
+
return value > operand;
|
|
47
|
+
case "$gte":
|
|
48
|
+
return value >= operand;
|
|
49
|
+
case "$lt":
|
|
50
|
+
return value < operand;
|
|
51
|
+
case "$lte":
|
|
52
|
+
return value <= operand;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Array-specific operators
|
|
56
|
+
function checkArrayOperator(value, operator, operand, hasOperator) {
|
|
57
|
+
if (!hasOperator)
|
|
58
|
+
return null;
|
|
59
|
+
if (operand === undefined)
|
|
60
|
+
return false; // Array operators require a value
|
|
61
|
+
switch (operator) {
|
|
62
|
+
case "$contains":
|
|
63
|
+
// Check if array contains the single value
|
|
64
|
+
return value.includes(operand);
|
|
65
|
+
case "$all":
|
|
66
|
+
// Check if array contains all values
|
|
67
|
+
if (!Array.isArray(operand))
|
|
68
|
+
return false;
|
|
69
|
+
return operand.every((item) => value.includes(item));
|
|
70
|
+
case "$size":
|
|
71
|
+
// Check array length
|
|
72
|
+
return value.length === operand;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Built-in operator keys (shared between isFilterOperatorObject and matchesFilter)
|
|
76
|
+
const BUILT_IN_OPERATORS = new Set([
|
|
77
|
+
"$eq",
|
|
78
|
+
"$ne",
|
|
79
|
+
"$in",
|
|
80
|
+
"$nin",
|
|
81
|
+
"$gt",
|
|
82
|
+
"$gte",
|
|
83
|
+
"$lt",
|
|
84
|
+
"$lte",
|
|
85
|
+
"$startsWith",
|
|
86
|
+
"$endsWith",
|
|
87
|
+
"$contains",
|
|
88
|
+
"$all",
|
|
89
|
+
"$size",
|
|
90
|
+
"$search",
|
|
91
|
+
]);
|
|
92
|
+
// Type guard to check if a value is a filter operator object
|
|
93
|
+
export function isFilterOperatorObject(filter, customOperators) {
|
|
94
|
+
if (typeof filter !== "object" || filter === null || Array.isArray(filter)) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
const filterKeys = Object.keys(filter);
|
|
98
|
+
if (filterKeys.length === 0) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
return filterKeys.some((key) => {
|
|
102
|
+
// Check built-in operators
|
|
103
|
+
if (BUILT_IN_OPERATORS.has(key)) {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
// Check custom operators (any $-prefixed key present in the custom operators map)
|
|
107
|
+
if (customOperators && key.startsWith("$") && customOperators.has(key)) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
return false;
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
// Helper function to check if a value matches a filter operator
|
|
114
|
+
export function matchesFilter(value, filter, customOperators) {
|
|
115
|
+
// Check if filter is an object with operators
|
|
116
|
+
if (isFilterOperatorObject(filter, customOperators)) {
|
|
117
|
+
// Type-safe operator access using type guards and explicit property checks
|
|
118
|
+
const ops = filter;
|
|
119
|
+
const results = [];
|
|
120
|
+
// Check universal operators that exist on all FilterOperators variants
|
|
121
|
+
if ("$eq" in ops) {
|
|
122
|
+
const result = checkUniversalOperator(value, "$eq", ops.$eq, true);
|
|
123
|
+
if (result !== null)
|
|
124
|
+
results.push(result);
|
|
125
|
+
}
|
|
126
|
+
if ("$ne" in ops) {
|
|
127
|
+
const result = checkUniversalOperator(value, "$ne", ops.$ne, true);
|
|
128
|
+
if (result !== null)
|
|
129
|
+
results.push(result);
|
|
130
|
+
}
|
|
131
|
+
if ("$in" in ops) {
|
|
132
|
+
const result = checkUniversalOperator(value, "$in", ops.$in, true);
|
|
133
|
+
if (result !== null)
|
|
134
|
+
results.push(result);
|
|
135
|
+
}
|
|
136
|
+
if ("$nin" in ops) {
|
|
137
|
+
const result = checkUniversalOperator(value, "$nin", ops.$nin, true);
|
|
138
|
+
if (result !== null)
|
|
139
|
+
results.push(result);
|
|
140
|
+
}
|
|
141
|
+
// Check string-specific operators only for string values
|
|
142
|
+
if (typeof value === "string") {
|
|
143
|
+
if ("$startsWith" in ops) {
|
|
144
|
+
const result = checkStringOperator(value, "$startsWith", ops.$startsWith, true);
|
|
145
|
+
if (result !== null)
|
|
146
|
+
results.push(result);
|
|
147
|
+
}
|
|
148
|
+
if ("$endsWith" in ops) {
|
|
149
|
+
const result = checkStringOperator(value, "$endsWith", ops.$endsWith, true);
|
|
150
|
+
if (result !== null)
|
|
151
|
+
results.push(result);
|
|
152
|
+
}
|
|
153
|
+
if ("$contains" in ops) {
|
|
154
|
+
const result = checkStringOperator(value, "$contains", ops.$contains, true);
|
|
155
|
+
if (result !== null)
|
|
156
|
+
results.push(result);
|
|
157
|
+
}
|
|
158
|
+
if ("$search" in ops) {
|
|
159
|
+
const searchQuery = ops.$search;
|
|
160
|
+
if (searchQuery !== undefined) {
|
|
161
|
+
// Empty search string matches everything
|
|
162
|
+
if (searchQuery === "") {
|
|
163
|
+
results.push(true);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
const queryTokens = tokenize(searchQuery);
|
|
167
|
+
const fieldTokens = tokenize(value);
|
|
168
|
+
// All query tokens must match at least one field token (exact or prefix)
|
|
169
|
+
const allTokensMatch = queryTokens.every((queryToken) => fieldTokens.some((fieldToken) => fieldToken === queryToken ||
|
|
170
|
+
fieldToken.startsWith(queryToken)));
|
|
171
|
+
results.push(allTokensMatch);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else if (value === undefined || value === null || value === "") {
|
|
177
|
+
// For non-string values (undefined, null, empty), string operators should fail
|
|
178
|
+
if ("$startsWith" in ops || "$endsWith" in ops || "$contains" in ops) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Check number-specific operators only for number values
|
|
183
|
+
if (typeof value === "number") {
|
|
184
|
+
if ("$gt" in ops) {
|
|
185
|
+
const result = checkNumberOperator(value, "$gt", ops.$gt, true);
|
|
186
|
+
if (result !== null)
|
|
187
|
+
results.push(result);
|
|
188
|
+
}
|
|
189
|
+
if ("$gte" in ops) {
|
|
190
|
+
const result = checkNumberOperator(value, "$gte", ops.$gte, true);
|
|
191
|
+
if (result !== null)
|
|
192
|
+
results.push(result);
|
|
193
|
+
}
|
|
194
|
+
if ("$lt" in ops) {
|
|
195
|
+
const result = checkNumberOperator(value, "$lt", ops.$lt, true);
|
|
196
|
+
if (result !== null)
|
|
197
|
+
results.push(result);
|
|
198
|
+
}
|
|
199
|
+
if ("$lte" in ops) {
|
|
200
|
+
const result = checkNumberOperator(value, "$lte", ops.$lte, true);
|
|
201
|
+
if (result !== null)
|
|
202
|
+
results.push(result);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// Also allow comparison operators on strings (for ISO date strings, etc.)
|
|
206
|
+
if (typeof value === "string") {
|
|
207
|
+
if ("$gt" in ops) {
|
|
208
|
+
const operand = ops.$gt;
|
|
209
|
+
if (typeof operand === "string") {
|
|
210
|
+
results.push(value > operand);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if ("$gte" in ops) {
|
|
214
|
+
const operand = ops.$gte;
|
|
215
|
+
if (typeof operand === "string") {
|
|
216
|
+
results.push(value >= operand);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if ("$lt" in ops) {
|
|
220
|
+
const operand = ops.$lt;
|
|
221
|
+
if (typeof operand === "string") {
|
|
222
|
+
results.push(value < operand);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if ("$lte" in ops) {
|
|
226
|
+
const operand = ops.$lte;
|
|
227
|
+
if (typeof operand === "string") {
|
|
228
|
+
results.push(value <= operand);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Check array-specific operators only for array values
|
|
233
|
+
if (Array.isArray(value)) {
|
|
234
|
+
// Note: For arrays, $contains checks if the array contains a value
|
|
235
|
+
if ("$contains" in ops) {
|
|
236
|
+
const result = checkArrayOperator(value, "$contains", ops.$contains, true);
|
|
237
|
+
if (result !== null)
|
|
238
|
+
results.push(result);
|
|
239
|
+
}
|
|
240
|
+
if ("$all" in ops) {
|
|
241
|
+
const result = checkArrayOperator(value, "$all", ops.$all, true);
|
|
242
|
+
if (result !== null)
|
|
243
|
+
results.push(result);
|
|
244
|
+
}
|
|
245
|
+
if ("$size" in ops) {
|
|
246
|
+
const result = checkArrayOperator(value, "$size", ops.$size, true);
|
|
247
|
+
if (result !== null)
|
|
248
|
+
results.push(result);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
else if (value === undefined || value === null) {
|
|
252
|
+
// For undefined/null values, array operators should fail
|
|
253
|
+
if ("$contains" in ops || "$all" in ops || "$size" in ops) {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Check if comparison operators are being used on incompatible types
|
|
258
|
+
if (typeof value !== "number" && typeof value !== "string") {
|
|
259
|
+
if ("$gt" in ops || "$gte" in ops || "$lt" in ops || "$lte" in ops) {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// Check custom operators for any unrecognized $-prefixed keys
|
|
264
|
+
if (customOperators && customOperators.size > 0) {
|
|
265
|
+
for (const key of Object.keys(ops)) {
|
|
266
|
+
// Skip non-operator keys and built-in operators
|
|
267
|
+
if (!key.startsWith("$") || BUILT_IN_OPERATORS.has(key)) {
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
// Look up custom operator
|
|
271
|
+
const customOp = customOperators.get(key);
|
|
272
|
+
if (customOp) {
|
|
273
|
+
// Check if the value type is compatible with the operator
|
|
274
|
+
const valueType = Array.isArray(value)
|
|
275
|
+
? "array"
|
|
276
|
+
: typeof value;
|
|
277
|
+
// Only evaluate if the operator supports this value type
|
|
278
|
+
if (customOp.types.includes(valueType)) {
|
|
279
|
+
const result = customOp.evaluate(value, ops[key]);
|
|
280
|
+
results.push(result);
|
|
281
|
+
}
|
|
282
|
+
// If type is not supported, the operator is silently ignored
|
|
283
|
+
// (consistent with how built-in type-specific operators work)
|
|
284
|
+
}
|
|
285
|
+
// Unknown operators are silently ignored (no error thrown)
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// If no operators were specified, this shouldn't happen due to isFilterOperatorObject check
|
|
289
|
+
if (results.length === 0)
|
|
290
|
+
return true;
|
|
291
|
+
// All specified operators must match (AND logic)
|
|
292
|
+
return results.every((result) => result === true);
|
|
293
|
+
}
|
|
294
|
+
// Direct equality check
|
|
295
|
+
return value === filter;
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=operators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operators.js","sourceRoot":"","sources":["../../src/types/operators.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ApplyPopulateObject, ApplySelectAndPopulate, ApplySelectConfig, PopulateConfig, RelationshipDef, SelectConfig, SortConfig, WhereClause } from "./types.js";
|
|
2
|
+
export interface QueryWithoutPopulate<T, Relations, DB> {
|
|
3
|
+
where?: WhereClause<T, Relations, DB>;
|
|
4
|
+
sort?: SortConfig<T, Relations, Record<string, never>, DB>;
|
|
5
|
+
select?: SelectConfig<T, Relations, DB>;
|
|
6
|
+
limit?: number;
|
|
7
|
+
offset?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface QueryWithPopulate<T, Relations, DB> {
|
|
10
|
+
populate: PopulateConfig<Relations, DB>;
|
|
11
|
+
where?: WhereClause<T, Relations, DB>;
|
|
12
|
+
sort?: SortConfig<T, Relations, {
|
|
13
|
+
populate: PopulateConfig<Relations, DB>;
|
|
14
|
+
}, DB>;
|
|
15
|
+
select?: SelectConfig<T, Relations, DB>;
|
|
16
|
+
limit?: number;
|
|
17
|
+
offset?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface SmartCollectionWithOverloads<T, Relations extends Record<string, RelationshipDef<unknown, "ref" | "inverse", string>>, DB> {
|
|
20
|
+
query<P extends PopulateConfig<Relations, DB>, S extends SelectConfig<T, Relations, DB>>(config: {
|
|
21
|
+
populate: P;
|
|
22
|
+
select: S;
|
|
23
|
+
where?: WhereClause<T, Relations, DB>;
|
|
24
|
+
sort?: SortConfig<T, Relations, {
|
|
25
|
+
populate: P;
|
|
26
|
+
}, DB>;
|
|
27
|
+
limit?: number;
|
|
28
|
+
offset?: number;
|
|
29
|
+
}): AsyncIterable<ApplySelectAndPopulate<T, Relations, S, P, DB>>;
|
|
30
|
+
query<P extends PopulateConfig<Relations, DB>>(config: {
|
|
31
|
+
populate: P;
|
|
32
|
+
where?: WhereClause<T, Relations, DB>;
|
|
33
|
+
sort?: SortConfig<T, Relations, {
|
|
34
|
+
populate: P;
|
|
35
|
+
}, DB>;
|
|
36
|
+
limit?: number;
|
|
37
|
+
offset?: number;
|
|
38
|
+
}): AsyncIterable<ApplyPopulateObject<T, Relations, P, DB>>;
|
|
39
|
+
query<S extends SelectConfig<T, Relations, DB>>(config: {
|
|
40
|
+
select: S;
|
|
41
|
+
where?: WhereClause<T, Relations, DB>;
|
|
42
|
+
sort?: SortConfig<T, Relations, Record<string, never>, DB>;
|
|
43
|
+
limit?: number;
|
|
44
|
+
offset?: number;
|
|
45
|
+
}): AsyncIterable<ApplySelectConfig<T, S, Relations, DB>>;
|
|
46
|
+
query(config?: {
|
|
47
|
+
where?: WhereClause<T, Relations, DB>;
|
|
48
|
+
sort?: SortConfig<T, Relations, Record<string, never>, DB>;
|
|
49
|
+
limit?: number;
|
|
50
|
+
offset?: number;
|
|
51
|
+
}): AsyncIterable<T>;
|
|
52
|
+
query(config?: unknown): AsyncIterable<unknown>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=query-overloads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-overloads.d.ts","sourceRoot":"","sources":["../../src/types/query-overloads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-overloads.js","sourceRoot":"","sources":["../../src/types/query-overloads.ts"],"names":[],"mappings":"AAAA,0EAA0E"}
|