@contember/engine-content-api 2.0.0-alpha.36 → 2.0.0-alpha.37
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/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs +31 -6
- package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs.map +1 -1
- package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +31 -6
- package/dist/development/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
- package/dist/development/src/input-validation/ColumnValueResolver.cjs.map +1 -1
- package/dist/development/src/input-validation/ColumnValueResolver.js.map +1 -1
- package/dist/development/src/input-validation/preValidation/CreateInputPreValidationProcessor.cjs.map +1 -1
- package/dist/development/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
- package/dist/development/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
- package/dist/development/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
- package/dist/development/src/input-validation/preValidation/UpdateInputPreValidationProcessor.cjs.map +1 -1
- package/dist/development/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
- package/dist/development/src/inputProcessing/CreateInputVisitor.cjs +6 -7
- package/dist/development/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
- package/dist/development/src/inputProcessing/CreateInputVisitor.js +6 -7
- package/dist/development/src/inputProcessing/CreateInputVisitor.js.map +1 -1
- package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs +14 -15
- package/dist/development/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
- package/dist/development/src/inputProcessing/UpdateInputVisitor.js +14 -15
- package/dist/development/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
- package/dist/development/src/mapper/ColumnValue.cjs +8 -18
- package/dist/development/src/mapper/ColumnValue.cjs.map +1 -1
- package/dist/development/src/mapper/ColumnValue.js +8 -18
- package/dist/development/src/mapper/ColumnValue.js.map +1 -1
- package/dist/development/src/mapper/EventManager.cjs +1 -1
- package/dist/development/src/mapper/EventManager.cjs.map +1 -1
- package/dist/development/src/mapper/EventManager.js +1 -1
- package/dist/development/src/mapper/EventManager.js.map +1 -1
- package/dist/development/src/mapper/Mapper.cjs +8 -28
- package/dist/development/src/mapper/Mapper.cjs.map +1 -1
- package/dist/development/src/mapper/Mapper.js +8 -28
- package/dist/development/src/mapper/Mapper.js.map +1 -1
- package/dist/development/src/mapper/Result.cjs.map +1 -1
- package/dist/development/src/mapper/Result.js.map +1 -1
- package/dist/development/src/mapper/delete/DeleteExecutor.cjs +4 -8
- package/dist/development/src/mapper/delete/DeleteExecutor.cjs.map +1 -1
- package/dist/development/src/mapper/delete/DeleteExecutor.js +5 -9
- package/dist/development/src/mapper/delete/DeleteExecutor.js.map +1 -1
- package/dist/development/src/mapper/insert/InsertBuilder.cjs +12 -8
- package/dist/development/src/mapper/insert/InsertBuilder.cjs.map +1 -1
- package/dist/development/src/mapper/insert/InsertBuilder.js +13 -9
- package/dist/development/src/mapper/insert/InsertBuilder.js.map +1 -1
- package/dist/development/src/mapper/insert/Inserter.cjs.map +1 -1
- package/dist/development/src/mapper/insert/Inserter.js.map +1 -1
- package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs +1 -3
- package/dist/development/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js +1 -3
- package/dist/development/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs +3 -5
- package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js +4 -6
- package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs +3 -5
- package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js +4 -6
- package/dist/development/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs +4 -3
- package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js +4 -3
- package/dist/development/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs +3 -5
- package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js +4 -6
- package/dist/development/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs +4 -6
- package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js +5 -7
- package/dist/development/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/UpdateBuilder.cjs +12 -5
- package/dist/development/src/mapper/update/UpdateBuilder.cjs.map +1 -1
- package/dist/development/src/mapper/update/UpdateBuilder.js +13 -6
- package/dist/development/src/mapper/update/UpdateBuilder.js.map +1 -1
- package/dist/development/src/mapper/update/Updater.cjs.map +1 -1
- package/dist/development/src/mapper/update/Updater.js.map +1 -1
- package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs +11 -16
- package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js +12 -17
- package/dist/development/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs +6 -7
- package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js +7 -8
- package/dist/development/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs +5 -4
- package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js +5 -4
- package/dist/development/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs +11 -12
- package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js +12 -13
- package/dist/development/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs +8 -12
- package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -1
- package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js +9 -13
- package/dist/development/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs +31 -6
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.cjs.map +1 -1
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +31 -6
- package/dist/production/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
- package/dist/production/src/input-validation/ColumnValueResolver.cjs.map +1 -1
- package/dist/production/src/input-validation/ColumnValueResolver.js.map +1 -1
- package/dist/production/src/input-validation/preValidation/CreateInputPreValidationProcessor.cjs.map +1 -1
- package/dist/production/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
- package/dist/production/src/input-validation/preValidation/InputPreValidator.cjs.map +1 -1
- package/dist/production/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
- package/dist/production/src/input-validation/preValidation/UpdateInputPreValidationProcessor.cjs.map +1 -1
- package/dist/production/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
- package/dist/production/src/inputProcessing/CreateInputVisitor.cjs +6 -7
- package/dist/production/src/inputProcessing/CreateInputVisitor.cjs.map +1 -1
- package/dist/production/src/inputProcessing/CreateInputVisitor.js +6 -7
- package/dist/production/src/inputProcessing/CreateInputVisitor.js.map +1 -1
- package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs +14 -15
- package/dist/production/src/inputProcessing/UpdateInputVisitor.cjs.map +1 -1
- package/dist/production/src/inputProcessing/UpdateInputVisitor.js +14 -15
- package/dist/production/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
- package/dist/production/src/mapper/ColumnValue.cjs +8 -18
- package/dist/production/src/mapper/ColumnValue.cjs.map +1 -1
- package/dist/production/src/mapper/ColumnValue.js +8 -18
- package/dist/production/src/mapper/ColumnValue.js.map +1 -1
- package/dist/production/src/mapper/EventManager.cjs +1 -1
- package/dist/production/src/mapper/EventManager.cjs.map +1 -1
- package/dist/production/src/mapper/EventManager.js +1 -1
- package/dist/production/src/mapper/EventManager.js.map +1 -1
- package/dist/production/src/mapper/Mapper.cjs +8 -28
- package/dist/production/src/mapper/Mapper.cjs.map +1 -1
- package/dist/production/src/mapper/Mapper.js +8 -28
- package/dist/production/src/mapper/Mapper.js.map +1 -1
- package/dist/production/src/mapper/Result.cjs.map +1 -1
- package/dist/production/src/mapper/Result.js.map +1 -1
- package/dist/production/src/mapper/delete/DeleteExecutor.cjs +4 -8
- package/dist/production/src/mapper/delete/DeleteExecutor.cjs.map +1 -1
- package/dist/production/src/mapper/delete/DeleteExecutor.js +5 -9
- package/dist/production/src/mapper/delete/DeleteExecutor.js.map +1 -1
- package/dist/production/src/mapper/insert/InsertBuilder.cjs +12 -8
- package/dist/production/src/mapper/insert/InsertBuilder.cjs.map +1 -1
- package/dist/production/src/mapper/insert/InsertBuilder.js +13 -9
- package/dist/production/src/mapper/insert/InsertBuilder.js.map +1 -1
- package/dist/production/src/mapper/insert/Inserter.cjs.map +1 -1
- package/dist/production/src/mapper/insert/Inserter.js.map +1 -1
- package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs +1 -3
- package/dist/production/src/mapper/insert/SqlCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js +1 -3
- package/dist/production/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs +3 -5
- package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js +4 -6
- package/dist/production/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs +3 -5
- package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js +4 -6
- package/dist/production/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs +4 -3
- package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js +4 -3
- package/dist/production/src/mapper/insert/relations/OneHasManyCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs +3 -5
- package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js +4 -6
- package/dist/production/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs +4 -6
- package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js +5 -7
- package/dist/production/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/SqlUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/UpdateBuilder.cjs +12 -5
- package/dist/production/src/mapper/update/UpdateBuilder.cjs.map +1 -1
- package/dist/production/src/mapper/update/UpdateBuilder.js +13 -6
- package/dist/production/src/mapper/update/UpdateBuilder.js.map +1 -1
- package/dist/production/src/mapper/update/Updater.cjs.map +1 -1
- package/dist/production/src/mapper/update/Updater.js.map +1 -1
- package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs +11 -16
- package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js +12 -17
- package/dist/production/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs +6 -7
- package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js +7 -8
- package/dist/production/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs +5 -4
- package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js +5 -4
- package/dist/production/src/mapper/update/relations/OneHasManyUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs +11 -12
- package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js +12 -13
- package/dist/production/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.js.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs +8 -12
- package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map +1 -1
- package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js +9 -13
- package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.d.ts.map +1 -0
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/dist/types/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.d.ts.map +1 -1
- package/dist/types/input-validation/ColumnValueResolver.d.ts +1 -1
- package/dist/types/input-validation/ColumnValueResolver.d.ts.map +1 -1
- package/dist/types/input-validation/ValidationDataSelector.d.ts +1 -1
- package/dist/types/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts +3 -3
- package/dist/types/input-validation/preValidation/CreateInputPreValidationProcessor.d.ts.map +1 -1
- package/dist/types/input-validation/preValidation/InputPreValidator.d.ts +3 -3
- package/dist/types/input-validation/preValidation/InputPreValidator.d.ts.map +1 -1
- package/dist/types/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts +4 -4
- package/dist/types/input-validation/preValidation/UpdateInputPreValidationProcessor.d.ts.map +1 -1
- package/dist/types/inputProcessing/CreateInputProcessor.d.ts +8 -6
- package/dist/types/inputProcessing/CreateInputProcessor.d.ts.map +1 -1
- package/dist/types/inputProcessing/CreateInputVisitor.d.ts +3 -2
- package/dist/types/inputProcessing/CreateInputVisitor.d.ts.map +1 -1
- package/dist/types/inputProcessing/UpdateInputProcessor.d.ts +14 -12
- package/dist/types/inputProcessing/UpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/inputProcessing/UpdateInputVisitor.d.ts +3 -2
- package/dist/types/inputProcessing/UpdateInputVisitor.d.ts.map +1 -1
- package/dist/types/mapper/ColumnValue.d.ts +4 -8
- package/dist/types/mapper/ColumnValue.d.ts.map +1 -1
- package/dist/types/mapper/EventManager.d.ts +9 -9
- package/dist/types/mapper/EventManager.d.ts.map +1 -1
- package/dist/types/mapper/Mapper.d.ts +6 -7
- package/dist/types/mapper/Mapper.d.ts.map +1 -1
- package/dist/types/mapper/Result.d.ts +5 -4
- package/dist/types/mapper/Result.d.ts.map +1 -1
- package/dist/types/mapper/delete/DeleteExecutor.d.ts.map +1 -1
- package/dist/types/mapper/insert/InsertBuilder.d.ts +3 -4
- package/dist/types/mapper/insert/InsertBuilder.d.ts.map +1 -1
- package/dist/types/mapper/insert/Inserter.d.ts +3 -2
- package/dist/types/mapper/insert/Inserter.d.ts.map +1 -1
- package/dist/types/mapper/insert/SqlCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts +5 -3
- package/dist/types/mapper/insert/relations/ManyHasManyCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts +5 -3
- package/dist/types/mapper/insert/relations/ManyHasOneCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/OneHasManyCreateInputProcessor.d.ts +5 -3
- package/dist/types/mapper/insert/relations/OneHasManyCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts +5 -3
- package/dist/types/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.d.ts +5 -3
- package/dist/types/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/types.d.ts +84 -1
- package/dist/types/mapper/types.d.ts.map +1 -1
- package/dist/types/mapper/update/SqlUpdateInputProcessor.d.ts +2 -1
- package/dist/types/mapper/update/SqlUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/update/UpdateBuilder.d.ts +3 -3
- package/dist/types/mapper/update/UpdateBuilder.d.ts.map +1 -1
- package/dist/types/mapper/update/Updater.d.ts +2 -1
- package/dist/types/mapper/update/Updater.d.ts.map +1 -1
- package/dist/types/mapper/update/relations/ManyHasManyUpdateInputProcessor.d.ts +5 -3
- package/dist/types/mapper/update/relations/ManyHasManyUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts +6 -4
- package/dist/types/mapper/update/relations/ManyHasOneUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/update/relations/OneHasManyUpdateInputProcessor.d.ts +5 -3
- package/dist/types/mapper/update/relations/OneHasManyUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.d.ts +6 -4
- package/dist/types/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts +6 -4
- package/dist/types/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.ts +35 -2
- package/src/input-validation/ColumnValueResolver.ts +1 -1
- package/src/input-validation/preValidation/CreateInputPreValidationProcessor.ts +2 -2
- package/src/input-validation/preValidation/InputPreValidator.ts +7 -7
- package/src/input-validation/preValidation/UpdateInputPreValidationProcessor.ts +3 -3
- package/src/inputProcessing/CreateInputProcessor.ts +8 -6
- package/src/inputProcessing/CreateInputVisitor.ts +18 -19
- package/src/inputProcessing/UpdateInputProcessor.ts +13 -11
- package/src/inputProcessing/UpdateInputVisitor.ts +25 -24
- package/src/mapper/ColumnValue.ts +11 -25
- package/src/mapper/EventManager.ts +6 -6
- package/src/mapper/Mapper.ts +19 -37
- package/src/mapper/Result.ts +3 -2
- package/src/mapper/delete/DeleteExecutor.ts +4 -8
- package/src/mapper/insert/InsertBuilder.ts +20 -17
- package/src/mapper/insert/Inserter.ts +4 -3
- package/src/mapper/insert/SqlCreateInputProcessor.ts +1 -3
- package/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.ts +8 -8
- package/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.ts +8 -8
- package/src/mapper/insert/relations/OneHasManyCreateInputProcessor.ts +8 -6
- package/src/mapper/insert/relations/OneHasOneInverseCreateInputProcessor.ts +8 -9
- package/src/mapper/insert/relations/OneHasOneOwningCreateInputProcessor.ts +9 -9
- package/src/mapper/types.ts +115 -1
- package/src/mapper/update/SqlUpdateInputProcessor.ts +2 -1
- package/src/mapper/update/UpdateBuilder.ts +20 -12
- package/src/mapper/update/Updater.ts +3 -2
- package/src/mapper/update/relations/ManyHasManyUpdateInputProcessor.ts +15 -19
- package/src/mapper/update/relations/ManyHasOneUpdateInputProcessor.ts +11 -11
- package/src/mapper/update/relations/OneHasManyUpdateInputProcessor.ts +9 -7
- package/src/mapper/update/relations/OneHasOneInverseUpdateInputProcessor.ts +18 -18
- package/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.ts +14 -17
- package/tests/cases/integration/graphQlRequests/insert/jsonInsert.test.ts +37 -0
- package/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.ts +69 -0
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.ts +0 -5
- package/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.ts +0 -5
- package/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.ts +9 -0
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.ts +0 -5
- package/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.ts +0 -5
- package/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +5 -0
- package/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +5 -0
- package/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +5 -0
- package/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +5 -0
- package/tests/cases/integration/graphQlSchema/schema-basic.gql +11 -0
- package/tests/cases/integration/graphQlSchema/schema-bug-66.gql +6 -0
- package/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +11 -0
- package/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +6 -0
- package/tests/cases/integration/graphQlSchema/schema-new-builder.gql +12 -0
- package/tests/cases/unit/inputPreValidator.test.ts +1 -1
- package/tests/src/testGraphql.ts +1 -1
|
@@ -11,10 +11,8 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
11
11
|
}
|
|
12
12
|
async connect(context) {
|
|
13
13
|
const { entity, relation, targetEntity, targetRelation, input } = context;
|
|
14
|
-
const newInverseSide = await this.mapper.getPrimaryValue(targetEntity, input);
|
|
15
|
-
if (
|
|
16
|
-
return [new Result.MutationEntryNotFoundError([], input)];
|
|
17
|
-
}
|
|
14
|
+
const [newInverseSide, err] = await this.mapper.getPrimaryValue(targetEntity, input);
|
|
15
|
+
if (err) return [err];
|
|
18
16
|
const currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity);
|
|
19
17
|
const currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide);
|
|
20
18
|
if (currentOwnerResult.some((it) => it.error) || currentOwnerResult.length === 1 && currentOwnerResult[0].result === Result.MutationResultType.nothingToDo) {
|
|
@@ -47,7 +45,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
47
45
|
async connectOrCreate({ input: { connect, create }, ...context }) {
|
|
48
46
|
const { relation, targetRelation, targetEntity, entity } = context;
|
|
49
47
|
const currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity);
|
|
50
|
-
const newInverseSide = await this.mapper.getPrimaryValue(targetEntity, connect);
|
|
48
|
+
const [newInverseSide] = await this.mapper.getPrimaryValue(targetEntity, connect);
|
|
51
49
|
if (newInverseSide) {
|
|
52
50
|
const currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide);
|
|
53
51
|
if (currentOwnerResult.some((it) => it.error) || currentOwnerResult.length === 1 && currentOwnerResult[0].result === Result.MutationResultType.nothingToDo) {
|
|
@@ -84,7 +82,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
84
82
|
if (!inversePrimary) {
|
|
85
83
|
return [new Result.MutationNothingToDo([], Result.NothingToDoReason.emptyRelation)];
|
|
86
84
|
}
|
|
87
|
-
return await this.mapper.update(targetEntity,
|
|
85
|
+
return await this.mapper.update(targetEntity, new CheckedPrimary.CheckedPrimary(inversePrimary), input);
|
|
88
86
|
};
|
|
89
87
|
}
|
|
90
88
|
async upsert({ entity, relation, targetEntity, input: { create, update } }) {
|
|
@@ -99,7 +97,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
99
97
|
return [];
|
|
100
98
|
}
|
|
101
99
|
return async () => {
|
|
102
|
-
return await this.mapper.update(targetEntity,
|
|
100
|
+
return await this.mapper.update(targetEntity, new CheckedPrimary.CheckedPrimary(primary), update);
|
|
103
101
|
};
|
|
104
102
|
}
|
|
105
103
|
async disconnect({ entity, targetEntity, relation, targetRelation }) {
|
|
@@ -113,7 +111,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
113
111
|
this.updateBuilder.addFieldValue(relation.name, null);
|
|
114
112
|
if (relation.orphanRemoval && inversePrimary) {
|
|
115
113
|
return async () => {
|
|
116
|
-
return await this.mapper.delete(targetEntity,
|
|
114
|
+
return await this.mapper.delete(targetEntity, new CheckedPrimary.CheckedPrimary(inversePrimary));
|
|
117
115
|
};
|
|
118
116
|
}
|
|
119
117
|
return [];
|
|
@@ -156,7 +154,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
156
154
|
if (currentInverseSide === newInverseSide) {
|
|
157
155
|
return [new Result.MutationNothingToDo([], Result.NothingToDoReason.alreadyExists)];
|
|
158
156
|
}
|
|
159
|
-
const currentOwnerOfNewInverseSide = await this.mapper.getPrimaryValue(entity, {
|
|
157
|
+
const [currentOwnerOfNewInverseSide] = await this.mapper.getPrimaryValue(entity, {
|
|
160
158
|
[relation.name]: { [targetEntity.primary]: newInverseSide }
|
|
161
159
|
});
|
|
162
160
|
if (currentOwnerOfNewInverseSide === this.primaryValue) {
|
|
@@ -171,9 +169,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
171
169
|
}
|
|
172
170
|
return await this.mapper.updateInternal(
|
|
173
171
|
entity,
|
|
174
|
-
|
|
175
|
-
[entity.primary]: currentOwnerOfNewInverseSide
|
|
176
|
-
},
|
|
172
|
+
new CheckedPrimary.CheckedPrimary(currentOwnerOfNewInverseSide),
|
|
177
173
|
(builder) => {
|
|
178
174
|
builder.addPredicates([relation.name]);
|
|
179
175
|
builder.addFieldValue(relation.name, null);
|
package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OneHasOneOwningUpdateInputProcessor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.ts"],"sourcesContent":["import { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport {\n\tConstraintType,\n\tgetInsertPrimary,\n\tMutationConstraintViolationError,\n\tMutationEntryNotFoundError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { UpdateBuilder } from '../../update/UpdateBuilder'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'\n\ntype Context = Model.OneHasOneOwningContext\n\nexport class OneHasOneOwningUpdateInputProcessor implements UpdateInputProcessor.HasOneRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{\n\tconstructor(\n\t\tprivate readonly primaryValue: Input.PrimaryValue,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly updateBuilder: UpdateBuilder,\n\t) {\n\t}\n\n\tpublic async connect(context: Model.OneHasOneOwningContext & { input: Input.UniqueWhere }) {\n\t\tconst { entity, relation, targetEntity, targetRelation, input } = context\n\t\tconst newInverseSide = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\tif (!newInverseSide) {\n\t\t\treturn [new MutationEntryNotFoundError([], input)]\n\t\t}\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide)\n\t\tif (currentOwnerResult.some(it => it.error)\n\t\t\t|| (currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo)\n\t\t) {\n\t\t\treturn currentOwnerResult\n\t\t}\n\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...currentOwnerResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async create(context: Model.OneHasOneOwningContext & { input: Input.CreateDataInput }) {\n\t\tconst { entity, relation, targetEntity, targetRelation } = context\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst createResult = await this.createInternal(context, currentInverseSide)\n\t\tconst newInverseSide = getInsertPrimary(createResult)\n\t\tif (!newInverseSide) {\n\t\t\treturn createResult\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...createResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async connectOrCreate({ input: { connect, create }, ...context }: Model.OneHasOneOwningContext & { input: Input.ConnectOrCreateInput }) {\n\t\tconst { relation, targetRelation, targetEntity, entity } = context\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst newInverseSide = await this.mapper.getPrimaryValue(targetEntity, connect)\n\n\t\tif (newInverseSide) {\n\t\t\tconst currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide)\n\t\t\tif (currentOwnerResult.some(it => it.error)\n\t\t\t\t|| (currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo)\n\t\t\t) {\n\t\t\t\treturn currentOwnerResult\n\t\t\t}\n\t\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\t\t\treturn async () => {\n\t\t\t\treturn [\n\t\t\t\t\t...currentOwnerResult,\n\t\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t\t]\n\t\t\t}\n\n\t\t}\n\n\t\tconst createResult = await this.createInternal({ ...context, input: create }, currentInverseSide)\n\t\tconst newInverseSideCreate = getInsertPrimary(createResult)\n\t\tif (!newInverseSideCreate) {\n\t\t\treturn createResult\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSideCreate)\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...createResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async update({ entity, relation, targetEntity, input }: Model.OneHasOneOwningContext & { input: Input.UpdateDataInput }) {\n\t\treturn async () => {\n\t\t\tconst inversePrimary = await this.mapper.selectField(\n\t\t\t\tentity,\n\t\t\t\t{ [entity.primary]: this.primaryValue },\n\t\t\t\trelation.name,\n\t\t\t)\n\t\t\tif (!inversePrimary) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\treturn await this.mapper.update(targetEntity, { [targetEntity.primary]: inversePrimary }, input)\n\t\t}\n\t}\n\n\tpublic async upsert({ entity, relation, targetEntity, input: { create, update } }: Model.OneHasOneOwningContext & { input: UpdateInputProcessor.UpsertInput }) {\n\t\tconst primary = await this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\tif (!primary) {\n\t\t\tconst insertResult = await this.mapper.insert(targetEntity, create)\n\t\t\tconst insertPrimary = getInsertPrimary(insertResult)\n\t\t\tif (!insertPrimary) {\n\t\t\t\treturn insertResult\n\t\t\t}\n\t\t\tthis.updateBuilder.addFieldValue(relation.name, insertPrimary)\n\t\t\treturn []\n\t\t}\n\n\t\treturn async () => {\n\t\t\treturn await this.mapper.update(targetEntity, { [targetEntity.primary]: primary }, update)\n\t\t}\n\t}\n\n\tpublic async disconnect({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneOwningContext & { input: undefined }) {\n\t\tif (!relation.nullable) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\tconst inversePrimary = (targetRelation && !targetRelation.nullable) || relation.orphanRemoval\n\t\t\t? await this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\t\t: undefined\n\t\tif (inversePrimary && targetRelation && !targetRelation.nullable && !relation.orphanRemoval) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, null)\n\n\t\tif (relation.orphanRemoval && inversePrimary) {\n\t\t\treturn async () => {\n\t\t\t\treturn await this.mapper.delete(targetEntity, { [targetEntity.primary]: inversePrimary })\n\t\t\t}\n\t\t}\n\n\t\treturn []\n\t}\n\n\tpublic async delete({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneOwningContext & { input: undefined }) {\n\t\tif (!relation.nullable && relation.joiningColumn.onDelete !== Model.OnDelete.cascade) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\treturn async () => {\n\t\t\tconst targetPrimary = await this.mapper.selectField(\n\t\t\t\tentity,\n\t\t\t\t{ [entity.primary]: this.primaryValue },\n\t\t\t\trelation.name,\n\t\t\t)\n\t\t\tif (!targetPrimary) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\treturn await this.mapper.delete(targetEntity, new CheckedPrimary(targetPrimary))\n\t\t}\n\t}\n\n\tprivate async createInternal(\n\t\t{ targetEntity, targetRelation, relation, input }: Model.OneHasOneOwningContext & { input: Input.CreateDataInput },\n\t\tcurrentInverseSide: Input.PrimaryValue | undefined,\n\t): Promise<MutationResultList> {\n\t\tif (targetRelation && !targetRelation.nullable && !relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\treturn await this.mapper.insert(targetEntity, input)\n\t}\n\n\tprivate async getCurrentInverseSide(targetRelation: Model.OneHasOneInverseRelation | null, relation: Model.OneHasOneOwningRelation, entity: Model.Entity) {\n\t\tif ((targetRelation && !targetRelation.nullable) || relation.orphanRemoval) {\n\t\t\treturn this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\t}\n\t\treturn undefined\n\t}\n\n\tprivate async cleanupOrphan(relation: Model.OneHasOneOwningRelation, targetEntity: Model.Entity, currentInverseSide: Input.PrimaryValue | undefined) {\n\t\tif (relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn await this.mapper.delete(targetEntity, { [targetEntity.primary]: currentInverseSide })\n\t\t}\n\t\treturn []\n\t}\n\n\tprivate async handleStateBeforeConnect(\n\t\t{ targetEntity, targetRelation, relation, entity }: Model.OneHasOneOwningContext,\n\t\tcurrentInverseSide: Input.PrimaryValue | undefined,\n\t\tnewInverseSide: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\n\t\tif (currentInverseSide === newInverseSide) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\n\t\tconst currentOwnerOfNewInverseSide = await this.mapper.getPrimaryValue(entity, {\n\t\t\t[relation.name]: { [targetEntity.primary]: newInverseSide },\n\t\t})\n\n\t\tif (currentOwnerOfNewInverseSide === this.primaryValue) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\n\t\t// orphan removal handled bellow\n\t\tif (targetRelation && !targetRelation.nullable && !relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\tif (currentOwnerOfNewInverseSide) {\n\t\t\tif (!relation.nullable) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\n\t\t\treturn await this.mapper.updateInternal(\n\t\t\t\tentity,\n\t\t\t\t{\n\t\t\t\t\t[entity.primary]: currentOwnerOfNewInverseSide,\n\t\t\t\t},\n\t\t\t\tbuilder => {\n\t\t\t\t\tbuilder.addPredicates([relation.name])\n\t\t\t\t\tbuilder.addFieldValue(relation.name, null)\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t\treturn []\n\t}\n}\n"],"names":["MutationEntryNotFoundError","MutationResultType","getInsertPrimary","MutationNothingToDo","NothingToDoReason","MutationConstraintViolationError","ConstraintType","Model","CheckedPrimary"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OneHasOneOwningUpdateInputProcessor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.ts"],"sourcesContent":["import { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport {\n\tConstraintType,\n\tgetInsertPrimary,\n\tMutationConstraintViolationError,\n\tMutationEntryNotFoundError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { UpdateBuilder } from '../../update/UpdateBuilder'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'\nimport { MapperInput } from '../../types'\n\ntype Context = Model.OneHasOneOwningContext\n\nexport class OneHasOneOwningUpdateInputProcessor implements UpdateInputProcessor.HasOneRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{\n\tconstructor(\n\t\tprivate readonly primaryValue: Input.PrimaryValue,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly updateBuilder: UpdateBuilder,\n\t) {\n\t}\n\n\tpublic async connect(context: Model.OneHasOneOwningContext & { input: Input.UniqueWhere | CheckedPrimary }) {\n\t\tconst { entity, relation, targetEntity, targetRelation, input } = context\n\t\tconst [newInverseSide, err] = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\tif (err) return [err]\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide)\n\t\tif (currentOwnerResult.some(it => it.error)\n\t\t\t|| (currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo)\n\t\t) {\n\t\t\treturn currentOwnerResult\n\t\t}\n\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...currentOwnerResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async create(context: Model.OneHasOneOwningContext & { input: MapperInput.CreateDataInput }) {\n\t\tconst { entity, relation, targetEntity, targetRelation } = context\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst createResult = await this.createInternal(context, currentInverseSide)\n\t\tconst newInverseSide = getInsertPrimary(createResult)\n\t\tif (!newInverseSide) {\n\t\t\treturn createResult\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...createResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async connectOrCreate({ input: { connect, create }, ...context }: Model.OneHasOneOwningContext & { input: MapperInput.ConnectOrCreateInput }) {\n\t\tconst { relation, targetRelation, targetEntity, entity } = context\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst [newInverseSide] = await this.mapper.getPrimaryValue(targetEntity, connect)\n\n\t\tif (newInverseSide) {\n\t\t\tconst currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide)\n\t\t\tif (currentOwnerResult.some(it => it.error)\n\t\t\t\t|| (currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo)\n\t\t\t) {\n\t\t\t\treturn currentOwnerResult\n\t\t\t}\n\t\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\t\t\treturn async () => {\n\t\t\t\treturn [\n\t\t\t\t\t...currentOwnerResult,\n\t\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t\t]\n\t\t\t}\n\n\t\t}\n\n\t\tconst createResult = await this.createInternal({ ...context, input: create }, currentInverseSide)\n\t\tconst newInverseSideCreate = getInsertPrimary(createResult)\n\t\tif (!newInverseSideCreate) {\n\t\t\treturn createResult\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSideCreate)\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...createResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async update({ entity, relation, targetEntity, input }: Model.OneHasOneOwningContext & { input: MapperInput.UpdateDataInput }) {\n\t\treturn async () => {\n\t\t\tconst inversePrimary = await this.mapper.selectField(\n\t\t\t\tentity,\n\t\t\t\t{ [entity.primary]: this.primaryValue },\n\t\t\t\trelation.name,\n\t\t\t)\n\t\t\tif (!inversePrimary) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\treturn await this.mapper.update(targetEntity, new CheckedPrimary(inversePrimary), input)\n\t\t}\n\t}\n\n\tpublic async upsert({ entity, relation, targetEntity, input: { create, update } }: Model.OneHasOneOwningContext & { input: UpdateInputProcessor.UpsertInput }) {\n\t\tconst primary = await this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\tif (!primary) {\n\t\t\tconst insertResult = await this.mapper.insert(targetEntity, create)\n\t\t\tconst insertPrimary = getInsertPrimary(insertResult)\n\t\t\tif (!insertPrimary) {\n\t\t\t\treturn insertResult\n\t\t\t}\n\t\t\tthis.updateBuilder.addFieldValue(relation.name, insertPrimary)\n\t\t\treturn []\n\t\t}\n\n\t\treturn async () => {\n\t\t\treturn await this.mapper.update(targetEntity, new CheckedPrimary(primary), update)\n\t\t}\n\t}\n\n\tpublic async disconnect({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneOwningContext & { input: undefined }) {\n\t\tif (!relation.nullable) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\tconst inversePrimary = (targetRelation && !targetRelation.nullable) || relation.orphanRemoval\n\t\t\t? await this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\t\t: undefined\n\t\tif (inversePrimary && targetRelation && !targetRelation.nullable && !relation.orphanRemoval) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, null)\n\n\t\tif (relation.orphanRemoval && inversePrimary) {\n\t\t\treturn async () => {\n\t\t\t\treturn await this.mapper.delete(targetEntity, new CheckedPrimary(inversePrimary))\n\t\t\t}\n\t\t}\n\n\t\treturn []\n\t}\n\n\tpublic async delete({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneOwningContext & { input: undefined }) {\n\t\tif (!relation.nullable && relation.joiningColumn.onDelete !== Model.OnDelete.cascade) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\treturn async () => {\n\t\t\tconst targetPrimary = await this.mapper.selectField(\n\t\t\t\tentity,\n\t\t\t\t{ [entity.primary]: this.primaryValue },\n\t\t\t\trelation.name,\n\t\t\t)\n\t\t\tif (!targetPrimary) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\treturn await this.mapper.delete(targetEntity, new CheckedPrimary(targetPrimary))\n\t\t}\n\t}\n\n\tprivate async createInternal(\n\t\t{ targetEntity, targetRelation, relation, input }: Model.OneHasOneOwningContext & { input: MapperInput.CreateDataInput },\n\t\tcurrentInverseSide: Input.PrimaryValue | undefined,\n\t): Promise<MutationResultList> {\n\t\tif (targetRelation && !targetRelation.nullable && !relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\treturn await this.mapper.insert(targetEntity, input)\n\t}\n\n\tprivate async getCurrentInverseSide(targetRelation: Model.OneHasOneInverseRelation | null, relation: Model.OneHasOneOwningRelation, entity: Model.Entity) {\n\t\tif ((targetRelation && !targetRelation.nullable) || relation.orphanRemoval) {\n\t\t\treturn this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\t}\n\t\treturn undefined\n\t}\n\n\tprivate async cleanupOrphan(relation: Model.OneHasOneOwningRelation, targetEntity: Model.Entity, currentInverseSide: Input.PrimaryValue | undefined) {\n\t\tif (relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn await this.mapper.delete(targetEntity, { [targetEntity.primary]: currentInverseSide })\n\t\t}\n\t\treturn []\n\t}\n\n\tprivate async handleStateBeforeConnect(\n\t\t{ targetEntity, targetRelation, relation, entity }: Model.OneHasOneOwningContext,\n\t\tcurrentInverseSide: Input.PrimaryValue | undefined,\n\t\tnewInverseSide: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\n\t\tif (currentInverseSide === newInverseSide) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\n\t\tconst [currentOwnerOfNewInverseSide] = await this.mapper.getPrimaryValue(entity, {\n\t\t\t[relation.name]: { [targetEntity.primary]: newInverseSide },\n\t\t})\n\n\t\tif (currentOwnerOfNewInverseSide === this.primaryValue) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\n\t\t// orphan removal handled bellow\n\t\tif (targetRelation && !targetRelation.nullable && !relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\tif (currentOwnerOfNewInverseSide) {\n\t\t\tif (!relation.nullable) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\n\t\t\treturn await this.mapper.updateInternal(\n\t\t\t\tentity,\n\t\t\t\tnew CheckedPrimary(currentOwnerOfNewInverseSide),\n\t\t\t\tbuilder => {\n\t\t\t\t\tbuilder.addPredicates([relation.name])\n\t\t\t\t\tbuilder.addFieldValue(relation.name, null)\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t\treturn []\n\t}\n}\n"],"names":["MutationResultType","getInsertPrimary","MutationNothingToDo","NothingToDoReason","CheckedPrimary","MutationConstraintViolationError","ConstraintType","Model"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Model } from "@contember/schema";
|
|
2
|
-
import {
|
|
2
|
+
import { MutationResultType, getInsertPrimary, MutationNothingToDo, NothingToDoReason, MutationConstraintViolationError, ConstraintType } from "../../Result.js";
|
|
3
3
|
import { CheckedPrimary } from "../../CheckedPrimary.js";
|
|
4
4
|
class OneHasOneOwningUpdateInputProcessor {
|
|
5
5
|
constructor(primaryValue, mapper, updateBuilder) {
|
|
@@ -9,10 +9,8 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
9
9
|
}
|
|
10
10
|
async connect(context) {
|
|
11
11
|
const { entity, relation, targetEntity, targetRelation, input } = context;
|
|
12
|
-
const newInverseSide = await this.mapper.getPrimaryValue(targetEntity, input);
|
|
13
|
-
if (
|
|
14
|
-
return [new MutationEntryNotFoundError([], input)];
|
|
15
|
-
}
|
|
12
|
+
const [newInverseSide, err] = await this.mapper.getPrimaryValue(targetEntity, input);
|
|
13
|
+
if (err) return [err];
|
|
16
14
|
const currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity);
|
|
17
15
|
const currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide);
|
|
18
16
|
if (currentOwnerResult.some((it) => it.error) || currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo) {
|
|
@@ -45,7 +43,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
45
43
|
async connectOrCreate({ input: { connect, create }, ...context }) {
|
|
46
44
|
const { relation, targetRelation, targetEntity, entity } = context;
|
|
47
45
|
const currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity);
|
|
48
|
-
const newInverseSide = await this.mapper.getPrimaryValue(targetEntity, connect);
|
|
46
|
+
const [newInverseSide] = await this.mapper.getPrimaryValue(targetEntity, connect);
|
|
49
47
|
if (newInverseSide) {
|
|
50
48
|
const currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide);
|
|
51
49
|
if (currentOwnerResult.some((it) => it.error) || currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo) {
|
|
@@ -82,7 +80,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
82
80
|
if (!inversePrimary) {
|
|
83
81
|
return [new MutationNothingToDo([], NothingToDoReason.emptyRelation)];
|
|
84
82
|
}
|
|
85
|
-
return await this.mapper.update(targetEntity,
|
|
83
|
+
return await this.mapper.update(targetEntity, new CheckedPrimary(inversePrimary), input);
|
|
86
84
|
};
|
|
87
85
|
}
|
|
88
86
|
async upsert({ entity, relation, targetEntity, input: { create, update } }) {
|
|
@@ -97,7 +95,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
97
95
|
return [];
|
|
98
96
|
}
|
|
99
97
|
return async () => {
|
|
100
|
-
return await this.mapper.update(targetEntity,
|
|
98
|
+
return await this.mapper.update(targetEntity, new CheckedPrimary(primary), update);
|
|
101
99
|
};
|
|
102
100
|
}
|
|
103
101
|
async disconnect({ entity, targetEntity, relation, targetRelation }) {
|
|
@@ -111,7 +109,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
111
109
|
this.updateBuilder.addFieldValue(relation.name, null);
|
|
112
110
|
if (relation.orphanRemoval && inversePrimary) {
|
|
113
111
|
return async () => {
|
|
114
|
-
return await this.mapper.delete(targetEntity,
|
|
112
|
+
return await this.mapper.delete(targetEntity, new CheckedPrimary(inversePrimary));
|
|
115
113
|
};
|
|
116
114
|
}
|
|
117
115
|
return [];
|
|
@@ -154,7 +152,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
154
152
|
if (currentInverseSide === newInverseSide) {
|
|
155
153
|
return [new MutationNothingToDo([], NothingToDoReason.alreadyExists)];
|
|
156
154
|
}
|
|
157
|
-
const currentOwnerOfNewInverseSide = await this.mapper.getPrimaryValue(entity, {
|
|
155
|
+
const [currentOwnerOfNewInverseSide] = await this.mapper.getPrimaryValue(entity, {
|
|
158
156
|
[relation.name]: { [targetEntity.primary]: newInverseSide }
|
|
159
157
|
});
|
|
160
158
|
if (currentOwnerOfNewInverseSide === this.primaryValue) {
|
|
@@ -169,9 +167,7 @@ class OneHasOneOwningUpdateInputProcessor {
|
|
|
169
167
|
}
|
|
170
168
|
return await this.mapper.updateInternal(
|
|
171
169
|
entity,
|
|
172
|
-
|
|
173
|
-
[entity.primary]: currentOwnerOfNewInverseSide
|
|
174
|
-
},
|
|
170
|
+
new CheckedPrimary(currentOwnerOfNewInverseSide),
|
|
175
171
|
(builder) => {
|
|
176
172
|
builder.addPredicates([relation.name]);
|
|
177
173
|
builder.addFieldValue(relation.name, null);
|
package/dist/production/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OneHasOneOwningUpdateInputProcessor.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.ts"],"sourcesContent":["import { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport {\n\tConstraintType,\n\tgetInsertPrimary,\n\tMutationConstraintViolationError,\n\tMutationEntryNotFoundError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { UpdateBuilder } from '../../update/UpdateBuilder'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'\n\ntype Context = Model.OneHasOneOwningContext\n\nexport class OneHasOneOwningUpdateInputProcessor implements UpdateInputProcessor.HasOneRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{\n\tconstructor(\n\t\tprivate readonly primaryValue: Input.PrimaryValue,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly updateBuilder: UpdateBuilder,\n\t) {\n\t}\n\n\tpublic async connect(context: Model.OneHasOneOwningContext & { input: Input.UniqueWhere }) {\n\t\tconst { entity, relation, targetEntity, targetRelation, input } = context\n\t\tconst newInverseSide = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\tif (!newInverseSide) {\n\t\t\treturn [new MutationEntryNotFoundError([], input)]\n\t\t}\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide)\n\t\tif (currentOwnerResult.some(it => it.error)\n\t\t\t|| (currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo)\n\t\t) {\n\t\t\treturn currentOwnerResult\n\t\t}\n\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...currentOwnerResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async create(context: Model.OneHasOneOwningContext & { input: Input.CreateDataInput }) {\n\t\tconst { entity, relation, targetEntity, targetRelation } = context\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst createResult = await this.createInternal(context, currentInverseSide)\n\t\tconst newInverseSide = getInsertPrimary(createResult)\n\t\tif (!newInverseSide) {\n\t\t\treturn createResult\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...createResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async connectOrCreate({ input: { connect, create }, ...context }: Model.OneHasOneOwningContext & { input: Input.ConnectOrCreateInput }) {\n\t\tconst { relation, targetRelation, targetEntity, entity } = context\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst newInverseSide = await this.mapper.getPrimaryValue(targetEntity, connect)\n\n\t\tif (newInverseSide) {\n\t\t\tconst currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide)\n\t\t\tif (currentOwnerResult.some(it => it.error)\n\t\t\t\t|| (currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo)\n\t\t\t) {\n\t\t\t\treturn currentOwnerResult\n\t\t\t}\n\t\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\t\t\treturn async () => {\n\t\t\t\treturn [\n\t\t\t\t\t...currentOwnerResult,\n\t\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t\t]\n\t\t\t}\n\n\t\t}\n\n\t\tconst createResult = await this.createInternal({ ...context, input: create }, currentInverseSide)\n\t\tconst newInverseSideCreate = getInsertPrimary(createResult)\n\t\tif (!newInverseSideCreate) {\n\t\t\treturn createResult\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSideCreate)\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...createResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async update({ entity, relation, targetEntity, input }: Model.OneHasOneOwningContext & { input: Input.UpdateDataInput }) {\n\t\treturn async () => {\n\t\t\tconst inversePrimary = await this.mapper.selectField(\n\t\t\t\tentity,\n\t\t\t\t{ [entity.primary]: this.primaryValue },\n\t\t\t\trelation.name,\n\t\t\t)\n\t\t\tif (!inversePrimary) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\treturn await this.mapper.update(targetEntity, { [targetEntity.primary]: inversePrimary }, input)\n\t\t}\n\t}\n\n\tpublic async upsert({ entity, relation, targetEntity, input: { create, update } }: Model.OneHasOneOwningContext & { input: UpdateInputProcessor.UpsertInput }) {\n\t\tconst primary = await this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\tif (!primary) {\n\t\t\tconst insertResult = await this.mapper.insert(targetEntity, create)\n\t\t\tconst insertPrimary = getInsertPrimary(insertResult)\n\t\t\tif (!insertPrimary) {\n\t\t\t\treturn insertResult\n\t\t\t}\n\t\t\tthis.updateBuilder.addFieldValue(relation.name, insertPrimary)\n\t\t\treturn []\n\t\t}\n\n\t\treturn async () => {\n\t\t\treturn await this.mapper.update(targetEntity, { [targetEntity.primary]: primary }, update)\n\t\t}\n\t}\n\n\tpublic async disconnect({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneOwningContext & { input: undefined }) {\n\t\tif (!relation.nullable) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\tconst inversePrimary = (targetRelation && !targetRelation.nullable) || relation.orphanRemoval\n\t\t\t? await this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\t\t: undefined\n\t\tif (inversePrimary && targetRelation && !targetRelation.nullable && !relation.orphanRemoval) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, null)\n\n\t\tif (relation.orphanRemoval && inversePrimary) {\n\t\t\treturn async () => {\n\t\t\t\treturn await this.mapper.delete(targetEntity, { [targetEntity.primary]: inversePrimary })\n\t\t\t}\n\t\t}\n\n\t\treturn []\n\t}\n\n\tpublic async delete({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneOwningContext & { input: undefined }) {\n\t\tif (!relation.nullable && relation.joiningColumn.onDelete !== Model.OnDelete.cascade) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\treturn async () => {\n\t\t\tconst targetPrimary = await this.mapper.selectField(\n\t\t\t\tentity,\n\t\t\t\t{ [entity.primary]: this.primaryValue },\n\t\t\t\trelation.name,\n\t\t\t)\n\t\t\tif (!targetPrimary) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\treturn await this.mapper.delete(targetEntity, new CheckedPrimary(targetPrimary))\n\t\t}\n\t}\n\n\tprivate async createInternal(\n\t\t{ targetEntity, targetRelation, relation, input }: Model.OneHasOneOwningContext & { input: Input.CreateDataInput },\n\t\tcurrentInverseSide: Input.PrimaryValue | undefined,\n\t): Promise<MutationResultList> {\n\t\tif (targetRelation && !targetRelation.nullable && !relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\treturn await this.mapper.insert(targetEntity, input)\n\t}\n\n\tprivate async getCurrentInverseSide(targetRelation: Model.OneHasOneInverseRelation | null, relation: Model.OneHasOneOwningRelation, entity: Model.Entity) {\n\t\tif ((targetRelation && !targetRelation.nullable) || relation.orphanRemoval) {\n\t\t\treturn this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\t}\n\t\treturn undefined\n\t}\n\n\tprivate async cleanupOrphan(relation: Model.OneHasOneOwningRelation, targetEntity: Model.Entity, currentInverseSide: Input.PrimaryValue | undefined) {\n\t\tif (relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn await this.mapper.delete(targetEntity, { [targetEntity.primary]: currentInverseSide })\n\t\t}\n\t\treturn []\n\t}\n\n\tprivate async handleStateBeforeConnect(\n\t\t{ targetEntity, targetRelation, relation, entity }: Model.OneHasOneOwningContext,\n\t\tcurrentInverseSide: Input.PrimaryValue | undefined,\n\t\tnewInverseSide: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\n\t\tif (currentInverseSide === newInverseSide) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\n\t\tconst currentOwnerOfNewInverseSide = await this.mapper.getPrimaryValue(entity, {\n\t\t\t[relation.name]: { [targetEntity.primary]: newInverseSide },\n\t\t})\n\n\t\tif (currentOwnerOfNewInverseSide === this.primaryValue) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\n\t\t// orphan removal handled bellow\n\t\tif (targetRelation && !targetRelation.nullable && !relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\tif (currentOwnerOfNewInverseSide) {\n\t\t\tif (!relation.nullable) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\n\t\t\treturn await this.mapper.updateInternal(\n\t\t\t\tentity,\n\t\t\t\t{\n\t\t\t\t\t[entity.primary]: currentOwnerOfNewInverseSide,\n\t\t\t\t},\n\t\t\t\tbuilder => {\n\t\t\t\t\tbuilder.addPredicates([relation.name])\n\t\t\t\t\tbuilder.addFieldValue(relation.name, null)\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t\treturn []\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OneHasOneOwningUpdateInputProcessor.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/update/relations/OneHasOneOwningUpdateInputProcessor.ts"],"sourcesContent":["import { UpdateInputProcessor } from '../../../inputProcessing'\nimport { Input, Model } from '@contember/schema'\nimport {\n\tConstraintType,\n\tgetInsertPrimary,\n\tMutationConstraintViolationError,\n\tMutationEntryNotFoundError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationResultType,\n\tNothingToDoReason,\n} from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { UpdateBuilder } from '../../update/UpdateBuilder'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { SqlUpdateInputProcessorResult } from '../SqlUpdateInputProcessor'\nimport { MapperInput } from '../../types'\n\ntype Context = Model.OneHasOneOwningContext\n\nexport class OneHasOneOwningUpdateInputProcessor implements UpdateInputProcessor.HasOneRelationInputProcessor<Context, SqlUpdateInputProcessorResult>{\n\tconstructor(\n\t\tprivate readonly primaryValue: Input.PrimaryValue,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly updateBuilder: UpdateBuilder,\n\t) {\n\t}\n\n\tpublic async connect(context: Model.OneHasOneOwningContext & { input: Input.UniqueWhere | CheckedPrimary }) {\n\t\tconst { entity, relation, targetEntity, targetRelation, input } = context\n\t\tconst [newInverseSide, err] = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\tif (err) return [err]\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide)\n\t\tif (currentOwnerResult.some(it => it.error)\n\t\t\t|| (currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo)\n\t\t) {\n\t\t\treturn currentOwnerResult\n\t\t}\n\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...currentOwnerResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async create(context: Model.OneHasOneOwningContext & { input: MapperInput.CreateDataInput }) {\n\t\tconst { entity, relation, targetEntity, targetRelation } = context\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst createResult = await this.createInternal(context, currentInverseSide)\n\t\tconst newInverseSide = getInsertPrimary(createResult)\n\t\tif (!newInverseSide) {\n\t\t\treturn createResult\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...createResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async connectOrCreate({ input: { connect, create }, ...context }: Model.OneHasOneOwningContext & { input: MapperInput.ConnectOrCreateInput }) {\n\t\tconst { relation, targetRelation, targetEntity, entity } = context\n\t\tconst currentInverseSide = await this.getCurrentInverseSide(targetRelation, relation, entity)\n\t\tconst [newInverseSide] = await this.mapper.getPrimaryValue(targetEntity, connect)\n\n\t\tif (newInverseSide) {\n\t\t\tconst currentOwnerResult = await this.handleStateBeforeConnect(context, currentInverseSide, newInverseSide)\n\t\t\tif (currentOwnerResult.some(it => it.error)\n\t\t\t\t|| (currentOwnerResult.length === 1 && currentOwnerResult[0].result === MutationResultType.nothingToDo)\n\t\t\t) {\n\t\t\t\treturn currentOwnerResult\n\t\t\t}\n\t\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSide)\n\t\t\treturn async () => {\n\t\t\t\treturn [\n\t\t\t\t\t...currentOwnerResult,\n\t\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t\t]\n\t\t\t}\n\n\t\t}\n\n\t\tconst createResult = await this.createInternal({ ...context, input: create }, currentInverseSide)\n\t\tconst newInverseSideCreate = getInsertPrimary(createResult)\n\t\tif (!newInverseSideCreate) {\n\t\t\treturn createResult\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, newInverseSideCreate)\n\t\treturn async () => {\n\t\t\treturn [\n\t\t\t\t...createResult,\n\t\t\t\t...(await this.cleanupOrphan(relation, targetEntity, currentInverseSide)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async update({ entity, relation, targetEntity, input }: Model.OneHasOneOwningContext & { input: MapperInput.UpdateDataInput }) {\n\t\treturn async () => {\n\t\t\tconst inversePrimary = await this.mapper.selectField(\n\t\t\t\tentity,\n\t\t\t\t{ [entity.primary]: this.primaryValue },\n\t\t\t\trelation.name,\n\t\t\t)\n\t\t\tif (!inversePrimary) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\treturn await this.mapper.update(targetEntity, new CheckedPrimary(inversePrimary), input)\n\t\t}\n\t}\n\n\tpublic async upsert({ entity, relation, targetEntity, input: { create, update } }: Model.OneHasOneOwningContext & { input: UpdateInputProcessor.UpsertInput }) {\n\t\tconst primary = await this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\tif (!primary) {\n\t\t\tconst insertResult = await this.mapper.insert(targetEntity, create)\n\t\t\tconst insertPrimary = getInsertPrimary(insertResult)\n\t\t\tif (!insertPrimary) {\n\t\t\t\treturn insertResult\n\t\t\t}\n\t\t\tthis.updateBuilder.addFieldValue(relation.name, insertPrimary)\n\t\t\treturn []\n\t\t}\n\n\t\treturn async () => {\n\t\t\treturn await this.mapper.update(targetEntity, new CheckedPrimary(primary), update)\n\t\t}\n\t}\n\n\tpublic async disconnect({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneOwningContext & { input: undefined }) {\n\t\tif (!relation.nullable) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\tconst inversePrimary = (targetRelation && !targetRelation.nullable) || relation.orphanRemoval\n\t\t\t? await this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\t\t: undefined\n\t\tif (inversePrimary && targetRelation && !targetRelation.nullable && !relation.orphanRemoval) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\t\tthis.updateBuilder.addFieldValue(relation.name, null)\n\n\t\tif (relation.orphanRemoval && inversePrimary) {\n\t\t\treturn async () => {\n\t\t\t\treturn await this.mapper.delete(targetEntity, new CheckedPrimary(inversePrimary))\n\t\t\t}\n\t\t}\n\n\t\treturn []\n\t}\n\n\tpublic async delete({ entity, targetEntity, relation, targetRelation }: Model.OneHasOneOwningContext & { input: undefined }) {\n\t\tif (!relation.nullable && relation.joiningColumn.onDelete !== Model.OnDelete.cascade) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\treturn async () => {\n\t\t\tconst targetPrimary = await this.mapper.selectField(\n\t\t\t\tentity,\n\t\t\t\t{ [entity.primary]: this.primaryValue },\n\t\t\t\trelation.name,\n\t\t\t)\n\t\t\tif (!targetPrimary) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.emptyRelation)]\n\t\t\t}\n\t\t\treturn await this.mapper.delete(targetEntity, new CheckedPrimary(targetPrimary))\n\t\t}\n\t}\n\n\tprivate async createInternal(\n\t\t{ targetEntity, targetRelation, relation, input }: Model.OneHasOneOwningContext & { input: MapperInput.CreateDataInput },\n\t\tcurrentInverseSide: Input.PrimaryValue | undefined,\n\t): Promise<MutationResultList> {\n\t\tif (targetRelation && !targetRelation.nullable && !relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\treturn await this.mapper.insert(targetEntity, input)\n\t}\n\n\tprivate async getCurrentInverseSide(targetRelation: Model.OneHasOneInverseRelation | null, relation: Model.OneHasOneOwningRelation, entity: Model.Entity) {\n\t\tif ((targetRelation && !targetRelation.nullable) || relation.orphanRemoval) {\n\t\t\treturn this.mapper.selectField(entity, { [entity.primary]: this.primaryValue }, relation.name)\n\t\t}\n\t\treturn undefined\n\t}\n\n\tprivate async cleanupOrphan(relation: Model.OneHasOneOwningRelation, targetEntity: Model.Entity, currentInverseSide: Input.PrimaryValue | undefined) {\n\t\tif (relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn await this.mapper.delete(targetEntity, { [targetEntity.primary]: currentInverseSide })\n\t\t}\n\t\treturn []\n\t}\n\n\tprivate async handleStateBeforeConnect(\n\t\t{ targetEntity, targetRelation, relation, entity }: Model.OneHasOneOwningContext,\n\t\tcurrentInverseSide: Input.PrimaryValue | undefined,\n\t\tnewInverseSide: Input.PrimaryValue,\n\t): Promise<MutationResultList> {\n\n\t\tif (currentInverseSide === newInverseSide) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\n\t\tconst [currentOwnerOfNewInverseSide] = await this.mapper.getPrimaryValue(entity, {\n\t\t\t[relation.name]: { [targetEntity.primary]: newInverseSide },\n\t\t})\n\n\t\tif (currentOwnerOfNewInverseSide === this.primaryValue) {\n\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyExists)]\n\t\t}\n\n\t\t// orphan removal handled bellow\n\t\tif (targetRelation && !targetRelation.nullable && !relation.orphanRemoval && currentInverseSide) {\n\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t}\n\n\t\tif (currentOwnerOfNewInverseSide) {\n\t\t\tif (!relation.nullable) {\n\t\t\t\treturn [new MutationConstraintViolationError([], ConstraintType.notNull)]\n\t\t\t}\n\n\t\t\treturn await this.mapper.updateInternal(\n\t\t\t\tentity,\n\t\t\t\tnew CheckedPrimary(currentOwnerOfNewInverseSide),\n\t\t\t\tbuilder => {\n\t\t\t\t\tbuilder.addPredicates([relation.name])\n\t\t\t\t\tbuilder.addFieldValue(relation.name, null)\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t\treturn []\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonInsert.test.d.ts","sourceRoot":"","sources":["../../../../../../tests/cases/integration/graphQlRequests/insert/jsonInsert.test.ts"],"names":[],"mappings":""}
|