@honua/app-platform 0.2.2 → 0.2.4
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/control-plane/dataset-import/client.d.ts +32 -0
- package/control-plane/dataset-import/client.d.ts.map +1 -0
- package/control-plane/dataset-import/client.js +112 -0
- package/control-plane/dataset-import/errors.d.ts +5 -0
- package/control-plane/dataset-import/errors.d.ts.map +1 -0
- package/control-plane/dataset-import/errors.js +8 -0
- package/control-plane/dataset-import/file-hash.d.ts +14 -0
- package/control-plane/dataset-import/file-hash.d.ts.map +1 -0
- package/control-plane/dataset-import/file-hash.js +117 -0
- package/control-plane/dataset-import/index.d.ts +10 -0
- package/control-plane/dataset-import/index.d.ts.map +1 -0
- package/control-plane/dataset-import/index.js +4 -0
- package/control-plane/dataset-import/submission-client.d.ts +18 -0
- package/control-plane/dataset-import/submission-client.d.ts.map +1 -0
- package/control-plane/dataset-import/submission-client.js +197 -0
- package/control-plane/dataset-import/transport.d.ts +14 -0
- package/control-plane/dataset-import/transport.d.ts.map +1 -0
- package/control-plane/dataset-import/transport.js +53 -0
- package/control-plane/dataset-import/types.d.ts +150 -0
- package/control-plane/dataset-import/types.d.ts.map +1 -0
- package/control-plane/dataset-import/types.js +1 -0
- package/control-plane/dataset-import/upload-client.d.ts +23 -0
- package/control-plane/dataset-import/upload-client.d.ts.map +1 -0
- package/control-plane/dataset-import/upload-client.js +187 -0
- package/control-plane/index.d.ts +1 -0
- package/control-plane/index.d.ts.map +1 -1
- package/control-plane/index.js +1 -0
- package/core/job-run-lifecycle.d.ts.map +1 -1
- package/core/job-run-lifecycle.js +4 -0
- package/package.json +2 -2
- package/query-planner/canonical.d.ts.map +1 -1
- package/query-planner/canonical.js +8 -16
- package/runtime/generated/map-package-schema-meta.d.ts +1 -1
- package/runtime/generated/map-package-schema-meta.js +1 -1
- package/runtime/generated/map-package-schema-validator.d.ts +5 -5
- package/runtime/generated/map-package-schema-validator.d.ts.map +1 -1
- package/runtime/generated/map-package-schema-validator.js +746 -619
- package/runtime/index.d.ts +1 -1
- package/runtime/index.d.ts.map +1 -1
- package/runtime/map-package-fetch.d.ts +1 -0
- package/runtime/map-package-fetch.d.ts.map +1 -1
- package/runtime/map-package-fetch.js +24 -39
- package/runtime/map-package-validation.d.ts +1 -1
- package/runtime/map-package-validation.d.ts.map +1 -1
- package/runtime/map-package-validation.js +27 -1
- package/runtime/map-package.d.ts +16 -0
- package/runtime/map-package.d.ts.map +1 -1
- package/runtime/ogc-styles.d.ts +2 -2
- package/runtime/ogc-styles.d.ts.map +1 -1
- package/runtime/ogc-styles.js +17 -3
- package/runtime/style-compose.d.ts +2 -2
- package/runtime/style-compose.d.ts.map +1 -1
- package/runtime/style-compose.js +26 -3
- package/runtime/style-ref-bindings.d.ts +11 -0
- package/runtime/style-ref-bindings.d.ts.map +1 -0
- package/runtime/style-ref-bindings.js +82 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/** Experimental canonical dataset-import task contract; transfer admission is separate. */
|
|
2
|
+
export interface DatasetImportDestination {
|
|
3
|
+
readonly schema: string;
|
|
4
|
+
readonly table: string;
|
|
5
|
+
}
|
|
6
|
+
export interface DatasetImportArtifactSource {
|
|
7
|
+
readonly projectId: string;
|
|
8
|
+
readonly snapshotId: string;
|
|
9
|
+
readonly snapshotDigest: string;
|
|
10
|
+
readonly runId: string;
|
|
11
|
+
readonly path: string;
|
|
12
|
+
}
|
|
13
|
+
export interface DatasetImportSource {
|
|
14
|
+
readonly kind: "browser-file" | "local-process-artifact";
|
|
15
|
+
readonly fileName: string;
|
|
16
|
+
readonly totalBytes: number;
|
|
17
|
+
readonly expectedSha256?: string | null;
|
|
18
|
+
readonly artifact?: DatasetImportArtifactSource | null;
|
|
19
|
+
/** Original human file selection captured by the immutable originating turn. */
|
|
20
|
+
readonly browserSelectionId?: string | null;
|
|
21
|
+
}
|
|
22
|
+
export interface DatasetImportTaskOptions {
|
|
23
|
+
/** Current new-table slice supports Append (1); occupied destinations remain unsupported. */
|
|
24
|
+
readonly loadMode: 1;
|
|
25
|
+
readonly targetSrid: number;
|
|
26
|
+
readonly sourceSrid?: number | null;
|
|
27
|
+
}
|
|
28
|
+
export interface CreateDatasetImportTask {
|
|
29
|
+
/** Persist before POST; a lost reply is recovered by this original intent ID. */
|
|
30
|
+
readonly intentId: string;
|
|
31
|
+
readonly viewId: string;
|
|
32
|
+
readonly contextRevision: number;
|
|
33
|
+
readonly destination: DatasetImportDestination;
|
|
34
|
+
readonly source: DatasetImportSource;
|
|
35
|
+
readonly options: DatasetImportTaskOptions;
|
|
36
|
+
}
|
|
37
|
+
export interface DatasetImportTask {
|
|
38
|
+
readonly taskId: string;
|
|
39
|
+
readonly revision: number;
|
|
40
|
+
readonly contentHash: string;
|
|
41
|
+
readonly ownerActorId: string;
|
|
42
|
+
readonly tenantId?: string | null;
|
|
43
|
+
readonly targetId: string;
|
|
44
|
+
readonly workspaceId: string;
|
|
45
|
+
readonly destination: DatasetImportDestination;
|
|
46
|
+
readonly source: DatasetImportSource;
|
|
47
|
+
readonly options: DatasetImportTaskOptions;
|
|
48
|
+
readonly uploadAdmissionDeadline: string;
|
|
49
|
+
}
|
|
50
|
+
export interface DatasetImportTaskReference {
|
|
51
|
+
readonly taskId: string;
|
|
52
|
+
readonly revision: number;
|
|
53
|
+
readonly contentHash: string;
|
|
54
|
+
}
|
|
55
|
+
export interface DatasetImportAuthorityDescriptor {
|
|
56
|
+
readonly taskId: string;
|
|
57
|
+
readonly taskRevision: number;
|
|
58
|
+
readonly taskContentHash: string;
|
|
59
|
+
readonly executorActorId: string;
|
|
60
|
+
readonly initiatingHumanActorId?: string | null;
|
|
61
|
+
readonly originatingTurnId: string;
|
|
62
|
+
readonly originalTurnHash: string;
|
|
63
|
+
readonly authorityRevision: number;
|
|
64
|
+
readonly authorityFingerprint: string;
|
|
65
|
+
readonly policyContextFingerprint: string;
|
|
66
|
+
readonly uploadAdmissionDeadline: string;
|
|
67
|
+
/** Preparation is not an accepted job receipt. */
|
|
68
|
+
readonly preparedOperationId?: string | null;
|
|
69
|
+
}
|
|
70
|
+
export interface RenewDatasetImportAuthority {
|
|
71
|
+
/** Persist before POST. Reuse it to recover the original renewal receipt. */
|
|
72
|
+
readonly renewalId: string;
|
|
73
|
+
readonly expectedAuthorityRevision: number;
|
|
74
|
+
readonly taskContentHash: string;
|
|
75
|
+
}
|
|
76
|
+
export interface DatasetImportAuthorityRenewal {
|
|
77
|
+
readonly renewalId: string;
|
|
78
|
+
readonly previousAuthorityRevision: number;
|
|
79
|
+
readonly authorityRevision: number;
|
|
80
|
+
readonly authorityFingerprint: string;
|
|
81
|
+
readonly renewedAt: string;
|
|
82
|
+
}
|
|
83
|
+
/** Describes a retained receipt; it does not prove the storage object still exists. */
|
|
84
|
+
export interface DatasetImportSourceRetentionReceipt {
|
|
85
|
+
readonly bytes: number;
|
|
86
|
+
readonly sha256: string;
|
|
87
|
+
readonly expiresAt?: string | null;
|
|
88
|
+
}
|
|
89
|
+
/** Task-bound transfer receipt. Sealing/retaining never accepts an import job. */
|
|
90
|
+
export interface DatasetImportUploadReceipt {
|
|
91
|
+
readonly taskId: string;
|
|
92
|
+
readonly taskRevision: number;
|
|
93
|
+
readonly taskContentHash: string;
|
|
94
|
+
readonly uploadId: string;
|
|
95
|
+
readonly version: number;
|
|
96
|
+
readonly state: "receiving" | "sealed" | "cancelled";
|
|
97
|
+
readonly acceptedBytes: number;
|
|
98
|
+
readonly totalBytes: number;
|
|
99
|
+
readonly chunkBytes: number;
|
|
100
|
+
readonly chunkCount: number;
|
|
101
|
+
readonly expiresAt: string;
|
|
102
|
+
readonly contentSha256?: string | null;
|
|
103
|
+
readonly sourceRetention?: DatasetImportSourceRetentionReceipt | null;
|
|
104
|
+
}
|
|
105
|
+
export interface DatasetImportUploadCapabilities {
|
|
106
|
+
readonly chunkBytes: number;
|
|
107
|
+
readonly maximumFileBytes: number;
|
|
108
|
+
readonly importAcceptanceSupported: boolean;
|
|
109
|
+
}
|
|
110
|
+
/** Current authority tuple explicitly reviewed before human preparation or actual executor submission. */
|
|
111
|
+
export interface SubmitDatasetImport {
|
|
112
|
+
readonly taskContentHash: string;
|
|
113
|
+
readonly authorityRevision: number;
|
|
114
|
+
readonly authorityFingerprint: string;
|
|
115
|
+
readonly policyContextFingerprint: string;
|
|
116
|
+
}
|
|
117
|
+
/** Actual persisted successful provider output, never inferred from the requested destination. */
|
|
118
|
+
export interface DatasetImportOutputReceipt {
|
|
119
|
+
readonly physicalTableName: string;
|
|
120
|
+
readonly schema: string;
|
|
121
|
+
readonly featureCount: number;
|
|
122
|
+
readonly detectedSrid?: number | null;
|
|
123
|
+
}
|
|
124
|
+
export interface DatasetImportJobReceipt {
|
|
125
|
+
readonly jobId: string;
|
|
126
|
+
readonly leaseId: string;
|
|
127
|
+
readonly status: "queued" | "provisioning" | "running" | "succeeded" | "failed" | "cancelled";
|
|
128
|
+
/** The accepted operation is checking a durable commit decision; never permission to resubmit. */
|
|
129
|
+
readonly outcomePending?: boolean;
|
|
130
|
+
readonly createdAt: string;
|
|
131
|
+
readonly updatedAt: string;
|
|
132
|
+
readonly completedAt?: string | null;
|
|
133
|
+
readonly percentComplete?: number | null;
|
|
134
|
+
readonly output?: DatasetImportOutputReceipt | null;
|
|
135
|
+
readonly errorCode?: string | null;
|
|
136
|
+
}
|
|
137
|
+
/** Preparation awaits the actual agent; only accepted contains a real durable job receipt. */
|
|
138
|
+
export interface DatasetImportSubmissionReceipt {
|
|
139
|
+
readonly taskId: string;
|
|
140
|
+
readonly taskRevision: number;
|
|
141
|
+
readonly taskContentHash: string;
|
|
142
|
+
readonly state: "not-prepared" | "prepared" | "accepted";
|
|
143
|
+
readonly operationId?: string | null;
|
|
144
|
+
readonly authorityRevision?: number | null;
|
|
145
|
+
readonly authorityFingerprint?: string | null;
|
|
146
|
+
readonly policyContextFingerprint?: string | null;
|
|
147
|
+
readonly acceptBefore?: string | null;
|
|
148
|
+
readonly job?: DatasetImportJobReceipt | null;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/control-plane/dataset-import/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { DatasetImportTaskClientOptions } from "./client.js";
|
|
2
|
+
import type { DatasetImportTaskReference, DatasetImportUploadCapabilities, DatasetImportUploadReceipt } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Canonical transfer primitives. No import submission or automatic mutation retry.
|
|
5
|
+
* Persist the original immutable task reference before create; recover uncertain
|
|
6
|
+
* create/chunk/seal/source outcomes using read against that SAME task. Always
|
|
7
|
+
* verify the complete reselected file SHA-256 before sending any resumed chunk.
|
|
8
|
+
*/
|
|
9
|
+
export declare class DatasetImportUploadClient {
|
|
10
|
+
private readonly transport;
|
|
11
|
+
constructor(options: DatasetImportTaskClientOptions);
|
|
12
|
+
capabilities(reference: DatasetImportTaskReference, signal?: AbortSignal): Promise<DatasetImportUploadCapabilities | null>;
|
|
13
|
+
read(reference: DatasetImportTaskReference, signal?: AbortSignal): Promise<DatasetImportUploadReceipt | null>;
|
|
14
|
+
/** Read-only recovery of a known session, preserving its immutable fields and terminal receipts. */
|
|
15
|
+
reconcile(reference: DatasetImportTaskReference, original: DatasetImportUploadReceipt, signal?: AbortSignal): Promise<DatasetImportUploadReceipt | null>;
|
|
16
|
+
create(reference: DatasetImportTaskReference, signal?: AbortSignal): Promise<DatasetImportUploadReceipt>;
|
|
17
|
+
appendChunk(reference: DatasetImportTaskReference, original: DatasetImportUploadReceipt, chunk: Blob, signal?: AbortSignal): Promise<DatasetImportUploadReceipt>;
|
|
18
|
+
seal(reference: DatasetImportTaskReference, original: DatasetImportUploadReceipt, signal?: AbortSignal): Promise<DatasetImportUploadReceipt>;
|
|
19
|
+
retainSource(reference: DatasetImportTaskReference, original: DatasetImportUploadReceipt, signal?: AbortSignal): Promise<DatasetImportUploadReceipt>;
|
|
20
|
+
cancel(reference: DatasetImportTaskReference, original: DatasetImportUploadReceipt, signal?: AbortSignal): Promise<DatasetImportUploadReceipt>;
|
|
21
|
+
private mutate;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=upload-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-client.d.ts","sourceRoot":"","sources":["../../../../src/control-plane/dataset-import/upload-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAGlE,OAAO,KAAK,EACV,0BAA0B,EAC1B,+BAA+B,EAC/B,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAKpB;;;;;GAKG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;gBAChD,OAAO,EAAE,8BAA8B;IAI7C,YAAY,CAChB,SAAS,EAAE,0BAA0B,EACrC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,+BAA+B,GAAG,IAAI,CAAC;IAqB5C,IAAI,CAAC,SAAS,EAAE,0BAA0B,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC;IAanH,oGAAoG;IAC9F,SAAS,CACb,SAAS,EAAE,0BAA0B,EACrC,QAAQ,EAAE,0BAA0B,EACpC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC;IAcvC,MAAM,CAAC,SAAS,EAAE,0BAA0B,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAQxG,WAAW,CACf,SAAS,EAAE,0BAA0B,EACrC,QAAQ,EAAE,0BAA0B,EACpC,KAAK,EAAE,IAAI,EACX,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,0BAA0B,CAAC;IAqBhC,IAAI,CACR,SAAS,EAAE,0BAA0B,EACrC,QAAQ,EAAE,0BAA0B,EACpC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,0BAA0B,CAAC;IAGhC,YAAY,CAChB,SAAS,EAAE,0BAA0B,EACrC,QAAQ,EAAE,0BAA0B,EACpC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,0BAA0B,CAAC;IAGhC,MAAM,CACV,SAAS,EAAE,0BAA0B,EACrC,QAAQ,EAAE,0BAA0B,EACpC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,0BAA0B,CAAC;YAaxB,MAAM;CAmBrB"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { hashDatasetImportFile } from "./file-hash.js";
|
|
2
|
+
import { DatasetImportWorkspaceTransport, validId } from "./transport.js";
|
|
3
|
+
const maximumChunkBytes = 4 * 1024 * 1024;
|
|
4
|
+
const maximumChunks = 65536;
|
|
5
|
+
/**
|
|
6
|
+
* Canonical transfer primitives. No import submission or automatic mutation retry.
|
|
7
|
+
* Persist the original immutable task reference before create; recover uncertain
|
|
8
|
+
* create/chunk/seal/source outcomes using read against that SAME task. Always
|
|
9
|
+
* verify the complete reselected file SHA-256 before sending any resumed chunk.
|
|
10
|
+
*/
|
|
11
|
+
export class DatasetImportUploadClient {
|
|
12
|
+
transport;
|
|
13
|
+
constructor(options) {
|
|
14
|
+
this.transport = new DatasetImportWorkspaceTransport(options);
|
|
15
|
+
}
|
|
16
|
+
async capabilities(reference, signal) {
|
|
17
|
+
const pinned = pin(reference);
|
|
18
|
+
const value = await this.transport.request(`${path(pinned)}/capabilities?contentHash=${pinned.contentHash}`, "GET", undefined, signal, true);
|
|
19
|
+
if (value !== null &&
|
|
20
|
+
(!validChunkBytes(value.chunkBytes) ||
|
|
21
|
+
!Number.isSafeInteger(value.maximumFileBytes) ||
|
|
22
|
+
value.maximumFileBytes < 1 ||
|
|
23
|
+
value.maximumFileBytes > value.chunkBytes * maximumChunks ||
|
|
24
|
+
typeof value.importAcceptanceSupported !== "boolean"))
|
|
25
|
+
throw new Error("The host returned an unsupported transfer capability contract.");
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
async read(reference, signal) {
|
|
29
|
+
const pinned = pin(reference);
|
|
30
|
+
const value = await this.transport.request(`${path(pinned)}?contentHash=${pinned.contentHash}`, "GET", undefined, signal, true);
|
|
31
|
+
if (value !== null)
|
|
32
|
+
validate(value, pinned);
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
/** Read-only recovery of a known session, preserving its immutable fields and terminal receipts. */
|
|
36
|
+
async reconcile(reference, original, signal) {
|
|
37
|
+
const pinned = pin(reference);
|
|
38
|
+
const session = captureSession(original, pinned);
|
|
39
|
+
const value = await this.transport.request(`${path(pinned)}?contentHash=${pinned.contentHash}`, "GET", undefined, signal, true);
|
|
40
|
+
if (value !== null)
|
|
41
|
+
validate(value, pinned, session);
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
async create(reference, signal) {
|
|
45
|
+
const pinned = pin(reference);
|
|
46
|
+
const body = JSON.stringify({ taskContentHash: pinned.contentHash });
|
|
47
|
+
const value = await this.transport.request(path(pinned), "POST", body, signal);
|
|
48
|
+
validate(value, pinned);
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
async appendChunk(reference, original, chunk, signal) {
|
|
52
|
+
const pinned = pin(reference);
|
|
53
|
+
const session = captureSession(original, pinned);
|
|
54
|
+
// Snapshot every mutable receipt field before hashing or authentication awaits.
|
|
55
|
+
const { version, acceptedBytes, totalBytes, chunkBytes, state } = session;
|
|
56
|
+
const expectedBytes = Math.min(chunkBytes, totalBytes - acceptedBytes);
|
|
57
|
+
if (state !== "receiving" || expectedBytes < 1 || chunk.size !== expectedBytes)
|
|
58
|
+
throw new TypeError("Exactly one original next chunk is required.");
|
|
59
|
+
const sha256 = await hashDatasetImportFile(chunk, { signal });
|
|
60
|
+
const value = await this.transport.request(`${path(pinned)}/chunks?contentHash=${pinned.contentHash}&expectedVersion=${version}&offset=${acceptedBytes}&sha256=${sha256}`, "PUT", chunk, signal, false, "application/octet-stream");
|
|
61
|
+
validate(value, pinned, session);
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
async seal(reference, original, signal) {
|
|
65
|
+
return await this.mutate(reference, original, "/seal", signal);
|
|
66
|
+
}
|
|
67
|
+
async retainSource(reference, original, signal) {
|
|
68
|
+
return await this.mutate(reference, original, "/source", signal);
|
|
69
|
+
}
|
|
70
|
+
async cancel(reference, original, signal) {
|
|
71
|
+
const pinned = pin(reference);
|
|
72
|
+
const session = captureSession(original, pinned);
|
|
73
|
+
const { version } = session;
|
|
74
|
+
const value = await this.transport.request(`${path(pinned)}?contentHash=${pinned.contentHash}&expectedVersion=${version}`, "DELETE", undefined, signal);
|
|
75
|
+
validate(value, pinned, session);
|
|
76
|
+
return value;
|
|
77
|
+
}
|
|
78
|
+
async mutate(reference, original, action, signal) {
|
|
79
|
+
const pinned = pin(reference);
|
|
80
|
+
const session = captureSession(original, pinned);
|
|
81
|
+
const { version } = session;
|
|
82
|
+
const body = JSON.stringify({ taskContentHash: pinned.contentHash, expectedVersion: version });
|
|
83
|
+
const value = await this.transport.request(`${path(pinned)}${action}`, "POST", body, signal);
|
|
84
|
+
validate(value, pinned, session);
|
|
85
|
+
return value;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function pin(reference) {
|
|
89
|
+
validId(reference.taskId);
|
|
90
|
+
if (!Number.isSafeInteger(reference.revision) || reference.revision < 1 || !digest(reference.contentHash))
|
|
91
|
+
throw new TypeError("An exact immutable task reference is required.");
|
|
92
|
+
return { taskId: reference.taskId, revision: reference.revision, contentHash: reference.contentHash };
|
|
93
|
+
}
|
|
94
|
+
function digest(value) {
|
|
95
|
+
return typeof value === "string" && value.length === 64 && /^[a-f0-9]{64}$/.test(value);
|
|
96
|
+
}
|
|
97
|
+
function validChunkBytes(value) {
|
|
98
|
+
return Number.isSafeInteger(value) && value >= 65536 && value <= maximumChunkBytes;
|
|
99
|
+
}
|
|
100
|
+
function path(reference) {
|
|
101
|
+
return `/dataset-import-tasks/${encodeURIComponent(reference.taskId)}/versions/${reference.revision}/upload`;
|
|
102
|
+
}
|
|
103
|
+
function validate(value, reference, session) {
|
|
104
|
+
if (!value ||
|
|
105
|
+
value.taskId !== reference.taskId ||
|
|
106
|
+
value.taskRevision !== reference.revision ||
|
|
107
|
+
value.taskContentHash !== reference.contentHash ||
|
|
108
|
+
typeof value.uploadId !== "string" ||
|
|
109
|
+
value.uploadId.length !== 32 ||
|
|
110
|
+
!/^[a-f0-9]{32}$/.test(value.uploadId) ||
|
|
111
|
+
(session !== undefined && !matchesOriginalSession(value, session)) ||
|
|
112
|
+
!Number.isSafeInteger(value.version) ||
|
|
113
|
+
value.version < 1 ||
|
|
114
|
+
!Number.isSafeInteger(value.totalBytes) ||
|
|
115
|
+
value.totalBytes < 1 ||
|
|
116
|
+
!validChunkBytes(value.chunkBytes) ||
|
|
117
|
+
value.totalBytes > value.chunkBytes * maximumChunks ||
|
|
118
|
+
!Number.isSafeInteger(value.acceptedBytes) ||
|
|
119
|
+
value.acceptedBytes < 0 ||
|
|
120
|
+
value.acceptedBytes > value.totalBytes ||
|
|
121
|
+
value.chunkCount !== Math.ceil(value.acceptedBytes / value.chunkBytes) ||
|
|
122
|
+
value.acceptedBytes !== Math.min(value.chunkCount * value.chunkBytes, value.totalBytes) ||
|
|
123
|
+
!["receiving", "sealed", "cancelled"].includes(value.state) ||
|
|
124
|
+
!Number.isFinite(Date.parse(value.expiresAt)) ||
|
|
125
|
+
(value.state === "sealed"
|
|
126
|
+
? value.acceptedBytes !== value.totalBytes || !digest(value.contentSha256)
|
|
127
|
+
: value.contentSha256 != null))
|
|
128
|
+
throw new Error("The transfer receipt changed its immutable task/session binding or canonical byte range.");
|
|
129
|
+
if (session?.sourceRetention !== undefined &&
|
|
130
|
+
(value.sourceRetention == null ||
|
|
131
|
+
value.sourceRetention.bytes !== session.sourceRetention.bytes ||
|
|
132
|
+
value.sourceRetention.sha256 !== session.sourceRetention.sha256 ||
|
|
133
|
+
(value.sourceRetention.expiresAt ?? null) !== session.sourceRetention.expiresAt))
|
|
134
|
+
throw new Error("The original retained source receipt changed.");
|
|
135
|
+
if (value.sourceRetention != null &&
|
|
136
|
+
(value.state !== "sealed" ||
|
|
137
|
+
value.sourceRetention.bytes !== value.totalBytes ||
|
|
138
|
+
value.sourceRetention.sha256 !== value.contentSha256 ||
|
|
139
|
+
(value.sourceRetention.expiresAt != null && !Number.isFinite(Date.parse(value.sourceRetention.expiresAt)))))
|
|
140
|
+
throw new Error("The retained source receipt does not match the sealed original bytes.");
|
|
141
|
+
}
|
|
142
|
+
function captureSession(original, reference) {
|
|
143
|
+
validate(original, reference);
|
|
144
|
+
return {
|
|
145
|
+
uploadId: original.uploadId,
|
|
146
|
+
version: original.version,
|
|
147
|
+
state: original.state,
|
|
148
|
+
acceptedBytes: original.acceptedBytes,
|
|
149
|
+
totalBytes: original.totalBytes,
|
|
150
|
+
chunkBytes: original.chunkBytes,
|
|
151
|
+
expiresAt: original.expiresAt,
|
|
152
|
+
contentSha256: original.contentSha256,
|
|
153
|
+
...(original.sourceRetention == null
|
|
154
|
+
? {}
|
|
155
|
+
: {
|
|
156
|
+
sourceRetention: {
|
|
157
|
+
bytes: original.sourceRetention.bytes,
|
|
158
|
+
sha256: original.sourceRetention.sha256,
|
|
159
|
+
expiresAt: original.sourceRetention.expiresAt ?? null,
|
|
160
|
+
},
|
|
161
|
+
}),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function matchesOriginalSession(value, original) {
|
|
165
|
+
if (value.uploadId !== original.uploadId ||
|
|
166
|
+
value.totalBytes !== original.totalBytes ||
|
|
167
|
+
value.chunkBytes !== original.chunkBytes ||
|
|
168
|
+
value.expiresAt !== original.expiresAt ||
|
|
169
|
+
value.version < original.version ||
|
|
170
|
+
value.acceptedBytes < original.acceptedBytes ||
|
|
171
|
+
(original.state !== "receiving" && value.state !== original.state) ||
|
|
172
|
+
(original.state === "cancelled" && value.acceptedBytes !== original.acceptedBytes) ||
|
|
173
|
+
(original.contentSha256 != null && value.contentSha256 !== original.contentSha256))
|
|
174
|
+
return false;
|
|
175
|
+
// Every byte/state/source mutation advances canonical CAS version. A same-version
|
|
176
|
+
// response cannot add bytes, a seal, cancellation or a retained source receipt.
|
|
177
|
+
return (value.version !== original.version ||
|
|
178
|
+
(value.acceptedBytes === original.acceptedBytes &&
|
|
179
|
+
value.state === original.state &&
|
|
180
|
+
(value.contentSha256 ?? null) === (original.contentSha256 ?? null) &&
|
|
181
|
+
sameRetention(value.sourceRetention, original.sourceRetention)));
|
|
182
|
+
}
|
|
183
|
+
function sameRetention(left, right) {
|
|
184
|
+
if (left == null || right == null)
|
|
185
|
+
return left == null && right == null;
|
|
186
|
+
return (left.bytes === right.bytes && left.sha256 === right.sha256 && (left.expiresAt ?? null) === (right.expiresAt ?? null));
|
|
187
|
+
}
|
package/control-plane/index.d.ts
CHANGED
|
@@ -26,4 +26,5 @@ export type { components as AdminApiComponents, operations as AdminApiOperations
|
|
|
26
26
|
export type { StudioCapabilityManifest } from "../studio/capability-manifest.js";
|
|
27
27
|
export { HONUA_CAPABILITY_MANIFEST_PATH, HONUA_CONTROL_PLANE_BASE_PATH } from "./types.js";
|
|
28
28
|
export type { HonuaApiToken, HonuaApiTokenCreateRequest, HonuaCapabilityManifestOptions, HonuaConnectionSummary, HonuaControlPlaneCapability, HonuaControlPlaneJob, HonuaControlPlaneJobStatus, HonuaControlPlaneLinks, HonuaControlPlaneListOptions, HonuaControlPlanePage, HonuaControlPlaneRawRequest, HonuaControlPlaneRequestOptions, HonuaControlPlaneResult, HonuaControlPlaneSourceDescriptor, HonuaControlPlaneSuccess, HonuaControlPlaneUnsupported, HonuaCreateHostedMapRequest, HonuaEntityValidators, HonuaHostedMap, HonuaHostedMapSummary, HonuaImportCreateRequest, HonuaMapPackageSummary, HonuaProblemDetails, HonuaMapPublicationIntent, HonuaPublishMapPackageRequest, HonuaPublishMapPackageResponse, HonuaShareRequest, HonuaShareResponse, HonuaUpdateHostedMapRequest, HonuaWorkspaceSummary, } from "./types.js";
|
|
29
|
+
export * from "./dataset-import/index.js";
|
|
29
30
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/control-plane/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAClE,cAAc,qBAAqB,CAAC;AACpC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,6BAA6B,EAC7B,oCAAoC,EACpC,yBAAyB,EACzB,yBAAyB,EACzB,kCAAkC,EAClC,6BAA6B,EAC7B,iCAAiC,EACjC,8BAA8B,EAC9B,gBAAgB,EAChB,+BAA+B,EAC/B,iCAAiC,EACjC,6BAA6B,EAC7B,6BAA6B,EAC7B,wBAAwB,EACxB,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACV,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,UAAU,IAAI,kBAAkB,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnH,YAAY,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAC3F,YAAY,EACV,aAAa,EACb,0BAA0B,EAC1B,8BAA8B,EAC9B,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACpB,0BAA0B,EAC1B,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,2BAA2B,EAC3B,+BAA+B,EAC/B,uBAAuB,EACvB,iCAAiC,EACjC,wBAAwB,EACxB,4BAA4B,EAC5B,2BAA2B,EAC3B,qBAAqB,EACrB,cAAc,EACd,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,iBAAiB,EACjB,kBAAkB,EAClB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/control-plane/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAClE,cAAc,qBAAqB,CAAC;AACpC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,6BAA6B,EAC7B,oCAAoC,EACpC,yBAAyB,EACzB,yBAAyB,EACzB,kCAAkC,EAClC,6BAA6B,EAC7B,iCAAiC,EACjC,8BAA8B,EAC9B,gBAAgB,EAChB,+BAA+B,EAC/B,iCAAiC,EACjC,6BAA6B,EAC7B,6BAA6B,EAC7B,wBAAwB,EACxB,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACV,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,UAAU,IAAI,kBAAkB,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnH,YAAY,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAC3F,YAAY,EACV,aAAa,EACb,0BAA0B,EAC1B,8BAA8B,EAC9B,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACpB,0BAA0B,EAC1B,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,2BAA2B,EAC3B,+BAA+B,EAC/B,uBAAuB,EACvB,iCAAiC,EACjC,wBAAwB,EACxB,4BAA4B,EAC5B,2BAA2B,EAC3B,qBAAqB,EACrB,cAAc,EACd,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,iBAAiB,EACjB,kBAAkB,EAClB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,cAAc,2BAA2B,CAAC"}
|
package/control-plane/index.js
CHANGED
|
@@ -20,3 +20,4 @@ export * from "./commands/index.js";
|
|
|
20
20
|
export { assertAdminBaseUrl, HonuaAdminApiError, HonuaAdminClient, createHonuaAdminClient, } from "./admin-client.js";
|
|
21
21
|
export { ADMIN_API_BASE_PATH, ADMIN_API_OPERATION_COUNT, ADMIN_API_SERVER_SHA, ADMIN_API_SPEC_SHA256, ADMIN_MCP_CONTRACT_SERVER_SHA, ADMIN_MCP_CONTRACT_REVIEW_SERVER_SHA, ADMIN_MCP_CONTRACT_STATUS, ADMIN_MCP_COVERAGE_SHA256, ADMIN_MCP_EXCLUDED_OPERATION_COUNT, ADMIN_MCP_EXCLUDED_OPERATIONS, ADMIN_MCP_EXCLUSION_ROSTER_SHA256, ADMIN_MCP_PUBLISHED_TOOL_NAMES, ADMIN_OPERATIONS, ADMIN_PUBLISHED_OPERATION_COUNT, ADMIN_RELEASE_CONTRACT_COMPATIBLE, ADMIN_RELEASE_CONTRACT_STATUS, ADMIN_RELEASE_OPERATION_COUNT, ADMIN_RELEASE_SERVER_SHA, MCP_DEFAULT_STATIC_TOOL_COUNT, MCP_DEFAULT_TOTAL_TOOL_COUNT, } from "./generated/admin-operations.js";
|
|
22
22
|
export { HONUA_CAPABILITY_MANIFEST_PATH, HONUA_CONTROL_PLANE_BASE_PATH } from "./types.js";
|
|
23
|
+
export * from "./dataset-import/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-run-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/core/job-run-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,SAAS,EACV,MAAM,qBAAqB,CAAC;AAM7B,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC;IACvC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;CAClE;AAED,8EAA8E;AAC9E,qBAAa,eAAe,CAAC,CAAC;IAQT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP3C,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;gBAE3B,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAKtE,IAAW,MAAM,IAAI,SAAS,CAE7B;IACD,IAAW,QAAQ,IAAI,WAAW,GAAG,SAAS,CAE7C;IACD,IAAW,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAEhD;IAEM,KAAK,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAK7C,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAKrC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"job-run-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/core/job-run-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,SAAS,EACV,MAAM,qBAAqB,CAAC;AAM7B,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC;IACvC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;CAClE;AAED,8EAA8E;AAC9E,qBAAa,eAAe,CAAC,CAAC;IAQT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP3C,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;gBAE3B,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAKtE,IAAW,MAAM,IAAI,SAAS,CAE7B;IACD,IAAW,QAAQ,IAAI,WAAW,GAAG,SAAS,CAE7C;IACD,IAAW,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAEhD;IAEM,KAAK,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAK7C,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAKrC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAiB3C,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAqBvE,OAAO,CAAC,SAAS,GAAE,iBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAWxE,OAAO,CAAC,aAAa;YAOP,gBAAgB;YAkChB,gBAAgB;IAgC9B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,YAAY;CASrB"}
|
|
@@ -34,6 +34,10 @@ export class JobRunLifecycle {
|
|
|
34
34
|
return this.observe(await this.options.poll());
|
|
35
35
|
}
|
|
36
36
|
observe(snapshot) {
|
|
37
|
+
// A terminal learned from another poll or cancellation wins over any
|
|
38
|
+
// response still in flight, including the results polling loop.
|
|
39
|
+
if (this.terminalSnapshot)
|
|
40
|
+
return this.terminalSnapshot;
|
|
37
41
|
this.currentStatus = snapshot.status;
|
|
38
42
|
this.currentProgress = snapshot.progress;
|
|
39
43
|
if (isJobTerminal(snapshot.status))
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@honua/app-platform",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "Honua application-platform surfaces: app-shell, workspace, scene, operator, studio, and hosted-product clients",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gis",
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
"proj4": "^2.20.9"
|
|
122
122
|
},
|
|
123
123
|
"peerDependencies": {
|
|
124
|
-
"@honua/sdk": "0.2.
|
|
124
|
+
"@honua/sdk": "0.2.4",
|
|
125
125
|
"@bufbuild/protobuf": "^2.0.0",
|
|
126
126
|
"@connectrpc/connect": "^2.0.0",
|
|
127
127
|
"@connectrpc/connect-web": "^2.0.0",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../../src/query-planner/canonical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAE3D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,SAAM,GAAG,SAAS,CAEjE;
|
|
1
|
+
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../../src/query-planner/canonical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAE3D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,SAAM,GAAG,SAAS,CAEjE;AAqDD,iFAAiF;AACjF,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,MAAM,EAAE,CA6DxD"}
|
|
@@ -33,20 +33,17 @@ function convertJson(value, path, ancestors) {
|
|
|
33
33
|
throw new TypeError(`${path} must contain only plain JSON objects`);
|
|
34
34
|
}
|
|
35
35
|
ancestors.add(value);
|
|
36
|
-
const
|
|
36
|
+
const entries = [];
|
|
37
37
|
for (const key of Object.keys(value).sort()) {
|
|
38
38
|
const entry = value[key];
|
|
39
39
|
if (entry !== undefined) {
|
|
40
|
-
|
|
41
|
-
value: convertJson(entry, `${path}.${key}`, ancestors),
|
|
42
|
-
enumerable: true,
|
|
43
|
-
writable: true,
|
|
44
|
-
configurable: true,
|
|
45
|
-
});
|
|
40
|
+
entries.push([key, convertJson(entry, `${path}.${key}`, ancestors)]);
|
|
46
41
|
}
|
|
47
42
|
}
|
|
48
43
|
ancestors.delete(value);
|
|
49
|
-
|
|
44
|
+
// Native data-property creation keeps special keys inert without allocating
|
|
45
|
+
// a property descriptor for every member of every detached object.
|
|
46
|
+
return Object.fromEntries(entries);
|
|
50
47
|
}
|
|
51
48
|
throw new TypeError(`${path} contains unsupported ${typeof value}`);
|
|
52
49
|
}
|
|
@@ -55,16 +52,11 @@ function sortJson(value) {
|
|
|
55
52
|
return value.map(sortJson);
|
|
56
53
|
if (value !== null && typeof value === "object") {
|
|
57
54
|
const object = value;
|
|
58
|
-
const
|
|
55
|
+
const entries = [];
|
|
59
56
|
for (const key of Object.keys(object).sort()) {
|
|
60
|
-
|
|
61
|
-
value: sortJson(object[key]),
|
|
62
|
-
enumerable: true,
|
|
63
|
-
writable: true,
|
|
64
|
-
configurable: true,
|
|
65
|
-
});
|
|
57
|
+
entries.push([key, sortJson(object[key])]);
|
|
66
58
|
}
|
|
67
|
-
return
|
|
59
|
+
return Object.fromEntries(entries);
|
|
68
60
|
}
|
|
69
61
|
return value;
|
|
70
62
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** `$id` of the schema this projection was generated from. */
|
|
2
2
|
export declare const HONUA_MAP_PACKAGE_SCHEMA_ID: "https://honua.io/schemas/honua-map-package.v1.json";
|
|
3
3
|
/** sha256 of the schema bytes, so a drifted projection is identifiable. */
|
|
4
|
-
export declare const HONUA_MAP_PACKAGE_SCHEMA_SHA256: "
|
|
4
|
+
export declare const HONUA_MAP_PACKAGE_SCHEMA_SHA256: "d25f1ecd7240e71bd606fa10b75ad0b03510afdf6b59a49d77be1e3e048b1465";
|
|
5
5
|
/** Every `SourceBinding.protocol` value the schema admits. */
|
|
6
6
|
export declare const HONUA_MAP_PACKAGE_SCHEMA_PROTOCOLS: readonly ["geoservices_feature_service", "geoservices_map_service", "ogc_features", "ogc_maps", "ogc_tiles", "wfs", "wms", "wmts", "odata", "vector_tile", "raster_tile", "pmtiles", "workspace_artifact"];
|
|
7
7
|
/** Every `status` value the schema admits (server-produced; see the schema). */
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/** `$id` of the schema this projection was generated from. */
|
|
4
4
|
export const HONUA_MAP_PACKAGE_SCHEMA_ID = "https://honua.io/schemas/honua-map-package.v1.json";
|
|
5
5
|
/** sha256 of the schema bytes, so a drifted projection is identifiable. */
|
|
6
|
-
export const HONUA_MAP_PACKAGE_SCHEMA_SHA256 = "
|
|
6
|
+
export const HONUA_MAP_PACKAGE_SCHEMA_SHA256 = "d25f1ecd7240e71bd606fa10b75ad0b03510afdf6b59a49d77be1e3e048b1465";
|
|
7
7
|
/** Every `SourceBinding.protocol` value the schema admits. */
|
|
8
8
|
export const HONUA_MAP_PACKAGE_SCHEMA_PROTOCOLS = ["geoservices_feature_service", "geoservices_map_service", "ogc_features", "ogc_maps", "ogc_tiles", "wfs", "wms", "wmts", "odata", "vector_tile", "raster_tile", "pmtiles", "workspace_artifact"];
|
|
9
9
|
/** Every `status` value the schema admits (server-produced; see the schema). */
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
declare const
|
|
2
|
-
declare var
|
|
3
|
-
declare function
|
|
1
|
+
declare const E: typeof I;
|
|
2
|
+
declare var D: typeof I;
|
|
3
|
+
declare function I(m: any, { instancePath: i, parentData: b, parentDataProperty: f, rootData: h, dynamicAnchors: w }?: {
|
|
4
4
|
instancePath?: string | undefined;
|
|
5
5
|
rootData?: any;
|
|
6
6
|
dynamicAnchors?: {} | undefined;
|
|
7
7
|
}): boolean;
|
|
8
|
-
declare namespace
|
|
8
|
+
declare namespace I {
|
|
9
9
|
var evaluated: {
|
|
10
10
|
props: boolean;
|
|
11
11
|
dynamicProps: boolean;
|
|
12
12
|
dynamicItems: boolean;
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
|
-
export {
|
|
15
|
+
export { D as default, E as validate };
|
|
16
16
|
//# sourceMappingURL=map-package-schema-validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-package-schema-validator.d.ts","sourceRoot":"","sources":["../../../../src/runtime/generated/map-package-schema-validator.ts"],"names":[],"mappings":"AA2B4J,QAAA,MAAM,CAAC,UAAE,CAAC;AAAA,QAAA,IAAI,CAAC,UAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"map-package-schema-validator.d.ts","sourceRoot":"","sources":["../../../../src/runtime/generated/map-package-schema-validator.ts"],"names":[],"mappings":"AA2B4J,QAAA,MAAM,CAAC,UAAE,CAAC;AAAA,QAAA,IAAI,CAAC,UAAE,CAAC;AAA0j5B,iBAAS,CAAC,CAAC,CAAC,KAAA,EAAC,EAAC,YAAY,EAAC,CAAI,EAAC,UAAU,EAAC,CAAC,EAAC,kBAAkB,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAG,EAAC,cAAc,EAAC,CAAI,EAAC;;;;CAAG,WAA6i2C;kBAA1o2C,CAAC;;;;;;;AAAgs2C,OAAM,EAAC,CAAC,IAAI,OAAO,EAAC,CAAC,IAAI,QAAQ,EAAC,CAAC"}
|