@_linked/core 2.2.0-next.20260313111743 → 2.2.0-next.20260320002642

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.
Files changed (80) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/lib/cjs/ontologies/shacl.d.ts +5 -0
  3. package/lib/cjs/ontologies/shacl.js +10 -0
  4. package/lib/cjs/ontologies/shacl.js.map +1 -1
  5. package/lib/cjs/paths/PropertyPathExpr.d.ts +38 -0
  6. package/lib/cjs/paths/PropertyPathExpr.js +221 -0
  7. package/lib/cjs/paths/PropertyPathExpr.js.map +1 -0
  8. package/lib/cjs/paths/normalizePropertyPath.d.ts +23 -0
  9. package/lib/cjs/paths/normalizePropertyPath.js +75 -0
  10. package/lib/cjs/paths/normalizePropertyPath.js.map +1 -0
  11. package/lib/cjs/paths/pathExprToSparql.d.ts +14 -0
  12. package/lib/cjs/paths/pathExprToSparql.js +136 -0
  13. package/lib/cjs/paths/pathExprToSparql.js.map +1 -0
  14. package/lib/cjs/paths/serializePathToSHACL.d.ts +22 -0
  15. package/lib/cjs/paths/serializePathToSHACL.js +126 -0
  16. package/lib/cjs/paths/serializePathToSHACL.js.map +1 -0
  17. package/lib/cjs/queries/IRDesugar.d.ts +2 -0
  18. package/lib/cjs/queries/IRDesugar.js +24 -8
  19. package/lib/cjs/queries/IRDesugar.js.map +1 -1
  20. package/lib/cjs/queries/IRLower.js +9 -5
  21. package/lib/cjs/queries/IRLower.js.map +1 -1
  22. package/lib/cjs/queries/IRProjection.d.ts +2 -1
  23. package/lib/cjs/queries/IRProjection.js +7 -3
  24. package/lib/cjs/queries/IRProjection.js.map +1 -1
  25. package/lib/cjs/queries/IntermediateRepresentation.d.ts +3 -0
  26. package/lib/cjs/queries/QueryBuilder.js +3 -2
  27. package/lib/cjs/queries/QueryBuilder.js.map +1 -1
  28. package/lib/cjs/shapes/SHACL.d.ts +62 -24
  29. package/lib/cjs/shapes/SHACL.js +30 -26
  30. package/lib/cjs/shapes/SHACL.js.map +1 -1
  31. package/lib/cjs/sparql/SparqlAlgebra.d.ts +4 -0
  32. package/lib/cjs/sparql/algebraToString.js +6 -0
  33. package/lib/cjs/sparql/algebraToString.js.map +1 -1
  34. package/lib/cjs/sparql/irToAlgebra.js +13 -3
  35. package/lib/cjs/sparql/irToAlgebra.js.map +1 -1
  36. package/lib/cjs/utils/NodeReference.d.ts +24 -0
  37. package/lib/cjs/utils/NodeReference.js +41 -1
  38. package/lib/cjs/utils/NodeReference.js.map +1 -1
  39. package/lib/cjs/utils/ShapeClass.js +3 -1
  40. package/lib/cjs/utils/ShapeClass.js.map +1 -1
  41. package/lib/esm/ontologies/shacl.d.ts +5 -0
  42. package/lib/esm/ontologies/shacl.js +10 -0
  43. package/lib/esm/ontologies/shacl.js.map +1 -1
  44. package/lib/esm/paths/PropertyPathExpr.d.ts +38 -0
  45. package/lib/esm/paths/PropertyPathExpr.js +215 -0
  46. package/lib/esm/paths/PropertyPathExpr.js.map +1 -0
  47. package/lib/esm/paths/normalizePropertyPath.d.ts +23 -0
  48. package/lib/esm/paths/normalizePropertyPath.js +71 -0
  49. package/lib/esm/paths/normalizePropertyPath.js.map +1 -0
  50. package/lib/esm/paths/pathExprToSparql.d.ts +14 -0
  51. package/lib/esm/paths/pathExprToSparql.js +132 -0
  52. package/lib/esm/paths/pathExprToSparql.js.map +1 -0
  53. package/lib/esm/paths/serializePathToSHACL.d.ts +22 -0
  54. package/lib/esm/paths/serializePathToSHACL.js +122 -0
  55. package/lib/esm/paths/serializePathToSHACL.js.map +1 -0
  56. package/lib/esm/queries/IRDesugar.d.ts +2 -0
  57. package/lib/esm/queries/IRDesugar.js +24 -8
  58. package/lib/esm/queries/IRDesugar.js.map +1 -1
  59. package/lib/esm/queries/IRLower.js +9 -5
  60. package/lib/esm/queries/IRLower.js.map +1 -1
  61. package/lib/esm/queries/IRProjection.d.ts +2 -1
  62. package/lib/esm/queries/IRProjection.js +7 -3
  63. package/lib/esm/queries/IRProjection.js.map +1 -1
  64. package/lib/esm/queries/IntermediateRepresentation.d.ts +3 -0
  65. package/lib/esm/queries/QueryBuilder.js +3 -2
  66. package/lib/esm/queries/QueryBuilder.js.map +1 -1
  67. package/lib/esm/shapes/SHACL.d.ts +62 -24
  68. package/lib/esm/shapes/SHACL.js +30 -26
  69. package/lib/esm/shapes/SHACL.js.map +1 -1
  70. package/lib/esm/sparql/SparqlAlgebra.d.ts +4 -0
  71. package/lib/esm/sparql/algebraToString.js +6 -0
  72. package/lib/esm/sparql/algebraToString.js.map +1 -1
  73. package/lib/esm/sparql/irToAlgebra.js +13 -3
  74. package/lib/esm/sparql/irToAlgebra.js.map +1 -1
  75. package/lib/esm/utils/NodeReference.d.ts +24 -0
  76. package/lib/esm/utils/NodeReference.js +39 -1
  77. package/lib/esm/utils/NodeReference.js.map +1 -1
  78. package/lib/esm/utils/ShapeClass.js +3 -1
  79. package/lib/esm/utils/ShapeClass.js.map +1 -1
  80. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -51,6 +51,41 @@
