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,26 @@
|
|
|
1
|
+
import { Record as Neo4jRecord } from 'neo4j-driver';
|
|
2
|
+
/**
|
|
3
|
+
* Maps Neo4j query results to plain JavaScript objects,
|
|
4
|
+
* converting Neo4j-specific types (Integer, DateTime, Node, etc.)
|
|
5
|
+
* to standard JS values.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ResultMapper {
|
|
8
|
+
/**
|
|
9
|
+
* Convert a Neo4j Record to a plain object, handling Neo4j-specific types.
|
|
10
|
+
* If returnKey is provided, extracts that key from the record.
|
|
11
|
+
* Otherwise converts the entire record to an object.
|
|
12
|
+
*/
|
|
13
|
+
static mapRecord(record: Neo4jRecord, returnKey?: string): Record<string, unknown>;
|
|
14
|
+
/**
|
|
15
|
+
* Map all records from a query result.
|
|
16
|
+
*/
|
|
17
|
+
static mapRecords(records: Neo4jRecord[], returnKey?: string): Record<string, unknown>[];
|
|
18
|
+
/**
|
|
19
|
+
* Convert Neo4j-specific types to plain JS values recursively.
|
|
20
|
+
* Handles: Integer, DateTime, Date, Time, Point, Node, Relationship, arrays, objects.
|
|
21
|
+
* Note: The driver is typically configured with disableLosslessIntegers: true,
|
|
22
|
+
* so Integer conversion is mainly for safety.
|
|
23
|
+
*/
|
|
24
|
+
static convertNeo4jTypes(value: unknown, depth?: number): unknown;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=result-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-mapper.d.ts","sourceRoot":"","sources":["../../../src/execution/result-mapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AAGrD;;;;GAIG;AACH,qBAAa,YAAY;IACvB;;;;OAIG;IACH,MAAM,CAAC,SAAS,CACd,MAAM,EAAE,WAAW,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAU1B;;OAEG;IACH,MAAM,CAAC,UAAU,CACf,OAAO,EAAE,WAAW,EAAE,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAI5B;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO;CA+DrE"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import neo4j from 'neo4j-driver';
|
|
2
|
+
import { OGMError } from '../errors';
|
|
3
|
+
/**
|
|
4
|
+
* Maps Neo4j query results to plain JavaScript objects,
|
|
5
|
+
* converting Neo4j-specific types (Integer, DateTime, Node, etc.)
|
|
6
|
+
* to standard JS values.
|
|
7
|
+
*/
|
|
8
|
+
export class ResultMapper {
|
|
9
|
+
/**
|
|
10
|
+
* Convert a Neo4j Record to a plain object, handling Neo4j-specific types.
|
|
11
|
+
* If returnKey is provided, extracts that key from the record.
|
|
12
|
+
* Otherwise converts the entire record to an object.
|
|
13
|
+
*/
|
|
14
|
+
static mapRecord(record, returnKey) {
|
|
15
|
+
if (returnKey) {
|
|
16
|
+
const value = record.get(returnKey);
|
|
17
|
+
return ResultMapper.convertNeo4jTypes(value);
|
|
18
|
+
}
|
|
19
|
+
const obj = record.toObject();
|
|
20
|
+
return ResultMapper.convertNeo4jTypes(obj);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Map all records from a query result.
|
|
24
|
+
*/
|
|
25
|
+
static mapRecords(records, returnKey) {
|
|
26
|
+
return records.map((record) => ResultMapper.mapRecord(record, returnKey));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Convert Neo4j-specific types to plain JS values recursively.
|
|
30
|
+
* Handles: Integer, DateTime, Date, Time, Point, Node, Relationship, arrays, objects.
|
|
31
|
+
* Note: The driver is typically configured with disableLosslessIntegers: true,
|
|
32
|
+
* so Integer conversion is mainly for safety.
|
|
33
|
+
*/
|
|
34
|
+
static convertNeo4jTypes(value, depth = 0) {
|
|
35
|
+
// Guard against pathological nesting causing stack overflow
|
|
36
|
+
if (depth > 50)
|
|
37
|
+
throw new OGMError('convertNeo4jTypes: maximum recursion depth (50) exceeded. Possible circular or deeply nested result.');
|
|
38
|
+
// Fast path: null/undefined
|
|
39
|
+
if (value === null || value === undefined)
|
|
40
|
+
return value;
|
|
41
|
+
// Fast path: primitives (most common in query results)
|
|
42
|
+
if (typeof value !== 'object')
|
|
43
|
+
return value;
|
|
44
|
+
// Neo4j Integer → number
|
|
45
|
+
if (neo4j.isInt(value))
|
|
46
|
+
return value.toNumber();
|
|
47
|
+
// Array → map each element (check before other object types)
|
|
48
|
+
if (Array.isArray(value))
|
|
49
|
+
return value.map((item) => ResultMapper.convertNeo4jTypes(item, depth + 1));
|
|
50
|
+
// Neo4j temporal types → ISO string
|
|
51
|
+
if (neo4j.isDateTime(value) ||
|
|
52
|
+
neo4j.isDate(value) ||
|
|
53
|
+
neo4j.isTime(value) ||
|
|
54
|
+
neo4j.isLocalDateTime(value) ||
|
|
55
|
+
neo4j.isLocalTime(value) ||
|
|
56
|
+
neo4j.isDuration(value))
|
|
57
|
+
return value.toString();
|
|
58
|
+
// Neo4j Point → plain object
|
|
59
|
+
if (neo4j.isPoint(value)) {
|
|
60
|
+
const point = {
|
|
61
|
+
x: value.x,
|
|
62
|
+
y: value.y,
|
|
63
|
+
srid: value.srid,
|
|
64
|
+
};
|
|
65
|
+
if (value.z !== undefined)
|
|
66
|
+
point.z = value.z;
|
|
67
|
+
return point;
|
|
68
|
+
}
|
|
69
|
+
// Neo4j Node → convert its properties
|
|
70
|
+
if (value instanceof neo4j.types.Node)
|
|
71
|
+
return ResultMapper.convertNeo4jTypes(value.properties, depth + 1);
|
|
72
|
+
// Neo4j Relationship → convert its properties
|
|
73
|
+
if (value instanceof neo4j.types.Relationship)
|
|
74
|
+
return ResultMapper.convertNeo4jTypes(value.properties, depth + 1);
|
|
75
|
+
// Neo4j Path → not supported
|
|
76
|
+
if (value instanceof neo4j.types.Path)
|
|
77
|
+
throw new OGMError('Path type conversion is not supported');
|
|
78
|
+
// Plain object → recurse on values (use Object.create(null) to prevent prototype pollution)
|
|
79
|
+
const result = Object.create(null);
|
|
80
|
+
for (const [key, val] of Object.entries(value))
|
|
81
|
+
result[key] = ResultMapper.convertNeo4jTypes(val, depth + 1);
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=result-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-mapper.js","sourceRoot":"","sources":["../../../src/execution/result-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export interface GenerateTypesOptions {
|
|
2
|
+
/** Raw schema.graphql content */
|
|
3
|
+
typeDefs: string;
|
|
4
|
+
/** Output file path */
|
|
5
|
+
outFile: string;
|
|
6
|
+
/** Optional configuration */
|
|
7
|
+
config?: GenerateTypesConfig;
|
|
8
|
+
}
|
|
9
|
+
export interface GenerateTypesConfig {
|
|
10
|
+
/** Enable MATCHES operator for string fields (default: true) */
|
|
11
|
+
stringMatchesFilter?: boolean;
|
|
12
|
+
/** Format output with prettier (default: true) */
|
|
13
|
+
formatOutput?: boolean;
|
|
14
|
+
/** Custom prettier configuration */
|
|
15
|
+
prettierConfig?: Record<string, unknown>;
|
|
16
|
+
/** Custom header comment prepended to the generated file */
|
|
17
|
+
header?: string;
|
|
18
|
+
/** Package name used in generated import statements (default: 'grafeo-ogm') */
|
|
19
|
+
packageName?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface GenerateTypesResult {
|
|
22
|
+
/** Absolute path of the written file */
|
|
23
|
+
outputPath: string;
|
|
24
|
+
/** Number of exported types / interfaces / enums */
|
|
25
|
+
typeCount: number;
|
|
26
|
+
/** File size in bytes */
|
|
27
|
+
fileSize: number;
|
|
28
|
+
/** Generation duration in milliseconds */
|
|
29
|
+
durationMs: number;
|
|
30
|
+
/** Non-fatal warnings encountered during generation */
|
|
31
|
+
warnings: GeneratorWarning[];
|
|
32
|
+
}
|
|
33
|
+
export interface GeneratorWarning {
|
|
34
|
+
code: 'UNKNOWN_DIRECTIVE' | 'UNSUPPORTED_TYPE' | 'CIRCULAR_REFERENCE';
|
|
35
|
+
message: string;
|
|
36
|
+
location?: {
|
|
37
|
+
typeName: string;
|
|
38
|
+
fieldName?: string;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export declare class SchemaParseError extends Error {
|
|
42
|
+
constructor(message: string);
|
|
43
|
+
}
|
|
44
|
+
export declare class OutputPathError extends Error {
|
|
45
|
+
constructor(message: string);
|
|
46
|
+
}
|
|
47
|
+
export declare class EmptySchemaError extends Error {
|
|
48
|
+
constructor(message: string);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Parse a GraphQL schema, emit TypeScript type declarations, and write the
|
|
52
|
+
* result to disk.
|
|
53
|
+
*/
|
|
54
|
+
export declare function generateTypes(options: GenerateTypesOptions): Promise<GenerateTypesResult>;
|
|
55
|
+
//# sourceMappingURL=generate-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-types.d.ts","sourceRoot":"","sources":["../../../src/generator/generate-types.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,oBAAoB;IACnC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oCAAoC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,mBAAmB,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD;AAMD,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAoBD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAgG9B"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { parseSchema } from '../schema/parser';
|
|
4
|
+
import { emitHeader, emitImports, emitUtilityTypes, } from './type-emitters/utility-types';
|
|
5
|
+
import { emitEnums } from './type-emitters/enum-emitter';
|
|
6
|
+
import { emitNodeTypes } from './type-emitters/node-type-emitter';
|
|
7
|
+
import { emitInterfaceTypes } from './type-emitters/interface-emitter';
|
|
8
|
+
import { emitWhereTypes } from './type-emitters/where-emitter';
|
|
9
|
+
import { emitConnectionWhereTypes, emitConnectionEdgeTypes, } from './type-emitters/connection-emitter';
|
|
10
|
+
import { emitInputTypes } from './type-emitters/input-emitter';
|
|
11
|
+
import { emitSortOptions } from './type-emitters/sort-options-emitter';
|
|
12
|
+
import { emitAggregationTypes } from './type-emitters/aggregation-emitter';
|
|
13
|
+
import { emitMutationResponseTypes } from './type-emitters/mutation-response-emitter';
|
|
14
|
+
import { emitFulltextTypes } from './type-emitters/fulltext-emitter';
|
|
15
|
+
import { emitSelectFieldTypes } from './type-emitters/select-fields-emitter';
|
|
16
|
+
import { emitSelectResultType } from './type-emitters/select-result-emitter';
|
|
17
|
+
import { emitModelDeclarations, emitModelMap, emitInterfaceModelMap, } from './type-emitters/model-map-emitter';
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Error classes
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
export class SchemaParseError extends Error {
|
|
22
|
+
constructor(message) {
|
|
23
|
+
super(message);
|
|
24
|
+
this.name = 'SchemaParseError';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class OutputPathError extends Error {
|
|
28
|
+
constructor(message) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.name = 'OutputPathError';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class EmptySchemaError extends Error {
|
|
34
|
+
constructor(message) {
|
|
35
|
+
super(message);
|
|
36
|
+
this.name = 'EmptySchemaError';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// Helpers
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
function countExportedTypes(source) {
|
|
43
|
+
const patterns = [/export type /g, /export interface /g, /export enum /g];
|
|
44
|
+
let count = 0;
|
|
45
|
+
for (const pattern of patterns) {
|
|
46
|
+
const matches = source.match(pattern);
|
|
47
|
+
if (matches)
|
|
48
|
+
count += matches.length;
|
|
49
|
+
}
|
|
50
|
+
return count;
|
|
51
|
+
}
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
// Main entry point
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
/**
|
|
56
|
+
* Parse a GraphQL schema, emit TypeScript type declarations, and write the
|
|
57
|
+
* result to disk.
|
|
58
|
+
*/
|
|
59
|
+
export async function generateTypes(options) {
|
|
60
|
+
const start = performance.now();
|
|
61
|
+
const warnings = [];
|
|
62
|
+
// 1. Parse schema --------------------------------------------------------
|
|
63
|
+
let metadata;
|
|
64
|
+
try {
|
|
65
|
+
metadata = parseSchema(options.typeDefs);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
69
|
+
throw new SchemaParseError(`Failed to parse schema: ${message}`);
|
|
70
|
+
}
|
|
71
|
+
// 2. Validate output directory -------------------------------------------
|
|
72
|
+
const outDir = path.dirname(path.resolve(options.outFile));
|
|
73
|
+
if (!fs.existsSync(outDir))
|
|
74
|
+
throw new OutputPathError(`Output directory does not exist: ${outDir}`);
|
|
75
|
+
// 3. Validate non-empty schema -------------------------------------------
|
|
76
|
+
if (metadata.nodes.size === 0)
|
|
77
|
+
throw new EmptySchemaError('Schema contains no node types. At least one type is required.');
|
|
78
|
+
// 4. Build resolved config -----------------------------------------------
|
|
79
|
+
const config = {
|
|
80
|
+
stringMatchesFilter: options.config?.stringMatchesFilter ?? true,
|
|
81
|
+
formatOutput: options.config?.formatOutput ?? true,
|
|
82
|
+
prettierConfig: options.config?.prettierConfig,
|
|
83
|
+
header: options.config?.header,
|
|
84
|
+
};
|
|
85
|
+
// 5. Emit sections in order ----------------------------------------------
|
|
86
|
+
const packageName = options.config?.packageName ?? 'grafeo-ogm';
|
|
87
|
+
const sections = [
|
|
88
|
+
emitHeader(config, packageName),
|
|
89
|
+
emitImports(packageName),
|
|
90
|
+
emitUtilityTypes(),
|
|
91
|
+
emitEnums(metadata),
|
|
92
|
+
emitNodeTypes(metadata),
|
|
93
|
+
emitInterfaceTypes(metadata),
|
|
94
|
+
emitWhereTypes(metadata, config),
|
|
95
|
+
emitConnectionWhereTypes(metadata),
|
|
96
|
+
emitInputTypes(metadata),
|
|
97
|
+
emitSortOptions(metadata),
|
|
98
|
+
emitConnectionEdgeTypes(metadata),
|
|
99
|
+
emitAggregationTypes(metadata),
|
|
100
|
+
emitMutationResponseTypes(metadata),
|
|
101
|
+
emitFulltextTypes(metadata),
|
|
102
|
+
emitSelectFieldTypes(metadata),
|
|
103
|
+
emitSelectResultType(),
|
|
104
|
+
emitModelDeclarations(metadata),
|
|
105
|
+
emitModelMap(metadata),
|
|
106
|
+
emitInterfaceModelMap(metadata),
|
|
107
|
+
];
|
|
108
|
+
// 6. Join sections -------------------------------------------------------
|
|
109
|
+
let output = sections.join('\n\n');
|
|
110
|
+
// 7. Count types ---------------------------------------------------------
|
|
111
|
+
const typeCount = countExportedTypes(output);
|
|
112
|
+
// 8. Format with prettier (optional) -------------------------------------
|
|
113
|
+
if (config.formatOutput)
|
|
114
|
+
try {
|
|
115
|
+
const prettier = await import('prettier');
|
|
116
|
+
output = await prettier.format(output, {
|
|
117
|
+
parser: 'typescript',
|
|
118
|
+
...config.prettierConfig,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
warnings.push({
|
|
123
|
+
code: 'UNSUPPORTED_TYPE',
|
|
124
|
+
message: 'Prettier formatting failed; output written without formatting.',
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
// 9. Write to disk -------------------------------------------------------
|
|
128
|
+
const resolvedPath = path.resolve(options.outFile);
|
|
129
|
+
fs.writeFileSync(resolvedPath, output, 'utf-8');
|
|
130
|
+
// 10. Return result ------------------------------------------------------
|
|
131
|
+
const durationMs = Math.round(performance.now() - start);
|
|
132
|
+
const fileSize = Buffer.byteLength(output, 'utf-8');
|
|
133
|
+
return {
|
|
134
|
+
outputPath: resolvedPath,
|
|
135
|
+
typeCount,
|
|
136
|
+
fileSize,
|
|
137
|
+
durationMs,
|
|
138
|
+
warnings,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=generate-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-types.js","sourceRoot":"","sources":["../../../src/generator/generate-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SchemaMetadata } from '../../schema/types';
|
|
2
|
+
/**
|
|
3
|
+
* Emits the shared aggregate selection types (`IdAggregateSelection`, etc.)
|
|
4
|
+
* followed by one `<Node>AggregateSelection` type per node in the schema.
|
|
5
|
+
*/
|
|
6
|
+
export declare function emitAggregationTypes(schema: SchemaMetadata): string;
|
|
7
|
+
//# sourceMappingURL=aggregation-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregation-emitter.d.ts","sourceRoot":"","sources":["../../../../src/generator/type-emitters/aggregation-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,oBAAoB,CAAC;AAyD5B;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA0BnE"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { toPascalCase } from './helpers';
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Scalar → aggregate selection type mapping
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
const SCALAR_AGGREGATE_MAP = {
|
|
6
|
+
ID: 'IdAggregateSelection',
|
|
7
|
+
String: 'StringAggregateSelection',
|
|
8
|
+
Int: 'IntAggregateSelection',
|
|
9
|
+
Float: 'FloatAggregateSelection',
|
|
10
|
+
DateTime: 'DateTimeAggregateSelection',
|
|
11
|
+
};
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Shared aggregate selection types (schema-independent)
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
const SHARED_AGGREGATE_TYPES = `export type IdAggregateSelection = {
|
|
16
|
+
__typename?: "IDAggregateSelection";
|
|
17
|
+
shortest?: Maybe<Scalars["ID"]["output"]>;
|
|
18
|
+
longest?: Maybe<Scalars["ID"]["output"]>;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export type StringAggregateSelection = {
|
|
22
|
+
__typename?: "StringAggregateSelection";
|
|
23
|
+
shortest?: Maybe<Scalars["String"]["output"]>;
|
|
24
|
+
longest?: Maybe<Scalars["String"]["output"]>;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type IntAggregateSelection = {
|
|
28
|
+
__typename?: "IntAggregateSelection";
|
|
29
|
+
max?: Maybe<Scalars["Int"]["output"]>;
|
|
30
|
+
min?: Maybe<Scalars["Int"]["output"]>;
|
|
31
|
+
average?: Maybe<Scalars["Float"]["output"]>;
|
|
32
|
+
sum?: Maybe<Scalars["Int"]["output"]>;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export type FloatAggregateSelection = {
|
|
36
|
+
__typename?: "FloatAggregateSelection";
|
|
37
|
+
max?: Maybe<Scalars["Float"]["output"]>;
|
|
38
|
+
min?: Maybe<Scalars["Float"]["output"]>;
|
|
39
|
+
average?: Maybe<Scalars["Float"]["output"]>;
|
|
40
|
+
sum?: Maybe<Scalars["Float"]["output"]>;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export type DateTimeAggregateSelection = {
|
|
44
|
+
__typename?: "DateTimeAggregateSelection";
|
|
45
|
+
min?: Maybe<Scalars["DateTime"]["output"]>;
|
|
46
|
+
max?: Maybe<Scalars["DateTime"]["output"]>;
|
|
47
|
+
};`;
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
// Public API
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
/**
|
|
52
|
+
* Emits the shared aggregate selection types (`IdAggregateSelection`, etc.)
|
|
53
|
+
* followed by one `<Node>AggregateSelection` type per node in the schema.
|
|
54
|
+
*/
|
|
55
|
+
export function emitAggregationTypes(schema) {
|
|
56
|
+
const blocks = [SHARED_AGGREGATE_TYPES];
|
|
57
|
+
const sortedNodes = [...schema.nodes.entries()].sort(([a], [b]) => a.localeCompare(b));
|
|
58
|
+
for (const [, node] of sortedNodes) {
|
|
59
|
+
blocks.push(emitNodeAggregateSelection(node, schema));
|
|
60
|
+
// Relationship aggregation selection + aggregate input types
|
|
61
|
+
for (const [, rel] of node.relationships) {
|
|
62
|
+
blocks.push(emitRelationshipAggregationSelection(node, rel, schema));
|
|
63
|
+
blocks.push(emitRelationshipAggregateInput(node, rel));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Interface relationship aggregate input types
|
|
67
|
+
const sortedInterfaces = [...schema.interfaces.entries()].sort(([a], [b]) => a.localeCompare(b));
|
|
68
|
+
for (const [, iface] of sortedInterfaces)
|
|
69
|
+
for (const [, rel] of iface.relationships)
|
|
70
|
+
blocks.push(emitInterfaceRelAggregateInput(iface.name, rel));
|
|
71
|
+
return blocks.join('\n\n');
|
|
72
|
+
}
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
// Helpers
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
/**
|
|
77
|
+
* Emits a `<Parent><Target><Field>AggregationSelection` type for a relationship.
|
|
78
|
+
*
|
|
79
|
+
* Example: `ChartChartHasParentChartAggregationSelection = { count: ...; node?: ...; }`
|
|
80
|
+
*/
|
|
81
|
+
function emitRelationshipAggregationSelection(parent, rel, schema) {
|
|
82
|
+
const pascalField = toPascalCase(rel.fieldName);
|
|
83
|
+
const typeName = `${parent.typeName}${rel.target}${pascalField}AggregationSelection`;
|
|
84
|
+
const nodeAggType = `${typeName.replace('AggregationSelection', '')}NodeAggregateSelection`;
|
|
85
|
+
const lines = [
|
|
86
|
+
` __typename?: "${typeName}";`,
|
|
87
|
+
` count: Scalars["Int"]["output"];`,
|
|
88
|
+
` node?: Maybe<${nodeAggType}>;`,
|
|
89
|
+
];
|
|
90
|
+
// If relationship has properties, add edge aggregate
|
|
91
|
+
if (rel.properties) {
|
|
92
|
+
const edgeAggType = `${typeName.replace('AggregationSelection', '')}EdgeAggregateSelection`;
|
|
93
|
+
lines.push(` edge?: Maybe<${edgeAggType}>;`);
|
|
94
|
+
}
|
|
95
|
+
const block = `export type ${typeName} = {\n${lines.join('\n')}\n};`;
|
|
96
|
+
// Also emit the NodeAggregateSelection type (scalar properties of the target)
|
|
97
|
+
const targetNode = schema.nodes.get(rel.target);
|
|
98
|
+
const nodeLines = [` __typename?: "${nodeAggType}";`];
|
|
99
|
+
if (targetNode)
|
|
100
|
+
for (const [name, prop] of targetNode.properties) {
|
|
101
|
+
if (prop.isCypher)
|
|
102
|
+
continue;
|
|
103
|
+
const aggType = SCALAR_AGGREGATE_MAP[prop.type];
|
|
104
|
+
if (!aggType)
|
|
105
|
+
continue;
|
|
106
|
+
if (schema.enums.has(prop.type))
|
|
107
|
+
continue;
|
|
108
|
+
nodeLines.push(` ${name}: ${aggType};`);
|
|
109
|
+
}
|
|
110
|
+
const nodeBlock = `export type ${nodeAggType} = {\n${nodeLines.join('\n')}\n};`;
|
|
111
|
+
// Emit edge aggregate selection if relationship has properties
|
|
112
|
+
if (rel.properties) {
|
|
113
|
+
const edgeAggType = `${typeName.replace('AggregationSelection', '')}EdgeAggregateSelection`;
|
|
114
|
+
const edgeLines = [` __typename?: "${edgeAggType}";`];
|
|
115
|
+
const relProps = schema.relationshipProperties.get(rel.properties);
|
|
116
|
+
if (relProps)
|
|
117
|
+
for (const [name, prop] of relProps.properties) {
|
|
118
|
+
if (prop.isCypher)
|
|
119
|
+
continue;
|
|
120
|
+
const aggType = SCALAR_AGGREGATE_MAP[prop.type];
|
|
121
|
+
if (!aggType)
|
|
122
|
+
continue;
|
|
123
|
+
edgeLines.push(` ${name}: ${aggType};`);
|
|
124
|
+
}
|
|
125
|
+
const edgeBlock = `export type ${edgeAggType} = {\n${edgeLines.join('\n')}\n};`;
|
|
126
|
+
return `${block}\n\n${nodeBlock}\n\n${edgeBlock}`;
|
|
127
|
+
}
|
|
128
|
+
return `${block}\n\n${nodeBlock}`;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Emits a `<Parent><Field>AggregateInput` type for Where aggregate filters.
|
|
132
|
+
*
|
|
133
|
+
* Example: `ChartHasParentChartAggregateInput = { count?: ...; count_LT?: ...; ... }`
|
|
134
|
+
*/
|
|
135
|
+
function emitRelationshipAggregateInput(parent, rel) {
|
|
136
|
+
const pascalField = toPascalCase(rel.fieldName);
|
|
137
|
+
const typeName = `${parent.typeName}${pascalField}AggregateInput`;
|
|
138
|
+
const lines = [
|
|
139
|
+
` count?: InputMaybe<Scalars["Int"]["input"]>;`,
|
|
140
|
+
` count_LT?: InputMaybe<Scalars["Int"]["input"]>;`,
|
|
141
|
+
` count_LTE?: InputMaybe<Scalars["Int"]["input"]>;`,
|
|
142
|
+
` count_GT?: InputMaybe<Scalars["Int"]["input"]>;`,
|
|
143
|
+
` count_GTE?: InputMaybe<Scalars["Int"]["input"]>;`,
|
|
144
|
+
` AND?: InputMaybe<Array<${typeName}>>;`,
|
|
145
|
+
` OR?: InputMaybe<Array<${typeName}>>;`,
|
|
146
|
+
` NOT?: InputMaybe<${typeName}>;`,
|
|
147
|
+
];
|
|
148
|
+
return `export type ${typeName} = {\n${lines.join('\n')}\n};`;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Emits an aggregate input type for an interface relationship.
|
|
152
|
+
* Same structure as node relationship aggregate inputs.
|
|
153
|
+
*/
|
|
154
|
+
function emitInterfaceRelAggregateInput(ifaceName, rel) {
|
|
155
|
+
const pascalField = toPascalCase(rel.fieldName);
|
|
156
|
+
const typeName = `${ifaceName}${pascalField}AggregateInput`;
|
|
157
|
+
const lines = [
|
|
158
|
+
` count?: InputMaybe<Scalars["Int"]["input"]>;`,
|
|
159
|
+
` count_LT?: InputMaybe<Scalars["Int"]["input"]>;`,
|
|
160
|
+
` count_LTE?: InputMaybe<Scalars["Int"]["input"]>;`,
|
|
161
|
+
` count_GT?: InputMaybe<Scalars["Int"]["input"]>;`,
|
|
162
|
+
` count_GTE?: InputMaybe<Scalars["Int"]["input"]>;`,
|
|
163
|
+
` AND?: InputMaybe<Array<${typeName}>>;`,
|
|
164
|
+
` OR?: InputMaybe<Array<${typeName}>>;`,
|
|
165
|
+
` NOT?: InputMaybe<${typeName}>;`,
|
|
166
|
+
];
|
|
167
|
+
return `export type ${typeName} = {\n${lines.join('\n')}\n};`;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Emits a single `<Node>AggregateSelection` type with `count` followed by
|
|
171
|
+
* one entry per aggregatable scalar property.
|
|
172
|
+
*/
|
|
173
|
+
function emitNodeAggregateSelection(node, schema) {
|
|
174
|
+
const lines = [
|
|
175
|
+
` __typename?: "${node.typeName}AggregateSelection";`,
|
|
176
|
+
` count: Scalars["Int"]["output"];`,
|
|
177
|
+
];
|
|
178
|
+
for (const [name, prop] of node.properties) {
|
|
179
|
+
// Skip @cypher fields — computed, not stored
|
|
180
|
+
if (prop.isCypher)
|
|
181
|
+
continue;
|
|
182
|
+
const aggregateType = SCALAR_AGGREGATE_MAP[prop.type];
|
|
183
|
+
// Skip Booleans and enums — they have no aggregate selection
|
|
184
|
+
if (!aggregateType)
|
|
185
|
+
continue;
|
|
186
|
+
// Skip enum types explicitly
|
|
187
|
+
if (schema.enums.has(prop.type))
|
|
188
|
+
continue;
|
|
189
|
+
lines.push(` ${name}: ${aggregateType};`);
|
|
190
|
+
}
|
|
191
|
+
return `export type ${node.typeName}AggregateSelection = {\n${lines.join('\n')}\n};`;
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=aggregation-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregation-emitter.js","sourceRoot":"","sources":["../../../../src/generator/type-emitters/aggregation-emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SchemaMetadata } from '../../schema/types';
|
|
2
|
+
/**
|
|
3
|
+
* Emits `{Parent}{PascalField}ConnectionWhere` types for every relationship
|
|
4
|
+
* on every node in the schema.
|
|
5
|
+
*
|
|
6
|
+
* Each ConnectionWhere type contains:
|
|
7
|
+
* - `node` / `node_NOT` — target node Where filter
|
|
8
|
+
* - `edge` / `edge_NOT` — edge property Where filter (only when relationship has properties)
|
|
9
|
+
* - `AND` / `OR` / `NOT` — logical operators
|
|
10
|
+
*/
|
|
11
|
+
export declare function emitConnectionWhereTypes(schema: SchemaMetadata): string;
|
|
12
|
+
/**
|
|
13
|
+
* Emits Connection, Relationship (edge), and PageInfo types.
|
|
14
|
+
*
|
|
15
|
+
* For each relationship on each node:
|
|
16
|
+
* - `{Parent}{PascalField}Connection` — edges array, totalCount, pageInfo
|
|
17
|
+
* - `{Parent}{PascalField}Relationship` — cursor, node, and optional properties
|
|
18
|
+
*
|
|
19
|
+
* Also emits the `PageInfo` type exactly once.
|
|
20
|
+
*/
|
|
21
|
+
export declare function emitConnectionEdgeTypes(schema: SchemaMetadata): string;
|
|
22
|
+
//# sourceMappingURL=connection-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-emitter.d.ts","sourceRoot":"","sources":["../../../../src/generator/type-emitters/connection-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,oBAAoB,CAAC;AAO5B;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA2CvE;AAkCD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA8CtE"}
|