@_linked/core 1.2.0-next.20260303081922 → 1.2.0-next.20260312041833
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 +32 -49
- package/README.md +401 -54
- package/lib/cjs/expressions/Expr.d.ts +58 -0
- package/lib/cjs/expressions/Expr.js +217 -0
- package/lib/cjs/expressions/Expr.js.map +1 -0
- package/lib/cjs/expressions/ExpressionMethods.d.ts +81 -0
- package/lib/cjs/expressions/ExpressionMethods.js +3 -0
- package/lib/cjs/expressions/ExpressionMethods.js.map +1 -0
- package/lib/cjs/expressions/ExpressionNode.d.ts +95 -0
- package/lib/cjs/expressions/ExpressionNode.js +349 -0
- package/lib/cjs/expressions/ExpressionNode.js.map +1 -0
- package/lib/cjs/index.d.ts +14 -2
- package/lib/cjs/index.js +38 -8
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/interfaces/IQuadStore.d.ts +1 -1
- package/lib/cjs/package.d.ts +1 -1
- package/lib/cjs/queries/CreateBuilder.d.ts +38 -0
- package/lib/cjs/queries/CreateBuilder.js +100 -0
- package/lib/cjs/queries/CreateBuilder.js.map +1 -0
- package/lib/cjs/queries/CreateQuery.d.ts +3 -3
- package/lib/cjs/queries/CreateQuery.js.map +1 -1
- package/lib/cjs/queries/DeleteBuilder.d.ts +36 -0
- package/lib/cjs/queries/DeleteBuilder.js +112 -0
- package/lib/cjs/queries/DeleteBuilder.js.map +1 -0
- package/lib/cjs/queries/DeleteQuery.d.ts +5 -5
- package/lib/cjs/queries/DeleteQuery.js.map +1 -1
- package/lib/cjs/queries/FieldSet.d.ts +206 -0
- package/lib/cjs/queries/FieldSet.js +549 -0
- package/lib/cjs/queries/FieldSet.js.map +1 -0
- package/lib/cjs/queries/IRCanonicalize.d.ts +10 -3
- package/lib/cjs/queries/IRCanonicalize.js +10 -1
- package/lib/cjs/queries/IRCanonicalize.js.map +1 -1
- package/lib/cjs/queries/IRDesugar.d.ts +43 -10
- package/lib/cjs/queries/IRDesugar.js +165 -134
- package/lib/cjs/queries/IRDesugar.js.map +1 -1
- package/lib/cjs/queries/IRLower.d.ts +19 -2
- package/lib/cjs/queries/IRLower.js +105 -20
- package/lib/cjs/queries/IRLower.js.map +1 -1
- package/lib/cjs/queries/IRMutation.d.ts +31 -1
- package/lib/cjs/queries/IRMutation.js +68 -15
- package/lib/cjs/queries/IRMutation.js.map +1 -1
- package/lib/cjs/queries/IntermediateRepresentation.d.ts +34 -4
- package/lib/cjs/queries/MutationQuery.d.ts +1 -1
- package/lib/cjs/queries/MutationQuery.js +17 -8
- package/lib/cjs/queries/MutationQuery.js.map +1 -1
- package/lib/cjs/queries/PropertyPath.d.ts +38 -0
- package/lib/cjs/queries/PropertyPath.js +82 -0
- package/lib/cjs/queries/PropertyPath.js.map +1 -0
- package/lib/cjs/queries/ProxiedPathBuilder.d.ts +14 -0
- package/lib/cjs/queries/ProxiedPathBuilder.js +29 -0
- package/lib/cjs/queries/ProxiedPathBuilder.js.map +1 -0
- package/lib/cjs/queries/QueryBuilder.d.ts +154 -0
- package/lib/cjs/queries/QueryBuilder.js +391 -0
- package/lib/cjs/queries/QueryBuilder.js.map +1 -0
- package/lib/cjs/queries/QueryFactory.d.ts +2 -1
- package/lib/cjs/queries/QueryFactory.js.map +1 -1
- package/lib/cjs/queries/SelectQuery.d.ts +66 -136
- package/lib/cjs/queries/SelectQuery.js +111 -526
- package/lib/cjs/queries/SelectQuery.js.map +1 -1
- package/lib/cjs/queries/UpdateBuilder.d.ts +46 -0
- package/lib/cjs/queries/UpdateBuilder.js +133 -0
- package/lib/cjs/queries/UpdateBuilder.js.map +1 -0
- package/lib/cjs/queries/UpdateQuery.d.ts +5 -5
- package/lib/cjs/queries/UpdateQuery.js.map +1 -1
- package/lib/cjs/queries/WhereCondition.d.ts +18 -0
- package/lib/cjs/queries/WhereCondition.js +3 -0
- package/lib/cjs/queries/WhereCondition.js.map +1 -0
- package/lib/cjs/queries/queryDispatch.d.ts +20 -0
- package/lib/cjs/queries/queryDispatch.js +15 -0
- package/lib/cjs/queries/queryDispatch.js.map +1 -0
- package/lib/cjs/queries/resolveShape.d.ts +10 -0
- package/lib/cjs/queries/resolveShape.js +23 -0
- package/lib/cjs/queries/resolveShape.js.map +1 -0
- package/lib/cjs/shapes/SHACL.js +7 -5
- package/lib/cjs/shapes/SHACL.js.map +1 -1
- package/lib/cjs/shapes/Shape.d.ts +39 -52
- package/lib/cjs/shapes/Shape.js +32 -50
- package/lib/cjs/shapes/Shape.js.map +1 -1
- package/lib/cjs/sparql/SparqlAlgebra.d.ts +6 -1
- package/lib/cjs/sparql/SparqlStore.js +15 -0
- package/lib/cjs/sparql/SparqlStore.js.map +1 -1
- package/lib/cjs/sparql/algebraToString.js +10 -0
- package/lib/cjs/sparql/algebraToString.js.map +1 -1
- package/lib/cjs/sparql/irToAlgebra.d.ts +34 -3
- package/lib/cjs/sparql/irToAlgebra.js +386 -33
- package/lib/cjs/sparql/irToAlgebra.js.map +1 -1
- package/lib/cjs/test-helpers/query-capture-store.d.ts +8 -2
- package/lib/cjs/test-helpers/query-capture-store.js +80 -34
- package/lib/cjs/test-helpers/query-capture-store.js.map +1 -1
- package/lib/cjs/test-helpers/query-fixtures.d.ts +453 -3046
- package/lib/cjs/test-helpers/query-fixtures.js +143 -25
- package/lib/cjs/test-helpers/query-fixtures.js.map +1 -1
- package/lib/cjs/test-helpers/test-utils.d.ts +18 -0
- package/lib/cjs/test-helpers/test-utils.js +47 -0
- package/lib/cjs/test-helpers/test-utils.js.map +1 -0
- package/lib/cjs/utils/LinkedStorage.d.ts +3 -4
- package/lib/cjs/utils/LinkedStorage.js +12 -6
- package/lib/cjs/utils/LinkedStorage.js.map +1 -1
- package/lib/cjs/utils/Package.d.ts +8 -8
- package/lib/cjs/utils/Package.js.map +1 -1
- package/lib/cjs/utils/ShapeClass.d.ts +2 -2
- package/lib/cjs/utils/ShapeClass.js +4 -22
- package/lib/cjs/utils/ShapeClass.js.map +1 -1
- package/lib/esm/expressions/Expr.d.ts +58 -0
- package/lib/esm/expressions/Expr.js +214 -0
- package/lib/esm/expressions/Expr.js.map +1 -0
- package/lib/esm/expressions/ExpressionMethods.d.ts +81 -0
- package/lib/esm/expressions/ExpressionMethods.js +2 -0
- package/lib/esm/expressions/ExpressionMethods.js.map +1 -0
- package/lib/esm/expressions/ExpressionNode.d.ts +95 -0
- package/lib/esm/expressions/ExpressionNode.js +341 -0
- package/lib/esm/expressions/ExpressionNode.js.map +1 -0
- package/lib/esm/index.d.ts +14 -2
- package/lib/esm/index.js +28 -4
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/interfaces/IQuadStore.d.ts +1 -1
- package/lib/esm/package.d.ts +1 -1
- package/lib/esm/queries/CreateBuilder.d.ts +38 -0
- package/lib/esm/queries/CreateBuilder.js +96 -0
- package/lib/esm/queries/CreateBuilder.js.map +1 -0
- package/lib/esm/queries/CreateQuery.d.ts +3 -3
- package/lib/esm/queries/CreateQuery.js.map +1 -1
- package/lib/esm/queries/DeleteBuilder.d.ts +36 -0
- package/lib/esm/queries/DeleteBuilder.js +108 -0
- package/lib/esm/queries/DeleteBuilder.js.map +1 -0
- package/lib/esm/queries/DeleteQuery.d.ts +5 -5
- package/lib/esm/queries/DeleteQuery.js.map +1 -1
- package/lib/esm/queries/FieldSet.d.ts +206 -0
- package/lib/esm/queries/FieldSet.js +545 -0
- package/lib/esm/queries/FieldSet.js.map +1 -0
- package/lib/esm/queries/IRCanonicalize.d.ts +10 -3
- package/lib/esm/queries/IRCanonicalize.js +10 -1
- package/lib/esm/queries/IRCanonicalize.js.map +1 -1
- package/lib/esm/queries/IRDesugar.d.ts +43 -10
- package/lib/esm/queries/IRDesugar.js +160 -130
- package/lib/esm/queries/IRDesugar.js.map +1 -1
- package/lib/esm/queries/IRLower.d.ts +19 -2
- package/lib/esm/queries/IRLower.js +102 -19
- package/lib/esm/queries/IRLower.js.map +1 -1
- package/lib/esm/queries/IRMutation.d.ts +31 -1
- package/lib/esm/queries/IRMutation.js +63 -14
- package/lib/esm/queries/IRMutation.js.map +1 -1
- package/lib/esm/queries/IntermediateRepresentation.d.ts +34 -4
- package/lib/esm/queries/MutationQuery.d.ts +1 -1
- package/lib/esm/queries/MutationQuery.js +17 -8
- package/lib/esm/queries/MutationQuery.js.map +1 -1
- package/lib/esm/queries/PropertyPath.d.ts +38 -0
- package/lib/esm/queries/PropertyPath.js +77 -0
- package/lib/esm/queries/PropertyPath.js.map +1 -0
- package/lib/esm/queries/ProxiedPathBuilder.d.ts +14 -0
- package/lib/esm/queries/ProxiedPathBuilder.js +26 -0
- package/lib/esm/queries/ProxiedPathBuilder.js.map +1 -0
- package/lib/esm/queries/QueryBuilder.d.ts +154 -0
- package/lib/esm/queries/QueryBuilder.js +387 -0
- package/lib/esm/queries/QueryBuilder.js.map +1 -0
- package/lib/esm/queries/QueryFactory.d.ts +2 -1
- package/lib/esm/queries/QueryFactory.js.map +1 -1
- package/lib/esm/queries/SelectQuery.d.ts +66 -136
- package/lib/esm/queries/SelectQuery.js +105 -515
- package/lib/esm/queries/SelectQuery.js.map +1 -1
- package/lib/esm/queries/UpdateBuilder.d.ts +46 -0
- package/lib/esm/queries/UpdateBuilder.js +129 -0
- package/lib/esm/queries/UpdateBuilder.js.map +1 -0
- package/lib/esm/queries/UpdateQuery.d.ts +5 -5
- package/lib/esm/queries/UpdateQuery.js.map +1 -1
- package/lib/esm/queries/WhereCondition.d.ts +18 -0
- package/lib/esm/queries/WhereCondition.js +2 -0
- package/lib/esm/queries/WhereCondition.js.map +1 -0
- package/lib/esm/queries/queryDispatch.d.ts +20 -0
- package/lib/esm/queries/queryDispatch.js +11 -0
- package/lib/esm/queries/queryDispatch.js.map +1 -0
- package/lib/esm/queries/resolveShape.d.ts +10 -0
- package/lib/esm/queries/resolveShape.js +20 -0
- package/lib/esm/queries/resolveShape.js.map +1 -0
- package/lib/esm/shapes/SHACL.js +7 -5
- package/lib/esm/shapes/SHACL.js.map +1 -1
- package/lib/esm/shapes/Shape.d.ts +39 -52
- package/lib/esm/shapes/Shape.js +32 -47
- package/lib/esm/shapes/Shape.js.map +1 -1
- package/lib/esm/sparql/SparqlAlgebra.d.ts +6 -1
- package/lib/esm/sparql/SparqlStore.js +16 -1
- package/lib/esm/sparql/SparqlStore.js.map +1 -1
- package/lib/esm/sparql/algebraToString.js +10 -0
- package/lib/esm/sparql/algebraToString.js.map +1 -1
- package/lib/esm/sparql/irToAlgebra.d.ts +34 -3
- package/lib/esm/sparql/irToAlgebra.js +380 -33
- package/lib/esm/sparql/irToAlgebra.js.map +1 -1
- package/lib/esm/test-helpers/query-capture-store.d.ts +8 -2
- package/lib/esm/test-helpers/query-capture-store.js +45 -33
- package/lib/esm/test-helpers/query-capture-store.js.map +1 -1
- package/lib/esm/test-helpers/query-fixtures.d.ts +453 -3046
- package/lib/esm/test-helpers/query-fixtures.js +143 -25
- package/lib/esm/test-helpers/query-fixtures.js.map +1 -1
- package/lib/esm/test-helpers/test-utils.d.ts +18 -0
- package/lib/esm/test-helpers/test-utils.js +41 -0
- package/lib/esm/test-helpers/test-utils.js.map +1 -0
- package/lib/esm/utils/LinkedStorage.d.ts +3 -4
- package/lib/esm/utils/LinkedStorage.js +12 -6
- package/lib/esm/utils/LinkedStorage.js.map +1 -1
- package/lib/esm/utils/Package.d.ts +8 -8
- package/lib/esm/utils/Package.js.map +1 -1
- package/lib/esm/utils/ShapeClass.d.ts +2 -2
- package/lib/esm/utils/ShapeClass.js +4 -22
- package/lib/esm/utils/ShapeClass.js.map +1 -1
- package/package.json +3 -3
- package/lib/cjs/queries/QueryParser.d.ts +0 -17
- package/lib/cjs/queries/QueryParser.js +0 -55
- package/lib/cjs/queries/QueryParser.js.map +0 -1
- package/lib/esm/queries/QueryParser.d.ts +0 -17
- package/lib/esm/queries/QueryParser.js +0 -51
- package/lib/esm/queries/QueryParser.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,69 +4,52 @@
|
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
7
|
-
- [#
|
|
7
|
+
- [#31](https://github.com/Semantu/linked/pull/31) [`eb88865`](https://github.com/Semantu/linked/commit/eb8886564f2c9663805c4308a834ca615f9a1dab) Thanks [@flyon](https://github.com/flyon)! - Properties in `select()` and `update()` now support expressions — you can compute values dynamically instead of just reading or writing raw fields.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
### What's new
|
|
10
10
|
|
|
11
|
-
**
|
|
11
|
+
- **Computed fields in queries** — chain expression methods on properties to derive new values: string manipulation (`.strlen()`, `.ucase()`, `.concat()`), arithmetic (`.plus()`, `.times()`, `.abs()`), date extraction (`.year()`, `.month()`, `.hours()`), and comparisons (`.gt()`, `.eq()`, `.contains()`).
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
protected async executeSparqlSelect(
|
|
20
|
-
sparql: string
|
|
21
|
-
): Promise<SparqlJsonResults> {
|
|
22
|
-
/* ... */
|
|
23
|
-
}
|
|
24
|
-
protected async executeSparqlUpdate(sparql: string): Promise<void> {
|
|
25
|
-
/* ... */
|
|
26
|
-
}
|
|
27
|
-
}
|
|
13
|
+
```typescript
|
|
14
|
+
await Person.select((p) => ({
|
|
15
|
+
name: p.name,
|
|
16
|
+
nameLen: p.name.strlen(),
|
|
17
|
+
ageInMonths: p.age.times(12),
|
|
18
|
+
}));
|
|
28
19
|
```
|
|
29
20
|
|
|
30
|
-
- **
|
|
31
|
-
|
|
32
|
-
- `selectToSparql(query, options?)` — SelectQuery → SPARQL string
|
|
33
|
-
- `createToSparql(query, options?)` — CreateQuery → SPARQL string
|
|
34
|
-
- `updateToSparql(query, options?)` — UpdateQuery → SPARQL string
|
|
35
|
-
- `deleteToSparql(query, options?)` — DeleteQuery → SPARQL string
|
|
36
|
-
|
|
37
|
-
- **IR → SPARQL algebra** (for stores that want to inspect/optimize the algebra before serialization):
|
|
38
|
-
|
|
39
|
-
- `selectToAlgebra(query, options?)` — returns `SparqlSelectPlan`
|
|
40
|
-
- `createToAlgebra(query, options?)` — returns `SparqlInsertDataPlan`
|
|
41
|
-
- `updateToAlgebra(query, options?)` — returns `SparqlDeleteInsertPlan`
|
|
42
|
-
- `deleteToAlgebra(query, options?)` — returns `SparqlDeleteInsertPlan`
|
|
43
|
-
|
|
44
|
-
- **Algebra → SPARQL string** serialization:
|
|
45
|
-
|
|
46
|
-
- `selectPlanToSparql(plan, options?)`, `insertDataPlanToSparql(plan, options?)`, `deleteInsertPlanToSparql(plan, options?)`, `deleteWherePlanToSparql(plan, options?)`
|
|
47
|
-
- `serializeAlgebraNode(node)`, `serializeExpression(expr)`, `serializeTerm(term)`
|
|
21
|
+
- **Expression-based WHERE filters** — filter using computed conditions, not just equality checks. Works on queries, updates, and deletes.
|
|
48
22
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
- `mapSparqlUpdateResult(query)` — echoes updated fields
|
|
23
|
+
```typescript
|
|
24
|
+
await Person.select((p) => p.name).where((p) => p.name.strlen().gt(5));
|
|
25
|
+
await Person.update({ verified: true }).where((p) => p.age.gte(18));
|
|
26
|
+
```
|
|
54
27
|
|
|
55
|
-
- **
|
|
28
|
+
- **Computed updates** — when updating data, calculate new values based on existing ones instead of providing static values. Pass a callback to `update()` to reference current field values.
|
|
56
29
|
|
|
57
|
-
|
|
30
|
+
```typescript
|
|
31
|
+
await Person.update((p) => ({ age: p.age.plus(1) })).for(entity);
|
|
32
|
+
await Person.update((p) => ({
|
|
33
|
+
label: p.firstName.concat(" ").concat(p.lastName),
|
|
34
|
+
})).for(entity);
|
|
35
|
+
```
|
|
58
36
|
|
|
59
|
-
-
|
|
37
|
+
- **`Expr` module** — for expressions that don't start from a property, like the current timestamp, conditional logic, or coalescing nulls.
|
|
60
38
|
|
|
61
|
-
|
|
39
|
+
```typescript
|
|
40
|
+
await Person.update({ lastSeen: Expr.now() }).for(entity);
|
|
41
|
+
await Person.select((p) => ({
|
|
42
|
+
displayName: Expr.firstDefined(p.nickname, p.name),
|
|
43
|
+
}));
|
|
44
|
+
```
|
|
62
45
|
|
|
63
|
-
|
|
46
|
+
Update expression callbacks are fully typed — `.plus()` only appears on number properties, `.strlen()` only on strings, etc.
|
|
64
47
|
|
|
65
|
-
|
|
48
|
+
### New exports
|
|
66
49
|
|
|
67
|
-
|
|
50
|
+
`ExpressionNode`, `Expr`, `ExpressionInput`, `PropertyRefMap`, `ExpressionUpdateProxy<S>`, `ExpressionUpdateResult<S>`, and per-type method interfaces (`NumericExpressionMethods`, `StringExpressionMethods`, `DateExpressionMethods`, `BooleanExpressionMethods`, `BaseExpressionMethods`).
|
|
68
51
|
|
|
69
|
-
|
|
52
|
+
See the [README](./README.md#computed-expressions) for the full method reference and more examples.
|
|
70
53
|
|
|
71
54
|
## 1.1.0
|
|
72
55
|
|