51
51
 
52
52
  See the [README](./README.md#computed-expressions) for the full method reference and more examples.
53
53
 
54
+ ### Patch Changes
55
+
56
+ - [#34](https://github.com/Semantu/linked/pull/34) [`e2ae4a2`](https://github.com/Semantu/linked/commit/e2ae4a28e5be28716e1634ca81d9c379a291cbc6) Thanks [@flyon](https://github.com/flyon)! - ### SHACL property path support
57
+
58
+ Property decorators now accept full SPARQL property path syntax:
59
+
60
+ ```ts
61
+ @literalProperty({path: 'foaf:knows/foaf:name'}) // sequence
62
+ @literalProperty({path: '<http://ex.org/a>|<http://ex.org/b>'}) // alternative
63
+ @literalProperty({path: '^foaf:knows'}) // inverse
64
+ @literalProperty({path: 'foaf:knows*'}) // zeroOrMore
65
+ ```
66
+
67
+ New exports from `src/paths/`:
68
+
69
+ - `PathExpr`, `PathRef` — AST types for property paths
70
+ - `parsePropertyPath(input): PathExpr` — parser for SPARQL property path strings
71
+ - `normalizePropertyPath(input): PathExpr` — normalizes any input form to canonical AST
72
+ - `pathExprToSparql(expr): string` — renders PathExpr to SPARQL syntax
73
+ - `serializePathToSHACL(expr): SHACLPathResult` — serializes to SHACL RDF triples
74
+
75
+ `PropertyShape.path` is now typed as `PathExpr` (was opaque). Complex paths flow through the full IR pipeline and emit correct SPARQL property path syntax in generated queries.
76
+
77
+ ### Strict prefix resolution in query API
78
+
79
+ `QueryBuilder.for()` and `.forAll()` now throw on unregistered prefixes instead of silently passing through. New export:
80
+
81
+ - `resolveUriOrThrow(str): string` — strict prefix resolution (throws on unknown prefix)
82
+
83
+ ### SHACL constraint field fixes
84
+
85
+ - `hasValue` and `in` config fields now correctly handle literal values (`string`, `number`, `boolean`) — previously all values were wrapped as IRI nodes
86
+ - `lessThan` and `lessThanOrEquals` config fields are now wired into `createPropertyShape` and exposed via `getResult()`
87
+ - New `PropertyShapeResult` interface provides typed access to `getResult()` output
88
+
54
89
  ## 1.1.0
55
90
 
56
91
  ### Minor Changes
@@ -88,4 +88,9 @@ export declare const shacl: {
88
88
  MaxLengthConstraintComponent: NodeReferenceValue;
89
89
  AbstractResult: NodeReferenceValue;
90
90
  result: NodeReferenceValue;
91
+ alternativePath: NodeReferenceValue;
92
+ inversePath: NodeReferenceValue;
93
+ zeroOrMorePath: NodeReferenceValue;
94
+ oneOrMorePath: NodeReferenceValue;
95
+ zeroOrOnePath: NodeReferenceValue;
91
96
  };
@@ -30,6 +30,11 @@ const targetNode = (0, exports.ns)('targetNode');
30
30
  const node = (0, exports.ns)('node');
31
31
  const nodeKind = (0, exports.ns)('nodeKind');
32
32
  const Shape = (0, exports.ns)('Shape');
33
+ const alternativePath = (0, exports.ns)('alternativePath');
34
+ const inversePath = (0, exports.ns)('inversePath');
35
+ const zeroOrMorePath = (0, exports.ns)('zeroOrMorePath');
36
+ const oneOrMorePath = (0, exports.ns)('oneOrMorePath');
37
+ const zeroOrOnePath = (0, exports.ns)('zeroOrOnePath');
33
38
  const BlankNode = (0, exports.ns)('BlankNode');
34
39
  const IRI = (0, exports.ns)('IRI');
35
40
  const Literal = (0, exports.ns)('Literal');
@@ -124,5 +129,10 @@ exports.shacl = {
124
129
  MaxLengthConstraintComponent: exports.MaxLengthConstraintComponent,
125
130
  AbstractResult: exports.AbstractResult,
126
131
  result: exports.result,
132
+ alternativePath,
133
+ inversePath,
134
+ zeroOrMorePath,
135
+ oneOrMorePath,
136
+ zeroOrOnePath,
127
137
  };
128
138
  //# sourceMappingURL=shacl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shacl.js","sourceRoot":"","sources":["../../../src/ontologies/shacl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shacl.js","sourceRoot":"","sources":["../../../src/ontologies/shacl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /** A simple path reference — either a raw string (prefixed/IRI) or a node ref. */
2
+ export type PathRef = string | {
3
+ id: string;
4
+ };
5
+ /** Discriminated-object union for all SPARQL property path forms. */
6
+ export type PathExpr = PathRef | {
7
+ seq: PathExpr[];
8
+ } | {
9
+ alt: PathExpr[];
10
+ } | {
11
+ inv: PathExpr;
12
+ } | {
13
+ zeroOrMore: PathExpr;
14
+ } | {
15
+ oneOrMore: PathExpr;
16
+ } | {
17
+ zeroOrOne: PathExpr;
18
+ } | {
19
+ negatedPropertySet: (PathRef | {
20
+ inv: PathRef;
21
+ })[];
22
+ };
23
+ export declare const isPathRef: (expr: PathExpr) => expr is PathRef;
24
+ export declare const isComplexPathExpr: (expr: PathExpr) => boolean;
25
+ /**
26
+ * Characters that signal a string contains path operators and should be parsed.
27
+ * Used by the normalizer to decide whether to invoke the parser.
28
+ */
29
+ export declare const PATH_OPERATOR_CHARS: RegExp;
30
+ /**
31
+ * Parse a SPARQL property path string into a PathExpr AST.
32
+ *
33
+ * Supports: sequence (/), alternative (|), inverse (^), zeroOrMore (*),
34
+ * oneOrMore (+), zeroOrOne (?), negatedPropertySet (!), and grouping (()).
35
+ *
36
+ * Does NOT resolve prefixes — raw strings are preserved in the AST.
37
+ */
38
+ export declare function parsePropertyPath(input: string): PathExpr;
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ /*
3
+ * This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.PATH_OPERATOR_CHARS = exports.isComplexPathExpr = exports.isPathRef = void 0;
9
+ exports.parsePropertyPath = parsePropertyPath;
10
+ // ---------------------------------------------------------------------------
11
+ // Type guards
12
+ // ---------------------------------------------------------------------------
13
+ const isPathRef = (expr) => typeof expr === 'string' || (typeof expr === 'object' && expr !== null && 'id' in expr && Object.keys(expr).length === 1);
14
+ exports.isPathRef = isPathRef;
15
+ const isComplexPathExpr = (expr) => !(0, exports.isPathRef)(expr);
16
+ exports.isComplexPathExpr = isComplexPathExpr;
17
+ // ---------------------------------------------------------------------------
18
+ // Parser — recursive-descent for SPARQL property path grammar
19
+ // ---------------------------------------------------------------------------
20
+ /**
21
+ * Characters that signal a string contains path operators and should be parsed.
22
+ * Used by the normalizer to decide whether to invoke the parser.
23
+ */
24
+ exports.PATH_OPERATOR_CHARS = /[/|^*+?()!<]/;
25
+ class PathParser {
26
+ constructor(input) {
27
+ this.pos = 0;
28
+ this.input = input;
29
+ }
30
+ parse() {
31
+ this.skipWhitespace();
32
+ const result = this.parseAlt();
33
+ this.skipWhitespace();
34
+ if (this.pos < this.input.length) {
35
+ this.error(`Unexpected character '${this.input[this.pos]}'`);
36
+ }
37
+ return result;
38
+ }
39
+ // alt = seq ( '|' seq )*
40
+ parseAlt() {
41
+ const first = this.parseSeq();
42
+ const branches = [first];
43
+ while (this.peek() === '|') {
44
+ this.advance(); // consume '|'
45
+ this.skipWhitespace();
46
+ branches.push(this.parseSeq());
47
+ }
48
+ return branches.length === 1 ? branches[0] : { alt: branches };
49
+ }
50
+ // seq = unary ( '/' unary )*
51
+ parseSeq() {
52
+ const first = this.parseUnary();
53
+ const steps = [first];
54
+ while (this.peek() === '/') {
55
+ this.advance(); // consume '/'
56
+ this.skipWhitespace();
57
+ steps.push(this.parseUnary());
58
+ }
59
+ return steps.length === 1 ? steps[0] : { seq: steps };
60
+ }
61
+ // unary = '^' unary | primary ( '*' | '+' | '?' )?
62
+ parseUnary() {
63
+ this.skipWhitespace();
64
+ if (this.peek() === '^') {
65
+ this.advance(); // consume '^'
66
+ this.skipWhitespace();
67
+ const inner = this.parseUnary();
68
+ return { inv: inner };
69
+ }
70
+ let expr = this.parsePrimary();
71
+ this.skipWhitespace();
72
+ const postfix = this.peek();
73
+ if (postfix === '*') {
74
+ this.advance();
75
+ expr = { zeroOrMore: expr };
76
+ }
77
+ else if (postfix === '+') {
78
+ this.advance();
79
+ expr = { oneOrMore: expr };
80
+ }
81
+ else if (postfix === '?') {
82
+ this.advance();
83
+ expr = { zeroOrOne: expr };
84
+ }
85
+ this.skipWhitespace();
86
+ return expr;
87
+ }
88
+ // primary = '(' alt ')' | '!' negatedPropertySet | iri
89
+ parsePrimary() {
90
+ this.skipWhitespace();
91
+ const ch = this.peek();
92
+ // Grouped expression
93
+ if (ch === '(') {
94
+ this.advance(); // consume '('
95
+ this.skipWhitespace();
96
+ const inner = this.parseAlt();
97
+ this.skipWhitespace();
98
+ if (this.peek() !== ')') {
99
+ this.error("Expected ')'");
100
+ }
101
+ this.advance(); // consume ')'
102
+ return inner;
103
+ }
104
+ // Negated property set
105
+ if (ch === '!') {
106
+ this.advance(); // consume '!'
107
+ this.skipWhitespace();
108
+ return this.parseNegatedPropertySet();
109
+ }
110
+ // IRI or prefixed name
111
+ return this.parseIri();
112
+ }
113
+ // negatedPropertySet = '(' negatedItem ( '|' negatedItem )* ')' | negatedItem
114
+ parseNegatedPropertySet() {
115
+ this.skipWhitespace();
116
+ if (this.peek() === '(') {
117
+ this.advance(); // consume '('
118
+ this.skipWhitespace();
119
+ const items = this.parseNegatedItems();
120
+ this.skipWhitespace();
121
+ if (this.peek() !== ')') {
122
+ this.error("Expected ')' in negated property set");
123
+ }
124
+ this.advance(); // consume ')'
125
+ return { negatedPropertySet: items };
126
+ }
127
+ // Single negated item
128
+ const item = this.parseNegatedItem();
129
+ return { negatedPropertySet: [item] };
130
+ }
131
+ parseNegatedItems() {
132
+ const items = [this.parseNegatedItem()];
133
+ while (this.peek() === '|') {
134
+ this.advance(); // consume '|'
135
+ this.skipWhitespace();
136
+ items.push(this.parseNegatedItem());
137
+ }
138
+ return items;
139
+ }
140
+ parseNegatedItem() {
141
+ this.skipWhitespace();
142
+ if (this.peek() === '^') {
143
+ this.advance(); // consume '^'
144
+ this.skipWhitespace();
145
+ const ref = this.parseIri();
146
+ return { inv: ref };
147
+ }
148
+ return this.parseIri();
149
+ }
150
+ // iri = '<' chars '>' | prefixedName
151
+ parseIri() {
152
+ this.skipWhitespace();
153
+ if (this.peek() === '<') {
154
+ this.advance(); // consume '<'
155
+ const start = this.pos;
156
+ while (this.pos < this.input.length && this.input[this.pos] !== '>') {
157
+ this.pos++;
158
+ }
159
+ if (this.pos >= this.input.length) {
160
+ this.error("Expected '>' to close IRI");
161
+ }
162
+ const iri = this.input.slice(start, this.pos);
163
+ this.advance(); // consume '>'
164
+ return iri;
165
+ }
166
+ return this.parsePrefixedName();
167
+ }
168
+ // prefixedName = PNAME_NS PNAME_LOCAL | PNAME_NS
169
+ // We accept any characters until we hit a path operator or whitespace or end
170
+ parsePrefixedName() {
171
+ this.skipWhitespace();
172
+ const start = this.pos;
173
+ while (this.pos < this.input.length && !this.isTerminator(this.input[this.pos])) {
174
+ this.pos++;
175
+ }
176
+ if (this.pos === start) {
177
+ this.error('Expected IRI or prefixed name');
178
+ }
179
+ return this.input.slice(start, this.pos);
180
+ }
181
+ isTerminator(ch) {
182
+ return ch === '/' || ch === '|' || ch === '*' || ch === '+' || ch === '?' ||
183
+ ch === '(' || ch === ')' || ch === '^' || ch === '!' || ch === ' ' ||
184
+ ch === '\t' || ch === '\n' || ch === '\r';
185
+ }
186
+ peek() {
187
+ return this.pos < this.input.length ? this.input[this.pos] : undefined;
188
+ }
189
+ advance() {
190
+ this.pos++;
191
+ }
192
+ skipWhitespace() {
193
+ while (this.pos < this.input.length) {
194
+ const ch = this.input[this.pos];
195
+ if (ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r') {
196
+ this.pos++;
197
+ }
198
+ else {
199
+ break;
200
+ }
201
+ }
202
+ }
203
+ error(message) {
204
+ throw new Error(`Property path parse error at position ${this.pos}: ${message} (input: "${this.input}")`);
205
+ }
206
+ }
207
+ /**
208
+ * Parse a SPARQL property path string into a PathExpr AST.
209
+ *
210
+ * Supports: sequence (/), alternative (|), inverse (^), zeroOrMore (*),
211
+ * oneOrMore (+), zeroOrOne (?), negatedPropertySet (!), and grouping (()).
212
+ *
213
+ * Does NOT resolve prefixes — raw strings are preserved in the AST.
214
+ */
215
+ function parsePropertyPath(input) {
216
+ if (!input || input.trim().length === 0) {
217
+ throw new Error('Property path input must not be empty');
218
+ }
219
+ return new PathParser(input.trim()).parse();
220
+ }
221
+ //# sourceMappingURL=PropertyPathExpr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropertyPathExpr.js","sourceRoot":"","sources":["../../../src/paths/PropertyPathExpr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { PathExpr } from './PropertyPathExpr.js';
2
+ /**
3
+ * Input type for property path decorators.
4
+ * Accepts all forms: string, {id}, array (sequence shorthand), or PathExpr.
5
+ */
6
+ export type PropertyPathDecoratorInput = string | {
7
+ id: string;
8
+ } | PropertyPathDecoratorInput[] | PathExpr;
9
+ /**
10
+ * Normalize any property path decorator input into a canonical PathExpr.
11
+ *
12
+ * - `string` without path operators → preserved as-is (a PathRef)
13
+ * - `string` with operators → parsed via `parsePropertyPath`
14
+ * - `{id: string}` → preserved as PathRef
15
+ * - `PathExpr` structured object → passed through
16
+ * - `Array` → converted to `{seq: [...]}`
17
+ */
18
+ export declare function normalizePropertyPath(input: PropertyPathDecoratorInput): PathExpr;
19
+ /**
20
+ * Check whether a PathExpr is a simple single-IRI path (backward-compatible form).
21
+ * Returns the IRI string if simple, or null if complex.
22
+ */
23
+ export declare function getSimplePathId(expr: PathExpr): string | null;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ /*
3
+ * This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.normalizePropertyPath = normalizePropertyPath;
9
+ exports.getSimplePathId = getSimplePathId;
10
+ const PropertyPathExpr_js_1 = require("./PropertyPathExpr.js");
11
+ /** Path expression operator keys used to detect structured PathExpr objects. */
12
+ const PATH_EXPR_KEYS = new Set(['seq', 'alt', 'inv', 'zeroOrMore', 'oneOrMore', 'zeroOrOne', 'negatedPropertySet']);
13
+ /** Check if an object is a structured PathExpr (not a plain {id} ref). */
14
+ const isStructuredPathExpr = (value) => {
15
+ if (typeof value !== 'object' || value === null)
16
+ return false;
17
+ return Object.keys(value).some((key) => PATH_EXPR_KEYS.has(key));
18
+ };
19
+ /**
20
+ * Normalize any property path decorator input into a canonical PathExpr.
21
+ *
22
+ * - `string` without path operators → preserved as-is (a PathRef)
23
+ * - `string` with operators → parsed via `parsePropertyPath`
24
+ * - `{id: string}` → preserved as PathRef
25
+ * - `PathExpr` structured object → passed through
26
+ * - `Array` → converted to `{seq: [...]}`
27
+ */
28
+ function normalizePropertyPath(input) {
29
+ let result;
30
+ // String input
31
+ if (typeof input === 'string') {
32
+ if (PropertyPathExpr_js_1.PATH_OPERATOR_CHARS.test(input)) {
33
+ result = (0, PropertyPathExpr_js_1.parsePropertyPath)(input);
34
+ }
35
+ else {
36
+ result = input;
37
+ }
38
+ }
39
+ // Array → sequence shorthand
40
+ else if (Array.isArray(input)) {
41
+ const normalized = input.map((item) => normalizePropertyPath(item));
42
+ result = normalized.length === 1 ? normalized[0] : { seq: normalized };
43
+ }
44
+ // Object
45
+ else if (typeof input === 'object' && input !== null) {
46
+ // Structured PathExpr (has seq, alt, inv, etc.)
47
+ if (isStructuredPathExpr(input)) {
48
+ result = input;
49
+ }
50
+ // Plain {id} ref
51
+ else if ('id' in input) {
52
+ result = input;
53
+ }
54
+ else {
55
+ throw new Error(`Invalid property path input: ${JSON.stringify(input)}`);
56
+ }
57
+ }
58
+ else {
59
+ throw new Error(`Invalid property path input: ${JSON.stringify(input)}`);
60
+ }
61
+ return result;
62
+ }
63
+ /**
64
+ * Check whether a PathExpr is a simple single-IRI path (backward-compatible form).
65
+ * Returns the IRI string if simple, or null if complex.
66
+ */
67
+ function getSimplePathId(expr) {
68
+ if (typeof expr === 'string')
69
+ return expr;
70
+ if (typeof expr === 'object' && expr !== null && 'id' in expr && !isStructuredPathExpr(expr)) {
71
+ return expr.id;
72
+ }
73
+ return null;
74
+ }
75
+ //# sourceMappingURL=normalizePropertyPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizePropertyPath.js","sourceRoot":"","sources":["../../../src/paths/normalizePropertyPath.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAgCH,sDAiCC;AAMD,0CAMC;AA3ED,+DAAuF;AAYvF,gFAAgF;AAChF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAEpH,0EAA0E;AAC1E,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAW,EAAE;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,SAAgB,qBAAqB,CAAC,KAAiC;IACrE,IAAI,MAAgB,CAAC;IAErB,eAAe;IACf,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,yCAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,MAAM,GAAG,IAAA,uCAAiB,EAAC,KAAK,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IACD,6BAA6B;SACxB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,MAAM,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,GAAG,EAAE,UAAU,EAAC,CAAC;IACvE,CAAC;IACD,SAAS;SACJ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACrD,gDAAgD;QAChD,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,GAAG,KAAiB,CAAC;QAC7B,CAAC;QACD,iBAAiB;aACZ,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,GAAG,KAAqB,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,IAAc;IAC5C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7F,OAAQ,IAAqB,CAAC,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { PathExpr } from './PropertyPathExpr.js';
2
+ /**
3
+ * Collect all full IRIs from a PathExpr AST.
4
+ * Returns IRIs that need PREFIX declarations (full URIs from string refs
5
+ * containing `://` and from `{id}` refs). Does not collect prefixed-name
6
+ * string refs since those are already in prefix:local form.
7
+ */
8
+ export declare function collectPathUris(expr: PathExpr): string[];
9
+ /**
10
+ * Render a PathExpr to SPARQL property path syntax.
11
+ * Handles all forms including negatedPropertySet.
12
+ * Adds parentheses only when needed for correct precedence.
13
+ */
14
+ export declare function pathExprToSparql(expr: PathExpr): string;
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ /*
3
+ * This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.collectPathUris = collectPathUris;
9
+ exports.pathExprToSparql = pathExprToSparql;
10
+ const PropertyPathExpr_js_1 = require("./PropertyPathExpr.js");
11
+ const sparqlUtils_js_1 = require("../sparql/sparqlUtils.js");
12
+ // ---------------------------------------------------------------------------
13
+ // Precedence levels (higher = tighter binding)
14
+ // ---------------------------------------------------------------------------
15
+ const PREC_ALT = 1;
16
+ const PREC_SEQ = 2;
17
+ const PREC_UNARY = 3;
18
+ const PREC_PRIMARY = 4;
19
+ function refToSparql(ref) {
20
+ if (typeof ref === 'string') {
21
+ // If it looks like a full IRI (contains ://), use formatUri for prefix shortening
22
+ if (ref.includes('://'))
23
+ return (0, sparqlUtils_js_1.formatUri)(ref);
24
+ // Otherwise treat as prefixed name (already in prefix:local form)
25
+ return ref;
26
+ }
27
+ // {id} refs always contain full IRIs — use formatUri for prefix shortening
28
+ return (0, sparqlUtils_js_1.formatUri)(ref.id);
29
+ }
30
+ /**
31
+ * Collect all full IRIs from a PathExpr AST.
32
+ * Returns IRIs that need PREFIX declarations (full URIs from string refs
33
+ * containing `://` and from `{id}` refs). Does not collect prefixed-name
34
+ * string refs since those are already in prefix:local form.
35
+ */
36
+ function collectPathUris(expr) {
37
+ const uris = [];
38
+ walkPathExpr(expr, uris);
39
+ return uris;
40
+ }
41
+ function collectRef(ref, uris) {
42
+ if (typeof ref === 'string') {
43
+ if (ref.includes('://'))
44
+ uris.push(ref);
45
+ }
46
+ else {
47
+ uris.push(ref.id);
48
+ }
49
+ }
50
+ function walkPathExpr(expr, uris) {
51
+ if ((0, PropertyPathExpr_js_1.isPathRef)(expr)) {
52
+ collectRef(expr, uris);
53
+ return;
54
+ }
55
+ if ('seq' in expr) {
56
+ for (const e of expr.seq)
57
+ walkPathExpr(e, uris);
58
+ return;
59
+ }
60
+ if ('alt' in expr) {
61
+ for (const e of expr.alt)
62
+ walkPathExpr(e, uris);
63
+ return;
64
+ }
65
+ if ('inv' in expr) {
66
+ walkPathExpr(expr.inv, uris);
67
+ return;
68
+ }
69
+ if ('zeroOrMore' in expr) {
70
+ walkPathExpr(expr.zeroOrMore, uris);
71
+ return;
72
+ }
73
+ if ('oneOrMore' in expr) {
74
+ walkPathExpr(expr.oneOrMore, uris);
75
+ return;
76
+ }
77
+ if ('zeroOrOne' in expr) {
78
+ walkPathExpr(expr.zeroOrOne, uris);
79
+ return;
80
+ }
81
+ if ('negatedPropertySet' in expr) {
82
+ for (const item of expr.negatedPropertySet) {
83
+ if (typeof item === 'string' || (typeof item === 'object' && 'id' in item && !('inv' in item))) {
84
+ collectRef(item, uris);
85
+ }
86
+ else {
87
+ collectRef(item.inv, uris);
88
+ }
89
+ }
90
+ }
91
+ }
92
+ /**
93
+ * Render a PathExpr to SPARQL property path syntax.
94
+ * Handles all forms including negatedPropertySet.
95
+ * Adds parentheses only when needed for correct precedence.
96
+ */
97
+ function pathExprToSparql(expr) {
98
+ return renderExpr(expr, 0);
99
+ }
100
+ function renderExpr(expr, parentPrec) {
101
+ if ((0, PropertyPathExpr_js_1.isPathRef)(expr)) {
102
+ return refToSparql(expr);
103
+ }
104
+ if ('seq' in expr) {
105
+ const inner = expr.seq.map((e) => renderExpr(e, PREC_SEQ)).join('/');
106
+ return parentPrec > PREC_SEQ ? `(${inner})` : inner;
107
+ }
108
+ if ('alt' in expr) {
109
+ const inner = expr.alt.map((e) => renderExpr(e, PREC_ALT)).join('|');
110
+ return parentPrec > PREC_ALT ? `(${inner})` : inner;
111
+ }
112
+ if ('inv' in expr) {
113
+ return `^${renderExpr(expr.inv, PREC_UNARY)}`;
114
+ }
115
+ if ('zeroOrMore' in expr) {
116
+ return `${renderExpr(expr.zeroOrMore, PREC_PRIMARY)}*`;
117
+ }
118
+ if ('oneOrMore' in expr) {
119
+ return `${renderExpr(expr.oneOrMore, PREC_PRIMARY)}+`;
120
+ }
121
+ if ('zeroOrOne' in expr) {
122
+ return `${renderExpr(expr.zeroOrOne, PREC_PRIMARY)}?`;
123
+ }
124
+ if ('negatedPropertySet' in expr) {
125
+ const items = expr.negatedPropertySet.map((item) => {
126
+ if (typeof item === 'string' || (typeof item === 'object' && 'id' in item && !('inv' in item))) {
127
+ return refToSparql(item);
128
+ }
129
+ const invItem = item;
130
+ return `^${refToSparql(invItem.inv)}`;
131
+ });
132
+ return items.length === 1 ? `!${items[0]}` : `!(${items.join('|')})`;
133
+ }
134
+ throw new Error(`Unknown PathExpr shape: ${JSON.stringify(expr)}`);
135
+ }
136
+ //# sourceMappingURL=pathExprToSparql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathExprToSparql.js","sourceRoot":"","sources":["../../../src/paths/pathExprToSparql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { PathExpr } from './PropertyPathExpr.js';
2
+ export type SHACLTriple = {
3
+ subject: string;
4
+ predicate: string;
5
+ object: string;
6
+ };
7
+ export type SHACLPathResult = {
8
+ /** The root node of the serialized path (IRI or blank node id). */
9
+ root: string;
10
+ /** Additional triples needed to describe the path structure. */
11
+ triples: SHACLTriple[];
12
+ };
13
+ /** Reset blank node counter (for deterministic testing). */
14
+ export declare function resetBlankNodeCounter(): void;
15
+ /**
16
+ * Serialize a PathExpr to SHACL RDF triples.
17
+ *
18
+ * - Simple PathRef → direct IRI (no extra triples)
19
+ * - Complex paths → blank nodes with SHACL path vocabulary
20
+ * - negatedPropertySet → throws (not supported by SHACL)
21
+ */
22
+ export declare function serializePathToSHACL(expr: PathExpr): SHACLPathResult;