@traqula/rules-sparql-1-1 0.0.4 → 0.0.6

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.
@@ -11,7 +11,7 @@ export declare function completeParseContext(context: Partial<SparqlContext & {
11
11
  origSource: string;
12
12
  offset?: number;
13
13
  };
14
- export declare class SparqlParser<ParseRet> {
14
+ export declare class MinimalSparqlParser<ParseRet> {
15
15
  private readonly parser;
16
16
  constructor(parser: Parser<ParseRet>);
17
17
  private readonly F;
@@ -10,11 +10,12 @@ export function completeParseContext(context) {
10
10
  skipValidation: context.skipValidation ?? false,
11
11
  };
12
12
  }
13
- export class SparqlParser {
13
+ export class MinimalSparqlParser {
14
+ parser;
14
15
  constructor(parser) {
15
16
  this.parser = parser;
16
- this.F = new Factory();
17
17
  }
18
+ F = new Factory();
18
19
  parse(query, context = {}) {
19
20
  return this.parser.queryOrUpdate(query, completeParseContext(context));
20
21
  }
@@ -29,4 +30,4 @@ export class SparqlParser {
29
30
  return result;
30
31
  }
31
32
  }
32
- //# sourceMappingURL=SparqlParser.js.map
33
+ //# sourceMappingURL=MinimalSparqlParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MinimalSparqlParser.js","sourceRoot":"","sources":["MinimalSparqlParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,MAAM,UAAU,oBAAoB,CAClC,OAAyE;IAEzE,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,OAAO,EAAE;QACzC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE;QACjC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAE,cAAc,EAAE,qBAAqB,CAAE,CAAC;QAC9G,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,mBAAmB;IACM;IAApC,YAAoC,MAAwB;QAAxB,WAAM,GAAN,MAAM,CAAkB;IAAG,CAAC;IAC/C,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;IAE5B,KAAK,CAAC,KAAa,EAAE,UAAkC,EAAE;QAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;IACzE,CAAC;IAEM,SAAS,CAAC,KAAa,EAAE,UAAkC,EAAE;QAElE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,GAAG,MAAM;gBACT,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["import { Factory } from './factory';\nimport type { SparqlContext } from './sparql11HelperTypes';\nimport type { Path, TermIri } from './Sparql11types';\n\ninterface Parser<ParseRet> {\n queryOrUpdate: (input: string, context: SparqlContext) => ParseRet;\n path: (input: string, context: SparqlContext) => TermIri | Path;\n}\n\nexport function completeParseContext(\n context: Partial<SparqlContext & { origSource: string; offset?: number }>,\n): SparqlContext & { origSource: string; offset?: number } {\n return {\n factory: context.factory ?? new Factory(),\n baseIRI: context.baseIRI,\n prefixes: { ...context.prefixes },\n origSource: context.origSource ?? '',\n offset: context.offset,\n parseMode: context.parseMode ? new Set(context.parseMode) : new Set([ 'canParseVars', 'canCreateBlankNodes' ]),\n skipValidation: context.skipValidation ?? false,\n };\n}\n\nexport class MinimalSparqlParser<ParseRet> {\n public constructor(private readonly parser: Parser<ParseRet>) {}\n private readonly F = new Factory();\n\n public parse(query: string, context: Partial<SparqlContext> = {}): ParseRet {\n return this.parser.queryOrUpdate(query, completeParseContext(context));\n }\n\n public parsePath(query: string, context: Partial<SparqlContext> = {}):\n (Path & { prefixes: object }) | TermIri {\n const result = this.parser.path(query, completeParseContext(context));\n if (this.F.isPathPure(result)) {\n return {\n ...result,\n prefixes: {},\n };\n }\n return result;\n }\n}\n"]}
@@ -2,10 +2,7 @@ const nodeType = 'term';
2
2
  // eslint-disable-next-line ts/explicit-function-return-type
3
3
  export function TermFactoryMixin(Base) {
4
4
  return class TermFactory extends Base {
5
- constructor() {
6
- super(...arguments);
7
- this.__blankNodeCounter = 0;
8
- }
5
+ __blankNodeCounter = 0;
9
6
  resetBlankNodeCounter() {
10
7
  this.__blankNodeCounter = 0;
11
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TermFactory.js","sourceRoot":"","sources":["TermFactory.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CoreFactory, SourceLocation, Typed, SubTyped } from '@traqula/core';\nimport type {\n TermBlank,\n TermIri,\n TermIriFull,\n TermIriPrefixed,\n TermLiteral,\n TermLiteralLangStr,\n TermLiteralStr,\n TermLiteralTyped,\n TermVariable,\n} from '../Sparql11types';\nimport type { Constructor } from './mixins';\n\ntype NodeType = 'term';\nconst nodeType: NodeType = 'term';\n\n// eslint-disable-next-line ts/explicit-function-return-type\nexport function TermFactoryMixin<TBase extends Constructor<CoreFactory>>(Base: TBase) {\n return class TermFactory extends Base {\n public __blankNodeCounter = 0;\n\n public resetBlankNodeCounter(): void {\n this.__blankNodeCounter = 0;\n }\n\n public isTerm(x: object): x is Typed<'term'> {\n return this.isOfType(x, 'term');\n }\n\n public blankNode(label: undefined | string, loc: SourceLocation): TermBlank {\n const base = <const>{\n type: 'term',\n subType: 'blankNode',\n loc,\n };\n if (label === undefined) {\n return { ...base, label: `g_${this.__blankNodeCounter++}` };\n }\n return { ...base, label: `e_${label}` };\n }\n\n public isTermBlank(obj: object): obj is SubTyped<NodeType, 'blankNode'> {\n return this.isOfSubType(obj, nodeType, 'blankNode');\n }\n\n /**\n * String, no lang, no type\n */\n public literalTerm(loc: SourceLocation, value: string, lang?: undefined): TermLiteralStr;\n /**\n * String with a language tag\n */\n public literalTerm(loc: SourceLocation, value: string, lang: string): TermLiteralLangStr;\n /**\n * Lexical form with a type\n */\n public literalTerm(loc: SourceLocation, value: string, iri: TermIri): TermLiteralTyped;\n public literalTerm(loc: SourceLocation, value: string, langOrIri?: string | TermIri): TermLiteral;\n public literalTerm(loc: SourceLocation, value: string, langOrIri?: string | TermIri): TermLiteral {\n return {\n type: nodeType,\n subType: 'literal',\n value,\n langOrIri,\n loc,\n };\n }\n\n public isTermLiteral(obj: object): obj is SubTyped<NodeType, 'literal'> {\n return this.isOfSubType(obj, nodeType, 'literal');\n }\n\n public isTermLiteralLangStr(obj: object): obj is SubTyped<NodeType, 'literal'> & { langOrIri: string } {\n return this.isTermLiteral(obj) && typeof (<{ langOrIri?: unknown }>obj).langOrIri === 'string';\n }\n\n public isTermLiteralStr(obj: object): obj is SubTyped<NodeType, 'literal'> & { langOrIri: undefined } {\n return this.isTermLiteral(obj) && typeof (<{ langOrIri?: unknown }>obj).langOrIri === 'undefined';\n }\n\n public isTermLiteralTyped(obj: object):\n obj is SubTyped<NodeType, 'literal'> & { langOrIri: SubTyped<NodeType, 'namedNode'> } {\n const casted = <{ langOrIri?: unknown }>obj;\n return this.isTermLiteral(obj) && typeof casted.langOrIri === 'object' &&\n casted.langOrIri !== null && this.isTermNamed(casted.langOrIri);\n }\n\n public variable(value: string, loc: SourceLocation): TermVariable {\n return {\n type: nodeType,\n subType: 'variable',\n value,\n loc,\n };\n }\n\n public isTermVariable(obj: object): obj is SubTyped<NodeType, 'variable'> {\n return this.isOfSubType(obj, nodeType, 'variable');\n }\n\n /**\n * A namednode with fully defined with a uri.\n */\n public namedNode(loc: SourceLocation, value: string, prefix?: undefined): TermIriFull;\n /**\n * A namednode defined using a prefix\n */\n public namedNode(loc: SourceLocation, value: string, prefix: string): TermIriPrefixed;\n public namedNode(loc: SourceLocation, value: string, prefix?: string): TermIriFull | TermIriPrefixed {\n const base = <const>{\n type: nodeType,\n subType: 'namedNode',\n value,\n loc,\n };\n if (prefix === undefined) {\n return base;\n }\n return { ...base, prefix };\n }\n\n public isTermNamed(obj: object): obj is SubTyped<NodeType, 'namedNode'> {\n return this.isOfSubType(obj, nodeType, 'namedNode');\n }\n\n public isTermNamedPrefixed(obj: object): obj is SubTyped<NodeType, 'namedNode'> & { prefix: string } {\n const casted = <{ prefix?: unknown }>obj;\n return this.isTermNamed(obj) && typeof casted.prefix === 'string';\n }\n };\n}\n"]}
1
+ {"version":3,"file":"TermFactory.js","sourceRoot":"","sources":["TermFactory.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CoreFactory, SourceLocation, Typed, SubTyped } from '@traqula/core';\nimport type {\n TermBlank,\n TermIri,\n TermIriFull,\n TermIriPrefixed,\n TermLiteral,\n TermLiteralLangStr,\n TermLiteralStr,\n TermLiteralTyped,\n TermVariable,\n} from '../Sparql11types';\nimport type { Constructor } from './mixins';\n\ntype NodeType = 'term';\nconst nodeType: NodeType = 'term';\n\n// eslint-disable-next-line ts/explicit-function-return-type\nexport function TermFactoryMixin<TBase extends Constructor<CoreFactory>>(Base: TBase) {\n return class TermFactory extends Base {\n public __blankNodeCounter = 0;\n\n public resetBlankNodeCounter(): void {\n this.__blankNodeCounter = 0;\n }\n\n public isTerm(x: object): x is Typed<'term'> {\n return this.isOfType(x, 'term');\n }\n\n public blankNode(label: undefined | string, loc: SourceLocation): TermBlank {\n const base = <const>{\n type: 'term',\n subType: 'blankNode',\n loc,\n };\n if (label === undefined) {\n return { ...base, label: `g_${this.__blankNodeCounter++}` };\n }\n return { ...base, label: `e_${label}` };\n }\n\n public isTermBlank(obj: object): obj is SubTyped<NodeType, 'blankNode'> {\n return this.isOfSubType(obj, nodeType, 'blankNode');\n }\n\n /**\n * String, no lang, no type\n */\n public literalTerm(loc: SourceLocation, value: string, lang?: undefined): TermLiteralStr;\n /**\n * String with a language tag\n */\n public literalTerm(loc: SourceLocation, value: string, lang: string): TermLiteralLangStr;\n /**\n * Lexical form with a type\n */\n public literalTerm(loc: SourceLocation, value: string, iri: TermIri): TermLiteralTyped;\n public literalTerm(loc: SourceLocation, value: string, langOrIri?: string | TermIri): TermLiteral;\n public literalTerm(loc: SourceLocation, value: string, langOrIri?: string | TermIri): TermLiteral {\n return {\n type: nodeType,\n subType: 'literal',\n value,\n langOrIri,\n loc,\n };\n }\n\n public isTermLiteral(obj: object): obj is SubTyped<NodeType, 'literal'> {\n return this.isOfSubType(obj, nodeType, 'literal');\n }\n\n public isTermLiteralLangStr(obj: object): obj is SubTyped<NodeType, 'literal'> & { langOrIri: string } {\n return this.isTermLiteral(obj) && typeof (<{ langOrIri?: unknown }>obj).langOrIri === 'string';\n }\n\n public isTermLiteralStr(obj: object): obj is SubTyped<NodeType, 'literal'> & { langOrIri: undefined } {\n return this.isTermLiteral(obj) && typeof (<{ langOrIri?: unknown }>obj).langOrIri === 'undefined';\n }\n\n public isTermLiteralTyped(obj: object):\n obj is SubTyped<NodeType, 'literal'> & { langOrIri: SubTyped<NodeType, 'namedNode'> } {\n const casted = <{ langOrIri?: unknown }>obj;\n return this.isTermLiteral(obj) && typeof casted.langOrIri === 'object' &&\n casted.langOrIri !== null && this.isTermNamed(casted.langOrIri);\n }\n\n public variable(value: string, loc: SourceLocation): TermVariable {\n return {\n type: nodeType,\n subType: 'variable',\n value,\n loc,\n };\n }\n\n public isTermVariable(obj: object): obj is SubTyped<NodeType, 'variable'> {\n return this.isOfSubType(obj, nodeType, 'variable');\n }\n\n /**\n * A namednode with fully defined with a uri.\n */\n public namedNode(loc: SourceLocation, value: string, prefix?: undefined): TermIriFull;\n /**\n * A namednode defined using a prefix\n */\n public namedNode(loc: SourceLocation, value: string, prefix: string): TermIriPrefixed;\n public namedNode(loc: SourceLocation, value: string, prefix?: string): TermIriFull | TermIriPrefixed {\n const base = <const>{\n type: nodeType,\n subType: 'namedNode',\n value,\n loc,\n };\n if (prefix === undefined) {\n return base;\n }\n return { ...base, prefix };\n }\n\n public isTermNamed(obj: object): obj is SubTyped<NodeType, 'namedNode'> {\n return this.isOfSubType(obj, nodeType, 'namedNode');\n }\n\n public isTermNamedPrefixed(obj: object): obj is SubTyped<NodeType, 'namedNode'> & { prefix: string } {\n const casted = <{ prefix?: unknown }>obj;\n return this.isTermNamed(obj) && typeof casted.prefix === 'string';\n }\n };\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * We use mixins as explained by the official TypeScript documentation:
3
3
  * https://www.typescriptlang.org/docs/handbook/mixins.html
4
+ * Mixins are used so we can split into many files.
5
+ * Additionally, it allows type guards and generics, which the is not possible using the indirection builder.
4
6
  */
5
7
  export type Constructor<T = object> = new (...args: any[]) => T;
6
8
  export type Mixin<Base = object, U extends Base = Base> = (superclass: Constructor<Base>) => Constructor<U>;
@@ -1,11 +1,14 @@
1
1
  /**
2
2
  * We use mixins as explained by the official TypeScript documentation:
3
3
  * https://www.typescriptlang.org/docs/handbook/mixins.html
4
+ * Mixins are used so we can split into many files.
5
+ * Additionally, it allows type guards and generics, which the is not possible using the indirection builder.
4
6
  */
5
7
  export function asArg(arg) {
6
8
  return new FlatCall(arg);
7
9
  }
8
10
  class FlatCall {
11
+ input;
9
12
  constructor(input) {
10
13
  this.input = input;
11
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mixins.js","sourceRoot":"","sources":["mixins.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,UAAU,KAAK,CAAI,GAAM;IAC7B,OAAO,IAAI,QAAQ,CAAI,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,QAAQ;IACZ,YAA2B,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IACpC,IAAI,CAAM,IAA2B;QAC1C,IAAI,CAAC,KAAK,GAAqB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,OAAiC,IAAI,CAAC;IACxC,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF","sourcesContent":["/**\n * We use mixins as explained by the official TypeScript documentation:\n * https://www.typescriptlang.org/docs/handbook/mixins.html\n */\n\nexport type Constructor<T = object> = new (...args: any[]) => T;\n\nexport type Mixin<Base = object, U extends Base = Base> = (superclass: Constructor<Base>) => Constructor<U>;\n\nexport function asArg<T>(arg: T): FlatCall<T> {\n return new FlatCall<T>(arg);\n}\n\nclass FlatCall<Input> {\n public constructor(private input: Input) {}\n public call<Out>(func: (input: Input) => Out): FlatCall<Out> {\n this.input = <Input> <unknown> func(this.input);\n return <FlatCall<Out>> <unknown> this;\n }\n\n public returns(): Input {\n return this.input;\n }\n}\n"]}
1
+ {"version":3,"file":"mixins.js","sourceRoot":"","sources":["mixins.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,UAAU,KAAK,CAAI,GAAM;IAC7B,OAAO,IAAI,QAAQ,CAAI,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,QAAQ;IACe;IAA3B,YAA2B,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IACpC,IAAI,CAAM,IAA2B;QAC1C,IAAI,CAAC,KAAK,GAAqB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,OAAiC,IAAI,CAAC;IACxC,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF","sourcesContent":["/**\n * We use mixins as explained by the official TypeScript documentation:\n * https://www.typescriptlang.org/docs/handbook/mixins.html\n * Mixins are used so we can split into many files.\n * Additionally, it allows type guards and generics, which the is not possible using the indirection builder.\n */\n\nexport type Constructor<T = object> = new (...args: any[]) => T;\n\nexport type Mixin<Base = object, U extends Base = Base> = (superclass: Constructor<Base>) => Constructor<U>;\n\nexport function asArg<T>(arg: T): FlatCall<T> {\n return new FlatCall<T>(arg);\n}\n\nclass FlatCall<Input> {\n public constructor(private input: Input) {}\n public call<Out>(func: (input: Input) => Out): FlatCall<Out> {\n this.input = <Input> <unknown> func(this.input);\n return <FlatCall<Out>> <unknown> this;\n }\n\n public returns(): Input {\n return this.input;\n }\n}\n"]}
@@ -1,3 +1,5 @@
1
+ import type { SparqlGrammarRule } from '../sparql11HelperTypes';
2
+ import type { SparqlQuery } from '../Sparql11types';
1
3
  export * from './queryUnit';
2
4
  export * from './updateUnit';
3
5
  export * from './builtIn';
@@ -10,3 +12,8 @@ export * from './propertyPaths';
10
12
  export * from './solutionModifier';
11
13
  export * from './tripleBlock';
12
14
  export * from './whereClause';
15
+ /**
16
+ * Query or update, optimized for the Query case.
17
+ * One could implement a new rule that does not use BACKTRACK.
18
+ */
19
+ export declare const queryOrUpdate: SparqlGrammarRule<'queryOrUpdate', SparqlQuery>;
@@ -1,3 +1,8 @@
1
+ import { symbols } from '../lexer';
2
+ import { updateNoReuseBlankNodeLabels } from '../validation/validators';
3
+ import { prologue } from './general';
4
+ import { askQuery, constructQuery, describeQuery, selectQuery, valuesClause } from './queryUnit';
5
+ import { update1 } from './updateUnit';
1
6
  export * from './queryUnit';
2
7
  export * from './updateUnit';
3
8
  export * from './builtIn';
@@ -10,4 +15,59 @@ export * from './propertyPaths';
10
15
  export * from './solutionModifier';
11
16
  export * from './tripleBlock';
12
17
  export * from './whereClause';
18
+ /**
19
+ * Query or update, optimized for the Query case.
20
+ * One could implement a new rule that does not use BACKTRACK.
21
+ */
22
+ export const queryOrUpdate = {
23
+ name: 'queryOrUpdate',
24
+ impl: ({ ACTION, SUBRULE, OR1, OR2, MANY, OPTION1, CONSUME, SUBRULE2 }) => (C) => {
25
+ const prologueValues = SUBRULE(prologue);
26
+ return OR1([
27
+ { ALT: () => {
28
+ const subType = OR2([
29
+ { ALT: () => SUBRULE(selectQuery) },
30
+ { ALT: () => SUBRULE(constructQuery) },
31
+ { ALT: () => SUBRULE(describeQuery) },
32
+ { ALT: () => SUBRULE(askQuery) },
33
+ ]);
34
+ const values = SUBRULE(valuesClause);
35
+ return ACTION(() => ({
36
+ context: prologueValues,
37
+ ...subType,
38
+ type: 'query',
39
+ ...(values && { values }),
40
+ loc: C.factory.sourceLocation(prologueValues.at(0), subType, values),
41
+ }));
42
+ } },
43
+ { ALT: () => {
44
+ const updates = [];
45
+ updates.push({ context: prologueValues });
46
+ let parsedSemi = true;
47
+ MANY({
48
+ GATE: () => parsedSemi,
49
+ DEF: () => {
50
+ parsedSemi = false;
51
+ updates.at(-1).operation = SUBRULE(update1);
52
+ OPTION1(() => {
53
+ CONSUME(symbols.semi);
54
+ parsedSemi = true;
55
+ const innerPrologue = SUBRULE2(prologue);
56
+ updates.push({ context: innerPrologue });
57
+ });
58
+ },
59
+ });
60
+ return ACTION(() => {
61
+ const update = {
62
+ type: 'update',
63
+ updates,
64
+ loc: C.factory.sourceLocation(...updates[0].context, updates[0].operation, ...updates.at(-1).context, updates.at(-1)?.operation),
65
+ };
66
+ updateNoReuseBlankNodeLabels(update);
67
+ return update;
68
+ });
69
+ } },
70
+ ]);
71
+ },
72
+ };
13
73
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC","sourcesContent":["export * from './queryUnit';\nexport * from './updateUnit';\nexport * from './builtIn';\nexport * from './dataSetClause';\nexport * from './expression';\nexport * from '../expressionHelpers';\nexport * from './general';\nexport * from './literals';\nexport * from './propertyPaths';\nexport * from './solutionModifier';\nexport * from './tripleBlock';\nexport * from './whereClause';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["import { symbols } from '../lexer';\nimport type { SparqlGrammarRule } from '../sparql11HelperTypes';\nimport type { Query, SparqlQuery, Update } from '../Sparql11types';\nimport { updateNoReuseBlankNodeLabels } from '../validation/validators';\nimport { prologue } from './general';\nimport type { HandledByBase } from './queryUnit';\nimport { askQuery, constructQuery, describeQuery, selectQuery, valuesClause } from './queryUnit';\nimport { update1 } from './updateUnit';\n\nexport * from './queryUnit';\nexport * from './updateUnit';\nexport * from './builtIn';\nexport * from './dataSetClause';\nexport * from './expression';\nexport * from '../expressionHelpers';\nexport * from './general';\nexport * from './literals';\nexport * from './propertyPaths';\nexport * from './solutionModifier';\nexport * from './tripleBlock';\nexport * from './whereClause';\n\n/**\n * Query or update, optimized for the Query case.\n * One could implement a new rule that does not use BACKTRACK.\n */\nexport const queryOrUpdate: SparqlGrammarRule<'queryOrUpdate', SparqlQuery> = {\n name: 'queryOrUpdate',\n impl: ({ ACTION, SUBRULE, OR1, OR2, MANY, OPTION1, CONSUME, SUBRULE2 }) => (C) => {\n const prologueValues = SUBRULE(prologue);\n return OR1<Query | Update>([\n { ALT: () => {\n const subType = OR2<Omit<Query, HandledByBase>>([\n { ALT: () => SUBRULE(selectQuery) },\n { ALT: () => SUBRULE(constructQuery) },\n { ALT: () => SUBRULE(describeQuery) },\n { ALT: () => SUBRULE(askQuery) },\n ]);\n const values = SUBRULE(valuesClause);\n return ACTION(() => (<Query>{\n context: prologueValues,\n ...subType,\n type: 'query',\n ...(values && { values }),\n loc: C.factory.sourceLocation(\n prologueValues.at(0),\n subType,\n values,\n ),\n }));\n } },\n { ALT: () => {\n const updates: Update['updates'] = [];\n updates.push({ context: prologueValues });\n let parsedSemi = true;\n MANY({\n GATE: () => parsedSemi,\n DEF: () => {\n parsedSemi = false;\n updates.at(-1)!.operation = SUBRULE(update1);\n\n OPTION1(() => {\n CONSUME(symbols.semi);\n\n parsedSemi = true;\n const innerPrologue = SUBRULE2(prologue);\n updates.push({ context: innerPrologue });\n });\n },\n });\n return ACTION(() => {\n const update = {\n type: 'update',\n updates,\n loc: C.factory.sourceLocation(\n ...updates[0].context,\n updates[0].operation,\n ...updates.at(-1)!.context,\n updates.at(-1)?.operation,\n ),\n } satisfies Update;\n updateNoReuseBlankNodeLabels(update);\n return update;\n });\n } },\n ]);\n },\n};\n"]}