@ahoo-wang/wow-client 9.2.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +291 -0
- package/README.zh-CN.md +267 -0
- package/dist/_virtual/_@oxc-project_runtime@0.151.0/helpers/esm/decorate.cjs +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.151.0/helpers/esm/decorate.es.js +9 -0
- package/dist/_virtual/_@oxc-project_runtime@0.151.0/helpers/esm/decorateMetadata.cjs +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.151.0/helpers/esm/decorateMetadata.es.js +6 -0
- package/dist/_virtual/_@oxc-project_runtime@0.151.0/helpers/esm/decorateParam.cjs +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.151.0/helpers/esm/decorateParam.es.js +8 -0
- package/dist/client/bindMethods.cjs +2 -0
- package/dist/client/bindMethods.cjs.map +1 -0
- package/dist/client/bindMethods.d.cts +13 -0
- package/dist/client/bindMethods.d.ts +13 -0
- package/dist/client/bindMethods.es.js +19 -0
- package/dist/client/bindMethods.es.js.map +1 -0
- package/dist/client/command/commandClient.cjs +2 -0
- package/dist/client/command/commandClient.cjs.map +1 -0
- package/dist/client/command/commandClient.d.cts +67 -0
- package/dist/client/command/commandClient.d.ts +67 -0
- package/dist/client/command/commandClient.es.js +38 -0
- package/dist/client/command/commandClient.es.js.map +1 -0
- package/dist/client/command/commandHeaders.cjs +2 -0
- package/dist/client/command/commandHeaders.cjs.map +1 -0
- package/dist/client/command/commandHeaders.d.cts +75 -0
- package/dist/client/command/commandHeaders.d.ts +75 -0
- package/dist/client/command/commandHeaders.es.js +31 -0
- package/dist/client/command/commandHeaders.es.js.map +1 -0
- package/dist/client/command/commandRequest.cjs +2 -0
- package/dist/client/command/commandRequest.cjs.map +1 -0
- package/dist/client/command/commandRequest.d.cts +180 -0
- package/dist/client/command/commandRequest.d.ts +180 -0
- package/dist/client/command/commandRequest.es.js +31 -0
- package/dist/client/command/commandRequest.es.js.map +1 -0
- package/dist/client/command/commandResult.d.cts +15 -0
- package/dist/client/command/commandResult.d.ts +15 -0
- package/dist/client/command/index.d.cts +5 -0
- package/dist/client/command/index.d.ts +5 -0
- package/dist/client/command/types.d.cts +71 -0
- package/dist/client/command/types.d.ts +71 -0
- package/dist/client/metadata/index.d.cts +2 -0
- package/dist/client/metadata/index.d.ts +2 -0
- package/dist/client/metadata/wowMetadata.d.cts +48 -0
- package/dist/client/metadata/wowMetadata.d.ts +48 -0
- package/dist/client/metadata/wowMetadataClient.cjs +2 -0
- package/dist/client/metadata/wowMetadataClient.cjs.map +1 -0
- package/dist/client/metadata/wowMetadataClient.d.cts +23 -0
- package/dist/client/metadata/wowMetadataClient.d.ts +23 -0
- package/dist/client/metadata/wowMetadataClient.es.js +25 -0
- package/dist/client/metadata/wowMetadataClient.es.js.map +1 -0
- package/dist/client/query/descriptor/descriptorEndpoints.cjs +2 -0
- package/dist/client/query/descriptor/descriptorEndpoints.cjs.map +1 -0
- package/dist/client/query/descriptor/descriptorEndpoints.d.cts +29 -0
- package/dist/client/query/descriptor/descriptorEndpoints.d.ts +29 -0
- package/dist/client/query/descriptor/descriptorEndpoints.es.js +69 -0
- package/dist/client/query/descriptor/descriptorEndpoints.es.js.map +1 -0
- package/dist/client/query/descriptor/endpointPaths.cjs +2 -0
- package/dist/client/query/descriptor/endpointPaths.cjs.map +1 -0
- package/dist/client/query/descriptor/endpointPaths.d.cts +4 -0
- package/dist/client/query/descriptor/endpointPaths.d.ts +4 -0
- package/dist/client/query/descriptor/endpointPaths.es.js +9 -0
- package/dist/client/query/descriptor/endpointPaths.es.js.map +1 -0
- package/dist/client/query/descriptor/index.d.cts +2 -0
- package/dist/client/query/descriptor/index.d.ts +2 -0
- package/dist/client/query/descriptor/queryDescriptorApi.d.cts +58 -0
- package/dist/client/query/descriptor/queryDescriptorApi.d.ts +58 -0
- package/dist/client/query/descriptor/queryDescriptorClient.cjs +2 -0
- package/dist/client/query/descriptor/queryDescriptorClient.cjs.map +1 -0
- package/dist/client/query/descriptor/queryDescriptorClient.d.cts +61 -0
- package/dist/client/query/descriptor/queryDescriptorClient.d.ts +61 -0
- package/dist/client/query/descriptor/queryDescriptorClient.es.js +20 -0
- package/dist/client/query/descriptor/queryDescriptorClient.es.js.map +1 -0
- package/dist/client/query/event/domainEventStream.cjs +2 -0
- package/dist/client/query/event/domainEventStream.cjs.map +1 -0
- package/dist/client/query/event/domainEventStream.d.cts +105 -0
- package/dist/client/query/event/domainEventStream.d.ts +105 -0
- package/dist/client/query/event/domainEventStream.es.js +23 -0
- package/dist/client/query/event/domainEventStream.es.js.map +1 -0
- package/dist/client/query/event/endpointPaths.cjs +2 -0
- package/dist/client/query/event/endpointPaths.cjs.map +1 -0
- package/dist/client/query/event/endpointPaths.d.cts +8 -0
- package/dist/client/query/event/endpointPaths.d.ts +8 -0
- package/dist/client/query/event/endpointPaths.es.js +13 -0
- package/dist/client/query/event/endpointPaths.es.js.map +1 -0
- package/dist/client/query/event/eventStreamQueryApi.d.cts +29 -0
- package/dist/client/query/event/eventStreamQueryApi.d.ts +29 -0
- package/dist/client/query/event/eventStreamQueryClient.cjs +2 -0
- package/dist/client/query/event/eventStreamQueryClient.cjs.map +1 -0
- package/dist/client/query/event/eventStreamQueryClient.d.cts +190 -0
- package/dist/client/query/event/eventStreamQueryClient.d.ts +190 -0
- package/dist/client/query/event/eventStreamQueryClient.es.js +160 -0
- package/dist/client/query/event/eventStreamQueryClient.es.js.map +1 -0
- package/dist/client/query/event/index.d.cts +3 -0
- package/dist/client/query/event/index.d.ts +3 -0
- package/dist/client/query/factory.cjs +2 -0
- package/dist/client/query/factory.cjs.map +1 -0
- package/dist/client/query/factory.d.cts +165 -0
- package/dist/client/query/factory.d.ts +165 -0
- package/dist/client/query/factory.es.js +45 -0
- package/dist/client/query/factory.es.js.map +1 -0
- package/dist/client/query/index.d.cts +6 -0
- package/dist/client/query/index.d.ts +6 -0
- package/dist/client/query/queryApi.d.cts +68 -0
- package/dist/client/query/queryApi.d.ts +68 -0
- package/dist/client/query/requests.d.cts +24 -0
- package/dist/client/query/requests.d.ts +24 -0
- package/dist/client/query/snapshot/endpointPaths.cjs +2 -0
- package/dist/client/query/snapshot/endpointPaths.cjs.map +1 -0
- package/dist/client/query/snapshot/endpointPaths.d.cts +12 -0
- package/dist/client/query/snapshot/endpointPaths.d.ts +12 -0
- package/dist/client/query/snapshot/endpointPaths.es.js +17 -0
- package/dist/client/query/snapshot/endpointPaths.es.js.map +1 -0
- package/dist/client/query/snapshot/index.d.cts +3 -0
- package/dist/client/query/snapshot/index.d.ts +3 -0
- package/dist/client/query/snapshot/snapshot.cjs +2 -0
- package/dist/client/query/snapshot/snapshot.cjs.map +1 -0
- package/dist/client/query/snapshot/snapshot.d.cts +51 -0
- package/dist/client/query/snapshot/snapshot.d.ts +51 -0
- package/dist/client/query/snapshot/snapshot.es.js +20 -0
- package/dist/client/query/snapshot/snapshot.es.js.map +1 -0
- package/dist/client/query/snapshot/snapshotQueryApi.d.cts +101 -0
- package/dist/client/query/snapshot/snapshotQueryApi.d.ts +101 -0
- package/dist/client/query/snapshot/snapshotQueryClient.cjs +2 -0
- package/dist/client/query/snapshot/snapshotQueryClient.cjs.map +1 -0
- package/dist/client/query/snapshot/snapshotQueryClient.d.cts +369 -0
- package/dist/client/query/snapshot/snapshotQueryClient.d.ts +369 -0
- package/dist/client/query/snapshot/snapshotQueryClient.es.js +239 -0
- package/dist/client/query/snapshot/snapshotQueryClient.es.js.map +1 -0
- package/dist/client/query/state/endpointPaths.cjs +2 -0
- package/dist/client/query/state/endpointPaths.cjs.map +1 -0
- package/dist/client/query/state/endpointPaths.d.cts +10 -0
- package/dist/client/query/state/endpointPaths.d.ts +10 -0
- package/dist/client/query/state/endpointPaths.es.js +14 -0
- package/dist/client/query/state/endpointPaths.es.js.map +1 -0
- package/dist/client/query/state/index.d.cts +4 -0
- package/dist/client/query/state/index.d.ts +4 -0
- package/dist/client/query/state/loadOwnerStateAggregateApi.d.cts +36 -0
- package/dist/client/query/state/loadOwnerStateAggregateApi.d.ts +36 -0
- package/dist/client/query/state/loadOwnerStateAggregateClient.cjs +2 -0
- package/dist/client/query/state/loadOwnerStateAggregateClient.cjs.map +1 -0
- package/dist/client/query/state/loadOwnerStateAggregateClient.d.cts +58 -0
- package/dist/client/query/state/loadOwnerStateAggregateClient.d.ts +58 -0
- package/dist/client/query/state/loadOwnerStateAggregateClient.es.js +56 -0
- package/dist/client/query/state/loadOwnerStateAggregateClient.es.js.map +1 -0
- package/dist/client/query/state/loadStateAggregateApi.d.cts +37 -0
- package/dist/client/query/state/loadStateAggregateApi.d.ts +37 -0
- package/dist/client/query/state/loadStateAggregateClient.cjs +2 -0
- package/dist/client/query/state/loadStateAggregateClient.cjs.map +1 -0
- package/dist/client/query/state/loadStateAggregateClient.d.cts +62 -0
- package/dist/client/query/state/loadStateAggregateClient.d.ts +62 -0
- package/dist/client/query/state/loadStateAggregateClient.es.js +65 -0
- package/dist/client/query/state/loadStateAggregateClient.es.js.map +1 -0
- package/dist/client/routing.cjs +2 -0
- package/dist/client/routing.cjs.map +1 -0
- package/dist/client/routing.d.cts +47 -0
- package/dist/client/routing.d.ts +47 -0
- package/dist/client/routing.es.js +8 -0
- package/dist/client/routing.es.js.map +1 -0
- package/dist/dsl/aggregation/admit.cjs +2 -0
- package/dist/dsl/aggregation/admit.cjs.map +1 -0
- package/dist/dsl/aggregation/admit.d.cts +6 -0
- package/dist/dsl/aggregation/admit.d.ts +6 -0
- package/dist/dsl/aggregation/admit.es.js +142 -0
- package/dist/dsl/aggregation/admit.es.js.map +1 -0
- package/dist/dsl/aggregation/builders.cjs +2 -0
- package/dist/dsl/aggregation/builders.cjs.map +1 -0
- package/dist/dsl/aggregation/builders.d.cts +309 -0
- package/dist/dsl/aggregation/builders.d.ts +309 -0
- package/dist/dsl/aggregation/builders.es.js +188 -0
- package/dist/dsl/aggregation/builders.es.js.map +1 -0
- package/dist/dsl/aggregation/derived.cjs +2 -0
- package/dist/dsl/aggregation/derived.cjs.map +1 -0
- package/dist/dsl/aggregation/derived.d.cts +33 -0
- package/dist/dsl/aggregation/derived.d.ts +33 -0
- package/dist/dsl/aggregation/derived.es.js +31 -0
- package/dist/dsl/aggregation/derived.es.js.map +1 -0
- package/dist/dsl/aggregation/expressionTrees.cjs +2 -0
- package/dist/dsl/aggregation/expressionTrees.cjs.map +1 -0
- package/dist/dsl/aggregation/expressionTrees.d.cts +10 -0
- package/dist/dsl/aggregation/expressionTrees.d.ts +10 -0
- package/dist/dsl/aggregation/expressionTrees.es.js +44 -0
- package/dist/dsl/aggregation/expressionTrees.es.js.map +1 -0
- package/dist/dsl/aggregation/having.cjs +2 -0
- package/dist/dsl/aggregation/having.cjs.map +1 -0
- package/dist/dsl/aggregation/having.d.cts +94 -0
- package/dist/dsl/aggregation/having.d.ts +94 -0
- package/dist/dsl/aggregation/having.es.js +62 -0
- package/dist/dsl/aggregation/having.es.js.map +1 -0
- package/dist/dsl/aggregation/index.d.cts +4 -0
- package/dist/dsl/aggregation/index.d.ts +4 -0
- package/dist/dsl/aggregation/sort.cjs +2 -0
- package/dist/dsl/aggregation/sort.cjs.map +1 -0
- package/dist/dsl/aggregation/sort.d.cts +7 -0
- package/dist/dsl/aggregation/sort.d.ts +7 -0
- package/dist/dsl/aggregation/sort.es.js +10 -0
- package/dist/dsl/aggregation/sort.es.js.map +1 -0
- package/dist/dsl/aggregation/types.cjs +2 -0
- package/dist/dsl/aggregation/types.cjs.map +1 -0
- package/dist/dsl/aggregation/types.d.cts +608 -0
- package/dist/dsl/aggregation/types.d.ts +608 -0
- package/dist/dsl/aggregation/types.es.js +37 -0
- package/dist/dsl/aggregation/types.es.js.map +1 -0
- package/dist/dsl/cursorQuery.cjs +2 -0
- package/dist/dsl/cursorQuery.cjs.map +1 -0
- package/dist/dsl/cursorQuery.d.cts +69 -0
- package/dist/dsl/cursorQuery.d.ts +69 -0
- package/dist/dsl/cursorQuery.es.js +19 -0
- package/dist/dsl/cursorQuery.es.js.map +1 -0
- package/dist/dsl/deletionState.cjs +2 -0
- package/dist/dsl/deletionState.cjs.map +1 -0
- package/dist/dsl/deletionState.d.cts +19 -0
- package/dist/dsl/deletionState.d.ts +19 -0
- package/dist/dsl/deletionState.es.js +8 -0
- package/dist/dsl/deletionState.es.js.map +1 -0
- package/dist/dsl/descriptor.cjs +2 -0
- package/dist/dsl/descriptor.cjs.map +1 -0
- package/dist/dsl/descriptor.d.cts +629 -0
- package/dist/dsl/descriptor.d.ts +629 -0
- package/dist/dsl/descriptor.es.js +37 -0
- package/dist/dsl/descriptor.es.js.map +1 -0
- package/dist/dsl/documents.d.cts +8 -0
- package/dist/dsl/documents.d.ts +8 -0
- package/dist/dsl/field.cjs +2 -0
- package/dist/dsl/field.cjs.map +1 -0
- package/dist/dsl/field.d.cts +2 -0
- package/dist/dsl/field.d.ts +2 -0
- package/dist/dsl/field.es.js +10 -0
- package/dist/dsl/field.es.js.map +1 -0
- package/dist/dsl/filter/builders.cjs +2 -0
- package/dist/dsl/filter/builders.cjs.map +1 -0
- package/dist/dsl/filter/builders.d.cts +962 -0
- package/dist/dsl/filter/builders.d.ts +962 -0
- package/dist/dsl/filter/builders.es.js +289 -0
- package/dist/dsl/filter/builders.es.js.map +1 -0
- package/dist/dsl/filter/datePattern.cjs +2 -0
- package/dist/dsl/filter/datePattern.cjs.map +1 -0
- package/dist/dsl/filter/datePattern.d.cts +8 -0
- package/dist/dsl/filter/datePattern.d.ts +8 -0
- package/dist/dsl/filter/datePattern.es.js +100 -0
- package/dist/dsl/filter/datePattern.es.js.map +1 -0
- package/dist/dsl/filter/index.d.cts +3 -0
- package/dist/dsl/filter/index.d.ts +3 -0
- package/dist/dsl/filter/operator.cjs +2 -0
- package/dist/dsl/filter/operator.cjs.map +1 -0
- package/dist/dsl/filter/operator.d.cts +113 -0
- package/dist/dsl/filter/operator.d.ts +113 -0
- package/dist/dsl/filter/operator.es.js +14 -0
- package/dist/dsl/filter/operator.es.js.map +1 -0
- package/dist/dsl/filter/scope.cjs +2 -0
- package/dist/dsl/filter/scope.cjs.map +1 -0
- package/dist/dsl/filter/scope.d.cts +15 -0
- package/dist/dsl/filter/scope.d.ts +15 -0
- package/dist/dsl/filter/scope.es.js +32 -0
- package/dist/dsl/filter/scope.es.js.map +1 -0
- package/dist/dsl/filter/types.d.cts +274 -0
- package/dist/dsl/filter/types.d.ts +274 -0
- package/dist/dsl/filter/validate.cjs +2 -0
- package/dist/dsl/filter/validate.cjs.map +1 -0
- package/dist/dsl/filter/validate.d.cts +18 -0
- package/dist/dsl/filter/validate.d.ts +18 -0
- package/dist/dsl/filter/validate.es.js +56 -0
- package/dist/dsl/filter/validate.es.js.map +1 -0
- package/dist/dsl/pagination.cjs +2 -0
- package/dist/dsl/pagination.cjs.map +1 -0
- package/dist/dsl/pagination.d.cts +28 -0
- package/dist/dsl/pagination.d.ts +28 -0
- package/dist/dsl/pagination.es.js +15 -0
- package/dist/dsl/pagination.es.js.map +1 -0
- package/dist/dsl/projection.cjs +2 -0
- package/dist/dsl/projection.cjs.map +1 -0
- package/dist/dsl/projection.d.cts +27 -0
- package/dist/dsl/projection.d.ts +27 -0
- package/dist/dsl/projection.es.js +12 -0
- package/dist/dsl/projection.es.js.map +1 -0
- package/dist/dsl/queryable.cjs +2 -0
- package/dist/dsl/queryable.cjs.map +1 -0
- package/dist/dsl/queryable.d.cts +101 -0
- package/dist/dsl/queryable.d.ts +101 -0
- package/dist/dsl/queryable.es.js +40 -0
- package/dist/dsl/queryable.es.js.map +1 -0
- package/dist/dsl/sort.cjs +2 -0
- package/dist/dsl/sort.cjs.map +1 -0
- package/dist/dsl/sort.d.cts +33 -0
- package/dist/dsl/sort.d.ts +33 -0
- package/dist/dsl/sort.es.js +21 -0
- package/dist/dsl/sort.es.js.map +1 -0
- package/dist/dsl.cjs +1 -0
- package/dist/dsl.d.cts +23 -0
- package/dist/dsl.d.ts +23 -0
- package/dist/dsl.es.js +14 -0
- package/dist/error/errorInfo.cjs +2 -0
- package/dist/error/errorInfo.cjs.map +1 -0
- package/dist/error/errorInfo.d.cts +139 -0
- package/dist/error/errorInfo.d.ts +139 -0
- package/dist/error/errorInfo.es.js +32 -0
- package/dist/error/errorInfo.es.js.map +1 -0
- package/dist/error/headers.cjs +2 -0
- package/dist/error/headers.cjs.map +1 -0
- package/dist/error/headers.d.cts +38 -0
- package/dist/error/headers.d.ts +38 -0
- package/dist/error/headers.es.js +10 -0
- package/dist/error/headers.es.js.map +1 -0
- package/dist/error/index.d.cts +21 -0
- package/dist/error/index.d.ts +21 -0
- package/dist/error/queryErrorCodes.cjs +2 -0
- package/dist/error/queryErrorCodes.cjs.map +1 -0
- package/dist/error/queryErrorCodes.d.cts +199 -0
- package/dist/error/queryErrorCodes.d.ts +199 -0
- package/dist/error/queryErrorCodes.es.js +53 -0
- package/dist/error/queryErrorCodes.es.js.map +1 -0
- package/dist/error/wowError.cjs +2 -0
- package/dist/error/wowError.cjs.map +1 -0
- package/dist/error/wowError.d.cts +99 -0
- package/dist/error/wowError.d.ts +99 -0
- package/dist/error/wowError.es.js +53 -0
- package/dist/error/wowError.es.js.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +17 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.es.js +34 -0
- package/dist/legacy/condition.cjs +2 -0
- package/dist/legacy/condition.cjs.map +1 -0
- package/dist/legacy/condition.d.cts +517 -0
- package/dist/legacy/condition.d.ts +517 -0
- package/dist/legacy/condition.es.js +338 -0
- package/dist/legacy/condition.es.js.map +1 -0
- package/dist/legacy/index.d.cts +16 -0
- package/dist/legacy/index.d.ts +16 -0
- package/dist/legacy/locale/en_US.cjs +2 -0
- package/dist/legacy/locale/en_US.cjs.map +1 -0
- package/dist/legacy/locale/en_US.d.cts +7 -0
- package/dist/legacy/locale/en_US.d.ts +7 -0
- package/dist/legacy/locale/en_US.es.js +50 -0
- package/dist/legacy/locale/en_US.es.js.map +1 -0
- package/dist/legacy/locale/operatorLocale.d.cts +10 -0
- package/dist/legacy/locale/operatorLocale.d.ts +10 -0
- package/dist/legacy/locale/zh_CN.cjs +2 -0
- package/dist/legacy/locale/zh_CN.cjs.map +1 -0
- package/dist/legacy/locale/zh_CN.d.cts +7 -0
- package/dist/legacy/locale/zh_CN.d.ts +7 -0
- package/dist/legacy/locale/zh_CN.es.js +50 -0
- package/dist/legacy/locale/zh_CN.es.js.map +1 -0
- package/dist/legacy/operator.cjs +2 -0
- package/dist/legacy/operator.cjs.map +1 -0
- package/dist/legacy/operator.d.cts +218 -0
- package/dist/legacy/operator.d.ts +218 -0
- package/dist/legacy/operator.es.js +25 -0
- package/dist/legacy/operator.es.js.map +1 -0
- package/dist/legacy/queryable.cjs +2 -0
- package/dist/legacy/queryable.cjs.map +1 -0
- package/dist/legacy/queryable.d.cts +61 -0
- package/dist/legacy/queryable.d.ts +61 -0
- package/dist/legacy/queryable.es.js +34 -0
- package/dist/legacy/queryable.es.js.map +1 -0
- package/dist/legacy.cjs +1 -0
- package/dist/legacy.es.js +6 -0
- package/dist/model/abac.cjs +2 -0
- package/dist/model/abac.cjs.map +1 -0
- package/dist/model/abac.d.cts +33 -0
- package/dist/model/abac.d.ts +33 -0
- package/dist/model/abac.es.js +6 -0
- package/dist/model/abac.es.js.map +1 -0
- package/dist/model/bi.cjs +2 -0
- package/dist/model/bi.cjs.map +1 -0
- package/dist/model/bi.d.cts +12 -0
- package/dist/model/bi.d.ts +12 -0
- package/dist/model/bi.es.js +8 -0
- package/dist/model/bi.es.js.map +1 -0
- package/dist/model/command.cjs +2 -0
- package/dist/model/command.cjs.map +1 -0
- package/dist/model/command.d.cts +137 -0
- package/dist/model/command.d.ts +137 -0
- package/dist/model/command.es.js +8 -0
- package/dist/model/command.es.js.map +1 -0
- package/dist/model/common.d.cts +19 -0
- package/dist/model/common.d.ts +19 -0
- package/dist/model/function.cjs +2 -0
- package/dist/model/function.cjs.map +1 -0
- package/dist/model/function.d.cts +41 -0
- package/dist/model/function.d.ts +41 -0
- package/dist/model/function.es.js +8 -0
- package/dist/model/function.es.js.map +1 -0
- package/dist/model/index.d.cts +22 -0
- package/dist/model/index.d.ts +22 -0
- package/dist/model/messaging.d.cts +5 -0
- package/dist/model/messaging.d.ts +5 -0
- package/dist/model/modeling.d.cts +145 -0
- package/dist/model/modeling.d.ts +145 -0
- package/dist/model/naming.d.cts +27 -0
- package/dist/model/naming.d.ts +27 -0
- package/dist/transport/endpoints.cjs +2 -0
- package/dist/transport/endpoints.cjs.map +1 -0
- package/dist/transport/endpoints.d.cts +79 -0
- package/dist/transport/endpoints.d.ts +79 -0
- package/dist/transport/endpoints.es.js +14 -0
- package/dist/transport/endpoints.es.js.map +1 -0
- package/dist/transport/eventStreams.cjs +2 -0
- package/dist/transport/eventStreams.cjs.map +1 -0
- package/dist/transport/eventStreams.d.cts +23 -0
- package/dist/transport/eventStreams.d.ts +23 -0
- package/dist/transport/eventStreams.es.js +22 -0
- package/dist/transport/eventStreams.es.js.map +1 -0
- package/dist/transport/index.d.cts +1 -0
- package/dist/transport/index.d.ts +1 -0
- package/package.json +110 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { FilterOperator as e, SearchMode as t, StringComparison as n } from "./operator.es.js";
|
|
2
|
+
import { ComparisonOperator as r } from "../aggregation/types.es.js";
|
|
3
|
+
import { expressionFields as i, requireValidExpressionTrees as a } from "../aggregation/expressionTrees.es.js";
|
|
4
|
+
import { DeletionState as o } from "../deletionState.es.js";
|
|
5
|
+
import { queryField as s } from "../field.es.js";
|
|
6
|
+
import { requireElementScopedFilter as c } from "./scope.es.js";
|
|
7
|
+
import { filterLiteral as l, requireDuration as u, requireLocalTime as d, requireNonEmpty as f, requiredString as p, validateDays as m, validateRelativeTimeOptions as h, validateStringComparison as g } from "./validate.es.js";
|
|
8
|
+
//#region src/dsl/filter/builders.ts
|
|
9
|
+
function _(e, t) {
|
|
10
|
+
return {
|
|
11
|
+
op: e,
|
|
12
|
+
value: p(`${e} value`, t)
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function v(e, t) {
|
|
16
|
+
return f(`${e} values`, t), t.forEach((t) => p(`${e} value`, t)), {
|
|
17
|
+
op: e,
|
|
18
|
+
values: [...t]
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function y(e, t) {
|
|
22
|
+
return f(`${e} operands`, t), {
|
|
23
|
+
op: e,
|
|
24
|
+
operands: [...t]
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function b(e, t, n) {
|
|
28
|
+
return {
|
|
29
|
+
op: e,
|
|
30
|
+
field: s(t),
|
|
31
|
+
value: l(n, !0)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function x(e, t, n) {
|
|
35
|
+
return {
|
|
36
|
+
op: e,
|
|
37
|
+
field: s(t),
|
|
38
|
+
value: l(n, !1)
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function S(e, t, n, r) {
|
|
42
|
+
return g(r), {
|
|
43
|
+
op: e,
|
|
44
|
+
field: s(t),
|
|
45
|
+
value: p(`${e} value`, n),
|
|
46
|
+
stringComparison: r
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function C(e, t, n) {
|
|
50
|
+
return f(`${e} values`, n), n.forEach((e) => l(e, !1)), {
|
|
51
|
+
op: e,
|
|
52
|
+
field: s(t),
|
|
53
|
+
values: [...n]
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function w(e, t) {
|
|
57
|
+
return {
|
|
58
|
+
op: e,
|
|
59
|
+
field: s(t)
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function T(e, t, n) {
|
|
63
|
+
return {
|
|
64
|
+
...h(n),
|
|
65
|
+
op: e,
|
|
66
|
+
field: s(t)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function E(e, t, n, r) {
|
|
70
|
+
return m(e, n), {
|
|
71
|
+
...h(r),
|
|
72
|
+
op: e,
|
|
73
|
+
field: s(t),
|
|
74
|
+
days: n
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function D(e, t, n, r) {
|
|
78
|
+
return u(e, n), {
|
|
79
|
+
...h(r),
|
|
80
|
+
op: e,
|
|
81
|
+
field: s(t),
|
|
82
|
+
offset: n
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function O(t) {
|
|
86
|
+
return y(e.AND, t);
|
|
87
|
+
}
|
|
88
|
+
function k(t) {
|
|
89
|
+
return y(e.OR, t);
|
|
90
|
+
}
|
|
91
|
+
function A(t) {
|
|
92
|
+
return y(e.NOR, t);
|
|
93
|
+
}
|
|
94
|
+
function j(n, r) {
|
|
95
|
+
if (typeof n != "string" || !n.trim()) throw TypeError("SEARCH query cannot be blank.");
|
|
96
|
+
if (r !== void 0 && (typeof r != "object" || !r || Array.isArray(r))) throw TypeError("SEARCH options must be a non-null object.");
|
|
97
|
+
let { fields: i = [], mode: a = t.TERMS } = r ?? {};
|
|
98
|
+
if (!Object.values(t).includes(a)) throw TypeError(`SEARCH mode is invalid: [${String(a)}].`);
|
|
99
|
+
return {
|
|
100
|
+
op: e.SEARCH,
|
|
101
|
+
query: n,
|
|
102
|
+
mode: a,
|
|
103
|
+
fields: i.map(s)
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
var M = {
|
|
107
|
+
matchAll() {
|
|
108
|
+
return { op: e.MATCH_ALL };
|
|
109
|
+
},
|
|
110
|
+
matchNone() {
|
|
111
|
+
return { op: e.MATCH_NONE };
|
|
112
|
+
},
|
|
113
|
+
id(t) {
|
|
114
|
+
return _(e.ID, t);
|
|
115
|
+
},
|
|
116
|
+
ids(t) {
|
|
117
|
+
return v(e.IDS, t);
|
|
118
|
+
},
|
|
119
|
+
aggregateId(t) {
|
|
120
|
+
return _(e.AGGREGATE_ID, t);
|
|
121
|
+
},
|
|
122
|
+
aggregateIds(t) {
|
|
123
|
+
return v(e.AGGREGATE_IDS, t);
|
|
124
|
+
},
|
|
125
|
+
tenantId(t) {
|
|
126
|
+
return _(e.TENANT_ID, t);
|
|
127
|
+
},
|
|
128
|
+
ownerId(t) {
|
|
129
|
+
return _(e.OWNER_ID, t);
|
|
130
|
+
},
|
|
131
|
+
spaceId(t) {
|
|
132
|
+
return _(e.SPACE_ID, t);
|
|
133
|
+
},
|
|
134
|
+
and: O,
|
|
135
|
+
or: k,
|
|
136
|
+
nor: A,
|
|
137
|
+
eq(t, n) {
|
|
138
|
+
return b(e.EQ, t, n);
|
|
139
|
+
},
|
|
140
|
+
ne(t, n) {
|
|
141
|
+
return b(e.NE, t, n);
|
|
142
|
+
},
|
|
143
|
+
gt(t, n) {
|
|
144
|
+
return x(e.GT, t, n);
|
|
145
|
+
},
|
|
146
|
+
gte(t, n) {
|
|
147
|
+
return x(e.GTE, t, n);
|
|
148
|
+
},
|
|
149
|
+
lt(t, n) {
|
|
150
|
+
return x(e.LT, t, n);
|
|
151
|
+
},
|
|
152
|
+
lte(t, n) {
|
|
153
|
+
return x(e.LTE, t, n);
|
|
154
|
+
},
|
|
155
|
+
contains(t, r, i = n.CASE_SENSITIVE) {
|
|
156
|
+
return S(e.CONTAINS, t, r, i);
|
|
157
|
+
},
|
|
158
|
+
startsWith(t, r, i = n.CASE_SENSITIVE) {
|
|
159
|
+
return S(e.STARTS_WITH, t, r, i);
|
|
160
|
+
},
|
|
161
|
+
endsWith(t, r, i = n.CASE_SENSITIVE) {
|
|
162
|
+
return S(e.ENDS_WITH, t, r, i);
|
|
163
|
+
},
|
|
164
|
+
isIn(t, n) {
|
|
165
|
+
return C(e.IN, t, n);
|
|
166
|
+
},
|
|
167
|
+
notIn(t, n) {
|
|
168
|
+
return C(e.NOT_IN, t, n);
|
|
169
|
+
},
|
|
170
|
+
containsAll(t, n) {
|
|
171
|
+
return C(e.CONTAINS_ALL, t, n);
|
|
172
|
+
},
|
|
173
|
+
between(t, n, r) {
|
|
174
|
+
return {
|
|
175
|
+
op: e.BETWEEN,
|
|
176
|
+
field: s(t),
|
|
177
|
+
lowerBound: l(n, !1),
|
|
178
|
+
upperBound: l(r, !1)
|
|
179
|
+
};
|
|
180
|
+
},
|
|
181
|
+
isEmpty(t) {
|
|
182
|
+
return w(e.IS_EMPTY, t);
|
|
183
|
+
},
|
|
184
|
+
isEmptyString(t) {
|
|
185
|
+
return w(e.IS_EMPTY_STRING, t);
|
|
186
|
+
},
|
|
187
|
+
isNotEmptyString(t) {
|
|
188
|
+
return w(e.IS_NOT_EMPTY_STRING, t);
|
|
189
|
+
},
|
|
190
|
+
isNull(t) {
|
|
191
|
+
return w(e.IS_NULL, t);
|
|
192
|
+
},
|
|
193
|
+
isNotNull(t) {
|
|
194
|
+
return w(e.IS_NOT_NULL, t);
|
|
195
|
+
},
|
|
196
|
+
exists(t) {
|
|
197
|
+
return w(e.EXISTS, t);
|
|
198
|
+
},
|
|
199
|
+
notExists(t) {
|
|
200
|
+
return w(e.NOT_EXISTS, t);
|
|
201
|
+
},
|
|
202
|
+
deletion(t) {
|
|
203
|
+
if (t !== o.ACTIVE && t !== o.DELETED && t !== o.ALL) throw TypeError(`Deletion state is invalid: [${String(t)}].`);
|
|
204
|
+
return {
|
|
205
|
+
op: e.DELETION,
|
|
206
|
+
state: t
|
|
207
|
+
};
|
|
208
|
+
},
|
|
209
|
+
elementMatch(t, n) {
|
|
210
|
+
return c(n, "ELEMENT_MATCH predicate"), {
|
|
211
|
+
op: e.ELEMENT_MATCH,
|
|
212
|
+
field: s(t),
|
|
213
|
+
predicate: n
|
|
214
|
+
};
|
|
215
|
+
},
|
|
216
|
+
search: j,
|
|
217
|
+
today(t, n = {}) {
|
|
218
|
+
return T(e.TODAY, t, n);
|
|
219
|
+
},
|
|
220
|
+
beforeToday(t, n, r = {}) {
|
|
221
|
+
let i = d(n);
|
|
222
|
+
return {
|
|
223
|
+
...h(r),
|
|
224
|
+
op: e.BEFORE_TODAY,
|
|
225
|
+
field: s(t),
|
|
226
|
+
time: i
|
|
227
|
+
};
|
|
228
|
+
},
|
|
229
|
+
tomorrow(t, n = {}) {
|
|
230
|
+
return T(e.TOMORROW, t, n);
|
|
231
|
+
},
|
|
232
|
+
thisWeek(t, n = {}) {
|
|
233
|
+
return T(e.THIS_WEEK, t, n);
|
|
234
|
+
},
|
|
235
|
+
nextWeek(t, n = {}) {
|
|
236
|
+
return T(e.NEXT_WEEK, t, n);
|
|
237
|
+
},
|
|
238
|
+
lastWeek(t, n = {}) {
|
|
239
|
+
return T(e.LAST_WEEK, t, n);
|
|
240
|
+
},
|
|
241
|
+
thisMonth(t, n = {}) {
|
|
242
|
+
return T(e.THIS_MONTH, t, n);
|
|
243
|
+
},
|
|
244
|
+
lastMonth(t, n = {}) {
|
|
245
|
+
return T(e.LAST_MONTH, t, n);
|
|
246
|
+
},
|
|
247
|
+
yesterday(t, n = {}) {
|
|
248
|
+
return T(e.YESTERDAY, t, n);
|
|
249
|
+
},
|
|
250
|
+
nextMonth(t, n = {}) {
|
|
251
|
+
return T(e.NEXT_MONTH, t, n);
|
|
252
|
+
},
|
|
253
|
+
lastYear(t, n = {}) {
|
|
254
|
+
return T(e.LAST_YEAR, t, n);
|
|
255
|
+
},
|
|
256
|
+
thisYear(t, n = {}) {
|
|
257
|
+
return T(e.THIS_YEAR, t, n);
|
|
258
|
+
},
|
|
259
|
+
nextYear(t, n = {}) {
|
|
260
|
+
return T(e.NEXT_YEAR, t, n);
|
|
261
|
+
},
|
|
262
|
+
recentDays(t, n, r = {}) {
|
|
263
|
+
return E(e.RECENT_DAYS, t, n, r);
|
|
264
|
+
},
|
|
265
|
+
earlierDays(t, n, r = {}) {
|
|
266
|
+
return E(e.EARLIER_DAYS, t, n, r);
|
|
267
|
+
},
|
|
268
|
+
beforeNow(t, n = "PT0S", r = {}) {
|
|
269
|
+
return D(e.BEFORE_NOW, t, n, r);
|
|
270
|
+
},
|
|
271
|
+
afterNow(t, n = "PT0S", r = {}) {
|
|
272
|
+
return D(e.AFTER_NOW, t, n, r);
|
|
273
|
+
},
|
|
274
|
+
expression(t, n, o) {
|
|
275
|
+
if (!Number.isFinite(o)) throw TypeError("EXPRESSION value must be finite.");
|
|
276
|
+
if (!Object.values(r).includes(n)) throw TypeError(`EXPRESSION comparison is invalid: [${String(n)}].`);
|
|
277
|
+
if (i(t).length === 0) throw TypeError("EXPRESSION must read at least one field.");
|
|
278
|
+
return a([t]), {
|
|
279
|
+
op: e.EXPRESSION,
|
|
280
|
+
expression: t,
|
|
281
|
+
comparison: n,
|
|
282
|
+
value: o
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
//#endregion
|
|
287
|
+
export { M as filter };
|
|
288
|
+
|
|
289
|
+
//# sourceMappingURL=builders.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builders.es.js","names":["metadataValue","requiredString","op","value","metadataValues","requireNonEmpty","values","logical","operands","equality","queryField","field","filterLiteral","comparison","stringMatch","validateStringComparison","stringComparison","collection","presence","calendar","validateRelativeTimeOptions","options","dayWindow","validateDays","days","nowRelative","requireDuration","offset","andFilter","FilterOperator","orFilter","norFilter","search","query","SearchMode","mode","fields","filter","StringComparison","lowerBound","upperBound","state","DeletionState","requireElementScopedFilter","predicate","localTime","requireLocalTime","time","ComparisonOperator","expressionFields","expression","requireValidExpressionTrees"],"sources":["../../../src/dsl/filter/builders.ts"],"sourcesContent":["/*\n * Copyright [2021-present] [ahoo wang <ahoowang@qq.com> (https://github.com/Ahoo-Wang)].\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * http://www.apache.org/licenses/LICENSE-2.0\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n expressionFields,\n requireValidExpressionTrees,\n} from '../aggregation/expressionTrees.js';\nimport {\n ComparisonOperator,\n type AggregationExpression,\n} from '../aggregation/types.js';\nimport { DeletionState } from '../deletionState.js';\nimport { queryField } from '../field.js';\nimport { FilterOperator, SearchMode, StringComparison } from './operator.js';\nimport { requireElementScopedFilter } from './scope.js';\nimport type {\n BeforeTodayFilter,\n BetweenFilter,\n CalendarFilter,\n CollectionFilter,\n ComparableFilterLiteral,\n ComparisonFilter,\n DaysFilter,\n DeletionFilter,\n ElementFilterExpression,\n ElementLogicalFilter,\n ElementMatchFilter,\n EqualityFilter,\n EqualityFilterValue,\n FieldPresenceFilter,\n FilterExpression,\n LogicalFilter,\n MatchFilter,\n MetadataValueFilter,\n MetadataValuesFilter,\n NowFilter,\n RelativeTimeFilterOptions,\n SearchFilter,\n SearchFilterOptions,\n StringFilter,\n ElementSearchFilter,\n QueryField,\n ExpressionFilter,\n} from './types.js';\nimport {\n filterLiteral,\n requireLocalTime,\n requireDuration,\n requireNonEmpty,\n requiredString,\n validateDays,\n validateRelativeTimeOptions,\n validateStringComparison,\n} from './validate.js';\n\n// One builder per filter shape, keyed by the operator. Each shape's public\n// builders below differ only in the operator they pass, so a new operator of\n// an existing shape is one enum member, one type-union member and one line\n// here; its JSDoc goes on the public builder, where the IDE shows it.\n\nfunction metadataValue(\n op: MetadataValueFilter['op'],\n value: string,\n): MetadataValueFilter {\n return { op, value: requiredString(`${op} value`, value) };\n}\n\nfunction metadataValues(\n op: MetadataValuesFilter['op'],\n values: readonly string[],\n): MetadataValuesFilter {\n requireNonEmpty(`${op} values`, values);\n values.forEach(value => requiredString(`${op} value`, value));\n return { op, values: [...values] };\n}\n\nfunction logical<FIELDS extends string>(\n op: LogicalFilter['op'],\n operands: readonly FilterExpression<FIELDS>[],\n): LogicalFilter<FIELDS> {\n requireNonEmpty(`${op} operands`, operands);\n return { op, operands: [...operands] };\n}\n\nfunction equality<FIELDS extends string>(\n op: EqualityFilter['op'],\n field: FIELDS,\n value: EqualityFilterValue,\n): EqualityFilter<FIELDS> {\n return { op, field: queryField(field), value: filterLiteral(value, true) };\n}\n\nfunction comparison<FIELDS extends string>(\n op: ComparisonFilter['op'],\n field: FIELDS,\n value: ComparableFilterLiteral,\n): ComparisonFilter<FIELDS> {\n return { op, field: queryField(field), value: filterLiteral(value, false) };\n}\n\nfunction stringMatch<FIELDS extends string>(\n op: StringFilter['op'],\n field: FIELDS,\n value: string,\n stringComparison: StringComparison,\n): StringFilter<FIELDS> {\n validateStringComparison(stringComparison);\n return {\n op,\n field: queryField(field),\n value: requiredString(`${op} value`, value),\n stringComparison,\n };\n}\n\nfunction collection<FIELDS extends string>(\n op: CollectionFilter['op'],\n field: FIELDS,\n values: readonly ComparableFilterLiteral[],\n): CollectionFilter<FIELDS> {\n requireNonEmpty(`${op} values`, values);\n values.forEach(value => filterLiteral(value, false));\n return { op, field: queryField(field), values: [...values] };\n}\n\nfunction presence<FIELDS extends string>(\n op: FieldPresenceFilter['op'],\n field: FIELDS,\n): FieldPresenceFilter<FIELDS> {\n return { op, field: queryField(field) };\n}\n\nfunction calendar<FIELDS extends string>(\n op: CalendarFilter['op'],\n field: FIELDS,\n options: RelativeTimeFilterOptions,\n): CalendarFilter<FIELDS> {\n return {\n ...validateRelativeTimeOptions(options),\n op,\n field: queryField(field),\n };\n}\n\nfunction dayWindow<FIELDS extends string>(\n op: DaysFilter['op'],\n field: FIELDS,\n days: number,\n options: RelativeTimeFilterOptions,\n): DaysFilter<FIELDS> {\n validateDays(op, days);\n return {\n ...validateRelativeTimeOptions(options),\n op,\n field: queryField(field),\n days,\n };\n}\n\nfunction nowRelative<FIELDS extends string>(\n op: NowFilter['op'],\n field: FIELDS,\n offset: string,\n options: RelativeTimeFilterOptions,\n): NowFilter<FIELDS> {\n requireDuration(op, offset);\n return {\n ...validateRelativeTimeOptions(options),\n op,\n field: queryField(field),\n offset,\n };\n}\n\n/**\n * `filter.and`: matches when all of `operands` match. With element-scoped\n * operands only, the result is element-scoped too, so it can be an\n * `ELEMENT_MATCH` predicate.\n */\nfunction andFilter<FIELDS extends string>(\n operands: readonly ElementFilterExpression<FIELDS>[],\n): ElementLogicalFilter<FIELDS>;\n/** `filter.and`: matches when all of `operands` match. */\nfunction andFilter<FIELDS extends string>(\n operands: readonly FilterExpression<FIELDS>[],\n): LogicalFilter<FIELDS>;\nfunction andFilter<FIELDS extends string>(\n operands: readonly FilterExpression<FIELDS>[],\n): LogicalFilter<FIELDS> {\n return logical(FilterOperator.AND, operands);\n}\n\n/**\n * `filter.or`: matches when at least one of `operands` matches. With\n * element-scoped operands only, the result is element-scoped too, so it can\n * be an `ELEMENT_MATCH` predicate.\n */\nfunction orFilter<FIELDS extends string>(\n operands: readonly ElementFilterExpression<FIELDS>[],\n): ElementLogicalFilter<FIELDS>;\n/** `filter.or`: matches when at least one of `operands` matches. */\nfunction orFilter<FIELDS extends string>(\n operands: readonly FilterExpression<FIELDS>[],\n): LogicalFilter<FIELDS>;\nfunction orFilter<FIELDS extends string>(\n operands: readonly FilterExpression<FIELDS>[],\n): LogicalFilter<FIELDS> {\n return logical(FilterOperator.OR, operands);\n}\n\n/**\n * `filter.nor`: matches when none of `operands` match. With element-scoped\n * operands only, the result is element-scoped too, so it can be an\n * `ELEMENT_MATCH` predicate.\n */\nfunction norFilter<FIELDS extends string>(\n operands: readonly ElementFilterExpression<FIELDS>[],\n): ElementLogicalFilter<FIELDS>;\n/** `filter.nor`: matches when none of `operands` match. */\nfunction norFilter<FIELDS extends string>(\n operands: readonly FilterExpression<FIELDS>[],\n): LogicalFilter<FIELDS>;\nfunction norFilter<FIELDS extends string>(\n operands: readonly FilterExpression<FIELDS>[],\n): LogicalFilter<FIELDS> {\n return logical(FilterOperator.NOR, operands);\n}\n\n/**\n * The overloads of {@link filter.search}: naming at least one field, as an\n * array literal, types the result as an {@link ElementSearchFilter}, which\n * `ELEMENT_MATCH` takes; otherwise it is a {@link SearchFilter}, root-only\n * when its `fields` are empty.\n */\nexport interface SearchBuilder {\n <FIELDS extends string>(\n query: string,\n options: SearchFilterOptions<FIELDS> & {\n fields: readonly [QueryField<FIELDS>, ...QueryField<FIELDS>[]];\n },\n ): ElementSearchFilter<FIELDS>;\n <FIELDS extends string>(\n query: string,\n options?: SearchFilterOptions<FIELDS>,\n ): SearchFilter<FIELDS>;\n}\n\nfunction search<FIELDS extends string>(\n query: string,\n options?: SearchFilterOptions<FIELDS>,\n): SearchFilter<FIELDS> {\n if (typeof query !== 'string' || !query.trim()) {\n throw new TypeError('SEARCH query cannot be blank.');\n }\n if (\n options !== undefined &&\n (options === null || typeof options !== 'object' || Array.isArray(options))\n ) {\n throw new TypeError('SEARCH options must be a non-null object.');\n }\n const { fields = [], mode = SearchMode.TERMS } = options ?? {};\n if (!Object.values(SearchMode).includes(mode)) {\n throw new TypeError(`SEARCH mode is invalid: [${String(mode)}].`);\n }\n return {\n op: FilterOperator.SEARCH,\n query,\n mode,\n fields: fields.map(queryField),\n };\n}\n\n/**\n * Builders for {@link FilterExpression} values. Each builder validates its\n * arguments, throws `TypeError` on invalid input, and returns a plain JSON\n * object in the server wire shape.\n *\n * @example\n * ```typescript\n * const paid = filter.and([\n * filter.eq('state.status', 'PAID'),\n * filter.gte('state.total', 100),\n * ]);\n * ```\n */\nexport const filter = {\n /**\n * Matches every record in the query scope.\n *\n * @returns `{ op: 'MATCH_ALL' }`.\n * @example\n * ```typescript\n * filter.matchAll();\n * ```\n */\n matchAll(): MatchFilter {\n return { op: FilterOperator.MATCH_ALL };\n },\n /**\n * Matches no record.\n *\n * @returns `{ op: 'MATCH_NONE' }`.\n * @example\n * ```typescript\n * filter.matchNone();\n * ```\n */\n matchNone(): MatchFilter {\n return { op: FilterOperator.MATCH_NONE };\n },\n /**\n * Matches the record whose record ID equals `value`. Root-only: not allowed\n * inside `elementMatch`.\n *\n * @param value - The record ID.\n * @returns `{ op: 'ID', value }`.\n * @throws TypeError If `value` is not a string.\n * @example\n * ```typescript\n * filter.id('order-1');\n * ```\n */\n id(value: string): MetadataValueFilter {\n return metadataValue(FilterOperator.ID, value);\n },\n /**\n * Matches records whose record ID is one of `values`. Root-only: not\n * allowed inside `elementMatch`.\n *\n * @param values - Non-empty list of record IDs.\n * @returns `{ op: 'IDS', values }` with a copy of `values`.\n * @throws TypeError If `values` is empty, contains `null` or `undefined`,\n * or contains a non-string.\n * @example\n * ```typescript\n * filter.ids(['order-1', 'order-2']);\n * ```\n */\n ids(values: readonly string[]): MetadataValuesFilter {\n return metadataValues(FilterOperator.IDS, values);\n },\n /**\n * Matches the record whose aggregate ID equals `value`. Root-only: not allowed\n * inside `elementMatch`.\n *\n * @param value - The aggregate ID.\n * @returns `{ op: 'AGGREGATE_ID', value }`.\n * @throws TypeError If `value` is not a string.\n * @example\n * ```typescript\n * filter.aggregateId('order-1');\n * ```\n */\n aggregateId(value: string): MetadataValueFilter {\n return metadataValue(FilterOperator.AGGREGATE_ID, value);\n },\n /**\n * Matches records whose aggregate ID is one of `values`. Root-only: not\n * allowed inside `elementMatch`.\n *\n * @param values - Non-empty list of aggregate IDs.\n * @returns `{ op: 'AGGREGATE_IDS', values }` with a copy of `values`.\n * @throws TypeError If `values` is empty, contains `null` or `undefined`,\n * or contains a non-string.\n * @example\n * ```typescript\n * filter.aggregateIds(['order-1', 'order-2']);\n * ```\n */\n aggregateIds(values: readonly string[]): MetadataValuesFilter {\n return metadataValues(FilterOperator.AGGREGATE_IDS, values);\n },\n /**\n * Matches the record whose tenant ID equals `value`. Root-only: not allowed\n * inside `elementMatch`.\n *\n * @param value - The tenant ID.\n * @returns `{ op: 'TENANT_ID', value }`.\n * @throws TypeError If `value` is not a string.\n * @example\n * ```typescript\n * filter.tenantId('tenant-a');\n * ```\n */\n tenantId(value: string): MetadataValueFilter {\n return metadataValue(FilterOperator.TENANT_ID, value);\n },\n /**\n * Matches the record whose owner ID equals `value`. Root-only: not allowed\n * inside `elementMatch`.\n *\n * @param value - The owner ID.\n * @returns `{ op: 'OWNER_ID', value }`.\n * @throws TypeError If `value` is not a string.\n * @example\n * ```typescript\n * filter.ownerId('user-1');\n * ```\n */\n ownerId(value: string): MetadataValueFilter {\n return metadataValue(FilterOperator.OWNER_ID, value);\n },\n /**\n * Matches the record whose space ID equals `value`. Root-only: not allowed\n * inside `elementMatch`.\n *\n * @param value - The space ID.\n * @returns `{ op: 'SPACE_ID', value }`.\n * @throws TypeError If `value` is not a string.\n * @example\n * ```typescript\n * filter.spaceId('space-1');\n * ```\n */\n spaceId(value: string): MetadataValueFilter {\n return metadataValue(FilterOperator.SPACE_ID, value);\n },\n /**\n * Matches when all of `operands` match. Returns an element-scoped\n * filter when every operand is element-scoped, so the result can be used\n * inside `elementMatch`.\n *\n * @param operands - Non-empty list of filter expressions.\n * @returns `{ op: 'AND', operands }` with a copy of `operands`.\n * @throws TypeError If `operands` is empty or contains `null` or\n * `undefined`.\n * @example\n * ```typescript\n * filter.and([\n * filter.eq('state.status', 'PAID'),\n * filter.eq('state.status', 'SHIPPED'),\n * ]);\n * ```\n */\n and: andFilter,\n /**\n * Matches when at least one of `operands` match. Returns an element-scoped\n * filter when every operand is element-scoped, so the result can be used\n * inside `elementMatch`.\n *\n * @param operands - Non-empty list of filter expressions.\n * @returns `{ op: 'OR', operands }` with a copy of `operands`.\n * @throws TypeError If `operands` is empty or contains `null` or\n * `undefined`.\n * @example\n * ```typescript\n * filter.or([\n * filter.eq('state.status', 'PAID'),\n * filter.eq('state.status', 'SHIPPED'),\n * ]);\n * ```\n */\n or: orFilter,\n /**\n * Matches when none of `operands` match. Returns an element-scoped\n * filter when every operand is element-scoped, so the result can be used\n * inside `elementMatch`.\n *\n * @param operands - Non-empty list of filter expressions.\n * @returns `{ op: 'NOR', operands }` with a copy of `operands`.\n * @throws TypeError If `operands` is empty or contains `null` or\n * `undefined`.\n * @example\n * ```typescript\n * filter.nor([\n * filter.eq('state.status', 'PAID'),\n * filter.eq('state.status', 'SHIPPED'),\n * ]);\n * ```\n */\n nor: norFilter,\n /**\n * Matches records whose `field` equals `value`.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param value - JSON scalar. `null` is sent as is; the server rewrites it\n * to `IS_NULL`.\n * @returns `{ op: 'EQ', field, value }`.\n * @throws TypeError If `field` is not a valid query field path, or `value` is not\n * `null`, a string, a boolean or a finite number.\n * @example\n * ```typescript\n * filter.eq('state.status', 'PAID');\n * ```\n */\n eq<FIELDS extends string>(\n field: FIELDS,\n value: EqualityFilterValue,\n ): EqualityFilter<FIELDS> {\n return equality(FilterOperator.EQ, field, value);\n },\n /**\n * Matches records whose `field` does not equal `value`.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param value - JSON scalar. `null` is sent as is; the server rewrites it\n * to `IS_NOT_NULL`.\n * @returns `{ op: 'NE', field, value }`.\n * @throws TypeError If `field` is not a valid query field path, or `value` is not\n * `null`, a string, a boolean or a finite number.\n * @example\n * ```typescript\n * filter.ne('state.status', 'CANCELLED');\n * ```\n */\n ne<FIELDS extends string>(\n field: FIELDS,\n value: EqualityFilterValue,\n ): EqualityFilter<FIELDS> {\n return equality(FilterOperator.NE, field, value);\n },\n /**\n * Matches records whose `field` is greater than `value` (`field > value`).\n * Numbers compare at the backend's stored precision.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param value - Non-null JSON scalar.\n * @returns `{ op: 'GT', field, value }`.\n * @throws TypeError If `field` is not a valid query field path, or `value` is not a\n * string, a boolean or a finite number.\n * @example\n * ```typescript\n * filter.gt('state.total', 100);\n * ```\n */\n gt<FIELDS extends string>(\n field: FIELDS,\n value: ComparableFilterLiteral,\n ): ComparisonFilter<FIELDS> {\n return comparison(FilterOperator.GT, field, value);\n },\n /**\n * Matches records whose `field` is greater than or equal to `value` (`field >= value`).\n * Numbers compare at the backend's stored precision.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param value - Non-null JSON scalar.\n * @returns `{ op: 'GTE', field, value }`.\n * @throws TypeError If `field` is not a valid query field path, or `value` is not a\n * string, a boolean or a finite number.\n * @example\n * ```typescript\n * filter.gte('state.total', 100);\n * ```\n */\n gte<FIELDS extends string>(\n field: FIELDS,\n value: ComparableFilterLiteral,\n ): ComparisonFilter<FIELDS> {\n return comparison(FilterOperator.GTE, field, value);\n },\n /**\n * Matches records whose `field` is less than `value` (`field < value`).\n * Numbers compare at the backend's stored precision.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param value - Non-null JSON scalar.\n * @returns `{ op: 'LT', field, value }`.\n * @throws TypeError If `field` is not a valid query field path, or `value` is not a\n * string, a boolean or a finite number.\n * @example\n * ```typescript\n * filter.lt('state.total', 100);\n * ```\n */\n lt<FIELDS extends string>(\n field: FIELDS,\n value: ComparableFilterLiteral,\n ): ComparisonFilter<FIELDS> {\n return comparison(FilterOperator.LT, field, value);\n },\n /**\n * Matches records whose `field` is less than or equal to `value` (`field <= value`).\n * Numbers compare at the backend's stored precision.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param value - Non-null JSON scalar.\n * @returns `{ op: 'LTE', field, value }`.\n * @throws TypeError If `field` is not a valid query field path, or `value` is not a\n * string, a boolean or a finite number.\n * @example\n * ```typescript\n * filter.lte('state.total', 100);\n * ```\n */\n lte<FIELDS extends string>(\n field: FIELDS,\n value: ComparableFilterLiteral,\n ): ComparisonFilter<FIELDS> {\n return comparison(FilterOperator.LTE, field, value);\n },\n /**\n * Matches records whose string `field` contains `value` literally. No\n * full-text analyzer is applied.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param value - Literal text.\n * @param stringComparison - Case handling. Defaults to\n * `StringComparison.CASE_SENSITIVE`.\n * @returns `{ op: 'CONTAINS', field, value, stringComparison }`.\n * @throws TypeError If `stringComparison` is not a {@link StringComparison}\n * member, `field` is not a valid query field path, or `value` is not a string.\n * @example\n * ```typescript\n * filter.contains('state.note', 'vip', StringComparison.CASE_INSENSITIVE);\n * ```\n */\n contains<FIELDS extends string>(\n field: FIELDS,\n value: string,\n stringComparison = StringComparison.CASE_SENSITIVE,\n ): StringFilter<FIELDS> {\n return stringMatch(FilterOperator.CONTAINS, field, value, stringComparison);\n },\n /**\n * Matches records whose string `field` starts with `value` literally. No\n * full-text analyzer is applied.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param value - Literal text.\n * @param stringComparison - Case handling. Defaults to\n * `StringComparison.CASE_SENSITIVE`.\n * @returns `{ op: 'STARTS_WITH', field, value, stringComparison }`.\n * @throws TypeError If `stringComparison` is not a {@link StringComparison}\n * member, `field` is not a valid query field path, or `value` is not a string.\n * @example\n * ```typescript\n * filter.startsWith('state.note', 'VIP-', StringComparison.CASE_INSENSITIVE);\n * ```\n */\n startsWith<FIELDS extends string>(\n field: FIELDS,\n value: string,\n stringComparison = StringComparison.CASE_SENSITIVE,\n ): StringFilter<FIELDS> {\n return stringMatch(\n FilterOperator.STARTS_WITH,\n field,\n value,\n stringComparison,\n );\n },\n /**\n * Matches records whose string `field` ends with `value` literally. No\n * full-text analyzer is applied.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param value - Literal text.\n * @param stringComparison - Case handling. Defaults to\n * `StringComparison.CASE_SENSITIVE`.\n * @returns `{ op: 'ENDS_WITH', field, value, stringComparison }`.\n * @throws TypeError If `stringComparison` is not a {@link StringComparison}\n * member, `field` is not a valid query field path, or `value` is not a string.\n * @example\n * ```typescript\n * filter.endsWith('state.note', '.pdf', StringComparison.CASE_INSENSITIVE);\n * ```\n */\n endsWith<FIELDS extends string>(\n field: FIELDS,\n value: string,\n stringComparison = StringComparison.CASE_SENSITIVE,\n ): StringFilter<FIELDS> {\n return stringMatch(\n FilterOperator.ENDS_WITH,\n field,\n value,\n stringComparison,\n );\n },\n /**\n * Matches records whose `field` equals one of `values`.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param values - Non-empty list of non-null JSON scalars.\n * @returns `{ op: 'IN', field, values }` with a copy of `values`.\n * @throws TypeError If `values` is empty, contains `null` or `undefined`,\n * or contains a value that is not a string, a boolean or a finite\n * number, or if `field` is not a valid query field path.\n * @example\n * ```typescript\n * filter.isIn('state.status', ['PAID', 'SHIPPED']);\n * ```\n */\n isIn<FIELDS extends string>(\n field: FIELDS,\n values: readonly ComparableFilterLiteral[],\n ): CollectionFilter<FIELDS> {\n return collection(FilterOperator.IN, field, values);\n },\n /**\n * Matches records whose `field` equals none of `values`.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param values - Non-empty list of non-null JSON scalars.\n * @returns `{ op: 'NOT_IN', field, values }` with a copy of `values`.\n * @throws TypeError If `values` is empty, contains `null` or `undefined`,\n * or contains a value that is not a string, a boolean or a finite\n * number, or if `field` is not a valid query field path.\n * @example\n * ```typescript\n * filter.notIn('state.status', ['CANCELLED', 'REFUNDED']);\n * ```\n */\n notIn<FIELDS extends string>(\n field: FIELDS,\n values: readonly ComparableFilterLiteral[],\n ): CollectionFilter<FIELDS> {\n return collection(FilterOperator.NOT_IN, field, values);\n },\n /**\n * Matches records whose array `field` contains every value in `values`.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param values - Non-empty list of non-null JSON scalars.\n * @returns `{ op: 'CONTAINS_ALL', field, values }` with a copy of `values`.\n * @throws TypeError If `values` is empty, contains `null` or `undefined`,\n * or contains a value that is not a string, a boolean or a finite\n * number, or if `field` is not a valid query field path.\n * @example\n * ```typescript\n * filter.containsAll('state.tags', ['vip', 'new']);\n * ```\n */\n containsAll<FIELDS extends string>(\n field: FIELDS,\n values: readonly ComparableFilterLiteral[],\n ): CollectionFilter<FIELDS> {\n return collection(FilterOperator.CONTAINS_ALL, field, values);\n },\n /**\n * Matches records whose `field` lies in the inclusive range\n * `lowerBound <= field <= upperBound`.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param lowerBound - Inclusive lower bound; non-null JSON scalar.\n * @param upperBound - Inclusive upper bound; non-null JSON scalar.\n * @returns `{ op: 'BETWEEN', field, lowerBound, upperBound }`.\n * @throws TypeError If `field` is not a valid query field path, or either bound is not a\n * string, a boolean or a finite number.\n * @example\n * ```typescript\n * filter.between('state.total', 100, 200);\n * ```\n */\n between<FIELDS extends string>(\n field: FIELDS,\n lowerBound: ComparableFilterLiteral,\n upperBound: ComparableFilterLiteral,\n ): BetweenFilter<FIELDS> {\n return {\n op: FilterOperator.BETWEEN,\n field: queryField(field),\n lowerBound: filterLiteral(lowerBound, false),\n upperBound: filterLiteral(upperBound, false),\n };\n },\n /**\n * Matches records whose array `field` is empty. On Elasticsearch it may also\n * match a missing or `null` field.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @returns `{ op: 'IS_EMPTY', field }`.\n * @throws TypeError If `field` is not a valid query field path.\n * @example\n * ```typescript\n * filter.isEmpty('state.items');\n * ```\n */\n isEmpty<FIELDS extends string>(field: FIELDS): FieldPresenceFilter<FIELDS> {\n return presence(FilterOperator.IS_EMPTY, field);\n },\n /**\n * Matches records whose string `field` equals `\"\"`. Whitespace-only\n * strings do not match.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @returns `{ op: 'IS_EMPTY_STRING', field }`.\n * @throws TypeError If `field` is not a valid query field path.\n * @example\n * ```typescript\n * filter.isEmptyString('state.note');\n * ```\n */\n isEmptyString<FIELDS extends string>(\n field: FIELDS,\n ): FieldPresenceFilter<FIELDS> {\n return presence(FilterOperator.IS_EMPTY_STRING, field);\n },\n /**\n * Matches records whose string `field` exists, is not `null` and is not\n * `\"\"`.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @returns `{ op: 'IS_NOT_EMPTY_STRING', field }`.\n * @throws TypeError If `field` is not a valid query field path.\n * @example\n * ```typescript\n * filter.isNotEmptyString('state.note');\n * ```\n */\n isNotEmptyString<FIELDS extends string>(\n field: FIELDS,\n ): FieldPresenceFilter<FIELDS> {\n return presence(FilterOperator.IS_NOT_EMPTY_STRING, field);\n },\n /**\n * Matches records whose `field` is `null` or missing, following the\n * backend's null semantics.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @returns `{ op: 'IS_NULL', field }`.\n * @throws TypeError If `field` is not a valid query field path.\n * @example\n * ```typescript\n * filter.isNull('state.note');\n * ```\n */\n isNull<FIELDS extends string>(field: FIELDS): FieldPresenceFilter<FIELDS> {\n return presence(FilterOperator.IS_NULL, field);\n },\n /**\n * Matches records whose `field` exists and is not `null`, following the\n * backend's null semantics.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @returns `{ op: 'IS_NOT_NULL', field }`.\n * @throws TypeError If `field` is not a valid query field path.\n * @example\n * ```typescript\n * filter.isNotNull('state.note');\n * ```\n */\n isNotNull<FIELDS extends string>(field: FIELDS): FieldPresenceFilter<FIELDS> {\n return presence(FilterOperator.IS_NOT_NULL, field);\n },\n /**\n * Matches records where `field` exists. On MongoDB this includes a `null`\n * value.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @returns `{ op: 'EXISTS', field }`.\n * @throws TypeError If `field` is not a valid query field path.\n * @example\n * ```typescript\n * filter.exists('state.note');\n * ```\n */\n exists<FIELDS extends string>(field: FIELDS): FieldPresenceFilter<FIELDS> {\n return presence(FilterOperator.EXISTS, field);\n },\n /**\n * Matches records where `field` is missing.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @returns `{ op: 'NOT_EXISTS', field }`.\n * @throws TypeError If `field` is not a valid query field path.\n * @example\n * ```typescript\n * filter.notExists('state.note');\n * ```\n */\n notExists<FIELDS extends string>(field: FIELDS): FieldPresenceFilter<FIELDS> {\n return presence(FilterOperator.NOT_EXISTS, field);\n },\n /**\n * Matches snapshots by deletion state. An explicit `DELETION` at the root or\n * in a root `AND` replaces the gateway's default `ACTIVE` scope. Root-only:\n * not allowed inside `elementMatch`.\n *\n * @param state - `ACTIVE`, `DELETED` or `ALL`.\n * @returns `{ op: 'DELETION', state }`.\n * @throws TypeError If `state` is not a {@link DeletionState} member.\n * @example\n * ```typescript\n * filter.deletion(DeletionState.ALL);\n * ```\n */\n deletion(state: DeletionState): DeletionFilter {\n if (\n state !== DeletionState.ACTIVE &&\n state !== DeletionState.DELETED &&\n state !== DeletionState.ALL\n ) {\n throw new TypeError(`Deletion state is invalid: [${String(state)}].`);\n }\n return { op: FilterOperator.DELETION, state };\n },\n /**\n * Matches records where a single element of the array `field` satisfies\n * `predicate`. Fields in `predicate` are relative to the element.\n *\n * @param field - Query field path of the array, e.g. `state.items`.\n * @param predicate - Element-scoped filter expression.\n * @returns `{ op: 'ELEMENT_MATCH', field, predicate }`.\n * A `SEARCH` inside it must name the fields it searches, relative to the\n * element (Wow 9.2 and later, where the descriptor lists\n * `elements[].search`); a model-wide `SEARCH` is a root filter.\n *\n * @throws TypeError If `predicate` contains, at any depth, a root-only filter\n * (`ID`, `IDS`, `AGGREGATE_ID`, `AGGREGATE_IDS`, `TENANT_ID`, `OWNER_ID`,\n * `SPACE_ID`, `DELETION` or a `SEARCH` without fields) or an `AND`, `OR`\n * or `NOR` whose operands are empty or contain `null`, or if `field` is\n * not a valid query field path.\n * @example\n * ```typescript\n * filter.elementMatch('state.items', filter.gt('quantity', 1));\n * filter.elementMatch(\n * 'state.items',\n * filter.search('usb cable', { fields: ['productName'] }),\n * );\n * ```\n */\n elementMatch<FIELDS extends string, ELEMENT_FIELDS extends string>(\n field: FIELDS,\n predicate: ElementFilterExpression<ELEMENT_FIELDS>,\n ): ElementMatchFilter<FIELDS, ELEMENT_FIELDS> {\n requireElementScopedFilter(predicate, 'ELEMENT_MATCH predicate');\n return {\n op: FilterOperator.ELEMENT_MATCH,\n field: queryField(field),\n predicate,\n };\n },\n /**\n * Matches records by full-text search. Tokenization and matching depend on\n * the backend's analyzer. Inside `elementMatch` it must name its fields,\n * relative to the element; with fields given as a non-empty array literal\n * it returns an {@link ElementSearchFilter}, which `elementMatch` takes.\n *\n * @param query - Search text.\n * @param options - Optional `fields` (defaults to `[]`, the backend's default\n * search fields) and `mode` (defaults to `SearchMode.TERMS`).\n * @returns `{ op: 'SEARCH', query, mode, fields }`.\n * @throws TypeError If `query` is not a string or is blank, `options` is\n * given but is `null`, an array or not an object, `mode` is not a\n * {@link SearchMode} member, or any of `fields` is not a valid query field\n * path.\n * @example\n * ```typescript\n * filter.search('event sourcing', {\n * fields: ['state.description'],\n * mode: SearchMode.PHRASE,\n * });\n * ```\n */\n search: search as SearchBuilder,\n /**\n * Matches times within today, as the half-open range `[start, end)` in the\n * configured time zone.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'TODAY', field, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `field` is not a valid query field path, `zoneId` is blank or an\n * invalid UTC offset, `datePattern` is blank or not a valid\n * `java.time` pattern, or `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.today('state.createTime', { zoneId: 'Asia/Shanghai' });\n * ```\n */\n today<FIELDS extends string>(\n field: FIELDS,\n options: RelativeTimeFilterOptions = {},\n ): CalendarFilter<FIELDS> {\n return calendar(FilterOperator.TODAY, field, options);\n },\n /**\n * Matches times earlier than today at the local time `time`\n * (`field < today at time`) in the configured time zone.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param time - 24-hour local time: `HH:mm`, `HH:mm:ss` or `HH:mm:ss.S` with\n * 1 to 9 fraction digits.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'BEFORE_TODAY', field, time, timeUnit }`, plus `zoneId`\n * and `datePattern` when set.\n * @throws TypeError If `time` is not a string in one of the formats above,\n * `field` is not a valid query field path, `zoneId` is blank or an invalid UTC offset,\n * `datePattern` is blank or not a valid `java.time` pattern, or\n * `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.beforeToday('state.createTime', '12:00');\n * ```\n */\n beforeToday<FIELDS extends string>(\n field: FIELDS,\n time: string,\n options: RelativeTimeFilterOptions = {},\n ): BeforeTodayFilter<FIELDS> {\n const localTime = requireLocalTime(time);\n return {\n ...validateRelativeTimeOptions(options),\n op: FilterOperator.BEFORE_TODAY,\n field: queryField(field),\n time: localTime,\n };\n },\n /**\n * Matches times within tomorrow, as the half-open range `[start, end)` in the\n * configured time zone.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'TOMORROW', field, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `field` is not a valid query field path, `zoneId` is blank or an\n * invalid UTC offset, `datePattern` is blank or not a valid\n * `java.time` pattern, or `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.tomorrow('state.createTime');\n * ```\n */\n tomorrow<FIELDS extends string>(\n field: FIELDS,\n options: RelativeTimeFilterOptions = {},\n ): CalendarFilter<FIELDS> {\n return calendar(FilterOperator.TOMORROW, field, options);\n },\n /**\n * Matches times within the current Monday-start week, as the half-open range `[start, end)` in the\n * configured time zone.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'THIS_WEEK', field, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `field` is not a valid query field path, `zoneId` is blank or an\n * invalid UTC offset, `datePattern` is blank or not a valid\n * `java.time` pattern, or `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.thisWeek('state.createTime');\n * ```\n */\n thisWeek<FIELDS extends string>(\n field: FIELDS,\n options: RelativeTimeFilterOptions = {},\n ): CalendarFilter<FIELDS> {\n return calendar(FilterOperator.THIS_WEEK, field, options);\n },\n /**\n * Matches times within the next Monday-start week, as the half-open range `[start, end)` in the\n * configured time zone.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'NEXT_WEEK', field, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `field` is not a valid query field path, `zoneId` is blank or an\n * invalid UTC offset, `datePattern` is blank or not a valid\n * `java.time` pattern, or `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.nextWeek('state.createTime');\n * ```\n */\n nextWeek<FIELDS extends string>(\n field: FIELDS,\n options: RelativeTimeFilterOptions = {},\n ): CalendarFilter<FIELDS> {\n return calendar(FilterOperator.NEXT_WEEK, field, options);\n },\n /**\n * Matches times within the previous Monday-start week, as the half-open range `[start, end)` in the\n * configured time zone.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'LAST_WEEK', field, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `field` is not a valid query field path, `zoneId` is blank or an\n * invalid UTC offset, `datePattern` is blank or not a valid\n * `java.time` pattern, or `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.lastWeek('state.createTime');\n * ```\n */\n lastWeek<FIELDS extends string>(\n field: FIELDS,\n options: RelativeTimeFilterOptions = {},\n ): CalendarFilter<FIELDS> {\n return calendar(FilterOperator.LAST_WEEK, field, options);\n },\n /**\n * Matches times within the current calendar month, as the half-open range `[start, end)` in the\n * configured time zone.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'THIS_MONTH', field, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `field` is not a valid query field path, `zoneId` is blank or an\n * invalid UTC offset, `datePattern` is blank or not a valid\n * `java.time` pattern, or `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.thisMonth('state.createTime');\n * ```\n */\n thisMonth<FIELDS extends string>(\n field: FIELDS,\n options: RelativeTimeFilterOptions = {},\n ): CalendarFilter<FIELDS> {\n return calendar(FilterOperator.THIS_MONTH, field, options);\n },\n /**\n * Matches times within the previous calendar month, as the half-open range `[start, end)` in the\n * configured time zone.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'LAST_MONTH', field, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `field` is not a valid query field path, `zoneId` is blank or an\n * invalid UTC offset, `datePattern` is blank or not a valid\n * `java.time` pattern, or `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.lastMonth('state.createTime');\n * ```\n */\n lastMonth<FIELDS extends string>(\n field: FIELDS,\n options: RelativeTimeFilterOptions = {},\n ): CalendarFilter<FIELDS> {\n return calendar(FilterOperator.LAST_MONTH, field, options);\n },\n /**\n * Matches times within yesterday, as the half-open range `[start, end)` in the\n * configured time zone.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'YESTERDAY', field, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `field` is not a valid query field path, `zoneId` is blank or an\n * invalid UTC offset, `datePattern` is blank or not a valid\n * `java.time` pattern, or `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.yesterday('state.createTime');\n * ```\n */\n yesterday<FIELDS extends string>(\n field: FIELDS,\n options: RelativeTimeFilterOptions = {},\n ): CalendarFilter<FIELDS> {\n return calendar(FilterOperator.YESTERDAY, field, options);\n },\n /**\n * Matches times within the next calendar month, as the half-open range `[start, end)` in the\n * configured time zone.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'NEXT_MONTH', field, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `field` is not a valid query field path, `zoneId` is blank or an\n * invalid UTC offset, `datePattern` is blank or not a valid\n * `java.time` pattern, or `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.nextMonth('state.createTime');\n * ```\n */\n nextMonth<FIELDS extends string>(\n field: FIELDS,\n options: RelativeTimeFilterOptions = {},\n ): CalendarFilter<FIELDS> {\n return calendar(FilterOperator.NEXT_MONTH, field, options);\n },\n /**\n * Matches times within the previous calendar year, as the half-open range `[start, end)` in the\n * configured time zone.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'LAST_YEAR', field, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `field` is not a valid query field path, `zoneId` is blank or an\n * invalid UTC offset, `datePattern` is blank or not a valid\n * `java.time` pattern, or `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.lastYear('state.createTime');\n * ```\n */\n lastYear<FIELDS extends string>(\n field: FIELDS,\n options: RelativeTimeFilterOptions = {},\n ): CalendarFilter<FIELDS> {\n return calendar(FilterOperator.LAST_YEAR, field, options);\n },\n /**\n * Matches times within the current calendar year, as the half-open range `[start, end)` in the\n * configured time zone.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'THIS_YEAR', field, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `field` is not a valid query field path, `zoneId` is blank or an\n * invalid UTC offset, `datePattern` is blank or not a valid\n * `java.time` pattern, or `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.thisYear('state.createTime', { timeUnit: TimeUnit.SECONDS });\n * ```\n */\n thisYear<FIELDS extends string>(\n field: FIELDS,\n options: RelativeTimeFilterOptions = {},\n ): CalendarFilter<FIELDS> {\n return calendar(FilterOperator.THIS_YEAR, field, options);\n },\n /**\n * Matches times within the next calendar year, as the half-open range `[start, end)` in the\n * configured time zone.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'NEXT_YEAR', field, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `field` is not a valid query field path, `zoneId` is blank or an\n * invalid UTC offset, `datePattern` is blank or not a valid\n * `java.time` pattern, or `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.nextYear('state.createTime');\n * ```\n */\n nextYear<FIELDS extends string>(\n field: FIELDS,\n options: RelativeTimeFilterOptions = {},\n ): CalendarFilter<FIELDS> {\n return calendar(FilterOperator.NEXT_YEAR, field, options);\n },\n /**\n * Matches times from the start of the day `days - 1` days ago until the end\n * of today. `recentDays(field, 7)` covers today and the six previous days.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param days - Number of calendar days, including today; an integer from\n * 1 to 2147483647.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'RECENT_DAYS', field, days, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `days` is not an integer from 1 to 2147483647,\n * `field` is not a valid query field path, `zoneId` is blank or an invalid UTC offset,\n * `datePattern` is blank or not a valid `java.time` pattern, or\n * `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.recentDays('state.createTime', 7);\n * ```\n */\n recentDays<FIELDS extends string>(\n field: FIELDS,\n days: number,\n options: RelativeTimeFilterOptions = {},\n ): DaysFilter<FIELDS> {\n return dayWindow(FilterOperator.RECENT_DAYS, field, days, options);\n },\n /**\n * Matches times before the start of the day `days - 1` days ago, that is,\n * before the window that `recentDays` covers with the same `days`.\n *\n * @param field - Query field path, e.g. `state.status`.\n * @param days - Number of calendar days, including today; an integer from\n * 1 to 2147483647.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'EARLIER_DAYS', field, days, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `days` is not an integer from 1 to 2147483647,\n * `field` is not a valid query field path, `zoneId` is blank or an invalid UTC offset,\n * `datePattern` is blank or not a valid `java.time` pattern, or\n * `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * filter.earlierDays('state.createTime', 7);\n * ```\n */\n earlierDays<FIELDS extends string>(\n field: FIELDS,\n days: number,\n options: RelativeTimeFilterOptions = {},\n ): DaysFilter<FIELDS> {\n return dayWindow(FilterOperator.EARLIER_DAYS, field, days, options);\n },\n /**\n * Matches times strictly before the server's `now + offset`\n * (`field < now + offset`). The server reads its clock once per query,\n * so a saved query never depends on the client's clock, and the moment is\n * encoded the way the field stores time: an epoch in `timeUnit`, or text\n * in `datePattern` and `zoneId`.\n *\n * Needs a Wow server of 9.2.0 or later; an earlier one refuses `BEFORE_NOW`.\n *\n * @param field - Query field path, e.g. `state.timeoutAt`.\n * @param offset - ISO-8601 duration added to now, as\n * `java.time.Duration.parse` reads it: days, hours, minutes and seconds,\n * each optionally signed, e.g. `PT0S`, `-PT30M` or `P1DT2H`. A negative\n * offset looks back. Defaults to `PT0S`, now itself.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'BEFORE_NOW', field, offset, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `offset` is not an ISO-8601 duration in that\n * grammar, `field` is not a valid query field path, `zoneId` is blank or\n * an invalid UTC offset, `datePattern` is blank or not a valid `java.time`\n * pattern, or `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * // Timed out: the deadline has passed.\n * filter.beforeNow('state.timeoutAt');\n * ```\n */\n beforeNow<FIELDS extends string>(\n field: FIELDS,\n offset = 'PT0S',\n options: RelativeTimeFilterOptions = {},\n ): NowFilter<FIELDS> {\n return nowRelative(FilterOperator.BEFORE_NOW, field, offset, options);\n },\n /**\n * Matches times strictly after the server's `now + offset`\n * (`field > now + offset`). The server reads its clock once per query,\n * so a saved query never depends on the client's clock, and the moment is\n * encoded the way the field stores time: an epoch in `timeUnit`, or text\n * in `datePattern` and `zoneId`.\n *\n * Needs a Wow server of 9.2.0 or later; an earlier one refuses `AFTER_NOW`.\n *\n * @param field - Query field path, e.g. `state.timeoutAt`.\n * @param offset - ISO-8601 duration added to now, as\n * `java.time.Duration.parse` reads it: days, hours, minutes and seconds,\n * each optionally signed, e.g. `PT0S`, `-PT30M` or `P1DT2H`. A negative\n * offset looks back. Defaults to `PT0S`, now itself.\n * @param options - Optional `zoneId`, `datePattern` and `timeUnit`; see\n * {@link RelativeTimeFilterOptions}. `timeUnit` defaults to\n * `TimeUnit.MILLISECONDS`.\n * @returns `{ op: 'AFTER_NOW', field, offset, timeUnit }`, plus `zoneId` and\n * `datePattern` when set.\n * @throws TypeError If `offset` is not an ISO-8601 duration in that\n * grammar, `field` is not a valid query field path, `zoneId` is blank or\n * an invalid UTC offset, `datePattern` is blank or not a valid `java.time`\n * pattern, or `timeUnit` is not a {@link TimeUnit} member.\n * @example\n * ```typescript\n * // Created in the last 30 minutes.\n * filter.afterNow('state.createTime', '-PT30M');\n * ```\n */\n afterNow<FIELDS extends string>(\n field: FIELDS,\n offset = 'PT0S',\n options: RelativeTimeFilterOptions = {},\n ): NowFilter<FIELDS> {\n return nowRelative(FilterOperator.AFTER_NOW, field, offset, options);\n },\n /**\n * Compares a computed expression with a number, such as the hours from\n * `paidAt` to `shippedAt`. `{ op: 'EXPRESSION', expression, comparison,\n * value }`.\n *\n * The expression is evaluated per record, so this is an expensive\n * operator, admitted where the descriptor lists `EXPRESSION` in\n * `record.rootOperators`. A record whose expression has no value (an\n * operand absent or holding several values, or a division by zero) does\n * not match, whatever the comparison, `NE` included. Allowed at the root,\n * in a metric's filter and in an aggregation element's filter, but not\n * inside `elementMatch`. Needs a Wow server of 9.2.0 or later.\n *\n * @param expression - What is compared; it must read at least one field.\n * @param comparison - How it compares with `value`.\n * @param value - A finite number.\n * @throws TypeError If `value` is not finite, `comparison` is not a\n * {@link ComparisonOperator}, `expression` reads no field, or the tree is\n * too deep or too large.\n * @example\n * ```typescript\n * // Shipped more than two days after it was paid.\n * filter.expression(\n * aggregation.dateDiff('state.paidAt', 'state.shippedAt', DateDiffUnit.HOUR),\n * ComparisonOperator.GT,\n * 48,\n * );\n * ```\n */\n expression<FIELDS extends string>(\n expression: AggregationExpression<FIELDS>,\n comparison: ComparisonOperator,\n value: number,\n ): ExpressionFilter<FIELDS> {\n if (!Number.isFinite(value)) {\n throw new TypeError('EXPRESSION value must be finite.');\n }\n if (!Object.values(ComparisonOperator).includes(comparison)) {\n throw new TypeError(\n `EXPRESSION comparison is invalid: [${String(comparison)}].`,\n );\n }\n if (expressionFields(expression).length === 0) {\n throw new TypeError('EXPRESSION must read at least one field.');\n }\n requireValidExpressionTrees([expression]);\n return { op: FilterOperator.EXPRESSION, expression, comparison, value };\n },\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){return[...e].every(e=>{let t=e.charCodeAt(0);return t>=9&&t<=13||t>=28&&t<=31||/^[\p{Zs}\p{Zl}\p{Zp}]$/u.test(e)})}var t={G:5,u:19,y:19,Q:5,q:5,M:5,L:5,D:3,d:2,F:1,E:5,e:5,c:[1,3,4,5],a:1,B:[1,4,5],h:2,H:2,k:2,K:2,m:2,s:2,S:9,A:19,n:19,N:19,V:[2],v:[1,4],z:4,O:[1,4],X:5,x:5,Z:5,W:1,w:2,Y:1/0,g:19};function n(e,n,r){let i=t[n];if(!(typeof i==`number`?r<=i:i?.includes(r)===!0))throw TypeError(`datePattern is invalid: [${e}].`)}function r(e,t){return e!==void 0&&(`uyDFdhHkKmsSgAnNWwY`.includes(e)||e===`c`&&t===1||`eMLQq`.includes(e)&&t<=2)}function i(t){if(typeof t!=`string`||e(t))throw TypeError(`datePattern cannot be blank.`);let i=!1,a=0;for(let e=0;e<t.length;e++){let o=t[e];if(o===`'`){t[e+1]===`'`?e++:i=!i;continue}if(!i){if(/[A-Za-z]/.test(o)){let i=o,a=e+1;for(;t[a]===i;)a++;let s=a-e,c=!1;if(i===`p`){if(c=!0,i=t[a],!i||!/[A-Za-z]/.test(i))throw TypeError(`datePattern is invalid: [${t}].`);let e=a++;for(;t[a]===i;)a++;s=a-e}if(n(t,i,s),c&&r(i,s)){let e=t[a],n=a;for(;n<t.length&&t[n]===e;)n++;if(r(e,n-a))throw TypeError(`datePattern is invalid: [${t}].`)}e=a-1}else if(o===`[`)a++;else if(o===`]`){if(a===0)throw TypeError(`datePattern is invalid: [${t}].`);a--}else if(`{}#`.includes(o))throw TypeError(`datePattern is invalid: [${t}].`)}}if(i)throw TypeError(`datePattern is invalid: [${t}].`)}exports.validateDatePattern=i;
|
|
2
|
+
//# sourceMappingURL=datePattern.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datePattern.cjs","names":["isKotlinBlank","value","code","character","DATE_PATTERN_COUNTS","validateDatePatternLetter","allowed","letter","count","pattern","isNumericDatePatternLetter","validateDatePattern","quoted","optionalDepth","index","end","padded","fieldStart","nextLetter","nextEnd"],"sources":["../../../src/dsl/filter/datePattern.ts"],"sourcesContent":["/*\n * Copyright [2021-present] [ahoo wang <ahoowang@qq.com> (https://github.com/Ahoo-Wang)].\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * http://www.apache.org/licenses/LICENSE-2.0\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Internal: not re-exported by filter/index.ts. The pattern syntax of\n// `java.time.format.DateTimeFormatter`, as far as `datePattern` is checked\n// before it reaches the server.\n\n/**\n * Kotlin's `String.isBlank()`: every character is `Char.isWhitespace()`,\n * which is Java's `isWhitespace` or `isSpaceChar` — the Unicode separators\n * (Zs, Zl, Zp) plus the controls U+0009–U+000D and U+001C–U+001F.\n * `String.trim()` is not the same set: it strips U+FEFF, which Kotlin keeps as\n * a literal, and keeps U+001C–U+001F, which Kotlin counts as blank.\n */\nfunction isKotlinBlank(value: string): boolean {\n return [...value].every(character => {\n const code = character.charCodeAt(0);\n return (\n (code >= 0x09 && code <= 0x0d) ||\n (code >= 0x1c && code <= 0x1f) ||\n /^[\\p{Zs}\\p{Zl}\\p{Zp}]$/u.test(character)\n );\n });\n}\n\n/** The repeat counts each pattern letter accepts. */\nconst DATE_PATTERN_COUNTS: Readonly<\n Record<string, number | readonly number[]>\n> = {\n G: 5,\n u: 19,\n y: 19,\n Q: 5,\n q: 5,\n M: 5,\n L: 5,\n D: 3,\n d: 2,\n F: 1,\n E: 5,\n e: 5,\n c: [1, 3, 4, 5],\n a: 1,\n B: [1, 4, 5],\n h: 2,\n H: 2,\n k: 2,\n K: 2,\n m: 2,\n s: 2,\n S: 9,\n A: 19,\n n: 19,\n N: 19,\n V: [2],\n v: [1, 4],\n z: 4,\n O: [1, 4],\n X: 5,\n x: 5,\n Z: 5,\n W: 1,\n w: 2,\n Y: Number.POSITIVE_INFINITY,\n g: 19,\n};\n\nfunction validateDatePatternLetter(\n pattern: string,\n letter: string,\n count: number,\n): void {\n const allowed = DATE_PATTERN_COUNTS[letter];\n const valid =\n typeof allowed === 'number'\n ? count <= allowed\n : allowed?.includes(count) === true;\n if (!valid) {\n throw new TypeError(`datePattern is invalid: [${pattern}].`);\n }\n}\n\nfunction isNumericDatePatternLetter(\n letter: string | undefined,\n count: number,\n): boolean {\n return (\n letter !== undefined &&\n ('uyDFdhHkKmsSgAnNWwY'.includes(letter) ||\n (letter === 'c' && count === 1) ||\n ('eMLQq'.includes(letter) && count <= 2))\n );\n}\n\n/**\n * Refuses a `datePattern` Wow refuses: a blank one (blank as Kotlin counts\n * it), and one `DateTimeFormatter.ofPattern` would refuse — an unknown letter\n * or repeat count, an unclosed quote, a `]` without its `[`, a reserved\n * character, or a padded numeric field followed directly by another numeric\n * field. `test/dsl/datePattern.test.ts` holds this to a corpus the JVM judged.\n */\nexport function validateDatePattern(pattern: string): void {\n if (typeof pattern !== 'string' || isKotlinBlank(pattern)) {\n throw new TypeError('datePattern cannot be blank.');\n }\n let quoted = false;\n let optionalDepth = 0;\n for (let index = 0; index < pattern.length; index++) {\n const character = pattern[index];\n if (character === \"'\") {\n if (pattern[index + 1] === \"'\") {\n index++;\n } else {\n quoted = !quoted;\n }\n continue;\n }\n if (quoted) continue;\n if (/[A-Za-z]/.test(character)) {\n let letter = character;\n let end = index + 1;\n while (pattern[end] === letter) end++;\n let count = end - index;\n let padded = false;\n if (letter === 'p') {\n padded = true;\n letter = pattern[end];\n if (!letter || !/[A-Za-z]/.test(letter)) {\n throw new TypeError(`datePattern is invalid: [${pattern}].`);\n }\n const fieldStart = end++;\n while (pattern[end] === letter) end++;\n count = end - fieldStart;\n }\n validateDatePatternLetter(pattern, letter, count);\n if (padded && isNumericDatePatternLetter(letter, count)) {\n const nextLetter = pattern[end];\n let nextEnd = end;\n while (nextEnd < pattern.length && pattern[nextEnd] === nextLetter)\n nextEnd++;\n if (isNumericDatePatternLetter(nextLetter, nextEnd - end)) {\n throw new TypeError(`datePattern is invalid: [${pattern}].`);\n }\n }\n index = end - 1;\n } else if (character === '[') {\n optionalDepth++;\n } else if (character === ']') {\n if (optionalDepth === 0)\n throw new TypeError(`datePattern is invalid: [${pattern}].`);\n optionalDepth--;\n } else if ('{}#'.includes(character)) {\n throw new TypeError(`datePattern is invalid: [${pattern}].`);\n }\n }\n if (quoted) {\n throw new TypeError(`datePattern is invalid: [${pattern}].`);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Refuses a `datePattern` Wow refuses: a blank one (blank as Kotlin counts
|
|
3
|
+
* it), and one `DateTimeFormatter.ofPattern` would refuse — an unknown letter
|
|
4
|
+
* or repeat count, an unclosed quote, a `]` without its `[`, a reserved
|
|
5
|
+
* character, or a padded numeric field followed directly by another numeric
|
|
6
|
+
* field. `test/dsl/datePattern.test.ts` holds this to a corpus the JVM judged.
|
|
7
|
+
*/
|
|
8
|
+
export declare function validateDatePattern(pattern: string): void;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Refuses a `datePattern` Wow refuses: a blank one (blank as Kotlin counts
|
|
3
|
+
* it), and one `DateTimeFormatter.ofPattern` would refuse — an unknown letter
|
|
4
|
+
* or repeat count, an unclosed quote, a `]` without its `[`, a reserved
|
|
5
|
+
* character, or a padded numeric field followed directly by another numeric
|
|
6
|
+
* field. `test/dsl/datePattern.test.ts` holds this to a corpus the JVM judged.
|
|
7
|
+
*/
|
|
8
|
+
export declare function validateDatePattern(pattern: string): void;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
//#region src/dsl/filter/datePattern.ts
|
|
2
|
+
function e(e) {
|
|
3
|
+
return [...e].every((e) => {
|
|
4
|
+
let t = e.charCodeAt(0);
|
|
5
|
+
return t >= 9 && t <= 13 || t >= 28 && t <= 31 || /^[\p{Zs}\p{Zl}\p{Zp}]$/u.test(e);
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
var t = {
|
|
9
|
+
G: 5,
|
|
10
|
+
u: 19,
|
|
11
|
+
y: 19,
|
|
12
|
+
Q: 5,
|
|
13
|
+
q: 5,
|
|
14
|
+
M: 5,
|
|
15
|
+
L: 5,
|
|
16
|
+
D: 3,
|
|
17
|
+
d: 2,
|
|
18
|
+
F: 1,
|
|
19
|
+
E: 5,
|
|
20
|
+
e: 5,
|
|
21
|
+
c: [
|
|
22
|
+
1,
|
|
23
|
+
3,
|
|
24
|
+
4,
|
|
25
|
+
5
|
|
26
|
+
],
|
|
27
|
+
a: 1,
|
|
28
|
+
B: [
|
|
29
|
+
1,
|
|
30
|
+
4,
|
|
31
|
+
5
|
|
32
|
+
],
|
|
33
|
+
h: 2,
|
|
34
|
+
H: 2,
|
|
35
|
+
k: 2,
|
|
36
|
+
K: 2,
|
|
37
|
+
m: 2,
|
|
38
|
+
s: 2,
|
|
39
|
+
S: 9,
|
|
40
|
+
A: 19,
|
|
41
|
+
n: 19,
|
|
42
|
+
N: 19,
|
|
43
|
+
V: [2],
|
|
44
|
+
v: [1, 4],
|
|
45
|
+
z: 4,
|
|
46
|
+
O: [1, 4],
|
|
47
|
+
X: 5,
|
|
48
|
+
x: 5,
|
|
49
|
+
Z: 5,
|
|
50
|
+
W: 1,
|
|
51
|
+
w: 2,
|
|
52
|
+
Y: Infinity,
|
|
53
|
+
g: 19
|
|
54
|
+
};
|
|
55
|
+
function n(e, n, r) {
|
|
56
|
+
let i = t[n];
|
|
57
|
+
if (!(typeof i == "number" ? r <= i : i?.includes(r) === !0)) throw TypeError(`datePattern is invalid: [${e}].`);
|
|
58
|
+
}
|
|
59
|
+
function r(e, t) {
|
|
60
|
+
return e !== void 0 && ("uyDFdhHkKmsSgAnNWwY".includes(e) || e === "c" && t === 1 || "eMLQq".includes(e) && t <= 2);
|
|
61
|
+
}
|
|
62
|
+
function i(t) {
|
|
63
|
+
if (typeof t != "string" || e(t)) throw TypeError("datePattern cannot be blank.");
|
|
64
|
+
let i = !1, a = 0;
|
|
65
|
+
for (let e = 0; e < t.length; e++) {
|
|
66
|
+
let o = t[e];
|
|
67
|
+
if (o === "'") {
|
|
68
|
+
t[e + 1] === "'" ? e++ : i = !i;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (!i) {
|
|
72
|
+
if (/[A-Za-z]/.test(o)) {
|
|
73
|
+
let i = o, a = e + 1;
|
|
74
|
+
for (; t[a] === i;) a++;
|
|
75
|
+
let s = a - e, c = !1;
|
|
76
|
+
if (i === "p") {
|
|
77
|
+
if (c = !0, i = t[a], !i || !/[A-Za-z]/.test(i)) throw TypeError(`datePattern is invalid: [${t}].`);
|
|
78
|
+
let e = a++;
|
|
79
|
+
for (; t[a] === i;) a++;
|
|
80
|
+
s = a - e;
|
|
81
|
+
}
|
|
82
|
+
if (n(t, i, s), c && r(i, s)) {
|
|
83
|
+
let e = t[a], n = a;
|
|
84
|
+
for (; n < t.length && t[n] === e;) n++;
|
|
85
|
+
if (r(e, n - a)) throw TypeError(`datePattern is invalid: [${t}].`);
|
|
86
|
+
}
|
|
87
|
+
e = a - 1;
|
|
88
|
+
} else if (o === "[") a++;
|
|
89
|
+
else if (o === "]") {
|
|
90
|
+
if (a === 0) throw TypeError(`datePattern is invalid: [${t}].`);
|
|
91
|
+
a--;
|
|
92
|
+
} else if ("{}#".includes(o)) throw TypeError(`datePattern is invalid: [${t}].`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (i) throw TypeError(`datePattern is invalid: [${t}].`);
|
|
96
|
+
}
|
|
97
|
+
//#endregion
|
|
98
|
+
export { i as validateDatePattern };
|
|
99
|
+
|
|
100
|
+
//# sourceMappingURL=datePattern.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datePattern.es.js","names":["isKotlinBlank","value","code","character","DATE_PATTERN_COUNTS","validateDatePatternLetter","allowed","letter","count","pattern","isNumericDatePatternLetter","validateDatePattern","quoted","optionalDepth","index","end","padded","fieldStart","nextLetter","nextEnd"],"sources":["../../../src/dsl/filter/datePattern.ts"],"sourcesContent":["/*\n * Copyright [2021-present] [ahoo wang <ahoowang@qq.com> (https://github.com/Ahoo-Wang)].\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * http://www.apache.org/licenses/LICENSE-2.0\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Internal: not re-exported by filter/index.ts. The pattern syntax of\n// `java.time.format.DateTimeFormatter`, as far as `datePattern` is checked\n// before it reaches the server.\n\n/**\n * Kotlin's `String.isBlank()`: every character is `Char.isWhitespace()`,\n * which is Java's `isWhitespace` or `isSpaceChar` — the Unicode separators\n * (Zs, Zl, Zp) plus the controls U+0009–U+000D and U+001C–U+001F.\n * `String.trim()` is not the same set: it strips U+FEFF, which Kotlin keeps as\n * a literal, and keeps U+001C–U+001F, which Kotlin counts as blank.\n */\nfunction isKotlinBlank(value: string): boolean {\n return [...value].every(character => {\n const code = character.charCodeAt(0);\n return (\n (code >= 0x09 && code <= 0x0d) ||\n (code >= 0x1c && code <= 0x1f) ||\n /^[\\p{Zs}\\p{Zl}\\p{Zp}]$/u.test(character)\n );\n });\n}\n\n/** The repeat counts each pattern letter accepts. */\nconst DATE_PATTERN_COUNTS: Readonly<\n Record<string, number | readonly number[]>\n> = {\n G: 5,\n u: 19,\n y: 19,\n Q: 5,\n q: 5,\n M: 5,\n L: 5,\n D: 3,\n d: 2,\n F: 1,\n E: 5,\n e: 5,\n c: [1, 3, 4, 5],\n a: 1,\n B: [1, 4, 5],\n h: 2,\n H: 2,\n k: 2,\n K: 2,\n m: 2,\n s: 2,\n S: 9,\n A: 19,\n n: 19,\n N: 19,\n V: [2],\n v: [1, 4],\n z: 4,\n O: [1, 4],\n X: 5,\n x: 5,\n Z: 5,\n W: 1,\n w: 2,\n Y: Number.POSITIVE_INFINITY,\n g: 19,\n};\n\nfunction validateDatePatternLetter(\n pattern: string,\n letter: string,\n count: number,\n): void {\n const allowed = DATE_PATTERN_COUNTS[letter];\n const valid =\n typeof allowed === 'number'\n ? count <= allowed\n : allowed?.includes(count) === true;\n if (!valid) {\n throw new TypeError(`datePattern is invalid: [${pattern}].`);\n }\n}\n\nfunction isNumericDatePatternLetter(\n letter: string | undefined,\n count: number,\n): boolean {\n return (\n letter !== undefined &&\n ('uyDFdhHkKmsSgAnNWwY'.includes(letter) ||\n (letter === 'c' && count === 1) ||\n ('eMLQq'.includes(letter) && count <= 2))\n );\n}\n\n/**\n * Refuses a `datePattern` Wow refuses: a blank one (blank as Kotlin counts\n * it), and one `DateTimeFormatter.ofPattern` would refuse — an unknown letter\n * or repeat count, an unclosed quote, a `]` without its `[`, a reserved\n * character, or a padded numeric field followed directly by another numeric\n * field. `test/dsl/datePattern.test.ts` holds this to a corpus the JVM judged.\n */\nexport function validateDatePattern(pattern: string): void {\n if (typeof pattern !== 'string' || isKotlinBlank(pattern)) {\n throw new TypeError('datePattern cannot be blank.');\n }\n let quoted = false;\n let optionalDepth = 0;\n for (let index = 0; index < pattern.length; index++) {\n const character = pattern[index];\n if (character === \"'\") {\n if (pattern[index + 1] === \"'\") {\n index++;\n } else {\n quoted = !quoted;\n }\n continue;\n }\n if (quoted) continue;\n if (/[A-Za-z]/.test(character)) {\n let letter = character;\n let end = index + 1;\n while (pattern[end] === letter) end++;\n let count = end - index;\n let padded = false;\n if (letter === 'p') {\n padded = true;\n letter = pattern[end];\n if (!letter || !/[A-Za-z]/.test(letter)) {\n throw new TypeError(`datePattern is invalid: [${pattern}].`);\n }\n const fieldStart = end++;\n while (pattern[end] === letter) end++;\n count = end - fieldStart;\n }\n validateDatePatternLetter(pattern, letter, count);\n if (padded && isNumericDatePatternLetter(letter, count)) {\n const nextLetter = pattern[end];\n let nextEnd = end;\n while (nextEnd < pattern.length && pattern[nextEnd] === nextLetter)\n nextEnd++;\n if (isNumericDatePatternLetter(nextLetter, nextEnd - end)) {\n throw new TypeError(`datePattern is invalid: [${pattern}].`);\n }\n }\n index = end - 1;\n } else if (character === '[') {\n optionalDepth++;\n } else if (character === ']') {\n if (optionalDepth === 0)\n throw new TypeError(`datePattern is invalid: [${pattern}].`);\n optionalDepth--;\n } else if ('{}#'.includes(character)) {\n throw new TypeError(`datePattern is invalid: [${pattern}].`);\n }\n }\n if (quoted) {\n throw new TypeError(`datePattern is invalid: [${pattern}].`);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=function(e){return e.MATCH_ALL=`MATCH_ALL`,e.MATCH_NONE=`MATCH_NONE`,e.ID=`ID`,e.IDS=`IDS`,e.AGGREGATE_ID=`AGGREGATE_ID`,e.AGGREGATE_IDS=`AGGREGATE_IDS`,e.TENANT_ID=`TENANT_ID`,e.OWNER_ID=`OWNER_ID`,e.SPACE_ID=`SPACE_ID`,e.AND=`AND`,e.OR=`OR`,e.NOR=`NOR`,e.EQ=`EQ`,e.NE=`NE`,e.GT=`GT`,e.GTE=`GTE`,e.LT=`LT`,e.LTE=`LTE`,e.CONTAINS=`CONTAINS`,e.STARTS_WITH=`STARTS_WITH`,e.ENDS_WITH=`ENDS_WITH`,e.IN=`IN`,e.NOT_IN=`NOT_IN`,e.BETWEEN=`BETWEEN`,e.CONTAINS_ALL=`CONTAINS_ALL`,e.IS_EMPTY=`IS_EMPTY`,e.IS_EMPTY_STRING=`IS_EMPTY_STRING`,e.IS_NOT_EMPTY_STRING=`IS_NOT_EMPTY_STRING`,e.IS_NULL=`IS_NULL`,e.IS_NOT_NULL=`IS_NOT_NULL`,e.EXISTS=`EXISTS`,e.NOT_EXISTS=`NOT_EXISTS`,e.DELETION=`DELETION`,e.ELEMENT_MATCH=`ELEMENT_MATCH`,e.SEARCH=`SEARCH`,e.TODAY=`TODAY`,e.BEFORE_TODAY=`BEFORE_TODAY`,e.TOMORROW=`TOMORROW`,e.THIS_WEEK=`THIS_WEEK`,e.NEXT_WEEK=`NEXT_WEEK`,e.LAST_WEEK=`LAST_WEEK`,e.THIS_MONTH=`THIS_MONTH`,e.LAST_MONTH=`LAST_MONTH`,e.YESTERDAY=`YESTERDAY`,e.NEXT_MONTH=`NEXT_MONTH`,e.LAST_YEAR=`LAST_YEAR`,e.THIS_YEAR=`THIS_YEAR`,e.NEXT_YEAR=`NEXT_YEAR`,e.RECENT_DAYS=`RECENT_DAYS`,e.EARLIER_DAYS=`EARLIER_DAYS`,e.BEFORE_NOW=`BEFORE_NOW`,e.AFTER_NOW=`AFTER_NOW`,e.EXPRESSION=`EXPRESSION`,e}({}),t=function(e){return e.CASE_SENSITIVE=`CASE_SENSITIVE`,e.CASE_INSENSITIVE=`CASE_INSENSITIVE`,e}({}),n=function(e){return e.TERMS=`TERMS`,e.PHRASE=`PHRASE`,e}({}),r=function(e){return e.NANOSECONDS=`NANOSECONDS`,e.MICROSECONDS=`MICROSECONDS`,e.MILLISECONDS=`MILLISECONDS`,e.SECONDS=`SECONDS`,e.MINUTES=`MINUTES`,e.HOURS=`HOURS`,e.DAYS=`DAYS`,e}({});exports.FilterOperator=e,exports.SearchMode=n,exports.StringComparison=t,exports.TimeUnit=r;
|
|
2
|
+
//# sourceMappingURL=operator.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operator.cjs","names":["FilterOperator","\"MATCH_ALL\"","\"MATCH_NONE\"","\"ID\"","\"IDS\"","\"AGGREGATE_ID\"","\"AGGREGATE_IDS\"","\"TENANT_ID\"","\"OWNER_ID\"","\"SPACE_ID\"","\"AND\"","\"OR\"","\"NOR\"","\"EQ\"","\"NE\"","\"GT\"","\"GTE\"","\"LT\"","\"LTE\"","\"CONTAINS\"","\"STARTS_WITH\"","\"ENDS_WITH\"","\"IN\"","\"NOT_IN\"","\"BETWEEN\"","\"CONTAINS_ALL\"","\"IS_EMPTY\"","\"IS_EMPTY_STRING\"","\"IS_NOT_EMPTY_STRING\"","\"IS_NULL\"","\"IS_NOT_NULL\"","\"EXISTS\"","\"NOT_EXISTS\"","\"DELETION\"","\"ELEMENT_MATCH\"","\"SEARCH\"","\"TODAY\"","\"BEFORE_TODAY\"","\"TOMORROW\"","\"THIS_WEEK\"","\"NEXT_WEEK\"","\"LAST_WEEK\"","\"THIS_MONTH\"","\"LAST_MONTH\"","\"YESTERDAY\"","\"NEXT_MONTH\"","\"LAST_YEAR\"","\"THIS_YEAR\"","\"NEXT_YEAR\"","\"RECENT_DAYS\"","\"EARLIER_DAYS\"","\"BEFORE_NOW\"","\"AFTER_NOW\"","\"EXPRESSION\"","StringComparison","\"CASE_SENSITIVE\"","\"CASE_INSENSITIVE\"","SearchMode","\"TERMS\"","\"PHRASE\"","TimeUnit","\"NANOSECONDS\"","\"MICROSECONDS\"","\"MILLISECONDS\"","\"SECONDS\"","\"MINUTES\"","\"HOURS\"","\"DAYS\""],"sources":["../../../src/dsl/filter/operator.ts"],"sourcesContent":["/*\n * Copyright [2021-present] [ahoo wang <ahoowang@qq.com> (https://github.com/Ahoo-Wang)].\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * http://www.apache.org/licenses/LICENSE-2.0\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Discriminator sent as the `op` property of every filter expression. The\n * values match the server-side `FilterOperator` enum.\n */\nexport enum FilterOperator {\n MATCH_ALL = 'MATCH_ALL',\n MATCH_NONE = 'MATCH_NONE',\n ID = 'ID',\n IDS = 'IDS',\n AGGREGATE_ID = 'AGGREGATE_ID',\n AGGREGATE_IDS = 'AGGREGATE_IDS',\n TENANT_ID = 'TENANT_ID',\n OWNER_ID = 'OWNER_ID',\n SPACE_ID = 'SPACE_ID',\n AND = 'AND',\n OR = 'OR',\n NOR = 'NOR',\n EQ = 'EQ',\n NE = 'NE',\n GT = 'GT',\n GTE = 'GTE',\n LT = 'LT',\n LTE = 'LTE',\n CONTAINS = 'CONTAINS',\n STARTS_WITH = 'STARTS_WITH',\n ENDS_WITH = 'ENDS_WITH',\n IN = 'IN',\n NOT_IN = 'NOT_IN',\n BETWEEN = 'BETWEEN',\n CONTAINS_ALL = 'CONTAINS_ALL',\n IS_EMPTY = 'IS_EMPTY',\n IS_EMPTY_STRING = 'IS_EMPTY_STRING',\n IS_NOT_EMPTY_STRING = 'IS_NOT_EMPTY_STRING',\n IS_NULL = 'IS_NULL',\n IS_NOT_NULL = 'IS_NOT_NULL',\n EXISTS = 'EXISTS',\n NOT_EXISTS = 'NOT_EXISTS',\n DELETION = 'DELETION',\n ELEMENT_MATCH = 'ELEMENT_MATCH',\n SEARCH = 'SEARCH',\n TODAY = 'TODAY',\n BEFORE_TODAY = 'BEFORE_TODAY',\n TOMORROW = 'TOMORROW',\n THIS_WEEK = 'THIS_WEEK',\n NEXT_WEEK = 'NEXT_WEEK',\n LAST_WEEK = 'LAST_WEEK',\n THIS_MONTH = 'THIS_MONTH',\n LAST_MONTH = 'LAST_MONTH',\n YESTERDAY = 'YESTERDAY',\n NEXT_MONTH = 'NEXT_MONTH',\n LAST_YEAR = 'LAST_YEAR',\n THIS_YEAR = 'THIS_YEAR',\n NEXT_YEAR = 'NEXT_YEAR',\n RECENT_DAYS = 'RECENT_DAYS',\n EARLIER_DAYS = 'EARLIER_DAYS',\n /**\n * The field is strictly before the server's `now + offset`. Needs a Wow\n * server of 9.2.0 or later.\n */\n BEFORE_NOW = 'BEFORE_NOW',\n /**\n * The field is strictly after the server's `now + offset`. Needs a Wow\n * server of 9.2.0 or later.\n */\n AFTER_NOW = 'AFTER_NOW',\n /**\n * A computed expression, such as the hours between two time fields,\n * compared with a number. Evaluated per record, so expensive; a record\n * whose expression has no value never matches. Needs a Wow server of\n * 9.2.0 or later.\n */\n EXPRESSION = 'EXPRESSION',\n}\n\n/**\n * Case handling for `CONTAINS`, `STARTS_WITH` and `ENDS_WITH`.\n */\nexport enum StringComparison {\n /**\n * Characters must match exactly. The default.\n */\n CASE_SENSITIVE = 'CASE_SENSITIVE',\n /**\n * Ignores case. Backends may execute this more expensively.\n */\n CASE_INSENSITIVE = 'CASE_INSENSITIVE',\n}\n\n/**\n * Matching mode of a full-text `SEARCH` filter.\n */\nexport enum SearchMode {\n /**\n * Analyzed terms match independently; they need not appear together. The\n * default.\n */\n TERMS = 'TERMS',\n /**\n * Analyzed terms must appear in order and at adjacent positions.\n */\n PHRASE = 'PHRASE',\n}\n\n/**\n * Unit of a numeric epoch time field targeted by a relative time filter.\n * Ignored when `datePattern` is set.\n */\nexport enum TimeUnit {\n NANOSECONDS = 'NANOSECONDS',\n MICROSECONDS = 'MICROSECONDS',\n MILLISECONDS = 'MILLISECONDS',\n SECONDS = 'SECONDS',\n MINUTES = 'MINUTES',\n HOURS = 'HOURS',\n DAYS = 'DAYS',\n}\n"],"mappings":"AAiBA,IAAYA,EAAL,SAAA,EAAA,OACL,GAAAC,UAAA,YACA,EAAAC,WAAA,aACA,EAAAC,GAAA,KACA,EAAAC,IAAA,MACA,EAAAC,aAAA,eACA,EAAAC,cAAA,gBACA,EAAAC,UAAA,YACA,EAAAC,SAAA,WACA,EAAAC,SAAA,WACA,EAAAC,IAAA,MACA,EAAAC,GAAA,KACA,EAAAC,IAAA,MACA,EAAAC,GAAA,KACA,EAAAC,GAAA,KACA,EAAAC,GAAA,KACA,EAAAC,IAAA,MACA,EAAAC,GAAA,KACA,EAAAC,IAAA,MACA,EAAAC,SAAA,WACA,EAAAC,YAAA,cACA,EAAAC,UAAA,YACA,EAAAC,GAAA,KACA,EAAAC,OAAA,SACA,EAAAC,QAAA,UACA,EAAAC,aAAA,eACA,EAAAC,SAAA,WACA,EAAAC,gBAAA,kBACA,EAAAC,oBAAA,sBACA,EAAAC,QAAA,UACA,EAAAC,YAAA,cACA,EAAAC,OAAA,SACA,EAAAC,WAAA,aACA,EAAAC,SAAA,WACA,EAAAC,cAAA,gBACA,EAAAC,OAAA,SACA,EAAAC,MAAA,QACA,EAAAC,aAAA,eACA,EAAAC,SAAA,WACA,EAAAC,UAAA,YACA,EAAAC,UAAA,YACA,EAAAC,UAAA,YACA,EAAAC,WAAA,aACA,EAAAC,WAAA,aACA,EAAAC,UAAA,YACA,EAAAC,WAAA,aACA,EAAAC,UAAA,YACA,EAAAC,UAAA,YACA,EAAAC,UAAA,YACA,EAAAC,YAAA,cACA,EAAAC,aAAA,eAKA,EAAAC,WAAA,aAKA,EAAAC,UAAA,YAOA,EAAAC,WAAA,cACF,EAAA,CAAA,CAAA,EAKYC,EAAL,SAAA,EAAA,OAIL,GAAAC,eAAA,iBAIA,EAAAC,iBAAA,oBACF,EAAA,CAAA,CAAA,EAKYC,EAAL,SAAA,EAAA,OAKL,GAAAC,MAAA,QAIA,EAAAC,OAAA,UACF,EAAA,CAAA,CAAA,EAMYC,EAAL,SAAA,EAAA,OACL,GAAAC,YAAA,cACA,EAAAC,aAAA,eACA,EAAAC,aAAA,eACA,EAAAC,QAAA,UACA,EAAAC,QAAA,UACA,EAAAC,MAAA,QACA,EAAAC,KAAA,QACF,EAAA,CAAA,CAAA"}
|