Skip to content

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 02 Mar 13:44
· 828 commits to main since this release
9847957

Minor Changes

  • #9 381067b Thanks @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.

  • #14 b65e156 Thanks @flyon! - Add SPARQL conversion layer — compiles Linked IR queries into executable SPARQL and maps results back to typed DSL objects.

    New exports from @_linked/core/sparql:

    • SparqlStore — abstract base class for SPARQL-backed stores. Extend it and implement two methods to connect any SPARQL 1.1 endpoint:

      import { SparqlStore } from "@_linked/core/sparql";
      
      class MyStore extends SparqlStore {
        protected async executeSparqlSelect(
          sparql: string
        ): Promise<SparqlJsonResults> {
          /* ... */
        }
        protected async executeSparqlUpdate(sparql: string): Promise<void> {
          /* ... */
        }
      }
    • IR → SPARQL string convenience functions (full pipeline in one call):

      • selectToSparql(query, options?) — SelectQuery → SPARQL string
      • createToSparql(query, options?) — CreateQuery → SPARQL string
      • updateToSparql(query, options?) — UpdateQuery → SPARQL string
      • deleteToSparql(query, options?) — DeleteQuery → SPARQL string
    • IR → SPARQL algebra (for stores that want to inspect/optimize the algebra before serialization):

      • selectToAlgebra(query, options?) — returns SparqlSelectPlan
      • createToAlgebra(query, options?) — returns SparqlInsertDataPlan
      • updateToAlgebra(query, options?) — returns SparqlDeleteInsertPlan
      • deleteToAlgebra(query, options?) — returns SparqlDeleteInsertPlan
    • Algebra → SPARQL string serialization:

      • selectPlanToSparql(plan, options?), insertDataPlanToSparql(plan, options?), deleteInsertPlanToSparql(plan, options?), deleteWherePlanToSparql(plan, options?)
      • serializeAlgebraNode(node), serializeExpression(expr), serializeTerm(term)
    • Result mapping (SPARQL JSON results → typed DSL objects):

      • mapSparqlSelectResult(json, query) — handles flat/nested/aggregated results with XSD type coercion
      • mapSparqlCreateResult(uri, query) — echoes created fields with generated URI
      • mapSparqlUpdateResult(query) — echoes updated fields
    • All algebra types re-exported: SparqlTerm, SparqlTriple, SparqlAlgebraNode, SparqlExpression, SparqlSelectPlan, SparqlInsertDataPlan, SparqlDeleteInsertPlan, SparqlDeleteWherePlan, SparqlPlan, SparqlOptions, etc.

    Bug fixes included:

    • 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.

    See SPARQL Algebra Layer docs for the full type reference, conversion rules, and store implementation guide.