@_linked/core 1.0.0-next.20260226234425 → 1.0.0-next.20260302072255
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 +54 -4
- package/README.md +124 -6
- package/lib/cjs/index.js +2 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/queries/IRCanonicalize.js +10 -1
- package/lib/cjs/queries/IRCanonicalize.js.map +1 -1
- package/lib/cjs/queries/IRLower.js +38 -4
- package/lib/cjs/queries/IRLower.js.map +1 -1
- package/lib/cjs/queries/IRProjection.d.ts +13 -2
- package/lib/cjs/queries/IRProjection.js +15 -1
- package/lib/cjs/queries/IRProjection.js.map +1 -1
- package/lib/cjs/queries/IntermediateRepresentation.d.ts +11 -1
- package/lib/cjs/queries/MutationQuery.js +9 -23
- package/lib/cjs/queries/MutationQuery.js.map +1 -1
- package/lib/cjs/sparql/SparqlAlgebra.d.ts +158 -0
- package/lib/cjs/sparql/SparqlAlgebra.js +4 -0
- package/lib/cjs/sparql/SparqlAlgebra.js.map +1 -0
- package/lib/cjs/sparql/SparqlStore.d.ts +52 -0
- package/lib/cjs/sparql/SparqlStore.js +81 -0
- package/lib/cjs/sparql/SparqlStore.js.map +1 -0
- package/lib/cjs/sparql/algebraToString.d.ts +13 -0
- package/lib/cjs/sparql/algebraToString.js +298 -0
- package/lib/cjs/sparql/algebraToString.js.map +1 -0
- package/lib/cjs/sparql/index.d.ts +9 -0
- package/lib/cjs/sparql/index.js +40 -0
- package/lib/cjs/sparql/index.js.map +1 -0
- package/lib/cjs/sparql/irToAlgebra.d.ts +39 -0
- package/lib/cjs/sparql/irToAlgebra.js +927 -0
- package/lib/cjs/sparql/irToAlgebra.js.map +1 -0
- package/lib/cjs/sparql/resultMapping.d.ts +36 -0
- package/lib/cjs/sparql/resultMapping.js +501 -0
- package/lib/cjs/sparql/resultMapping.js.map +1 -0
- package/lib/cjs/sparql/sparqlUtils.d.ts +32 -0
- package/lib/cjs/sparql/sparqlUtils.js +89 -0
- package/lib/cjs/sparql/sparqlUtils.js.map +1 -0
- package/lib/cjs/test-helpers/FusekiStore.d.ts +29 -0
- package/lib/cjs/test-helpers/FusekiStore.js +82 -0
- package/lib/cjs/test-helpers/FusekiStore.js.map +1 -0
- package/lib/cjs/test-helpers/fuseki-test-store.d.ts +43 -0
- package/lib/cjs/test-helpers/fuseki-test-store.js +144 -0
- package/lib/cjs/test-helpers/fuseki-test-store.js.map +1 -0
- package/lib/esm/index.js +2 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/queries/IRCanonicalize.js +10 -1
- package/lib/esm/queries/IRCanonicalize.js.map +1 -1
- package/lib/esm/queries/IRLower.js +38 -4
- package/lib/esm/queries/IRLower.js.map +1 -1
- package/lib/esm/queries/IRProjection.d.ts +13 -2
- package/lib/esm/queries/IRProjection.js +15 -1
- package/lib/esm/queries/IRProjection.js.map +1 -1
- package/lib/esm/queries/IntermediateRepresentation.d.ts +11 -1
- package/lib/esm/queries/MutationQuery.js +9 -23
- package/lib/esm/queries/MutationQuery.js.map +1 -1
- package/lib/esm/sparql/SparqlAlgebra.d.ts +158 -0
- package/lib/esm/sparql/SparqlAlgebra.js +3 -0
- package/lib/esm/sparql/SparqlAlgebra.js.map +1 -0
- package/lib/esm/sparql/SparqlStore.d.ts +52 -0
- package/lib/esm/sparql/SparqlStore.js +77 -0
- package/lib/esm/sparql/SparqlStore.js.map +1 -0
- package/lib/esm/sparql/algebraToString.d.ts +13 -0
- package/lib/esm/sparql/algebraToString.js +289 -0
- package/lib/esm/sparql/algebraToString.js.map +1 -0
- package/lib/esm/sparql/index.d.ts +9 -0
- package/lib/esm/sparql/index.js +13 -0
- package/lib/esm/sparql/index.js.map +1 -0
- package/lib/esm/sparql/irToAlgebra.d.ts +39 -0
- package/lib/esm/sparql/irToAlgebra.js +917 -0
- package/lib/esm/sparql/irToAlgebra.js.map +1 -0
- package/lib/esm/sparql/resultMapping.d.ts +36 -0
- package/lib/esm/sparql/resultMapping.js +496 -0
- package/lib/esm/sparql/resultMapping.js.map +1 -0
- package/lib/esm/sparql/sparqlUtils.d.ts +32 -0
- package/lib/esm/sparql/sparqlUtils.js +82 -0
- package/lib/esm/sparql/sparqlUtils.js.map +1 -0
- package/lib/esm/test-helpers/FusekiStore.d.ts +29 -0
- package/lib/esm/test-helpers/FusekiStore.js +78 -0
- package/lib/esm/test-helpers/FusekiStore.js.map +1 -0
- package/lib/esm/test-helpers/fuseki-test-store.d.ts +43 -0
- package/lib/esm/test-helpers/fuseki-test-store.js +135 -0
- package/lib/esm/test-helpers/fuseki-test-store.js.map +1 -0
- package/package.json +5 -3
package/CHANGELOG.md
CHANGED
|
@@ -8,11 +8,61 @@
|
|
|
8
8
|
|
|
9
9
|
### Minor Changes
|
|
10
10
|
|
|
11
|
-
- [#9](https://github.com/Semantu/linked/pull/9) [`381067b`](https://github.com/Semantu/linked/commit/381067b0fbc25f4a0446c5f8cc0eec57ddded466) Thanks [@flyon](https://github.com/flyon)! -
|
|
11
|
+
- [#9](https://github.com/Semantu/linked/pull/9) [`381067b`](https://github.com/Semantu/linked/commit/381067b0fbc25f4a0446c5f8cc0eec57ddded466) Thanks [@flyon](https://github.com/flyon)! - Replaced internal query representation with a canonical backend-agnostic IR AST. `SelectQuery`, `CreateQuery`, `UpdateQuery`, and `DeleteQuery` are now typed IR objects with `kind` discriminators, compact shape/property ID references, and expression trees — replacing the previous ad-hoc nested arrays. The public Shape DSL is unchanged; what changed is what `IQuadStore` implementations receive. Store result types (`ResultRow`, `SelectResult`, `CreateResult`, `UpdateResult`) are now exported. All factories expose `build()` as the primary method. See `documentation/intermediate-representation.md` for the full IR reference and migration guidance.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
- [#14](https://github.com/Semantu/linked/pull/14) [`b65e156`](https://github.com/Semantu/linked/commit/b65e15688ac173478e58e1dbb9f26dbaf5fc5a37) Thanks [@flyon](https://github.com/flyon)! - Add SPARQL conversion layer — compiles Linked IR queries into executable SPARQL and maps results back to typed DSL objects.
|
|
14
|
+
|
|
15
|
+
**New exports from `@_linked/core/sparql`:**
|
|
16
|
+
|
|
17
|
+
- **`SparqlStore`** — abstract base class for SPARQL-backed stores. Extend it and implement two methods to connect any SPARQL 1.1 endpoint:
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { SparqlStore } from "@_linked/core/sparql";
|
|
21
|
+
|
|
22
|
+
class MyStore extends SparqlStore {
|
|
23
|
+
protected async executeSparqlSelect(
|
|
24
|
+
sparql: string
|
|
25
|
+
): Promise<SparqlJsonResults> {
|
|
26
|
+
/* ... */
|
|
27
|
+
}
|
|
28
|
+
protected async executeSparqlUpdate(sparql: string): Promise<void> {
|
|
29
|
+
/* ... */
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- **IR → SPARQL string** convenience functions (full pipeline in one call):
|
|
35
|
+
|
|
36
|
+
- `selectToSparql(query, options?)` — SelectQuery → SPARQL string
|
|
37
|
+
- `createToSparql(query, options?)` — CreateQuery → SPARQL string
|
|
38
|
+
- `updateToSparql(query, options?)` — UpdateQuery → SPARQL string
|
|
39
|
+
- `deleteToSparql(query, options?)` — DeleteQuery → SPARQL string
|
|
40
|
+
|
|
41
|
+
- **IR → SPARQL algebra** (for stores that want to inspect/optimize the algebra before serialization):
|
|
42
|
+
|
|
43
|
+
- `selectToAlgebra(query, options?)` — returns `SparqlSelectPlan`
|
|
44
|
+
- `createToAlgebra(query, options?)` — returns `SparqlInsertDataPlan`
|
|
45
|
+
- `updateToAlgebra(query, options?)` — returns `SparqlDeleteInsertPlan`
|
|
46
|
+
- `deleteToAlgebra(query, options?)` — returns `SparqlDeleteInsertPlan`
|
|
47
|
+
|
|
48
|
+
- **Algebra → SPARQL string** serialization:
|
|
49
|
+
|
|
50
|
+
- `selectPlanToSparql(plan, options?)`, `insertDataPlanToSparql(plan, options?)`, `deleteInsertPlanToSparql(plan, options?)`, `deleteWherePlanToSparql(plan, options?)`
|
|
51
|
+
- `serializeAlgebraNode(node)`, `serializeExpression(expr)`, `serializeTerm(term)`
|
|
52
|
+
|
|
53
|
+
- **Result mapping** (SPARQL JSON results → typed DSL objects):
|
|
54
|
+
|
|
55
|
+
- `mapSparqlSelectResult(json, query)` — handles flat/nested/aggregated results with XSD type coercion
|
|
56
|
+
- `mapSparqlCreateResult(uri, query)` — echoes created fields with generated URI
|
|
57
|
+
- `mapSparqlUpdateResult(query)` — echoes updated fields
|
|
58
|
+
|
|
59
|
+
- **All algebra types** re-exported: `SparqlTerm`, `SparqlTriple`, `SparqlAlgebraNode`, `SparqlExpression`, `SparqlSelectPlan`, `SparqlInsertDataPlan`, `SparqlDeleteInsertPlan`, `SparqlDeleteWherePlan`, `SparqlPlan`, `SparqlOptions`, etc.
|
|
60
|
+
|
|
61
|
+
**Bug fixes included:**
|
|
62
|
+
|
|
63
|
+
- Fixed `isNodeReference()` in MutationQuery.ts — nested creates with predefined IDs (e.g., `{id: '...', name: 'Bestie'}`) now correctly insert entity data instead of only creating the link.
|
|
64
|
+
|
|
65
|
+
See [SPARQL Algebra Layer docs](./documentation/sparql-algebra.md) for the full type reference, conversion rules, and store implementation guide.
|
|
16
66
|
|
|
17
67
|
- [#4](https://github.com/Semantu/linked/pull/4) [`c35e686`](https://github.com/Semantu/linked/commit/c35e6861600d7aa8683b4b288fc4d1dc74c4aff2) Thanks [@flyon](https://github.com/flyon)! - - Added `Shape.selectAll()` plus nested `selectAll()` support on sub-queries.
|
|
18
68
|
- Added inherited property deduplication via `NodeShape.getUniquePropertyShapes()` so subclass overrides win by label and are selected once.
|
package/README.md
CHANGED
|
@@ -6,6 +6,7 @@ Linked core gives you a type-safe, schema-parameterized query language and SHACL
|
|
|
6
6
|
## Linked core offers
|
|
7
7
|
|
|
8
8
|
- **Schema-Parameterized Query DSL**: TypeScript-embedded queries driven by your Shape definitions.
|
|
9
|
+
- **Fully Inferred Result Types**: The TypeScript return type of every query is automatically inferred from the selected paths — no manual type annotations needed. Select `p.name` and get `{id: string; name: string}[]`. Select `p.friends.name` and get nested result types. This works for all operations: select, create, update, and delete.
|
|
9
10
|
- **Shape Classes (SHACL)**: TypeScript classes that generate SHACL shape metadata.
|
|
10
11
|
- **Object-Oriented Data Operations**: Query, create, update, and delete data using the same Shape-based API.
|
|
11
12
|
- **Storage Routing**: `LinkedStorage` routes query objects to your configured store(s) that implement `IQuadStore`.
|
|
@@ -31,11 +32,6 @@ npm run setup
|
|
|
31
32
|
- `.claude/agents`
|
|
32
33
|
- `.agents/agents`
|
|
33
34
|
|
|
34
|
-
```typescript
|
|
35
|
-
import {Shape, LinkedStorage} from '@_linked/core';
|
|
36
|
-
import {linkedPackage} from '@_linked/core/utils/Package';
|
|
37
|
-
```
|
|
38
|
-
|
|
39
35
|
## Related packages
|
|
40
36
|
|
|
41
37
|
- `@_linked/rdf-mem-store`: in-memory RDF store that implements `IQuadStore`.
|
|
@@ -44,6 +40,128 @@ import {linkedPackage} from '@_linked/core/utils/Package';
|
|
|
44
40
|
## Documentation
|
|
45
41
|
|
|
46
42
|
- [Intermediate Representation (IR)](./documentation/intermediate-representation.md)
|
|
43
|
+
- [SPARQL Algebra Layer](./documentation/sparql-algebra.md)
|
|
44
|
+
|
|
45
|
+
## How Linked works — from shapes to query results
|
|
46
|
+
|
|
47
|
+
Linked turns TypeScript classes into a type-safe query pipeline. Here is the full flow, traced through a single example:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
Shape class → DSL query → IR (AST) → Target query language → Execute → Map results
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 1. SHACL shapes from TypeScript classes
|
|
54
|
+
|
|
55
|
+
Shape classes use decorators to generate SHACL metadata. These shapes define the data model, drive the DSL's type safety, and can be synced to a store for runtime data validation.
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
@linkedShape
|
|
59
|
+
export class Person extends Shape {
|
|
60
|
+
static targetClass = schema('Person');
|
|
61
|
+
|
|
62
|
+
@literalProperty({path: schema('name'), maxCount: 1})
|
|
63
|
+
get name(): string { return ''; }
|
|
64
|
+
|
|
65
|
+
@objectProperty({path: schema('knows'), shape: Person})
|
|
66
|
+
get friends(): ShapeSet<Person> { return null; }
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 2. Type-safe query DSL with inferred result types
|
|
71
|
+
|
|
72
|
+
The DSL uses these shape classes to provide compile-time checked queries. You cannot write a query that references a property not defined on the shape. The result type is **fully inferred** from the selected paths — no manual type annotations needed:
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
// TypeScript infers: Promise<{id: string; name: string}[]>
|
|
76
|
+
const result = await Person.select(p => p.name);
|
|
77
|
+
|
|
78
|
+
// TypeScript infers: Promise<{id: string; friends: {id: string; name: string}[]}[]>
|
|
79
|
+
const nested = await Person.select(p => p.friends.name);
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 3. SHACL-based Intermediate Representation (IR)
|
|
83
|
+
|
|
84
|
+
The DSL compiles to a backend-agnostic AST — the [Intermediate Representation](./documentation/intermediate-representation.md). This is the contract between the DSL and any store implementation.
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"kind": "select",
|
|
89
|
+
"root": { "kind": "shape_scan", "shape": ".../Person", "alias": "a0" },
|
|
90
|
+
"projection": [
|
|
91
|
+
{ "alias": "a1", "expression": { "kind": "property_expr", "sourceAlias": "a0", "property": ".../name" } }
|
|
92
|
+
],
|
|
93
|
+
"resultMap": [{ "key": ".../name", "alias": "a1" }]
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
The IR uses full SHACL-derived URIs for shapes and properties. Any store that implements `IQuadStore` receives these IR objects and translates them into its native query language.
|
|
98
|
+
|
|
99
|
+
### 4. IR → SPARQL Algebra
|
|
100
|
+
|
|
101
|
+
For SPARQL-backed stores, the IR is converted into a formal [SPARQL algebra](./documentation/sparql-algebra.md) — a tree of typed nodes aligned with the SPARQL 1.1 specification.
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
SparqlSelectPlan {
|
|
105
|
+
projection: [?a0, ?a0_name]
|
|
106
|
+
algebra: LeftJoin(
|
|
107
|
+
BGP(?a0 rdf:type <Person>),
|
|
108
|
+
BGP(?a0 <name> ?a0_name) ← wrapped in OPTIONAL
|
|
109
|
+
)
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Properties are wrapped in `LeftJoin` (OPTIONAL) so missing values don't eliminate result rows.
|
|
114
|
+
|
|
115
|
+
### 5. SPARQL Algebra → SPARQL string
|
|
116
|
+
|
|
117
|
+
The algebra is a plain data structure — stores can inspect or optimize it before serialization (e.g., rewriting patterns, adding graph clauses, or pruning redundant joins).
|
|
118
|
+
|
|
119
|
+
The algebra tree is then serialized into a SPARQL query string with automatic PREFIX generation:
|
|
120
|
+
|
|
121
|
+
```sparql
|
|
122
|
+
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
|
|
123
|
+
SELECT DISTINCT ?a0 ?a0_name
|
|
124
|
+
WHERE {
|
|
125
|
+
?a0 rdf:type <.../Person> .
|
|
126
|
+
OPTIONAL {
|
|
127
|
+
?a0 <.../name> ?a0_name .
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 6. Execute and map results
|
|
133
|
+
|
|
134
|
+
The SPARQL endpoint returns JSON results, which are mapped back into typed result objects:
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
Endpoint returns: Mapped to:
|
|
138
|
+
┌──────────┬──────────┐ ┌──────────────────────────────┐
|
|
139
|
+
│ a0 │ a0_name │ │ { id: ".../p1", name: "Semmy" } │
|
|
140
|
+
│ .../p1 │ "Semmy" │ → │ { id: ".../p2", name: "Moa" } │
|
|
141
|
+
│ .../p2 │ "Moa" │ │ ... │
|
|
142
|
+
└──────────┴──────────┘ └──────────────────────────────┘
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Values are automatically coerced: `xsd:boolean` → `boolean`, `xsd:integer` → `number`, `xsd:dateTime` → `Date`. Nested traversals are grouped and deduplicated into nested result objects.
|
|
146
|
+
|
|
147
|
+
### The SparqlStore base class
|
|
148
|
+
|
|
149
|
+
`SparqlStore` handles this entire pipeline. Concrete stores only implement the transport:
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
import { SparqlStore } from '@_linked/core/sparql';
|
|
153
|
+
|
|
154
|
+
class MyStore extends SparqlStore {
|
|
155
|
+
protected async executeSparqlSelect(sparql: string) {
|
|
156
|
+
// Send SPARQL to your endpoint, return JSON results
|
|
157
|
+
}
|
|
158
|
+
protected async executeSparqlUpdate(sparql: string) {
|
|
159
|
+
// Send SPARQL UPDATE to your endpoint
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
See the [SPARQL Algebra Layer docs](./documentation/sparql-algebra.md) for the full type reference, conversion algorithm, and store implementation guide.
|
|
47
165
|
|
|
48
166
|
## Linked Package Setup
|
|
49
167
|
|
|
@@ -478,7 +596,7 @@ All IR types are available from `@_linked/core/queries/IntermediateRepresentatio
|
|
|
478
596
|
|
|
479
597
|
**Store packages:**
|
|
480
598
|
|
|
481
|
-
- `@_linked/sparql
|
|
599
|
+
- `SparqlStore` base class — included in `@_linked/core/sparql`, extend it for any SPARQL endpoint
|
|
482
600
|
- `@_linked/rdf-mem-store` — in-memory RDF store
|
|
483
601
|
|
|
484
602
|
## Changelog
|
package/lib/cjs/index.js
CHANGED
|
@@ -76,6 +76,7 @@ const shacl = __importStar(require("./ontologies/shacl.js"));
|
|
|
76
76
|
const lincd = __importStar(require("./ontologies/lincd.js"));
|
|
77
77
|
const owl = __importStar(require("./ontologies/owl.js"));
|
|
78
78
|
const npm = __importStar(require("./ontologies/npm.js"));
|
|
79
|
+
const Sparql = __importStar(require("./sparql/index.js"));
|
|
79
80
|
const next_tick_1 = __importDefault(require("next-tick"));
|
|
80
81
|
exports.nextTick = next_tick_1.default;
|
|
81
82
|
function initModularApp() {
|
|
@@ -113,6 +114,7 @@ function initModularApp() {
|
|
|
113
114
|
lincd,
|
|
114
115
|
owl,
|
|
115
116
|
npm,
|
|
117
|
+
Sparql,
|
|
116
118
|
};
|
|
117
119
|
var lincdExport = {};
|
|
118
120
|
for (let fileKey in publicFiles) {
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,wCAiDC;AA3FD;;;;GAIG;AACH,4DAA8C;AAC9C,kFAAoE;AACpE,gFAAkE;AAClE,wEAA0D;AAC1D,kEAAoD;AACpD,kEAAoD;AACpD,yDAA2C;AAC3C,+DAAiD;AACjD,oEAAsD;AACtD,0DAA4C;AAC5C,oDAAsC;AACtC,sEAAwD;AACxD,sEAAwD;AACxD,0EAA4D;AAC5D,sEAAwD;AACxD,sEAAwD;AACxD,sEAAwD;AACxD,wEAA0D;AAC1D,oGAAsF;AACtF,gEAAkD;AAClD,kEAAoD;AACpD,0DAA4C;AAC5C,uDAAyC;AACzC,6EAA+D;AAC/D,uEAAyD;AACzD,uEAAyD;AACzD,yDAA2C;AAC3C,2DAA6C;AAC7C,yDAA2C;AAC3C,6DAA+C;AAC/C,6DAA+C;AAC/C,yDAA2C;AAC3C,yDAA2C;AAC3C,0DAA4C;AAC5C,0DAAiC;AACzB,mBADD,mBAAQ,CACC;AAEhB,SAAgB,cAAc;IAC5B,IAAI,WAAW,GAAG;QAChB,OAAO;QACP,kBAAkB;QAClB,iBAAiB;QACjB,aAAa;QACb,OAAO;QACP,OAAO;QACP,KAAK;QACL,QAAQ;QACR,MAAM;QACN,SAAS;QACT,MAAM;QACN,GAAG;QACH,UAAU;QACV,IAAI;QACJ,aAAa;QACb,UAAU;QACV,UAAU;QACV,WAAW;QACX,WAAW;QACX,aAAa;QACb,WAAW;QACX,WAAW;QACX,WAAW;QACX,YAAY;QACZ,0BAA0B;QAC1B,WAAW;QACX,GAAG;QACH,IAAI;QACJ,GAAG;QACH,KAAK;QACL,KAAK;QACL,GAAG;QACH,GAAG;QACH,MAAM;KACP,CAAC;IACF,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,KAAK,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,KAAK,IAAI,SAAS,IAAI,eAAe,EAAE,CAAC;YACtC,WAAW,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
|
|
@@ -45,6 +45,15 @@ const toExists = (comparison) => {
|
|
|
45
45
|
}
|
|
46
46
|
return toComparison(comparison);
|
|
47
47
|
};
|
|
48
|
+
const canonicalizeComparison = (comparison) => {
|
|
49
|
+
if (comparison.operator === SelectQuery_js_1.WhereMethods.SOME ||
|
|
50
|
+
comparison.operator === SelectQuery_js_1.WhereMethods.EVERY ||
|
|
51
|
+
comparison.operator === 'some' ||
|
|
52
|
+
comparison.operator === 'every') {
|
|
53
|
+
return toExists(comparison);
|
|
54
|
+
}
|
|
55
|
+
return toComparison(comparison);
|
|
56
|
+
};
|
|
48
57
|
const flattenLogical = (operator, left, right) => {
|
|
49
58
|
const expressions = [];
|
|
50
59
|
if (left.kind === 'where_logical' && left.operator === operator) {
|
|
@@ -89,7 +98,7 @@ const canonicalizeWhere = (where) => {
|
|
|
89
98
|
return toComparison(where);
|
|
90
99
|
}
|
|
91
100
|
const grouped = where;
|
|
92
|
-
let current =
|
|
101
|
+
let current = canonicalizeComparison(grouped.first);
|
|
93
102
|
grouped.andOr.forEach((token) => {
|
|
94
103
|
if (token.and) {
|
|
95
104
|
current = flattenLogical('and', current, (0, exports.canonicalizeWhere)(token.and));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IRCanonicalize.js","sourceRoot":"","sources":["../../../src/queries/IRCanonicalize.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"IRCanonicalize.js","sourceRoot":"","sources":["../../../src/queries/IRCanonicalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ class LoweringContext {
|
|
|
9
9
|
this.counter = 0;
|
|
10
10
|
this.patterns = [];
|
|
11
11
|
this.traverseMap = new Map();
|
|
12
|
+
this.filterMap = new Map();
|
|
12
13
|
this.rootAlias = this.nextAlias();
|
|
13
14
|
}
|
|
14
15
|
nextAlias() {
|
|
@@ -32,8 +33,20 @@ class LoweringContext {
|
|
|
32
33
|
generateAlias() {
|
|
33
34
|
return this.nextAlias();
|
|
34
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Attaches an inline where filter to the traverse pattern targeting `toAlias`.
|
|
38
|
+
* The filter will be merged into the pattern when `getPatterns()` is called.
|
|
39
|
+
*/
|
|
40
|
+
attachFilter(toAlias, filter) {
|
|
41
|
+
this.filterMap.set(toAlias, filter);
|
|
42
|
+
}
|
|
35
43
|
getPatterns() {
|
|
36
|
-
return
|
|
44
|
+
return this.patterns.map((p) => {
|
|
45
|
+
if (p.kind === 'traverse' && this.filterMap.has(p.to)) {
|
|
46
|
+
return Object.assign(Object.assign({}, p), { filter: this.filterMap.get(p.to) });
|
|
47
|
+
}
|
|
48
|
+
return p;
|
|
49
|
+
});
|
|
37
50
|
}
|
|
38
51
|
}
|
|
39
52
|
const isShapeRef = (value) => !!value && typeof value === 'object' && 'id' in value && 'shape' in value;
|
|
@@ -49,13 +62,24 @@ const lowerWhereArg = (arg, ctx, options) => {
|
|
|
49
62
|
if (arg && typeof arg === 'object') {
|
|
50
63
|
if ('kind' in arg && arg.kind === 'arg_path') {
|
|
51
64
|
const argPath = arg;
|
|
65
|
+
if (argPath.subject && argPath.subject.id) {
|
|
66
|
+
// Context entity path — resolve property relative to the context IRI
|
|
67
|
+
const lastStep = argPath.path.steps[argPath.path.steps.length - 1];
|
|
68
|
+
if (lastStep && lastStep.kind === 'property_step') {
|
|
69
|
+
return {
|
|
70
|
+
kind: 'context_property_expr',
|
|
71
|
+
contextIri: argPath.subject.id,
|
|
72
|
+
property: lastStep.propertyShapeId,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
52
76
|
return lowerPath(argPath.path, options);
|
|
53
77
|
}
|
|
54
78
|
if (isShapeRef(arg)) {
|
|
55
|
-
return { kind: '
|
|
79
|
+
return { kind: 'reference_expr', value: arg.id };
|
|
56
80
|
}
|
|
57
81
|
if (isNodeRef(arg)) {
|
|
58
|
-
return { kind: '
|
|
82
|
+
return { kind: 'reference_expr', value: arg.id };
|
|
59
83
|
}
|
|
60
84
|
}
|
|
61
85
|
return { kind: 'literal_expr', value: null };
|
|
@@ -197,6 +221,16 @@ const lowerSelectQuery = (canonical) => {
|
|
|
197
221
|
projectionScope.registerAlias(ctx.rootAlias, 'root');
|
|
198
222
|
const projection = [];
|
|
199
223
|
const resultMapEntries = [];
|
|
224
|
+
// Inline filter handler: when a property step has `.where()`, canonicalize
|
|
225
|
+
// and lower the where predicate, then attach it to the traverse pattern.
|
|
226
|
+
const inlineFilterHandler = (traverseAlias, where) => {
|
|
227
|
+
const canonical = (0, IRCanonicalize_js_1.canonicalizeWhere)(where);
|
|
228
|
+
const filterExpr = lowerWhere(canonical, ctx, {
|
|
229
|
+
rootAlias: traverseAlias,
|
|
230
|
+
resolveTraversal: pathOptions.resolveTraversal,
|
|
231
|
+
});
|
|
232
|
+
ctx.attachFilter(traverseAlias, filterExpr);
|
|
233
|
+
};
|
|
200
234
|
for (const seed of projectionSeeds) {
|
|
201
235
|
const key = seed.kind === 'path'
|
|
202
236
|
? (seed.key || (0, IRProjection_js_1.projectionKeyFromPath)(seed.path))
|
|
@@ -205,7 +239,7 @@ const lowerSelectQuery = (canonical) => {
|
|
|
205
239
|
projection.push({
|
|
206
240
|
alias,
|
|
207
241
|
expression: seed.kind === 'path'
|
|
208
|
-
? (0, IRProjection_js_1.lowerSelectionPathExpression)(seed.path, pathOptions)
|
|
242
|
+
? (0, IRProjection_js_1.lowerSelectionPathExpression)(seed.path, pathOptions, inlineFilterHandler)
|
|
209
243
|
: seed.expression,
|
|
210
244
|
});
|
|
211
245
|
resultMapEntries.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IRLower.js","sourceRoot":"","sources":["../../../src/queries/IRLower.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"IRLower.js","sourceRoot":"","sources":["../../../src/queries/IRLower.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import { DesugaredSelectionPath } from './IRDesugar.js';
|
|
1
|
+
import { DesugaredSelectionPath, DesugaredWhere } from './IRDesugar.js';
|
|
2
2
|
import { IRAliasScope } from './IRAliasScope.js';
|
|
3
3
|
import { IRExpression, IRProjectionItem, IRResultMapEntry } from './IntermediateRepresentation.js';
|
|
4
|
+
/**
|
|
5
|
+
* Callback invoked when a property step with an inline `.where()` is encountered
|
|
6
|
+
* during path lowering. The callback receives the traversal alias (target entity)
|
|
7
|
+
* and the desugared where predicate so the caller can canonicalize and lower it.
|
|
8
|
+
*/
|
|
9
|
+
export type InlineFilterCallback = (traverseAlias: string, where: DesugaredWhere) => void;
|
|
4
10
|
export type ProjectionPathLoweringOptions = {
|
|
5
11
|
rootAlias: string;
|
|
6
12
|
resolveTraversal: (fromAlias: string, propertyShapeId: string) => string;
|
|
@@ -18,8 +24,13 @@ export declare const projectionKeyFromPath: (path: DesugaredSelectionPath) => st
|
|
|
18
24
|
/**
|
|
19
25
|
* Lowers a single desugared selection path into an IR expression,
|
|
20
26
|
* creating traversal aliases for intermediate property steps.
|
|
27
|
+
*
|
|
28
|
+
* When `onInlineFilter` is provided, property steps with `.where()` will
|
|
29
|
+
* force a traversal creation and invoke the callback with the traversal
|
|
30
|
+
* alias and the where predicate. For last steps with `.where()`, an
|
|
31
|
+
* `alias_expr` is returned instead of a `property_expr`.
|
|
21
32
|
*/
|
|
22
|
-
export declare const lowerSelectionPathExpression: (path: DesugaredSelectionPath, options: ProjectionPathLoweringOptions) => IRExpression;
|
|
33
|
+
export declare const lowerSelectionPathExpression: (path: DesugaredSelectionPath, options: ProjectionPathLoweringOptions, onInlineFilter?: InlineFilterCallback) => IRExpression;
|
|
23
34
|
/**
|
|
24
35
|
* Builds projection items and a result map from an array of selection paths.
|
|
25
36
|
* Each path gets a unique alias and is lowered into an IR expression.
|
|
@@ -19,8 +19,13 @@ exports.projectionKeyFromPath = projectionKeyFromPath;
|
|
|
19
19
|
/**
|
|
20
20
|
* Lowers a single desugared selection path into an IR expression,
|
|
21
21
|
* creating traversal aliases for intermediate property steps.
|
|
22
|
+
*
|
|
23
|
+
* When `onInlineFilter` is provided, property steps with `.where()` will
|
|
24
|
+
* force a traversal creation and invoke the callback with the traversal
|
|
25
|
+
* alias and the where predicate. For last steps with `.where()`, an
|
|
26
|
+
* `alias_expr` is returned instead of a `property_expr`.
|
|
22
27
|
*/
|
|
23
|
-
const lowerSelectionPathExpression = (path, options) => {
|
|
28
|
+
const lowerSelectionPathExpression = (path, options, onInlineFilter) => {
|
|
24
29
|
if (path.steps.length === 0) {
|
|
25
30
|
return { kind: 'alias_expr', alias: options.rootAlias };
|
|
26
31
|
}
|
|
@@ -29,6 +34,15 @@ const lowerSelectionPathExpression = (path, options) => {
|
|
|
29
34
|
const step = path.steps[i];
|
|
30
35
|
const isLast = i === path.steps.length - 1;
|
|
31
36
|
if (step.kind === 'property_step') {
|
|
37
|
+
if (step.where && onInlineFilter) {
|
|
38
|
+
// Force traversal creation for step with inline where
|
|
39
|
+
currentAlias = options.resolveTraversal(currentAlias, step.propertyShapeId);
|
|
40
|
+
onInlineFilter(currentAlias, step.where);
|
|
41
|
+
if (isLast) {
|
|
42
|
+
return { kind: 'alias_expr', alias: currentAlias };
|
|
43
|
+
}
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
32
46
|
if (isLast) {
|
|
33
47
|
return {
|
|
34
48
|
kind: 'property_expr',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IRProjection.js","sourceRoot":"","sources":["../../../src/queries/IRProjection.ts"],"names":[],"mappings":";;;AACA,uDAA+C;
|
|
1
|
+
{"version":3,"file":"IRProjection.js","sourceRoot":"","sources":["../../../src/queries/IRProjection.ts"],"names":[],"mappings":";;;AACA,uDAA+C;AA8B/C,wEAAwE;AACjE,MAAM,qBAAqB,GAAG,CAAC,IAA4B,EAAU,EAAE;IAC5E,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnD,IAAI,QAAQ,CAAC,IAAI,KAAK,eAAe;QAAE,OAAO,QAAQ,CAAC,eAAe,CAAC;IACvE,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC;IACrE,IAAI,QAAQ,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,QAAQ,CAAC,OAAO,CAAC;IAChE,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAPW,QAAA,qBAAqB,yBAOhC;AAEF;;;;;;;;GAQG;AACI,MAAM,4BAA4B,GAAG,CAC1C,IAA4B,EAC5B,OAAsC,EACtC,cAAqC,EACvB,EAAE;IAChB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAC,CAAC;IACxD,CAAC;IAED,IAAI,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,KAAK,IAAI,cAAc,EAAE,CAAC;gBACjC,sDAAsD;gBACtD,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC5E,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzC,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,EAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAC,CAAC;gBACnD,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO;oBACL,IAAI,EAAE,eAAe;oBACrB,WAAW,EAAE,YAAY;oBACzB,QAAQ,EAAE,IAAI,CAAC,eAAe;iBAC/B,CAAC;YACJ,CAAC;YAED,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAC5E,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,OAAO;gBACL,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;oBACrC,IAAI,EAAE,eAAe;oBACrB,WAAW,EAAE,YAAY;oBACzB,QAAQ,EAAE,YAAY,CAAC,eAAe;iBACvC,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAC,CAAC;AACnD,CAAC,CAAC;AApDW,QAAA,4BAA4B,gCAoDvC;AAEF;;;GAGG;AACI,MAAM,wBAAwB,GAAG,CACtC,UAAiC,EACjC,OAAsC,EACtC,KAAK,GAAG,IAAI,8BAAY,CAAC,YAAY,CAAC,EACX,EAAE;IAC7B,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,MAAM,SAAS,GAAG,GAAG,IAAI,IAAA,6BAAqB,EAAC,IAAI,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC/C,UAAU,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,IAAA,oCAA4B,EAAC,IAAI,EAAE,OAAO,CAAC;SACxD,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,SAAS,EAAE,OAAO;KACnB,CAAC;AACJ,CAAC,CAAC;AA3BW,QAAA,wBAAwB,4BA2BnC"}
|
|
@@ -39,6 +39,7 @@ export type IRTraversePattern = {
|
|
|
39
39
|
from: IRAlias;
|
|
40
40
|
to: IRAlias;
|
|
41
41
|
property: string;
|
|
42
|
+
filter?: IRExpression;
|
|
42
43
|
};
|
|
43
44
|
export type IRJoinPattern = {
|
|
44
45
|
kind: 'join';
|
|
@@ -56,11 +57,15 @@ export type IRExistsPattern = {
|
|
|
56
57
|
kind: 'exists';
|
|
57
58
|
pattern: IRGraphPattern;
|
|
58
59
|
};
|
|
59
|
-
export type IRExpression = IRLiteralExpression | IRAliasExpression | IRPropertyExpression | IRBinaryExpression | IRLogicalExpression | IRNotExpression | IRFunctionExpression | IRAggregateExpression | IRExistsExpression;
|
|
60
|
+
export type IRExpression = IRLiteralExpression | IRReferenceExpression | IRAliasExpression | IRPropertyExpression | IRContextPropertyExpression | IRBinaryExpression | IRLogicalExpression | IRNotExpression | IRFunctionExpression | IRAggregateExpression | IRExistsExpression;
|
|
60
61
|
export type IRLiteralExpression = {
|
|
61
62
|
kind: 'literal_expr';
|
|
62
63
|
value: IRValue;
|
|
63
64
|
};
|
|
65
|
+
export type IRReferenceExpression = {
|
|
66
|
+
kind: 'reference_expr';
|
|
67
|
+
value: string;
|
|
68
|
+
};
|
|
64
69
|
export type IRAliasExpression = {
|
|
65
70
|
kind: 'alias_expr';
|
|
66
71
|
alias: IRAlias;
|
|
@@ -70,6 +75,11 @@ export type IRPropertyExpression = {
|
|
|
70
75
|
sourceAlias: IRAlias;
|
|
71
76
|
property: string;
|
|
72
77
|
};
|
|
78
|
+
export type IRContextPropertyExpression = {
|
|
79
|
+
kind: 'context_property_expr';
|
|
80
|
+
contextIri: string;
|
|
81
|
+
property: string;
|
|
82
|
+
};
|
|
73
83
|
export type IRBinaryOperator = '=' | '!=' | '>' | '>=' | '<' | '<=';
|
|
74
84
|
export type IRBinaryExpression = {
|
|
75
85
|
kind: 'binary_expr';
|
|
@@ -21,7 +21,6 @@ class MutationQueryFactory extends QueryFactory_js_1.QueryFactory {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
isSetModification(obj, shape) {
|
|
24
|
-
// return obj.add || obj.remove;
|
|
25
24
|
let hasAdd = obj.add;
|
|
26
25
|
let hasRemove = obj.remove;
|
|
27
26
|
let numKeysExpected = (hasAdd ? 1 : 0) + (hasRemove ? 1 : 0);
|
|
@@ -77,6 +76,12 @@ class MutationQueryFactory extends QueryFactory_js_1.QueryFactory {
|
|
|
77
76
|
//but we should not include it in the fields
|
|
78
77
|
delete obj.__id;
|
|
79
78
|
}
|
|
79
|
+
else if (obj && 'id' in obj) {
|
|
80
|
+
//if the object has an id key alongside other data properties,
|
|
81
|
+
//treat it as a nested create with a predefined ID
|
|
82
|
+
id = obj.id.toString();
|
|
83
|
+
delete obj.id;
|
|
84
|
+
}
|
|
80
85
|
for (var key in obj) {
|
|
81
86
|
let propShape = props.find((p) => p.label === key);
|
|
82
87
|
if (!propShape) {
|
|
@@ -169,33 +174,14 @@ class MutationQueryFactory extends QueryFactory_js_1.QueryFactory {
|
|
|
169
174
|
else {
|
|
170
175
|
return this.convertNodeDescription(value, valueShape);
|
|
171
176
|
}
|
|
172
|
-
// //check if the property shape allows a single value
|
|
173
|
-
// if(propShape.maxCount === 1) {
|
|
174
|
-
// //if yes, then the object should be seen as a node description
|
|
175
|
-
// return this.convertNodeDescription(value,propShape.valueShape);
|
|
176
|
-
// } else {
|
|
177
|
-
// if(this.isSetModification(value,propShape)) {
|
|
178
|
-
// //but if multiple values are allowed, the value should either be an Array of node descriptions
|
|
179
|
-
// //OR an object with add or remove keys
|
|
180
|
-
// return this.convertSetModification(value,propShape);
|
|
181
|
-
// } else {
|
|
182
|
-
// //it must be a set overwrite, and it must be coming from an array
|
|
183
|
-
// if(!allowArrays) {
|
|
184
|
-
// return this.convertNodeDescription(value,propShape.valueShape);
|
|
185
|
-
// } else {
|
|
186
|
-
// throw new Error("Invalid array value. Should be a node reference or node description")
|
|
187
|
-
// }
|
|
188
|
-
// }
|
|
189
|
-
// }
|
|
190
177
|
}
|
|
191
178
|
}
|
|
192
179
|
throw new Error(`Unsupported update value type: ${typeof value}`);
|
|
193
180
|
}
|
|
194
181
|
isNodeReference(obj) {
|
|
195
|
-
//check if obj is an object with an id property
|
|
196
|
-
//if
|
|
197
|
-
return typeof obj === 'object' && obj !== null && 'id' in obj
|
|
198
|
-
//and id is the only property
|
|
182
|
+
//check if obj is an object with only an id property
|
|
183
|
+
//if additional data properties are present, it's a nested create with predefined ID
|
|
184
|
+
return typeof obj === 'object' && obj !== null && 'id' in obj && Object.keys(obj).length === 1;
|
|
199
185
|
}
|
|
200
186
|
convertNodeReferences(input) {
|
|
201
187
|
if (Array.isArray(input)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MutationQuery.js","sourceRoot":"","sources":["../../../src/queries/MutationQuery.ts"],"names":[],"mappings":";;;AAAA,uDAW2B;AAC3B,iDAA4D;AAE5D,0DAAqD;AAIrD,MAAa,oBAAqB,SAAQ,8BAAY;IAC1C,mBAAmB,CAC3B,GAAG,EACH,KAAgB,EAChB,kBAA2B,KAAK;QAEhC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACtE,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,wDAAwD,CACzD,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM;YACN,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAES,iBAAiB,CAAC,GAAG,EAAE,KAAK;QACpC,
|
|
1
|
+
{"version":3,"file":"MutationQuery.js","sourceRoot":"","sources":["../../../src/queries/MutationQuery.ts"],"names":[],"mappings":";;;AAAA,uDAW2B;AAC3B,iDAA4D;AAE5D,0DAAqD;AAIrD,MAAa,oBAAqB,SAAQ,8BAAY;IAC1C,mBAAmB,CAC3B,GAAG,EACH,KAAgB,EAChB,kBAA2B,KAAK;QAEhC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACtE,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,wDAAwD,CACzD,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM;YACN,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAES,iBAAiB,CAAC,GAAG,EAAE,KAAK;QACpC,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC;QACrB,IAAI,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;QAC3B,IAAI,eAAe,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACrD,OAAO,MAAM,IAAI,CAAC,SAAS,IAAI,eAAe,KAAK,OAAO,CAAC,CAAC;IAC9D,CAAC;IAES,sBAAsB,CAC9B,GAAyB,EACzB,KAAoB;QAEpB,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,GAAG,GAAyB,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAES,qBAAqB,CAC7B,GAAoC,EACpC,KAAoB;QAEpB,iFAAiF;QACjF,+DAA+D;QAC/D,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAES,kBAAkB,CAC1B,GAAoC,EACpC,KAAoB;QAEpB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAkB,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAkB,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAES,wBAAwB,CAChC,KAAK,EACL,KAAoB;QAEpB,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,qBAAqB,KAAK,CAAC,KAAK,6DAA6D,CAC9F,CAAC;QACJ,CAAC;IACH,CAAC;IAES,sBAAsB,CAC9B,GAAW,EACX,KAAgB;QAEhB,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,MAAM,GAA8B,EAAE,CAAC;QAC7C,IAAI,EAAE,CAAC;QACP,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;YACzB,qEAAqE;YACrE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzB,4CAA4C;YAC5C,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;aAAM,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;YAC9B,8DAA8D;YAC9D,kDAAkD;YAClD,EAAE,GAAI,GAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAQ,GAAW,CAAC,EAAE,CAAC;QACzB,CAAC;QACD,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;YACpB,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;YACnD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,KAAK,CACT,yBAAyB,GAAG,eAAe,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,6JAA6J,CACjP,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QACD,MAAM,GAAG,GAAyB;YAChC,MAAM;YACN,KAAK;SACN,CAAC;QACF,IAAI,EAAE,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAES,uBAAuB,CAC/B,KAAK,EACL,SAAwB;QAExB,oCAAoC;QACpC,OAAO;YACL,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC;SACpB,CAAC;IAC/B,CAAC;IAES,kBAAkB,CAC1B,KAAK,EACL,SAAyB,EACzB,cAAuB,IAAI;QAE3B,yBAAyB;QACzB,IACE,OAAO,KAAK,KAAK,QAAQ;YACzB,OAAO,KAAK,KAAK,QAAQ;YACzB,OAAO,KAAK,KAAK,SAAS;YAC1B,KAAK,YAAY,IAAI,EACrB,CAAC;YACD,OAAO,KAA2B,CAAC;QACrC,CAAC;QAED,mDAAmD;QACnD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;YACD,oEAAoE;YACpE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACrB,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YACtD,CAAC,CAAgC,CAAC;QACpC,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC;QACf,CAAC;aAAM,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1B,+FAA+F;YAC/F,OAAO,SAAS,CAAC;QACnB,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,IAAI,UAAU,GAAc,IAAI,CAAC;gBACjC,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;oBACzB,MAAM,UAAU,GAAG,IAAA,6BAAa,EAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oBACvD,UAAU,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,KAAI,IAAI,CAAC;oBACvC,IAAI,CAAC,UAAU,EAAE,CAAC;wBAChB,MAAM,IAAI,KAAK,CACb,6BAA6B,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,CACvD,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,sEAAsE;gBACtE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;oBAC1B,uIAAuI;oBACvI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;wBAChB,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,YAAY,oBAAS,CAAC,EAAE,CAAC;4BAC9C,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;wBACJ,CAAC;wBACD,UAAU,GAAI,KAAK,CAAC,KAAsB,CAAC,KAAK,CAAC;oBACnD,CAAC;yBAAM,CAAC;wBACN,6GAA6G;wBAC7G,+GAA+G;wBAC/G,MAAM,IAAI,KAAK,CACb,0GAA0G,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,4DAA4D,CACzN,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,4CAA4C;gBAC5C,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChB,8GAA8G;oBAC9G,IAAK,KAAK,CAAC,KAAsB,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,EAAE,CAAC;wBAC7D,MAAM,IAAI,KAAK,CACb,0FAA0F,SAAS,CAAC,KAAK,uDAAuD,SAAS,CAAC,KAAK,+FAA+F,CAC/Q,CAAC;oBACJ,CAAC;oBACD,OAAO,KAAK,CAAC,KAAK,CAAC;gBACrB,CAAC;gBAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;oBAC7C,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,kCAAkC,OAAO,KAAK,EAAE,CAAC,CAAC;IACpE,CAAC;IAES,eAAe,CAAC,GAAG;QAC3B,oDAAoD;QACpD,oFAAoF;QACpF,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IACjG,CAAC;IAES,qBAAqB,CAC7B,KAAwB;QAExB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACrB,OAAO,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAES,4BAA4B,CACpC,CAAwB;QAExB,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,EAAC,EAAE,EAAE,CAAC,EAAC,CAAC;QACjB,CAAC;aAAM,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAES,oBAAoB,CAAC,GAAiB;QAC9C,oDAAoD;QACpD,mCAAmC;QACnC,IAAI;QACJ,qFAAqF;QACrF,IAAI;QACJ,OAAO,EAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAC,CAAC;IACtB,CAAC;CACF;AA7PD,oDA6PC"}
|