grafeo-ogm 1.0.0
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/LICENSE +21 -0
- package/README.md +1121 -0
- package/dist/cjs/compilers/fulltext.compiler.d.ts +67 -0
- package/dist/cjs/compilers/fulltext.compiler.d.ts.map +1 -0
- package/dist/cjs/compilers/fulltext.compiler.js +254 -0
- package/dist/cjs/compilers/fulltext.compiler.js.map +1 -0
- package/dist/cjs/compilers/mutation.compiler.d.ts +126 -0
- package/dist/cjs/compilers/mutation.compiler.d.ts.map +1 -0
- package/dist/cjs/compilers/mutation.compiler.js +1239 -0
- package/dist/cjs/compilers/mutation.compiler.js.map +1 -0
- package/dist/cjs/compilers/select-normalizer.d.ts +50 -0
- package/dist/cjs/compilers/select-normalizer.d.ts.map +1 -0
- package/dist/cjs/compilers/select-normalizer.js +225 -0
- package/dist/cjs/compilers/select-normalizer.js.map +1 -0
- package/dist/cjs/compilers/selection.compiler.d.ts +113 -0
- package/dist/cjs/compilers/selection.compiler.d.ts.map +1 -0
- package/dist/cjs/compilers/selection.compiler.js +410 -0
- package/dist/cjs/compilers/selection.compiler.js.map +1 -0
- package/dist/cjs/compilers/where.compiler.d.ts +39 -0
- package/dist/cjs/compilers/where.compiler.d.ts.map +1 -0
- package/dist/cjs/compilers/where.compiler.js +456 -0
- package/dist/cjs/compilers/where.compiler.js.map +1 -0
- package/dist/cjs/errors.d.ts +28 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +42 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/execution/executor.d.ts +38 -0
- package/dist/cjs/execution/executor.d.ts.map +1 -0
- package/dist/cjs/execution/executor.js +50 -0
- package/dist/cjs/execution/executor.js.map +1 -0
- package/dist/cjs/execution/result-mapper.d.ts +26 -0
- package/dist/cjs/execution/result-mapper.d.ts.map +1 -0
- package/dist/cjs/execution/result-mapper.js +92 -0
- package/dist/cjs/execution/result-mapper.js.map +1 -0
- package/dist/cjs/generator/generate-types.d.ts +55 -0
- package/dist/cjs/generator/generate-types.d.ts.map +1 -0
- package/dist/cjs/generator/generate-types.js +181 -0
- package/dist/cjs/generator/generate-types.js.map +1 -0
- package/dist/cjs/generator/index.d.ts +3 -0
- package/dist/cjs/generator/index.d.ts.map +1 -0
- package/dist/cjs/generator/index.js +6 -0
- package/dist/cjs/generator/index.js.map +1 -0
- package/dist/cjs/generator/type-emitters/aggregation-emitter.d.ts +7 -0
- package/dist/cjs/generator/type-emitters/aggregation-emitter.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/aggregation-emitter.js +196 -0
- package/dist/cjs/generator/type-emitters/aggregation-emitter.js.map +1 -0
- package/dist/cjs/generator/type-emitters/connection-emitter.d.ts +22 -0
- package/dist/cjs/generator/type-emitters/connection-emitter.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/connection-emitter.js +270 -0
- package/dist/cjs/generator/type-emitters/connection-emitter.js.map +1 -0
- package/dist/cjs/generator/type-emitters/enum-emitter.d.ts +7 -0
- package/dist/cjs/generator/type-emitters/enum-emitter.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/enum-emitter.js +45 -0
- package/dist/cjs/generator/type-emitters/enum-emitter.js.map +1 -0
- package/dist/cjs/generator/type-emitters/fulltext-emitter.d.ts +15 -0
- package/dist/cjs/generator/type-emitters/fulltext-emitter.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/fulltext-emitter.js +80 -0
- package/dist/cjs/generator/type-emitters/fulltext-emitter.js.map +1 -0
- package/dist/cjs/generator/type-emitters/helpers.d.ts +32 -0
- package/dist/cjs/generator/type-emitters/helpers.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/helpers.js +69 -0
- package/dist/cjs/generator/type-emitters/helpers.js.map +1 -0
- package/dist/cjs/generator/type-emitters/input-emitter.d.ts +6 -0
- package/dist/cjs/generator/type-emitters/input-emitter.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/input-emitter.js +560 -0
- package/dist/cjs/generator/type-emitters/input-emitter.js.map +1 -0
- package/dist/cjs/generator/type-emitters/interface-emitter.d.ts +10 -0
- package/dist/cjs/generator/type-emitters/interface-emitter.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/interface-emitter.js +88 -0
- package/dist/cjs/generator/type-emitters/interface-emitter.js.map +1 -0
- package/dist/cjs/generator/type-emitters/model-map-emitter.d.ts +32 -0
- package/dist/cjs/generator/type-emitters/model-map-emitter.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/model-map-emitter.js +154 -0
- package/dist/cjs/generator/type-emitters/model-map-emitter.js.map +1 -0
- package/dist/cjs/generator/type-emitters/mutation-response-emitter.d.ts +9 -0
- package/dist/cjs/generator/type-emitters/mutation-response-emitter.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/mutation-response-emitter.js +69 -0
- package/dist/cjs/generator/type-emitters/mutation-response-emitter.js.map +1 -0
- package/dist/cjs/generator/type-emitters/node-type-emitter.d.ts +13 -0
- package/dist/cjs/generator/type-emitters/node-type-emitter.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/node-type-emitter.js +123 -0
- package/dist/cjs/generator/type-emitters/node-type-emitter.js.map +1 -0
- package/dist/cjs/generator/type-emitters/select-fields-emitter.d.ts +8 -0
- package/dist/cjs/generator/type-emitters/select-fields-emitter.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/select-fields-emitter.js +169 -0
- package/dist/cjs/generator/type-emitters/select-fields-emitter.js.map +1 -0
- package/dist/cjs/generator/type-emitters/select-result-emitter.d.ts +9 -0
- package/dist/cjs/generator/type-emitters/select-result-emitter.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/select-result-emitter.js +61 -0
- package/dist/cjs/generator/type-emitters/select-result-emitter.js.map +1 -0
- package/dist/cjs/generator/type-emitters/sort-options-emitter.d.ts +8 -0
- package/dist/cjs/generator/type-emitters/sort-options-emitter.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/sort-options-emitter.js +47 -0
- package/dist/cjs/generator/type-emitters/sort-options-emitter.js.map +1 -0
- package/dist/cjs/generator/type-emitters/utility-types.d.ts +10 -0
- package/dist/cjs/generator/type-emitters/utility-types.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/utility-types.js +93 -0
- package/dist/cjs/generator/type-emitters/utility-types.js.map +1 -0
- package/dist/cjs/generator/type-emitters/where-emitter.d.ts +15 -0
- package/dist/cjs/generator/type-emitters/where-emitter.d.ts.map +1 -0
- package/dist/cjs/generator/type-emitters/where-emitter.js +189 -0
- package/dist/cjs/generator/type-emitters/where-emitter.js.map +1 -0
- package/dist/cjs/index.d.ts +30 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +59 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/interface-model.d.ts +158 -0
- package/dist/cjs/interface-model.d.ts.map +1 -0
- package/dist/cjs/interface-model.js +214 -0
- package/dist/cjs/interface-model.js.map +1 -0
- package/dist/cjs/model.d.ts +354 -0
- package/dist/cjs/model.d.ts.map +1 -0
- package/dist/cjs/model.js +513 -0
- package/dist/cjs/model.js.map +1 -0
- package/dist/cjs/ogm.d.ts +97 -0
- package/dist/cjs/ogm.d.ts.map +1 -0
- package/dist/cjs/ogm.js +224 -0
- package/dist/cjs/ogm.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/schema/parser.d.ts +12 -0
- package/dist/cjs/schema/parser.d.ts.map +1 -0
- package/dist/cjs/schema/parser.js +331 -0
- package/dist/cjs/schema/parser.js.map +1 -0
- package/dist/cjs/schema/types.d.ts +66 -0
- package/dist/cjs/schema/types.d.ts.map +1 -0
- package/dist/cjs/schema/types.js +3 -0
- package/dist/cjs/schema/types.js.map +1 -0
- package/dist/cjs/schema/utils.d.ts +23 -0
- package/dist/cjs/schema/utils.d.ts.map +1 -0
- package/dist/cjs/schema/utils.js +92 -0
- package/dist/cjs/schema/utils.js.map +1 -0
- package/dist/cjs/subgraph/index.d.ts +3 -0
- package/dist/cjs/subgraph/index.d.ts.map +1 -0
- package/dist/cjs/subgraph/index.js +7 -0
- package/dist/cjs/subgraph/index.js.map +1 -0
- package/dist/cjs/subgraph/subgraph-operations.d.ts +34 -0
- package/dist/cjs/subgraph/subgraph-operations.d.ts.map +1 -0
- package/dist/cjs/subgraph/subgraph-operations.js +225 -0
- package/dist/cjs/subgraph/subgraph-operations.js.map +1 -0
- package/dist/cjs/subgraph/types.d.ts +23 -0
- package/dist/cjs/subgraph/types.d.ts.map +1 -0
- package/dist/cjs/subgraph/types.js +3 -0
- package/dist/cjs/subgraph/types.js.map +1 -0
- package/dist/cjs/testing/cypher-assert.d.ts +35 -0
- package/dist/cjs/testing/cypher-assert.d.ts.map +1 -0
- package/dist/cjs/testing/cypher-assert.js +72 -0
- package/dist/cjs/testing/cypher-assert.js.map +1 -0
- package/dist/cjs/testing/index.d.ts +4 -0
- package/dist/cjs/testing/index.d.ts.map +1 -0
- package/dist/cjs/testing/index.js +10 -0
- package/dist/cjs/testing/index.js.map +1 -0
- package/dist/cjs/testing/neo4j-record-factory.d.ts +25 -0
- package/dist/cjs/testing/neo4j-record-factory.d.ts.map +1 -0
- package/dist/cjs/testing/neo4j-record-factory.js +43 -0
- package/dist/cjs/testing/neo4j-record-factory.js.map +1 -0
- package/dist/cjs/testing/selection-set-factory.d.ts +24 -0
- package/dist/cjs/testing/selection-set-factory.d.ts.map +1 -0
- package/dist/cjs/testing/selection-set-factory.js +44 -0
- package/dist/cjs/testing/selection-set-factory.js.map +1 -0
- package/dist/cjs/utils/lucene.d.ts +9 -0
- package/dist/cjs/utils/lucene.d.ts.map +1 -0
- package/dist/cjs/utils/lucene.js +25 -0
- package/dist/cjs/utils/lucene.js.map +1 -0
- package/dist/cjs/utils/validation.d.ts +25 -0
- package/dist/cjs/utils/validation.d.ts.map +1 -0
- package/dist/cjs/utils/validation.js +53 -0
- package/dist/cjs/utils/validation.js.map +1 -0
- package/dist/esm/compilers/fulltext.compiler.d.ts +67 -0
- package/dist/esm/compilers/fulltext.compiler.d.ts.map +1 -0
- package/dist/esm/compilers/fulltext.compiler.js +250 -0
- package/dist/esm/compilers/fulltext.compiler.js.map +1 -0
- package/dist/esm/compilers/mutation.compiler.d.ts +126 -0
- package/dist/esm/compilers/mutation.compiler.d.ts.map +1 -0
- package/dist/esm/compilers/mutation.compiler.js +1235 -0
- package/dist/esm/compilers/mutation.compiler.js.map +1 -0
- package/dist/esm/compilers/select-normalizer.d.ts +50 -0
- package/dist/esm/compilers/select-normalizer.d.ts.map +1 -0
- package/dist/esm/compilers/select-normalizer.js +221 -0
- package/dist/esm/compilers/select-normalizer.js.map +1 -0
- package/dist/esm/compilers/selection.compiler.d.ts +113 -0
- package/dist/esm/compilers/selection.compiler.d.ts.map +1 -0
- package/dist/esm/compilers/selection.compiler.js +406 -0
- package/dist/esm/compilers/selection.compiler.js.map +1 -0
- package/dist/esm/compilers/where.compiler.d.ts +39 -0
- package/dist/esm/compilers/where.compiler.d.ts.map +1 -0
- package/dist/esm/compilers/where.compiler.js +452 -0
- package/dist/esm/compilers/where.compiler.js.map +1 -0
- package/dist/esm/errors.d.ts +28 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +36 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/execution/executor.d.ts +38 -0
- package/dist/esm/execution/executor.d.ts.map +1 -0
- package/dist/esm/execution/executor.js +46 -0
- package/dist/esm/execution/executor.js.map +1 -0
- package/dist/esm/execution/result-mapper.d.ts +26 -0
- package/dist/esm/execution/result-mapper.d.ts.map +1 -0
- package/dist/esm/execution/result-mapper.js +85 -0
- package/dist/esm/execution/result-mapper.js.map +1 -0
- package/dist/esm/generator/generate-types.d.ts +55 -0
- package/dist/esm/generator/generate-types.d.ts.map +1 -0
- package/dist/esm/generator/generate-types.js +141 -0
- package/dist/esm/generator/generate-types.js.map +1 -0
- package/dist/esm/generator/index.d.ts +3 -0
- package/dist/esm/generator/index.d.ts.map +1 -0
- package/dist/esm/generator/index.js +2 -0
- package/dist/esm/generator/index.js.map +1 -0
- package/dist/esm/generator/type-emitters/aggregation-emitter.d.ts +7 -0
- package/dist/esm/generator/type-emitters/aggregation-emitter.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/aggregation-emitter.js +193 -0
- package/dist/esm/generator/type-emitters/aggregation-emitter.js.map +1 -0
- package/dist/esm/generator/type-emitters/connection-emitter.d.ts +22 -0
- package/dist/esm/generator/type-emitters/connection-emitter.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/connection-emitter.js +266 -0
- package/dist/esm/generator/type-emitters/connection-emitter.js.map +1 -0
- package/dist/esm/generator/type-emitters/enum-emitter.d.ts +7 -0
- package/dist/esm/generator/type-emitters/enum-emitter.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/enum-emitter.js +42 -0
- package/dist/esm/generator/type-emitters/enum-emitter.js.map +1 -0
- package/dist/esm/generator/type-emitters/fulltext-emitter.d.ts +15 -0
- package/dist/esm/generator/type-emitters/fulltext-emitter.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/fulltext-emitter.js +77 -0
- package/dist/esm/generator/type-emitters/fulltext-emitter.js.map +1 -0
- package/dist/esm/generator/type-emitters/helpers.d.ts +32 -0
- package/dist/esm/generator/type-emitters/helpers.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/helpers.js +63 -0
- package/dist/esm/generator/type-emitters/helpers.js.map +1 -0
- package/dist/esm/generator/type-emitters/input-emitter.d.ts +6 -0
- package/dist/esm/generator/type-emitters/input-emitter.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/input-emitter.js +557 -0
- package/dist/esm/generator/type-emitters/input-emitter.js.map +1 -0
- package/dist/esm/generator/type-emitters/interface-emitter.d.ts +10 -0
- package/dist/esm/generator/type-emitters/interface-emitter.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/interface-emitter.js +85 -0
- package/dist/esm/generator/type-emitters/interface-emitter.js.map +1 -0
- package/dist/esm/generator/type-emitters/model-map-emitter.d.ts +32 -0
- package/dist/esm/generator/type-emitters/model-map-emitter.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/model-map-emitter.js +149 -0
- package/dist/esm/generator/type-emitters/model-map-emitter.js.map +1 -0
- package/dist/esm/generator/type-emitters/mutation-response-emitter.d.ts +9 -0
- package/dist/esm/generator/type-emitters/mutation-response-emitter.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/mutation-response-emitter.js +66 -0
- package/dist/esm/generator/type-emitters/mutation-response-emitter.js.map +1 -0
- package/dist/esm/generator/type-emitters/node-type-emitter.d.ts +13 -0
- package/dist/esm/generator/type-emitters/node-type-emitter.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/node-type-emitter.js +120 -0
- package/dist/esm/generator/type-emitters/node-type-emitter.js.map +1 -0
- package/dist/esm/generator/type-emitters/select-fields-emitter.d.ts +8 -0
- package/dist/esm/generator/type-emitters/select-fields-emitter.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/select-fields-emitter.js +166 -0
- package/dist/esm/generator/type-emitters/select-fields-emitter.js.map +1 -0
- package/dist/esm/generator/type-emitters/select-result-emitter.d.ts +9 -0
- package/dist/esm/generator/type-emitters/select-result-emitter.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/select-result-emitter.js +58 -0
- package/dist/esm/generator/type-emitters/select-result-emitter.js.map +1 -0
- package/dist/esm/generator/type-emitters/sort-options-emitter.d.ts +8 -0
- package/dist/esm/generator/type-emitters/sort-options-emitter.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/sort-options-emitter.js +44 -0
- package/dist/esm/generator/type-emitters/sort-options-emitter.js.map +1 -0
- package/dist/esm/generator/type-emitters/utility-types.d.ts +10 -0
- package/dist/esm/generator/type-emitters/utility-types.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/utility-types.js +88 -0
- package/dist/esm/generator/type-emitters/utility-types.js.map +1 -0
- package/dist/esm/generator/type-emitters/where-emitter.d.ts +15 -0
- package/dist/esm/generator/type-emitters/where-emitter.d.ts.map +1 -0
- package/dist/esm/generator/type-emitters/where-emitter.js +186 -0
- package/dist/esm/generator/type-emitters/where-emitter.js.map +1 -0
- package/dist/esm/index.d.ts +30 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +29 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/interface-model.d.ts +158 -0
- package/dist/esm/interface-model.d.ts.map +1 -0
- package/dist/esm/interface-model.js +210 -0
- package/dist/esm/interface-model.js.map +1 -0
- package/dist/esm/model.d.ts +354 -0
- package/dist/esm/model.d.ts.map +1 -0
- package/dist/esm/model.js +507 -0
- package/dist/esm/model.js.map +1 -0
- package/dist/esm/ogm.d.ts +97 -0
- package/dist/esm/ogm.d.ts.map +1 -0
- package/dist/esm/ogm.js +220 -0
- package/dist/esm/ogm.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/schema/parser.d.ts +12 -0
- package/dist/esm/schema/parser.d.ts.map +1 -0
- package/dist/esm/schema/parser.js +324 -0
- package/dist/esm/schema/parser.js.map +1 -0
- package/dist/esm/schema/types.d.ts +66 -0
- package/dist/esm/schema/types.d.ts.map +1 -0
- package/dist/esm/schema/types.js +2 -0
- package/dist/esm/schema/types.js.map +1 -0
- package/dist/esm/schema/utils.d.ts +23 -0
- package/dist/esm/schema/utils.d.ts.map +1 -0
- package/dist/esm/schema/utils.js +87 -0
- package/dist/esm/schema/utils.js.map +1 -0
- package/dist/esm/subgraph/index.d.ts +3 -0
- package/dist/esm/subgraph/index.d.ts.map +1 -0
- package/dist/esm/subgraph/index.js +2 -0
- package/dist/esm/subgraph/index.js.map +1 -0
- package/dist/esm/subgraph/subgraph-operations.d.ts +34 -0
- package/dist/esm/subgraph/subgraph-operations.d.ts.map +1 -0
- package/dist/esm/subgraph/subgraph-operations.js +221 -0
- package/dist/esm/subgraph/subgraph-operations.js.map +1 -0
- package/dist/esm/subgraph/types.d.ts +23 -0
- package/dist/esm/subgraph/types.d.ts.map +1 -0
- package/dist/esm/subgraph/types.js +2 -0
- package/dist/esm/subgraph/types.js.map +1 -0
- package/dist/esm/testing/cypher-assert.d.ts +35 -0
- package/dist/esm/testing/cypher-assert.d.ts.map +1 -0
- package/dist/esm/testing/cypher-assert.js +68 -0
- package/dist/esm/testing/cypher-assert.js.map +1 -0
- package/dist/esm/testing/index.d.ts +4 -0
- package/dist/esm/testing/index.d.ts.map +1 -0
- package/dist/esm/testing/index.js +4 -0
- package/dist/esm/testing/index.js.map +1 -0
- package/dist/esm/testing/neo4j-record-factory.d.ts +25 -0
- package/dist/esm/testing/neo4j-record-factory.d.ts.map +1 -0
- package/dist/esm/testing/neo4j-record-factory.js +36 -0
- package/dist/esm/testing/neo4j-record-factory.js.map +1 -0
- package/dist/esm/testing/selection-set-factory.d.ts +24 -0
- package/dist/esm/testing/selection-set-factory.d.ts.map +1 -0
- package/dist/esm/testing/selection-set-factory.js +40 -0
- package/dist/esm/testing/selection-set-factory.js.map +1 -0
- package/dist/esm/utils/lucene.d.ts +9 -0
- package/dist/esm/utils/lucene.d.ts.map +1 -0
- package/dist/esm/utils/lucene.js +22 -0
- package/dist/esm/utils/lucene.js.map +1 -0
- package/dist/esm/utils/validation.d.ts +25 -0
- package/dist/esm/utils/validation.d.ts.map +1 -0
- package/dist/esm/utils/validation.js +46 -0
- package/dist/esm/utils/validation.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SelectionCompiler = void 0;
|
|
4
|
+
const graphql_1 = require("graphql");
|
|
5
|
+
const errors_1 = require("../errors");
|
|
6
|
+
const utils_1 = require("../schema/utils");
|
|
7
|
+
const validation_1 = require("../utils/validation");
|
|
8
|
+
/**
|
|
9
|
+
* Compiles a selection set (parsed SelectionNode[]) into a Cypher RETURN map projection.
|
|
10
|
+
*
|
|
11
|
+
* Handles scalar fields, relationship pattern comprehensions (array and singular),
|
|
12
|
+
* connection fields with edge properties, and nested traversals with depth limiting.
|
|
13
|
+
*/
|
|
14
|
+
class SelectionCompiler {
|
|
15
|
+
constructor(schema, whereCompiler) {
|
|
16
|
+
this.schema = schema;
|
|
17
|
+
/**
|
|
18
|
+
* Cache of parsed selection sets capped at 200 entries.
|
|
19
|
+
* No eviction — assumes bounded selection set variety (fixed set of
|
|
20
|
+
* selectionSet strings used across resolvers). Stops adding after 200.
|
|
21
|
+
*/
|
|
22
|
+
this.parseCache = new Map();
|
|
23
|
+
this.whereCompiler = whereCompiler;
|
|
24
|
+
}
|
|
25
|
+
/** Clear the parse cache. Useful in tests to prevent cross-test pollution. */
|
|
26
|
+
clearCache() {
|
|
27
|
+
this.parseCache.clear();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Compile selection nodes into a Cypher map projection string.
|
|
31
|
+
*
|
|
32
|
+
* @param selection - Parsed selection nodes
|
|
33
|
+
* @param nodeVar - Cypher variable for the matched node (e.g., 'n')
|
|
34
|
+
* @param nodeDef - Node definition from schema metadata
|
|
35
|
+
* @param maxDepth - Maximum traversal depth (default 5)
|
|
36
|
+
* @param currentDepth - Current depth (used internally for recursion)
|
|
37
|
+
* @returns Cypher map projection string, e.g. "n { .id, .name, drugs: [...] }"
|
|
38
|
+
*/
|
|
39
|
+
compile(selection, nodeVar, nodeDef, maxDepth = SelectionCompiler.DEFAULT_MAX_DEPTH, currentDepth = 0, params, paramCounter) {
|
|
40
|
+
if (selection.length === 0)
|
|
41
|
+
return `${nodeVar} { .id }`;
|
|
42
|
+
// Check if this nodeDef is a resolved union type — if so, relationship
|
|
43
|
+
// fields need CASE WHEN branches since different union members may have
|
|
44
|
+
// the same field name but different underlying relationship types.
|
|
45
|
+
const unionMembers = this.schema.unions?.get(nodeDef.typeName);
|
|
46
|
+
const parts = [];
|
|
47
|
+
for (const node of selection) {
|
|
48
|
+
if (node.isScalar) {
|
|
49
|
+
// __typename is a GraphQL concept — Neo4j nodes don't have this property.
|
|
50
|
+
// Synthesize it from node labels for union targets, or emit a constant.
|
|
51
|
+
if (node.fieldName === '__typename') {
|
|
52
|
+
const typenameExpr = this.compileTypename(nodeVar, nodeDef);
|
|
53
|
+
if (typenameExpr)
|
|
54
|
+
parts.push(`__typename: ${typenameExpr}`);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
(0, validation_1.assertSafeIdentifier)(node.fieldName, 'selection field');
|
|
58
|
+
parts.push(`.${(0, validation_1.escapeIdentifier)(node.fieldName)}`);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (node.isConnection) {
|
|
62
|
+
const connectionCypher = this.compileConnection(node, nodeVar, nodeDef, maxDepth, currentDepth, params, paramCounter);
|
|
63
|
+
if (connectionCypher)
|
|
64
|
+
parts.push(`${node.fieldName}: ${connectionCypher}`);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (node.isRelationship) {
|
|
68
|
+
// For union targets, relationship fields may have different relationship
|
|
69
|
+
// types across members. Generate CASE WHEN branches per member.
|
|
70
|
+
if (unionMembers && unionMembers.length > 0) {
|
|
71
|
+
const caseCypher = this.compileUnionRelationshipField(node, nodeVar, unionMembers, maxDepth, currentDepth, params, paramCounter);
|
|
72
|
+
if (caseCypher)
|
|
73
|
+
parts.push(`${node.fieldName}: ${caseCypher}`);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const relCypher = this.compileRelationship(node, nodeVar, nodeDef, maxDepth, currentDepth, params, paramCounter);
|
|
77
|
+
if (relCypher)
|
|
78
|
+
parts.push(`${node.fieldName}: ${relCypher}`);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return `${nodeVar} { ${parts.join(', ')} }`;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Parse a GraphQL selection set string into SelectionNode[].
|
|
86
|
+
*
|
|
87
|
+
* @param selectionSet - Raw string like "\{ id name drugs \{ id \} \}"
|
|
88
|
+
* @returns Parsed SelectionNode array
|
|
89
|
+
*/
|
|
90
|
+
parseSelectionSet(selectionSet) {
|
|
91
|
+
const cached = this.parseCache.get(selectionSet);
|
|
92
|
+
if (cached)
|
|
93
|
+
return cached;
|
|
94
|
+
const trimmed = selectionSet.trim();
|
|
95
|
+
// Wrap in a dummy query so graphql parser can handle it
|
|
96
|
+
const query = `query { dummy ${trimmed} }`;
|
|
97
|
+
let doc;
|
|
98
|
+
try {
|
|
99
|
+
doc = (0, graphql_1.parse)(query);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
throw new errors_1.OGMError(`Failed to parse selectionSet: ${err instanceof Error ? err.message : String(err)}`);
|
|
103
|
+
}
|
|
104
|
+
const opDef = doc.definitions[0];
|
|
105
|
+
if (opDef.kind !== graphql_1.Kind.OPERATION_DEFINITION)
|
|
106
|
+
return [];
|
|
107
|
+
const dummyField = opDef.selectionSet.selections[0];
|
|
108
|
+
if (dummyField.kind !== graphql_1.Kind.FIELD || !dummyField.selectionSet)
|
|
109
|
+
return [];
|
|
110
|
+
const result = this.convertSelectionSet(dummyField.selectionSet);
|
|
111
|
+
if (this.parseCache.size < 200)
|
|
112
|
+
this.parseCache.set(selectionSet, result);
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Convert a GraphQL SelectionSetNode into SelectionNode[].
|
|
117
|
+
*/
|
|
118
|
+
convertSelectionSet(selectionSet) {
|
|
119
|
+
const nodes = [];
|
|
120
|
+
const seen = new Set();
|
|
121
|
+
for (const sel of selectionSet.selections) {
|
|
122
|
+
// Handle inline fragments (... on Type { fields }) by merging their fields
|
|
123
|
+
if (sel.kind === graphql_1.Kind.INLINE_FRAGMENT) {
|
|
124
|
+
const fragment = sel;
|
|
125
|
+
if (fragment.selectionSet)
|
|
126
|
+
for (const merged of this.convertSelectionSet(fragment.selectionSet))
|
|
127
|
+
if (!seen.has(merged.fieldName)) {
|
|
128
|
+
seen.add(merged.fieldName);
|
|
129
|
+
nodes.push(merged);
|
|
130
|
+
}
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (sel.kind !== graphql_1.Kind.FIELD)
|
|
134
|
+
continue;
|
|
135
|
+
const field = sel;
|
|
136
|
+
const fieldName = field.name.value;
|
|
137
|
+
if (seen.has(fieldName))
|
|
138
|
+
continue;
|
|
139
|
+
seen.add(fieldName);
|
|
140
|
+
const hasChildren = !!field.selectionSet;
|
|
141
|
+
const isConnection = fieldName.endsWith('Connection');
|
|
142
|
+
const node = {
|
|
143
|
+
fieldName,
|
|
144
|
+
alias: field.alias?.value,
|
|
145
|
+
isScalar: !hasChildren,
|
|
146
|
+
isRelationship: hasChildren && !isConnection,
|
|
147
|
+
isConnection,
|
|
148
|
+
};
|
|
149
|
+
if (hasChildren && field.selectionSet)
|
|
150
|
+
if (isConnection)
|
|
151
|
+
// For connections, parse edges -> node and edges -> properties
|
|
152
|
+
this.parseConnectionChildren(field.selectionSet, node);
|
|
153
|
+
else
|
|
154
|
+
node.children = this.convertSelectionSet(field.selectionSet);
|
|
155
|
+
nodes.push(node);
|
|
156
|
+
}
|
|
157
|
+
return nodes;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Parse the children of a connection field, extracting node and edge children.
|
|
161
|
+
*/
|
|
162
|
+
parseConnectionChildren(selectionSet, parentNode) {
|
|
163
|
+
for (const sel of selectionSet.selections) {
|
|
164
|
+
if (sel.kind !== graphql_1.Kind.FIELD)
|
|
165
|
+
continue;
|
|
166
|
+
const field = sel;
|
|
167
|
+
if (field.name.value === 'edges' && field.selectionSet)
|
|
168
|
+
for (const edgeSel of field.selectionSet.selections) {
|
|
169
|
+
if (edgeSel.kind !== graphql_1.Kind.FIELD)
|
|
170
|
+
continue;
|
|
171
|
+
const edgeField = edgeSel;
|
|
172
|
+
if (edgeField.name.value === 'node' && edgeField.selectionSet)
|
|
173
|
+
parentNode.children = this.convertSelectionSet(edgeField.selectionSet);
|
|
174
|
+
if (edgeField.name.value === 'properties' && edgeField.selectionSet)
|
|
175
|
+
parentNode.edgeChildren = this.convertSelectionSet(edgeField.selectionSet);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Compile a relationship field into a Cypher pattern comprehension.
|
|
181
|
+
*/
|
|
182
|
+
compileRelationship(node, parentVar, parentDef, maxDepth, currentDepth, params, paramCounter) {
|
|
183
|
+
if (currentDepth >= maxDepth)
|
|
184
|
+
return null;
|
|
185
|
+
const relDef = parentDef.relationships.get(node.fieldName);
|
|
186
|
+
if (!relDef)
|
|
187
|
+
return null;
|
|
188
|
+
const targetDef = (0, utils_1.resolveTargetDef)(relDef.target, this.schema);
|
|
189
|
+
if (!targetDef)
|
|
190
|
+
return null;
|
|
191
|
+
const childVar = `n${currentDepth}`;
|
|
192
|
+
const pattern = this.buildRelationshipPattern(parentVar, childVar, relDef);
|
|
193
|
+
const children = node.children ?? [];
|
|
194
|
+
const innerProjection = this.compile(children, childVar, targetDef, maxDepth, currentDepth + 1, params, paramCounter);
|
|
195
|
+
// Compile WHERE clause for relationship filtering (Prisma-like select)
|
|
196
|
+
let whereClause = '';
|
|
197
|
+
if (node.relationshipWhere &&
|
|
198
|
+
Object.keys(node.relationshipWhere).length > 0 &&
|
|
199
|
+
this.whereCompiler &&
|
|
200
|
+
params &&
|
|
201
|
+
paramCounter) {
|
|
202
|
+
const whereResult = this.whereCompiler.compile(node.relationshipWhere, childVar, targetDef, paramCounter);
|
|
203
|
+
if (whereResult.cypher) {
|
|
204
|
+
Object.assign(params, whereResult.params);
|
|
205
|
+
whereClause = ` WHERE ${whereResult.cypher}`;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
const comprehension = `[${pattern}${whereClause} | ${innerProjection}]`;
|
|
209
|
+
// Wrap singular relationships with head()
|
|
210
|
+
if (!relDef.isArray)
|
|
211
|
+
return `head(${comprehension})`;
|
|
212
|
+
return comprehension;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Compile a relationship field within a union-target context.
|
|
216
|
+
*
|
|
217
|
+
* Different union members can have the same field name (e.g., "populations")
|
|
218
|
+
* but different underlying Neo4j relationship types. This generates a
|
|
219
|
+
* CASE WHEN expression that checks the node's labels and uses the correct
|
|
220
|
+
* relationship type for each member.
|
|
221
|
+
*
|
|
222
|
+
* Example output:
|
|
223
|
+
* CASE
|
|
224
|
+
* WHEN n0:FormPresentationIcon THEN [(n0)-[:FP_POP]->(p:Population) | p { .id }]
|
|
225
|
+
* WHEN n0:AdministrationRateIcon THEN [(n0)-[:AR_POP]->(p:Population) | p { .id }]
|
|
226
|
+
* ELSE []
|
|
227
|
+
* END
|
|
228
|
+
*/
|
|
229
|
+
compileUnionRelationshipField(node, nodeVar, unionMembers, maxDepth, currentDepth, params, paramCounter) {
|
|
230
|
+
if (currentDepth >= maxDepth)
|
|
231
|
+
return null;
|
|
232
|
+
const branches = [];
|
|
233
|
+
let isSingular = false;
|
|
234
|
+
for (const memberName of unionMembers) {
|
|
235
|
+
const memberDef = this.schema.nodes.get(memberName);
|
|
236
|
+
if (!memberDef)
|
|
237
|
+
continue;
|
|
238
|
+
const relDef = memberDef.relationships.get(node.fieldName);
|
|
239
|
+
if (!relDef)
|
|
240
|
+
continue;
|
|
241
|
+
const targetDef = (0, utils_1.resolveTargetDef)(relDef.target, this.schema);
|
|
242
|
+
if (!targetDef)
|
|
243
|
+
continue;
|
|
244
|
+
// Track whether this is a singular (non-array) relationship
|
|
245
|
+
if (!relDef.isArray)
|
|
246
|
+
isSingular = true;
|
|
247
|
+
const childVar = `n${currentDepth}`;
|
|
248
|
+
const children = node.children ?? [];
|
|
249
|
+
const innerProjection = this.compile(children, childVar, targetDef, maxDepth, currentDepth + 1, params, paramCounter);
|
|
250
|
+
const escapedType = (0, validation_1.escapeIdentifier)(relDef.type);
|
|
251
|
+
const edgePart = `[:${escapedType}]`;
|
|
252
|
+
const escapedTarget = (0, validation_1.escapeIdentifier)(relDef.target);
|
|
253
|
+
const targetLabel = this.isAbstractTarget(relDef.target)
|
|
254
|
+
? `(${childVar})`
|
|
255
|
+
: `(${childVar}:${escapedTarget})`;
|
|
256
|
+
let pattern;
|
|
257
|
+
if (relDef.direction === 'IN')
|
|
258
|
+
pattern = `(${nodeVar})<-${edgePart}-${targetLabel}`;
|
|
259
|
+
else
|
|
260
|
+
pattern = `(${nodeVar})-${edgePart}->${targetLabel}`;
|
|
261
|
+
// Wrap singular relationships with head() to return object instead of array
|
|
262
|
+
const comprehension = isSingular
|
|
263
|
+
? `head([${pattern} | ${innerProjection}])`
|
|
264
|
+
: `[${pattern} | ${innerProjection}]`;
|
|
265
|
+
const memberLabel = (0, validation_1.escapeIdentifier)(memberName);
|
|
266
|
+
branches.push(`WHEN ${nodeVar}:${memberLabel} THEN ${comprehension}`);
|
|
267
|
+
}
|
|
268
|
+
if (branches.length === 0)
|
|
269
|
+
return null;
|
|
270
|
+
const elseClause = isSingular ? 'null' : '[]';
|
|
271
|
+
return `CASE ${branches.join(' ')} ELSE ${elseClause} END`;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Compile a connection field into a Cypher pattern comprehension with edge properties.
|
|
275
|
+
*/
|
|
276
|
+
compileConnection(node, parentVar, parentDef, maxDepth, currentDepth, params, paramCounter) {
|
|
277
|
+
if (currentDepth >= maxDepth)
|
|
278
|
+
return null;
|
|
279
|
+
// Strip 'Connection' suffix to find the relationship field
|
|
280
|
+
const baseFieldName = node.fieldName.replace(/Connection$/, '');
|
|
281
|
+
const relDef = parentDef.relationships.get(baseFieldName);
|
|
282
|
+
if (!relDef)
|
|
283
|
+
return null;
|
|
284
|
+
const targetDef = (0, utils_1.resolveTargetDef)(relDef.target, this.schema);
|
|
285
|
+
if (!targetDef)
|
|
286
|
+
return null;
|
|
287
|
+
const childVar = `n${currentDepth}`;
|
|
288
|
+
const edgeVar = `e${currentDepth}`;
|
|
289
|
+
const pattern = this.buildRelationshipPattern(parentVar, childVar, relDef, edgeVar);
|
|
290
|
+
const mapParts = [];
|
|
291
|
+
// Compile node projection
|
|
292
|
+
if (node.children && node.children.length > 0) {
|
|
293
|
+
const nodeProjection = this.compile(node.children, childVar, targetDef, maxDepth, currentDepth + 1, params, paramCounter);
|
|
294
|
+
mapParts.push(`node: ${nodeProjection}`);
|
|
295
|
+
}
|
|
296
|
+
// Compile edge properties projection
|
|
297
|
+
if (node.edgeChildren && node.edgeChildren.length > 0) {
|
|
298
|
+
const edgeFields = node.edgeChildren
|
|
299
|
+
.filter((c) => c.isScalar)
|
|
300
|
+
.map((c) => `.${(0, validation_1.escapeIdentifier)(c.fieldName)}`)
|
|
301
|
+
.join(', ');
|
|
302
|
+
mapParts.push(`properties: ${edgeVar} { ${edgeFields} }`);
|
|
303
|
+
}
|
|
304
|
+
const innerMap = `{ ${mapParts.join(', ')} }`;
|
|
305
|
+
// Add WHERE clause if connectionWhere is present
|
|
306
|
+
let whereClause = '';
|
|
307
|
+
if (node.connectionWhere && Object.keys(node.connectionWhere).length > 0) {
|
|
308
|
+
// Reject unsupported edge WHERE filters with a descriptive error
|
|
309
|
+
if (node.connectionWhere.edge !== undefined)
|
|
310
|
+
throw new errors_1.OGMError(`Connection WHERE with "edge" filters is not supported. ` +
|
|
311
|
+
`Only "node" filters are supported for connection "${node.fieldName}".`);
|
|
312
|
+
// Unwrap { node: { ... } } wrapper if present
|
|
313
|
+
const nodeWhere = typeof node.connectionWhere.node === 'object' &&
|
|
314
|
+
node.connectionWhere.node !== null
|
|
315
|
+
? node.connectionWhere.node
|
|
316
|
+
: node.connectionWhere;
|
|
317
|
+
// If we have a full WhereCompiler, delegate to it for complete operator support
|
|
318
|
+
if (this.whereCompiler && targetDef) {
|
|
319
|
+
const whereResult = this.whereCompiler.compile(nodeWhere, childVar, targetDef, paramCounter);
|
|
320
|
+
if (whereResult.cypher) {
|
|
321
|
+
if (params)
|
|
322
|
+
Object.assign(params, whereResult.params);
|
|
323
|
+
whereClause = ` WHERE ${whereResult.cypher}`;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
const simpleWhere = this.compileSimpleWhere(node.connectionWhere, childVar, params, paramCounter);
|
|
328
|
+
if (simpleWhere)
|
|
329
|
+
whereClause = ` WHERE ${simpleWhere}`;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return `{ edges: [${pattern}${whereClause} | ${innerMap}] }`;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Compile a __typename expression for a node.
|
|
336
|
+
* For union targets: picks the label matching a union member name.
|
|
337
|
+
* For concrete types: returns a string constant.
|
|
338
|
+
*/
|
|
339
|
+
compileTypename(nodeVar, nodeDef) {
|
|
340
|
+
const unionMembers = this.schema.unions?.get(nodeDef.typeName);
|
|
341
|
+
if (unionMembers && unionMembers.length > 0) {
|
|
342
|
+
const memberList = unionMembers.map((m) => `'${m}'`).join(', ');
|
|
343
|
+
return `head([__label IN labels(${nodeVar}) WHERE __label IN [${memberList}]])`;
|
|
344
|
+
}
|
|
345
|
+
return `'${nodeDef.typeName}'`;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Check if a target type name is a union or interface (not a concrete node label).
|
|
349
|
+
* Union/interface names don't exist as Neo4j labels, so they must be omitted
|
|
350
|
+
* from relationship patterns to avoid matching zero nodes.
|
|
351
|
+
*/
|
|
352
|
+
isAbstractTarget(target) {
|
|
353
|
+
if (this.schema.nodes.has(target))
|
|
354
|
+
return false;
|
|
355
|
+
return !!(this.schema.unions?.has(target) || this.schema.interfaces?.has(target));
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Build a Cypher relationship pattern string respecting direction.
|
|
359
|
+
* For union/interface targets, omits the label filter since those
|
|
360
|
+
* type names don't exist as Neo4j labels.
|
|
361
|
+
*/
|
|
362
|
+
buildRelationshipPattern(parentVar, childVar, relDef, edgeVar) {
|
|
363
|
+
const escapedType = (0, validation_1.escapeIdentifier)(relDef.type);
|
|
364
|
+
const edgePart = edgeVar
|
|
365
|
+
? `[${edgeVar}:${escapedType}]`
|
|
366
|
+
: `[:${escapedType}]`;
|
|
367
|
+
// Union/interface targets don't have a corresponding Neo4j label —
|
|
368
|
+
// match by relationship type only, not by target label.
|
|
369
|
+
const targetPart = this.isAbstractTarget(relDef.target)
|
|
370
|
+
? `(${childVar})`
|
|
371
|
+
: `(${childVar}:${(0, validation_1.escapeIdentifier)(relDef.target)})`;
|
|
372
|
+
if (relDef.direction === 'IN')
|
|
373
|
+
return `(${parentVar})<-${edgePart}-${targetPart}`;
|
|
374
|
+
// OUT (default)
|
|
375
|
+
return `(${parentVar})-${edgePart}->${targetPart}`;
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Compile a simple where object into a Cypher WHERE clause fragment.
|
|
379
|
+
* This is a minimal implementation for connection where filters.
|
|
380
|
+
*/
|
|
381
|
+
compileSimpleWhere(where, nodeVar, params, paramCounter) {
|
|
382
|
+
if (!params || !paramCounter)
|
|
383
|
+
throw new errors_1.OGMError('compileSimpleWhere requires params and paramCounter for safe parameterization');
|
|
384
|
+
const conditions = [];
|
|
385
|
+
for (const [key, value] of Object.entries(where)) {
|
|
386
|
+
// Handle nested { node: { ... } } pattern
|
|
387
|
+
if (key === 'node' && typeof value === 'object' && value !== null)
|
|
388
|
+
return this.compileSimpleWhere(value, nodeVar, params, paramCounter);
|
|
389
|
+
if (key.endsWith('_IN') && Array.isArray(value)) {
|
|
390
|
+
const fieldName = key.slice(0, -3);
|
|
391
|
+
(0, validation_1.assertSafeIdentifier)(fieldName, 'connection where');
|
|
392
|
+
const paramName = `sel_param${paramCounter.count++}`;
|
|
393
|
+
params[paramName] = value;
|
|
394
|
+
conditions.push(`${nodeVar}.${(0, validation_1.escapeIdentifier)(fieldName)} IN $${paramName}`);
|
|
395
|
+
}
|
|
396
|
+
else if (typeof value === 'string' ||
|
|
397
|
+
typeof value === 'number' ||
|
|
398
|
+
typeof value === 'boolean') {
|
|
399
|
+
(0, validation_1.assertSafeIdentifier)(key, 'connection where');
|
|
400
|
+
const paramName = `sel_param${paramCounter.count++}`;
|
|
401
|
+
params[paramName] = value;
|
|
402
|
+
conditions.push(`${nodeVar}.${(0, validation_1.escapeIdentifier)(key)} = $${paramName}`);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return conditions.join(' AND ');
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
exports.SelectionCompiler = SelectionCompiler;
|
|
409
|
+
SelectionCompiler.DEFAULT_MAX_DEPTH = 5;
|
|
410
|
+
//# sourceMappingURL=selection.compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection.compiler.js","sourceRoot":"","sources":["../../../src/compilers/selection.compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { NodeDefinition, SchemaMetadata } from '../schema/types';
|
|
2
|
+
export interface WhereResult {
|
|
3
|
+
cypher: string;
|
|
4
|
+
params: Record<string, unknown>;
|
|
5
|
+
}
|
|
6
|
+
/** Ordered longest-first so greedy matching works */
|
|
7
|
+
declare const OPERATOR_SUFFIXES: readonly ["_NOT_STARTS_WITH", "_NOT_ENDS_WITH", "_NOT_CONTAINS", "_NOT_IN", "_STARTS_WITH", "_ENDS_WITH", "_CONTAINS", "_MATCHES", "_GTE", "_LTE", "_NOT", "_GT", "_LT", "_IN"];
|
|
8
|
+
type OperatorSuffix = (typeof OPERATOR_SUFFIXES)[number];
|
|
9
|
+
export interface WhereCompilerOptions {
|
|
10
|
+
/** Set of operator suffixes to reject at runtime (e.g. `new Set(['_MATCHES'])`) */
|
|
11
|
+
disabledOperators?: Set<OperatorSuffix>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Compiles a Where input object into a Cypher WHERE clause fragment + params.
|
|
15
|
+
*/
|
|
16
|
+
export declare class WhereCompiler {
|
|
17
|
+
private schema;
|
|
18
|
+
private disabledOperators;
|
|
19
|
+
constructor(schema: SchemaMetadata, options?: WhereCompilerOptions);
|
|
20
|
+
compile(where: Record<string, unknown> | undefined | null, nodeVar: string, nodeDef: NodeDefinition, paramCounter?: {
|
|
21
|
+
count: number;
|
|
22
|
+
}): WhereResult;
|
|
23
|
+
private compileConditions;
|
|
24
|
+
private tryCompileConnection;
|
|
25
|
+
private tryCompileRelationship;
|
|
26
|
+
/**
|
|
27
|
+
* Compiles a relationship WHERE clause targeting a union type.
|
|
28
|
+
* Union WHERE inputs use member names as keys (e.g., `{ StandardDose: {} }`).
|
|
29
|
+
* Each member generates a separate EXISTS pattern using the member's labels.
|
|
30
|
+
* Multiple members are combined with OR.
|
|
31
|
+
*/
|
|
32
|
+
private compileUnionRelationship;
|
|
33
|
+
private buildRelPattern;
|
|
34
|
+
private buildRelPatternWithLabel;
|
|
35
|
+
private compileEdgeConditions;
|
|
36
|
+
private compileScalarCondition;
|
|
37
|
+
}
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=where.compiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"where.compiler.d.ts","sourceRoot":"","sources":["../../../src/compilers/where.compiler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EAEd,cAAc,EACf,MAAM,iBAAiB,CAAC;AAQzB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAID,qDAAqD;AACrD,QAAA,MAAM,iBAAiB,iLAeb,CAAC;AAEX,KAAK,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAgBzD,MAAM,WAAW,oBAAoB;IACnC,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,qBAAa,aAAa;IAItB,OAAO,CAAC,MAAM;IAHhB,OAAO,CAAC,iBAAiB,CAAsB;gBAGrC,MAAM,EAAE,cAAc,EAC9B,OAAO,CAAC,EAAE,oBAAoB;IAKhC,OAAO,CACL,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,EACjD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,EACvB,YAAY,GAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAiB,GAC7C,WAAW;IAOd,OAAO,CAAC,iBAAiB;IAwHzB,OAAO,CAAC,oBAAoB;IA2G5B,OAAO,CAAC,sBAAsB;IAuG9B;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IA4EhC,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,qBAAqB;IAqB7B,OAAO,CAAC,sBAAsB;CA+G/B"}
|