@digital-science-dsl/dimensions-analytics-mcp 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +61 -0
- package/README.md +152 -0
- package/bin/dimensions-analytics-mcp-http.js +2 -0
- package/bin/dimensions-analytics-mcp.js +2 -0
- package/dist/client/auth/config-loaders.d.ts +22 -0
- package/dist/client/auth/config-loaders.d.ts.map +1 -0
- package/dist/client/auth/config-loaders.js +68 -0
- package/dist/client/auth/config-loaders.js.map +1 -0
- package/dist/client/auth/decorators/index.d.ts +7 -0
- package/dist/client/auth/decorators/index.d.ts.map +1 -0
- package/dist/client/auth/decorators/index.js +6 -0
- package/dist/client/auth/decorators/index.js.map +1 -0
- package/dist/client/auth/decorators/with-caching.d.ts +81 -0
- package/dist/client/auth/decorators/with-caching.d.ts.map +1 -0
- package/dist/client/auth/decorators/with-caching.js +168 -0
- package/dist/client/auth/decorators/with-caching.js.map +1 -0
- package/dist/client/auth/factory.d.ts +13 -0
- package/dist/client/auth/factory.d.ts.map +1 -0
- package/dist/client/auth/factory.js +29 -0
- package/dist/client/auth/factory.js.map +1 -0
- package/dist/client/auth/index.d.ts +7 -0
- package/dist/client/auth/index.d.ts.map +1 -0
- package/dist/client/auth/index.js +6 -0
- package/dist/client/auth/index.js.map +1 -0
- package/dist/client/auth/jwt-utils.d.ts +17 -0
- package/dist/client/auth/jwt-utils.d.ts.map +1 -0
- package/dist/client/auth/jwt-utils.js +33 -0
- package/dist/client/auth/jwt-utils.js.map +1 -0
- package/dist/client/auth/node.d.ts +16 -0
- package/dist/client/auth/node.d.ts.map +1 -0
- package/dist/client/auth/node.js +15 -0
- package/dist/client/auth/node.js.map +1 -0
- package/dist/client/auth/providers/index.d.ts +2 -0
- package/dist/client/auth/providers/index.d.ts.map +1 -0
- package/dist/client/auth/providers/index.js +2 -0
- package/dist/client/auth/providers/index.js.map +1 -0
- package/dist/client/auth/providers/jwt-auth-provider.d.ts +70 -0
- package/dist/client/auth/providers/jwt-auth-provider.d.ts.map +1 -0
- package/dist/client/auth/providers/jwt-auth-provider.js +134 -0
- package/dist/client/auth/providers/jwt-auth-provider.js.map +1 -0
- package/dist/client/auth/schemas.d.ts +19 -0
- package/dist/client/auth/schemas.d.ts.map +1 -0
- package/dist/client/auth/schemas.js +23 -0
- package/dist/client/auth/schemas.js.map +1 -0
- package/dist/client/auth/types.d.ts +25 -0
- package/dist/client/auth/types.d.ts.map +1 -0
- package/dist/client/auth/types.js +9 -0
- package/dist/client/auth/types.js.map +1 -0
- package/dist/client/command.d.ts +44 -0
- package/dist/client/command.d.ts.map +1 -0
- package/dist/client/command.js +23 -0
- package/dist/client/command.js.map +1 -0
- package/dist/client/config/index.d.ts +11 -0
- package/dist/client/config/index.d.ts.map +1 -0
- package/dist/client/config/index.js +8 -0
- package/dist/client/config/index.js.map +1 -0
- package/dist/client/config/loader.d.ts +27 -0
- package/dist/client/config/loader.d.ts.map +1 -0
- package/dist/client/config/loader.js +128 -0
- package/dist/client/config/loader.js.map +1 -0
- package/dist/client/config/node.d.ts +18 -0
- package/dist/client/config/node.d.ts.map +1 -0
- package/dist/client/config/node.js +17 -0
- package/dist/client/config/node.js.map +1 -0
- package/dist/client/config/schemas.d.ts +23 -0
- package/dist/client/config/schemas.d.ts.map +1 -0
- package/dist/client/config/schemas.js +24 -0
- package/dist/client/config/schemas.js.map +1 -0
- package/dist/client/config/types.d.ts +37 -0
- package/dist/client/config/types.d.ts.map +1 -0
- package/dist/client/config/types.js +6 -0
- package/dist/client/config/types.js.map +1 -0
- package/dist/client/config/unified-loader.d.ts +41 -0
- package/dist/client/config/unified-loader.d.ts.map +1 -0
- package/dist/client/config/unified-loader.js +86 -0
- package/dist/client/config/unified-loader.js.map +1 -0
- package/dist/client/config.d.ts +43 -0
- package/dist/client/config.d.ts.map +1 -0
- package/dist/client/config.js +56 -0
- package/dist/client/config.js.map +1 -0
- package/dist/client/deployment-config.d.ts +36 -0
- package/dist/client/deployment-config.d.ts.map +1 -0
- package/dist/client/deployment-config.js +79 -0
- package/dist/client/deployment-config.js.map +1 -0
- package/dist/client/errors.d.ts +180 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +253 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/http-client.d.ts +215 -0
- package/dist/client/http-client.d.ts.map +1 -0
- package/dist/client/http-client.js +419 -0
- package/dist/client/http-client.js.map +1 -0
- package/dist/client/index.d.ts +28 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +18 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/internal-dsl-client.d.ts +30 -0
- package/dist/client/internal-dsl-client.d.ts.map +1 -0
- package/dist/client/internal-dsl-client.js +101 -0
- package/dist/client/internal-dsl-client.js.map +1 -0
- package/dist/client/rate-limiter.d.ts +79 -0
- package/dist/client/rate-limiter.d.ts.map +1 -0
- package/dist/client/rate-limiter.js +118 -0
- package/dist/client/rate-limiter.js.map +1 -0
- package/dist/client/resolve-api-key-user.d.ts +24 -0
- package/dist/client/resolve-api-key-user.d.ts.map +1 -0
- package/dist/client/resolve-api-key-user.js +80 -0
- package/dist/client/resolve-api-key-user.js.map +1 -0
- package/dist/client/types.d.ts +44 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +10 -0
- package/dist/client/types.js.map +1 -0
- package/dist/dsl/client.d.ts +330 -0
- package/dist/dsl/client.d.ts.map +1 -0
- package/dist/dsl/client.js +433 -0
- package/dist/dsl/client.js.map +1 -0
- package/dist/dsl/commands/apply-filters.d.ts +15 -0
- package/dist/dsl/commands/apply-filters.d.ts.map +1 -0
- package/dist/dsl/commands/apply-filters.js +29 -0
- package/dist/dsl/commands/apply-filters.js.map +1 -0
- package/dist/dsl/commands/facet/index.d.ts +6 -0
- package/dist/dsl/commands/facet/index.d.ts.map +1 -0
- package/dist/dsl/commands/facet/index.js +6 -0
- package/dist/dsl/commands/facet/index.js.map +1 -0
- package/dist/dsl/commands/facet/schemas.d.ts +71 -0
- package/dist/dsl/commands/facet/schemas.d.ts.map +1 -0
- package/dist/dsl/commands/facet/schemas.js +84 -0
- package/dist/dsl/commands/facet/schemas.js.map +1 -0
- package/dist/dsl/commands/functions/ClassifyCommand.d.ts +96 -0
- package/dist/dsl/commands/functions/ClassifyCommand.d.ts.map +1 -0
- package/dist/dsl/commands/functions/ClassifyCommand.js +95 -0
- package/dist/dsl/commands/functions/ClassifyCommand.js.map +1 -0
- package/dist/dsl/commands/functions/ExtractAffiliationsCommand.d.ts +86 -0
- package/dist/dsl/commands/functions/ExtractAffiliationsCommand.d.ts.map +1 -0
- package/dist/dsl/commands/functions/ExtractAffiliationsCommand.js +131 -0
- package/dist/dsl/commands/functions/ExtractAffiliationsCommand.js.map +1 -0
- package/dist/dsl/commands/functions/ExtractConceptsCommand.d.ts +73 -0
- package/dist/dsl/commands/functions/ExtractConceptsCommand.d.ts.map +1 -0
- package/dist/dsl/commands/functions/ExtractConceptsCommand.js +110 -0
- package/dist/dsl/commands/functions/ExtractConceptsCommand.js.map +1 -0
- package/dist/dsl/commands/functions/ExtractGrantsCommand.d.ts +66 -0
- package/dist/dsl/commands/functions/ExtractGrantsCommand.d.ts.map +1 -0
- package/dist/dsl/commands/functions/ExtractGrantsCommand.js +87 -0
- package/dist/dsl/commands/functions/ExtractGrantsCommand.js.map +1 -0
- package/dist/dsl/commands/functions/index.d.ts +10 -0
- package/dist/dsl/commands/functions/index.d.ts.map +1 -0
- package/dist/dsl/commands/functions/index.js +10 -0
- package/dist/dsl/commands/functions/index.js.map +1 -0
- package/dist/dsl/commands/index.d.ts +8 -0
- package/dist/dsl/commands/index.d.ts.map +1 -0
- package/dist/dsl/commands/index.js +7 -0
- package/dist/dsl/commands/index.js.map +1 -0
- package/dist/dsl/commands/validate-input.d.ts +18 -0
- package/dist/dsl/commands/validate-input.d.ts.map +1 -0
- package/dist/dsl/commands/validate-input.js +27 -0
- package/dist/dsl/commands/validate-input.js.map +1 -0
- package/dist/dsl/create-client.d.ts +32 -0
- package/dist/dsl/create-client.d.ts.map +1 -0
- package/dist/dsl/create-client.js +58 -0
- package/dist/dsl/create-client.js.map +1 -0
- package/dist/dsl/fluent-query-builder.d.ts +439 -0
- package/dist/dsl/fluent-query-builder.d.ts.map +1 -0
- package/dist/dsl/fluent-query-builder.js +534 -0
- package/dist/dsl/fluent-query-builder.js.map +1 -0
- package/dist/dsl/index.d.ts +32 -0
- package/dist/dsl/index.d.ts.map +1 -0
- package/dist/dsl/index.js +31 -0
- package/dist/dsl/index.js.map +1 -0
- package/dist/dsl/pagination.d.ts +82 -0
- package/dist/dsl/pagination.d.ts.map +1 -0
- package/dist/dsl/pagination.js +135 -0
- package/dist/dsl/pagination.js.map +1 -0
- package/dist/dsl/query-builder.d.ts +456 -0
- package/dist/dsl/query-builder.d.ts.map +1 -0
- package/dist/dsl/query-builder.js +994 -0
- package/dist/dsl/query-builder.js.map +1 -0
- package/dist/dsl/response-parser.d.ts +111 -0
- package/dist/dsl/response-parser.d.ts.map +1 -0
- package/dist/dsl/response-parser.js +210 -0
- package/dist/dsl/response-parser.js.map +1 -0
- package/dist/dsl/schema/cache.d.ts +52 -0
- package/dist/dsl/schema/cache.d.ts.map +1 -0
- package/dist/dsl/schema/cache.js +97 -0
- package/dist/dsl/schema/cache.js.map +1 -0
- package/dist/dsl/schema/extract.d.ts +18 -0
- package/dist/dsl/schema/extract.d.ts.map +1 -0
- package/dist/dsl/schema/extract.js +41 -0
- package/dist/dsl/schema/extract.js.map +1 -0
- package/dist/dsl/schema/index.d.ts +13 -0
- package/dist/dsl/schema/index.d.ts.map +1 -0
- package/dist/dsl/schema/index.js +12 -0
- package/dist/dsl/schema/index.js.map +1 -0
- package/dist/dsl/schema/load.d.ts +41 -0
- package/dist/dsl/schema/load.d.ts.map +1 -0
- package/dist/dsl/schema/load.js +119 -0
- package/dist/dsl/schema/load.js.map +1 -0
- package/dist/dsl/schema/store.d.ts +137 -0
- package/dist/dsl/schema/store.d.ts.map +1 -0
- package/dist/dsl/schema/store.js +204 -0
- package/dist/dsl/schema/store.js.map +1 -0
- package/dist/dsl/schema/structured-entities.d.ts +21 -0
- package/dist/dsl/schema/structured-entities.d.ts.map +1 -0
- package/dist/dsl/schema/structured-entities.js +39 -0
- package/dist/dsl/schema/structured-entities.js.map +1 -0
- package/dist/dsl/schema/summary.d.ts +51 -0
- package/dist/dsl/schema/summary.d.ts.map +1 -0
- package/dist/dsl/schema/summary.js +61 -0
- package/dist/dsl/schema/summary.js.map +1 -0
- package/dist/dsl/schema/types.d.ts +36 -0
- package/dist/dsl/schema/types.d.ts.map +1 -0
- package/dist/dsl/schema/types.js +6 -0
- package/dist/dsl/schema/types.js.map +1 -0
- package/dist/dsl/schema/validation.d.ts +21 -0
- package/dist/dsl/schema/validation.d.ts.map +1 -0
- package/dist/dsl/schema/validation.js +44 -0
- package/dist/dsl/schema/validation.js.map +1 -0
- package/dist/dsl/types/buckets.d.ts +18 -0
- package/dist/dsl/types/buckets.d.ts.map +1 -0
- package/dist/dsl/types/buckets.js +6 -0
- package/dist/dsl/types/buckets.js.map +1 -0
- package/dist/dsl/types/common.d.ts +91 -0
- package/dist/dsl/types/common.d.ts.map +1 -0
- package/dist/dsl/types/common.js +6 -0
- package/dist/dsl/types/common.js.map +1 -0
- package/dist/dsl/types/entities.d.ts +35 -0
- package/dist/dsl/types/entities.d.ts.map +1 -0
- package/dist/dsl/types/entities.js +11 -0
- package/dist/dsl/types/entities.js.map +1 -0
- package/dist/dsl/types/index.d.ts +12 -0
- package/dist/dsl/types/index.d.ts.map +1 -0
- package/dist/dsl/types/index.js +7 -0
- package/dist/dsl/types/index.js.map +1 -0
- package/dist/dsl/types/return-clauses.d.ts +107 -0
- package/dist/dsl/types/return-clauses.d.ts.map +1 -0
- package/dist/dsl/types/return-clauses.js +22 -0
- package/dist/dsl/types/return-clauses.js.map +1 -0
- package/dist/dsl/types/special-functions.d.ts +175 -0
- package/dist/dsl/types/special-functions.d.ts.map +1 -0
- package/dist/dsl/types/special-functions.js +25 -0
- package/dist/dsl/types/special-functions.js.map +1 -0
- package/dist/dsl/types/vocabulary.d.ts +21 -0
- package/dist/dsl/types/vocabulary.d.ts.map +1 -0
- package/dist/dsl/types/vocabulary.js +44 -0
- package/dist/dsl/types/vocabulary.js.map +1 -0
- package/dist/dsl/usage-policy.d.ts +87 -0
- package/dist/dsl/usage-policy.d.ts.map +1 -0
- package/dist/dsl/usage-policy.js +133 -0
- package/dist/dsl/usage-policy.js.map +1 -0
- package/dist/dsl/utils/escape.d.ts +24 -0
- package/dist/dsl/utils/escape.d.ts.map +1 -0
- package/dist/dsl/utils/escape.js +124 -0
- package/dist/dsl/utils/escape.js.map +1 -0
- package/dist/dsl/utils/sanitize.d.ts +13 -0
- package/dist/dsl/utils/sanitize.d.ts.map +1 -0
- package/dist/dsl/utils/sanitize.js +19 -0
- package/dist/dsl/utils/sanitize.js.map +1 -0
- package/dist/dsl/utils/string-utils.d.ts +35 -0
- package/dist/dsl/utils/string-utils.d.ts.map +1 -0
- package/dist/dsl/utils/string-utils.js +145 -0
- package/dist/dsl/utils/string-utils.js.map +1 -0
- package/dist/dsl/utils/validate-field-name.d.ts +11 -0
- package/dist/dsl/utils/validate-field-name.d.ts.map +1 -0
- package/dist/dsl/utils/validate-field-name.js +18 -0
- package/dist/dsl/utils/validate-field-name.js.map +1 -0
- package/dist/examples/dsl-examples.d.ts +11 -0
- package/dist/examples/dsl-examples.d.ts.map +1 -0
- package/dist/examples/dsl-examples.js +49 -0
- package/dist/examples/dsl-examples.js.map +1 -0
- package/dist/examples/usage-scenarios.d.ts +22 -0
- package/dist/examples/usage-scenarios.d.ts.map +1 -0
- package/dist/examples/usage-scenarios.js +173 -0
- package/dist/examples/usage-scenarios.js.map +1 -0
- package/dist/funder-org-names.d.ts +12 -0
- package/dist/funder-org-names.d.ts.map +1 -0
- package/dist/funder-org-names.js +30 -0
- package/dist/funder-org-names.js.map +1 -0
- package/dist/http-main.d.ts +7 -0
- package/dist/http-main.d.ts.map +1 -0
- package/dist/http-main.js +36 -0
- package/dist/http-main.js.map +1 -0
- package/dist/http.d.ts +29 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +173 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/kwq/build-query.d.ts +26 -0
- package/dist/kwq/build-query.d.ts.map +1 -0
- package/dist/kwq/build-query.js +37 -0
- package/dist/kwq/build-query.js.map +1 -0
- package/dist/kwq/concept-groups.d.ts +49 -0
- package/dist/kwq/concept-groups.d.ts.map +1 -0
- package/dist/kwq/concept-groups.js +55 -0
- package/dist/kwq/concept-groups.js.map +1 -0
- package/dist/kwq/dsl-assembler.d.ts +28 -0
- package/dist/kwq/dsl-assembler.d.ts.map +1 -0
- package/dist/kwq/dsl-assembler.js +124 -0
- package/dist/kwq/dsl-assembler.js.map +1 -0
- package/dist/kwq/ensemble.d.ts +38 -0
- package/dist/kwq/ensemble.d.ts.map +1 -0
- package/dist/kwq/ensemble.js +107 -0
- package/dist/kwq/ensemble.js.map +1 -0
- package/dist/kwq/index.d.ts +16 -0
- package/dist/kwq/index.d.ts.map +1 -0
- package/dist/kwq/index.js +14 -0
- package/dist/kwq/index.js.map +1 -0
- package/dist/kwq/types.d.ts +120 -0
- package/dist/kwq/types.d.ts.map +1 -0
- package/dist/kwq/types.js +11 -0
- package/dist/kwq/types.js.map +1 -0
- package/dist/lambda.d.ts +10 -0
- package/dist/lambda.d.ts.map +1 -0
- package/dist/lambda.js +4 -0
- package/dist/lambda.js.map +1 -0
- package/dist/main.d.ts +8 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +33 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp/batch-fetch.d.ts +89 -0
- package/dist/mcp/batch-fetch.d.ts.map +1 -0
- package/dist/mcp/batch-fetch.js +178 -0
- package/dist/mcp/batch-fetch.js.map +1 -0
- package/dist/mcp/examples/dsl-examples.d.ts +21 -0
- package/dist/mcp/examples/dsl-examples.d.ts.map +1 -0
- package/dist/mcp/examples/dsl-examples.js +61 -0
- package/dist/mcp/examples/dsl-examples.js.map +1 -0
- package/dist/mcp/examples/usage-scenarios.d.ts +20 -0
- package/dist/mcp/examples/usage-scenarios.d.ts.map +1 -0
- package/dist/mcp/examples/usage-scenarios.js +169 -0
- package/dist/mcp/examples/usage-scenarios.js.map +1 -0
- package/dist/mcp/export-format.d.ts +43 -0
- package/dist/mcp/export-format.d.ts.map +1 -0
- package/dist/mcp/export-format.js +92 -0
- package/dist/mcp/export-format.js.map +1 -0
- package/dist/mcp/funder-org-names.d.ts +12 -0
- package/dist/mcp/funder-org-names.d.ts.map +1 -0
- package/dist/mcp/funder-org-names.js +30 -0
- package/dist/mcp/funder-org-names.js.map +1 -0
- package/dist/mcp/http-server.d.ts +20 -0
- package/dist/mcp/http-server.d.ts.map +1 -0
- package/dist/mcp/http-server.js +118 -0
- package/dist/mcp/http-server.js.map +1 -0
- package/dist/mcp/middleware/field-aliases.d.ts +97 -0
- package/dist/mcp/middleware/field-aliases.d.ts.map +1 -0
- package/dist/mcp/middleware/field-aliases.js +208 -0
- package/dist/mcp/middleware/field-aliases.js.map +1 -0
- package/dist/mcp/resources/schema.d.ts +13 -0
- package/dist/mcp/resources/schema.d.ts.map +1 -0
- package/dist/mcp/resources/schema.js +262 -0
- package/dist/mcp/resources/schema.js.map +1 -0
- package/dist/mcp/schema/context.d.ts +10 -0
- package/dist/mcp/schema/context.d.ts.map +1 -0
- package/dist/mcp/schema/context.js +6 -0
- package/dist/mcp/schema/context.js.map +1 -0
- package/dist/mcp/schema/index.d.ts +8 -0
- package/dist/mcp/schema/index.d.ts.map +1 -0
- package/dist/mcp/schema/index.js +6 -0
- package/dist/mcp/schema/index.js.map +1 -0
- package/dist/mcp/server.d.ts +56 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +168 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/shared-schema.d.ts +13 -0
- package/dist/mcp/shared-schema.d.ts.map +1 -0
- package/dist/mcp/shared-schema.js +28 -0
- package/dist/mcp/shared-schema.js.map +1 -0
- package/dist/mcp/tools/analytics-filters.d.ts +18 -0
- package/dist/mcp/tools/analytics-filters.d.ts.map +1 -0
- package/dist/mcp/tools/analytics-filters.js +35 -0
- package/dist/mcp/tools/analytics-filters.js.map +1 -0
- package/dist/mcp/tools/analytics.d.ts +16 -0
- package/dist/mcp/tools/analytics.d.ts.map +1 -0
- package/dist/mcp/tools/analytics.js +381 -0
- package/dist/mcp/tools/analytics.js.map +1 -0
- package/dist/mcp/tools/concept-profile.d.ts +14 -0
- package/dist/mcp/tools/concept-profile.d.ts.map +1 -0
- package/dist/mcp/tools/concept-profile.js +130 -0
- package/dist/mcp/tools/concept-profile.js.map +1 -0
- package/dist/mcp/tools/dataset-profile.d.ts +15 -0
- package/dist/mcp/tools/dataset-profile.d.ts.map +1 -0
- package/dist/mcp/tools/dataset-profile.js +194 -0
- package/dist/mcp/tools/dataset-profile.js.map +1 -0
- package/dist/mcp/tools/fetch-search-pages.d.ts +15 -0
- package/dist/mcp/tools/fetch-search-pages.d.ts.map +1 -0
- package/dist/mcp/tools/fetch-search-pages.js +237 -0
- package/dist/mcp/tools/fetch-search-pages.js.map +1 -0
- package/dist/mcp/tools/functions.d.ts +14 -0
- package/dist/mcp/tools/functions.d.ts.map +1 -0
- package/dist/mcp/tools/functions.js +87 -0
- package/dist/mcp/tools/functions.js.map +1 -0
- package/dist/mcp/tools/impact-chain.d.ts +15 -0
- package/dist/mcp/tools/impact-chain.d.ts.map +1 -0
- package/dist/mcp/tools/impact-chain.js +96 -0
- package/dist/mcp/tools/impact-chain.js.map +1 -0
- package/dist/mcp/tools/kwq.d.ts +19 -0
- package/dist/mcp/tools/kwq.d.ts.map +1 -0
- package/dist/mcp/tools/kwq.js +156 -0
- package/dist/mcp/tools/kwq.js.map +1 -0
- package/dist/mcp/tools/lookup.d.ts +14 -0
- package/dist/mcp/tools/lookup.d.ts.map +1 -0
- package/dist/mcp/tools/lookup.js +146 -0
- package/dist/mcp/tools/lookup.js.map +1 -0
- package/dist/mcp/tools/policy-profile.d.ts +15 -0
- package/dist/mcp/tools/policy-profile.d.ts.map +1 -0
- package/dist/mcp/tools/policy-profile.js +174 -0
- package/dist/mcp/tools/policy-profile.js.map +1 -0
- package/dist/mcp/tools/profile.d.ts +14 -0
- package/dist/mcp/tools/profile.d.ts.map +1 -0
- package/dist/mcp/tools/profile.js +349 -0
- package/dist/mcp/tools/profile.js.map +1 -0
- package/dist/mcp/tools/query.d.ts +16 -0
- package/dist/mcp/tools/query.d.ts.map +1 -0
- package/dist/mcp/tools/query.js +75 -0
- package/dist/mcp/tools/query.js.map +1 -0
- package/dist/mcp/tools/schema.d.ts +23 -0
- package/dist/mcp/tools/schema.d.ts.map +1 -0
- package/dist/mcp/tools/schema.js +124 -0
- package/dist/mcp/tools/schema.js.map +1 -0
- package/dist/mcp/tools/search-entity-metadata.d.ts +18 -0
- package/dist/mcp/tools/search-entity-metadata.d.ts.map +1 -0
- package/dist/mcp/tools/search-entity-metadata.js +221 -0
- package/dist/mcp/tools/search-entity-metadata.js.map +1 -0
- package/dist/mcp/tools/search-input.d.ts +58 -0
- package/dist/mcp/tools/search-input.d.ts.map +1 -0
- package/dist/mcp/tools/search-input.js +76 -0
- package/dist/mcp/tools/search-input.js.map +1 -0
- package/dist/mcp/tools/search.d.ts +24 -0
- package/dist/mcp/tools/search.d.ts.map +1 -0
- package/dist/mcp/tools/search.js +115 -0
- package/dist/mcp/tools/search.js.map +1 -0
- package/dist/mcp/utils.d.ts +82 -0
- package/dist/mcp/utils.d.ts.map +1 -0
- package/dist/mcp/utils.js +126 -0
- package/dist/mcp/utils.js.map +1 -0
- package/dist/middleware/field-aliases.d.ts +97 -0
- package/dist/middleware/field-aliases.d.ts.map +1 -0
- package/dist/middleware/field-aliases.js +208 -0
- package/dist/middleware/field-aliases.js.map +1 -0
- package/dist/resources/schema.d.ts +13 -0
- package/dist/resources/schema.d.ts.map +1 -0
- package/dist/resources/schema.js +204 -0
- package/dist/resources/schema.js.map +1 -0
- package/dist/schema/context.d.ts +10 -0
- package/dist/schema/context.d.ts.map +1 -0
- package/dist/schema/context.js +6 -0
- package/dist/schema/context.js.map +1 -0
- package/dist/schema/index.d.ts +9 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +6 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/load.d.ts +43 -0
- package/dist/schema/load.d.ts.map +1 -0
- package/dist/schema/load.js +139 -0
- package/dist/schema/load.js.map +1 -0
- package/dist/schema/store.d.ts +112 -0
- package/dist/schema/store.d.ts.map +1 -0
- package/dist/schema/store.js +173 -0
- package/dist/schema/store.js.map +1 -0
- package/dist/schema/structured-entities.d.ts +21 -0
- package/dist/schema/structured-entities.d.ts.map +1 -0
- package/dist/schema/structured-entities.js +39 -0
- package/dist/schema/structured-entities.js.map +1 -0
- package/dist/schema/types.d.ts +36 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +6 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/server.d.ts +57 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +144 -0
- package/dist/server.js.map +1 -0
- package/dist/telemetry.d.ts +172 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +233 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tools/analytics-filters.d.ts +18 -0
- package/dist/tools/analytics-filters.d.ts.map +1 -0
- package/dist/tools/analytics-filters.js +35 -0
- package/dist/tools/analytics-filters.js.map +1 -0
- package/dist/tools/analytics.d.ts +16 -0
- package/dist/tools/analytics.d.ts.map +1 -0
- package/dist/tools/analytics.js +381 -0
- package/dist/tools/analytics.js.map +1 -0
- package/dist/tools/concept-profile.d.ts +14 -0
- package/dist/tools/concept-profile.d.ts.map +1 -0
- package/dist/tools/concept-profile.js +130 -0
- package/dist/tools/concept-profile.js.map +1 -0
- package/dist/tools/dataset-profile.d.ts +15 -0
- package/dist/tools/dataset-profile.d.ts.map +1 -0
- package/dist/tools/dataset-profile.js +194 -0
- package/dist/tools/dataset-profile.js.map +1 -0
- package/dist/tools/functions.d.ts +14 -0
- package/dist/tools/functions.d.ts.map +1 -0
- package/dist/tools/functions.js +294 -0
- package/dist/tools/functions.js.map +1 -0
- package/dist/tools/impact-chain.d.ts +15 -0
- package/dist/tools/impact-chain.d.ts.map +1 -0
- package/dist/tools/impact-chain.js +96 -0
- package/dist/tools/impact-chain.js.map +1 -0
- package/dist/tools/kwq.d.ts +19 -0
- package/dist/tools/kwq.d.ts.map +1 -0
- package/dist/tools/kwq.js +156 -0
- package/dist/tools/kwq.js.map +1 -0
- package/dist/tools/lookup.d.ts +14 -0
- package/dist/tools/lookup.d.ts.map +1 -0
- package/dist/tools/lookup.js +213 -0
- package/dist/tools/lookup.js.map +1 -0
- package/dist/tools/policy-profile.d.ts +15 -0
- package/dist/tools/policy-profile.d.ts.map +1 -0
- package/dist/tools/policy-profile.js +174 -0
- package/dist/tools/policy-profile.js.map +1 -0
- package/dist/tools/profile.d.ts +14 -0
- package/dist/tools/profile.d.ts.map +1 -0
- package/dist/tools/profile.js +349 -0
- package/dist/tools/profile.js.map +1 -0
- package/dist/tools/query.d.ts +16 -0
- package/dist/tools/query.d.ts.map +1 -0
- package/dist/tools/query.js +53 -0
- package/dist/tools/query.js.map +1 -0
- package/dist/tools/schema.d.ts +23 -0
- package/dist/tools/schema.d.ts.map +1 -0
- package/dist/tools/schema.js +124 -0
- package/dist/tools/schema.js.map +1 -0
- package/dist/tools/search-entity-metadata.d.ts +18 -0
- package/dist/tools/search-entity-metadata.d.ts.map +1 -0
- package/dist/tools/search-entity-metadata.js +221 -0
- package/dist/tools/search-entity-metadata.js.map +1 -0
- package/dist/tools/search.d.ts +23 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +110 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/solr-fields.d.ts +39 -0
- package/dist/tools/solr-fields.d.ts.map +1 -0
- package/dist/tools/solr-fields.js +40 -0
- package/dist/tools/solr-fields.js.map +1 -0
- package/dist/utils.d.ts +70 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +104 -0
- package/dist/utils.js.map +1 -0
- package/package.json +41 -0
- package/src/client/auth/config-loaders.ts +81 -0
- package/src/client/auth/decorators/index.ts +7 -0
- package/src/client/auth/decorators/with-caching.ts +237 -0
- package/src/client/auth/factory.ts +34 -0
- package/src/client/auth/index.ts +6 -0
- package/src/client/auth/jwt-utils.ts +36 -0
- package/src/client/auth/node.ts +16 -0
- package/src/client/auth/providers/index.ts +1 -0
- package/src/client/auth/providers/jwt-auth-provider.ts +153 -0
- package/src/client/auth/schemas.ts +25 -0
- package/src/client/auth/types.ts +30 -0
- package/src/client/command.ts +54 -0
- package/src/client/config/index.ts +15 -0
- package/src/client/config/loader.ts +155 -0
- package/src/client/config/node.ts +22 -0
- package/src/client/config/schemas.ts +28 -0
- package/src/client/config/types.ts +39 -0
- package/src/client/config/unified-loader.ts +118 -0
- package/src/client/config.ts +69 -0
- package/src/client/deployment-config.ts +98 -0
- package/src/client/errors.ts +295 -0
- package/src/client/http-client.ts +577 -0
- package/src/client/index.ts +68 -0
- package/src/client/internal-dsl-client.ts +128 -0
- package/src/client/rate-limiter.ts +139 -0
- package/src/client/resolve-api-key-user.ts +99 -0
- package/src/client/types.ts +44 -0
- package/src/dsl/client.ts +538 -0
- package/src/dsl/commands/apply-filters.ts +35 -0
- package/src/dsl/commands/facet/index.ts +12 -0
- package/src/dsl/commands/facet/schemas.ts +101 -0
- package/src/dsl/commands/functions/ClassifyCommand.ts +129 -0
- package/src/dsl/commands/functions/ExtractAffiliationsCommand.ts +163 -0
- package/src/dsl/commands/functions/ExtractConceptsCommand.ts +141 -0
- package/src/dsl/commands/functions/ExtractGrantsCommand.ts +112 -0
- package/src/dsl/commands/functions/index.ts +31 -0
- package/src/dsl/commands/index.ts +29 -0
- package/src/dsl/commands/validate-input.ts +29 -0
- package/src/dsl/create-client.ts +80 -0
- package/src/dsl/fluent-query-builder.ts +684 -0
- package/src/dsl/index.ts +206 -0
- package/src/dsl/pagination.ts +202 -0
- package/src/dsl/query-builder.ts +1120 -0
- package/src/dsl/response-parser.ts +299 -0
- package/src/dsl/schema/cache.ts +124 -0
- package/src/dsl/schema/extract.ts +44 -0
- package/src/dsl/schema/index.ts +50 -0
- package/src/dsl/schema/load.ts +160 -0
- package/src/dsl/schema/store.ts +253 -0
- package/src/dsl/schema/structured-entities.ts +44 -0
- package/src/dsl/schema/summary.ts +94 -0
- package/src/dsl/schema/types.ts +40 -0
- package/src/dsl/schema/validation.ts +56 -0
- package/src/dsl/types/buckets.ts +22 -0
- package/src/dsl/types/common.ts +99 -0
- package/src/dsl/types/entities.ts +43 -0
- package/src/dsl/types/index.ts +63 -0
- package/src/dsl/types/return-clauses.ts +147 -0
- package/src/dsl/types/special-functions.ts +220 -0
- package/src/dsl/types/vocabulary.ts +82 -0
- package/src/dsl/usage-policy.ts +219 -0
- package/src/dsl/utils/escape.ts +123 -0
- package/src/dsl/utils/sanitize.ts +21 -0
- package/src/dsl/utils/string-utils.ts +147 -0
- package/src/dsl/utils/validate-field-name.ts +19 -0
- package/src/http-main.ts +41 -0
- package/src/index.ts +14 -0
- package/src/main.ts +40 -0
- package/src/mcp/batch-fetch.ts +255 -0
- package/src/mcp/examples/dsl-examples.ts +66 -0
- package/src/mcp/examples/usage-scenarios.ts +185 -0
- package/src/mcp/export-format.ts +113 -0
- package/src/mcp/funder-org-names.ts +30 -0
- package/src/mcp/http-server.ts +148 -0
- package/src/mcp/middleware/field-aliases.ts +274 -0
- package/src/mcp/resources/schema.ts +364 -0
- package/src/mcp/schema/context.ts +11 -0
- package/src/mcp/schema/index.ts +38 -0
- package/src/mcp/server.ts +247 -0
- package/src/mcp/shared-schema.ts +34 -0
- package/src/mcp/tools/analytics-filters.ts +46 -0
- package/src/mcp/tools/analytics.ts +453 -0
- package/src/mcp/tools/fetch-search-pages.ts +329 -0
- package/src/mcp/tools/functions.ts +105 -0
- package/src/mcp/tools/lookup.ts +182 -0
- package/src/mcp/tools/query.ts +91 -0
- package/src/mcp/tools/schema.ts +147 -0
- package/src/mcp/tools/search-entity-metadata.ts +253 -0
- package/src/mcp/tools/search-input.ts +87 -0
- package/src/mcp/tools/search.ts +168 -0
- package/src/mcp/utils.ts +199 -0
- package/test/client/auth/config-loaders.test.ts +92 -0
- package/test/client/auth/decorators/with-caching.test.ts +482 -0
- package/test/client/auth/factory.test.ts +68 -0
- package/test/client/auth/providers/jwt-auth-provider.test.ts +398 -0
- package/test/client/auth/types.test.ts +18 -0
- package/test/client/command.test.ts +163 -0
- package/test/client/config/loader.test.ts +377 -0
- package/test/client/config/unified-loader.test.ts +136 -0
- package/test/client/deployment-config.test.ts +69 -0
- package/test/client/errors/index.test.ts +408 -0
- package/test/client/helpers/mock-fetch.ts +42 -0
- package/test/client/http-client.test.ts +1148 -0
- package/test/client/integration/auth-providers.integration.test.ts +186 -0
- package/test/client/internal-dsl-client.test.ts +76 -0
- package/test/client/rate-limiter.test.ts +204 -0
- package/test/client/resolve-api-key-user.test.ts +87 -0
- package/test/dsl/client.special-functions.test.ts +387 -0
- package/test/dsl/client.test.ts +457 -0
- package/test/dsl/commands/apply-filters.test.ts +147 -0
- package/test/dsl/commands/functions/ClassifyCommand.test.ts +170 -0
- package/test/dsl/commands/functions/ExtractAffiliationsCommand.test.ts +306 -0
- package/test/dsl/commands/functions/ExtractConceptsCommand.test.ts +136 -0
- package/test/dsl/commands/functions/ExtractGrantsCommand.test.ts +202 -0
- package/test/dsl/commands/search/filters.test.ts +42 -0
- package/test/dsl/fluent-query-builder.test.ts +865 -0
- package/test/dsl/integration/client.integration.test.ts +294 -0
- package/test/dsl/integration/facet-api.integration.test.ts +276 -0
- package/test/dsl/integration/field-existence.integration.test.ts +148 -0
- package/test/dsl/integration/fluent-api-docs-examples.integration.test.ts +988 -0
- package/test/dsl/integration/fluent-api.integration.test.ts +615 -0
- package/test/dsl/integration/search-helpers.ts +27 -0
- package/test/dsl/integration/special-functions.integration.test.ts +224 -0
- package/test/dsl/integration/test-config.ts +52 -0
- package/test/dsl/pagination.test.ts +86 -0
- package/test/dsl/query-builder.test.ts +1775 -0
- package/test/dsl/response-parser.test.ts +520 -0
- package/test/dsl/schema/cache.test.ts +53 -0
- package/test/dsl/schema/load.test.ts +165 -0
- package/test/dsl/schema/summary.test.ts +61 -0
- package/test/dsl/schema/validation.test.ts +46 -0
- package/test/dsl/time-series.test.ts +135 -0
- package/test/dsl/unnest.test.ts +151 -0
- package/test/dsl/usage-policy.test.ts +100 -0
- package/test/dsl/utils/escape.property.test.ts +109 -0
- package/test/dsl/utils/escape.test.ts +140 -0
- package/test/dsl/utils/validate-field-name.property.test.ts +99 -0
- package/test/dsl/utils/validate-field-name.test.ts +55 -0
- package/test/examples/dsl-examples.test.ts +29 -0
- package/test/examples/usage-scenarios.test.ts +90 -0
- package/test/fixtures/describe-schema.json +4000 -0
- package/test/funder-org-names.test.ts +20 -0
- package/test/helpers/schema-fixture.ts +18 -0
- package/test/helpers/tool-test-harness.ts +114 -0
- package/test/integration/assertions.ts +263 -0
- package/test/integration/env.ts +108 -0
- package/test/integration/harness.ts +307 -0
- package/test/integration/hosted-client.ts +56 -0
- package/test/integration/hosted-mocks.ts +81 -0
- package/test/integration/hosted-run.ts +86 -0
- package/test/integration/hosted.e2e.test.ts +101 -0
- package/test/integration/reporter.ts +100 -0
- package/test/integration/run.ts +74 -0
- package/test/integration/suites/analytics.integration.ts +72 -0
- package/test/integration/suites/functions.integration.ts +37 -0
- package/test/integration/suites/hosted-smoke.integration.ts +38 -0
- package/test/integration/suites/index.ts +22 -0
- package/test/integration/suites/lookup.integration.ts +57 -0
- package/test/integration/suites/query.integration.ts +49 -0
- package/test/integration/suites/resources.integration.ts +68 -0
- package/test/integration/suites/search.integration.ts +80 -0
- package/test/integration/types.ts +92 -0
- package/test/integration/verify-usage-scenarios.ts +162 -0
- package/test/mcp/export-format.test.ts +67 -0
- package/test/mcp/http-server.test.ts +80 -0
- package/test/middleware/field-aliases.test.ts +287 -0
- package/test/resources/schema.test.ts +28 -0
- package/test/schema/describe-contract.test.ts +24 -0
- package/test/schema/store.test.ts +45 -0
- package/test/server.test.ts +170 -0
- package/test/tools/analytics-filters.test.ts +35 -0
- package/test/tools/analytics.test.ts +419 -0
- package/test/tools/fetch-search-pages.test.ts +200 -0
- package/test/tools/functions.test.ts +153 -0
- package/test/tools/lookup.test.ts +296 -0
- package/test/tools/query.test.ts +100 -0
- package/test/tools/schema.test.ts +37 -0
- package/test/tools/search.test.ts +415 -0
- package/test/utils.test.ts +45 -0
- package/tsconfig.json +9 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pagination helpers aligned with Dimensions DSL operational limits.
|
|
3
|
+
* @see https://docs.dimensions.ai/dsl/usagepolicy.html
|
|
4
|
+
* @module dsl/pagination
|
|
5
|
+
*/
|
|
6
|
+
/** Soft warning threshold for very large result sets. */
|
|
7
|
+
export declare const LARGE_RESULT_THRESHOLD = 10000;
|
|
8
|
+
/** Default pages per batch invocation (single page). */
|
|
9
|
+
export declare const DEFAULT_BATCH_MAX_PAGES = 1;
|
|
10
|
+
/** Hard cap on pages per batch invocation. */
|
|
11
|
+
export declare const HARD_MAX_BATCH_PAGES = 50;
|
|
12
|
+
/** Pages above this require `confirmLargeFetch`. */
|
|
13
|
+
export declare const CONFIRM_LARGE_FETCH_PAGES = 5;
|
|
14
|
+
/** Records above this require `confirmLargeFetch`. */
|
|
15
|
+
export declare const CONFIRM_LARGE_FETCH_RECORDS = 5000;
|
|
16
|
+
/** Max IDs returned in aggregate mode before truncation. */
|
|
17
|
+
export declare const AGGREGATE_ID_CAP = 500;
|
|
18
|
+
/** Metadata describing pagination state for search tool responses. */
|
|
19
|
+
export interface PaginationMetadata {
|
|
20
|
+
readonly pageSize: number;
|
|
21
|
+
readonly skip: number;
|
|
22
|
+
readonly page: number;
|
|
23
|
+
readonly nextSkip: number | null;
|
|
24
|
+
readonly maxPageSize: number;
|
|
25
|
+
readonly maxTotalRecords: number;
|
|
26
|
+
readonly maxPagesRemaining: number;
|
|
27
|
+
readonly estimatedRequestsToFetchAll: number;
|
|
28
|
+
readonly estimatedMinutesToFetchAll: number;
|
|
29
|
+
}
|
|
30
|
+
/** Arguments for resolving skip/limit from tool input. */
|
|
31
|
+
export type PaginationInput = {
|
|
32
|
+
readonly skip?: number;
|
|
33
|
+
readonly page?: number;
|
|
34
|
+
readonly limit?: number;
|
|
35
|
+
readonly pageSize?: number;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Validates that skip/limit stay within Dimensions pagination bounds.
|
|
39
|
+
* @param skip - Records to skip
|
|
40
|
+
* @param limit - Page size
|
|
41
|
+
* @throws {ValidationError} When out of bounds
|
|
42
|
+
*/
|
|
43
|
+
export declare function validatePaginationBounds(skip: number, limit: number): void;
|
|
44
|
+
/**
|
|
45
|
+
* Resolves skip and limit from tool arguments (`skip`, `page`, `limit`, or `pageSize`).
|
|
46
|
+
* @param args - Pagination-related tool arguments
|
|
47
|
+
* @returns Resolved skip and limit
|
|
48
|
+
* @throws {ValidationError} When both skip and page are set or bounds are invalid
|
|
49
|
+
*/
|
|
50
|
+
export declare function resolveSkipAndLimit(args: PaginationInput): {
|
|
51
|
+
skip: number;
|
|
52
|
+
limit: number;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Builds pagination metadata for a search response.
|
|
56
|
+
* @param skip - Current skip offset
|
|
57
|
+
* @param pageSize - Current page size
|
|
58
|
+
* @param totalCount - Total matching records from the API
|
|
59
|
+
* @returns Pagination metadata block
|
|
60
|
+
*/
|
|
61
|
+
export declare function buildPaginationMetadata(skip: number, pageSize: number, totalCount: number): PaginationMetadata;
|
|
62
|
+
/**
|
|
63
|
+
* Returns a soft warning when totalCount exceeds {@link LARGE_RESULT_THRESHOLD}.
|
|
64
|
+
* @param totalCount - Total matching records
|
|
65
|
+
* @returns Warning string or undefined
|
|
66
|
+
*/
|
|
67
|
+
export declare function largeResultWarning(totalCount: number): string | undefined;
|
|
68
|
+
/** Options for validating a multi-page batch request. */
|
|
69
|
+
export type BatchPaginationOptions = {
|
|
70
|
+
readonly startPage: number;
|
|
71
|
+
readonly maxPages: number;
|
|
72
|
+
readonly pageSize: number;
|
|
73
|
+
readonly maxRecords?: number;
|
|
74
|
+
readonly confirmLargeFetch?: boolean;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Validates multi-page batch parameters against policy guardrails.
|
|
78
|
+
* @param options - Batch request options
|
|
79
|
+
* @throws {ValidationError} When limits are exceeded or confirmation is required
|
|
80
|
+
*/
|
|
81
|
+
export declare function validateBatchPagination(options: BatchPaginationOptions): void;
|
|
82
|
+
//# sourceMappingURL=pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/dsl/pagination.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,yDAAyD;AACzD,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C,wDAAwD;AACxD,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,8CAA8C;AAC9C,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,oDAAoD;AACpD,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,sDAAsD;AACtD,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AAEjD,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;IAC7C,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC;CAC7C;AAED,0DAA0D;AAC1D,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAgB1E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAiB1F;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,kBAAkB,CA0BpB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQzE;AAED,yDAAyD;AACzD,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACtC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAoC7E"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pagination helpers aligned with Dimensions DSL operational limits.
|
|
3
|
+
* @see https://docs.dimensions.ai/dsl/usagepolicy.html
|
|
4
|
+
* @module dsl/pagination
|
|
5
|
+
*/
|
|
6
|
+
import { ValidationError } from "../client/index.js";
|
|
7
|
+
import { SCHEMA_LIMITS } from "./schema/store.js";
|
|
8
|
+
/** Soft warning threshold for very large result sets. */
|
|
9
|
+
export const LARGE_RESULT_THRESHOLD = 10_000;
|
|
10
|
+
/** Default pages per batch invocation (single page). */
|
|
11
|
+
export const DEFAULT_BATCH_MAX_PAGES = 1;
|
|
12
|
+
/** Hard cap on pages per batch invocation. */
|
|
13
|
+
export const HARD_MAX_BATCH_PAGES = 50;
|
|
14
|
+
/** Pages above this require `confirmLargeFetch`. */
|
|
15
|
+
export const CONFIRM_LARGE_FETCH_PAGES = 5;
|
|
16
|
+
/** Records above this require `confirmLargeFetch`. */
|
|
17
|
+
export const CONFIRM_LARGE_FETCH_RECORDS = 5_000;
|
|
18
|
+
/** Max IDs returned in aggregate mode before truncation. */
|
|
19
|
+
export const AGGREGATE_ID_CAP = 500;
|
|
20
|
+
/**
|
|
21
|
+
* Validates that skip/limit stay within Dimensions pagination bounds.
|
|
22
|
+
* @param skip - Records to skip
|
|
23
|
+
* @param limit - Page size
|
|
24
|
+
* @throws {ValidationError} When out of bounds
|
|
25
|
+
*/
|
|
26
|
+
export function validatePaginationBounds(skip, limit) {
|
|
27
|
+
if (limit < 1 || limit > SCHEMA_LIMITS.maxLimit) {
|
|
28
|
+
throw new ValidationError(`limit must be between 1 and ${SCHEMA_LIMITS.maxLimit}`, {
|
|
29
|
+
limit,
|
|
30
|
+
maxLimit: SCHEMA_LIMITS.maxLimit,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
if (skip < 0) {
|
|
34
|
+
throw new ValidationError("skip must be non-negative", { skip });
|
|
35
|
+
}
|
|
36
|
+
if (skip + limit > SCHEMA_LIMITS.maxOffset) {
|
|
37
|
+
throw new ValidationError(`skip + limit cannot exceed ${SCHEMA_LIMITS.maxOffset} (max paginated records)`, { skip, limit, maxOffset: SCHEMA_LIMITS.maxOffset });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolves skip and limit from tool arguments (`skip`, `page`, `limit`, or `pageSize`).
|
|
42
|
+
* @param args - Pagination-related tool arguments
|
|
43
|
+
* @returns Resolved skip and limit
|
|
44
|
+
* @throws {ValidationError} When both skip and page are set or bounds are invalid
|
|
45
|
+
*/
|
|
46
|
+
export function resolveSkipAndLimit(args) {
|
|
47
|
+
const limit = args.pageSize ?? args.limit ?? 100;
|
|
48
|
+
let skip = 0;
|
|
49
|
+
if (args.skip !== undefined) {
|
|
50
|
+
skip = args.skip;
|
|
51
|
+
}
|
|
52
|
+
else if (args.page !== undefined) {
|
|
53
|
+
if (args.page < 0 || args.page >= SCHEMA_LIMITS.maxPages) {
|
|
54
|
+
throw new ValidationError(`page must be between 0 and ${SCHEMA_LIMITS.maxPages - 1}`, {
|
|
55
|
+
page: args.page,
|
|
56
|
+
maxPages: SCHEMA_LIMITS.maxPages,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
skip = args.page * limit;
|
|
60
|
+
}
|
|
61
|
+
validatePaginationBounds(skip, limit);
|
|
62
|
+
return { skip, limit };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Builds pagination metadata for a search response.
|
|
66
|
+
* @param skip - Current skip offset
|
|
67
|
+
* @param pageSize - Current page size
|
|
68
|
+
* @param totalCount - Total matching records from the API
|
|
69
|
+
* @returns Pagination metadata block
|
|
70
|
+
*/
|
|
71
|
+
export function buildPaginationMetadata(skip, pageSize, totalCount) {
|
|
72
|
+
const page = Math.floor(skip / pageSize);
|
|
73
|
+
const fetchedThrough = skip + pageSize;
|
|
74
|
+
const hasMore = totalCount > fetchedThrough;
|
|
75
|
+
const nextSkip = hasMore ? fetchedThrough : null;
|
|
76
|
+
const remainingRecords = Math.max(0, totalCount - fetchedThrough);
|
|
77
|
+
const maxPagesRemaining = Math.min(SCHEMA_LIMITS.maxPages - (page + 1), Math.ceil(remainingRecords / pageSize));
|
|
78
|
+
const estimatedRequestsToFetchAll = Math.ceil(totalCount / pageSize);
|
|
79
|
+
const estimatedMinutesToFetchAll = Math.ceil(estimatedRequestsToFetchAll / SCHEMA_LIMITS.requestsPerMinute);
|
|
80
|
+
return {
|
|
81
|
+
pageSize,
|
|
82
|
+
skip,
|
|
83
|
+
page,
|
|
84
|
+
nextSkip,
|
|
85
|
+
maxPageSize: SCHEMA_LIMITS.maxLimit,
|
|
86
|
+
maxTotalRecords: SCHEMA_LIMITS.maxOffset,
|
|
87
|
+
maxPagesRemaining,
|
|
88
|
+
estimatedRequestsToFetchAll,
|
|
89
|
+
estimatedMinutesToFetchAll,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Returns a soft warning when totalCount exceeds {@link LARGE_RESULT_THRESHOLD}.
|
|
94
|
+
* @param totalCount - Total matching records
|
|
95
|
+
* @returns Warning string or undefined
|
|
96
|
+
*/
|
|
97
|
+
export function largeResultWarning(totalCount) {
|
|
98
|
+
if (totalCount <= LARGE_RESULT_THRESHOLD)
|
|
99
|
+
return undefined;
|
|
100
|
+
const pages = Math.ceil(totalCount / SCHEMA_LIMITS.maxLimit);
|
|
101
|
+
const minutes = Math.ceil(pages / SCHEMA_LIMITS.requestsPerMinute);
|
|
102
|
+
return (`${totalCount.toLocaleString()} matches — narrow filters or use facets first. ` +
|
|
103
|
+
`Full pagination needs ~${pages} requests (~${minutes} min at ${SCHEMA_LIMITS.requestsPerMinute}/min).`);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Validates multi-page batch parameters against policy guardrails.
|
|
107
|
+
* @param options - Batch request options
|
|
108
|
+
* @throws {ValidationError} When limits are exceeded or confirmation is required
|
|
109
|
+
*/
|
|
110
|
+
export function validateBatchPagination(options) {
|
|
111
|
+
const { startPage, maxPages, pageSize, maxRecords, confirmLargeFetch } = options;
|
|
112
|
+
if (maxPages < 1 || maxPages > HARD_MAX_BATCH_PAGES) {
|
|
113
|
+
throw new ValidationError(`maxPages must be between 1 and ${HARD_MAX_BATCH_PAGES}`, {
|
|
114
|
+
maxPages,
|
|
115
|
+
hardMax: HARD_MAX_BATCH_PAGES,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
if (startPage < 0 || startPage >= SCHEMA_LIMITS.maxPages) {
|
|
119
|
+
throw new ValidationError(`startPage must be between 0 and ${SCHEMA_LIMITS.maxPages - 1}`, {
|
|
120
|
+
startPage,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
validatePaginationBounds(startPage * pageSize, pageSize);
|
|
124
|
+
const endSkip = startPage * pageSize + maxPages * pageSize;
|
|
125
|
+
if (endSkip > SCHEMA_LIMITS.maxOffset) {
|
|
126
|
+
throw new ValidationError(`startPage + maxPages exceeds max paginated records (${SCHEMA_LIMITS.maxOffset})`, { startPage, maxPages, pageSize, maxOffset: SCHEMA_LIMITS.maxOffset });
|
|
127
|
+
}
|
|
128
|
+
const recordsPlanned = Math.min(maxPages * pageSize, maxRecords ?? maxPages * pageSize);
|
|
129
|
+
const needsConfirm = maxPages > CONFIRM_LARGE_FETCH_PAGES || recordsPlanned > CONFIRM_LARGE_FETCH_RECORDS;
|
|
130
|
+
if (needsConfirm && !confirmLargeFetch) {
|
|
131
|
+
throw new ValidationError(`Large fetch requires confirmLargeFetch: true (maxPages=${maxPages}, ~${recordsPlanned} records). ` +
|
|
132
|
+
"Narrow filters or use aggregate mode for summaries.", { maxPages, recordsPlanned, confirmLargeFetch });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/dsl/pagination.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query builder for constructing Dimensions DSL queries programmatically.
|
|
3
|
+
* @module query-builder
|
|
4
|
+
*/
|
|
5
|
+
import type { SchemaStore } from "./schema/store.js";
|
|
6
|
+
import type { Currency } from "./types/return-clauses.js";
|
|
7
|
+
import type { EntityType, SearchIndex, SortOrder, WhereOperator } from "./types/vocabulary.js";
|
|
8
|
+
export type { EntityType, SearchIndex, SortOrder, WhereOperator };
|
|
9
|
+
/**
|
|
10
|
+
* Fluent builder for constructing Dimensions DSL queries.
|
|
11
|
+
* Provides a type-safe way to build search queries with conditions, sorting, and pagination.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const query = new QueryBuilder()
|
|
16
|
+
* .search("publications")
|
|
17
|
+
* .for("machine learning")
|
|
18
|
+
* .where("year", ">=", 2020)
|
|
19
|
+
* .fields(["id", "title", "doi"])
|
|
20
|
+
* .sort("times_cited", "desc")
|
|
21
|
+
* .limit(100)
|
|
22
|
+
* .build();
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare class QueryBuilder {
|
|
26
|
+
private readonly schemaStore;
|
|
27
|
+
private entity;
|
|
28
|
+
private searchIndex;
|
|
29
|
+
private searchTerms;
|
|
30
|
+
private similarText;
|
|
31
|
+
private complexPhrase;
|
|
32
|
+
private complexMaxDist;
|
|
33
|
+
private minShouldMatchPhrase;
|
|
34
|
+
private minShouldMatchMin;
|
|
35
|
+
private expressionNodes;
|
|
36
|
+
private groupDepth;
|
|
37
|
+
private pendingConnector;
|
|
38
|
+
private returnFields;
|
|
39
|
+
private unnestFields;
|
|
40
|
+
private sortField;
|
|
41
|
+
private sortOrder;
|
|
42
|
+
private skipValue;
|
|
43
|
+
private limitValue;
|
|
44
|
+
private facetClauses;
|
|
45
|
+
private timeSeriesClauses;
|
|
46
|
+
private groupedClauses;
|
|
47
|
+
/**
|
|
48
|
+
* @param schemaStore - Optional describe schema for entity/index validation
|
|
49
|
+
*/
|
|
50
|
+
constructor(schemaStore?: SchemaStore);
|
|
51
|
+
/**
|
|
52
|
+
* Adds a condition node to the expression tree.
|
|
53
|
+
* Handles automatic AND connector insertion.
|
|
54
|
+
* @param condition - The condition string to add
|
|
55
|
+
*/
|
|
56
|
+
private addConditionNode;
|
|
57
|
+
/**
|
|
58
|
+
* Determines if a space should be added before an expression node.
|
|
59
|
+
* Handles spacing rules for parentheses in boolean expressions.
|
|
60
|
+
* @param node - The current expression node
|
|
61
|
+
* @param prevNode - The previous expression node (or null if first)
|
|
62
|
+
* @returns True if a space should be added before the node
|
|
63
|
+
*/
|
|
64
|
+
private shouldAddSpaceBefore;
|
|
65
|
+
/**
|
|
66
|
+
* Sets the entity type to search.
|
|
67
|
+
* @param entity - The entity type to search (publications, grants, etc.)
|
|
68
|
+
* @returns This builder for chaining
|
|
69
|
+
* @throws {ValidationError} If entity type is invalid
|
|
70
|
+
*/
|
|
71
|
+
search(entity: EntityType | string): this;
|
|
72
|
+
/**
|
|
73
|
+
* Sets the search index for full-text search.
|
|
74
|
+
* Requires search terms via {@link for} — building without search terms will throw.
|
|
75
|
+
* @param index - The search index to use
|
|
76
|
+
* @returns This builder for chaining
|
|
77
|
+
* @throws {ValidationError} If index is invalid
|
|
78
|
+
* @throws {ValidationError} If used without search terms at build time
|
|
79
|
+
*/
|
|
80
|
+
in(index: SearchIndex | string): this;
|
|
81
|
+
/**
|
|
82
|
+
* Sets the search terms for full-text search.
|
|
83
|
+
*
|
|
84
|
+
* **Note:** `"*"` is **not** a wildcard in the Dimensions DSL — it is treated as a literal
|
|
85
|
+
* string. To search all records without a text filter, simply omit the `for()` call and
|
|
86
|
+
* use `where()` conditions instead.
|
|
87
|
+
*
|
|
88
|
+
* @param terms - Search terms to look for
|
|
89
|
+
* @returns This builder for chaining
|
|
90
|
+
*/
|
|
91
|
+
for(terms: string): this;
|
|
92
|
+
/**
|
|
93
|
+
* Sets the search to find semantically similar documents based on text.
|
|
94
|
+
* Uses the similar_documents() DSL function.
|
|
95
|
+
* @param text - The text (abstract, description) to find similar documents for
|
|
96
|
+
* @returns This builder for chaining
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```typescript
|
|
100
|
+
* const query = new QueryBuilder()
|
|
101
|
+
* .search("publications")
|
|
102
|
+
* .forSimilar("After spinal cord injury, macrophages infiltrate...")
|
|
103
|
+
* .where("year", ">", 2015)
|
|
104
|
+
* .limit(10)
|
|
105
|
+
* .build();
|
|
106
|
+
* // Generates: search publications for similar_documents("...") where year > 2015 ...
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
forSimilar(text: string): this;
|
|
110
|
+
/**
|
|
111
|
+
* Sets the search to use proximity matching via the complex() DSL function.
|
|
112
|
+
* Finds documents where search terms appear within a maximum distance of each other.
|
|
113
|
+
* @param phrase - The search phrase
|
|
114
|
+
* @param maxDist - Maximum distance between terms (must be >= 1)
|
|
115
|
+
* @returns This builder for chaining
|
|
116
|
+
* @throws {ValidationError} If maxDist is less than 1
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* const query = new QueryBuilder()
|
|
121
|
+
* .search("publications")
|
|
122
|
+
* .forComplex("quantum networking", 3)
|
|
123
|
+
* .build();
|
|
124
|
+
* // Generates: search publications for complex("quantum networking", 3)
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
forComplex(phrase: string, maxDist: number): this;
|
|
128
|
+
/**
|
|
129
|
+
* Sets the search to use minimum term matching via the min_should_match() DSL function.
|
|
130
|
+
* Finds documents matching at least `min` of the terms in the phrase.
|
|
131
|
+
* @param phrase - The search phrase
|
|
132
|
+
* @param min - Minimum number of terms that must match (must be >= 1)
|
|
133
|
+
* @returns This builder for chaining
|
|
134
|
+
* @throws {ValidationError} If min is less than 1
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* const query = new QueryBuilder()
|
|
139
|
+
* .search("publications")
|
|
140
|
+
* .forMinShouldMatch("quantum OR optical networking", 2)
|
|
141
|
+
* .build();
|
|
142
|
+
* // Generates: search publications for min_should_match("quantum OR optical networking", 2)
|
|
143
|
+
* ```
|
|
144
|
+
*/
|
|
145
|
+
forMinShouldMatch(phrase: string, min: number): this;
|
|
146
|
+
/**
|
|
147
|
+
* Adds a where clause condition.
|
|
148
|
+
* @param field - Field name to filter on
|
|
149
|
+
* @param operator - Comparison operator
|
|
150
|
+
* @param value - Value to compare against
|
|
151
|
+
* @returns This builder for chaining
|
|
152
|
+
* @throws {ValidationError} If operator is invalid
|
|
153
|
+
*/
|
|
154
|
+
where(field: string, operator: WhereOperator, value: string | number | boolean): this;
|
|
155
|
+
/**
|
|
156
|
+
* Adds a condition checking if a field is empty.
|
|
157
|
+
* @param field - Field name to check
|
|
158
|
+
* @returns This builder for chaining
|
|
159
|
+
*/
|
|
160
|
+
whereEmpty(field: string): this;
|
|
161
|
+
/**
|
|
162
|
+
* Adds a condition checking if a field is not empty.
|
|
163
|
+
* @param field - Field name to check
|
|
164
|
+
* @returns This builder for chaining
|
|
165
|
+
*/
|
|
166
|
+
whereNotEmpty(field: string): this;
|
|
167
|
+
/**
|
|
168
|
+
* Adds a list filter condition (field in ["a", "b", "c"]).
|
|
169
|
+
* @param field - Field name to filter on
|
|
170
|
+
* @param values - Array of values to match
|
|
171
|
+
* @returns This builder for chaining
|
|
172
|
+
* @throws {ValidationError} If values array is empty
|
|
173
|
+
* @throws {ValidationError} If values array exceeds 400 items (DSL limit)
|
|
174
|
+
*/
|
|
175
|
+
whereIn(field: string, values: readonly (string | number)[]): this;
|
|
176
|
+
/**
|
|
177
|
+
* Adds a range filter condition (field in [start:end]).
|
|
178
|
+
* @param field - Field name to filter on
|
|
179
|
+
* @param start - Start of range (inclusive)
|
|
180
|
+
* @param end - End of range (inclusive)
|
|
181
|
+
* @returns This builder for chaining
|
|
182
|
+
* @throws {ValidationError} If numeric start is greater than numeric end
|
|
183
|
+
*/
|
|
184
|
+
whereRange(field: string, start: string | number, end: string | number): this;
|
|
185
|
+
/**
|
|
186
|
+
* Sets the next connector to OR.
|
|
187
|
+
* @returns This builder for chaining
|
|
188
|
+
*/
|
|
189
|
+
or(): this;
|
|
190
|
+
/**
|
|
191
|
+
* Sets the next connector to NOT.
|
|
192
|
+
* @returns This builder for chaining
|
|
193
|
+
*/
|
|
194
|
+
not(): this;
|
|
195
|
+
/**
|
|
196
|
+
* Sets the next connector to AND explicitly.
|
|
197
|
+
* Note: AND is the default connector between conditions, but this method
|
|
198
|
+
* provides API symmetry with or() and not().
|
|
199
|
+
* @returns This builder for chaining
|
|
200
|
+
*/
|
|
201
|
+
and(): this;
|
|
202
|
+
/**
|
|
203
|
+
* Opens a parenthesized group.
|
|
204
|
+
* @returns This builder for chaining
|
|
205
|
+
*/
|
|
206
|
+
openGroup(): this;
|
|
207
|
+
/**
|
|
208
|
+
* Closes a parenthesized group.
|
|
209
|
+
* @returns This builder for chaining
|
|
210
|
+
* @throws {ValidationError} If no group is open
|
|
211
|
+
*/
|
|
212
|
+
closeGroup(): this;
|
|
213
|
+
/**
|
|
214
|
+
* Adds a count filter condition (count(field) op value).
|
|
215
|
+
* @param field - Multi-value field name to count
|
|
216
|
+
* @param operator - Comparison operator
|
|
217
|
+
* @param value - Count to compare against
|
|
218
|
+
* @returns This builder for chaining
|
|
219
|
+
*/
|
|
220
|
+
whereCount(field: string, operator: "=" | "!=" | ">" | "<" | ">=" | "<=", value: number): this;
|
|
221
|
+
/**
|
|
222
|
+
* Sets the fields to return.
|
|
223
|
+
* @param fieldList - Array of field names to return
|
|
224
|
+
* @returns This builder for chaining
|
|
225
|
+
*/
|
|
226
|
+
fields(fieldList: string[]): this;
|
|
227
|
+
/**
|
|
228
|
+
* Sets the fields to return including unnest operations.
|
|
229
|
+
* Unnest flattens nested arrays into separate rows (Cartesian product).
|
|
230
|
+
* DSL: return publications[id+title+unnest(researchers)+unnest(category_for)]
|
|
231
|
+
*
|
|
232
|
+
* @param fieldList - Array of regular field names to return
|
|
233
|
+
* @param unnestFieldList - Array of field names to unnest
|
|
234
|
+
* @returns This builder for chaining
|
|
235
|
+
* @throws {ValidationError} If any unnest field name is empty or whitespace-only
|
|
236
|
+
*
|
|
237
|
+
* @example
|
|
238
|
+
* ```typescript
|
|
239
|
+
* const query = new QueryBuilder()
|
|
240
|
+
* .search("publications")
|
|
241
|
+
* .for("machine learning")
|
|
242
|
+
* .fieldsWithUnnest(["id", "title"], ["researchers", "category_for"])
|
|
243
|
+
* .build();
|
|
244
|
+
* // Returns flattened rows - one row per researcher × category combination
|
|
245
|
+
* ```
|
|
246
|
+
*/
|
|
247
|
+
fieldsWithUnnest(fieldList: readonly string[], unnestFieldList: readonly string[]): this;
|
|
248
|
+
/**
|
|
249
|
+
* Adds an unnest field to the return clause.
|
|
250
|
+
* Can be chained with fields() to add unnest operations.
|
|
251
|
+
* DSL: return publications[id+title+unnest(researchers)]
|
|
252
|
+
*
|
|
253
|
+
* @param field - Field name to unnest
|
|
254
|
+
* @returns This builder for chaining
|
|
255
|
+
* @throws {ValidationError} If field name is empty or whitespace-only
|
|
256
|
+
*
|
|
257
|
+
* @example
|
|
258
|
+
* ```typescript
|
|
259
|
+
* const query = new QueryBuilder()
|
|
260
|
+
* .search("publications")
|
|
261
|
+
* .for("test")
|
|
262
|
+
* .fields(["id", "title"])
|
|
263
|
+
* .addUnnest("researchers")
|
|
264
|
+
* .addUnnest("category_for")
|
|
265
|
+
* .build();
|
|
266
|
+
* ```
|
|
267
|
+
*/
|
|
268
|
+
addUnnest(field: string): this;
|
|
269
|
+
/**
|
|
270
|
+
* Sets the sort field and order.
|
|
271
|
+
* @param field - Field name to sort by
|
|
272
|
+
* @param order - Sort direction (asc or desc)
|
|
273
|
+
* @returns This builder for chaining
|
|
274
|
+
*/
|
|
275
|
+
sort(field: string, order?: SortOrder): this;
|
|
276
|
+
/**
|
|
277
|
+
* Sets the number of results to skip (for pagination).
|
|
278
|
+
* @param count - Number of results to skip
|
|
279
|
+
* @returns This builder for chaining
|
|
280
|
+
* @throws {ValidationError} If count is negative
|
|
281
|
+
*/
|
|
282
|
+
skip(count: number): this;
|
|
283
|
+
/**
|
|
284
|
+
* Sets the maximum number of results to return.
|
|
285
|
+
* @param count - Maximum number of results
|
|
286
|
+
* @returns This builder for chaining
|
|
287
|
+
* @throws {ValidationError} If count is negative
|
|
288
|
+
*/
|
|
289
|
+
limit(count: number): this;
|
|
290
|
+
/**
|
|
291
|
+
* Adds a facet return clause.
|
|
292
|
+
* DSL: return <field> [limit <n>]
|
|
293
|
+
* @param field - Facet field name
|
|
294
|
+
* @param options - Optional limit for facet results
|
|
295
|
+
* @returns This builder for chaining
|
|
296
|
+
* @throws {ValidationError} If field is empty or whitespace-only
|
|
297
|
+
* @throws {ValidationError} If limit is negative
|
|
298
|
+
*/
|
|
299
|
+
returnFacet(field: string, options?: {
|
|
300
|
+
limit?: number;
|
|
301
|
+
}): this;
|
|
302
|
+
/**
|
|
303
|
+
* Adds an aggregated facet return clause.
|
|
304
|
+
* DSL: return <field> aggregate <indicators> [sort by <indicator> <order>] [limit <n>]
|
|
305
|
+
* @param field - Facet field name
|
|
306
|
+
* @param indicators - Array of indicator names to aggregate
|
|
307
|
+
* @param options - Optional sort and limit options
|
|
308
|
+
* @returns This builder for chaining
|
|
309
|
+
* @throws {ValidationError} If field is empty or whitespace-only
|
|
310
|
+
* @throws {ValidationError} If indicators array is empty
|
|
311
|
+
* @throws {ValidationError} If any indicator is empty or whitespace-only
|
|
312
|
+
* @throws {ValidationError} If limit is negative
|
|
313
|
+
* @throws {ValidationError} If sortBy is not one of indicators or "count"
|
|
314
|
+
*/
|
|
315
|
+
returnAggregate(field: string, indicators: readonly string[], options?: {
|
|
316
|
+
sortBy?: string;
|
|
317
|
+
sortOrder?: SortOrder;
|
|
318
|
+
limit?: number;
|
|
319
|
+
}): this;
|
|
320
|
+
/**
|
|
321
|
+
* Adds a citations_per_year time-series return clause.
|
|
322
|
+
* Returns citation counts per year for the specified range.
|
|
323
|
+
* DSL: return citations_per_year(2010, 2023)
|
|
324
|
+
*
|
|
325
|
+
* @param startYear - Start year for the time series (inclusive)
|
|
326
|
+
* @param endYear - End year for the time series (inclusive)
|
|
327
|
+
* @returns This builder for chaining
|
|
328
|
+
* @throws {ValidationError} If startYear is greater than endYear
|
|
329
|
+
*
|
|
330
|
+
* @example
|
|
331
|
+
* ```typescript
|
|
332
|
+
* const query = new QueryBuilder()
|
|
333
|
+
* .search("publications")
|
|
334
|
+
* .for("machine learning")
|
|
335
|
+
* .returnCitationsPerYear(2010, 2023)
|
|
336
|
+
* .build();
|
|
337
|
+
* // "search publications for ... return citations_per_year(2010, 2023)"
|
|
338
|
+
* ```
|
|
339
|
+
*/
|
|
340
|
+
returnCitationsPerYear(startYear: number, endYear: number): this;
|
|
341
|
+
/**
|
|
342
|
+
* Adds a funding_per_year time-series return clause.
|
|
343
|
+
* Returns funding amounts per year for the specified range.
|
|
344
|
+
* DSL: return funding_per_year(2015, 2023, "USD")
|
|
345
|
+
*
|
|
346
|
+
* @param startYear - Start year for the time series (inclusive)
|
|
347
|
+
* @param endYear - End year for the time series (inclusive)
|
|
348
|
+
* @param currency - Currency for the funding amounts (default: "USD")
|
|
349
|
+
* @returns This builder for chaining
|
|
350
|
+
* @throws {ValidationError} If startYear is greater than endYear
|
|
351
|
+
*
|
|
352
|
+
* @example
|
|
353
|
+
* ```typescript
|
|
354
|
+
* const query = new QueryBuilder()
|
|
355
|
+
* .search("grants")
|
|
356
|
+
* .for("cancer research")
|
|
357
|
+
* .returnFundingPerYear(2015, 2023, "EUR")
|
|
358
|
+
* .build();
|
|
359
|
+
* // "search grants for ... return funding_per_year(2015, 2023, "EUR")"
|
|
360
|
+
* ```
|
|
361
|
+
*/
|
|
362
|
+
returnFundingPerYear(startYear: number, endYear: number, currency?: Currency): this;
|
|
363
|
+
/**
|
|
364
|
+
* Adds a grouped entity return clause.
|
|
365
|
+
* DSL: return in "docs" publications[id + title]
|
|
366
|
+
*
|
|
367
|
+
* @param groupName - Name for the result group
|
|
368
|
+
* @param options - Entity return options (fields, limit, skip, sort)
|
|
369
|
+
* @returns This builder for chaining
|
|
370
|
+
* @throws {ValidationError} If groupName is empty or whitespace-only
|
|
371
|
+
*
|
|
372
|
+
* @example
|
|
373
|
+
* ```typescript
|
|
374
|
+
* const query = new QueryBuilder()
|
|
375
|
+
* .search("publications")
|
|
376
|
+
* .for("test")
|
|
377
|
+
* .returnGrouped("docs", { fields: ["id", "title"], limit: 10 })
|
|
378
|
+
* .build();
|
|
379
|
+
* // "... return in "docs" publications[id+title] limit 10"
|
|
380
|
+
* ```
|
|
381
|
+
*/
|
|
382
|
+
returnGrouped(groupName: string, options?: {
|
|
383
|
+
fields?: readonly string[];
|
|
384
|
+
limit?: number;
|
|
385
|
+
skip?: number;
|
|
386
|
+
sortField?: string;
|
|
387
|
+
sortOrder?: SortOrder;
|
|
388
|
+
}): this;
|
|
389
|
+
/**
|
|
390
|
+
* Adds a grouped facet return clause (simple facet).
|
|
391
|
+
* DSL: return in "facets" year limit 10
|
|
392
|
+
*
|
|
393
|
+
* @param groupName - Name for the result group
|
|
394
|
+
* @param field - Facet field name
|
|
395
|
+
* @param options - Optional limit for facet results
|
|
396
|
+
* @returns This builder for chaining
|
|
397
|
+
* @throws {ValidationError} If groupName or field is empty
|
|
398
|
+
*
|
|
399
|
+
* @example
|
|
400
|
+
* ```typescript
|
|
401
|
+
* const query = new QueryBuilder()
|
|
402
|
+
* .search("publications")
|
|
403
|
+
* .for("test")
|
|
404
|
+
* .returnGroupedFacet("years", "year", { limit: 20 })
|
|
405
|
+
* .build();
|
|
406
|
+
* // "... return in "years" year limit 20"
|
|
407
|
+
* ```
|
|
408
|
+
*/
|
|
409
|
+
returnGroupedFacet(groupName: string, field: string, options?: {
|
|
410
|
+
limit?: number;
|
|
411
|
+
}): this;
|
|
412
|
+
/**
|
|
413
|
+
* Adds a grouped aggregated facet return clause.
|
|
414
|
+
* DSL: return in "metrics" funders aggregate rcr_avg, funding_usd sort by rcr_avg desc
|
|
415
|
+
*
|
|
416
|
+
* @param groupName - Name for the result group
|
|
417
|
+
* @param field - Facet field name
|
|
418
|
+
* @param indicators - Array of indicator names to aggregate
|
|
419
|
+
* @param options - Optional sort and limit options
|
|
420
|
+
* @returns This builder for chaining
|
|
421
|
+
* @throws {ValidationError} If groupName, field, or indicators are invalid
|
|
422
|
+
*
|
|
423
|
+
* @example
|
|
424
|
+
* ```typescript
|
|
425
|
+
* const query = new QueryBuilder()
|
|
426
|
+
* .search("publications")
|
|
427
|
+
* .for("test")
|
|
428
|
+
* .returnGroupedAggregate("metrics", "funders", ["rcr_avg"], { sortBy: "rcr_avg" })
|
|
429
|
+
* .build();
|
|
430
|
+
* // "... return in "metrics" funders aggregate rcr_avg sort by rcr_avg desc"
|
|
431
|
+
* ```
|
|
432
|
+
*/
|
|
433
|
+
returnGroupedAggregate(groupName: string, field: string, indicators: readonly string[], options?: {
|
|
434
|
+
sortBy?: string;
|
|
435
|
+
sortOrder?: SortOrder;
|
|
436
|
+
limit?: number;
|
|
437
|
+
}): this;
|
|
438
|
+
/**
|
|
439
|
+
* Builds the DSL query string.
|
|
440
|
+
* @returns The constructed DSL query
|
|
441
|
+
* @throws {ValidationError} If entity type is not set
|
|
442
|
+
*/
|
|
443
|
+
build(): string;
|
|
444
|
+
/**
|
|
445
|
+
* Creates a deep copy of this builder.
|
|
446
|
+
* Useful when branching queries (e.g. adding different facets from a shared base).
|
|
447
|
+
* @returns A new QueryBuilder with the same state
|
|
448
|
+
*/
|
|
449
|
+
clone(): QueryBuilder;
|
|
450
|
+
/**
|
|
451
|
+
* Resets the builder to its initial state.
|
|
452
|
+
* @returns This builder for chaining
|
|
453
|
+
*/
|
|
454
|
+
reset(): this;
|
|
455
|
+
}
|
|
456
|
+
//# sourceMappingURL=query-builder.d.ts.map
|