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,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.emitSelectFieldTypes = emitSelectFieldTypes;
|
|
4
|
+
const helpers_1 = require("./helpers");
|
|
5
|
+
/**
|
|
6
|
+
* Emits `SelectFields` types for every node, interface, and edge-properties
|
|
7
|
+
* type in the schema. These types describe which fields can be selected in
|
|
8
|
+
* the type-safe `select` API.
|
|
9
|
+
*/
|
|
10
|
+
function emitSelectFieldTypes(schema) {
|
|
11
|
+
const blocks = [];
|
|
12
|
+
// Edge SelectFields — emitted first so node SelectFields can reference them
|
|
13
|
+
const edgeSelectBlocks = emitEdgeSelectFields(schema);
|
|
14
|
+
if (edgeSelectBlocks.length > 0)
|
|
15
|
+
blocks.push(...edgeSelectBlocks);
|
|
16
|
+
// Node SelectFields (sorted alphabetically)
|
|
17
|
+
const sortedNodes = [...schema.nodes.entries()].sort(([a], [b]) => a.localeCompare(b));
|
|
18
|
+
for (const [, node] of sortedNodes)
|
|
19
|
+
blocks.push(emitNodeSelectFields(node, schema));
|
|
20
|
+
// Interface SelectFields (sorted alphabetically)
|
|
21
|
+
const sortedInterfaces = [...schema.interfaces.entries()].sort(([a], [b]) => a.localeCompare(b));
|
|
22
|
+
for (const [, iface] of sortedInterfaces)
|
|
23
|
+
blocks.push(emitInterfaceSelectFields(iface, schema));
|
|
24
|
+
// Union SelectFields (type alias of member SelectFields)
|
|
25
|
+
const sortedUnions = [...(schema.unions?.entries() ?? [])].sort(([a], [b]) => a.localeCompare(b));
|
|
26
|
+
for (const [name, members] of sortedUnions) {
|
|
27
|
+
const memberFields = members.map((m) => `${m}SelectFields`).join(' | ');
|
|
28
|
+
blocks.push(`export type ${name}SelectFields = ${memberFields};`);
|
|
29
|
+
}
|
|
30
|
+
return blocks.join('\n\n');
|
|
31
|
+
}
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Node SelectFields
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
function emitNodeSelectFields(node, schema) {
|
|
36
|
+
const members = [];
|
|
37
|
+
// Scalar / enum fields
|
|
38
|
+
for (const [, prop] of node.properties) {
|
|
39
|
+
if (prop.isCypher)
|
|
40
|
+
continue;
|
|
41
|
+
members.push(` ${prop.name}?: boolean;`);
|
|
42
|
+
}
|
|
43
|
+
// Relationship fields
|
|
44
|
+
for (const [, rel] of node.relationships)
|
|
45
|
+
members.push(emitRelationshipField(rel));
|
|
46
|
+
// Connection fields
|
|
47
|
+
for (const [, rel] of node.relationships)
|
|
48
|
+
members.push(emitConnectionField(node.typeName, rel, schema));
|
|
49
|
+
return `export type ${node.typeName}SelectFields = {\n${members.join('\n')}\n};`;
|
|
50
|
+
}
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
// Interface SelectFields
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
function emitInterfaceSelectFields(iface, schema) {
|
|
55
|
+
const members = [];
|
|
56
|
+
// Scalar / enum fields
|
|
57
|
+
for (const [, prop] of iface.properties) {
|
|
58
|
+
if (prop.isCypher)
|
|
59
|
+
continue;
|
|
60
|
+
members.push(` ${prop.name}?: boolean;`);
|
|
61
|
+
}
|
|
62
|
+
// Relationship fields
|
|
63
|
+
for (const [, rel] of iface.relationships)
|
|
64
|
+
members.push(emitRelationshipField(rel));
|
|
65
|
+
// Connection fields — interfaces can also expose connections
|
|
66
|
+
for (const [, rel] of iface.relationships)
|
|
67
|
+
members.push(emitConnectionField(iface.name, rel, schema));
|
|
68
|
+
return `export type ${iface.name}SelectFields = {\n${members.join('\n')}\n};`;
|
|
69
|
+
}
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
// Edge SelectFields (for relationships with properties)
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
function emitEdgeSelectFields(schema) {
|
|
74
|
+
const blocks = [];
|
|
75
|
+
const emittedEdges = new Set();
|
|
76
|
+
// Gather all relationship definitions that carry edge properties
|
|
77
|
+
const allNodes = [...schema.nodes.values()];
|
|
78
|
+
for (const node of allNodes)
|
|
79
|
+
for (const [, rel] of node.relationships) {
|
|
80
|
+
if (!rel.properties)
|
|
81
|
+
continue;
|
|
82
|
+
const edgeTypeName = buildEdgeSelectFieldsName(node.typeName, rel);
|
|
83
|
+
if (emittedEdges.has(edgeTypeName))
|
|
84
|
+
continue;
|
|
85
|
+
emittedEdges.add(edgeTypeName);
|
|
86
|
+
const propsType = schema.relationshipProperties.get(rel.properties);
|
|
87
|
+
if (!propsType)
|
|
88
|
+
continue;
|
|
89
|
+
const members = buildScalarMembers(propsType.properties);
|
|
90
|
+
blocks.push(`export type ${edgeTypeName} = {\n${members.join('\n')}\n};`);
|
|
91
|
+
}
|
|
92
|
+
// Sort for deterministic output
|
|
93
|
+
blocks.sort();
|
|
94
|
+
return blocks;
|
|
95
|
+
}
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
// Helpers
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
/** Emits a single relationship field entry (non-connection). */
|
|
100
|
+
function emitRelationshipField(rel) {
|
|
101
|
+
return ` ${rel.fieldName}?: boolean | { where?: ${rel.target}Where; select?: ${rel.target}SelectFields };`;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Emits a single connection field entry.
|
|
105
|
+
*
|
|
106
|
+
* Pattern:
|
|
107
|
+
* ```
|
|
108
|
+
* drugsConnection?: boolean | {
|
|
109
|
+
* where?: ChartDrugsConnectionWhere;
|
|
110
|
+
* select: {
|
|
111
|
+
* edges?: boolean | {
|
|
112
|
+
* node?: boolean | { select: DrugSelectFields };
|
|
113
|
+
* properties?: boolean | { select: ChartDrugsEdgeSelectFields };
|
|
114
|
+
* };
|
|
115
|
+
* };
|
|
116
|
+
* };
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
function emitConnectionField(ownerTypeName, rel, schema) {
|
|
120
|
+
const connFieldName = `${rel.fieldName}Connection`;
|
|
121
|
+
const connWhereName = `${ownerTypeName}${(0, helpers_1.toPascalCase)(rel.fieldName)}ConnectionWhere`;
|
|
122
|
+
const targetSelect = `${rel.target}SelectFields`;
|
|
123
|
+
// Build edge inner type
|
|
124
|
+
const edgeMembers = [
|
|
125
|
+
` node?: boolean | { select: ${targetSelect} };`,
|
|
126
|
+
];
|
|
127
|
+
// Only include properties if the relationship carries edge properties
|
|
128
|
+
if (rel.properties) {
|
|
129
|
+
const propsType = schema.relationshipProperties.get(rel.properties);
|
|
130
|
+
if (propsType) {
|
|
131
|
+
const edgeSelectName = buildEdgeSelectFieldsName(ownerTypeName, rel);
|
|
132
|
+
edgeMembers.push(` properties?: boolean | { select: ${edgeSelectName} };`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const lines = [
|
|
136
|
+
` ${connFieldName}?: boolean | {`,
|
|
137
|
+
` where?: ${connWhereName};`,
|
|
138
|
+
` select: {`,
|
|
139
|
+
` edges?: boolean | {`,
|
|
140
|
+
...edgeMembers,
|
|
141
|
+
` };`,
|
|
142
|
+
` };`,
|
|
143
|
+
` };`,
|
|
144
|
+
];
|
|
145
|
+
return lines.join('\n');
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Builds the name for an edge SelectFields type.
|
|
149
|
+
*
|
|
150
|
+
* Convention: `<OwnerType><PascalFieldName>EdgeSelectFields`
|
|
151
|
+
* Example: `ChartDrugsEdgeSelectFields`
|
|
152
|
+
*/
|
|
153
|
+
function buildEdgeSelectFieldsName(ownerTypeName, rel) {
|
|
154
|
+
return `${ownerTypeName}${(0, helpers_1.toPascalCase)(rel.fieldName)}EdgeSelectFields`;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Builds `fieldName?: boolean;` members for a set of scalar properties,
|
|
158
|
+
* skipping @cypher fields.
|
|
159
|
+
*/
|
|
160
|
+
function buildScalarMembers(properties) {
|
|
161
|
+
const members = [];
|
|
162
|
+
for (const [, prop] of properties) {
|
|
163
|
+
if (prop.isCypher)
|
|
164
|
+
continue;
|
|
165
|
+
members.push(` ${prop.name}?: boolean;`);
|
|
166
|
+
}
|
|
167
|
+
return members;
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=select-fields-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-fields-emitter.js","sourceRoot":"","sources":["../../../../src/generator/type-emitters/select-fields-emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emits the schema-independent `SelectFields` base type and `SelectResult`
|
|
3
|
+
* utility type that infers return shapes from a `select` object.
|
|
4
|
+
*
|
|
5
|
+
* These types are emitted once per generated file and do not depend on
|
|
6
|
+
* the parsed schema.
|
|
7
|
+
*/
|
|
8
|
+
export declare function emitSelectResultType(): string;
|
|
9
|
+
//# sourceMappingURL=select-result-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-result-emitter.d.ts","sourceRoot":"","sources":["../../../../src/generator/type-emitters/select-result-emitter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAiD7C"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.emitSelectResultType = emitSelectResultType;
|
|
4
|
+
/**
|
|
5
|
+
* Emits the schema-independent `SelectFields` base type and `SelectResult`
|
|
6
|
+
* utility type that infers return shapes from a `select` object.
|
|
7
|
+
*
|
|
8
|
+
* These types are emitted once per generated file and do not depend on
|
|
9
|
+
* the parsed schema.
|
|
10
|
+
*/
|
|
11
|
+
function emitSelectResultType() {
|
|
12
|
+
return `export type SelectFields = Record<
|
|
13
|
+
string,
|
|
14
|
+
boolean | { select: SelectFields } | { where?: unknown; select: unknown }
|
|
15
|
+
>;
|
|
16
|
+
|
|
17
|
+
export type SelectResult<T, S extends SelectFields> = {
|
|
18
|
+
[K in keyof S & keyof T]: S[K] extends true
|
|
19
|
+
? T[K]
|
|
20
|
+
: S[K] extends { select: infer NestedS }
|
|
21
|
+
? T[K] extends Array<infer U>
|
|
22
|
+
? NestedS extends SelectFields
|
|
23
|
+
? Array<SelectResult<U, NestedS>>
|
|
24
|
+
: T[K]
|
|
25
|
+
: T[K] extends infer U | null | undefined
|
|
26
|
+
? NestedS extends SelectFields
|
|
27
|
+
? SelectResult<NonNullable<U>, NestedS> | null
|
|
28
|
+
: T[K]
|
|
29
|
+
: T[K]
|
|
30
|
+
: never;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
type MutationInfoFields = {
|
|
34
|
+
nodesCreated: number;
|
|
35
|
+
nodesDeleted: number;
|
|
36
|
+
relationshipsCreated: number;
|
|
37
|
+
relationshipsDeleted: number;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export type MutationInfoResult<S extends Record<string, boolean>> = {
|
|
41
|
+
[K in keyof S & keyof MutationInfoFields]: MutationInfoFields[K];
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export type MutationSelectResult<
|
|
45
|
+
T,
|
|
46
|
+
TPluralKey extends string,
|
|
47
|
+
S extends Record<string, unknown>,
|
|
48
|
+
> =
|
|
49
|
+
('info' extends keyof S
|
|
50
|
+
? S['info'] extends Record<string, boolean>
|
|
51
|
+
? { info: MutationInfoResult<S['info']> }
|
|
52
|
+
: {}
|
|
53
|
+
: {})
|
|
54
|
+
&
|
|
55
|
+
(TPluralKey extends keyof S
|
|
56
|
+
? S[TPluralKey] extends SelectFields
|
|
57
|
+
? { [K in TPluralKey]: Array<SelectResult<T, S[TPluralKey] & SelectFields>> }
|
|
58
|
+
: {}
|
|
59
|
+
: {});`;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=select-result-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-result-emitter.js","sourceRoot":"","sources":["../../../../src/generator/type-emitters/select-result-emitter.ts"],"names":[],"mappings":";;AAOA,oDAiDC;AAxDD;;;;;;GAMG;AACH,SAAgB,oBAAoB;IAClC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA+CE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SchemaMetadata } from '../../schema/types';
|
|
2
|
+
/**
|
|
3
|
+
* For each node in the schema, emits a `<Node>Sort` type (with one optional
|
|
4
|
+
* `SortDirection` field per scalar property) and a `<Node>Options` type that
|
|
5
|
+
* exposes `limit`, `offset`, and `sort`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function emitSortOptions(schema: SchemaMetadata): string;
|
|
8
|
+
//# sourceMappingURL=sort-options-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-options-emitter.d.ts","sourceRoot":"","sources":["../../../../src/generator/type-emitters/sort-options-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,oBAAoB,CAAC;AAEzE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAW9D"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.emitSortOptions = emitSortOptions;
|
|
4
|
+
/**
|
|
5
|
+
* For each node in the schema, emits a `<Node>Sort` type (with one optional
|
|
6
|
+
* `SortDirection` field per scalar property) and a `<Node>Options` type that
|
|
7
|
+
* exposes `limit`, `offset`, and `sort`.
|
|
8
|
+
*/
|
|
9
|
+
function emitSortOptions(schema) {
|
|
10
|
+
const blocks = [];
|
|
11
|
+
// Process nodes in alphabetical order
|
|
12
|
+
const sortedNodes = [...schema.nodes.entries()].sort(([a], [b]) => a.localeCompare(b));
|
|
13
|
+
for (const [, node] of sortedNodes)
|
|
14
|
+
blocks.push(emitNodeSortAndOptions(node));
|
|
15
|
+
return blocks.join('\n\n');
|
|
16
|
+
}
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Helpers
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
function emitNodeSortAndOptions(node) {
|
|
21
|
+
const sortFields = getSortableProperties(node);
|
|
22
|
+
const sortMembers = sortFields
|
|
23
|
+
.map((name) => ` ${name}?: InputMaybe<SortDirection>;`)
|
|
24
|
+
.join('\n');
|
|
25
|
+
const sortType = `export type ${node.typeName}Sort = {\n${sortMembers}\n};`;
|
|
26
|
+
const optionsType = `export type ${node.typeName}Options = {
|
|
27
|
+
limit?: InputMaybe<Scalars["Int"]["input"]>;
|
|
28
|
+
offset?: InputMaybe<Scalars["Int"]["input"]>;
|
|
29
|
+
sort?: InputMaybe<Array<${node.typeName}Sort>>;
|
|
30
|
+
};`;
|
|
31
|
+
return `${sortType}\n\n${optionsType}`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Returns the names of all scalar (non-relationship, non-cypher) properties
|
|
35
|
+
* on a node, preserving the insertion order of the properties map.
|
|
36
|
+
*/
|
|
37
|
+
function getSortableProperties(node) {
|
|
38
|
+
const names = [];
|
|
39
|
+
for (const [name, prop] of node.properties) {
|
|
40
|
+
// Skip @cypher fields — they are computed and not stored
|
|
41
|
+
if (prop.isCypher)
|
|
42
|
+
continue;
|
|
43
|
+
names.push(name);
|
|
44
|
+
}
|
|
45
|
+
return names;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=sort-options-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-options-emitter.js","sourceRoot":"","sources":["../../../../src/generator/type-emitters/sort-options-emitter.ts"],"names":[],"mappings":";;AAOA,0CAWC;AAhBD;;;;GAIG;AACH,SAAgB,eAAe,CAAC,MAAsB;IACpD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,sCAAsC;IACtC,MAAM,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAChE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CACnB,CAAC;IAEF,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,WAAW;QAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9E,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,sBAAsB,CAAC,IAAoB;IAClD,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAE/C,MAAM,WAAW,GAAG,UAAU;SAC3B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,+BAA+B,CAAC;SACvD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,QAAQ,GAAG,eAAe,IAAI,CAAC,QAAQ,aAAa,WAAW,MAAM,CAAC;IAE5E,MAAM,WAAW,GAAG,eAAe,IAAI,CAAC,QAAQ;;;4BAGtB,IAAI,CAAC,QAAQ;GACtC,CAAC;IAEF,OAAO,GAAG,QAAQ,OAAO,WAAW,EAAE,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,IAAoB;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3C,yDAAyD;QACzD,IAAI,IAAI,CAAC,QAAQ;YAAE,SAAS;QAE5B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emits the static utility types that appear at the top of every generated
|
|
3
|
+
* `ogm-types.ts` file. These types are schema-independent.
|
|
4
|
+
*/
|
|
5
|
+
export declare function emitHeader(config?: {
|
|
6
|
+
header?: string;
|
|
7
|
+
}, packageName?: string): string;
|
|
8
|
+
export declare function emitImports(packageName?: string): string;
|
|
9
|
+
export declare function emitUtilityTypes(): string;
|
|
10
|
+
//# sourceMappingURL=utility-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utility-types.d.ts","sourceRoot":"","sources":["../../../../src/generator/type-emitters/utility-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,wBAAgB,UAAU,CACxB,MAAM,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5B,WAAW,SAAe,GACzB,MAAM,CASR;AAMD,wBAAgB,WAAW,CAAC,WAAW,SAAe,GAAG,MAAM,CAK9D;AAMD,wBAAgB,gBAAgB,IAAI,MAAM,CA0DzC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Emits the static utility types that appear at the top of every generated
|
|
4
|
+
* `ogm-types.ts` file. These types are schema-independent.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.emitHeader = emitHeader;
|
|
8
|
+
exports.emitImports = emitImports;
|
|
9
|
+
exports.emitUtilityTypes = emitUtilityTypes;
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Header
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
function emitHeader(config, packageName = 'grafeo-ogm') {
|
|
14
|
+
const lines = [
|
|
15
|
+
'// AUTO-GENERATED FILE — DO NOT EDIT',
|
|
16
|
+
`// Generated by ${packageName} generateTypes()`,
|
|
17
|
+
];
|
|
18
|
+
if (config?.header)
|
|
19
|
+
lines.push(config.header);
|
|
20
|
+
return lines.join('\n');
|
|
21
|
+
}
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Imports
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
function emitImports(packageName = 'grafeo-ogm') {
|
|
26
|
+
return [
|
|
27
|
+
'import type { SelectionSetNode, DocumentNode } from "graphql";',
|
|
28
|
+
`import type { Model, ModelInterface, InterfaceModelInterface } from "${packageName}";`,
|
|
29
|
+
].join('\n');
|
|
30
|
+
}
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Utility types (copied verbatim from the Neo4j OGM codegen output)
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
function emitUtilityTypes() {
|
|
35
|
+
return `export type Maybe<T> = T | null;
|
|
36
|
+
export type InputMaybe<T> = Maybe<T>;
|
|
37
|
+
export type Exact<T extends { [key: string]: unknown }> = {
|
|
38
|
+
[K in keyof T]: T[K];
|
|
39
|
+
};
|
|
40
|
+
export type MakeOptional<T, K extends keyof T> = Omit<T, K> & {
|
|
41
|
+
[SubKey in K]?: Maybe<T[SubKey]>;
|
|
42
|
+
};
|
|
43
|
+
export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {
|
|
44
|
+
[SubKey in K]: Maybe<T[SubKey]>;
|
|
45
|
+
};
|
|
46
|
+
export type MakeEmpty<
|
|
47
|
+
T extends { [key: string]: unknown },
|
|
48
|
+
K extends keyof T
|
|
49
|
+
> = { [_ in K]?: never };
|
|
50
|
+
export type Incremental<T> =
|
|
51
|
+
| T
|
|
52
|
+
| {
|
|
53
|
+
[P in keyof T]?: P extends " $fragmentName" | "__typename" ? T[P] : never;
|
|
54
|
+
};
|
|
55
|
+
/** All built-in and custom scalars, mapped to their actual values */
|
|
56
|
+
export type Scalars = {
|
|
57
|
+
/** The \`ID\` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as \`"4"\`) or integer (such as \`4\`) input value will be accepted as an ID. */
|
|
58
|
+
ID: { input: string; output: string };
|
|
59
|
+
/** The \`String\` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text. */
|
|
60
|
+
String: { input: string; output: string };
|
|
61
|
+
/** The \`Boolean\` scalar type represents \`true\` or \`false\`. */
|
|
62
|
+
Boolean: { input: boolean; output: boolean };
|
|
63
|
+
/** The \`Int\` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1. */
|
|
64
|
+
Int: { input: number; output: number };
|
|
65
|
+
/** The \`Float\` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point). */
|
|
66
|
+
Float: { input: number; output: number };
|
|
67
|
+
/** A date and time, represented as an ISO-8601 string */
|
|
68
|
+
DateTime: { input: any; output: any };
|
|
69
|
+
/** A 64-bit integer, represented as a string to avoid precision loss */
|
|
70
|
+
BigInt: { input: string; output: string };
|
|
71
|
+
/** A date without time, represented as an ISO-8601 date string (e.g. "2024-01-15") */
|
|
72
|
+
Date: { input: string; output: string };
|
|
73
|
+
/** A time with UTC offset, represented as an ISO-8601 time string (e.g. "12:30:00Z") */
|
|
74
|
+
Time: { input: string; output: string };
|
|
75
|
+
/** A local time without timezone, represented as an ISO-8601 time string (e.g. "12:30:00") */
|
|
76
|
+
LocalTime: { input: string; output: string };
|
|
77
|
+
/** A local date and time without timezone, represented as an ISO-8601 string */
|
|
78
|
+
LocalDateTime: { input: string; output: string };
|
|
79
|
+
/** An ISO 8601 duration (e.g. "P1Y2M3DT4H5M6S") */
|
|
80
|
+
Duration: { input: string; output: string };
|
|
81
|
+
/** A geographic point (WGS 84). Input accepts latitude/longitude; output uses x (longitude), y (latitude) from the driver */
|
|
82
|
+
Point: {
|
|
83
|
+
input: { latitude: number; longitude: number; height?: number; srid?: number };
|
|
84
|
+
output: { x: number; y: number; z?: number; srid: number };
|
|
85
|
+
};
|
|
86
|
+
/** A cartesian point with x, y, optional z coordinates, and SRID */
|
|
87
|
+
CartesianPoint: {
|
|
88
|
+
input: { x: number; y: number; z?: number; srid?: number };
|
|
89
|
+
output: { x: number; y: number; z?: number; srid: number };
|
|
90
|
+
};
|
|
91
|
+
};`;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=utility-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utility-types.js","sourceRoot":"","sources":["../../../../src/generator/type-emitters/utility-types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAMH,gCAYC;AAMD,kCAKC;AAMD,4CA0DC;AA3FD,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,SAAgB,UAAU,CACxB,MAA4B,EAC5B,WAAW,GAAG,YAAY;IAE1B,MAAM,KAAK,GAAG;QACZ,sCAAsC;QACtC,mBAAmB,WAAW,kBAAkB;KACjD,CAAC;IAEF,IAAI,MAAM,EAAE,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE9C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAgB,WAAW,CAAC,WAAW,GAAG,YAAY;IACpD,OAAO;QACL,gEAAgE;QAChE,wEAAwE,WAAW,IAAI;KACxF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,oEAAoE;AACpE,8EAA8E;AAE9E,SAAgB,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SchemaMetadata } from '../../schema/types';
|
|
2
|
+
export interface WhereEmitterConfig {
|
|
3
|
+
/** When `false`, omits `_MATCHES` for String fields. Defaults to `true`. */
|
|
4
|
+
stringMatchesFilter?: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Emits `{TypeName}Where` types for every node and interface in the schema.
|
|
8
|
+
*
|
|
9
|
+
* Each Where type contains:
|
|
10
|
+
* 1. Scalar operator fields (per scalar property)
|
|
11
|
+
* 2. Relationship operator fields (per relationship)
|
|
12
|
+
* 3. Logical operators (OR, AND, NOT)
|
|
13
|
+
*/
|
|
14
|
+
export declare function emitWhereTypes(schema: SchemaMetadata, config?: WhereEmitterConfig): string;
|
|
15
|
+
//# sourceMappingURL=where-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"where-emitter.d.ts","sourceRoot":"","sources":["../../../../src/generator/type-emitters/where-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAIf,MAAM,oBAAoB,CAAC;AAO5B,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,MAAM,CA8DR"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.emitWhereTypes = emitWhereTypes;
|
|
4
|
+
const helpers_1 = require("./helpers");
|
|
5
|
+
/**
|
|
6
|
+
* Emits `{TypeName}Where` types for every node and interface in the schema.
|
|
7
|
+
*
|
|
8
|
+
* Each Where type contains:
|
|
9
|
+
* 1. Scalar operator fields (per scalar property)
|
|
10
|
+
* 2. Relationship operator fields (per relationship)
|
|
11
|
+
* 3. Logical operators (OR, AND, NOT)
|
|
12
|
+
*/
|
|
13
|
+
function emitWhereTypes(schema, config) {
|
|
14
|
+
const blocks = [];
|
|
15
|
+
const enableMatches = config?.stringMatchesFilter !== false;
|
|
16
|
+
// Node Where types (sorted alphabetically)
|
|
17
|
+
const sortedNodes = [...schema.nodes.entries()].sort(([a], [b]) => a.localeCompare(b));
|
|
18
|
+
for (const [, node] of sortedNodes)
|
|
19
|
+
blocks.push(emitWhereType(node.typeName, node.properties, node.relationships, schema, enableMatches, node));
|
|
20
|
+
// Interface Where types (sorted alphabetically)
|
|
21
|
+
const sortedInterfaces = [...schema.interfaces.entries()].sort(([a], [b]) => a.localeCompare(b));
|
|
22
|
+
for (const [, iface] of sortedInterfaces)
|
|
23
|
+
blocks.push(emitWhereType(iface.name, iface.properties, iface.relationships, schema, enableMatches));
|
|
24
|
+
// Relationship-property Where types (sorted alphabetically)
|
|
25
|
+
const sortedRelProps = [...schema.relationshipProperties.entries()].sort(([a], [b]) => a.localeCompare(b));
|
|
26
|
+
for (const [, relProp] of sortedRelProps)
|
|
27
|
+
blocks.push(emitWhereType(relProp.typeName, relProp.properties, new Map(), schema, enableMatches));
|
|
28
|
+
// Union Where types (per-member keyed)
|
|
29
|
+
const sortedUnions = [...(schema.unions?.entries() ?? [])].sort(([a], [b]) => a.localeCompare(b));
|
|
30
|
+
for (const [name, members] of sortedUnions)
|
|
31
|
+
blocks.push(emitUnionWhereType(name, members));
|
|
32
|
+
return blocks.join('\n\n');
|
|
33
|
+
}
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Core emitter
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
function emitWhereType(typeName, properties, relationships, schema, enableMatches, nodeDef) {
|
|
38
|
+
const lines = [];
|
|
39
|
+
// 1. Scalar operator fields (including @cypher fields with scalar return types)
|
|
40
|
+
for (const [, prop] of properties) {
|
|
41
|
+
// Skip @cypher fields that return node/interface types (not scalars)
|
|
42
|
+
if (prop.isCypher &&
|
|
43
|
+
!(0, helpers_1.isBuiltInScalar)(prop.type) &&
|
|
44
|
+
!schema.enums.has(prop.type))
|
|
45
|
+
continue;
|
|
46
|
+
lines.push(...emitScalarOperators(prop, schema, enableMatches));
|
|
47
|
+
}
|
|
48
|
+
// 2. Logical operators (before relationships, matching reference output)
|
|
49
|
+
lines.push(` OR?: InputMaybe<Array<${typeName}Where>>;`);
|
|
50
|
+
lines.push(` AND?: InputMaybe<Array<${typeName}Where>>;`);
|
|
51
|
+
lines.push(` NOT?: InputMaybe<${typeName}Where>;`);
|
|
52
|
+
// 3. Relationship operator fields
|
|
53
|
+
for (const [, rel] of relationships)
|
|
54
|
+
lines.push(...emitRelationshipOperators(typeName, rel, schema, nodeDef));
|
|
55
|
+
return `export type ${typeName}Where = {\n${lines.join('\n')}\n};`;
|
|
56
|
+
}
|
|
57
|
+
/** Temporal types that support comparison operators (LT, LTE, GT, GTE) */
|
|
58
|
+
const TEMPORAL_TYPES = new Set([
|
|
59
|
+
'DateTime',
|
|
60
|
+
'Date',
|
|
61
|
+
'Time',
|
|
62
|
+
'LocalTime',
|
|
63
|
+
'LocalDateTime',
|
|
64
|
+
'Duration',
|
|
65
|
+
]);
|
|
66
|
+
/** Spatial types that only support equality and IN operators */
|
|
67
|
+
const SPATIAL_TYPES = new Set(['Point', 'CartesianPoint']);
|
|
68
|
+
function classifyType(typeName, enums) {
|
|
69
|
+
if (typeName === 'Boolean')
|
|
70
|
+
return 'boolean';
|
|
71
|
+
if (typeName === 'ID' || typeName === 'String')
|
|
72
|
+
return 'string-like';
|
|
73
|
+
if (typeName === 'Int' || typeName === 'Float' || typeName === 'BigInt')
|
|
74
|
+
return 'numeric-like';
|
|
75
|
+
if (TEMPORAL_TYPES.has(typeName))
|
|
76
|
+
return 'numeric-like';
|
|
77
|
+
if (SPATIAL_TYPES.has(typeName))
|
|
78
|
+
return 'spatial';
|
|
79
|
+
if (enums.has(typeName))
|
|
80
|
+
return 'enum';
|
|
81
|
+
// Default to string-like for unknown scalars
|
|
82
|
+
return 'string-like';
|
|
83
|
+
}
|
|
84
|
+
function scalarInputType(typeName, enums) {
|
|
85
|
+
if ((0, helpers_1.isBuiltInScalar)(typeName))
|
|
86
|
+
return `Scalars["${typeName}"]["input"]`;
|
|
87
|
+
if (enums.has(typeName))
|
|
88
|
+
return typeName;
|
|
89
|
+
return `Scalars["${typeName}"]["input"]`;
|
|
90
|
+
}
|
|
91
|
+
function emitScalarOperators(prop, schema, enableMatches) {
|
|
92
|
+
const lines = [];
|
|
93
|
+
const { name, type, required } = prop;
|
|
94
|
+
const category = classifyType(type, schema.enums);
|
|
95
|
+
const inputType = scalarInputType(type, schema.enums);
|
|
96
|
+
const wrap = (inner) => `InputMaybe<${inner}>`;
|
|
97
|
+
// Exact match
|
|
98
|
+
lines.push(` ${name}?: ${wrap(inputType)};`);
|
|
99
|
+
// _NOT
|
|
100
|
+
lines.push(` ${name}_NOT?: ${wrap(inputType)};`);
|
|
101
|
+
if (category === 'boolean')
|
|
102
|
+
// Boolean only has exact + _NOT
|
|
103
|
+
return lines;
|
|
104
|
+
// _IN / _NOT_IN (all non-boolean types)
|
|
105
|
+
const arrayInner = required ? inputType : `InputMaybe<${inputType}>`;
|
|
106
|
+
lines.push(` ${name}_IN?: ${wrap(`Array<${arrayInner}>`)};`);
|
|
107
|
+
lines.push(` ${name}_NOT_IN?: ${wrap(`Array<${arrayInner}>`)};`);
|
|
108
|
+
// Category-specific operators
|
|
109
|
+
switch (category) {
|
|
110
|
+
case 'string-like':
|
|
111
|
+
lines.push(` ${name}_CONTAINS?: ${wrap(inputType)};`);
|
|
112
|
+
lines.push(` ${name}_STARTS_WITH?: ${wrap(inputType)};`);
|
|
113
|
+
lines.push(` ${name}_ENDS_WITH?: ${wrap(inputType)};`);
|
|
114
|
+
// _MATCHES only for String (not ID), and only if enabled
|
|
115
|
+
if (type === 'String' && enableMatches)
|
|
116
|
+
lines.push(` ${name}_MATCHES?: ${wrap(inputType)};`);
|
|
117
|
+
lines.push(` ${name}_NOT_CONTAINS?: ${wrap(inputType)};`);
|
|
118
|
+
lines.push(` ${name}_NOT_STARTS_WITH?: ${wrap(inputType)};`);
|
|
119
|
+
lines.push(` ${name}_NOT_ENDS_WITH?: ${wrap(inputType)};`);
|
|
120
|
+
break;
|
|
121
|
+
case 'numeric-like':
|
|
122
|
+
lines.push(` ${name}_LT?: ${wrap(inputType)};`);
|
|
123
|
+
lines.push(` ${name}_LTE?: ${wrap(inputType)};`);
|
|
124
|
+
lines.push(` ${name}_GT?: ${wrap(inputType)};`);
|
|
125
|
+
lines.push(` ${name}_GTE?: ${wrap(inputType)};`);
|
|
126
|
+
break;
|
|
127
|
+
case 'enum':
|
|
128
|
+
// Enum has exact, _NOT, _IN, _NOT_IN — already emitted above
|
|
129
|
+
break;
|
|
130
|
+
case 'spatial':
|
|
131
|
+
// Spatial types only support exact, _NOT, _IN, _NOT_IN — already emitted above
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
return lines;
|
|
135
|
+
}
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
// Relationship operator generation
|
|
138
|
+
// ---------------------------------------------------------------------------
|
|
139
|
+
function emitRelationshipOperators(parentType, rel, schema, nodeDef) {
|
|
140
|
+
const lines = [];
|
|
141
|
+
const { fieldName, target, isArray } = rel;
|
|
142
|
+
const pascalField = (0, helpers_1.toPascalCase)(fieldName);
|
|
143
|
+
// For relationships inherited from an interface (@declareRelationship),
|
|
144
|
+
// use the interface-level ConnectionWhere type name
|
|
145
|
+
let connectionWhereName = `${parentType}${pascalField}ConnectionWhere`;
|
|
146
|
+
if (schema && nodeDef)
|
|
147
|
+
for (const ifaceName of nodeDef.implementsInterfaces) {
|
|
148
|
+
const iface = schema.interfaces.get(ifaceName);
|
|
149
|
+
if (iface?.relationships.has(fieldName)) {
|
|
150
|
+
connectionWhereName = `${ifaceName}${pascalField}ConnectionWhere`;
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Aggregate filter operator
|
|
155
|
+
const aggInputName = `${parentType}${pascalField}AggregateInput`;
|
|
156
|
+
lines.push(` ${fieldName}Aggregate?: InputMaybe<${aggInputName}>;`);
|
|
157
|
+
if (isArray) {
|
|
158
|
+
// Array relationship: full set of operators
|
|
159
|
+
lines.push(` ${fieldName}?: InputMaybe<${target}Where>;`);
|
|
160
|
+
lines.push(` ${fieldName}_NOT?: InputMaybe<${target}Where>;`);
|
|
161
|
+
lines.push(` ${fieldName}Connection?: InputMaybe<${connectionWhereName}>;`);
|
|
162
|
+
lines.push(` ${fieldName}Connection_NOT?: InputMaybe<${connectionWhereName}>;`);
|
|
163
|
+
lines.push(` ${fieldName}_ALL?: InputMaybe<${target}Where>;`);
|
|
164
|
+
lines.push(` ${fieldName}_NONE?: InputMaybe<${target}Where>;`);
|
|
165
|
+
lines.push(` ${fieldName}_SINGLE?: InputMaybe<${target}Where>;`);
|
|
166
|
+
lines.push(` ${fieldName}_SOME?: InputMaybe<${target}Where>;`);
|
|
167
|
+
lines.push(` ${fieldName}Connection_ALL?: InputMaybe<${connectionWhereName}>;`);
|
|
168
|
+
lines.push(` ${fieldName}Connection_NONE?: InputMaybe<${connectionWhereName}>;`);
|
|
169
|
+
lines.push(` ${fieldName}Connection_SINGLE?: InputMaybe<${connectionWhereName}>;`);
|
|
170
|
+
lines.push(` ${fieldName}Connection_SOME?: InputMaybe<${connectionWhereName}>;`);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
// Singular relationship: limited operators
|
|
174
|
+
lines.push(` ${fieldName}?: InputMaybe<${target}Where>;`);
|
|
175
|
+
lines.push(` ${fieldName}_NOT?: InputMaybe<${target}Where>;`);
|
|
176
|
+
lines.push(` ${fieldName}Connection?: InputMaybe<${connectionWhereName}>;`);
|
|
177
|
+
lines.push(` ${fieldName}Connection_NOT?: InputMaybe<${connectionWhereName}>;`);
|
|
178
|
+
}
|
|
179
|
+
return lines;
|
|
180
|
+
}
|
|
181
|
+
// ---------------------------------------------------------------------------
|
|
182
|
+
// Union Where types (per-member keyed)
|
|
183
|
+
// ---------------------------------------------------------------------------
|
|
184
|
+
function emitUnionWhereType(name, members) {
|
|
185
|
+
const sorted = [...members].sort();
|
|
186
|
+
const lines = sorted.map((m) => ` ${m}?: InputMaybe<${m}Where>;`);
|
|
187
|
+
return `export type ${name}Where = {\n${lines.join('\n')}\n};`;
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=where-emitter.js.map
|