@honua/sdk-esri-compat 0.1.12 → 0.1.14
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/README.md +2 -0
- package/columnar/apache-arrow.d.ts +17 -0
- package/columnar/apache-arrow.d.ts.map +1 -0
- package/columnar/apache-arrow.js +1036 -0
- package/columnar/batch-cache-conformance.d.ts +66 -0
- package/columnar/batch-cache-conformance.d.ts.map +1 -0
- package/columnar/batch-cache-conformance.js +317 -0
- package/columnar/batch-cache-indexeddb.d.ts +31 -0
- package/columnar/batch-cache-indexeddb.d.ts.map +1 -0
- package/columnar/batch-cache-indexeddb.js +148 -0
- package/columnar/batch-cache.d.ts +298 -0
- package/columnar/batch-cache.d.ts.map +1 -0
- package/columnar/batch-cache.js +757 -0
- package/columnar/geoarrow-aggregate.d.ts +178 -0
- package/columnar/geoarrow-aggregate.d.ts.map +1 -0
- package/columnar/geoarrow-aggregate.js +976 -0
- package/columnar/geoarrow-patch.d.ts +382 -0
- package/columnar/geoarrow-patch.d.ts.map +1 -0
- package/columnar/geoarrow-patch.js +1656 -0
- package/columnar/geoarrow-reproject.d.ts +22 -0
- package/columnar/geoarrow-reproject.d.ts.map +1 -0
- package/columnar/geoarrow-reproject.js +119 -0
- package/columnar/geoarrow-serialization.d.ts +68 -0
- package/columnar/geoarrow-serialization.d.ts.map +1 -0
- package/columnar/geoarrow-serialization.js +331 -0
- package/columnar/geoarrow-types.d.ts +271 -0
- package/columnar/geoarrow-types.d.ts.map +1 -0
- package/columnar/geoarrow-types.js +15 -0
- package/columnar/geoarrow.d.ts +52 -0
- package/columnar/geoarrow.d.ts.map +1 -0
- package/columnar/geoarrow.js +1469 -0
- package/columnar/index.d.ts +43 -0
- package/columnar/index.d.ts.map +1 -0
- package/columnar/index.js +29 -0
- package/columnar/operators.d.ts +70 -0
- package/columnar/operators.d.ts.map +1 -0
- package/columnar/operators.js +307 -0
- package/columnar/result.d.ts +369 -0
- package/columnar/result.d.ts.map +1 -0
- package/columnar/result.js +815 -0
- package/columnar/telemetry.d.ts +152 -0
- package/columnar/telemetry.d.ts.map +1 -0
- package/columnar/telemetry.js +265 -0
- package/columnar/transfer.d.ts +28 -0
- package/columnar/transfer.d.ts.map +1 -0
- package/columnar/transfer.js +669 -0
- package/columnar/types.d.ts +175 -0
- package/columnar/types.d.ts.map +1 -0
- package/columnar/types.js +22 -0
- package/columnar/worker.d.ts +157 -0
- package/columnar/worker.d.ts.map +1 -0
- package/columnar/worker.js +1059 -0
- package/connect-url-safety.d.ts +53 -0
- package/connect-url-safety.js +189 -0
- package/contract/pmtiles.d.ts +6 -5
- package/contract/pmtiles.d.ts.map +1 -1
- package/contract/pmtiles.js +30 -5
- package/contract/source.d.ts.map +1 -1
- package/contract/source.js +11 -8
- package/core/client.d.ts.map +1 -1
- package/core/client.js +87 -19
- package/core/deprecation-notice.d.ts +28 -0
- package/core/deprecation-notice.d.ts.map +1 -0
- package/core/deprecation-notice.js +22 -0
- package/core/esri-geojson.d.ts.map +1 -1
- package/core/esri-geojson.js +14 -8
- package/core/optional-grpc-peer.d.ts +15 -0
- package/core/optional-grpc-peer.d.ts.map +1 -0
- package/core/optional-grpc-peer.js +60 -0
- package/esri-compat/basemap-gallery.d.ts +2 -0
- package/esri-compat/basemap-gallery.d.ts.map +1 -1
- package/esri-compat/basemap-gallery.js +12 -0
- package/esri-compat/basemap.d.ts +4 -0
- package/esri-compat/basemap.d.ts.map +1 -1
- package/esri-compat/basemap.js +70 -0
- package/esri-compat/bookmarks.d.ts +2 -0
- package/esri-compat/bookmarks.d.ts.map +1 -1
- package/esri-compat/bookmarks.js +12 -0
- package/esri-compat/controls.d.ts +18 -0
- package/esri-compat/controls.d.ts.map +1 -1
- package/esri-compat/controls.js +120 -57
- package/esri-compat/directions.d.ts +4 -0
- package/esri-compat/directions.d.ts.map +1 -1
- package/esri-compat/directions.js +30 -20
- package/esri-compat/editor.d.ts +4 -0
- package/esri-compat/editor.d.ts.map +1 -1
- package/esri-compat/editor.js +16 -0
- package/esri-compat/esri-config.d.ts +2 -1
- package/esri-compat/esri-config.d.ts.map +1 -1
- package/esri-compat/feature-effect.d.ts +23 -0
- package/esri-compat/feature-effect.d.ts.map +1 -0
- package/esri-compat/feature-effect.js +12 -0
- package/esri-compat/feature-form.d.ts +6 -0
- package/esri-compat/feature-form.d.ts.map +1 -1
- package/esri-compat/feature-form.js +63 -0
- package/esri-compat/feature-layer.d.ts +21 -2
- package/esri-compat/feature-layer.d.ts.map +1 -1
- package/esri-compat/feature-layer.js +172 -1
- package/esri-compat/feature-table.d.ts +5 -0
- package/esri-compat/feature-table.d.ts.map +1 -1
- package/esri-compat/feature-table.js +23 -0
- package/esri-compat/identity-manager.d.ts +1 -1
- package/esri-compat/identity-manager.js +1 -1
- package/esri-compat/legend.d.ts +2 -0
- package/esri-compat/legend.d.ts.map +1 -1
- package/esri-compat/legend.js +98 -0
- package/esri-compat/locator.d.ts +1 -1
- package/esri-compat/locator.js +1 -1
- package/esri-compat/map-view-mount.d.ts +1 -0
- package/esri-compat/map-view-mount.d.ts.map +1 -1
- package/esri-compat/map-view-mount.js +46 -25
- package/esri-compat/map-view.d.ts +13 -0
- package/esri-compat/map-view.d.ts.map +1 -1
- package/esri-compat/map-view.js +94 -8
- package/esri-compat/map.d.ts +5 -1
- package/esri-compat/map.d.ts.map +1 -1
- package/esri-compat/map.js +10 -0
- package/esri-compat/measurement.d.ts +2 -0
- package/esri-compat/measurement.d.ts.map +1 -1
- package/esri-compat/measurement.js +14 -0
- package/esri-compat/point.d.ts +7 -0
- package/esri-compat/point.d.ts.map +1 -1
- package/esri-compat/point.js +33 -3
- package/esri-compat/popup.d.ts +2 -0
- package/esri-compat/popup.d.ts.map +1 -1
- package/esri-compat/popup.js +12 -0
- package/esri-compat/portal.d.ts +1 -1
- package/esri-compat/portal.js +1 -1
- package/esri-compat/print.d.ts +3 -0
- package/esri-compat/print.d.ts.map +1 -1
- package/esri-compat/print.js +15 -0
- package/esri-compat/search.d.ts +4 -0
- package/esri-compat/search.d.ts.map +1 -1
- package/esri-compat/search.js +25 -28
- package/esri-compat/sketch.d.ts +2 -0
- package/esri-compat/sketch.d.ts.map +1 -1
- package/esri-compat/sketch.js +12 -0
- package/esri-compat/widget-host.d.ts +46 -17
- package/esri-compat/widget-host.d.ts.map +1 -1
- package/esri-compat/widget-host.js +84 -20
- package/esri-compat/widget-shell-hosts.d.ts +61 -0
- package/esri-compat/widget-shell-hosts.d.ts.map +1 -0
- package/esri-compat/widget-shell-hosts.js +76 -0
- package/index.d.ts +3 -1
- package/index.js +1 -0
- package/offline/digest.d.ts +15 -0
- package/offline/digest.js +58 -0
- package/offline/quota.d.ts +161 -0
- package/offline/quota.js +370 -0
- package/offline/types.d.ts +349 -0
- package/offline/types.js +75 -0
- package/package.json +21 -2
- package/query-planner/canonical-filter.d.ts +30 -0
- package/query-planner/canonical-filter.d.ts.map +1 -0
- package/query-planner/canonical-filter.js +30 -0
- package/query-planner/canonical.d.ts +7 -0
- package/query-planner/canonical.d.ts.map +1 -0
- package/query-planner/canonical.js +145 -0
- package/query-planner/columnar-plan.d.ts +63 -0
- package/query-planner/columnar-plan.d.ts.map +1 -0
- package/query-planner/columnar-plan.js +94 -0
- package/query-planner/cql2-json.d.ts +17 -0
- package/query-planner/cql2-json.d.ts.map +1 -0
- package/query-planner/cql2-json.js +646 -0
- package/query-planner/diagnostics.d.ts +35 -0
- package/query-planner/diagnostics.d.ts.map +1 -0
- package/query-planner/diagnostics.js +386 -0
- package/query-planner/duckdb.d.ts +79 -0
- package/query-planner/duckdb.d.ts.map +1 -0
- package/query-planner/duckdb.js +772 -0
- package/query-planner/execution-context.d.ts +5 -0
- package/query-planner/execution-context.d.ts.map +1 -0
- package/query-planner/execution-context.js +52 -0
- package/query-planner/executor.d.ts +5 -0
- package/query-planner/executor.d.ts.map +1 -0
- package/query-planner/executor.js +229 -0
- package/query-planner/geoservices.d.ts +91 -0
- package/query-planner/geoservices.d.ts.map +1 -0
- package/query-planner/geoservices.js +688 -0
- package/query-planner/grpc.d.ts +100 -0
- package/query-planner/grpc.d.ts.map +1 -0
- package/query-planner/grpc.js +760 -0
- package/query-planner/index.d.ts +59 -0
- package/query-planner/index.d.ts.map +1 -0
- package/query-planner/index.js +43 -0
- package/query-planner/ir.d.ts +25 -0
- package/query-planner/ir.d.ts.map +1 -0
- package/query-planner/ir.js +479 -0
- package/query-planner/local-aggregate.d.ts +5 -0
- package/query-planner/local-aggregate.d.ts.map +1 -0
- package/query-planner/local-aggregate.js +126 -0
- package/query-planner/odata-protocol-module.d.ts +54 -0
- package/query-planner/odata-protocol-module.d.ts.map +1 -0
- package/query-planner/odata-protocol-module.js +199 -0
- package/query-planner/odata-v1.d.ts +23 -0
- package/query-planner/odata-v1.d.ts.map +1 -0
- package/query-planner/odata-v1.js +202 -0
- package/query-planner/odata.d.ts +45 -0
- package/query-planner/odata.d.ts.map +1 -0
- package/query-planner/odata.js +519 -0
- package/query-planner/ogc-compiler.d.ts +55 -0
- package/query-planner/ogc-compiler.d.ts.map +1 -0
- package/query-planner/ogc-compiler.js +480 -0
- package/query-planner/ogc-features.d.ts +53 -0
- package/query-planner/ogc-features.d.ts.map +1 -0
- package/query-planner/ogc-features.js +639 -0
- package/query-planner/planner.d.ts +17 -0
- package/query-planner/planner.d.ts.map +1 -0
- package/query-planner/planner.js +937 -0
- package/query-planner/representation.d.ts +59 -0
- package/query-planner/representation.d.ts.map +1 -0
- package/query-planner/representation.js +140 -0
- package/query-planner/resource.d.ts +94 -0
- package/query-planner/resource.d.ts.map +1 -0
- package/query-planner/resource.js +526 -0
- package/query-planner/semantic-canonical.d.ts +15 -0
- package/query-planner/semantic-canonical.d.ts.map +1 -0
- package/query-planner/semantic-canonical.js +62 -0
- package/query-planner/semantic-compat.d.ts +10 -0
- package/query-planner/semantic-compat.d.ts.map +1 -0
- package/query-planner/semantic-compat.js +35 -0
- package/query-planner/semantic-compiler.d.ts +64 -0
- package/query-planner/semantic-compiler.d.ts.map +1 -0
- package/query-planner/semantic-compiler.js +81 -0
- package/query-planner/semantic-literals.d.ts +30 -0
- package/query-planner/semantic-literals.d.ts.map +1 -0
- package/query-planner/semantic-literals.js +133 -0
- package/query-planner/semantic-types.d.ts +265 -0
- package/query-planner/semantic-types.d.ts.map +1 -0
- package/query-planner/semantic-types.js +1 -0
- package/query-planner/semantic.d.ts +54 -0
- package/query-planner/semantic.d.ts.map +1 -0
- package/query-planner/semantic.js +1421 -0
- package/query-planner/types.d.ts +712 -0
- package/query-planner/types.d.ts.map +1 -0
- package/query-planner/types.js +49 -0
- package/query-planner/wfs-protocol-module.d.ts +57 -0
- package/query-planner/wfs-protocol-module.d.ts.map +1 -0
- package/query-planner/wfs-protocol-module.js +731 -0
- package/query-planner/wfs-semantic.d.ts +58 -0
- package/query-planner/wfs-semantic.d.ts.map +1 -0
- package/query-planner/wfs-semantic.js +547 -0
- package/query-planner/wfs-v1.d.ts +41 -0
- package/query-planner/wfs-v1.d.ts.map +1 -0
- package/query-planner/wfs-v1.js +366 -0
- package/query-planner/wfs.d.ts +4 -0
- package/query-planner/wfs.d.ts.map +1 -0
- package/query-planner/wfs.js +2 -0
- package/widget-capabilities.d.ts +67 -0
- package/widget-capabilities.js +152 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type CrsDefinition, type ExecutableCrsBinding, type JsonPrimitive, type LogicalField, type SourceProtocol, type SourceSchemaV2 } from "../contract/schema.js";
|
|
2
|
+
import type { SemanticQuery, SourceSpatiality } from "./semantic-types.js";
|
|
3
|
+
/** Fidelity attached to a successful semantic compiler result. */
|
|
4
|
+
export type SemanticCompilerFidelity = "exact" | "approximate";
|
|
5
|
+
/** Stable reasons a valid semantic query cannot be represented by a compiler. */
|
|
6
|
+
export type SemanticCompilerUnsupportedCode = "unsupported-crs" | "crs-transform-required" | "unsupported-distance" | "unsupported-field-type" | "unsupported-geometry" | "unsupported-native-filter" | "unsupported-node" | "unsupported-projection" | "unsupported-sort" | "unsupported-source";
|
|
7
|
+
/** Path-addressed, deterministic unsupported outcome. */
|
|
8
|
+
export interface SemanticCompilerDiagnostic {
|
|
9
|
+
readonly code: SemanticCompilerUnsupportedCode;
|
|
10
|
+
readonly path: string;
|
|
11
|
+
readonly message: string;
|
|
12
|
+
}
|
|
13
|
+
/** Stable fidelity loss carried beside an approximate compiled artifact. */
|
|
14
|
+
export interface SemanticCompilerLoss {
|
|
15
|
+
readonly code: "spatial-envelope-reduction";
|
|
16
|
+
readonly path: string;
|
|
17
|
+
readonly message: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A compiler never silently drops a node. Valid but non-representable queries
|
|
21
|
+
* produce an explicit unsupported result; malformed queries still throw the
|
|
22
|
+
* common planning error before an artifact can be constructed.
|
|
23
|
+
*/
|
|
24
|
+
export type SemanticCompilationResult<TArtifact> = {
|
|
25
|
+
readonly outcome: "compiled";
|
|
26
|
+
readonly fidelity: SemanticCompilerFidelity;
|
|
27
|
+
readonly losses: readonly SemanticCompilerLoss[];
|
|
28
|
+
readonly artifact: TArtifact;
|
|
29
|
+
} | {
|
|
30
|
+
readonly outcome: "unsupported";
|
|
31
|
+
readonly fidelity: "unsupported";
|
|
32
|
+
readonly diagnostics: readonly [SemanticCompilerDiagnostic, ...SemanticCompilerDiagnostic[]];
|
|
33
|
+
};
|
|
34
|
+
/** Ordered bind value for parameterized semantic SQL. */
|
|
35
|
+
export interface SemanticSqlParameter {
|
|
36
|
+
/** One-based position matching the corresponding `?` in SQL text. */
|
|
37
|
+
readonly position: number;
|
|
38
|
+
readonly role: "literal" | "geometry" | "bbox" | "distance";
|
|
39
|
+
readonly value: JsonPrimitive;
|
|
40
|
+
readonly field?: string;
|
|
41
|
+
readonly logicalType?: string;
|
|
42
|
+
}
|
|
43
|
+
export type RuntimeSemanticQuery<TProtocol extends SourceProtocol> = SemanticQuery<Record<string, unknown>, TProtocol, SourceSpatiality>;
|
|
44
|
+
interface SemanticCompilerBuild<TArtifact> {
|
|
45
|
+
readonly artifact: TArtifact;
|
|
46
|
+
readonly losses?: readonly SemanticCompilerLoss[];
|
|
47
|
+
}
|
|
48
|
+
/** @internal Verify untrusted schema/query values once at the compiler boundary. */
|
|
49
|
+
export declare function prepareSemanticCompilerQuery<TProtocol extends SourceProtocol>(value: unknown, schemaValue: SourceSchemaV2, protocol: TProtocol): {
|
|
50
|
+
readonly query: RuntimeSemanticQuery<TProtocol>;
|
|
51
|
+
readonly schema: SourceSchemaV2;
|
|
52
|
+
};
|
|
53
|
+
/** @internal Convert compiler-local unsupported failures into the public union. */
|
|
54
|
+
export declare function runSemanticCompiler<TArtifact>(compile: () => SemanticCompilerBuild<TArtifact>): SemanticCompilationResult<TArtifact>;
|
|
55
|
+
/** @internal Stop compilation at an exact query path without constructing a request. */
|
|
56
|
+
export declare function semanticUnsupported(code: SemanticCompilerUnsupportedCode, path: string, message: string): never;
|
|
57
|
+
/** @internal Resolve one validated logical field. */
|
|
58
|
+
export declare function semanticSchemaField(schema: SourceSchemaV2, name: string, path: string): LogicalField;
|
|
59
|
+
/** @internal Compare executable CRS semantics without volatile provenance. */
|
|
60
|
+
export declare function sameExecutableCrs(left: ExecutableCrsBinding, right: ExecutableCrsBinding): boolean;
|
|
61
|
+
/** @internal Compare a requested output definition with a field binding. */
|
|
62
|
+
export declare function sameCrsDefinition(left: CrsDefinition, right: CrsDefinition): boolean;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=semantic-compiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-compiler.d.ts","sourceRoot":"","sources":["../../../src/query-planner/semantic-compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { parseSourceSchemaV2, } from "../contract/schema.js";
|
|
2
|
+
import { canonicalStringify, toJsonValue } from "./canonical.js";
|
|
3
|
+
import { parseSemanticQuery } from "./semantic.js";
|
|
4
|
+
import { HonuaQueryPlanningError } from "./types.js";
|
|
5
|
+
class SemanticCompilerUnsupported extends Error {
|
|
6
|
+
diagnostic;
|
|
7
|
+
constructor(diagnostic) {
|
|
8
|
+
super(diagnostic.message);
|
|
9
|
+
this.diagnostic = diagnostic;
|
|
10
|
+
this.name = "SemanticCompilerUnsupported";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/** @internal Verify untrusted schema/query values once at the compiler boundary. */
|
|
14
|
+
export function prepareSemanticCompilerQuery(value, schemaValue, protocol) {
|
|
15
|
+
let schema;
|
|
16
|
+
try {
|
|
17
|
+
schema = parseSourceSchemaV2(schemaValue);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
throw new HonuaQueryPlanningError("invalid-query", "Semantic compilation requires a valid SourceSchemaV2");
|
|
21
|
+
}
|
|
22
|
+
const query = parseSemanticQuery(value, { schema, protocol });
|
|
23
|
+
return { query, schema };
|
|
24
|
+
}
|
|
25
|
+
/** @internal Convert compiler-local unsupported failures into the public union. */
|
|
26
|
+
export function runSemanticCompiler(compile) {
|
|
27
|
+
try {
|
|
28
|
+
const built = compile();
|
|
29
|
+
const losses = [...(built.losses ?? [])];
|
|
30
|
+
return deepFreeze({
|
|
31
|
+
outcome: "compiled",
|
|
32
|
+
fidelity: losses.length === 0 ? "exact" : "approximate",
|
|
33
|
+
losses,
|
|
34
|
+
artifact: built.artifact,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (!(error instanceof SemanticCompilerUnsupported))
|
|
39
|
+
throw error;
|
|
40
|
+
return deepFreeze({
|
|
41
|
+
outcome: "unsupported",
|
|
42
|
+
fidelity: "unsupported",
|
|
43
|
+
diagnostics: [error.diagnostic],
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** @internal Stop compilation at an exact query path without constructing a request. */
|
|
48
|
+
export function semanticUnsupported(code, path, message) {
|
|
49
|
+
throw new SemanticCompilerUnsupported({ code, path, message });
|
|
50
|
+
}
|
|
51
|
+
/** @internal Resolve one validated logical field. */
|
|
52
|
+
export function semanticSchemaField(schema, name, path) {
|
|
53
|
+
const field = schema.fields.find((candidate) => candidate.name === name);
|
|
54
|
+
if (!field) {
|
|
55
|
+
throw new HonuaQueryPlanningError("invalid-query", `${path} references unknown schema field ${JSON.stringify(name)}`);
|
|
56
|
+
}
|
|
57
|
+
return field;
|
|
58
|
+
}
|
|
59
|
+
/** @internal Compare executable CRS semantics without volatile provenance. */
|
|
60
|
+
export function sameExecutableCrs(left, right) {
|
|
61
|
+
return crsBindingIdentity(left) === crsBindingIdentity(right);
|
|
62
|
+
}
|
|
63
|
+
/** @internal Compare a requested output definition with a field binding. */
|
|
64
|
+
export function sameCrsDefinition(left, right) {
|
|
65
|
+
return canonicalStringify(toJsonValue(left)) === canonicalStringify(toJsonValue(right));
|
|
66
|
+
}
|
|
67
|
+
function crsBindingIdentity(binding) {
|
|
68
|
+
return canonicalStringify(toJsonValue({
|
|
69
|
+
definition: binding.definition,
|
|
70
|
+
coordinateOrder: binding.coordinateOrder,
|
|
71
|
+
coordinateEpoch: binding.coordinateEpoch ?? null,
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
function deepFreeze(value) {
|
|
75
|
+
if (value !== null && typeof value === "object" && !Object.isFrozen(value)) {
|
|
76
|
+
Object.freeze(value);
|
|
77
|
+
for (const child of Object.values(value))
|
|
78
|
+
deepFreeze(child);
|
|
79
|
+
}
|
|
80
|
+
return value;
|
|
81
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { LogicalField } from "../contract/schema.js";
|
|
2
|
+
/** Trace from one public semantic field to its exact protocol request name. */
|
|
3
|
+
export interface SemanticCompilerFieldMapping {
|
|
4
|
+
readonly logicalField: string;
|
|
5
|
+
readonly physicalPath: readonly string[];
|
|
6
|
+
readonly requestField: string;
|
|
7
|
+
}
|
|
8
|
+
/** @internal Record each field mapping once, in first-use order. */
|
|
9
|
+
export declare function recordSemanticFieldMapping(mappings: SemanticCompilerFieldMapping[], field: LogicalField, requestField: string): void;
|
|
10
|
+
/** @internal Sort mapping evidence by Unicode scalar value, independent of locale/ICU data. */
|
|
11
|
+
export declare function sortSemanticFieldMappings(mappings: readonly SemanticCompilerFieldMapping[]): readonly SemanticCompilerFieldMapping[];
|
|
12
|
+
/** @internal Quote one SQL-92 identifier without changing its Unicode spelling. */
|
|
13
|
+
export declare function sql92Identifier(value: string, path: string): string;
|
|
14
|
+
/** @internal Compile an OData structural-property path with no alias rewriting. */
|
|
15
|
+
export declare function odataPropertyPath(segments: readonly string[], path: string): string;
|
|
16
|
+
/** @internal SQL/OData single-quoted string literal with quote doubling. */
|
|
17
|
+
export declare function quotedSemanticString(value: string, path: string): string;
|
|
18
|
+
/** @internal Convert a finite JavaScript number to a deterministic non-exponent decimal. */
|
|
19
|
+
export declare function finiteDecimalNumber(value: number, path: string): string;
|
|
20
|
+
/** @internal Validate an exact JSON string-encoded integer or decimal. */
|
|
21
|
+
export declare function exactDecimalText(value: string, path: string): string;
|
|
22
|
+
/** @internal Validate one bounded, credential-free source version token. */
|
|
23
|
+
export declare function verifiedSemanticSourceVersion(value: unknown, path: string): string | undefined;
|
|
24
|
+
/** @internal Validate a bounded source locator string. */
|
|
25
|
+
export declare function verifiedSemanticSourceText(value: unknown, path: string): string;
|
|
26
|
+
/** @internal Admit already-bounded protocol-native text without URL control bytes or an empty expression. */
|
|
27
|
+
export declare function verifiedSemanticNativeText(value: string, path: string, dialect: string): string;
|
|
28
|
+
/** @internal Domain-separated identity of the exact request pre-image. */
|
|
29
|
+
export declare function semanticRequestFingerprint(domain: string, value: unknown): `sha256:${string}`;
|
|
30
|
+
//# sourceMappingURL=semantic-literals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-literals.d.ts","sourceRoot":"","sources":["../../../src/query-planner/semantic-literals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAa1D,+EAA+E;AAC/E,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,oEAAoE;AACpE,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,4BAA4B,EAAE,EACxC,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,MAAM,GACnB,IAAI,CAGN;AAED,+FAA+F;AAC/F,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,SAAS,4BAA4B,EAAE,GAChD,SAAS,4BAA4B,EAAE,CAEzC;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAenF;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxE;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKvE;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CASpE;AAED,4EAA4E;AAC5E,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW9F;AAED,0DAA0D;AAC1D,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAU/E;AAED,6GAA6G;AAC7G,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ/F;AAED,0EAA0E;AAC1E,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,UAAU,MAAM,EAAE,CAE7F"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { canonicalStringify, sha256, toJsonValue } from "./canonical.js";
|
|
2
|
+
import { semanticUnsupported } from "./semantic-compiler.js";
|
|
3
|
+
import { HonuaQueryPlanningError } from "./types.js";
|
|
4
|
+
const MAX_SOURCE_IDENTITY_TEXT = 512;
|
|
5
|
+
const MAX_PHYSICAL_SEGMENT_TEXT = 512;
|
|
6
|
+
const MAX_ODATA_IDENTIFIER_CODE_POINTS = 128;
|
|
7
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: request identities and identifiers reject control bytes
|
|
8
|
+
const CONTROL_CHARACTER = /[\u0000-\u001f\u007f]/;
|
|
9
|
+
const ODATA_IDENTIFIER = /^[_\p{ID_Start}][_\p{ID_Continue}]*$/u;
|
|
10
|
+
const DECIMAL_TEXT = /^-?(?:0|[1-9]\d*)(?:\.\d+)?$/;
|
|
11
|
+
/** @internal Record each field mapping once, in first-use order. */
|
|
12
|
+
export function recordSemanticFieldMapping(mappings, field, requestField) {
|
|
13
|
+
if (mappings.some((candidate) => candidate.logicalField === field.name))
|
|
14
|
+
return;
|
|
15
|
+
mappings.push({ logicalField: field.name, physicalPath: [...field.path], requestField });
|
|
16
|
+
}
|
|
17
|
+
/** @internal Sort mapping evidence by Unicode scalar value, independent of locale/ICU data. */
|
|
18
|
+
export function sortSemanticFieldMappings(mappings) {
|
|
19
|
+
return [...mappings].sort((left, right) => compareUnicodeScalars(left.logicalField, right.logicalField));
|
|
20
|
+
}
|
|
21
|
+
/** @internal Quote one SQL-92 identifier without changing its Unicode spelling. */
|
|
22
|
+
export function sql92Identifier(value, path) {
|
|
23
|
+
verifiedPhysicalSegment(value, path);
|
|
24
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
25
|
+
}
|
|
26
|
+
/** @internal Compile an OData structural-property path with no alias rewriting. */
|
|
27
|
+
export function odataPropertyPath(segments, path) {
|
|
28
|
+
if (segments.length === 0) {
|
|
29
|
+
semanticUnsupported("unsupported-source", path, "OData fields require a non-empty physical property path");
|
|
30
|
+
}
|
|
31
|
+
for (const segment of segments) {
|
|
32
|
+
verifiedPhysicalSegment(segment, path);
|
|
33
|
+
if (!ODATA_IDENTIFIER.test(segment) || [...segment].length > MAX_ODATA_IDENTIFIER_CODE_POINTS) {
|
|
34
|
+
semanticUnsupported("unsupported-source", path, "OData cannot represent a physical property path segment in its bounded simple-identifier grammar");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return segments.join("/");
|
|
38
|
+
}
|
|
39
|
+
/** @internal SQL/OData single-quoted string literal with quote doubling. */
|
|
40
|
+
export function quotedSemanticString(value, path) {
|
|
41
|
+
if (CONTROL_CHARACTER.test(value)) {
|
|
42
|
+
semanticUnsupported("unsupported-node", path, "Text literals containing control characters are not portable");
|
|
43
|
+
}
|
|
44
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
45
|
+
}
|
|
46
|
+
/** @internal Convert a finite JavaScript number to a deterministic non-exponent decimal. */
|
|
47
|
+
export function finiteDecimalNumber(value, path) {
|
|
48
|
+
if (!Number.isFinite(value)) {
|
|
49
|
+
semanticUnsupported("unsupported-field-type", path, "The request dialect requires a finite numeric literal");
|
|
50
|
+
}
|
|
51
|
+
return expandExponent(Object.is(value, -0) ? "0" : String(value));
|
|
52
|
+
}
|
|
53
|
+
/** @internal Validate an exact JSON string-encoded integer or decimal. */
|
|
54
|
+
export function exactDecimalText(value, path) {
|
|
55
|
+
if (!DECIMAL_TEXT.test(value)) {
|
|
56
|
+
semanticUnsupported("unsupported-field-type", path, "String-encoded numeric literals require a canonical non-exponent decimal");
|
|
57
|
+
}
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
/** @internal Validate one bounded, credential-free source version token. */
|
|
61
|
+
export function verifiedSemanticSourceVersion(value, path) {
|
|
62
|
+
if (value === undefined)
|
|
63
|
+
return undefined;
|
|
64
|
+
if (typeof value !== "string" ||
|
|
65
|
+
value.trim().length === 0 ||
|
|
66
|
+
value.length > MAX_SOURCE_IDENTITY_TEXT ||
|
|
67
|
+
CONTROL_CHARACTER.test(value)) {
|
|
68
|
+
throw new HonuaQueryPlanningError("invalid-query", `${path} is invalid`);
|
|
69
|
+
}
|
|
70
|
+
return value;
|
|
71
|
+
}
|
|
72
|
+
/** @internal Validate a bounded source locator string. */
|
|
73
|
+
export function verifiedSemanticSourceText(value, path) {
|
|
74
|
+
if (typeof value !== "string" ||
|
|
75
|
+
value.trim().length === 0 ||
|
|
76
|
+
value.length > MAX_SOURCE_IDENTITY_TEXT ||
|
|
77
|
+
CONTROL_CHARACTER.test(value)) {
|
|
78
|
+
throw new HonuaQueryPlanningError("invalid-query", `${path} is invalid`);
|
|
79
|
+
}
|
|
80
|
+
return value;
|
|
81
|
+
}
|
|
82
|
+
/** @internal Admit already-bounded protocol-native text without URL control bytes or an empty expression. */
|
|
83
|
+
export function verifiedSemanticNativeText(value, path, dialect) {
|
|
84
|
+
if (value.trim().length === 0) {
|
|
85
|
+
semanticUnsupported("unsupported-native-filter", path, `${dialect} native expression is empty`);
|
|
86
|
+
}
|
|
87
|
+
if (CONTROL_CHARACTER.test(value)) {
|
|
88
|
+
semanticUnsupported("unsupported-native-filter", path, `${dialect} native expression contains a control character`);
|
|
89
|
+
}
|
|
90
|
+
return value;
|
|
91
|
+
}
|
|
92
|
+
/** @internal Domain-separated identity of the exact request pre-image. */
|
|
93
|
+
export function semanticRequestFingerprint(domain, value) {
|
|
94
|
+
return sha256(`${domain}\n${canonicalStringify(toJsonValue(value))}`);
|
|
95
|
+
}
|
|
96
|
+
function verifiedPhysicalSegment(value, path) {
|
|
97
|
+
if (typeof value !== "string" ||
|
|
98
|
+
value.length === 0 ||
|
|
99
|
+
value.length > MAX_PHYSICAL_SEGMENT_TEXT ||
|
|
100
|
+
CONTROL_CHARACTER.test(value)) {
|
|
101
|
+
semanticUnsupported("unsupported-source", path, "The physical field path contains an unsafe segment");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function expandExponent(value) {
|
|
105
|
+
const match = /^(-?)(\d+)(?:\.(\d+))?[eE]([+-]?\d+)$/.exec(value);
|
|
106
|
+
if (!match)
|
|
107
|
+
return value;
|
|
108
|
+
const sign = match[1] ?? "";
|
|
109
|
+
const integer = match[2] ?? "0";
|
|
110
|
+
const fraction = match[3] ?? "";
|
|
111
|
+
const exponent = Number(match[4]);
|
|
112
|
+
const digits = `${integer}${fraction}`;
|
|
113
|
+
const decimalPosition = integer.length + exponent;
|
|
114
|
+
if (decimalPosition <= 0)
|
|
115
|
+
return `${sign}0.${"0".repeat(-decimalPosition)}${digits}`;
|
|
116
|
+
if (decimalPosition >= digits.length)
|
|
117
|
+
return `${sign}${digits}${"0".repeat(decimalPosition - digits.length)}`;
|
|
118
|
+
return `${sign}${digits.slice(0, decimalPosition)}.${digits.slice(decimalPosition)}`;
|
|
119
|
+
}
|
|
120
|
+
function compareUnicodeScalars(left, right) {
|
|
121
|
+
const leftScalars = [...left];
|
|
122
|
+
const rightScalars = [...right];
|
|
123
|
+
const length = Math.min(leftScalars.length, rightScalars.length);
|
|
124
|
+
for (let index = 0; index < length; index += 1) {
|
|
125
|
+
const leftPoint = leftScalars[index]?.codePointAt(0) ?? 0;
|
|
126
|
+
const rightPoint = rightScalars[index]?.codePointAt(0) ?? 0;
|
|
127
|
+
if (leftPoint !== rightPoint)
|
|
128
|
+
return leftPoint < rightPoint ? -1 : 1;
|
|
129
|
+
}
|
|
130
|
+
if (leftScalars.length === rightScalars.length)
|
|
131
|
+
return 0;
|
|
132
|
+
return leftScalars.length < rightScalars.length ? -1 : 1;
|
|
133
|
+
}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import type { CrsDefinition, ExecutableBoundingBox, ExecutableCrsBinding, ExecutableGeometryValue, ExtensionIdentifier, JsonPrimitive, JsonValue, SourceProtocol, SourceSchemaV2 } from "../contract/schema.js";
|
|
2
|
+
export type FieldName<TRecord> = Extract<keyof TRecord, string>;
|
|
3
|
+
type NonNullish<TValue> = Exclude<TValue, null | undefined>;
|
|
4
|
+
type Scalar = string | number | boolean | bigint | Date;
|
|
5
|
+
type IsUntyped<TValue> = unknown extends TValue ? true : false;
|
|
6
|
+
export type ScalarFieldName<TRecord> = {
|
|
7
|
+
[TKey in FieldName<TRecord>]-?: IsUntyped<NonNullish<TRecord[TKey]>> extends true ? TKey : NonNullish<TRecord[TKey]> extends Scalar ? TKey : never;
|
|
8
|
+
}[FieldName<TRecord>];
|
|
9
|
+
export type StringFieldName<TRecord> = {
|
|
10
|
+
[TKey in FieldName<TRecord>]-?: IsUntyped<NonNullish<TRecord[TKey]>> extends true ? TKey : NonNullish<TRecord[TKey]> extends TemporalValue ? never : NonNullish<TRecord[TKey]> extends string ? TKey : never;
|
|
11
|
+
}[FieldName<TRecord>];
|
|
12
|
+
export type OrderableFieldName<TRecord> = {
|
|
13
|
+
[TKey in FieldName<TRecord>]-?: IsUntyped<NonNullish<TRecord[TKey]>> extends true ? TKey : NonNullish<TRecord[TKey]> extends string | number | bigint | Date ? TKey : never;
|
|
14
|
+
}[FieldName<TRecord>];
|
|
15
|
+
export type NumericFieldName<TRecord> = {
|
|
16
|
+
[TKey in FieldName<TRecord>]-?: IsUntyped<NonNullish<TRecord[TKey]>> extends true ? TKey : NonNullish<TRecord[TKey]> extends number | bigint ? TKey : never;
|
|
17
|
+
}[FieldName<TRecord>];
|
|
18
|
+
export type GroupableFieldName<TRecord> = ScalarFieldName<TRecord>;
|
|
19
|
+
declare const temporalValueBrand: unique symbol;
|
|
20
|
+
/** Schema/role-derived temporal string; an ordinary string does not gain temporal operators. */
|
|
21
|
+
export type TemporalValue<TKind extends "date" | "instant" = "date" | "instant"> = string & {
|
|
22
|
+
readonly [temporalValueBrand]: TKind;
|
|
23
|
+
};
|
|
24
|
+
export type TemporalFieldName<TRecord> = {
|
|
25
|
+
[TKey in FieldName<TRecord>]-?: IsUntyped<NonNullish<TRecord[TKey]>> extends true ? TKey : NonNullish<TRecord[TKey]> extends TemporalValue | Date ? TKey : never;
|
|
26
|
+
}[FieldName<TRecord>];
|
|
27
|
+
export type GeometryFieldName<TRecord> = {
|
|
28
|
+
[TKey in FieldName<TRecord>]-?: IsUntyped<NonNullish<TRecord[TKey]>> extends true ? TKey : NonNullish<TRecord[TKey]> extends ExecutableGeometryValue ? TKey : never;
|
|
29
|
+
}[FieldName<TRecord>];
|
|
30
|
+
export type QueryLiteral<TValue> = IsUntyped<NonNullish<TValue>> extends true ? JsonValue : NonNullish<TValue> extends bigint | Date ? string : NonNullish<TValue> extends JsonPrimitive ? NonNullish<TValue> : JsonValue;
|
|
31
|
+
export interface PropertyNode<TField extends string = string> {
|
|
32
|
+
readonly kind: "property";
|
|
33
|
+
readonly name: TField;
|
|
34
|
+
}
|
|
35
|
+
export interface LiteralNode<TValue extends JsonValue = JsonValue> {
|
|
36
|
+
readonly kind: "literal";
|
|
37
|
+
readonly value: TValue;
|
|
38
|
+
}
|
|
39
|
+
export type EqualityOperator = "eq" | "ne";
|
|
40
|
+
export type OrderedComparisonOperator = "lt" | "lte" | "gt" | "gte";
|
|
41
|
+
type EqualityNode<TRecord> = {
|
|
42
|
+
[TKey in ScalarFieldName<TRecord>]: {
|
|
43
|
+
readonly kind: "comparison";
|
|
44
|
+
readonly operator: EqualityOperator;
|
|
45
|
+
readonly left: PropertyNode<TKey>;
|
|
46
|
+
readonly right: LiteralNode<QueryLiteral<TRecord[TKey]>>;
|
|
47
|
+
};
|
|
48
|
+
}[ScalarFieldName<TRecord>];
|
|
49
|
+
type OrderedComparisonNode<TRecord> = {
|
|
50
|
+
[TKey in OrderableFieldName<TRecord>]: {
|
|
51
|
+
readonly kind: "comparison";
|
|
52
|
+
readonly operator: OrderedComparisonOperator;
|
|
53
|
+
readonly left: PropertyNode<TKey>;
|
|
54
|
+
readonly right: LiteralNode<QueryLiteral<TRecord[TKey]>>;
|
|
55
|
+
};
|
|
56
|
+
}[OrderableFieldName<TRecord>];
|
|
57
|
+
export type ComparisonNode<TRecord> = EqualityNode<TRecord> | OrderedComparisonNode<TRecord>;
|
|
58
|
+
type ListNodeForRecord<TRecord> = {
|
|
59
|
+
[TKey in ScalarFieldName<TRecord>]: {
|
|
60
|
+
readonly kind: "list";
|
|
61
|
+
readonly operator: "in";
|
|
62
|
+
readonly operand: PropertyNode<TKey>;
|
|
63
|
+
readonly values: readonly [LiteralNode<QueryLiteral<TRecord[TKey]>>, ...LiteralNode<QueryLiteral<TRecord[TKey]>>[]];
|
|
64
|
+
};
|
|
65
|
+
}[ScalarFieldName<TRecord>];
|
|
66
|
+
export type ListNode<TRecord> = ListNodeForRecord<TRecord>;
|
|
67
|
+
type RangeNodeForRecord<TRecord> = {
|
|
68
|
+
[TKey in OrderableFieldName<TRecord>]: {
|
|
69
|
+
readonly kind: "range";
|
|
70
|
+
readonly operator: "between";
|
|
71
|
+
readonly operand: PropertyNode<TKey>;
|
|
72
|
+
readonly lower: LiteralNode<QueryLiteral<TRecord[TKey]>>;
|
|
73
|
+
readonly upper: LiteralNode<QueryLiteral<TRecord[TKey]>>;
|
|
74
|
+
};
|
|
75
|
+
}[OrderableFieldName<TRecord>];
|
|
76
|
+
export type RangeNode<TRecord> = RangeNodeForRecord<TRecord>;
|
|
77
|
+
export interface NullNode<TField extends string = string> {
|
|
78
|
+
readonly kind: "null";
|
|
79
|
+
readonly operator: "is-null" | "is-not-null";
|
|
80
|
+
readonly operand: PropertyNode<TField>;
|
|
81
|
+
}
|
|
82
|
+
export interface PatternNode<TField extends string = string> {
|
|
83
|
+
readonly kind: "pattern";
|
|
84
|
+
readonly operator: "like";
|
|
85
|
+
readonly operand: PropertyNode<TField>;
|
|
86
|
+
readonly pattern: string;
|
|
87
|
+
readonly caseSensitive?: boolean;
|
|
88
|
+
}
|
|
89
|
+
export type TopologicalSpatialPredicate = "equals" | "intersects" | "within" | "contains" | "disjoint" | "touches" | "overlaps" | "crosses";
|
|
90
|
+
export type DistanceSpatialPredicate = "within-distance" | "beyond-distance";
|
|
91
|
+
export type SpatialPredicate = TopologicalSpatialPredicate | "bbox-intersects" | DistanceSpatialPredicate;
|
|
92
|
+
export type DistanceUnit = "metre" | "kilometre" | "foot" | "us-survey-foot" | "mile" | "nautical-mile" | "degree" | "radian";
|
|
93
|
+
export interface DistanceOperand {
|
|
94
|
+
readonly value: number;
|
|
95
|
+
readonly unit: DistanceUnit;
|
|
96
|
+
readonly mode: "planar" | "geodesic";
|
|
97
|
+
}
|
|
98
|
+
export type SourceSpatiality = "primary-geometry" | "non-spatial" | "ambiguous-geometry";
|
|
99
|
+
export type SpatialNode<TRecord, TSpatiality extends SourceSpatiality> = TSpatiality extends "non-spatial" ? never : ({
|
|
100
|
+
readonly kind: "spatial";
|
|
101
|
+
readonly operator: TopologicalSpatialPredicate;
|
|
102
|
+
readonly geometry: ExecutableGeometryValue;
|
|
103
|
+
} | {
|
|
104
|
+
readonly kind: "spatial";
|
|
105
|
+
readonly operator: "bbox-intersects";
|
|
106
|
+
readonly bbox: ExecutableBoundingBox;
|
|
107
|
+
} | {
|
|
108
|
+
readonly kind: "spatial";
|
|
109
|
+
readonly operator: DistanceSpatialPredicate;
|
|
110
|
+
readonly geometry: ExecutableGeometryValue;
|
|
111
|
+
readonly distance: DistanceOperand;
|
|
112
|
+
}) & (TSpatiality extends "primary-geometry" ? {
|
|
113
|
+
readonly property?: PropertyNode<GeometryFieldName<TRecord>>;
|
|
114
|
+
} : {
|
|
115
|
+
readonly property: PropertyNode<GeometryFieldName<TRecord>>;
|
|
116
|
+
});
|
|
117
|
+
export type TemporalPredicate = "before" | "after" | "during" | "time-intersects";
|
|
118
|
+
export type TemporalLiteralNode = {
|
|
119
|
+
readonly kind: "temporal-literal";
|
|
120
|
+
readonly valueType: "date" | "instant";
|
|
121
|
+
readonly value: string;
|
|
122
|
+
} | {
|
|
123
|
+
readonly kind: "temporal-literal";
|
|
124
|
+
readonly valueType: "interval";
|
|
125
|
+
readonly value: readonly [string, string];
|
|
126
|
+
};
|
|
127
|
+
type TemporalNodeForRecord<TRecord> = {
|
|
128
|
+
[TKey in TemporalFieldName<TRecord>]: {
|
|
129
|
+
readonly kind: "temporal";
|
|
130
|
+
readonly operator: TemporalPredicate;
|
|
131
|
+
readonly operand: PropertyNode<TKey>;
|
|
132
|
+
readonly value: TemporalLiteralNode;
|
|
133
|
+
};
|
|
134
|
+
}[TemporalFieldName<TRecord>];
|
|
135
|
+
export type TemporalNode<TRecord> = TemporalNodeForRecord<TRecord>;
|
|
136
|
+
export type BuiltInNativeDialect = "honua-grpc" | "geoservices-sql92" | "cql2-json" | "cql2-text" | "fes-2.0" | "odata-4.0" | "duckdb-sql";
|
|
137
|
+
export type NativeDialectFor<TProtocol extends SourceProtocol> = TProtocol extends "grpc" ? "honua-grpc" : TProtocol extends "geoservices-feature-service" | "geoservices-map-service" | "geoservices-image-service" ? "geoservices-sql92" : TProtocol extends "ogc-features" | "ogc-records" | "stac" ? "cql2-json" | "cql2-text" : TProtocol extends "wfs" ? "fes-2.0" : TProtocol extends "odata" ? "odata-4.0" : TProtocol extends "geoparquet" ? "duckdb-sql" : TProtocol extends ExtensionIdentifier ? `${TProtocol}.${string}` : never;
|
|
138
|
+
export type NativePayloadFor<TDialect extends BuiltInNativeDialect | ExtensionIdentifier> = TDialect extends "cql2-json" | "honua-grpc" ? {
|
|
139
|
+
readonly format: "json";
|
|
140
|
+
readonly value: JsonValue;
|
|
141
|
+
} : TDialect extends "fes-2.0" ? {
|
|
142
|
+
readonly format: "xml";
|
|
143
|
+
readonly text: string;
|
|
144
|
+
} : TDialect extends "geoservices-sql92" | "cql2-text" | "odata-4.0" | "duckdb-sql" ? {
|
|
145
|
+
readonly format: "text";
|
|
146
|
+
readonly text: string;
|
|
147
|
+
} : TDialect extends ExtensionIdentifier ? {
|
|
148
|
+
readonly format: "text" | "xml";
|
|
149
|
+
readonly text: string;
|
|
150
|
+
} | {
|
|
151
|
+
readonly format: "json";
|
|
152
|
+
readonly value: JsonValue;
|
|
153
|
+
} : never;
|
|
154
|
+
export type NativeFilter<TDialect extends BuiltInNativeDialect | ExtensionIdentifier> = {
|
|
155
|
+
readonly kind: "native";
|
|
156
|
+
readonly dialect: TDialect;
|
|
157
|
+
readonly payload: NativePayloadFor<TDialect>;
|
|
158
|
+
};
|
|
159
|
+
export type SemanticFilter<TRecord, TSpatiality extends SourceSpatiality> = ComparisonNode<TRecord> | ListNode<TRecord> | RangeNode<TRecord> | NullNode<FieldName<TRecord>> | PatternNode<StringFieldName<TRecord>> | SpatialNode<TRecord, TSpatiality> | TemporalNode<TRecord> | {
|
|
160
|
+
readonly kind: "boolean";
|
|
161
|
+
readonly operator: "and" | "or";
|
|
162
|
+
readonly args: readonly [SemanticFilter<TRecord, TSpatiality>, ...SemanticFilter<TRecord, TSpatiality>[]];
|
|
163
|
+
} | {
|
|
164
|
+
readonly kind: "not";
|
|
165
|
+
readonly arg: SemanticFilter<TRecord, TSpatiality>;
|
|
166
|
+
};
|
|
167
|
+
export type QueryFilter<TRecord, TProtocol extends SourceProtocol, TSpatiality extends SourceSpatiality> = SemanticFilter<TRecord, TSpatiality> | (NativeDialectFor<TProtocol> extends never ? never : NativeFilter<NativeDialectFor<TProtocol>>);
|
|
168
|
+
export interface SemanticSort<TRecord> {
|
|
169
|
+
readonly field: OrderableFieldName<TRecord>;
|
|
170
|
+
readonly direction: "asc" | "desc";
|
|
171
|
+
readonly nulls?: "first" | "last" | "native";
|
|
172
|
+
}
|
|
173
|
+
export type CountMetric<TRecord, TAlias extends string = string> = {
|
|
174
|
+
readonly fn: "count";
|
|
175
|
+
readonly field?: FieldName<TRecord>;
|
|
176
|
+
readonly as: TAlias;
|
|
177
|
+
};
|
|
178
|
+
export type NumericMetric<TRecord, TAlias extends string = string> = {
|
|
179
|
+
readonly fn: "sum" | "avg" | "stddev" | "variance";
|
|
180
|
+
readonly field: NumericFieldName<TRecord>;
|
|
181
|
+
readonly as: TAlias;
|
|
182
|
+
};
|
|
183
|
+
export type ExtremumMetric<TRecord, TAlias extends string = string> = {
|
|
184
|
+
readonly fn: "min" | "max";
|
|
185
|
+
readonly field: OrderableFieldName<TRecord>;
|
|
186
|
+
readonly as: TAlias;
|
|
187
|
+
};
|
|
188
|
+
export type AggregateMetric<TRecord, TAlias extends string = string> = CountMetric<TRecord, TAlias> | NumericMetric<TRecord, TAlias> | ExtremumMetric<TRecord, TAlias>;
|
|
189
|
+
export type GeometryProjectionFor<TRecord, TSpatiality extends SourceSpatiality> = TSpatiality extends "non-spatial" ? "omit" : TSpatiality extends "primary-geometry" ? "include" | "omit" | {
|
|
190
|
+
readonly field: GeometryFieldName<TRecord>;
|
|
191
|
+
} : "omit" | {
|
|
192
|
+
readonly field: GeometryFieldName<TRecord>;
|
|
193
|
+
};
|
|
194
|
+
export type OutputCrsFor<TSpatiality extends SourceSpatiality> = TSpatiality extends "non-spatial" ? never : Exclude<CrsDefinition, {
|
|
195
|
+
readonly kind: "unknown";
|
|
196
|
+
}>;
|
|
197
|
+
export interface FirstPageRequest {
|
|
198
|
+
readonly kind: "first";
|
|
199
|
+
readonly limit?: number;
|
|
200
|
+
}
|
|
201
|
+
export interface OffsetPageRequest {
|
|
202
|
+
readonly kind: "offset";
|
|
203
|
+
readonly offset: number;
|
|
204
|
+
readonly limit?: number;
|
|
205
|
+
}
|
|
206
|
+
/** Continuation values remain runtime-owned and are intentionally outside the S1 JSON AST. */
|
|
207
|
+
export type SemanticPageRequest = FirstPageRequest | OffsetPageRequest;
|
|
208
|
+
interface SemanticQueryBase<TRecord, TProtocol extends SourceProtocol, TSpatiality extends SourceSpatiality> {
|
|
209
|
+
readonly filter?: QueryFilter<TRecord, TProtocol, TSpatiality>;
|
|
210
|
+
readonly sort?: readonly SemanticSort<TRecord>[];
|
|
211
|
+
readonly page?: SemanticPageRequest;
|
|
212
|
+
readonly outputCrs?: OutputCrsFor<TSpatiality>;
|
|
213
|
+
}
|
|
214
|
+
export interface SemanticFeatureQuery<TRecord, TProtocol extends SourceProtocol, TSpatiality extends SourceSpatiality, TSelect extends readonly FieldName<TRecord>[] | undefined = undefined, TGeometry extends GeometryProjectionFor<TRecord, TSpatiality> = GeometryProjectionFor<TRecord, TSpatiality>> extends SemanticQueryBase<TRecord, TProtocol, TSpatiality> {
|
|
215
|
+
readonly kind: "features";
|
|
216
|
+
readonly select?: TSelect;
|
|
217
|
+
readonly geometry?: TGeometry;
|
|
218
|
+
}
|
|
219
|
+
export interface SemanticAggregateQuery<TRecord, TProtocol extends SourceProtocol, TSpatiality extends SourceSpatiality, TGroupBy extends readonly GroupableFieldName<TRecord>[] = readonly [], TMetrics extends readonly [AggregateMetric<TRecord>, ...AggregateMetric<TRecord>[]] = readonly [
|
|
220
|
+
AggregateMetric<TRecord>,
|
|
221
|
+
...AggregateMetric<TRecord>[]
|
|
222
|
+
]> extends SemanticQueryBase<TRecord, TProtocol, TSpatiality> {
|
|
223
|
+
readonly kind: "aggregate";
|
|
224
|
+
readonly groupBy: TGroupBy;
|
|
225
|
+
readonly metrics: TMetrics;
|
|
226
|
+
}
|
|
227
|
+
export type SemanticQuery<TRecord, TProtocol extends SourceProtocol, TSpatiality extends SourceSpatiality> = SemanticFeatureQuery<TRecord, TProtocol, TSpatiality, readonly FieldName<TRecord>[] | undefined, GeometryProjectionFor<TRecord, TSpatiality>> | SemanticAggregateQuery<TRecord, TProtocol, TSpatiality, readonly GroupableFieldName<TRecord>[], readonly [AggregateMetric<TRecord>, ...AggregateMetric<TRecord>[]]>;
|
|
228
|
+
export type SpatialityForSchema<TSchema extends Pick<SourceSchemaV2, "geometry">> = TSchema["geometry"] extends {
|
|
229
|
+
readonly state: "none";
|
|
230
|
+
} ? "non-spatial" : TSchema["geometry"] extends {
|
|
231
|
+
readonly state: "known";
|
|
232
|
+
readonly primaryField: {
|
|
233
|
+
readonly state: "known";
|
|
234
|
+
};
|
|
235
|
+
} ? "primary-geometry" : "ambiguous-geometry";
|
|
236
|
+
export interface ParseSemanticQueryOptions {
|
|
237
|
+
/** A verified schema is reparsed before use so JavaScript callers cannot forge schema truth. */
|
|
238
|
+
readonly schema?: SourceSchemaV2;
|
|
239
|
+
/** When present, a native expression must match this source protocol. */
|
|
240
|
+
readonly protocol?: SourceProtocol;
|
|
241
|
+
}
|
|
242
|
+
/** Identity inputs carried into canonical semantic-query bytes and hashes. */
|
|
243
|
+
export interface CanonicalSemanticQueryOptions extends ParseSemanticQueryOptions {
|
|
244
|
+
/** Version/fingerprint of the CRS registry or transform policy used by the caller. */
|
|
245
|
+
readonly crsVersion?: string;
|
|
246
|
+
/** Version/fingerprint of the authorization/capability policy used by the caller. */
|
|
247
|
+
readonly policyVersion?: string;
|
|
248
|
+
}
|
|
249
|
+
/** External CQL2 filter context that cannot be encoded inside CQL2 JSON itself. */
|
|
250
|
+
export interface Cql2JsonInterchangeOptions extends ParseSemanticQueryOptions {
|
|
251
|
+
/**
|
|
252
|
+
* CRS and coordinate order represented by spatial literals. Required when a
|
|
253
|
+
* supported expression contains a geometry or bounding box.
|
|
254
|
+
*/
|
|
255
|
+
readonly filterCrs?: ExecutableCrsBinding;
|
|
256
|
+
}
|
|
257
|
+
/** Strict, supported CQL2 JSON filter expression. */
|
|
258
|
+
export type Cql2JsonExpression = Readonly<{
|
|
259
|
+
op: string;
|
|
260
|
+
args: readonly JsonValue[];
|
|
261
|
+
}>;
|
|
262
|
+
export type LegacyWhereProtocol = "geoservices-feature-service" | "geoservices-map-service" | "geoservices-image-service" | "ogc-features" | "ogc-records" | "stac" | "odata" | "geoparquet";
|
|
263
|
+
export type LegacyWhereDialectFor<TProtocol extends LegacyWhereProtocol> = TProtocol extends "geoservices-feature-service" | "geoservices-map-service" | "geoservices-image-service" ? "geoservices-sql92" : TProtocol extends "ogc-features" | "ogc-records" | "stac" ? "cql2-text" : TProtocol extends "odata" ? "odata-4.0" : "duckdb-sql";
|
|
264
|
+
export {};
|
|
265
|
+
//# sourceMappingURL=semantic-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-types.d.ts","sourceRoot":"","sources":["../../../src/query-planner/semantic-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|