@adobe/data 0.2.12 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ecs/database/create-database.js +11 -7
- package/dist/ecs/database/create-database.js.map +1 -1
- package/dist/ecs/database/create-database.test.js +8 -8
- package/dist/ecs/database/create-database.test.js.map +1 -1
- package/dist/ecs/database/database-schema/create-database-schema-test.js +21 -0
- package/dist/ecs/database/database-schema/create-database-schema-test.js.map +1 -1
- package/dist/ecs/database/database-schema/create-database-schema.js +21 -0
- package/dist/ecs/database/database-schema/create-database-schema.js.map +1 -1
- package/dist/ecs/database/database-schema/database-schema.js +21 -0
- package/dist/ecs/database/database-schema/database-schema.js.map +1 -1
- package/dist/ecs/database/database-schema/index.js +21 -0
- package/dist/ecs/database/database-schema/index.js.map +1 -1
- package/dist/ecs/database/database.d.ts +3 -0
- package/dist/ecs/database/observe-select-entities.d.ts +7 -0
- package/dist/ecs/database/observe-select-entities.js +62 -0
- package/dist/ecs/database/observe-select-entities.js.map +1 -0
- package/dist/ecs/database/observe-select-entities.test.d.ts +1 -0
- package/dist/ecs/database/observe-select-entities.test.js +545 -0
- package/dist/ecs/database/observe-select-entities.test.js.map +1 -0
- package/dist/ecs/database/transactional-store/create-transactional-store.js +1 -0
- package/dist/ecs/database/transactional-store/create-transactional-store.js.map +1 -1
- package/dist/ecs/database/transactional-store/create-transactional-store.test.js +15 -13
- package/dist/ecs/database/transactional-store/create-transactional-store.test.js.map +1 -1
- package/dist/ecs/store/core/core.d.ts +4 -6
- package/dist/ecs/store/core/create-core.js.map +1 -1
- package/dist/ecs/store/core/select-entities.d.ts +6 -0
- package/dist/ecs/store/core/select-entities.js +78 -0
- package/dist/ecs/store/core/select-entities.js.map +1 -0
- package/dist/ecs/store/core/select-entities.test.d.ts +1 -0
- package/dist/ecs/store/core/select-entities.test.js +375 -0
- package/dist/ecs/store/core/select-entities.test.js.map +1 -0
- package/dist/ecs/store/create-store.js +2 -14
- package/dist/ecs/store/create-store.js.map +1 -1
- package/dist/ecs/store/create-store.test.js.map +1 -1
- package/dist/ecs/store/entity-select-options.d.ts +15 -0
- package/dist/ecs/store/entity-select-options.js +23 -0
- package/dist/ecs/store/entity-select-options.js.map +1 -0
- package/dist/ecs/store/query.d.ts +47 -0
- package/dist/ecs/store/query.js +2 -0
- package/dist/ecs/store/query.js.map +1 -0
- package/dist/ecs/store/select-options.d.ts +1 -0
- package/dist/ecs/store/select-options.js +16 -0
- package/dist/ecs/store/select-options.js.map +1 -0
- package/dist/ecs/store/select.d.ts +44 -0
- package/dist/ecs/store/select.js +2 -0
- package/dist/ecs/store/select.js.map +1 -0
- package/dist/ecs/store/store.d.ts +3 -2
- package/dist/equals-shallow.js +21 -0
- package/dist/equals-shallow.js.map +1 -1
- package/dist/equals-shallow.test.js +21 -0
- package/dist/equals-shallow.test.js.map +1 -1
- package/dist/functions/apply-args.js +21 -0
- package/dist/functions/apply-args.js.map +1 -1
- package/dist/functions/index.js +21 -0
- package/dist/functions/index.js.map +1 -1
- package/dist/internal/function/memoize-factory.js +21 -0
- package/dist/internal/function/memoize-factory.js.map +1 -1
- package/dist/is-data.js +21 -0
- package/dist/is-data.js.map +1 -1
- package/dist/lit/decorators/apply-decorator.js +21 -0
- package/dist/lit/decorators/apply-decorator.js.map +1 -1
- package/dist/lit/decorators/apply-service-decorators.js +21 -0
- package/dist/lit/decorators/apply-service-decorators.js.map +1 -1
- package/dist/lit/decorators/require-service.js +21 -0
- package/dist/lit/decorators/require-service.js.map +1 -1
- package/dist/lit/elements/index.js +21 -0
- package/dist/lit/elements/index.js.map +1 -1
- package/dist/lit/elements/service-application.js +21 -0
- package/dist/lit/elements/service-application.js.map +1 -1
- package/dist/lit/elements/service-context.js +21 -0
- package/dist/lit/elements/service-context.js.map +1 -1
- package/dist/lit/elements/service-element.js +21 -0
- package/dist/lit/elements/service-element.js.map +1 -1
- package/dist/lit/hooks/component/component.js +21 -0
- package/dist/lit/hooks/component/component.js.map +1 -1
- package/dist/lit/hooks/component/stack.js +21 -0
- package/dist/lit/hooks/component/stack.js.map +1 -1
- package/dist/lit/hooks/index.js +21 -0
- package/dist/lit/hooks/index.js.map +1 -1
- package/dist/lit/hooks/use-connected.js +21 -0
- package/dist/lit/hooks/use-connected.js.map +1 -1
- package/dist/lit/hooks/use-effect.js +21 -0
- package/dist/lit/hooks/use-effect.js.map +1 -1
- package/dist/lit/hooks/use-element.js +21 -0
- package/dist/lit/hooks/use-element.js.map +1 -1
- package/dist/lit/hooks/use-memo.js +21 -0
- package/dist/lit/hooks/use-memo.js.map +1 -1
- package/dist/lit/hooks/use-observable-values.js +21 -0
- package/dist/lit/hooks/use-observable-values.js.map +1 -1
- package/dist/lit/hooks/use-observable.js +21 -0
- package/dist/lit/hooks/use-observable.js.map +1 -1
- package/dist/lit/hooks/use-ref.js +21 -0
- package/dist/lit/hooks/use-ref.js.map +1 -1
- package/dist/lit/hooks/use-resize-observer.js +21 -0
- package/dist/lit/hooks/use-resize-observer.js.map +1 -1
- package/dist/lit/hooks/use-state.js +21 -0
- package/dist/lit/hooks/use-state.js.map +1 -1
- package/dist/lit/hooks/use-window-event.js +21 -0
- package/dist/lit/hooks/use-window-event.js.map +1 -1
- package/dist/lit/hooks/with-hooks.js +21 -0
- package/dist/lit/hooks/with-hooks.js.map +1 -1
- package/dist/lit/index.js +21 -0
- package/dist/lit/index.js.map +1 -1
- package/dist/observe/create-query-state.js +21 -0
- package/dist/observe/create-query-state.js.map +1 -1
- package/dist/schema/boolean.js +21 -0
- package/dist/schema/boolean.js.map +1 -1
- package/dist/schema/time.js +21 -0
- package/dist/schema/time.js.map +1 -1
- package/dist/schema/tuple.js +21 -0
- package/dist/schema/tuple.js.map +1 -1
- package/dist/service/is-service.js +21 -0
- package/dist/service/is-service.js.map +1 -1
- package/dist/table/copy-column-to-gpu-buffer.js +21 -0
- package/dist/table/copy-column-to-gpu-buffer.js.map +1 -1
- package/dist/table/ensure-capacity copy.d.ts +2 -0
- package/dist/table/ensure-capacity copy.js +15 -0
- package/dist/table/ensure-capacity copy.js.map +1 -0
- package/dist/table/filter-rows.d.ts +2 -0
- package/dist/table/filter-rows.js +15 -0
- package/dist/table/filter-rows.js.map +1 -0
- package/dist/table/select-rows.d.ts +28 -0
- package/dist/table/select-rows.js +51 -0
- package/dist/table/select-rows.js.map +1 -0
- package/dist/table/select-rows.test.d.ts +1 -0
- package/dist/table/select-rows.test.js +131 -0
- package/dist/table/select-rows.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/typed-buffer/copy-to-gpu-buffer.js +21 -0
- package/dist/typed-buffer/copy-to-gpu-buffer.js.map +1 -1
- package/package.json +1 -1
package/dist/lit/index.js
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
/*MIT License
|
|
2
|
+
|
|
3
|
+
© Copyright 2025 Adobe. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.*/
|
|
1
22
|
export * from "./hooks/index.js";
|
|
2
23
|
export * from "./elements/index.js";
|
|
3
24
|
export * from "./decorators/index.js";
|
package/dist/lit/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lit/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAEX,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC"}
|
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
/*MIT License
|
|
2
|
+
|
|
3
|
+
© Copyright 2025 Adobe. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.*/
|
|
1
22
|
import { createObservableState } from "./create-observable-state.js";
|
|
2
23
|
/**
|
|
3
24
|
* Creates an observable state that syncs with URL query parameters.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-query-state.js","sourceRoot":"","sources":["../../src/observe/create-query-state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-query-state.js","sourceRoot":"","sources":["../../src/observe/create-query-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAGX,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAKrE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC5B,GAAW,EACX,YAAe,EACf,UAII,EAAE,EACmB,EAAE;IAC3B,MAAM,EACF,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EACpC,WAAW,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAClC,YAAY,GAAG,KAAK,EACvB,GAAG,OAAO,CAAC;IAEZ,0CAA0C;IAC1C,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAEhE,8BAA8B;IAC9B,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,qBAAqB,CAAI,OAAO,CAAC,CAAC;IAE9D,4DAA4D;IAC5D,MAAM,aAAa,GAAgB,CAAC,QAAW,EAAE,EAAE;QAC/C,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEnB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,UAAU,KAAK,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC;QAED,iCAAiC;QACjC,IAAI,YAAY,EAAE,CAAC;YACf,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;IACL,CAAC,CAAC;IAEF,6CAA6C;IAC7C,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE;QACrC,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACpC,CAAC,CAAC"}
|
package/dist/schema/boolean.js
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
/*MIT License
|
|
2
|
+
|
|
3
|
+
© Copyright 2025 Adobe. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.*/
|
|
1
22
|
export const BooleanSchema = {
|
|
2
23
|
type: 'boolean',
|
|
3
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/schema/boolean.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/schema/boolean.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAIX,MAAM,CAAC,MAAM,aAAa,GAAG;IACzB,IAAI,EAAE,SAAS;CACQ,CAAC"}
|
package/dist/schema/time.js
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
/*MIT License
|
|
2
|
+
|
|
3
|
+
© Copyright 2025 Adobe. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.*/
|
|
1
22
|
import { F32Schema } from "./f32.js";
|
|
2
23
|
export const TimeSchema = F32Schema;
|
|
3
24
|
//# sourceMappingURL=time.js.map
|
package/dist/schema/time.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/schema/time.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/schema/time.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAEX,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC"}
|
package/dist/schema/tuple.js
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
/*MIT License
|
|
2
|
+
|
|
3
|
+
© Copyright 2025 Adobe. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.*/
|
|
1
22
|
export function Tuple(items, length) {
|
|
2
23
|
return { type: "array", items, minItems: length, maxItems: length };
|
|
3
24
|
}
|
package/dist/schema/tuple.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tuple.js","sourceRoot":"","sources":["../../src/schema/tuple.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tuple.js","sourceRoot":"","sources":["../../src/schema/tuple.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAIX,MAAM,UAAU,KAAK,CAAqC,KAAQ,EAAE,MAAS;IAC3E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAA4B,CAAC;AAChG,CAAC"}
|
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
/*MIT License
|
|
2
|
+
|
|
3
|
+
© Copyright 2025 Adobe. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.*/
|
|
1
22
|
export function isService(value) {
|
|
2
23
|
const maybeService = value;
|
|
3
24
|
return typeof maybeService?.serviceName === 'string';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-service.js","sourceRoot":"","sources":["../../src/service/is-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"is-service.js","sourceRoot":"","sources":["../../src/service/is-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAKX,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,MAAM,YAAY,GAAG,KAA4C,CAAC;IAClE,OAAO,OAAO,YAAY,EAAE,WAAW,KAAK,QAAQ,CAAC;AACvD,CAAC"}
|
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
/*MIT License
|
|
2
|
+
|
|
3
|
+
© Copyright 2025 Adobe. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.*/
|
|
1
22
|
/**
|
|
2
23
|
* Copies a column from an array of tables to a GPU buffer.
|
|
3
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy-column-to-gpu-buffer.js","sourceRoot":"","sources":["../../src/table/copy-column-to-gpu-buffer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"copy-column-to-gpu-buffer.js","sourceRoot":"","sources":["../../src/table/copy-column-to-gpu-buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAIX;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACjC,MAAoB,EACpB,UAAa,EACb,MAAiB,EACjB,SAAoB,EACX,EAAE;IACX,wBAAwB;IACxB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,eAAe,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,4BAA4B,CAAC;IAC3F,CAAC;IACD,wCAAwC;IACxC,IAAI,SAAS,CAAC,IAAI,GAAG,eAAe,EAAE,CAAC;QACnC,SAAS,CAAC,OAAO,EAAE,CAAC;QACpB,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,mEAAmE;IACnE,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,4BAA4B,CAAC;QACzE,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QAC9E,MAAM,IAAI,eAAe,CAAC;IAC9B,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const ensureCapacity = (table, minimumCapacity, growthFactor = 2) => {
|
|
2
|
+
// we don't actually loop, we just need to check the first columns length.
|
|
3
|
+
for (const name in table.columns) {
|
|
4
|
+
const currentCapacity = table.columns[name].size;
|
|
5
|
+
if (currentCapacity < minimumCapacity) {
|
|
6
|
+
const newCapacity = Math.max(minimumCapacity, currentCapacity * growthFactor);
|
|
7
|
+
for (const name in table.columns) {
|
|
8
|
+
const column = table.columns[name];
|
|
9
|
+
column.size = newCapacity;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=ensure-capacity%20copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-capacity copy.js","sourceRoot":"","sources":["../../src/table/ensure-capacity copy.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAI,KAAe,EAAE,eAAuB,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE;IAC5F,0EAA0E;IAC1E,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QACjD,IAAI,eAAe,GAAG,eAAe,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,eAAe,GAAG,YAAY,CAAC,CAAC;YAC9E,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnC,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC;YAC9B,CAAC;QACL,CAAC;QACD,OAAO;IACX,CAAC;AACL,CAAC,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const filterRows = (table, minimumCapacity, growthFactor = 2) => {
|
|
2
|
+
// we don't actually loop, we just need to check the first columns length.
|
|
3
|
+
for (const name in table.columns) {
|
|
4
|
+
const currentCapacity = table.columns[name].size;
|
|
5
|
+
if (currentCapacity < minimumCapacity) {
|
|
6
|
+
const newCapacity = Math.max(minimumCapacity, currentCapacity * growthFactor);
|
|
7
|
+
for (const name in table.columns) {
|
|
8
|
+
const column = table.columns[name];
|
|
9
|
+
column.size = newCapacity;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=filter-rows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-rows.js","sourceRoot":"","sources":["../../src/table/filter-rows.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,KAAe,EAAE,eAAuB,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE;IACxF,0EAA0E;IAC1E,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QACjD,IAAI,eAAe,GAAG,eAAe,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,eAAe,GAAG,YAAY,CAAC,CAAC;YAC9E,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnC,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC;YAC9B,CAAC;QACL,CAAC;QACD,OAAO;IACX,CAAC;AACL,CAAC,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Table } from "./table.js";
|
|
2
|
+
/**
|
|
3
|
+
* Comparison operators for declarative where clauses
|
|
4
|
+
*/
|
|
5
|
+
type ComparisonOperator = "==" | "!=" | "<" | ">" | ">=" | "<=";
|
|
6
|
+
/**
|
|
7
|
+
* Represents a comparison operation in a declarative where clause
|
|
8
|
+
*/
|
|
9
|
+
type ComparisonOperation<T> = {
|
|
10
|
+
[P in ComparisonOperator]?: T;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Represents a condition that can be either a direct value, comparison operation, or nested conditions
|
|
14
|
+
*/
|
|
15
|
+
type WhereCondition<T> = ComparisonOperation<T> | T;
|
|
16
|
+
/**
|
|
17
|
+
* Declarative where clause structure that allows for JSON-based filtering
|
|
18
|
+
* Each key in the object represents a component field to filter on
|
|
19
|
+
* The value can either be a direct value (equality check), a comparison operation, or nested conditions
|
|
20
|
+
*/
|
|
21
|
+
export type Filter<T extends object> = {
|
|
22
|
+
[K in keyof T]?: WhereCondition<T[K]>;
|
|
23
|
+
};
|
|
24
|
+
export declare const selectRows: <C extends object>(table: Table<C>, where?: Filter<C>) => Generator<number>;
|
|
25
|
+
type RowPredicate<C extends object> = (table: Table<C>, row: number) => boolean;
|
|
26
|
+
export declare const getCachedRowPredicateFromFilter: <C extends object>(where: Filter<C>) => RowPredicate<C>;
|
|
27
|
+
export declare const createRowPredicateFromFilterInternal: <C extends object>(where: Filter<C>) => RowPredicate<C>;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
const negatedOperators = {
|
|
2
|
+
"==": "!=",
|
|
3
|
+
"!=": "==",
|
|
4
|
+
"<": ">=",
|
|
5
|
+
">": "<=",
|
|
6
|
+
">=": "<",
|
|
7
|
+
"<=": ">",
|
|
8
|
+
};
|
|
9
|
+
const whereConditionToComparisonOperations = (condition) => {
|
|
10
|
+
if (typeof condition === "object") {
|
|
11
|
+
return condition;
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
"==": condition,
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export const selectRows = function* (table, where) {
|
|
18
|
+
if (!where) {
|
|
19
|
+
for (let row = 0; row < table.rows; row++) {
|
|
20
|
+
yield row;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
const predicate = getCachedRowPredicateFromFilter(where);
|
|
25
|
+
for (let row = 0; row < table.rows; row++) {
|
|
26
|
+
if (predicate(table, row)) {
|
|
27
|
+
yield row;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const cacheByFilter = new WeakMap();
|
|
33
|
+
export const getCachedRowPredicateFromFilter = (where) => {
|
|
34
|
+
let predicate = cacheByFilter.get(where);
|
|
35
|
+
if (!predicate) {
|
|
36
|
+
predicate = createRowPredicateFromFilterInternal(where);
|
|
37
|
+
cacheByFilter.set(where, predicate);
|
|
38
|
+
}
|
|
39
|
+
return predicate;
|
|
40
|
+
};
|
|
41
|
+
export const createRowPredicateFromFilterInternal = (where) => {
|
|
42
|
+
let body = ` const { columns } = table;\n`;
|
|
43
|
+
for (const [key, whereCondition] of Object.entries(where)) {
|
|
44
|
+
body += ` const ${key} = columns.${key}.get(row);\n`;
|
|
45
|
+
const comparisonOperations = whereConditionToComparisonOperations(whereCondition);
|
|
46
|
+
body += ` if (${Object.entries(comparisonOperations).map(([operator, value]) => `${key} ${negatedOperators[operator]} ${JSON.stringify(value)}`).join(" || ")}) { return false; }\n`;
|
|
47
|
+
}
|
|
48
|
+
body += ` return true;`;
|
|
49
|
+
return new Function("table", "row", body);
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=select-rows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-rows.js","sourceRoot":"","sources":["../../src/table/select-rows.ts"],"names":[],"mappings":"AA4BA,MAAM,gBAAgB,GAAG;IACrB,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;CACH,CAAC;AAcX,MAAM,oCAAoC,GAAG,CAAI,SAA4B,EAA0B,EAAE;IACrG,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,SAAmC,CAAC;IAC/C,CAAC;IACD,OAAO;QACH,IAAI,EAAE,SAAS;KACQ,CAAC;AAChC,CAAC,CAAA;AAWD,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAoB,KAAe,EAAE,KAAiB;IACrF,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;YACxC,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;SACI,CAAC;QACF,MAAM,SAAS,GAAG,+BAA+B,CAAC,KAAK,CAAC,CAAC;QACzD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;YACxC,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,GAAG,CAAC;YACd,CAAC;QACL,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAIF,MAAM,aAAa,GAAG,IAAI,OAAO,EAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAmB,KAAgB,EAAmB,EAAE;IACnG,IAAI,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,SAAS,GAAG,oCAAoC,CAAC,KAAK,CAAC,CAAC;QACxD,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAmB,KAAgB,EAAmB,EAAE;IACxG,IAAI,IAAI,GACJ,kCAAkC,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,IAAI,IAAI,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;QACxD,MAAM,oBAAoB,GAAG,oCAAoC,CAAC,cAAc,CAAC,CAAC;QAClF,IAAI,IAAI,WAAW,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,gBAAgB,CAAC,QAA8B,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC;IAClN,CAAC;IACD,IAAI,IAAI,kBAAkB,CAAC;IAC3B,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAoB,CAAC;AACjE,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/*MIT License
|
|
2
|
+
|
|
3
|
+
© Copyright 2025 Adobe. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.*/
|
|
22
|
+
import { describe, expect, it } from "vitest";
|
|
23
|
+
import { createRowPredicateFromFilterInternal, selectRows, getCachedRowPredicateFromFilter } from "./select-rows.js";
|
|
24
|
+
import { createTable } from "./create-table.js";
|
|
25
|
+
import { addRow } from "./add-row.js";
|
|
26
|
+
describe("selectRows", () => {
|
|
27
|
+
const table = createTable({
|
|
28
|
+
id: { type: "integer" },
|
|
29
|
+
name: { type: "string" },
|
|
30
|
+
age: { type: "integer" },
|
|
31
|
+
score: { type: "number" },
|
|
32
|
+
category: { type: "string" },
|
|
33
|
+
price: { type: "number" },
|
|
34
|
+
inStock: { type: "boolean" },
|
|
35
|
+
isActive: { type: "boolean" },
|
|
36
|
+
value: { type: "number" }
|
|
37
|
+
});
|
|
38
|
+
// Add comprehensive test data
|
|
39
|
+
addRow(table, { id: 1, name: "Alice", age: 25, score: 85.5, category: "electronics", price: 100, inStock: true, isActive: true, value: 10 });
|
|
40
|
+
addRow(table, { id: 2, name: "Bob", age: 30, score: 92.0, category: "electronics", price: 200, inStock: false, isActive: true, value: 20 });
|
|
41
|
+
addRow(table, { id: 3, name: "Alice", age: 35, score: 78.3, category: "books", price: 50, inStock: true, isActive: false, value: 30 });
|
|
42
|
+
addRow(table, { id: 4, name: "Charlie", age: 22, score: 95.7, category: "electronics", price: 150, inStock: true, isActive: true, value: 40 });
|
|
43
|
+
addRow(table, { id: 5, name: "David", age: 28, score: 88.2, category: "books", price: 75, inStock: false, isActive: false, value: 50 });
|
|
44
|
+
it("should create columns for each schema", () => {
|
|
45
|
+
const predicate = createRowPredicateFromFilterInternal({
|
|
46
|
+
a: 1,
|
|
47
|
+
b: {
|
|
48
|
+
">": 5,
|
|
49
|
+
"<": 10,
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
expect(predicate.toString()).toBe(`function anonymous(table,row
|
|
53
|
+
) {
|
|
54
|
+
const { columns } = table;
|
|
55
|
+
const a = columns.a.get(row);
|
|
56
|
+
if (a != 1) { return false; }
|
|
57
|
+
const b = columns.b.get(row);
|
|
58
|
+
if (b <= 5 || b >= 10) { return false; }
|
|
59
|
+
return true;
|
|
60
|
+
}`);
|
|
61
|
+
});
|
|
62
|
+
it("should filter by equality conditions", () => {
|
|
63
|
+
expect(Array.from(selectRows(table, { name: "Alice" }))).toEqual([0, 2]);
|
|
64
|
+
expect(Array.from(selectRows(table, { category: "electronics" }))).toEqual([0, 1, 3]);
|
|
65
|
+
expect(Array.from(selectRows(table, { inStock: true }))).toEqual([0, 2, 3]);
|
|
66
|
+
});
|
|
67
|
+
it("should filter by numeric comparisons", () => {
|
|
68
|
+
expect(Array.from(selectRows(table, { age: { ">": 25 } }))).toEqual([1, 2, 4]);
|
|
69
|
+
expect(Array.from(selectRows(table, { score: { ">=": 85, "<": 95 } }))).toEqual([0, 1, 4]);
|
|
70
|
+
expect(Array.from(selectRows(table, { value: { ">": 20, "<": 50 } }))).toEqual([2, 3]);
|
|
71
|
+
});
|
|
72
|
+
it("should handle all comparison operators", () => {
|
|
73
|
+
expect(Array.from(selectRows(table, { value: { "==": 30 } }))).toEqual([2]);
|
|
74
|
+
expect(Array.from(selectRows(table, { value: { "!=": 30 } }))).toEqual([0, 1, 3, 4]);
|
|
75
|
+
expect(Array.from(selectRows(table, { value: { "<": 30 } }))).toEqual([0, 1]);
|
|
76
|
+
expect(Array.from(selectRows(table, { value: { ">": 30 } }))).toEqual([3, 4]);
|
|
77
|
+
expect(Array.from(selectRows(table, { value: { "<=": 30 } }))).toEqual([0, 1, 2]);
|
|
78
|
+
expect(Array.from(selectRows(table, { value: { ">=": 30 } }))).toEqual([2, 3, 4]);
|
|
79
|
+
});
|
|
80
|
+
it("should handle combined conditions across multiple columns", () => {
|
|
81
|
+
expect(Array.from(selectRows(table, {
|
|
82
|
+
category: "electronics",
|
|
83
|
+
price: { ">=": 100, "<=": 200 },
|
|
84
|
+
inStock: true
|
|
85
|
+
}))).toEqual([0, 3]);
|
|
86
|
+
});
|
|
87
|
+
it("should handle boolean combinations", () => {
|
|
88
|
+
expect(Array.from(selectRows(table, {
|
|
89
|
+
isActive: true,
|
|
90
|
+
inStock: false
|
|
91
|
+
}))).toEqual([1]);
|
|
92
|
+
});
|
|
93
|
+
it("should handle string inequality", () => {
|
|
94
|
+
expect(Array.from(selectRows(table, { name: { "!=": "Alice" } }))).toEqual([1, 3, 4]);
|
|
95
|
+
});
|
|
96
|
+
it("should handle empty results", () => {
|
|
97
|
+
expect(Array.from(selectRows(table, { name: "Eve" }))).toEqual([]);
|
|
98
|
+
expect(Array.from(selectRows(table, { age: { ">": 100 } }))).toEqual([]);
|
|
99
|
+
expect(Array.from(selectRows(table, {
|
|
100
|
+
category: "electronics",
|
|
101
|
+
inStock: false,
|
|
102
|
+
isActive: false
|
|
103
|
+
}))).toEqual([]);
|
|
104
|
+
});
|
|
105
|
+
it("should handle boundary conditions", () => {
|
|
106
|
+
expect(Array.from(selectRows(table, { value: { ">=": 10, "<=": 50 } }))).toEqual([0, 1, 2, 3, 4]);
|
|
107
|
+
expect(Array.from(selectRows(table, { value: { ">": 10, "<": 50 } }))).toEqual([1, 2, 3]);
|
|
108
|
+
});
|
|
109
|
+
it("should handle where with no where", () => {
|
|
110
|
+
expect(Array.from(selectRows(table, {}))).toEqual([0, 1, 2, 3, 4]);
|
|
111
|
+
});
|
|
112
|
+
it("should cache predicates for identical filter objects", () => {
|
|
113
|
+
const filter1 = { name: "Alice", age: { ">": 25 } };
|
|
114
|
+
const filter2 = { name: "Alice", age: { ">": 25 } };
|
|
115
|
+
// These should be different objects but identical structure
|
|
116
|
+
expect(filter1).not.toBe(filter2);
|
|
117
|
+
const predicate1 = getCachedRowPredicateFromFilter(filter1);
|
|
118
|
+
const predicate2 = getCachedRowPredicateFromFilter(filter2);
|
|
119
|
+
// First calls should create new predicates
|
|
120
|
+
expect(predicate1).not.toBe(predicate2);
|
|
121
|
+
// Second calls with same objects should return cached predicates
|
|
122
|
+
const predicate1Cached = getCachedRowPredicateFromFilter(filter1);
|
|
123
|
+
const predicate2Cached = getCachedRowPredicateFromFilter(filter2);
|
|
124
|
+
expect(predicate1Cached).toBe(predicate1);
|
|
125
|
+
expect(predicate2Cached).toBe(predicate2);
|
|
126
|
+
// Verify the cached predicates work correctly
|
|
127
|
+
expect(Array.from(selectRows(table, filter1))).toEqual([2]);
|
|
128
|
+
expect(Array.from(selectRows(table, filter2))).toEqual([2]);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
//# sourceMappingURL=select-rows.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-rows.test.js","sourceRoot":"","sources":["../../src/table/select-rows.test.ts"],"names":[],"mappings":"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"}
|