@procedures/client 0.0.0-stage → 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/CHANGELOG.md +16 -0
- package/LICENSE +21 -0
- package/README.md +832 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/adapters/http/client/index.d.ts +11 -0
- package/dist/adapters/http/client/index.d.ts.map +1 -0
- package/dist/adapters/http/client/index.js +18 -0
- package/dist/adapters/http/client/index.js.map +1 -0
- package/dist/adapters/http/client/transport.d.ts +72 -0
- package/dist/adapters/http/client/transport.d.ts.map +1 -0
- package/dist/adapters/http/client/transport.js +282 -0
- package/dist/adapters/http/client/transport.js.map +1 -0
- package/dist/adapters/http/client/types.d.ts +27 -0
- package/dist/adapters/http/client/types.d.ts.map +1 -0
- package/dist/adapters/http/client/types.js +8 -0
- package/dist/adapters/http/client/types.js.map +1 -0
- package/dist/adapters/http/index.d.ts +7 -0
- package/dist/adapters/http/index.d.ts.map +1 -0
- package/dist/adapters/http/index.js +7 -0
- package/dist/adapters/http/index.js.map +1 -0
- package/dist/adapters/http/server/index.d.ts +9 -0
- package/dist/adapters/http/server/index.d.ts.map +1 -0
- package/dist/adapters/http/server/index.js +10 -0
- package/dist/adapters/http/server/index.js.map +1 -0
- package/dist/adapters/http/server/strategies.d.ts +39 -0
- package/dist/adapters/http/server/strategies.d.ts.map +1 -0
- package/dist/adapters/http/server/strategies.js +90 -0
- package/dist/adapters/http/server/strategies.js.map +1 -0
- package/dist/adapters/http/server/transport.d.ts +66 -0
- package/dist/adapters/http/server/transport.d.ts.map +1 -0
- package/dist/adapters/http/server/transport.js +561 -0
- package/dist/adapters/http/server/transport.js.map +1 -0
- package/dist/adapters/http/server/types.d.ts +71 -0
- package/dist/adapters/http/server/types.d.ts.map +1 -0
- package/dist/adapters/http/server/types.js +7 -0
- package/dist/adapters/http/server/types.js.map +1 -0
- package/dist/adapters/http/shared/constants.d.ts +95 -0
- package/dist/adapters/http/shared/constants.d.ts.map +1 -0
- package/dist/adapters/http/shared/constants.js +102 -0
- package/dist/adapters/http/shared/constants.js.map +1 -0
- package/dist/adapters/http/shared/errors.d.ts +78 -0
- package/dist/adapters/http/shared/errors.d.ts.map +1 -0
- package/dist/adapters/http/shared/errors.js +151 -0
- package/dist/adapters/http/shared/errors.js.map +1 -0
- package/dist/adapters/http/shared/headers.d.ts +122 -0
- package/dist/adapters/http/shared/headers.d.ts.map +1 -0
- package/dist/adapters/http/shared/headers.js +216 -0
- package/dist/adapters/http/shared/headers.js.map +1 -0
- package/dist/adapters/http/shared/index.d.ts +12 -0
- package/dist/adapters/http/shared/index.d.ts.map +1 -0
- package/dist/adapters/http/shared/index.js +17 -0
- package/dist/adapters/http/shared/index.js.map +1 -0
- package/dist/adapters/http/shared/status-codes.d.ts +92 -0
- package/dist/adapters/http/shared/status-codes.d.ts.map +1 -0
- package/dist/adapters/http/shared/status-codes.js +189 -0
- package/dist/adapters/http/shared/status-codes.js.map +1 -0
- package/dist/adapters/http/shared/strategies.d.ts +90 -0
- package/dist/adapters/http/shared/strategies.d.ts.map +1 -0
- package/dist/adapters/http/shared/strategies.js +180 -0
- package/dist/adapters/http/shared/strategies.js.map +1 -0
- package/dist/adapters/local/client/index.d.ts +8 -0
- package/dist/adapters/local/client/index.d.ts.map +1 -0
- package/dist/adapters/local/client/index.js +8 -0
- package/dist/adapters/local/client/index.js.map +1 -0
- package/dist/adapters/local/client/transport.d.ts +81 -0
- package/dist/adapters/local/client/transport.d.ts.map +1 -0
- package/dist/adapters/local/client/transport.js +172 -0
- package/dist/adapters/local/client/transport.js.map +1 -0
- package/dist/adapters/local/client/types.d.ts +39 -0
- package/dist/adapters/local/client/types.d.ts.map +1 -0
- package/dist/adapters/local/client/types.js +13 -0
- package/dist/adapters/local/client/types.js.map +1 -0
- package/dist/adapters/metadata.d.ts +10 -0
- package/dist/adapters/metadata.d.ts.map +1 -0
- package/dist/adapters/metadata.js +19 -0
- package/dist/adapters/metadata.js.map +1 -0
- package/dist/adapters/mock/client/builder.d.ts +35 -0
- package/dist/adapters/mock/client/builder.d.ts.map +1 -0
- package/dist/adapters/mock/client/builder.js +58 -0
- package/dist/adapters/mock/client/builder.js.map +1 -0
- package/dist/adapters/mock/client/index.d.ts +9 -0
- package/dist/adapters/mock/client/index.d.ts.map +1 -0
- package/dist/adapters/mock/client/index.js +10 -0
- package/dist/adapters/mock/client/index.js.map +1 -0
- package/dist/adapters/mock/client/transport.d.ts +149 -0
- package/dist/adapters/mock/client/transport.d.ts.map +1 -0
- package/dist/adapters/mock/client/transport.js +289 -0
- package/dist/adapters/mock/client/transport.js.map +1 -0
- package/dist/adapters/mock/client/types.d.ts +86 -0
- package/dist/adapters/mock/client/types.d.ts.map +1 -0
- package/dist/adapters/mock/client/types.js +7 -0
- package/dist/adapters/mock/client/types.js.map +1 -0
- package/dist/adapters/websocket/client/index.d.ts +9 -0
- package/dist/adapters/websocket/client/index.d.ts.map +1 -0
- package/dist/adapters/websocket/client/index.js +9 -0
- package/dist/adapters/websocket/client/index.js.map +1 -0
- package/dist/adapters/websocket/client/transport.d.ts +106 -0
- package/dist/adapters/websocket/client/transport.d.ts.map +1 -0
- package/dist/adapters/websocket/client/transport.js +647 -0
- package/dist/adapters/websocket/client/transport.js.map +1 -0
- package/dist/adapters/websocket/client/types.d.ts +192 -0
- package/dist/adapters/websocket/client/types.d.ts.map +1 -0
- package/dist/adapters/websocket/client/types.js +17 -0
- package/dist/adapters/websocket/client/types.js.map +1 -0
- package/dist/adapters/websocket/index.d.ts +8 -0
- package/dist/adapters/websocket/index.d.ts.map +1 -0
- package/dist/adapters/websocket/index.js +8 -0
- package/dist/adapters/websocket/index.js.map +1 -0
- package/dist/adapters/websocket/server/index.d.ts +8 -0
- package/dist/adapters/websocket/server/index.d.ts.map +1 -0
- package/dist/adapters/websocket/server/index.js +8 -0
- package/dist/adapters/websocket/server/index.js.map +1 -0
- package/dist/adapters/websocket/server/transport.d.ts +112 -0
- package/dist/adapters/websocket/server/transport.d.ts.map +1 -0
- package/dist/adapters/websocket/server/transport.js +619 -0
- package/dist/adapters/websocket/server/transport.js.map +1 -0
- package/dist/adapters/websocket/server/types.d.ts +140 -0
- package/dist/adapters/websocket/server/types.d.ts.map +1 -0
- package/dist/adapters/websocket/server/types.js +7 -0
- package/dist/adapters/websocket/server/types.js.map +1 -0
- package/dist/browser.d.ts +48 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +86 -0
- package/dist/browser.js.map +1 -0
- package/dist/client/batch-executor.d.ts +160 -0
- package/dist/client/batch-executor.d.ts.map +1 -0
- package/dist/client/batch-executor.js +397 -0
- package/dist/client/batch-executor.js.map +1 -0
- package/dist/client/call-types.d.ts +271 -0
- package/dist/client/call-types.d.ts.map +1 -0
- package/dist/client/call-types.js +208 -0
- package/dist/client/call-types.js.map +1 -0
- package/dist/client/client.d.ts +517 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +990 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/consumption.d.ts +191 -0
- package/dist/client/consumption.d.ts.map +1 -0
- package/dist/client/consumption.js +98 -0
- package/dist/client/consumption.js.map +1 -0
- package/dist/client/context.d.ts +116 -0
- package/dist/client/context.d.ts.map +1 -0
- package/dist/client/context.js +111 -0
- package/dist/client/context.js.map +1 -0
- package/dist/client/errors/codes.d.ts +71 -0
- package/dist/client/errors/codes.d.ts.map +1 -0
- package/dist/client/errors/codes.js +81 -0
- package/dist/client/errors/codes.js.map +1 -0
- package/dist/client/errors/factory.d.ts +102 -0
- package/dist/client/errors/factory.d.ts.map +1 -0
- package/dist/client/errors/factory.js +210 -0
- package/dist/client/errors/factory.js.map +1 -0
- package/dist/client/errors/http-errors.d.ts +47 -0
- package/dist/client/errors/http-errors.d.ts.map +1 -0
- package/dist/client/errors/http-errors.js +548 -0
- package/dist/client/errors/http-errors.js.map +1 -0
- package/dist/client/errors/http-status.d.ts +73 -0
- package/dist/client/errors/http-status.d.ts.map +1 -0
- package/dist/client/errors/http-status.js +79 -0
- package/dist/client/errors/http-status.js.map +1 -0
- package/dist/client/errors/index.d.ts +36 -0
- package/dist/client/errors/index.d.ts.map +1 -0
- package/dist/client/errors/index.js +40 -0
- package/dist/client/errors/index.js.map +1 -0
- package/dist/client/errors/registry.d.ts +38 -0
- package/dist/client/errors/registry.d.ts.map +1 -0
- package/dist/client/errors/registry.js +535 -0
- package/dist/client/errors/registry.js.map +1 -0
- package/dist/client/errors/types.d.ts +112 -0
- package/dist/client/errors/types.d.ts.map +1 -0
- package/dist/client/errors/types.js +45 -0
- package/dist/client/errors/types.js.map +1 -0
- package/dist/client/index.d.ts +44 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +36 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/middleware/auth.d.ts +90 -0
- package/dist/client/middleware/auth.d.ts.map +1 -0
- package/dist/client/middleware/auth.js +98 -0
- package/dist/client/middleware/auth.js.map +1 -0
- package/dist/client/middleware/batching.d.ts +102 -0
- package/dist/client/middleware/batching.d.ts.map +1 -0
- package/dist/client/middleware/batching.js +245 -0
- package/dist/client/middleware/batching.js.map +1 -0
- package/dist/client/middleware/cache.d.ts +124 -0
- package/dist/client/middleware/cache.d.ts.map +1 -0
- package/dist/client/middleware/cache.js +208 -0
- package/dist/client/middleware/cache.js.map +1 -0
- package/dist/client/middleware/circuit-breaker.d.ts +113 -0
- package/dist/client/middleware/circuit-breaker.d.ts.map +1 -0
- package/dist/client/middleware/circuit-breaker.js +236 -0
- package/dist/client/middleware/circuit-breaker.js.map +1 -0
- package/dist/client/middleware/contexts.d.ts +199 -0
- package/dist/client/middleware/contexts.d.ts.map +1 -0
- package/dist/client/middleware/contexts.js +74 -0
- package/dist/client/middleware/contexts.js.map +1 -0
- package/dist/client/middleware/items.d.ts +37 -0
- package/dist/client/middleware/items.d.ts.map +1 -0
- package/dist/client/middleware/items.js +100 -0
- package/dist/client/middleware/items.js.map +1 -0
- package/dist/client/middleware/lru.d.ts +32 -0
- package/dist/client/middleware/lru.d.ts.map +1 -0
- package/dist/client/middleware/lru.js +62 -0
- package/dist/client/middleware/lru.js.map +1 -0
- package/dist/client/middleware/pagination.d.ts +114 -0
- package/dist/client/middleware/pagination.d.ts.map +1 -0
- package/dist/client/middleware/pagination.js +148 -0
- package/dist/client/middleware/pagination.js.map +1 -0
- package/dist/client/middleware/rate-limit.d.ts +105 -0
- package/dist/client/middleware/rate-limit.d.ts.map +1 -0
- package/dist/client/middleware/rate-limit.js +222 -0
- package/dist/client/middleware/rate-limit.js.map +1 -0
- package/dist/client/middleware/retry.d.ts +100 -0
- package/dist/client/middleware/retry.d.ts.map +1 -0
- package/dist/client/middleware/retry.js +150 -0
- package/dist/client/middleware/retry.js.map +1 -0
- package/dist/client/middleware/timeout.d.ts +91 -0
- package/dist/client/middleware/timeout.d.ts.map +1 -0
- package/dist/client/middleware/timeout.js +253 -0
- package/dist/client/middleware/timeout.js.map +1 -0
- package/dist/client/middleware/tracing.d.ts +118 -0
- package/dist/client/middleware/tracing.d.ts.map +1 -0
- package/dist/client/middleware/tracing.js +152 -0
- package/dist/client/middleware/tracing.js.map +1 -0
- package/dist/client/route-resolver.d.ts +181 -0
- package/dist/client/route-resolver.d.ts.map +1 -0
- package/dist/client/route-resolver.js +300 -0
- package/dist/client/route-resolver.js.map +1 -0
- package/dist/client/typed-method.d.ts +29 -0
- package/dist/client/typed-method.d.ts.map +1 -0
- package/dist/client/typed-method.js +36 -0
- package/dist/client/typed-method.js.map +1 -0
- package/dist/client/typed.d.ts +102 -0
- package/dist/client/typed.d.ts.map +1 -0
- package/dist/client/typed.js +52 -0
- package/dist/client/typed.js.map +1 -0
- package/dist/client/types.d.ts +296 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +26 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/validation/index.d.ts +34 -0
- package/dist/client/validation/index.d.ts.map +1 -0
- package/dist/client/validation/index.js +36 -0
- package/dist/client/validation/index.js.map +1 -0
- package/dist/client/validation/middleware.d.ts +82 -0
- package/dist/client/validation/middleware.d.ts.map +1 -0
- package/dist/client/validation/middleware.js +138 -0
- package/dist/client/validation/middleware.js.map +1 -0
- package/dist/client/validation/types.d.ts +118 -0
- package/dist/client/validation/types.d.ts.map +1 -0
- package/dist/client/validation/types.js +59 -0
- package/dist/client/validation/types.js.map +1 -0
- package/dist/collections/async/async-queue.d.ts +144 -0
- package/dist/collections/async/async-queue.d.ts.map +1 -0
- package/dist/collections/async/async-queue.js +347 -0
- package/dist/collections/async/async-queue.js.map +1 -0
- package/dist/collections/async/channels.d.ts +188 -0
- package/dist/collections/async/channels.d.ts.map +1 -0
- package/dist/collections/async/channels.js +312 -0
- package/dist/collections/async/channels.js.map +1 -0
- package/dist/collections/behaviors/bounded.d.ts +79 -0
- package/dist/collections/behaviors/bounded.d.ts.map +1 -0
- package/dist/collections/behaviors/bounded.js +384 -0
- package/dist/collections/behaviors/bounded.js.map +1 -0
- package/dist/collections/behaviors/evented.d.ts +154 -0
- package/dist/collections/behaviors/evented.d.ts.map +1 -0
- package/dist/collections/behaviors/evented.js +299 -0
- package/dist/collections/behaviors/evented.js.map +1 -0
- package/dist/collections/behaviors/lru.d.ts +84 -0
- package/dist/collections/behaviors/lru.d.ts.map +1 -0
- package/dist/collections/behaviors/lru.js +330 -0
- package/dist/collections/behaviors/lru.js.map +1 -0
- package/dist/collections/behaviors/readonly.d.ts +73 -0
- package/dist/collections/behaviors/readonly.d.ts.map +1 -0
- package/dist/collections/behaviors/readonly.js +158 -0
- package/dist/collections/behaviors/readonly.js.map +1 -0
- package/dist/collections/behaviors/safe.d.ts +163 -0
- package/dist/collections/behaviors/safe.d.ts.map +1 -0
- package/dist/collections/behaviors/safe.js +172 -0
- package/dist/collections/behaviors/safe.js.map +1 -0
- package/dist/collections/behaviors/synchronized.d.ts +88 -0
- package/dist/collections/behaviors/synchronized.d.ts.map +1 -0
- package/dist/collections/behaviors/synchronized.js +294 -0
- package/dist/collections/behaviors/synchronized.js.map +1 -0
- package/dist/collections/behaviors/ttl.d.ts +118 -0
- package/dist/collections/behaviors/ttl.d.ts.map +1 -0
- package/dist/collections/behaviors/ttl.js +338 -0
- package/dist/collections/behaviors/ttl.js.map +1 -0
- package/dist/collections/core/effects.d.ts +176 -0
- package/dist/collections/core/effects.d.ts.map +1 -0
- package/dist/collections/core/effects.js +180 -0
- package/dist/collections/core/effects.js.map +1 -0
- package/dist/collections/core/events.d.ts +192 -0
- package/dist/collections/core/events.d.ts.map +1 -0
- package/dist/collections/core/events.js +291 -0
- package/dist/collections/core/events.js.map +1 -0
- package/dist/collections/core/middleware.d.ts +231 -0
- package/dist/collections/core/middleware.d.ts.map +1 -0
- package/dist/collections/core/middleware.js +161 -0
- package/dist/collections/core/middleware.js.map +1 -0
- package/dist/collections/core/policies.d.ts +220 -0
- package/dist/collections/core/policies.d.ts.map +1 -0
- package/dist/collections/core/policies.js +48 -0
- package/dist/collections/core/policies.js.map +1 -0
- package/dist/collections/core/traits.d.ts +142 -0
- package/dist/collections/core/traits.d.ts.map +1 -0
- package/dist/collections/core/traits.js +8 -0
- package/dist/collections/core/traits.js.map +1 -0
- package/dist/collections/examples.d.ts +13 -0
- package/dist/collections/examples.d.ts.map +1 -0
- package/dist/collections/examples.js +302 -0
- package/dist/collections/examples.js.map +1 -0
- package/dist/collections/fx/collectors.d.ts +190 -0
- package/dist/collections/fx/collectors.d.ts.map +1 -0
- package/dist/collections/fx/collectors.js +369 -0
- package/dist/collections/fx/collectors.js.map +1 -0
- package/dist/collections/fx/iter.d.ts +166 -0
- package/dist/collections/fx/iter.d.ts.map +1 -0
- package/dist/collections/fx/iter.js +421 -0
- package/dist/collections/fx/iter.js.map +1 -0
- package/dist/collections/impl/array-deque.d.ts +107 -0
- package/dist/collections/impl/array-deque.d.ts.map +1 -0
- package/dist/collections/impl/array-deque.js +381 -0
- package/dist/collections/impl/array-deque.js.map +1 -0
- package/dist/collections/impl/array-list.d.ts +101 -0
- package/dist/collections/impl/array-list.d.ts.map +1 -0
- package/dist/collections/impl/array-list.js +387 -0
- package/dist/collections/impl/array-list.js.map +1 -0
- package/dist/collections/impl/hash-map.d.ts +141 -0
- package/dist/collections/impl/hash-map.d.ts.map +1 -0
- package/dist/collections/impl/hash-map.js +450 -0
- package/dist/collections/impl/hash-map.js.map +1 -0
- package/dist/collections/impl/hash-set.d.ts +125 -0
- package/dist/collections/impl/hash-set.d.ts.map +1 -0
- package/dist/collections/impl/hash-set.js +264 -0
- package/dist/collections/impl/hash-set.js.map +1 -0
- package/dist/collections/impl/linked-hash-map.d.ts +141 -0
- package/dist/collections/impl/linked-hash-map.d.ts.map +1 -0
- package/dist/collections/impl/linked-hash-map.js +472 -0
- package/dist/collections/impl/linked-hash-map.js.map +1 -0
- package/dist/collections/impl/linked-list.d.ts +109 -0
- package/dist/collections/impl/linked-list.d.ts.map +1 -0
- package/dist/collections/impl/linked-list.js +491 -0
- package/dist/collections/impl/linked-list.js.map +1 -0
- package/dist/collections/impl/priority-queue.d.ts +134 -0
- package/dist/collections/impl/priority-queue.d.ts.map +1 -0
- package/dist/collections/impl/priority-queue.js +336 -0
- package/dist/collections/impl/priority-queue.js.map +1 -0
- package/dist/collections/impl/tree-map.d.ts +146 -0
- package/dist/collections/impl/tree-map.d.ts.map +1 -0
- package/dist/collections/impl/tree-map.js +781 -0
- package/dist/collections/impl/tree-map.js.map +1 -0
- package/dist/collections/impl/tree-set.d.ts +112 -0
- package/dist/collections/impl/tree-set.d.ts.map +1 -0
- package/dist/collections/impl/tree-set.js +374 -0
- package/dist/collections/impl/tree-set.js.map +1 -0
- package/dist/collections/index.d.ts +105 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/collections/index.js +135 -0
- package/dist/collections/index.js.map +1 -0
- package/dist/collections/interfaces/collection.d.ts +119 -0
- package/dist/collections/interfaces/collection.d.ts.map +1 -0
- package/dist/collections/interfaces/collection.js +8 -0
- package/dist/collections/interfaces/collection.js.map +1 -0
- package/dist/collections/interfaces/list.d.ts +247 -0
- package/dist/collections/interfaces/list.d.ts.map +1 -0
- package/dist/collections/interfaces/list.js +8 -0
- package/dist/collections/interfaces/list.js.map +1 -0
- package/dist/collections/interfaces/map.d.ts +344 -0
- package/dist/collections/interfaces/map.d.ts.map +1 -0
- package/dist/collections/interfaces/map.js +8 -0
- package/dist/collections/interfaces/map.js.map +1 -0
- package/dist/collections/interfaces/queue.d.ts +304 -0
- package/dist/collections/interfaces/queue.d.ts.map +1 -0
- package/dist/collections/interfaces/queue.js +8 -0
- package/dist/collections/interfaces/queue.js.map +1 -0
- package/dist/collections/interfaces/set.d.ts +137 -0
- package/dist/collections/interfaces/set.d.ts.map +1 -0
- package/dist/collections/interfaces/set.js +8 -0
- package/dist/collections/interfaces/set.js.map +1 -0
- package/dist/collections/storage/api.d.ts +109 -0
- package/dist/collections/storage/api.d.ts.map +1 -0
- package/dist/collections/storage/api.js +182 -0
- package/dist/collections/storage/api.js.map +1 -0
- package/dist/collections/storage/hybrid.d.ts +164 -0
- package/dist/collections/storage/hybrid.d.ts.map +1 -0
- package/dist/collections/storage/hybrid.js +416 -0
- package/dist/collections/storage/hybrid.js.map +1 -0
- package/dist/collections/storage/index.d.ts +16 -0
- package/dist/collections/storage/index.d.ts.map +1 -0
- package/dist/collections/storage/index.js +13 -0
- package/dist/collections/storage/index.js.map +1 -0
- package/dist/collections/storage/interface.d.ts +141 -0
- package/dist/collections/storage/interface.d.ts.map +1 -0
- package/dist/collections/storage/interface.js +23 -0
- package/dist/collections/storage/interface.js.map +1 -0
- package/dist/collections/storage/memory.d.ts +68 -0
- package/dist/collections/storage/memory.d.ts.map +1 -0
- package/dist/collections/storage/memory.js +154 -0
- package/dist/collections/storage/memory.js.map +1 -0
- package/dist/collections/utils/defaults.d.ts +135 -0
- package/dist/collections/utils/defaults.d.ts.map +1 -0
- package/dist/collections/utils/defaults.js +322 -0
- package/dist/collections/utils/defaults.js.map +1 -0
- package/dist/collections/utils/factories.d.ts +144 -0
- package/dist/collections/utils/factories.d.ts.map +1 -0
- package/dist/collections/utils/factories.js +293 -0
- package/dist/collections/utils/factories.js.map +1 -0
- package/dist/collections/utils/helpers.d.ts +137 -0
- package/dist/collections/utils/helpers.d.ts.map +1 -0
- package/dist/collections/utils/helpers.js +221 -0
- package/dist/collections/utils/helpers.js.map +1 -0
- package/dist/collections.d.ts +12 -0
- package/dist/collections.d.ts.map +1 -0
- package/dist/collections.js +10 -0
- package/dist/collections.js.map +1 -0
- package/dist/components/define.d.ts +134 -0
- package/dist/components/define.d.ts.map +1 -0
- package/dist/components/define.js +486 -0
- package/dist/components/define.js.map +1 -0
- package/dist/components/index.d.ts +39 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +38 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/types.d.ts +264 -0
- package/dist/components/types.d.ts.map +1 -0
- package/dist/components/types.js +46 -0
- package/dist/components/types.js.map +1 -0
- package/dist/events/bus.d.ts +193 -0
- package/dist/events/bus.d.ts.map +1 -0
- package/dist/events/bus.js +511 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/events/index.d.ts +34 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +36 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +242 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +8 -0
- package/dist/events/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/compose.d.ts +88 -0
- package/dist/middleware/compose.d.ts.map +1 -0
- package/dist/middleware/compose.js +108 -0
- package/dist/middleware/compose.js.map +1 -0
- package/dist/middleware/index.d.ts +12 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +11 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/types.d.ts +112 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/middleware/types.js +14 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/procedures/cli/announce.d.ts +67 -0
- package/dist/procedures/cli/announce.d.ts.map +1 -0
- package/dist/procedures/cli/announce.js +392 -0
- package/dist/procedures/cli/announce.js.map +1 -0
- package/dist/procedures/cli/discover.d.ts +66 -0
- package/dist/procedures/cli/discover.d.ts.map +1 -0
- package/dist/procedures/cli/discover.js +310 -0
- package/dist/procedures/cli/discover.js.map +1 -0
- package/dist/procedures/cli/index.d.ts +13 -0
- package/dist/procedures/cli/index.d.ts.map +1 -0
- package/dist/procedures/cli/index.js +201 -0
- package/dist/procedures/cli/index.js.map +1 -0
- package/dist/procedures/cli/init.d.ts +17 -0
- package/dist/procedures/cli/init.d.ts.map +1 -0
- package/dist/procedures/cli/init.js +336 -0
- package/dist/procedures/cli/init.js.map +1 -0
- package/dist/procedures/collection/index.d.ts +10 -0
- package/dist/procedures/collection/index.d.ts.map +1 -0
- package/dist/procedures/collection/index.js +10 -0
- package/dist/procedures/collection/index.js.map +1 -0
- package/dist/procedures/collection/procedures.d.ts +21 -0
- package/dist/procedures/collection/procedures.d.ts.map +1 -0
- package/dist/procedures/collection/procedures.js +198 -0
- package/dist/procedures/collection/procedures.js.map +1 -0
- package/dist/procedures/collection/schemas.d.ts +131 -0
- package/dist/procedures/collection/schemas.d.ts.map +1 -0
- package/dist/procedures/collection/schemas.js +422 -0
- package/dist/procedures/collection/schemas.js.map +1 -0
- package/dist/procedures/collection/storage.d.ts +53 -0
- package/dist/procedures/collection/storage.d.ts.map +1 -0
- package/dist/procedures/collection/storage.js +2 -0
- package/dist/procedures/collection/storage.js.map +1 -0
- package/dist/procedures/core/array.d.ts +276 -0
- package/dist/procedures/core/array.d.ts.map +1 -0
- package/dist/procedures/core/array.js +637 -0
- package/dist/procedures/core/array.js.map +1 -0
- package/dist/procedures/core/comparison.d.ts +85 -0
- package/dist/procedures/core/comparison.d.ts.map +1 -0
- package/dist/procedures/core/comparison.js +156 -0
- package/dist/procedures/core/comparison.js.map +1 -0
- package/dist/procedures/core/index.d.ts +261 -0
- package/dist/procedures/core/index.d.ts.map +1 -0
- package/dist/procedures/core/index.js +585 -0
- package/dist/procedures/core/index.js.map +1 -0
- package/dist/procedures/core/logic.d.ts +144 -0
- package/dist/procedures/core/logic.d.ts.map +1 -0
- package/dist/procedures/core/logic.js +169 -0
- package/dist/procedures/core/logic.js.map +1 -0
- package/dist/procedures/core/math.d.ts +139 -0
- package/dist/procedures/core/math.d.ts.map +1 -0
- package/dist/procedures/core/math.js +273 -0
- package/dist/procedures/core/math.js.map +1 -0
- package/dist/procedures/core/meta.d.ts +111 -0
- package/dist/procedures/core/meta.d.ts.map +1 -0
- package/dist/procedures/core/meta.js +239 -0
- package/dist/procedures/core/meta.js.map +1 -0
- package/dist/procedures/core/object.d.ts +109 -0
- package/dist/procedures/core/object.d.ts.map +1 -0
- package/dist/procedures/core/object.js +270 -0
- package/dist/procedures/core/object.js.map +1 -0
- package/dist/procedures/core/operands.d.ts +51 -0
- package/dist/procedures/core/operands.d.ts.map +1 -0
- package/dist/procedures/core/operands.js +90 -0
- package/dist/procedures/core/operands.js.map +1 -0
- package/dist/procedures/core/outputs.d.ts +28 -0
- package/dist/procedures/core/outputs.d.ts.map +1 -0
- package/dist/procedures/core/outputs.js +42 -0
- package/dist/procedures/core/outputs.js.map +1 -0
- package/dist/procedures/core/results.d.ts +202 -0
- package/dist/procedures/core/results.d.ts.map +1 -0
- package/dist/procedures/core/results.js +106 -0
- package/dist/procedures/core/results.js.map +1 -0
- package/dist/procedures/core/schemas.d.ts +48 -0
- package/dist/procedures/core/schemas.d.ts.map +1 -0
- package/dist/procedures/core/schemas.js +102 -0
- package/dist/procedures/core/schemas.js.map +1 -0
- package/dist/procedures/core/string.d.ts +138 -0
- package/dist/procedures/core/string.d.ts.map +1 -0
- package/dist/procedures/core/string.js +268 -0
- package/dist/procedures/core/string.js.map +1 -0
- package/dist/procedures/core/type.d.ts +101 -0
- package/dist/procedures/core/type.d.ts.map +1 -0
- package/dist/procedures/core/type.js +208 -0
- package/dist/procedures/core/type.js.map +1 -0
- package/dist/procedures/define-procedure.d.ts +187 -0
- package/dist/procedures/define-procedure.d.ts.map +1 -0
- package/dist/procedures/define-procedure.js +356 -0
- package/dist/procedures/define-procedure.js.map +1 -0
- package/dist/procedures/define.d.ts +228 -0
- package/dist/procedures/define.d.ts.map +1 -0
- package/dist/procedures/define.js +300 -0
- package/dist/procedures/define.js.map +1 -0
- package/dist/procedures/discovery.d.ts +57 -0
- package/dist/procedures/discovery.d.ts.map +1 -0
- package/dist/procedures/discovery.js +68 -0
- package/dist/procedures/discovery.js.map +1 -0
- package/dist/procedures/index.d.ts +24 -0
- package/dist/procedures/index.d.ts.map +1 -0
- package/dist/procedures/index.js +69 -0
- package/dist/procedures/index.js.map +1 -0
- package/dist/procedures/interceptors.d.ts +82 -0
- package/dist/procedures/interceptors.d.ts.map +1 -0
- package/dist/procedures/interceptors.js +193 -0
- package/dist/procedures/interceptors.js.map +1 -0
- package/dist/procedures/invoke.d.ts +127 -0
- package/dist/procedures/invoke.d.ts.map +1 -0
- package/dist/procedures/invoke.js +277 -0
- package/dist/procedures/invoke.js.map +1 -0
- package/dist/procedures/module.d.ts +49 -0
- package/dist/procedures/module.d.ts.map +1 -0
- package/dist/procedures/module.js +93 -0
- package/dist/procedures/module.js.map +1 -0
- package/dist/procedures/policy.d.ts +70 -0
- package/dist/procedures/policy.d.ts.map +1 -0
- package/dist/procedures/policy.js +138 -0
- package/dist/procedures/policy.js.map +1 -0
- package/dist/procedures/ref.d.ts +606 -0
- package/dist/procedures/ref.d.ts.map +1 -0
- package/dist/procedures/ref.js +895 -0
- package/dist/procedures/ref.js.map +1 -0
- package/dist/procedures/registry.d.ts +208 -0
- package/dist/procedures/registry.d.ts.map +1 -0
- package/dist/procedures/registry.js +402 -0
- package/dist/procedures/registry.js.map +1 -0
- package/dist/procedures/schema.d.ts +126 -0
- package/dist/procedures/schema.d.ts.map +1 -0
- package/dist/procedures/schema.js +108 -0
- package/dist/procedures/schema.js.map +1 -0
- package/dist/procedures/storage/adapter.d.ts +148 -0
- package/dist/procedures/storage/adapter.d.ts.map +1 -0
- package/dist/procedures/storage/adapter.js +214 -0
- package/dist/procedures/storage/adapter.js.map +1 -0
- package/dist/procedures/storage/api.d.ts +125 -0
- package/dist/procedures/storage/api.d.ts.map +1 -0
- package/dist/procedures/storage/api.js +220 -0
- package/dist/procedures/storage/api.js.map +1 -0
- package/dist/procedures/storage/factory.d.ts +134 -0
- package/dist/procedures/storage/factory.d.ts.map +1 -0
- package/dist/procedures/storage/factory.js +166 -0
- package/dist/procedures/storage/factory.js.map +1 -0
- package/dist/procedures/storage/hybrid.d.ts +193 -0
- package/dist/procedures/storage/hybrid.d.ts.map +1 -0
- package/dist/procedures/storage/hybrid.js +519 -0
- package/dist/procedures/storage/hybrid.js.map +1 -0
- package/dist/procedures/storage/index.d.ts +17 -0
- package/dist/procedures/storage/index.d.ts.map +1 -0
- package/dist/procedures/storage/index.js +17 -0
- package/dist/procedures/storage/index.js.map +1 -0
- package/dist/procedures/storage/procedures.d.ts +39 -0
- package/dist/procedures/storage/procedures.d.ts.map +1 -0
- package/dist/procedures/storage/procedures.js +261 -0
- package/dist/procedures/storage/procedures.js.map +1 -0
- package/dist/procedures/storage/serialization.d.ts +123 -0
- package/dist/procedures/storage/serialization.d.ts.map +1 -0
- package/dist/procedures/storage/serialization.js +216 -0
- package/dist/procedures/storage/serialization.js.map +1 -0
- package/dist/procedures/storage/synced-registry.d.ts +246 -0
- package/dist/procedures/storage/synced-registry.d.ts.map +1 -0
- package/dist/procedures/storage/synced-registry.js +575 -0
- package/dist/procedures/storage/synced-registry.js.map +1 -0
- package/dist/procedures/storage/types.d.ts +130 -0
- package/dist/procedures/storage/types.d.ts.map +1 -0
- package/dist/procedures/storage/types.js +8 -0
- package/dist/procedures/storage/types.js.map +1 -0
- package/dist/procedures/types.d.ts +370 -0
- package/dist/procedures/types.d.ts.map +1 -0
- package/dist/procedures/types.js +23 -0
- package/dist/procedures/types.js.map +1 -0
- package/dist/server/browser-guard.d.ts +69 -0
- package/dist/server/browser-guard.d.ts.map +1 -0
- package/dist/server/browser-guard.js +103 -0
- package/dist/server/browser-guard.js.map +1 -0
- package/dist/server/host-policy.d.ts +59 -0
- package/dist/server/host-policy.d.ts.map +1 -0
- package/dist/server/host-policy.js +82 -0
- package/dist/server/host-policy.js.map +1 -0
- package/dist/server/index.d.ts +46 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +42 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/method.d.ts +24 -0
- package/dist/server/method.d.ts.map +1 -0
- package/dist/server/method.js +29 -0
- package/dist/server/method.js.map +1 -0
- package/dist/server/procedure-server.d.ts +212 -0
- package/dist/server/procedure-server.d.ts.map +1 -0
- package/dist/server/procedure-server.js +323 -0
- package/dist/server/procedure-server.js.map +1 -0
- package/dist/server/server.d.ts +161 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +279 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/types.d.ts +106 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +29 -0
- package/dist/server/types.js.map +1 -0
- package/package.json +115 -3
- package/src/adapters/http/client/index.ts +51 -0
- package/src/adapters/http/client/transport.ts +338 -0
- package/src/adapters/http/client/types.ts +33 -0
- package/src/adapters/http/index.ts +7 -0
- package/src/adapters/http/server/index.ts +14 -0
- package/src/adapters/http/server/strategies.ts +105 -0
- package/src/adapters/http/server/transport.ts +622 -0
- package/src/adapters/http/server/types.ts +81 -0
- package/src/adapters/http/shared/constants.ts +108 -0
- package/src/adapters/http/shared/errors.ts +199 -0
- package/src/adapters/http/shared/headers.ts +291 -0
- package/src/adapters/http/shared/index.ts +21 -0
- package/src/adapters/http/shared/status-codes.ts +212 -0
- package/src/adapters/http/shared/strategies.ts +255 -0
- package/src/adapters/local/client/index.ts +11 -0
- package/src/adapters/local/client/transport.ts +188 -0
- package/src/adapters/local/client/types.ts +50 -0
- package/src/adapters/metadata.ts +17 -0
- package/src/adapters/mock/client/builder.ts +64 -0
- package/src/adapters/mock/client/index.ts +19 -0
- package/src/adapters/mock/client/transport.ts +352 -0
- package/src/adapters/mock/client/types.ts +99 -0
- package/src/adapters/websocket/client/index.ts +18 -0
- package/src/adapters/websocket/client/transport.ts +733 -0
- package/src/adapters/websocket/client/types.ts +235 -0
- package/src/adapters/websocket/index.ts +24 -0
- package/src/adapters/websocket/server/index.ts +18 -0
- package/src/adapters/websocket/server/transport.ts +705 -0
- package/src/adapters/websocket/server/types.ts +169 -0
- package/src/browser.ts +373 -0
- package/src/client/batch-executor.ts +514 -0
- package/src/client/call-types.ts +491 -0
- package/src/client/client.ts +1202 -0
- package/src/client/consumption.ts +288 -0
- package/src/client/context.ts +228 -0
- package/src/client/errors/README.md +279 -0
- package/src/client/errors/codes.ts +88 -0
- package/src/client/errors/factory.ts +263 -0
- package/src/client/errors/http-errors.ts +601 -0
- package/src/client/errors/http-status.ts +82 -0
- package/src/client/errors/index.ts +72 -0
- package/src/client/errors/registry.ts +595 -0
- package/src/client/errors/types.ts +139 -0
- package/src/client/index.ts +124 -0
- package/src/client/middleware/auth.ts +132 -0
- package/src/client/middleware/cache.ts +316 -0
- package/src/client/middleware/circuit-breaker.ts +339 -0
- package/src/client/middleware/contexts.ts +319 -0
- package/src/client/middleware/items.ts +114 -0
- package/src/client/middleware/lru.ts +66 -0
- package/src/client/middleware/pagination.ts +213 -0
- package/src/client/middleware/rate-limit.ts +315 -0
- package/src/client/middleware/retry.ts +236 -0
- package/src/client/middleware/timeout.ts +308 -0
- package/src/client/middleware/tracing.ts +191 -0
- package/src/client/route-resolver.ts +407 -0
- package/src/client/typed-method.ts +65 -0
- package/src/client/typed.ts +140 -0
- package/src/client/types.ts +361 -0
- package/src/client/validation/index.ts +56 -0
- package/src/client/validation/middleware.ts +254 -0
- package/src/client/validation/types.ts +162 -0
- package/src/events/bus.ts +594 -0
- package/src/events/index.ts +67 -0
- package/src/events/types.ts +263 -0
- package/src/index.ts +33 -0
- package/src/middleware/compose.ts +159 -0
- package/src/middleware/index.ts +28 -0
- package/src/middleware/types.ts +166 -0
- package/src/procedures/cli/announce.ts +470 -0
- package/src/procedures/cli/discover.ts +390 -0
- package/src/procedures/cli/index.ts +229 -0
- package/src/procedures/cli/init.ts +370 -0
- package/src/procedures/collection/index.ts +51 -0
- package/src/procedures/collection/procedures.ts +245 -0
- package/src/procedures/collection/schemas.ts +550 -0
- package/src/procedures/collection/storage.ts +53 -0
- package/src/procedures/core/array.ts +1024 -0
- package/src/procedures/core/comparison.ts +263 -0
- package/src/procedures/core/index.ts +895 -0
- package/src/procedures/core/logic.ts +225 -0
- package/src/procedures/core/math.ts +469 -0
- package/src/procedures/core/meta.ts +384 -0
- package/src/procedures/core/object.ts +427 -0
- package/src/procedures/core/operands.ts +119 -0
- package/src/procedures/core/outputs.ts +48 -0
- package/src/procedures/core/results.ts +296 -0
- package/src/procedures/core/schemas.ts +123 -0
- package/src/procedures/core/string.ts +458 -0
- package/src/procedures/core/type.ts +344 -0
- package/src/procedures/define-procedure.ts +531 -0
- package/src/procedures/define.ts +387 -0
- package/src/procedures/discovery.ts +76 -0
- package/src/procedures/index.ts +228 -0
- package/src/procedures/interceptors.ts +272 -0
- package/src/procedures/invoke.ts +413 -0
- package/src/procedures/module.ts +107 -0
- package/src/procedures/policy.ts +171 -0
- package/src/procedures/ref.ts +1305 -0
- package/src/procedures/registry.ts +473 -0
- package/src/procedures/schema.ts +225 -0
- package/src/procedures/types.ts +485 -0
- package/src/server/browser-guard.ts +147 -0
- package/src/server/host-policy.ts +121 -0
- package/src/server/index.ts +70 -0
- package/src/server/method.ts +33 -0
- package/src/server/procedure-server.ts +417 -0
- package/src/server/server.ts +364 -0
- package/src/server/types.ts +147 -0
|
@@ -0,0 +1,1024 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Array Procedures
|
|
3
|
+
*
|
|
4
|
+
* Array manipulation operations for procedure aggregation.
|
|
5
|
+
* All procedures are namespaced under "client" (e.g., client.first, client.filter).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import { anyOutput, arrayOutput, booleanOutput, numberOutput } from "./outputs.js";
|
|
10
|
+
import { defineProcedure, namespace } from "../define.js";
|
|
11
|
+
import type { AnyProcedure, Procedure } from "../types.js";
|
|
12
|
+
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// First Procedure
|
|
15
|
+
// =============================================================================
|
|
16
|
+
|
|
17
|
+
interface FirstInput {
|
|
18
|
+
items: unknown[];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const FirstInputSchema = z.object({
|
|
22
|
+
items: z.array(z.unknown()).describe("The array"),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
type FirstProcedure = Procedure<FirstInput, unknown, { description: string; tags: string[] }>;
|
|
26
|
+
|
|
27
|
+
const firstProcedure: FirstProcedure = defineProcedure({
|
|
28
|
+
path: ["first"],
|
|
29
|
+
input: FirstInputSchema,
|
|
30
|
+
output: anyOutput("The first item, or undefined for an empty array"),
|
|
31
|
+
metadata: {
|
|
32
|
+
description: "Get first element of array",
|
|
33
|
+
tags: ["core", "array"],
|
|
34
|
+
},
|
|
35
|
+
handler: async (input: FirstInput): Promise<unknown> => {
|
|
36
|
+
return input.items[0];
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// =============================================================================
|
|
41
|
+
// Last Procedure
|
|
42
|
+
// =============================================================================
|
|
43
|
+
|
|
44
|
+
interface LastInput {
|
|
45
|
+
items: unknown[];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const LastInputSchema = z.object({
|
|
49
|
+
items: z.array(z.unknown()).describe("The array"),
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
type LastProcedure = Procedure<LastInput, unknown, { description: string; tags: string[] }>;
|
|
53
|
+
|
|
54
|
+
const lastProcedure: LastProcedure = defineProcedure({
|
|
55
|
+
path: ["last"],
|
|
56
|
+
input: LastInputSchema,
|
|
57
|
+
output: anyOutput("The last item, or undefined for an empty array"),
|
|
58
|
+
metadata: {
|
|
59
|
+
description: "Get last element of array",
|
|
60
|
+
tags: ["core", "array"],
|
|
61
|
+
},
|
|
62
|
+
handler: async (input: LastInput): Promise<unknown> => {
|
|
63
|
+
return input.items[input.items.length - 1];
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
// =============================================================================
|
|
68
|
+
// Nth Procedure
|
|
69
|
+
// =============================================================================
|
|
70
|
+
|
|
71
|
+
interface NthInput {
|
|
72
|
+
items: unknown[];
|
|
73
|
+
index: number;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const NthInputSchema = z.object({
|
|
77
|
+
items: z.array(z.unknown()).describe("The array"),
|
|
78
|
+
index: z.number().describe("The position"),
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
type NthProcedure = Procedure<NthInput, unknown, { description: string; tags: string[] }>;
|
|
82
|
+
|
|
83
|
+
const nthProcedure: NthProcedure = defineProcedure({
|
|
84
|
+
path: ["nth"],
|
|
85
|
+
input: NthInputSchema,
|
|
86
|
+
output: anyOutput("The item at the index, or undefined"),
|
|
87
|
+
metadata: {
|
|
88
|
+
description: "Get element at index (supports negative indexing)",
|
|
89
|
+
tags: ["core", "array"],
|
|
90
|
+
},
|
|
91
|
+
handler: async (input: NthInput): Promise<unknown> => {
|
|
92
|
+
const index = input.index < 0 ? input.items.length + input.index : input.index;
|
|
93
|
+
return input.items[index];
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// =============================================================================
|
|
98
|
+
// ArrLength Procedure
|
|
99
|
+
// =============================================================================
|
|
100
|
+
|
|
101
|
+
interface ArrLengthInput {
|
|
102
|
+
items: unknown[];
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const ArrLengthInputSchema = z.object({
|
|
106
|
+
items: z.array(z.unknown()).describe("The array"),
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
type ArrLengthProcedure = Procedure<ArrLengthInput, number, { description: string; tags: string[] }>;
|
|
110
|
+
|
|
111
|
+
const arrLengthProcedure: ArrLengthProcedure = defineProcedure({
|
|
112
|
+
path: ["arrLength"],
|
|
113
|
+
input: ArrLengthInputSchema,
|
|
114
|
+
output: numberOutput("The number of items"),
|
|
115
|
+
metadata: {
|
|
116
|
+
description: "Get array length",
|
|
117
|
+
tags: ["core", "array"],
|
|
118
|
+
},
|
|
119
|
+
handler: async (input: ArrLengthInput): Promise<number> => {
|
|
120
|
+
return input.items.length;
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
// =============================================================================
|
|
125
|
+
// Flatten Procedure
|
|
126
|
+
// =============================================================================
|
|
127
|
+
|
|
128
|
+
interface FlattenInput {
|
|
129
|
+
items: unknown[];
|
|
130
|
+
depth?: number | undefined;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const FlattenInputSchema = z.object({
|
|
134
|
+
items: z.array(z.unknown()).describe("The array"),
|
|
135
|
+
depth: z.number().optional().describe("How many levels to flatten (default: 1)"),
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
type FlattenProcedure = Procedure<FlattenInput, unknown[], { description: string; tags: string[] }>;
|
|
139
|
+
|
|
140
|
+
const flattenProcedure: FlattenProcedure = defineProcedure({
|
|
141
|
+
path: ["flatten"],
|
|
142
|
+
input: FlattenInputSchema,
|
|
143
|
+
output: arrayOutput("The flattened items"),
|
|
144
|
+
metadata: {
|
|
145
|
+
description: "Flatten nested arrays to specified depth",
|
|
146
|
+
tags: ["core", "array"],
|
|
147
|
+
},
|
|
148
|
+
handler: async (input: FlattenInput): Promise<unknown[]> => {
|
|
149
|
+
return (input.items as unknown[]).flat(input.depth ?? 1);
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
// =============================================================================
|
|
154
|
+
// Reverse Procedure
|
|
155
|
+
// =============================================================================
|
|
156
|
+
|
|
157
|
+
interface ReverseInput {
|
|
158
|
+
items: unknown[];
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const ReverseInputSchema = z.object({
|
|
162
|
+
items: z.array(z.unknown()).describe("The array"),
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
type ReverseProcedure = Procedure<ReverseInput, unknown[], { description: string; tags: string[] }>;
|
|
166
|
+
|
|
167
|
+
const reverseProcedure: ReverseProcedure = defineProcedure({
|
|
168
|
+
path: ["reverse"],
|
|
169
|
+
input: ReverseInputSchema,
|
|
170
|
+
output: arrayOutput("The items in reverse order"),
|
|
171
|
+
metadata: {
|
|
172
|
+
description: "Reverse array order",
|
|
173
|
+
tags: ["core", "array"],
|
|
174
|
+
},
|
|
175
|
+
handler: async (input: ReverseInput): Promise<unknown[]> => {
|
|
176
|
+
return [...input.items].reverse();
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
// =============================================================================
|
|
181
|
+
// Sort Procedure
|
|
182
|
+
// =============================================================================
|
|
183
|
+
|
|
184
|
+
interface SortInput {
|
|
185
|
+
items: unknown[];
|
|
186
|
+
key?: string | undefined;
|
|
187
|
+
desc?: boolean | undefined;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const SortInputSchema = z.object({
|
|
191
|
+
items: z.array(z.unknown()).describe("The array"),
|
|
192
|
+
key: z.string().optional().describe("The key (a field name of the items)"),
|
|
193
|
+
desc: z.boolean().optional().describe("Sort in descending order"),
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
type SortProcedure = Procedure<SortInput, unknown[], { description: string; tags: string[] }>;
|
|
197
|
+
|
|
198
|
+
const sortProcedure: SortProcedure = defineProcedure({
|
|
199
|
+
path: ["sort"],
|
|
200
|
+
input: SortInputSchema,
|
|
201
|
+
output: arrayOutput("The sorted items"),
|
|
202
|
+
metadata: {
|
|
203
|
+
description: "Sort array (optionally by key, optionally descending)",
|
|
204
|
+
tags: ["core", "array"],
|
|
205
|
+
},
|
|
206
|
+
handler: async (input: SortInput): Promise<unknown[]> => {
|
|
207
|
+
const items = [...input.items];
|
|
208
|
+
const direction = input.desc ? -1 : 1;
|
|
209
|
+
|
|
210
|
+
return items.sort((a, b) => {
|
|
211
|
+
let aVal = input.key ? (a as Record<string, unknown>)[input.key] : a;
|
|
212
|
+
let bVal = input.key ? (b as Record<string, unknown>)[input.key] : b;
|
|
213
|
+
|
|
214
|
+
if (typeof aVal === "string" && typeof bVal === "string") {
|
|
215
|
+
return aVal.localeCompare(bVal) * direction;
|
|
216
|
+
}
|
|
217
|
+
if (typeof aVal === "number" && typeof bVal === "number") {
|
|
218
|
+
return (aVal - bVal) * direction;
|
|
219
|
+
}
|
|
220
|
+
return 0;
|
|
221
|
+
});
|
|
222
|
+
},
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
// =============================================================================
|
|
226
|
+
// Slice Procedure
|
|
227
|
+
// =============================================================================
|
|
228
|
+
|
|
229
|
+
interface SliceInput {
|
|
230
|
+
items: unknown[];
|
|
231
|
+
start: number;
|
|
232
|
+
end?: number | undefined;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
const SliceInputSchema = z.object({
|
|
236
|
+
items: z.array(z.unknown()).describe("The array"),
|
|
237
|
+
start: z.number().describe("The start position (inclusive)"),
|
|
238
|
+
end: z.number().optional().describe("The end position (exclusive)"),
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
type SliceProcedure = Procedure<SliceInput, unknown[], { description: string; tags: string[] }>;
|
|
242
|
+
|
|
243
|
+
const sliceProcedure: SliceProcedure = defineProcedure({
|
|
244
|
+
path: ["slice"],
|
|
245
|
+
input: SliceInputSchema,
|
|
246
|
+
output: arrayOutput("The items of the range"),
|
|
247
|
+
metadata: {
|
|
248
|
+
description: "Extract portion of array",
|
|
249
|
+
tags: ["core", "array"],
|
|
250
|
+
},
|
|
251
|
+
handler: async (input: SliceInput): Promise<unknown[]> => {
|
|
252
|
+
return input.items.slice(input.start, input.end);
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
// =============================================================================
|
|
257
|
+
// ArrConcat Procedure
|
|
258
|
+
// =============================================================================
|
|
259
|
+
|
|
260
|
+
interface ArrConcatInput {
|
|
261
|
+
arrays: unknown[][];
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const ArrConcatInputSchema = z.object({
|
|
265
|
+
arrays: z.array(z.array(z.unknown())).describe("The arrays"),
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
type ArrConcatProcedure = Procedure<ArrConcatInput, unknown[], { description: string; tags: string[] }>;
|
|
269
|
+
|
|
270
|
+
const arrConcatProcedure: ArrConcatProcedure = defineProcedure({
|
|
271
|
+
path: ["arrConcat"],
|
|
272
|
+
input: ArrConcatInputSchema,
|
|
273
|
+
output: arrayOutput("The items of all arrays, in order"),
|
|
274
|
+
metadata: {
|
|
275
|
+
description: "Concatenate multiple arrays",
|
|
276
|
+
tags: ["core", "array"],
|
|
277
|
+
},
|
|
278
|
+
handler: async (input: ArrConcatInput): Promise<unknown[]> => {
|
|
279
|
+
return ([] as unknown[]).concat(...input.arrays);
|
|
280
|
+
},
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
// =============================================================================
|
|
284
|
+
// Unique Procedure
|
|
285
|
+
// =============================================================================
|
|
286
|
+
|
|
287
|
+
interface UniqueInput {
|
|
288
|
+
items: unknown[];
|
|
289
|
+
key?: string | undefined;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
const UniqueInputSchema = z.object({
|
|
293
|
+
items: z.array(z.unknown()).describe("The array"),
|
|
294
|
+
key: z.string().optional().describe("The key (a field name of the items)"),
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
type UniqueProcedure = Procedure<UniqueInput, unknown[], { description: string; tags: string[] }>;
|
|
298
|
+
|
|
299
|
+
const uniqueProcedure: UniqueProcedure = defineProcedure({
|
|
300
|
+
path: ["unique"],
|
|
301
|
+
input: UniqueInputSchema,
|
|
302
|
+
output: arrayOutput("The items without duplicates"),
|
|
303
|
+
metadata: {
|
|
304
|
+
description: "Remove duplicate values (optionally by key)",
|
|
305
|
+
tags: ["core", "array"],
|
|
306
|
+
},
|
|
307
|
+
handler: async (input: UniqueInput): Promise<unknown[]> => {
|
|
308
|
+
if (input.key) {
|
|
309
|
+
const seen = new Set<unknown>();
|
|
310
|
+
return input.items.filter((item) => {
|
|
311
|
+
const val = (item as Record<string, unknown>)[input.key!];
|
|
312
|
+
if (seen.has(val)) return false;
|
|
313
|
+
seen.add(val);
|
|
314
|
+
return true;
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
return [...new Set(input.items)];
|
|
318
|
+
},
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
// =============================================================================
|
|
322
|
+
// GroupBy Procedure
|
|
323
|
+
// =============================================================================
|
|
324
|
+
|
|
325
|
+
interface GroupByInput {
|
|
326
|
+
items: unknown[];
|
|
327
|
+
key: string;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
const GroupByInputSchema = z.object({
|
|
331
|
+
items: z.array(z.unknown()).describe("The array"),
|
|
332
|
+
key: z.string().describe("The key (a field name of the items)"),
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
type GroupByProcedure = Procedure<GroupByInput, Record<string, unknown[]>, { description: string; tags: string[] }>;
|
|
336
|
+
|
|
337
|
+
const groupByProcedure: GroupByProcedure = defineProcedure({
|
|
338
|
+
path: ["groupBy"],
|
|
339
|
+
input: GroupByInputSchema,
|
|
340
|
+
output: z.record(z.string(), z.array(z.unknown())).describe("The items, grouped by the value of the key"),
|
|
341
|
+
metadata: {
|
|
342
|
+
description: "Group array items by key value",
|
|
343
|
+
tags: ["core", "array"],
|
|
344
|
+
},
|
|
345
|
+
handler: async (input: GroupByInput): Promise<Record<string, unknown[]>> => {
|
|
346
|
+
const result: Record<string, unknown[]> = {};
|
|
347
|
+
for (const item of input.items) {
|
|
348
|
+
const keyVal = String((item as Record<string, unknown>)[input.key]);
|
|
349
|
+
if (!result[keyVal]) {
|
|
350
|
+
result[keyVal] = [];
|
|
351
|
+
}
|
|
352
|
+
result[keyVal].push(item);
|
|
353
|
+
}
|
|
354
|
+
return result;
|
|
355
|
+
},
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
// =============================================================================
|
|
359
|
+
// Zip Procedure
|
|
360
|
+
// =============================================================================
|
|
361
|
+
|
|
362
|
+
interface ZipInput {
|
|
363
|
+
arrays: unknown[][];
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
const ZipInputSchema = z.object({
|
|
367
|
+
arrays: z.array(z.array(z.unknown())).describe("The arrays"),
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
type ZipProcedure = Procedure<ZipInput, unknown[][], { description: string; tags: string[] }>;
|
|
371
|
+
|
|
372
|
+
const zipProcedure: ZipProcedure = defineProcedure({
|
|
373
|
+
path: ["zip"],
|
|
374
|
+
input: ZipInputSchema,
|
|
375
|
+
output: z.array(z.array(z.unknown())).describe("One tuple for each index"),
|
|
376
|
+
metadata: {
|
|
377
|
+
description: "Zip multiple arrays into array of tuples",
|
|
378
|
+
tags: ["core", "array"],
|
|
379
|
+
},
|
|
380
|
+
handler: async (input: ZipInput): Promise<unknown[][]> => {
|
|
381
|
+
if (input.arrays.length === 0) return [];
|
|
382
|
+
const maxLen = Math.max(...input.arrays.map((a) => a.length));
|
|
383
|
+
const result: unknown[][] = [];
|
|
384
|
+
for (let i = 0; i < maxLen; i++) {
|
|
385
|
+
result.push(input.arrays.map((a) => a[i]));
|
|
386
|
+
}
|
|
387
|
+
return result;
|
|
388
|
+
},
|
|
389
|
+
});
|
|
390
|
+
|
|
391
|
+
// =============================================================================
|
|
392
|
+
// Unzip Procedure
|
|
393
|
+
// =============================================================================
|
|
394
|
+
|
|
395
|
+
interface UnzipInput {
|
|
396
|
+
tuples: unknown[][];
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
const UnzipInputSchema = z.object({
|
|
400
|
+
tuples: z.array(z.array(z.unknown())).describe("The tuples"),
|
|
401
|
+
});
|
|
402
|
+
|
|
403
|
+
type UnzipProcedure = Procedure<UnzipInput, unknown[][], { description: string; tags: string[] }>;
|
|
404
|
+
|
|
405
|
+
const unzipProcedure: UnzipProcedure = defineProcedure({
|
|
406
|
+
path: ["unzip"],
|
|
407
|
+
input: UnzipInputSchema,
|
|
408
|
+
output: z.array(z.array(z.unknown())).describe("One array for each position of the tuples"),
|
|
409
|
+
metadata: {
|
|
410
|
+
description: "Unzip array of tuples into multiple arrays",
|
|
411
|
+
tags: ["core", "array"],
|
|
412
|
+
},
|
|
413
|
+
handler: async (input: UnzipInput): Promise<unknown[][]> => {
|
|
414
|
+
if (input.tuples.length === 0) return [];
|
|
415
|
+
const numArrays = input.tuples[0]?.length ?? 0;
|
|
416
|
+
const result: unknown[][] = Array.from({ length: numArrays }, () => []);
|
|
417
|
+
for (const tuple of input.tuples) {
|
|
418
|
+
for (let i = 0; i < numArrays; i++) {
|
|
419
|
+
result[i]!.push(tuple[i]);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
return result;
|
|
423
|
+
},
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
// =============================================================================
|
|
427
|
+
// IndexOf Procedure
|
|
428
|
+
// =============================================================================
|
|
429
|
+
|
|
430
|
+
interface IndexOfInput {
|
|
431
|
+
items: unknown[];
|
|
432
|
+
value?: unknown;
|
|
433
|
+
fromIndex?: number | undefined;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
const IndexOfInputSchema = z.object({
|
|
437
|
+
items: z.array(z.unknown()).describe("The array"),
|
|
438
|
+
value: z.unknown().optional().describe("The value"),
|
|
439
|
+
fromIndex: z.number().optional().describe("The position to start the search from"),
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
type IndexOfProcedure = Procedure<IndexOfInput, number, { description: string; tags: string[] }>;
|
|
443
|
+
|
|
444
|
+
const indexOfProcedure: IndexOfProcedure = defineProcedure({
|
|
445
|
+
path: ["indexOf"],
|
|
446
|
+
input: IndexOfInputSchema,
|
|
447
|
+
output: numberOutput("The index of the item, or -1"),
|
|
448
|
+
metadata: {
|
|
449
|
+
description: "Find index of value in array (-1 if not found)",
|
|
450
|
+
tags: ["core", "array"],
|
|
451
|
+
},
|
|
452
|
+
handler: async (input: IndexOfInput): Promise<number> => {
|
|
453
|
+
return input.items.indexOf(input.value, input.fromIndex);
|
|
454
|
+
},
|
|
455
|
+
});
|
|
456
|
+
|
|
457
|
+
// =============================================================================
|
|
458
|
+
// Contains Procedure
|
|
459
|
+
// =============================================================================
|
|
460
|
+
|
|
461
|
+
interface ContainsInput {
|
|
462
|
+
items: unknown[];
|
|
463
|
+
value?: unknown;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
const ContainsInputSchema = z.object({
|
|
467
|
+
items: z.array(z.unknown()).describe("The array"),
|
|
468
|
+
value: z.unknown().optional().describe("The value"),
|
|
469
|
+
});
|
|
470
|
+
|
|
471
|
+
type ContainsProcedure = Procedure<ContainsInput, boolean, { description: string; tags: string[] }>;
|
|
472
|
+
|
|
473
|
+
const containsProcedure: ContainsProcedure = defineProcedure({
|
|
474
|
+
path: ["contains"],
|
|
475
|
+
input: ContainsInputSchema,
|
|
476
|
+
output: booleanOutput("True when the array contains the item"),
|
|
477
|
+
metadata: {
|
|
478
|
+
description: "Check if array contains value",
|
|
479
|
+
tags: ["core", "array"],
|
|
480
|
+
},
|
|
481
|
+
handler: async (input: ContainsInput): Promise<boolean> => {
|
|
482
|
+
return input.items.includes(input.value);
|
|
483
|
+
},
|
|
484
|
+
});
|
|
485
|
+
|
|
486
|
+
// =============================================================================
|
|
487
|
+
// Push Procedure (Immutable)
|
|
488
|
+
// =============================================================================
|
|
489
|
+
|
|
490
|
+
interface PushInput {
|
|
491
|
+
items: unknown[];
|
|
492
|
+
value?: unknown;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
const PushInputSchema = z.object({
|
|
496
|
+
items: z.array(z.unknown()).describe("The array"),
|
|
497
|
+
value: z.unknown().optional().describe("The value"),
|
|
498
|
+
});
|
|
499
|
+
|
|
500
|
+
type PushProcedure = Procedure<PushInput, unknown[], { description: string; tags: string[] }>;
|
|
501
|
+
|
|
502
|
+
const pushProcedure: PushProcedure = defineProcedure({
|
|
503
|
+
path: ["push"],
|
|
504
|
+
input: PushInputSchema,
|
|
505
|
+
output: arrayOutput("The items with the new items at the end"),
|
|
506
|
+
metadata: {
|
|
507
|
+
description: "Add value to end of array (immutable)",
|
|
508
|
+
tags: ["core", "array"],
|
|
509
|
+
},
|
|
510
|
+
handler: async (input: PushInput): Promise<unknown[]> => {
|
|
511
|
+
return [...input.items, input.value];
|
|
512
|
+
},
|
|
513
|
+
});
|
|
514
|
+
|
|
515
|
+
// =============================================================================
|
|
516
|
+
// Unshift Procedure (Immutable)
|
|
517
|
+
// =============================================================================
|
|
518
|
+
|
|
519
|
+
interface UnshiftInput {
|
|
520
|
+
items: unknown[];
|
|
521
|
+
value?: unknown;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
const UnshiftInputSchema = z.object({
|
|
525
|
+
items: z.array(z.unknown()).describe("The array"),
|
|
526
|
+
value: z.unknown().optional().describe("The value"),
|
|
527
|
+
});
|
|
528
|
+
|
|
529
|
+
type UnshiftProcedure = Procedure<UnshiftInput, unknown[], { description: string; tags: string[] }>;
|
|
530
|
+
|
|
531
|
+
const unshiftProcedure: UnshiftProcedure = defineProcedure({
|
|
532
|
+
path: ["unshift"],
|
|
533
|
+
input: UnshiftInputSchema,
|
|
534
|
+
output: arrayOutput("The items with the new items at the start"),
|
|
535
|
+
metadata: {
|
|
536
|
+
description: "Add value to beginning of array (immutable)",
|
|
537
|
+
tags: ["core", "array"],
|
|
538
|
+
},
|
|
539
|
+
handler: async (input: UnshiftInput): Promise<unknown[]> => {
|
|
540
|
+
return [input.value, ...input.items];
|
|
541
|
+
},
|
|
542
|
+
});
|
|
543
|
+
|
|
544
|
+
// =============================================================================
|
|
545
|
+
// Range Procedure
|
|
546
|
+
// =============================================================================
|
|
547
|
+
|
|
548
|
+
interface RangeInput {
|
|
549
|
+
start: number;
|
|
550
|
+
end: number;
|
|
551
|
+
step?: number | undefined;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
const RangeInputSchema = z.object({
|
|
555
|
+
start: z.number().describe("The start position (inclusive)"),
|
|
556
|
+
end: z.number().describe("The end position (exclusive)"),
|
|
557
|
+
step: z.number().optional().describe("The step (default: 1)"),
|
|
558
|
+
});
|
|
559
|
+
|
|
560
|
+
type RangeProcedure = Procedure<RangeInput, number[], { description: string; tags: string[] }>;
|
|
561
|
+
|
|
562
|
+
/** The maximum number of items of `client.range`. */
|
|
563
|
+
export const MAX_RANGE_LENGTH = 1_000_000;
|
|
564
|
+
|
|
565
|
+
const rangeProcedure: RangeProcedure = defineProcedure({
|
|
566
|
+
path: ["range"],
|
|
567
|
+
input: RangeInputSchema,
|
|
568
|
+
output: z.array(numberOutput("A number of the range")).describe("The numbers from start to end"),
|
|
569
|
+
metadata: {
|
|
570
|
+
description: "Generate array of numbers from start to end (exclusive)",
|
|
571
|
+
tags: ["core", "array"],
|
|
572
|
+
},
|
|
573
|
+
handler: async (input: RangeInput): Promise<number[]> => {
|
|
574
|
+
const step = input.step ?? 1;
|
|
575
|
+
for (const [name, value] of [["start", input.start], ["end", input.end], ["step", step]] as const) {
|
|
576
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
577
|
+
throw new Error(`range: ${name} must be a finite number, got ${String(value)}`);
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
if (step === 0) {
|
|
581
|
+
return [];
|
|
582
|
+
}
|
|
583
|
+
// The length comes first, and item k is start + k * step. (Deep dive SITE-6: before, the loop
|
|
584
|
+
// added step to the last value. At 1e17, start + 1 is start, so the loop never ended.)
|
|
585
|
+
const length = Math.max(0, Math.ceil((input.end - input.start) / step));
|
|
586
|
+
if (length > MAX_RANGE_LENGTH) {
|
|
587
|
+
throw new Error(`range: ${length} items is more than the limit of ${MAX_RANGE_LENGTH}`);
|
|
588
|
+
}
|
|
589
|
+
const result: number[] = [];
|
|
590
|
+
for (let k = 0; k < length; k++) {
|
|
591
|
+
const value = input.start + k * step;
|
|
592
|
+
// A rounding error can make the last value reach end: it is not in the range
|
|
593
|
+
if (step > 0 ? value >= input.end : value <= input.end) break;
|
|
594
|
+
result.push(value);
|
|
595
|
+
}
|
|
596
|
+
return result;
|
|
597
|
+
},
|
|
598
|
+
});
|
|
599
|
+
|
|
600
|
+
// =============================================================================
|
|
601
|
+
// Filter Procedure (Core Logic + Filtering Separation)
|
|
602
|
+
// =============================================================================
|
|
603
|
+
|
|
604
|
+
interface FilterInput {
|
|
605
|
+
/** Array to filter */
|
|
606
|
+
items: unknown[];
|
|
607
|
+
/** Property to match against */
|
|
608
|
+
key?: string | undefined;
|
|
609
|
+
/** Value to match (equality check) */
|
|
610
|
+
value?: unknown | undefined;
|
|
611
|
+
/** Values to match (any of these) */
|
|
612
|
+
values?: unknown[] | undefined;
|
|
613
|
+
/** Match mode: 'equals', 'not', 'in', 'notIn', 'contains', 'startsWith', 'endsWith' */
|
|
614
|
+
match?: 'equals' | 'not' | 'in' | 'notIn' | 'contains' | 'startsWith' | 'endsWith' | 'gt' | 'gte' | 'lt' | 'lte' | undefined;
|
|
615
|
+
/** Invert the filter */
|
|
616
|
+
invert?: boolean | undefined;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
const FilterInputSchema = z.object({
|
|
620
|
+
items: z.array(z.unknown()).describe("Array to filter"),
|
|
621
|
+
key: z.string().optional().describe("Property to match against"),
|
|
622
|
+
value: z.unknown().optional().describe("Value to match (equality check)"),
|
|
623
|
+
values: z.array(z.unknown()).optional().describe("Values to match (any of these)"),
|
|
624
|
+
match: z.enum(["equals", "not", "in", "notIn", "contains", "startsWith", "endsWith", "gt", "gte", "lt", "lte"]).optional().describe("Match mode: 'equals', 'not', 'in', 'notIn', 'contains', 'startsWith', 'endsWith'"),
|
|
625
|
+
invert: z.boolean().optional().describe("Invert the filter"),
|
|
626
|
+
});
|
|
627
|
+
|
|
628
|
+
type FilterProcedure = Procedure<FilterInput, unknown[], { description: string; tags: string[] }>;
|
|
629
|
+
|
|
630
|
+
const filterProcedure: FilterProcedure = defineProcedure({
|
|
631
|
+
path: ["filter"],
|
|
632
|
+
input: FilterInputSchema,
|
|
633
|
+
output: arrayOutput("The items that pass the condition"),
|
|
634
|
+
metadata: {
|
|
635
|
+
description: "Filter array by property value or predicate",
|
|
636
|
+
tags: ["core", "array", "filter"],
|
|
637
|
+
},
|
|
638
|
+
handler: async (input: FilterInput): Promise<unknown[]> => {
|
|
639
|
+
const { items, key, value, values, match = 'equals', invert = false } = input;
|
|
640
|
+
|
|
641
|
+
const predicate = (item: unknown): boolean => {
|
|
642
|
+
const itemValue = key ? (item as Record<string, unknown>)[key] : item;
|
|
643
|
+
|
|
644
|
+
let result: boolean;
|
|
645
|
+
switch (match) {
|
|
646
|
+
case 'equals':
|
|
647
|
+
result = itemValue === value;
|
|
648
|
+
break;
|
|
649
|
+
case 'not':
|
|
650
|
+
result = itemValue !== value;
|
|
651
|
+
break;
|
|
652
|
+
case 'in':
|
|
653
|
+
result = (values ?? []).includes(itemValue);
|
|
654
|
+
break;
|
|
655
|
+
case 'notIn':
|
|
656
|
+
result = !(values ?? []).includes(itemValue);
|
|
657
|
+
break;
|
|
658
|
+
case 'contains':
|
|
659
|
+
result = typeof itemValue === 'string' && typeof value === 'string' && itemValue.includes(value);
|
|
660
|
+
break;
|
|
661
|
+
case 'startsWith':
|
|
662
|
+
result = typeof itemValue === 'string' && typeof value === 'string' && itemValue.startsWith(value);
|
|
663
|
+
break;
|
|
664
|
+
case 'endsWith':
|
|
665
|
+
result = typeof itemValue === 'string' && typeof value === 'string' && itemValue.endsWith(value);
|
|
666
|
+
break;
|
|
667
|
+
case 'gt':
|
|
668
|
+
result = typeof itemValue === 'number' && typeof value === 'number' && itemValue > value;
|
|
669
|
+
break;
|
|
670
|
+
case 'gte':
|
|
671
|
+
result = typeof itemValue === 'number' && typeof value === 'number' && itemValue >= value;
|
|
672
|
+
break;
|
|
673
|
+
case 'lt':
|
|
674
|
+
result = typeof itemValue === 'number' && typeof value === 'number' && itemValue < value;
|
|
675
|
+
break;
|
|
676
|
+
case 'lte':
|
|
677
|
+
result = typeof itemValue === 'number' && typeof value === 'number' && itemValue <= value;
|
|
678
|
+
break;
|
|
679
|
+
default:
|
|
680
|
+
result = Boolean(itemValue);
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
return invert ? !result : result;
|
|
684
|
+
};
|
|
685
|
+
|
|
686
|
+
return items.filter(predicate);
|
|
687
|
+
},
|
|
688
|
+
});
|
|
689
|
+
|
|
690
|
+
// =============================================================================
|
|
691
|
+
// Where Procedure (Filter shorthand)
|
|
692
|
+
// =============================================================================
|
|
693
|
+
|
|
694
|
+
interface WhereInput {
|
|
695
|
+
/** Array to filter */
|
|
696
|
+
items: unknown[];
|
|
697
|
+
/** Object with key-value pairs to match */
|
|
698
|
+
where: Record<string, unknown>;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
const WhereInputSchema = z.object({
|
|
702
|
+
items: z.array(z.unknown()).describe("Array to filter"),
|
|
703
|
+
where: z.record(z.string(), z.unknown()).describe("Object with key-value pairs to match"),
|
|
704
|
+
});
|
|
705
|
+
|
|
706
|
+
type WhereProcedure = Procedure<WhereInput, unknown[], { description: string; tags: string[] }>;
|
|
707
|
+
|
|
708
|
+
const whereProcedure: WhereProcedure = defineProcedure({
|
|
709
|
+
path: ["where"],
|
|
710
|
+
input: WhereInputSchema,
|
|
711
|
+
output: arrayOutput("The items whose fields match"),
|
|
712
|
+
metadata: {
|
|
713
|
+
description: "Filter array where all key-value pairs match",
|
|
714
|
+
tags: ["core", "array", "filter"],
|
|
715
|
+
},
|
|
716
|
+
handler: async (input: WhereInput): Promise<unknown[]> => {
|
|
717
|
+
const { items, where } = input;
|
|
718
|
+
return items.filter((item) => {
|
|
719
|
+
const obj = item as Record<string, unknown>;
|
|
720
|
+
return Object.entries(where).every(([key, value]) => obj[key] === value);
|
|
721
|
+
});
|
|
722
|
+
},
|
|
723
|
+
});
|
|
724
|
+
|
|
725
|
+
// =============================================================================
|
|
726
|
+
// Pluck Procedure (Extract single property)
|
|
727
|
+
// =============================================================================
|
|
728
|
+
|
|
729
|
+
interface PluckInput {
|
|
730
|
+
/** Array of objects */
|
|
731
|
+
items: unknown[];
|
|
732
|
+
/** Property to extract */
|
|
733
|
+
key: string;
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
const PluckInputSchema = z.object({
|
|
737
|
+
items: z.array(z.unknown()).describe("Array of objects"),
|
|
738
|
+
key: z.string().describe("Property to extract"),
|
|
739
|
+
});
|
|
740
|
+
|
|
741
|
+
type PluckProcedure = Procedure<PluckInput, unknown[], { description: string; tags: string[] }>;
|
|
742
|
+
|
|
743
|
+
const pluckProcedure: PluckProcedure = defineProcedure({
|
|
744
|
+
path: ["pluck"],
|
|
745
|
+
input: PluckInputSchema,
|
|
746
|
+
output: arrayOutput("The value of the field of each item"),
|
|
747
|
+
metadata: {
|
|
748
|
+
description: "Extract single property from all items",
|
|
749
|
+
tags: ["core", "array", "transform"],
|
|
750
|
+
},
|
|
751
|
+
handler: async (input: PluckInput): Promise<unknown[]> => {
|
|
752
|
+
return input.items.map((item) => (item as Record<string, unknown>)[input.key]);
|
|
753
|
+
},
|
|
754
|
+
});
|
|
755
|
+
|
|
756
|
+
// =============================================================================
|
|
757
|
+
// ArrPick Procedure (Select multiple properties from array items)
|
|
758
|
+
// =============================================================================
|
|
759
|
+
|
|
760
|
+
interface ArrPickInput {
|
|
761
|
+
/** Array of objects */
|
|
762
|
+
items: unknown[];
|
|
763
|
+
/** Properties to keep */
|
|
764
|
+
keys: string[];
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
const ArrPickInputSchema = z.object({
|
|
768
|
+
items: z.array(z.unknown()).describe("Array of objects"),
|
|
769
|
+
keys: z.array(z.string()).describe("Properties to keep"),
|
|
770
|
+
});
|
|
771
|
+
|
|
772
|
+
type ArrPickProcedure = Procedure<ArrPickInput, unknown[], { description: string; tags: string[] }>;
|
|
773
|
+
|
|
774
|
+
const arrPickProcedure: ArrPickProcedure = defineProcedure({
|
|
775
|
+
path: ["arrPick"],
|
|
776
|
+
input: ArrPickInputSchema,
|
|
777
|
+
output: z.array(z.record(z.string(), z.unknown())).describe("Each item with only the given fields"),
|
|
778
|
+
metadata: {
|
|
779
|
+
description: "Keep only specified properties from all items",
|
|
780
|
+
tags: ["core", "array", "transform"],
|
|
781
|
+
},
|
|
782
|
+
handler: async (input: ArrPickInput): Promise<unknown[]> => {
|
|
783
|
+
return input.items.map((item) => {
|
|
784
|
+
const obj = item as Record<string, unknown>;
|
|
785
|
+
const result: Record<string, unknown> = {};
|
|
786
|
+
for (const key of input.keys) {
|
|
787
|
+
if (key in obj) {
|
|
788
|
+
result[key] = obj[key];
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
return result;
|
|
792
|
+
});
|
|
793
|
+
},
|
|
794
|
+
});
|
|
795
|
+
|
|
796
|
+
// =============================================================================
|
|
797
|
+
// ArrOmit Procedure (Remove properties from array items)
|
|
798
|
+
// =============================================================================
|
|
799
|
+
|
|
800
|
+
interface ArrOmitInput {
|
|
801
|
+
/** Array of objects */
|
|
802
|
+
items: unknown[];
|
|
803
|
+
/** Properties to remove */
|
|
804
|
+
keys: string[];
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
const ArrOmitInputSchema = z.object({
|
|
808
|
+
items: z.array(z.unknown()).describe("Array of objects"),
|
|
809
|
+
keys: z.array(z.string()).describe("Properties to remove"),
|
|
810
|
+
});
|
|
811
|
+
|
|
812
|
+
type ArrOmitProcedure = Procedure<ArrOmitInput, unknown[], { description: string; tags: string[] }>;
|
|
813
|
+
|
|
814
|
+
const arrOmitProcedure: ArrOmitProcedure = defineProcedure({
|
|
815
|
+
path: ["arrOmit"],
|
|
816
|
+
input: ArrOmitInputSchema,
|
|
817
|
+
output: z.array(z.record(z.string(), z.unknown())).describe("Each item without the given fields"),
|
|
818
|
+
metadata: {
|
|
819
|
+
description: "Remove specified properties from all array items",
|
|
820
|
+
tags: ["core", "array", "transform"],
|
|
821
|
+
},
|
|
822
|
+
handler: async (input: ArrOmitInput): Promise<unknown[]> => {
|
|
823
|
+
const keysToOmit = new Set(input.keys);
|
|
824
|
+
return input.items.map((item) => {
|
|
825
|
+
const obj = item as Record<string, unknown>;
|
|
826
|
+
const result: Record<string, unknown> = {};
|
|
827
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
828
|
+
if (!keysToOmit.has(key)) {
|
|
829
|
+
result[key] = value;
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
return result;
|
|
833
|
+
});
|
|
834
|
+
},
|
|
835
|
+
});
|
|
836
|
+
|
|
837
|
+
// =============================================================================
|
|
838
|
+
// Partition Procedure (Split by predicate)
|
|
839
|
+
// =============================================================================
|
|
840
|
+
|
|
841
|
+
interface PartitionInput {
|
|
842
|
+
/** Array to partition */
|
|
843
|
+
items: unknown[];
|
|
844
|
+
/** Property to check for truthiness */
|
|
845
|
+
key: string;
|
|
846
|
+
/** Value to match for truthy partition */
|
|
847
|
+
value?: unknown | undefined;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
const PartitionInputSchema = z.object({
|
|
851
|
+
items: z.array(z.unknown()).describe("Array to partition"),
|
|
852
|
+
key: z.string().describe("Property to check for truthiness"),
|
|
853
|
+
value: z.unknown().optional().describe("Value to match for truthy partition"),
|
|
854
|
+
});
|
|
855
|
+
|
|
856
|
+
interface PartitionOutput {
|
|
857
|
+
/** Items that matched */
|
|
858
|
+
truthy: unknown[];
|
|
859
|
+
/** Items that didn't match */
|
|
860
|
+
falsy: unknown[];
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
const PartitionOutputSchema = z.looseObject({
|
|
864
|
+
truthy: z.array(z.unknown()).describe("The items that pass the condition"),
|
|
865
|
+
falsy: z.array(z.unknown()).describe("The items that do not pass the condition"),
|
|
866
|
+
}) as z.ZodType<PartitionOutput>;
|
|
867
|
+
|
|
868
|
+
type PartitionProcedure = Procedure<PartitionInput, PartitionOutput, { description: string; tags: string[] }>;
|
|
869
|
+
|
|
870
|
+
const partitionProcedure: PartitionProcedure = defineProcedure({
|
|
871
|
+
path: ["partition"],
|
|
872
|
+
input: PartitionInputSchema,
|
|
873
|
+
output: PartitionOutputSchema,
|
|
874
|
+
metadata: {
|
|
875
|
+
description: "Split array into two arrays based on predicate",
|
|
876
|
+
tags: ["core", "array", "filter"],
|
|
877
|
+
},
|
|
878
|
+
handler: async (input: PartitionInput): Promise<PartitionOutput> => {
|
|
879
|
+
const truthy: unknown[] = [];
|
|
880
|
+
const falsy: unknown[] = [];
|
|
881
|
+
|
|
882
|
+
for (const item of input.items) {
|
|
883
|
+
const itemValue = (item as Record<string, unknown>)[input.key];
|
|
884
|
+
const matches = input.value !== undefined ? itemValue === input.value : Boolean(itemValue);
|
|
885
|
+
if (matches) {
|
|
886
|
+
truthy.push(item);
|
|
887
|
+
} else {
|
|
888
|
+
falsy.push(item);
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
return { truthy, falsy };
|
|
893
|
+
},
|
|
894
|
+
});
|
|
895
|
+
|
|
896
|
+
// =============================================================================
|
|
897
|
+
// Count Procedure (Count matching items)
|
|
898
|
+
// =============================================================================
|
|
899
|
+
|
|
900
|
+
interface CountInput {
|
|
901
|
+
/** Array to count */
|
|
902
|
+
items: unknown[];
|
|
903
|
+
/** Optional property to check for truthiness */
|
|
904
|
+
key?: string | undefined;
|
|
905
|
+
/** Optional value to match */
|
|
906
|
+
value?: unknown | undefined;
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
const CountInputSchema = z.object({
|
|
910
|
+
items: z.array(z.unknown()).describe("Array to count"),
|
|
911
|
+
key: z.string().optional().describe("Optional property to check for truthiness"),
|
|
912
|
+
value: z.unknown().optional().describe("Optional value to match"),
|
|
913
|
+
});
|
|
914
|
+
|
|
915
|
+
type CountProcedure = Procedure<CountInput, number, { description: string; tags: string[] }>;
|
|
916
|
+
|
|
917
|
+
const countProcedure: CountProcedure = defineProcedure({
|
|
918
|
+
path: ["count"],
|
|
919
|
+
input: CountInputSchema,
|
|
920
|
+
output: numberOutput("The number of matching items"),
|
|
921
|
+
metadata: {
|
|
922
|
+
description: "Count items matching criteria (or total if no criteria)",
|
|
923
|
+
tags: ["core", "array", "filter"],
|
|
924
|
+
},
|
|
925
|
+
handler: async (input: CountInput): Promise<number> => {
|
|
926
|
+
if (!input.key) {
|
|
927
|
+
return input.items.length;
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
return input.items.filter((item) => {
|
|
931
|
+
const itemValue = (item as Record<string, unknown>)[input.key!];
|
|
932
|
+
return input.value !== undefined ? itemValue === input.value : Boolean(itemValue);
|
|
933
|
+
}).length;
|
|
934
|
+
},
|
|
935
|
+
});
|
|
936
|
+
|
|
937
|
+
// =============================================================================
|
|
938
|
+
// Export Array Procedures
|
|
939
|
+
// =============================================================================
|
|
940
|
+
|
|
941
|
+
/**
|
|
942
|
+
* All array procedures (before namespacing).
|
|
943
|
+
*/
|
|
944
|
+
const arrayProceduresRaw: AnyProcedure[] = [
|
|
945
|
+
// Access
|
|
946
|
+
firstProcedure as AnyProcedure,
|
|
947
|
+
lastProcedure as AnyProcedure,
|
|
948
|
+
nthProcedure as AnyProcedure,
|
|
949
|
+
arrLengthProcedure as AnyProcedure,
|
|
950
|
+
// Transform
|
|
951
|
+
flattenProcedure as AnyProcedure,
|
|
952
|
+
reverseProcedure as AnyProcedure,
|
|
953
|
+
sortProcedure as AnyProcedure,
|
|
954
|
+
sliceProcedure as AnyProcedure,
|
|
955
|
+
arrConcatProcedure as AnyProcedure,
|
|
956
|
+
uniqueProcedure as AnyProcedure,
|
|
957
|
+
groupByProcedure as AnyProcedure,
|
|
958
|
+
zipProcedure as AnyProcedure,
|
|
959
|
+
unzipProcedure as AnyProcedure,
|
|
960
|
+
// Search
|
|
961
|
+
indexOfProcedure as AnyProcedure,
|
|
962
|
+
containsProcedure as AnyProcedure,
|
|
963
|
+
// Mutation (immutable)
|
|
964
|
+
pushProcedure as AnyProcedure,
|
|
965
|
+
unshiftProcedure as AnyProcedure,
|
|
966
|
+
// Generation
|
|
967
|
+
rangeProcedure as AnyProcedure,
|
|
968
|
+
// Filtering (Core Logic + Filtering Separation)
|
|
969
|
+
filterProcedure as AnyProcedure,
|
|
970
|
+
whereProcedure as AnyProcedure,
|
|
971
|
+
pluckProcedure as AnyProcedure,
|
|
972
|
+
arrPickProcedure as AnyProcedure,
|
|
973
|
+
arrOmitProcedure as AnyProcedure,
|
|
974
|
+
partitionProcedure as AnyProcedure,
|
|
975
|
+
countProcedure as AnyProcedure,
|
|
976
|
+
];
|
|
977
|
+
|
|
978
|
+
/**
|
|
979
|
+
* All array procedures namespaced under "client".
|
|
980
|
+
*/
|
|
981
|
+
export const arrayProcedures: AnyProcedure[] = namespace(["client"], arrayProceduresRaw);
|
|
982
|
+
|
|
983
|
+
/**
|
|
984
|
+
* Array procedures module for registration.
|
|
985
|
+
*/
|
|
986
|
+
export const arrayModule: { name: string; procedures: AnyProcedure[] } = {
|
|
987
|
+
name: "client-array",
|
|
988
|
+
procedures: arrayProcedures,
|
|
989
|
+
};
|
|
990
|
+
|
|
991
|
+
// Re-export individual procedures for direct access
|
|
992
|
+
export {
|
|
993
|
+
// Access
|
|
994
|
+
firstProcedure,
|
|
995
|
+
lastProcedure,
|
|
996
|
+
nthProcedure,
|
|
997
|
+
arrLengthProcedure,
|
|
998
|
+
// Transform
|
|
999
|
+
flattenProcedure,
|
|
1000
|
+
reverseProcedure,
|
|
1001
|
+
sortProcedure,
|
|
1002
|
+
sliceProcedure,
|
|
1003
|
+
arrConcatProcedure,
|
|
1004
|
+
uniqueProcedure,
|
|
1005
|
+
groupByProcedure,
|
|
1006
|
+
zipProcedure,
|
|
1007
|
+
unzipProcedure,
|
|
1008
|
+
// Search
|
|
1009
|
+
indexOfProcedure,
|
|
1010
|
+
containsProcedure,
|
|
1011
|
+
// Mutation (immutable)
|
|
1012
|
+
pushProcedure,
|
|
1013
|
+
unshiftProcedure,
|
|
1014
|
+
// Generation
|
|
1015
|
+
rangeProcedure,
|
|
1016
|
+
// Filtering (Core Logic + Filtering Separation)
|
|
1017
|
+
filterProcedure,
|
|
1018
|
+
whereProcedure,
|
|
1019
|
+
pluckProcedure,
|
|
1020
|
+
arrPickProcedure,
|
|
1021
|
+
arrOmitProcedure,
|
|
1022
|
+
partitionProcedure,
|
|
1023
|
+
countProcedure,
|
|
1024
|
+
};
|