@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteExecutor.js","sources":["../../../../../../packages/engine-content-api/src/mapper/delete/DeleteExecutor.ts"],"sourcesContent":["import { Acl, Input, Model } from '@contember/schema'\nimport { assertNever } from '../../utils'\nimport { Client, DeleteBuilder, Literal, SelectBuilder } from '@contember/database'\nimport { PathFactory, WhereBuilder } from '../select'\nimport { PredicateFactory } from '../../acl'\nimport { UpdateBuilderFactory } from '../update'\nimport {\n\tConstraintType,\n\tMutationConstraintViolationError,\n\tMutationDeleteOk,\n\tMutationEntryNotFoundError,\n\tMutationNoResultError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationUpdateOk,\n\tNothingToDoReason,\n} from '../Result'\nimport { Mapper } from '../Mapper'\nimport { CheckedPrimary } from '../CheckedPrimary'\nimport { DeleteState } from './DeleteState'\nimport {\n\tEntityReferenceRow,\n\tfindOwningRelations,\n\tfindRelationsWithOrphanRemoval,\n\tformatConstraintViolationMessage,\n\tOneHasOneOwningRelationTuple,\n} from './helpers'\nimport { getEntity } from '@contember/schema-utils'\nimport { AfterUpdateEvent, BeforeDeleteEvent, BeforeUpdateEvent, EventManager } from '../EventManager'\nimport { ImplementationException } from '../../exception'\n\ntype DeleteQueue = [entity: Model.Entity, ids: Input.PrimaryValue[]][]\n\ntype DeleteInfoRow = { allowed: boolean; id: Input.PrimaryValue } & { [K in `_${string}`]: Input.PrimaryValue }\n\nexport class DeleteExecutor {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly updateBuilderFactory: UpdateBuilderFactory,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {\n\t}\n\n\tpublic async execute(\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\treturn mapper.mutex.execute(async () => {\n\t\t\tconst primaryValue = await mapper.getPrimaryValue(entity, by)\n\t\t\tif (!primaryValue) {\n\t\t\t\treturn [new MutationEntryNotFoundError([], by as Input.UniqueWhere)]\n\t\t\t}\n\n\t\t\tif (mapper.deletedEntities.isDeleted(entity.name, primaryValue)) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyDeleted)]\n\t\t\t}\n\n\t\t\tconst primaryWhere = { [entity.primary]: { eq: primaryValue } }\n\t\t\tconst where = filter ? { and: [primaryWhere, filter] } : primaryWhere\n\t\t\tconst state = new DeleteState(mapper.deletedEntities)\n\t\t\tconst deletePrimary = await this.collectDeleteInfo(state, mapper, entity, where)\n\n\t\t\tconst deleteQueue: DeleteQueue = [[entity, deletePrimary]]\n\t\t\tawait this.collectOrphanRemovals(state, mapper, deleteQueue)\n\t\t\tif (!state.isOk()) {\n\t\t\t\treturn state.getResult()\n\t\t\t}\n\t\t\tconst result = state.getResult()\n\t\t\tconst entryToEventMap = new Map<MutationUpdateOk, BeforeUpdateEvent>()\n\t\t\tfor (const entry of result) {\n\t\t\t\tif (entry instanceof MutationDeleteOk) {\n\t\t\t\t\tawait mapper.eventManager.fire(new BeforeDeleteEvent(entry.entity, entry.primary))\n\t\t\t\t} else if (entry instanceof MutationUpdateOk) {\n\t\t\t\t\tconst beforeUpdateEvent = new BeforeUpdateEvent(entry.entity, [{\n\t\t\t\t\t\tcolumnName: Object.keys(entry.values)[0],\n\t\t\t\t\t\tfieldName: Object.keys(entry.input)[0],\n\t\t\t\t\t\tcolumnType: 'text',\n\t\t\t\t\t\tresolvedValue: null,\n\t\t\t\t\t\tvalue: Promise.resolve(null),\n\t\t\t\t\t}], entry.primary)\n\t\t\t\t\tentryToEventMap.set(entry, beforeUpdateEvent)\n\t\t\t\t\tawait mapper.eventManager.fire(beforeUpdateEvent)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait this.executeDeletes(deleteQueue, mapper.db)\n\n\t\t\tfor (const entry of result) {\n\t\t\t\tif (entry instanceof MutationUpdateOk) {\n\t\t\t\t\tconst beforeEvent = entryToEventMap.get(entry)\n\t\t\t\t\tif (!beforeEvent) {\n\t\t\t\t\t\tthrow new ImplementationException()\n\t\t\t\t\t}\n\t\t\t\t\tconst data = [{\n\t\t\t\t\t\tcolumnName: Object.keys(entry.values)[0],\n\t\t\t\t\t\tfieldName: Object.keys(entry.input)[0],\n\t\t\t\t\t\tcolumnType: 'text',\n\t\t\t\t\t\tresolvedValue: null,\n\t\t\t\t\t\tvalue: Promise.resolve(null),\n\t\t\t\t\t\told: Object.values(entry.oldValues ?? {})[0],\n\t\t\t\t\t}]\n\t\t\t\t\tconst afterEvent = new AfterUpdateEvent(entry.entity, data, entry.primary)\n\t\t\t\t\tbeforeEvent.afterEvent = afterEvent\n\t\t\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstate.confirmDeleted()\n\n\t\t\treturn state.getResult()\n\t\t})\n\t}\n\n\tprivate async executeDeletes(deleteQueue: DeleteQueue, db: Client): Promise<void> {\n\t\tfor (const [entity, ids] of deleteQueue) {\n\t\t\tif (ids.length === 0) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tawait DeleteBuilder.create()\n\t\t\t\t.from(entity.tableName)\n\t\t\t\t.where(expr => expr.in(entity.primaryColumn, ids))\n\t\t\t\t.execute(db)\n\t\t}\n\t}\n\n\tprivate async collectDeleteInfo(\n\t\tstate: DeleteState,\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\twhere: Input.OptionalWhere,\n\t): Promise<Input.PrimaryValue[]> {\n\t\tconst predicate = this.predicateFactory.createDeletePredicate(entity)\n\t\tconst orphanRemovals = findRelationsWithOrphanRemoval(this.schema, entity)\n\n\t\tconst qb = SelectBuilder.create<DeleteInfoRow>()\n\t\t\t.from(entity.tableName, 'root_')\n\t\t\t.select(['root_', entity.primaryColumn], 'id')\n\n\t\tconst qbWithOrphanColumns = this.qbOrphanColumns(qb, orphanRemovals)\n\t\tconst qbWithAllowedFlag = this.qbWithAllowed(entity, predicate, qbWithOrphanColumns)\n\t\tconst qbWithWhere = this.whereBuilder.build(qbWithAllowedFlag, entity, this.pathFactory.create([]), where)\n\n\t\tconst fullResult = await qbWithWhere.getResult(mapper.db)\n\n\t\tif (fullResult.length === 0) {\n\t\t\tstate.pushFailResult(new MutationNoResultError([]))\n\t\t\treturn []\n\t\t}\n\n\t\tconst result = this.filterPlannedForDelete(state, entity, fullResult)\n\n\t\tconst disallowed: Input.PrimaryValue[] = result.filter(it => !it.allowed).map(it => it.id)\n\t\tif (disallowed.length) {\n\t\t\tstate.pushFailResult(new MutationEntryNotFoundError([], { [entity.primary]: { in: disallowed } }))\n\t\t\treturn []\n\t\t}\n\n\t\treturn await this.processDeleteResult(state, mapper, entity, result, orphanRemovals)\n\t}\n\n\n\tprivate async collectOnDeleteInfo(state: DeleteState, mapper: Mapper, entity: Model.Entity, values: Input.PrimaryValue[]): Promise<void> {\n\t\tif (values.length === 0) {\n\t\t\treturn\n\t\t}\n\t\tconst owningRelations = findOwningRelations(this.schema, entity)\n\t\tfor (const [owningEntity, relation] of owningRelations) {\n\t\t\tif (owningEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (relation.joiningColumn.onDelete === Model.OnDelete.restrict) {\n\t\t\t\tawait this.collectRestrictResult(state, mapper, owningEntity, relation, values)\n\t\t\t} else if (relation.joiningColumn.onDelete === Model.OnDelete.cascade) {\n\t\t\t\tawait this.collectCascadeResult(state, mapper, owningEntity, relation, values)\n\t\t\t} else if (relation.joiningColumn.onDelete === Model.OnDelete.setNull) {\n\t\t\t\tawait this.collectSetNullResult(state, mapper, owningEntity, relation, values)\n\t\t\t} else {\n\t\t\t\tassertNever(relation.joiningColumn.onDelete)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async collectCascadeResult(\n\t\tstate: DeleteState,\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasOneRelation | Model.OneHasOneOwningRelation,\n\t\tvalues: Input.PrimaryValue[],\n\t): Promise<void> {\n\t\tconst predicate = this.predicateFactory.createDeletePredicate(entity)\n\t\tconst orphanRemovals = findRelationsWithOrphanRemoval(this.schema, entity)\n\n\t\tconst qb = this.createFetchByIdQueryBuilder(entity, relation, values)\n\t\tconst qbWithOrphanColumns = this.qbOrphanColumns(qb, orphanRemovals)\n\t\tconst qbWithAllowed = this.qbWithAllowed(entity, predicate, qbWithOrphanColumns)\n\n\t\tconst result = this.filterPlannedForDelete(state, entity, await qbWithAllowed.getResult(mapper.db))\n\n\t\tconst disallowed = result.filter(it => !it.allowed)\n\n\t\tif (disallowed.length > 0) {\n\t\t\tconst message = formatConstraintViolationMessage(disallowed, entity, relation)\n\t\t\t\t+ ' OnDelete behaviour of this relation is set to \"cascade\". This is possibly caused by ACL denial.'\n\n\t\t\tstate.pushFailResult(new MutationConstraintViolationError([], ConstraintType.foreignKey, message))\n\t\t\treturn\n\t\t}\n\n\t\tawait this.processDeleteResult(state, mapper, entity, result, orphanRemovals)\n\t}\n\n\n\tprivate async collectSetNullResult(\n\t\tstate: DeleteState,\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasOneRelation | Model.OneHasOneOwningRelation,\n\t\tvalues: Input.PrimaryValue[],\n\t): Promise<void> {\n\t\tconst predicate = this.predicateFactory.create(entity, Acl.Operation.update, [relation.name])\n\n\t\tconst qb = this.createFetchByIdQueryBuilder(entity, relation, values)\n\t\tconst qbWithAllowed = this.qbWithAllowed(entity, predicate, qb)\n\n\t\tconst result = this.filterPlannedForDelete(state, entity, await qbWithAllowed.getResult(mapper.db))\n\n\t\tconst disallowed = result.filter(it => !it.allowed)\n\n\t\tif (disallowed.length === 0) {\n\t\t\tconst input = { [relation.name]: { disconnect: true } }\n\t\t\tconst values = { [relation.joiningColumn.columnName]: null }\n\n\t\t\tstate.pushOkResult(result.map(it => new MutationUpdateOk([], entity, it.id, input, values, { [relation.joiningColumn.columnName]: it.ref })))\n\t\t\treturn\n\t\t}\n\n\t\tconst message = formatConstraintViolationMessage(disallowed, entity, relation)\n\t\t\t+ ' OnDelete behaviour of this relation is set to \"set null\". This is possibly caused by ACL denial.'\n\t\tstate.pushFailResult(new MutationConstraintViolationError([], ConstraintType.foreignKey, message))\n\t}\n\n\n\tprivate async collectRestrictResult(\n\t\tstate: DeleteState,\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasOneRelation | Model.OneHasOneOwningRelation,\n\t\tvalues: Input.PrimaryValue[],\n\t): Promise<void> {\n\t\tif (mapper.constraintHelper.areConstraintsDeferred('foreignKey')) {\n\t\t\treturn\n\t\t}\n\t\tconst qb = this.createFetchByIdQueryBuilder(entity, relation, values)\n\t\tconst result = this.filterPlannedForDelete(state, entity, await qb.getResult(mapper.db))\n\n\t\tif (result.length === 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst message = formatConstraintViolationMessage(result, entity, relation)\n\t\t\t+ ' OnDelete behaviour of this relation is set to \"restrict\". You might consider changing it to \"setNull\" or \"cascade\".'\n\n\t\tstate.pushFailResult(new MutationConstraintViolationError([], ConstraintType.foreignKey, message))\n\t}\n\n\tprivate async collectOrphanRemovals(state: DeleteState, mapper: Mapper, deleteQueue: DeleteQueue) {\n\t\tdo {\n\t\t\tif (!state.isOk()) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst orphanRemoval = state.fetchOrphanRemovals()\n\t\t\tif (orphanRemoval === null) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tconst entity = getEntity(this.schema, orphanRemoval[0])\n\t\t\tconst orphanResult = await this.collectDeleteInfo(state, mapper, entity, { [entity.primary]: { in: orphanRemoval[1] } })\n\t\t\tdeleteQueue.push([entity, orphanResult])\n\n\t\t} while (true)\n\t}\n\n\tprivate qbWithAllowed<R>(entity: Model.Entity, predicate: Input.OptionalWhere, selectQb: SelectBuilder<R>): SelectBuilder<R & { allowed: boolean }> {\n\t\treturn this.whereBuilder.buildAdvanced<R & { allowed: boolean }>(entity, this.pathFactory.create([]), predicate, cb => {\n\t\t\tconst qb = selectQb.select(expr => expr.selectCondition(cb), 'allowed')\n\t\t\treturn (qb === selectQb ? qb.select(new Literal('true'), 'allowed') : qb) as SelectBuilder<R & { allowed: boolean }>\n\t\t})\n\t}\n\n\tprivate qbOrphanColumns<R>(qb: SelectBuilder<R>, orphanRemovals: OneHasOneOwningRelationTuple[]): SelectBuilder<R> {\n\t\tconst orphanColumns = orphanRemovals.map(([, rel]) => rel.joiningColumn.columnName)\n\t\treturn orphanColumns.reduce((qb, column) => qb.select(['root_', column], `_${column}`), qb)\n\t}\n\n\tprivate createFetchByIdQueryBuilder(entity: Model.Entity, relation: Model.ManyHasOneRelation | Model.OneHasOneOwningRelation, values: Input.PrimaryValue[]) {\n\t\treturn SelectBuilder.create<EntityReferenceRow>()\n\t\t\t.from(entity.tableName, 'root_')\n\t\t\t.select(['root_', entity.primaryColumn], 'id')\n\t\t\t.select(['root_', relation.joiningColumn.columnName], 'ref')\n\t\t\t.where(expr => expr.in(relation.joiningColumn.columnName, values))\n\t}\n\n\tprivate filterPlannedForDelete<R extends {id: Input.PrimaryValue}>(state: DeleteState, entity: Model.Entity, values: R[]): R[] {\n\t\treturn values.filter(it => !state.isPlannedDelete(entity.name, it.id))\n\t}\n\n\n\tprivate async processDeleteResult(\n\t\tstate: DeleteState,\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\tresult: DeleteInfoRow[],\n\t\torphanRemovals: OneHasOneOwningRelationTuple[],\n\t): Promise<Input.PrimaryValue[]> {\n\t\tconst ids = result.map(it => it.id)\n\t\tstate.markPlannedDelete(entity.name, ids)\n\t\tstate.pushOkResult(ids.map(id => new MutationDeleteOk([], entity, id)))\n\n\t\tawait this.collectOnDeleteInfo(state, mapper, entity, ids)\n\n\t\tfor (const [entity, relation] of orphanRemovals) {\n\t\t\tconst ids = result.map(it => it[`_${relation.joiningColumn.columnName}`]).filter(it => it !== null)\n\t\t\tif (ids.length) {\n\t\t\t\tstate.addOrphanRemoval(entity.name, ids)\n\t\t\t}\n\t\t}\n\t\treturn ids\n\t}\n}\n"],"names":["values","qb","entity","ids"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DeleteExecutor.js","sources":["../../../../../../packages/engine-content-api/src/mapper/delete/DeleteExecutor.ts"],"sourcesContent":["import { Acl, Input, Model } from '@contember/schema'\nimport { assertNever } from '../../utils'\nimport { Client, DeleteBuilder, Literal, SelectBuilder } from '@contember/database'\nimport { PathFactory, WhereBuilder } from '../select'\nimport { PredicateFactory } from '../../acl'\nimport { UpdateBuilderFactory } from '../update'\nimport {\n\tConstraintType,\n\tMutationConstraintViolationError,\n\tMutationDeleteOk,\n\tMutationEntryNotFoundError,\n\tMutationNoResultError,\n\tMutationNothingToDo,\n\tMutationResultList,\n\tMutationUpdateOk,\n\tNothingToDoReason,\n} from '../Result'\nimport { Mapper } from '../Mapper'\nimport { CheckedPrimary } from '../CheckedPrimary'\nimport { DeleteState } from './DeleteState'\nimport {\n\tEntityReferenceRow,\n\tfindOwningRelations,\n\tfindRelationsWithOrphanRemoval,\n\tformatConstraintViolationMessage,\n\tOneHasOneOwningRelationTuple,\n} from './helpers'\nimport { getEntity } from '@contember/schema-utils'\nimport { AfterUpdateEvent, BeforeDeleteEvent, BeforeUpdateEvent, EventManager } from '../EventManager'\nimport { ImplementationException } from '../../exception'\n\ntype DeleteQueue = [entity: Model.Entity, ids: Input.PrimaryValue[]][]\n\ntype DeleteInfoRow = { allowed: boolean; id: Input.PrimaryValue } & { [K in `_${string}`]: Input.PrimaryValue }\n\nexport class DeleteExecutor {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly updateBuilderFactory: UpdateBuilderFactory,\n\t\tprivate readonly pathFactory: PathFactory,\n\t) {\n\t}\n\n\tpublic async execute(\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\tby: Input.UniqueWhere | CheckedPrimary,\n\t\tfilter?: Input.OptionalWhere,\n\t): Promise<MutationResultList> {\n\t\treturn mapper.mutex.execute(async () => {\n\t\t\tconst [primaryValue, err] = await mapper.getPrimaryValue(entity, by)\n\t\t\tif (err) return [err]\n\n\t\t\tif (mapper.deletedEntities.isDeleted(entity.name, primaryValue)) {\n\t\t\t\treturn [new MutationNothingToDo([], NothingToDoReason.alreadyDeleted)]\n\t\t\t}\n\n\t\t\tconst primaryWhere = { [entity.primary]: { eq: primaryValue } }\n\t\t\tconst where = filter ? { and: [primaryWhere, filter] } : primaryWhere\n\t\t\tconst state = new DeleteState(mapper.deletedEntities)\n\t\t\tconst deletePrimary = await this.collectDeleteInfo(state, mapper, entity, where)\n\n\t\t\tconst deleteQueue: DeleteQueue = [[entity, deletePrimary]]\n\t\t\tawait this.collectOrphanRemovals(state, mapper, deleteQueue)\n\t\t\tif (!state.isOk()) {\n\t\t\t\treturn state.getResult()\n\t\t\t}\n\t\t\tconst result = state.getResult()\n\t\t\tconst entryToEventMap = new Map<MutationUpdateOk, BeforeUpdateEvent>()\n\t\t\tfor (const entry of result) {\n\t\t\t\tif (entry instanceof MutationDeleteOk) {\n\t\t\t\t\tawait mapper.eventManager.fire(new BeforeDeleteEvent(entry.entity, entry.primary))\n\t\t\t\t} else if (entry instanceof MutationUpdateOk) {\n\t\t\t\t\tconst beforeUpdateEvent = new BeforeUpdateEvent(entry.entity, [{\n\t\t\t\t\t\tcolumnName: Object.keys(entry.values)[0],\n\t\t\t\t\t\tfieldName: Object.keys(entry.input)[0],\n\t\t\t\t\t\tcolumnType: 'text',\n\t\t\t\t\t\tvalue: null,\n\t\t\t\t\t}], entry.primary)\n\t\t\t\t\tentryToEventMap.set(entry, beforeUpdateEvent)\n\t\t\t\t\tawait mapper.eventManager.fire(beforeUpdateEvent)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait this.executeDeletes(deleteQueue, mapper.db)\n\n\t\t\tfor (const entry of result) {\n\t\t\t\tif (entry instanceof MutationUpdateOk) {\n\t\t\t\t\tconst beforeEvent = entryToEventMap.get(entry)\n\t\t\t\t\tif (!beforeEvent) {\n\t\t\t\t\t\tthrow new ImplementationException()\n\t\t\t\t\t}\n\t\t\t\t\tconst data = [{\n\t\t\t\t\t\tcolumnName: Object.keys(entry.values)[0],\n\t\t\t\t\t\tfieldName: Object.keys(entry.input)[0],\n\t\t\t\t\t\tcolumnType: 'text',\n\t\t\t\t\t\tvalue: null,\n\t\t\t\t\t\told: Object.values(entry.oldValues ?? {})[0],\n\t\t\t\t\t}]\n\t\t\t\t\tconst afterEvent = new AfterUpdateEvent(entry.entity, data, entry.primary)\n\t\t\t\t\tbeforeEvent.afterEvent = afterEvent\n\t\t\t\t\tawait mapper.eventManager.fire(afterEvent)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstate.confirmDeleted()\n\n\t\t\treturn state.getResult()\n\t\t})\n\t}\n\n\tprivate async executeDeletes(deleteQueue: DeleteQueue, db: Client): Promise<void> {\n\t\tfor (const [entity, ids] of deleteQueue) {\n\t\t\tif (ids.length === 0) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tawait DeleteBuilder.create()\n\t\t\t\t.from(entity.tableName)\n\t\t\t\t.where(expr => expr.in(entity.primaryColumn, ids))\n\t\t\t\t.execute(db)\n\t\t}\n\t}\n\n\tprivate async collectDeleteInfo(\n\t\tstate: DeleteState,\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\twhere: Input.OptionalWhere,\n\t): Promise<Input.PrimaryValue[]> {\n\t\tconst predicate = this.predicateFactory.createDeletePredicate(entity)\n\t\tconst orphanRemovals = findRelationsWithOrphanRemoval(this.schema, entity)\n\n\t\tconst qb = SelectBuilder.create<DeleteInfoRow>()\n\t\t\t.from(entity.tableName, 'root_')\n\t\t\t.select(['root_', entity.primaryColumn], 'id')\n\n\t\tconst qbWithOrphanColumns = this.qbOrphanColumns(qb, orphanRemovals)\n\t\tconst qbWithAllowedFlag = this.qbWithAllowed(entity, predicate, qbWithOrphanColumns)\n\t\tconst qbWithWhere = this.whereBuilder.build(qbWithAllowedFlag, entity, this.pathFactory.create([]), where)\n\n\t\tconst fullResult = await qbWithWhere.getResult(mapper.db)\n\n\t\tif (fullResult.length === 0) {\n\t\t\tstate.pushFailResult(new MutationNoResultError([]))\n\t\t\treturn []\n\t\t}\n\n\t\tconst result = this.filterPlannedForDelete(state, entity, fullResult)\n\n\t\tconst disallowed: Input.PrimaryValue[] = result.filter(it => !it.allowed).map(it => it.id)\n\t\tif (disallowed.length) {\n\t\t\tstate.pushFailResult(new MutationEntryNotFoundError([], { [entity.primary]: { in: disallowed } }))\n\t\t\treturn []\n\t\t}\n\n\t\treturn await this.processDeleteResult(state, mapper, entity, result, orphanRemovals)\n\t}\n\n\n\tprivate async collectOnDeleteInfo(state: DeleteState, mapper: Mapper, entity: Model.Entity, values: Input.PrimaryValue[]): Promise<void> {\n\t\tif (values.length === 0) {\n\t\t\treturn\n\t\t}\n\t\tconst owningRelations = findOwningRelations(this.schema, entity)\n\t\tfor (const [owningEntity, relation] of owningRelations) {\n\t\t\tif (owningEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (relation.joiningColumn.onDelete === Model.OnDelete.restrict) {\n\t\t\t\tawait this.collectRestrictResult(state, mapper, owningEntity, relation, values)\n\t\t\t} else if (relation.joiningColumn.onDelete === Model.OnDelete.cascade) {\n\t\t\t\tawait this.collectCascadeResult(state, mapper, owningEntity, relation, values)\n\t\t\t} else if (relation.joiningColumn.onDelete === Model.OnDelete.setNull) {\n\t\t\t\tawait this.collectSetNullResult(state, mapper, owningEntity, relation, values)\n\t\t\t} else {\n\t\t\t\tassertNever(relation.joiningColumn.onDelete)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async collectCascadeResult(\n\t\tstate: DeleteState,\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasOneRelation | Model.OneHasOneOwningRelation,\n\t\tvalues: Input.PrimaryValue[],\n\t): Promise<void> {\n\t\tconst predicate = this.predicateFactory.createDeletePredicate(entity)\n\t\tconst orphanRemovals = findRelationsWithOrphanRemoval(this.schema, entity)\n\n\t\tconst qb = this.createFetchByIdQueryBuilder(entity, relation, values)\n\t\tconst qbWithOrphanColumns = this.qbOrphanColumns(qb, orphanRemovals)\n\t\tconst qbWithAllowed = this.qbWithAllowed(entity, predicate, qbWithOrphanColumns)\n\n\t\tconst result = this.filterPlannedForDelete(state, entity, await qbWithAllowed.getResult(mapper.db))\n\n\t\tconst disallowed = result.filter(it => !it.allowed)\n\n\t\tif (disallowed.length > 0) {\n\t\t\tconst message = formatConstraintViolationMessage(disallowed, entity, relation)\n\t\t\t\t+ ' OnDelete behaviour of this relation is set to \"cascade\". This is possibly caused by ACL denial.'\n\n\t\t\tstate.pushFailResult(new MutationConstraintViolationError([], ConstraintType.foreignKey, message))\n\t\t\treturn\n\t\t}\n\n\t\tawait this.processDeleteResult(state, mapper, entity, result, orphanRemovals)\n\t}\n\n\n\tprivate async collectSetNullResult(\n\t\tstate: DeleteState,\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasOneRelation | Model.OneHasOneOwningRelation,\n\t\tvalues: Input.PrimaryValue[],\n\t): Promise<void> {\n\t\tconst predicate = this.predicateFactory.create(entity, Acl.Operation.update, [relation.name])\n\n\t\tconst qb = this.createFetchByIdQueryBuilder(entity, relation, values)\n\t\tconst qbWithAllowed = this.qbWithAllowed(entity, predicate, qb)\n\n\t\tconst result = this.filterPlannedForDelete(state, entity, await qbWithAllowed.getResult(mapper.db))\n\n\t\tconst disallowed = result.filter(it => !it.allowed)\n\n\t\tif (disallowed.length === 0) {\n\t\t\tconst input = { [relation.name]: { disconnect: true } }\n\t\t\tconst values = { [relation.joiningColumn.columnName]: null }\n\n\t\t\tstate.pushOkResult(result.map(it => new MutationUpdateOk([], entity, it.id, input, values, { [relation.joiningColumn.columnName]: it.ref })))\n\t\t\treturn\n\t\t}\n\n\t\tconst message = formatConstraintViolationMessage(disallowed, entity, relation)\n\t\t\t+ ' OnDelete behaviour of this relation is set to \"set null\". This is possibly caused by ACL denial.'\n\t\tstate.pushFailResult(new MutationConstraintViolationError([], ConstraintType.foreignKey, message))\n\t}\n\n\n\tprivate async collectRestrictResult(\n\t\tstate: DeleteState,\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\trelation: Model.ManyHasOneRelation | Model.OneHasOneOwningRelation,\n\t\tvalues: Input.PrimaryValue[],\n\t): Promise<void> {\n\t\tif (mapper.constraintHelper.areConstraintsDeferred('foreignKey')) {\n\t\t\treturn\n\t\t}\n\t\tconst qb = this.createFetchByIdQueryBuilder(entity, relation, values)\n\t\tconst result = this.filterPlannedForDelete(state, entity, await qb.getResult(mapper.db))\n\n\t\tif (result.length === 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst message = formatConstraintViolationMessage(result, entity, relation)\n\t\t\t+ ' OnDelete behaviour of this relation is set to \"restrict\". You might consider changing it to \"setNull\" or \"cascade\".'\n\n\t\tstate.pushFailResult(new MutationConstraintViolationError([], ConstraintType.foreignKey, message))\n\t}\n\n\tprivate async collectOrphanRemovals(state: DeleteState, mapper: Mapper, deleteQueue: DeleteQueue) {\n\t\tdo {\n\t\t\tif (!state.isOk()) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst orphanRemoval = state.fetchOrphanRemovals()\n\t\t\tif (orphanRemoval === null) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tconst entity = getEntity(this.schema, orphanRemoval[0])\n\t\t\tconst orphanResult = await this.collectDeleteInfo(state, mapper, entity, { [entity.primary]: { in: orphanRemoval[1] } })\n\t\t\tdeleteQueue.push([entity, orphanResult])\n\n\t\t} while (true)\n\t}\n\n\tprivate qbWithAllowed<R>(entity: Model.Entity, predicate: Input.OptionalWhere, selectQb: SelectBuilder<R>): SelectBuilder<R & { allowed: boolean }> {\n\t\treturn this.whereBuilder.buildAdvanced<R & { allowed: boolean }>(entity, this.pathFactory.create([]), predicate, cb => {\n\t\t\tconst qb = selectQb.select(expr => expr.selectCondition(cb), 'allowed')\n\t\t\treturn (qb === selectQb ? qb.select(new Literal('true'), 'allowed') : qb) as SelectBuilder<R & { allowed: boolean }>\n\t\t})\n\t}\n\n\tprivate qbOrphanColumns<R>(qb: SelectBuilder<R>, orphanRemovals: OneHasOneOwningRelationTuple[]): SelectBuilder<R> {\n\t\tconst orphanColumns = orphanRemovals.map(([, rel]) => rel.joiningColumn.columnName)\n\t\treturn orphanColumns.reduce((qb, column) => qb.select(['root_', column], `_${column}`), qb)\n\t}\n\n\tprivate createFetchByIdQueryBuilder(entity: Model.Entity, relation: Model.ManyHasOneRelation | Model.OneHasOneOwningRelation, values: Input.PrimaryValue[]) {\n\t\treturn SelectBuilder.create<EntityReferenceRow>()\n\t\t\t.from(entity.tableName, 'root_')\n\t\t\t.select(['root_', entity.primaryColumn], 'id')\n\t\t\t.select(['root_', relation.joiningColumn.columnName], 'ref')\n\t\t\t.where(expr => expr.in(relation.joiningColumn.columnName, values))\n\t}\n\n\tprivate filterPlannedForDelete<R extends {id: Input.PrimaryValue}>(state: DeleteState, entity: Model.Entity, values: R[]): R[] {\n\t\treturn values.filter(it => !state.isPlannedDelete(entity.name, it.id))\n\t}\n\n\n\tprivate async processDeleteResult(\n\t\tstate: DeleteState,\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\tresult: DeleteInfoRow[],\n\t\torphanRemovals: OneHasOneOwningRelationTuple[],\n\t): Promise<Input.PrimaryValue[]> {\n\t\tconst ids = result.map(it => it.id)\n\t\tstate.markPlannedDelete(entity.name, ids)\n\t\tstate.pushOkResult(ids.map(id => new MutationDeleteOk([], entity, id)))\n\n\t\tawait this.collectOnDeleteInfo(state, mapper, entity, ids)\n\n\t\tfor (const [entity, relation] of orphanRemovals) {\n\t\t\tconst ids = result.map(it => it[`_${relation.joiningColumn.columnName}`]).filter(it => it !== null)\n\t\t\tif (ids.length) {\n\t\t\t\tstate.addOrphanRemoval(entity.name, ids)\n\t\t\t}\n\t\t}\n\t\treturn ids\n\t}\n}\n"],"names":["values","qb","entity","ids"],"mappings":"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"}
|
|
@@ -19,11 +19,12 @@ class InsertBuilder {
|
|
|
19
19
|
__publicField(this, "where", { and: [] });
|
|
20
20
|
}
|
|
21
21
|
addFieldValue(fieldName, value) {
|
|
22
|
+
if (value === void 0) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
22
25
|
const columnName = schemaUtils.getColumnName(this.schema, this.entity, fieldName);
|
|
23
26
|
const columnType = schemaUtils.getColumnType(this.schema, this.entity, fieldName);
|
|
24
|
-
|
|
25
|
-
this.rowData.set(columnName, { columnName, value: resolvedValue, columnType, fieldName });
|
|
26
|
-
return resolvedValue;
|
|
27
|
+
this.rowData.set(columnName, { columnName, value, columnType, fieldName });
|
|
27
28
|
}
|
|
28
29
|
addPredicates(fields) {
|
|
29
30
|
const where = this.predicateFactory.create(this.entity, schema.Acl.Operation.create, fields);
|
|
@@ -32,19 +33,22 @@ class InsertBuilder {
|
|
|
32
33
|
addWhere(where) {
|
|
33
34
|
this.where.and.push(where);
|
|
34
35
|
}
|
|
35
|
-
async getResolvedData() {
|
|
36
|
-
return ColumnValue.resolveRowData([...this.rowData.values()]);
|
|
37
|
-
}
|
|
38
36
|
async execute(mapper) {
|
|
39
37
|
try {
|
|
40
|
-
const resolvedData =
|
|
38
|
+
const resolvedData = [...this.rowData.values()];
|
|
41
39
|
const insertData = resolvedData.reduce(
|
|
42
40
|
(result2, item) => ({ ...result2, [item.columnName]: (expr) => expr.select(["root_", item.columnName]) }),
|
|
43
41
|
{}
|
|
44
42
|
);
|
|
45
43
|
const qb = Database.InsertBuilder.create().with("root_", (qb2) => {
|
|
46
44
|
return resolvedData.reduce(
|
|
47
|
-
(qb3, value) => qb3.select(
|
|
45
|
+
(qb3, value) => qb3.select(
|
|
46
|
+
(expr) => expr.selectValue(
|
|
47
|
+
ColumnValue.normalizeDbValue(value.value, value.columnType),
|
|
48
|
+
value.columnType
|
|
49
|
+
),
|
|
50
|
+
value.columnName
|
|
51
|
+
),
|
|
48
52
|
qb2
|
|
49
53
|
);
|
|
50
54
|
}).into(this.entity.tableName).values(insertData).from((qb2) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InsertBuilder.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/insert/InsertBuilder.ts"],"sourcesContent":["import { Acl, Input, Model, Value } from '@contember/schema'\nimport { InsertBuilder as DbInsertBuilder, QueryBuilder, Value as DbValue } from '@contember/database'\nimport { PathFactory, WhereBuilder } from '../select'\nimport { getColumnName, getColumnType } from '@contember/schema-utils'\nimport { ColumnValue,
|
|
1
|
+
{"version":3,"file":"InsertBuilder.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/insert/InsertBuilder.ts"],"sourcesContent":["import { Acl, Input, Model, Value } from '@contember/schema'\nimport { InsertBuilder as DbInsertBuilder, QueryBuilder, Value as DbValue } from '@contember/database'\nimport { PathFactory, WhereBuilder } from '../select'\nimport { getColumnName, getColumnType } from '@contember/schema-utils'\nimport { ColumnValue, normalizeDbValue } from '../ColumnValue'\nimport { PredicateFactory } from '../../acl'\nimport { AfterInsertEvent, BeforeInsertEvent } from '../EventManager'\nimport { Mapper } from '../Mapper'\n\nexport interface InsertResult {\n\tvalues: ColumnValue[]\n\texecuted: boolean\n\tprimaryValue: Value.PrimaryValue | null\n}\n\nexport class InsertBuilder {\n\tprivate rowData: Map<string, ColumnValue> = new Map()\n\tprivate where: { and: Input.OptionalWhere[] } = { and: [] }\n\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly entity: Model.Entity,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t) {}\n\n\tpublic addFieldValue(\n\t\tfieldName: string,\n\t\tvalue: Value.FieldValue | undefined,\n\t): void {\n\t\tif (value === undefined) {\n\t\t\treturn\n\t\t}\n\t\tconst columnName = getColumnName(this.schema, this.entity, fieldName)\n\t\tconst columnType = getColumnType(this.schema, this.entity, fieldName)\n\t\tthis.rowData.set(columnName, { columnName, value, columnType, fieldName })\n\t}\n\n\tpublic addPredicates(fields: string[]): void {\n\t\tconst where = this.predicateFactory.create(this.entity, Acl.Operation.create, fields)\n\t\tthis.addWhere(where)\n\t}\n\n\tpublic addWhere(where: Input.OptionalWhere): void {\n\t\tthis.where.and.push(where)\n\t}\n\n\tpublic async execute(mapper: Mapper): Promise<InsertResult> {\n\t\ttry {\n\t\t\tconst resolvedData = [...this.rowData.values()]\n\n\t\t\tconst insertData = resolvedData.reduce<QueryBuilder.ColumnExpressionMap>(\n\t\t\t\t(result, item) => ({ ...result, [item.columnName]: expr => expr.select(['root_', item.columnName]) }),\n\t\t\t\t{},\n\t\t\t)\n\t\t\tconst qb = DbInsertBuilder.create()\n\t\t\t\t.with('root_', qb => {\n\t\t\t\t\treturn resolvedData.reduce(\n\t\t\t\t\t\t(qb, value) =>\n\t\t\t\t\t\t\tqb.select(\n\t\t\t\t\t\t\t\texpr => expr.selectValue(\n\t\t\t\t\t\t\t\t\tnormalizeDbValue(value.value, value.columnType),\n\t\t\t\t\t\t\t\t\tvalue.columnType,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tvalue.columnName,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tqb,\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t\t.into(this.entity.tableName)\n\t\t\t\t.values(insertData)\n\t\t\t\t.from(qb => {\n\t\t\t\t\tqb = qb.from('root_')\n\t\t\t\t\treturn this.whereBuilder.build(qb, this.entity, this.pathFactory.create([]), this.where)\n\t\t\t\t})\n\t\t\t\t.returning(this.entity.primaryColumn)\n\n\t\t\tconst beforeInsertEvent = new BeforeInsertEvent(this.entity, resolvedData)\n\t\t\tawait mapper.eventManager.fire(beforeInsertEvent)\n\n\t\t\tconst returning = (await qb.execute(mapper.db)).map(it => it[this.entity.primaryColumn])\n\t\t\tconst result = returning.length === 1 ? returning[0] : null\n\n\t\t\tconst afterInsertEvent = new AfterInsertEvent(this.entity, resolvedData, result)\n\t\t\tbeforeInsertEvent.afterEvent = afterInsertEvent\n\t\t\tawait mapper.eventManager.fire(afterInsertEvent)\n\n\t\t\treturn { values: resolvedData, executed: true, primaryValue: result }\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t}\n}\n"],"names":["schema","getColumnName","getColumnType","Acl","result","DbInsertBuilder","qb","normalizeDbValue","BeforeInsertEvent","AfterInsertEvent"],"mappings":";;;;;;;;;;AAeO,MAAM,cAAc;AAAA,EAI1B,YACkBA,SACA,QACA,cACA,aACA,kBAChB;AALgB,SAAA,SAAAA;AACA,SAAA,SAAA;AACA,SAAA,eAAA;AACA,SAAA,cAAA;AACA,SAAA,mBAAA;AARV,kBAAA,MAAA,+BAAwC,IAAI,CAAA;AACpD,kBAAA,MAAQ,SAAwC,EAAE,KAAK,CAAG,EAAA,CAAA;AAAA,EAAA;AAAA,EAUnD,cACN,WACA,OACO;AACP,QAAI,UAAU,QAAW;AACxB;AAAA,IAAA;AAED,UAAM,aAAaC,YAAAA,cAAc,KAAK,QAAQ,KAAK,QAAQ,SAAS;AACpE,UAAM,aAAaC,YAAAA,cAAc,KAAK,QAAQ,KAAK,QAAQ,SAAS;AAC/D,SAAA,QAAQ,IAAI,YAAY,EAAE,YAAY,OAAO,YAAY,WAAW;AAAA,EAAA;AAAA,EAGnE,cAAc,QAAwB;AACtC,UAAA,QAAQ,KAAK,iBAAiB,OAAO,KAAK,QAAQC,WAAI,UAAU,QAAQ,MAAM;AACpF,SAAK,SAAS,KAAK;AAAA,EAAA;AAAA,EAGb,SAAS,OAAkC;AAC5C,SAAA,MAAM,IAAI,KAAK,KAAK;AAAA,EAAA;AAAA,EAG1B,MAAa,QAAQ,QAAuC;AACvD,QAAA;AACH,YAAM,eAAe,CAAC,GAAG,KAAK,QAAQ,QAAQ;AAE9C,YAAM,aAAa,aAAa;AAAA,QAC/B,CAACC,SAAQ,UAAU,EAAE,GAAGA,SAAQ,CAAC,KAAK,UAAU,GAAG,CAAA,SAAQ,KAAK,OAAO,CAAC,SAAS,KAAK,UAAU,CAAC;QACjG,CAAA;AAAA,MACD;AACA,YAAM,KAAKC,SAAAA,cAAgB,OAAA,EACzB,KAAK,SAAS,CAAAC,QAAM;AACpB,eAAO,aAAa;AAAA,UACnB,CAACA,KAAI,UACJA,IAAG;AAAA,YACF,UAAQ,KAAK;AAAA,cACZC,YAAAA,iBAAiB,MAAM,OAAO,MAAM,UAAU;AAAA,cAC9C,MAAM;AAAA,YACP;AAAA,YACA,MAAM;AAAA,UACP;AAAA,UACDD;AAAAA,QACD;AAAA,MACA,CAAA,EACA,KAAK,KAAK,OAAO,SAAS,EAC1B,OAAO,UAAU,EACjB,KAAK,CAAAA,QAAM;AACXA,cAAKA,IAAG,KAAK,OAAO;AACpB,eAAO,KAAK,aAAa,MAAMA,KAAI,KAAK,QAAQ,KAAK,YAAY,OAAO,CAAE,CAAA,GAAG,KAAK,KAAK;AAAA,MACvF,CAAA,EACA,UAAU,KAAK,OAAO,aAAa;AAErC,YAAM,oBAAoB,IAAIE,aAAAA,kBAAkB,KAAK,QAAQ,YAAY;AACnE,YAAA,OAAO,aAAa,KAAK,iBAAiB;AAEhD,YAAM,aAAa,MAAM,GAAG,QAAQ,OAAO,EAAE,GAAG,IAAI,CAAM,OAAA,GAAG,KAAK,OAAO,aAAa,CAAC;AACvF,YAAM,SAAS,UAAU,WAAW,IAAI,UAAU,CAAC,IAAI;AAEvD,YAAM,mBAAmB,IAAIC,aAAA,iBAAiB,KAAK,QAAQ,cAAc,MAAM;AAC/E,wBAAkB,aAAa;AACzB,YAAA,OAAO,aAAa,KAAK,gBAAgB;AAE/C,aAAO,EAAE,QAAQ,cAAc,UAAU,MAAM,cAAc,OAAO;AAAA,aAC5D,GAAG;AACL,YAAA;AAAA,IAAA;AAAA,EACP;AAEF;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Acl } from "@contember/schema";
|
|
2
2
|
import { InsertBuilder as InsertBuilder$1 } from "@contember/database";
|
|
3
3
|
import { getColumnName, getColumnType } from "@contember/schema-utils";
|
|
4
|
-
import {
|
|
4
|
+
import { normalizeDbValue } from "../ColumnValue.js";
|
|
5
5
|
import { BeforeInsertEvent, AfterInsertEvent } from "../EventManager.js";
|
|
6
6
|
var __defProp = Object.defineProperty;
|
|
7
7
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -17,11 +17,12 @@ class InsertBuilder {
|
|
|
17
17
|
__publicField(this, "where", { and: [] });
|
|
18
18
|
}
|
|
19
19
|
addFieldValue(fieldName, value) {
|
|
20
|
+
if (value === void 0) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
20
23
|
const columnName = getColumnName(this.schema, this.entity, fieldName);
|
|
21
24
|
const columnType = getColumnType(this.schema, this.entity, fieldName);
|
|
22
|
-
|
|
23
|
-
this.rowData.set(columnName, { columnName, value: resolvedValue, columnType, fieldName });
|
|
24
|
-
return resolvedValue;
|
|
25
|
+
this.rowData.set(columnName, { columnName, value, columnType, fieldName });
|
|
25
26
|
}
|
|
26
27
|
addPredicates(fields) {
|
|
27
28
|
const where = this.predicateFactory.create(this.entity, Acl.Operation.create, fields);
|
|
@@ -30,19 +31,22 @@ class InsertBuilder {
|
|
|
30
31
|
addWhere(where) {
|
|
31
32
|
this.where.and.push(where);
|
|
32
33
|
}
|
|
33
|
-
async getResolvedData() {
|
|
34
|
-
return resolveRowData([...this.rowData.values()]);
|
|
35
|
-
}
|
|
36
34
|
async execute(mapper) {
|
|
37
35
|
try {
|
|
38
|
-
const resolvedData =
|
|
36
|
+
const resolvedData = [...this.rowData.values()];
|
|
39
37
|
const insertData = resolvedData.reduce(
|
|
40
38
|
(result2, item) => ({ ...result2, [item.columnName]: (expr) => expr.select(["root_", item.columnName]) }),
|
|
41
39
|
{}
|
|
42
40
|
);
|
|
43
41
|
const qb = InsertBuilder$1.create().with("root_", (qb2) => {
|
|
44
42
|
return resolvedData.reduce(
|
|
45
|
-
(qb3, value) => qb3.select(
|
|
43
|
+
(qb3, value) => qb3.select(
|
|
44
|
+
(expr) => expr.selectValue(
|
|
45
|
+
normalizeDbValue(value.value, value.columnType),
|
|
46
|
+
value.columnType
|
|
47
|
+
),
|
|
48
|
+
value.columnName
|
|
49
|
+
),
|
|
46
50
|
qb2
|
|
47
51
|
);
|
|
48
52
|
}).into(this.entity.tableName).values(insertData).from((qb2) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InsertBuilder.js","sources":["../../../../../../packages/engine-content-api/src/mapper/insert/InsertBuilder.ts"],"sourcesContent":["import { Acl, Input, Model, Value } from '@contember/schema'\nimport { InsertBuilder as DbInsertBuilder, QueryBuilder, Value as DbValue } from '@contember/database'\nimport { PathFactory, WhereBuilder } from '../select'\nimport { getColumnName, getColumnType } from '@contember/schema-utils'\nimport { ColumnValue,
|
|
1
|
+
{"version":3,"file":"InsertBuilder.js","sources":["../../../../../../packages/engine-content-api/src/mapper/insert/InsertBuilder.ts"],"sourcesContent":["import { Acl, Input, Model, Value } from '@contember/schema'\nimport { InsertBuilder as DbInsertBuilder, QueryBuilder, Value as DbValue } from '@contember/database'\nimport { PathFactory, WhereBuilder } from '../select'\nimport { getColumnName, getColumnType } from '@contember/schema-utils'\nimport { ColumnValue, normalizeDbValue } from '../ColumnValue'\nimport { PredicateFactory } from '../../acl'\nimport { AfterInsertEvent, BeforeInsertEvent } from '../EventManager'\nimport { Mapper } from '../Mapper'\n\nexport interface InsertResult {\n\tvalues: ColumnValue[]\n\texecuted: boolean\n\tprimaryValue: Value.PrimaryValue | null\n}\n\nexport class InsertBuilder {\n\tprivate rowData: Map<string, ColumnValue> = new Map()\n\tprivate where: { and: Input.OptionalWhere[] } = { and: [] }\n\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly entity: Model.Entity,\n\t\tprivate readonly whereBuilder: WhereBuilder,\n\t\tprivate readonly pathFactory: PathFactory,\n\t\tprivate readonly predicateFactory: PredicateFactory,\n\t) {}\n\n\tpublic addFieldValue(\n\t\tfieldName: string,\n\t\tvalue: Value.FieldValue | undefined,\n\t): void {\n\t\tif (value === undefined) {\n\t\t\treturn\n\t\t}\n\t\tconst columnName = getColumnName(this.schema, this.entity, fieldName)\n\t\tconst columnType = getColumnType(this.schema, this.entity, fieldName)\n\t\tthis.rowData.set(columnName, { columnName, value, columnType, fieldName })\n\t}\n\n\tpublic addPredicates(fields: string[]): void {\n\t\tconst where = this.predicateFactory.create(this.entity, Acl.Operation.create, fields)\n\t\tthis.addWhere(where)\n\t}\n\n\tpublic addWhere(where: Input.OptionalWhere): void {\n\t\tthis.where.and.push(where)\n\t}\n\n\tpublic async execute(mapper: Mapper): Promise<InsertResult> {\n\t\ttry {\n\t\t\tconst resolvedData = [...this.rowData.values()]\n\n\t\t\tconst insertData = resolvedData.reduce<QueryBuilder.ColumnExpressionMap>(\n\t\t\t\t(result, item) => ({ ...result, [item.columnName]: expr => expr.select(['root_', item.columnName]) }),\n\t\t\t\t{},\n\t\t\t)\n\t\t\tconst qb = DbInsertBuilder.create()\n\t\t\t\t.with('root_', qb => {\n\t\t\t\t\treturn resolvedData.reduce(\n\t\t\t\t\t\t(qb, value) =>\n\t\t\t\t\t\t\tqb.select(\n\t\t\t\t\t\t\t\texpr => expr.selectValue(\n\t\t\t\t\t\t\t\t\tnormalizeDbValue(value.value, value.columnType),\n\t\t\t\t\t\t\t\t\tvalue.columnType,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tvalue.columnName,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tqb,\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t\t.into(this.entity.tableName)\n\t\t\t\t.values(insertData)\n\t\t\t\t.from(qb => {\n\t\t\t\t\tqb = qb.from('root_')\n\t\t\t\t\treturn this.whereBuilder.build(qb, this.entity, this.pathFactory.create([]), this.where)\n\t\t\t\t})\n\t\t\t\t.returning(this.entity.primaryColumn)\n\n\t\t\tconst beforeInsertEvent = new BeforeInsertEvent(this.entity, resolvedData)\n\t\t\tawait mapper.eventManager.fire(beforeInsertEvent)\n\n\t\t\tconst returning = (await qb.execute(mapper.db)).map(it => it[this.entity.primaryColumn])\n\t\t\tconst result = returning.length === 1 ? returning[0] : null\n\n\t\t\tconst afterInsertEvent = new AfterInsertEvent(this.entity, resolvedData, result)\n\t\t\tbeforeInsertEvent.afterEvent = afterInsertEvent\n\t\t\tawait mapper.eventManager.fire(afterInsertEvent)\n\n\t\t\treturn { values: resolvedData, executed: true, primaryValue: result }\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t}\n}\n"],"names":["result","DbInsertBuilder","qb"],"mappings":";;;;;;;;AAeO,MAAM,cAAc;AAAA,EAI1B,YACkB,QACA,QACA,cACA,aACA,kBAChB;AALgB,SAAA,SAAA;AACA,SAAA,SAAA;AACA,SAAA,eAAA;AACA,SAAA,cAAA;AACA,SAAA,mBAAA;AARV,kBAAA,MAAA,+BAAwC,IAAI,CAAA;AACpD,kBAAA,MAAQ,SAAwC,EAAE,KAAK,CAAG,EAAA,CAAA;AAAA,EAAA;AAAA,EAUnD,cACN,WACA,OACO;AACP,QAAI,UAAU,QAAW;AACxB;AAAA,IAAA;AAED,UAAM,aAAa,cAAc,KAAK,QAAQ,KAAK,QAAQ,SAAS;AACpE,UAAM,aAAa,cAAc,KAAK,QAAQ,KAAK,QAAQ,SAAS;AAC/D,SAAA,QAAQ,IAAI,YAAY,EAAE,YAAY,OAAO,YAAY,WAAW;AAAA,EAAA;AAAA,EAGnE,cAAc,QAAwB;AACtC,UAAA,QAAQ,KAAK,iBAAiB,OAAO,KAAK,QAAQ,IAAI,UAAU,QAAQ,MAAM;AACpF,SAAK,SAAS,KAAK;AAAA,EAAA;AAAA,EAGb,SAAS,OAAkC;AAC5C,SAAA,MAAM,IAAI,KAAK,KAAK;AAAA,EAAA;AAAA,EAG1B,MAAa,QAAQ,QAAuC;AACvD,QAAA;AACH,YAAM,eAAe,CAAC,GAAG,KAAK,QAAQ,QAAQ;AAE9C,YAAM,aAAa,aAAa;AAAA,QAC/B,CAACA,SAAQ,UAAU,EAAE,GAAGA,SAAQ,CAAC,KAAK,UAAU,GAAG,CAAA,SAAQ,KAAK,OAAO,CAAC,SAAS,KAAK,UAAU,CAAC;QACjG,CAAA;AAAA,MACD;AACA,YAAM,KAAKC,gBAAgB,OAAA,EACzB,KAAK,SAAS,CAAAC,QAAM;AACpB,eAAO,aAAa;AAAA,UACnB,CAACA,KAAI,UACJA,IAAG;AAAA,YACF,UAAQ,KAAK;AAAA,cACZ,iBAAiB,MAAM,OAAO,MAAM,UAAU;AAAA,cAC9C,MAAM;AAAA,YACP;AAAA,YACA,MAAM;AAAA,UACP;AAAA,UACDA;AAAAA,QACD;AAAA,MACA,CAAA,EACA,KAAK,KAAK,OAAO,SAAS,EAC1B,OAAO,UAAU,EACjB,KAAK,CAAAA,QAAM;AACXA,cAAKA,IAAG,KAAK,OAAO;AACpB,eAAO,KAAK,aAAa,MAAMA,KAAI,KAAK,QAAQ,KAAK,YAAY,OAAO,CAAE,CAAA,GAAG,KAAK,KAAK;AAAA,MACvF,CAAA,EACA,UAAU,KAAK,OAAO,aAAa;AAErC,YAAM,oBAAoB,IAAI,kBAAkB,KAAK,QAAQ,YAAY;AACnE,YAAA,OAAO,aAAa,KAAK,iBAAiB;AAEhD,YAAM,aAAa,MAAM,GAAG,QAAQ,OAAO,EAAE,GAAG,IAAI,CAAM,OAAA,GAAG,KAAK,OAAO,aAAa,CAAC;AACvF,YAAM,SAAS,UAAU,WAAW,IAAI,UAAU,CAAC,IAAI;AAEvD,YAAM,mBAAmB,IAAI,iBAAiB,KAAK,QAAQ,cAAc,MAAM;AAC/E,wBAAkB,aAAa;AACzB,YAAA,OAAO,aAAa,KAAK,gBAAgB;AAE/C,aAAO,EAAE,QAAQ,cAAc,UAAU,MAAM,cAAc,OAAO;AAAA,aAC5D,GAAG;AACL,YAAA;AAAA,IAAA;AAAA,EACP;AAEF;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Inserter.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/insert/Inserter.ts"],"sourcesContent":["import { MutationCreateOk, MutationNoResultError,
|
|
1
|
+
{"version":3,"file":"Inserter.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/insert/Inserter.ts"],"sourcesContent":["import { MutationCreateOk, MutationNoResultError, MutationResultList } from '../Result'\nimport { CreateInputVisitor } from '../../inputProcessing'\nimport { SqlCreateInputProcessor, SqlCreateInputProcessorResult } from './SqlCreateInputProcessor'\nimport { Mapper } from '../Mapper'\nimport { Model } from '@contember/schema'\nimport { acceptFieldVisitor, Providers } from '@contember/schema-utils'\nimport { InsertBuilderFactory } from './InsertBuilderFactory'\nimport { InsertBuilder } from './InsertBuilder'\nimport { rowDataToFieldValues } from '../ColumnValue'\nimport { DatabaseMetadata } from '@contember/database'\nimport { MapperInput } from '../types'\n\nexport class Inserter {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly insertBuilderFactory: InsertBuilderFactory,\n\t\tprivate readonly providers: Providers,\n\t) {}\n\n\tpublic async insert(\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\tdata: MapperInput.CreateDataInput,\n\t\tinsertIdCallback: (id: string) => void,\n\t\tbuilderCb: (builder: InsertBuilder) => void,\n\t): Promise<MutationResultList> {\n\t\tconst insertBuilder = this.insertBuilderFactory.create(entity)\n\n\t\tinsertBuilder.addPredicates(Object.keys(data))\n\n\t\tconst visitor = new CreateInputVisitor<SqlCreateInputProcessorResult>(\n\t\t\tnew SqlCreateInputProcessor(insertBuilder, mapper, this.providers),\n\t\t\tthis.schema,\n\t\t\tdata,\n\t\t)\n\n\t\tconst resultList: MutationResultList = []\n\t\tconst postInserts: Exclude<SqlCreateInputProcessorResult, MutationResultList>[] = []\n\n\t\tconst keys = new Set([\n\t\t\tentity.primary,\n\t\t\t...Object.keys(data),\n\t\t\t...Object.keys(entity.fields),\n\t\t])\n\n\t\tfor (const key of keys.values()) {\n\t\t\tconst resultSet = await acceptFieldVisitor(\n\t\t\t\tthis.schema,\n\t\t\t\tentity,\n\t\t\t\tkey,\n\t\t\t\tvisitor,\n\t\t\t)\n\t\t\tfor (const result of resultSet) {\n\t\t\t\tif (typeof result === 'function') {\n\t\t\t\t\tpostInserts.push(result)\n\t\t\t\t} else {\n\t\t\t\t\tfor (const resultItem of await result) {\n\t\t\t\t\t\tresultList.push(resultItem)\n\t\t\t\t\t\tif (resultItem.error) {\n\t\t\t\t\t\t\treturn resultList\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbuilderCb(insertBuilder)\n\t\tconst insertResult = await insertBuilder.execute(mapper)\n\n\t\tif (insertResult.primaryValue === null) {\n\t\t\treturn [new MutationNoResultError([]), ...resultList]\n\t\t}\n\t\tinsertIdCallback(String(insertResult.primaryValue))\n\n\t\tconst okResult = new MutationCreateOk([], entity, insertResult.primaryValue, data, rowDataToFieldValues(insertResult.values))\n\t\tresultList.unshift(okResult)\n\n\t\tfor (const postInsert of postInserts) {\n\t\t\tconst postInsertResult = await postInsert({ primary: insertResult.primaryValue })\n\t\t\tfor (const result of postInsertResult) {\n\t\t\t\tresultList.push(result)\n\t\t\t\tif (result.error) {\n\t\t\t\t\treturn resultList\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn resultList\n\t}\n}\n\n"],"names":["CreateInputVisitor","SqlCreateInputProcessor","acceptFieldVisitor","MutationNoResultError","MutationCreateOk","rowDataToFieldValues"],"mappings":";;;;;;;;AAYO,MAAM,SAAS;AAAA,EACrB,YACkB,QACA,wBACA,sBACA,WAChB;AAJgB,SAAA,SAAA;AACA,SAAA,yBAAA;AACA,SAAA,uBAAA;AACA,SAAA,YAAA;AAAA,EAAA;AAAA,EAGlB,MAAa,OACZ,QACA,QACA,MACA,kBACA,WAC8B;AAC9B,UAAM,gBAAgB,KAAK,qBAAqB,OAAO,MAAM;AAE7D,kBAAc,cAAc,OAAO,KAAK,IAAI,CAAC;AAE7C,UAAM,UAAU,IAAIA,mBAAA;AAAA,MACnB,IAAIC,wBAAA,wBAAwB,eAAe,QAAQ,KAAK,SAAS;AAAA,MACjE,KAAK;AAAA,MACL;AAAA,IACD;AAEA,UAAM,aAAiC,CAAC;AACxC,UAAM,cAA4E,CAAC;AAE7E,UAAA,2BAAW,IAAI;AAAA,MACpB,OAAO;AAAA,MACP,GAAG,OAAO,KAAK,IAAI;AAAA,MACnB,GAAG,OAAO,KAAK,OAAO,MAAM;AAAA,IAAA,CAC5B;AAEU,eAAA,OAAO,KAAK,UAAU;AAChC,YAAM,YAAY,MAAMC,YAAA;AAAA,QACvB,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACD;AACA,iBAAW,UAAU,WAAW;AAC3B,YAAA,OAAO,WAAW,YAAY;AACjC,sBAAY,KAAK,MAAM;AAAA,QAAA,OACjB;AACK,qBAAA,cAAc,MAAM,QAAQ;AACtC,uBAAW,KAAK,UAAU;AAC1B,gBAAI,WAAW,OAAO;AACd,qBAAA;AAAA,YAAA;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAGD,cAAU,aAAa;AACvB,UAAM,eAAe,MAAM,cAAc,QAAQ,MAAM;AAEnD,QAAA,aAAa,iBAAiB,MAAM;AACvC,aAAO,CAAC,IAAIC,OAAA,sBAAsB,EAAE,GAAG,GAAG,UAAU;AAAA,IAAA;AAEpC,qBAAA,OAAO,aAAa,YAAY,CAAC;AAElD,UAAM,WAAW,IAAIC,wBAAiB,CAAA,GAAI,QAAQ,aAAa,cAAc,MAAMC,YAAAA,qBAAqB,aAAa,MAAM,CAAC;AAC5H,eAAW,QAAQ,QAAQ;AAE3B,eAAW,cAAc,aAAa;AACrC,YAAM,mBAAmB,MAAM,WAAW,EAAE,SAAS,aAAa,cAAc;AAChF,iBAAW,UAAU,kBAAkB;AACtC,mBAAW,KAAK,MAAM;AACtB,YAAI,OAAO,OAAO;AACV,iBAAA;AAAA,QAAA;AAAA,MACR;AAAA,IACD;AAGM,WAAA;AAAA,EAAA;AAET;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Inserter.js","sources":["../../../../../../packages/engine-content-api/src/mapper/insert/Inserter.ts"],"sourcesContent":["import { MutationCreateOk, MutationNoResultError,
|
|
1
|
+
{"version":3,"file":"Inserter.js","sources":["../../../../../../packages/engine-content-api/src/mapper/insert/Inserter.ts"],"sourcesContent":["import { MutationCreateOk, MutationNoResultError, MutationResultList } from '../Result'\nimport { CreateInputVisitor } from '../../inputProcessing'\nimport { SqlCreateInputProcessor, SqlCreateInputProcessorResult } from './SqlCreateInputProcessor'\nimport { Mapper } from '../Mapper'\nimport { Model } from '@contember/schema'\nimport { acceptFieldVisitor, Providers } from '@contember/schema-utils'\nimport { InsertBuilderFactory } from './InsertBuilderFactory'\nimport { InsertBuilder } from './InsertBuilder'\nimport { rowDataToFieldValues } from '../ColumnValue'\nimport { DatabaseMetadata } from '@contember/database'\nimport { MapperInput } from '../types'\n\nexport class Inserter {\n\tconstructor(\n\t\tprivate readonly schema: Model.Schema,\n\t\tprivate readonly schemaDatabaseMetadata: DatabaseMetadata,\n\t\tprivate readonly insertBuilderFactory: InsertBuilderFactory,\n\t\tprivate readonly providers: Providers,\n\t) {}\n\n\tpublic async insert(\n\t\tmapper: Mapper,\n\t\tentity: Model.Entity,\n\t\tdata: MapperInput.CreateDataInput,\n\t\tinsertIdCallback: (id: string) => void,\n\t\tbuilderCb: (builder: InsertBuilder) => void,\n\t): Promise<MutationResultList> {\n\t\tconst insertBuilder = this.insertBuilderFactory.create(entity)\n\n\t\tinsertBuilder.addPredicates(Object.keys(data))\n\n\t\tconst visitor = new CreateInputVisitor<SqlCreateInputProcessorResult>(\n\t\t\tnew SqlCreateInputProcessor(insertBuilder, mapper, this.providers),\n\t\t\tthis.schema,\n\t\t\tdata,\n\t\t)\n\n\t\tconst resultList: MutationResultList = []\n\t\tconst postInserts: Exclude<SqlCreateInputProcessorResult, MutationResultList>[] = []\n\n\t\tconst keys = new Set([\n\t\t\tentity.primary,\n\t\t\t...Object.keys(data),\n\t\t\t...Object.keys(entity.fields),\n\t\t])\n\n\t\tfor (const key of keys.values()) {\n\t\t\tconst resultSet = await acceptFieldVisitor(\n\t\t\t\tthis.schema,\n\t\t\t\tentity,\n\t\t\t\tkey,\n\t\t\t\tvisitor,\n\t\t\t)\n\t\t\tfor (const result of resultSet) {\n\t\t\t\tif (typeof result === 'function') {\n\t\t\t\t\tpostInserts.push(result)\n\t\t\t\t} else {\n\t\t\t\t\tfor (const resultItem of await result) {\n\t\t\t\t\t\tresultList.push(resultItem)\n\t\t\t\t\t\tif (resultItem.error) {\n\t\t\t\t\t\t\treturn resultList\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbuilderCb(insertBuilder)\n\t\tconst insertResult = await insertBuilder.execute(mapper)\n\n\t\tif (insertResult.primaryValue === null) {\n\t\t\treturn [new MutationNoResultError([]), ...resultList]\n\t\t}\n\t\tinsertIdCallback(String(insertResult.primaryValue))\n\n\t\tconst okResult = new MutationCreateOk([], entity, insertResult.primaryValue, data, rowDataToFieldValues(insertResult.values))\n\t\tresultList.unshift(okResult)\n\n\t\tfor (const postInsert of postInserts) {\n\t\t\tconst postInsertResult = await postInsert({ primary: insertResult.primaryValue })\n\t\t\tfor (const result of postInsertResult) {\n\t\t\t\tresultList.push(result)\n\t\t\t\tif (result.error) {\n\t\t\t\t\treturn resultList\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn resultList\n\t}\n}\n\n"],"names":[],"mappings":";;;;;;AAYO,MAAM,SAAS;AAAA,EACrB,YACkB,QACA,wBACA,sBACA,WAChB;AAJgB,SAAA,SAAA;AACA,SAAA,yBAAA;AACA,SAAA,uBAAA;AACA,SAAA,YAAA;AAAA,EAAA;AAAA,EAGlB,MAAa,OACZ,QACA,QACA,MACA,kBACA,WAC8B;AAC9B,UAAM,gBAAgB,KAAK,qBAAqB,OAAO,MAAM;AAE7D,kBAAc,cAAc,OAAO,KAAK,IAAI,CAAC;AAE7C,UAAM,UAAU,IAAI;AAAA,MACnB,IAAI,wBAAwB,eAAe,QAAQ,KAAK,SAAS;AAAA,MACjE,KAAK;AAAA,MACL;AAAA,IACD;AAEA,UAAM,aAAiC,CAAC;AACxC,UAAM,cAA4E,CAAC;AAE7E,UAAA,2BAAW,IAAI;AAAA,MACpB,OAAO;AAAA,MACP,GAAG,OAAO,KAAK,IAAI;AAAA,MACnB,GAAG,OAAO,KAAK,OAAO,MAAM;AAAA,IAAA,CAC5B;AAEU,eAAA,OAAO,KAAK,UAAU;AAChC,YAAM,YAAY,MAAM;AAAA,QACvB,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACD;AACA,iBAAW,UAAU,WAAW;AAC3B,YAAA,OAAO,WAAW,YAAY;AACjC,sBAAY,KAAK,MAAM;AAAA,QAAA,OACjB;AACK,qBAAA,cAAc,MAAM,QAAQ;AACtC,uBAAW,KAAK,UAAU;AAC1B,gBAAI,WAAW,OAAO;AACd,qBAAA;AAAA,YAAA;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAGD,cAAU,aAAa;AACvB,UAAM,eAAe,MAAM,cAAc,QAAQ,MAAM;AAEnD,QAAA,aAAa,iBAAiB,MAAM;AACvC,aAAO,CAAC,IAAI,sBAAsB,EAAE,GAAG,GAAG,UAAU;AAAA,IAAA;AAEpC,qBAAA,OAAO,aAAa,YAAY,CAAC;AAElD,UAAM,WAAW,IAAI,iBAAiB,CAAA,GAAI,QAAQ,aAAa,cAAc,MAAM,qBAAqB,aAAa,MAAM,CAAC;AAC5H,eAAW,QAAQ,QAAQ;AAE3B,eAAW,cAAc,aAAa;AACrC,YAAM,mBAAmB,MAAM,WAAW,EAAE,SAAS,aAAa,cAAc;AAChF,iBAAW,UAAU,kBAAkB;AACtC,mBAAW,KAAK,MAAM;AACtB,YAAI,OAAO,OAAO;AACV,iBAAA;AAAA,QAAA;AAAA,MACR;AAAA,IACD;AAGM,WAAA;AAAA,EAAA;AAET;"}
|
|
@@ -67,9 +67,7 @@ class SqlCreateInputProcessor {
|
|
|
67
67
|
async column(context) {
|
|
68
68
|
this.insertBuilder.addFieldValue(
|
|
69
69
|
context.column.name,
|
|
70
|
-
(
|
|
71
|
-
return schemaUtils.resolveColumnValue(context, this.providers);
|
|
72
|
-
})()
|
|
70
|
+
schemaUtils.resolveColumnValue(context, this.providers)
|
|
73
71
|
);
|
|
74
72
|
return [];
|
|
75
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqlCreateInputProcessor.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/insert/SqlCreateInputProcessor.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { Mapper } from '../Mapper'\nimport { InsertBuilder } from './InsertBuilder'\nimport { Providers, resolveColumnValue } from '@contember/schema-utils'\nimport { CreateInputProcessor } from '../../inputProcessing'\nimport { MutationResultList } from '../Result'\nimport { hasManyProcessor, hasOneProcessor } from '../MutationProcessorHelper'\nimport { OneHasOneInverseCreateInputProcessor } from './relations/OneHasOneInverseCreateInputProcessor'\nimport { OneHasOneOwningCreateInputProcessor } from './relations/OneHasOneOwningCreateInputProcessor'\nimport { OneHasManyCreateInputProcessor } from './relations/OneHasManyCreateInputProcessor'\nimport { ManyHasOneCreateInputProcessor } from './relations/ManyHasOneCreateInputProcessor'\nimport { ManyHasManyCreateInputProcessor } from './relations/ManyHasManyCreateInputProcessor'\n\n\nexport type SqlCreateInputProcessorResult = MutationResultList | ((ctx: { primary: Input.PrimaryValue }) => Promise<MutationResultList>)\nexport class SqlCreateInputProcessor implements CreateInputProcessor<SqlCreateInputProcessorResult> {\n\n\tprivate oneHasOneInverseCreateInputProcessor: OneHasOneInverseCreateInputProcessor\n\tprivate oneHasOneOwningCreateInputProcessor: OneHasOneOwningCreateInputProcessor\n\tprivate oneHasManyCreateInputProcessor: OneHasManyCreateInputProcessor\n\tprivate manyHasOneCreateInputProcessor: ManyHasOneCreateInputProcessor\n\tprivate manyHasManyCreateInputProcessor: ManyHasManyCreateInputProcessor\n\n\tconstructor(\n\t\tprivate readonly insertBuilder: InsertBuilder,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly providers: Providers,\n\t) {\n\t\tthis.oneHasOneInverseCreateInputProcessor = new OneHasOneInverseCreateInputProcessor(this.mapper)\n\t\tthis.oneHasOneOwningCreateInputProcessor = new OneHasOneOwningCreateInputProcessor(this.mapper, this.insertBuilder)\n\t\tthis.oneHasManyCreateInputProcessor = new OneHasManyCreateInputProcessor(this.mapper)\n\t\tthis.manyHasOneCreateInputProcessor = new ManyHasOneCreateInputProcessor(this.mapper, this.insertBuilder)\n\t\tthis.manyHasManyCreateInputProcessor = new ManyHasManyCreateInputProcessor(this.mapper)\n\t}\n\n\tpublic async column(context: Model.ColumnContext & { input: Input.ColumnValue | undefined }): Promise<SqlCreateInputProcessorResult> {\n\t\tthis.insertBuilder.addFieldValue(\n\t\t\tcontext.column.name,\n\t\t\
|
|
1
|
+
{"version":3,"file":"SqlCreateInputProcessor.cjs","sources":["../../../../../../packages/engine-content-api/src/mapper/insert/SqlCreateInputProcessor.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { Mapper } from '../Mapper'\nimport { InsertBuilder } from './InsertBuilder'\nimport { Providers, resolveColumnValue } from '@contember/schema-utils'\nimport { CreateInputProcessor } from '../../inputProcessing'\nimport { MutationResultList } from '../Result'\nimport { hasManyProcessor, hasOneProcessor } from '../MutationProcessorHelper'\nimport { OneHasOneInverseCreateInputProcessor } from './relations/OneHasOneInverseCreateInputProcessor'\nimport { OneHasOneOwningCreateInputProcessor } from './relations/OneHasOneOwningCreateInputProcessor'\nimport { OneHasManyCreateInputProcessor } from './relations/OneHasManyCreateInputProcessor'\nimport { ManyHasOneCreateInputProcessor } from './relations/ManyHasOneCreateInputProcessor'\nimport { ManyHasManyCreateInputProcessor } from './relations/ManyHasManyCreateInputProcessor'\n\n\nexport type SqlCreateInputProcessorResult = MutationResultList | ((ctx: { primary: Input.PrimaryValue }) => Promise<MutationResultList>)\nexport class SqlCreateInputProcessor implements CreateInputProcessor<SqlCreateInputProcessorResult> {\n\n\tprivate oneHasOneInverseCreateInputProcessor: OneHasOneInverseCreateInputProcessor\n\tprivate oneHasOneOwningCreateInputProcessor: OneHasOneOwningCreateInputProcessor\n\tprivate oneHasManyCreateInputProcessor: OneHasManyCreateInputProcessor\n\tprivate manyHasOneCreateInputProcessor: ManyHasOneCreateInputProcessor\n\tprivate manyHasManyCreateInputProcessor: ManyHasManyCreateInputProcessor\n\n\tconstructor(\n\t\tprivate readonly insertBuilder: InsertBuilder,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly providers: Providers,\n\t) {\n\t\tthis.oneHasOneInverseCreateInputProcessor = new OneHasOneInverseCreateInputProcessor(this.mapper)\n\t\tthis.oneHasOneOwningCreateInputProcessor = new OneHasOneOwningCreateInputProcessor(this.mapper, this.insertBuilder)\n\t\tthis.oneHasManyCreateInputProcessor = new OneHasManyCreateInputProcessor(this.mapper)\n\t\tthis.manyHasOneCreateInputProcessor = new ManyHasOneCreateInputProcessor(this.mapper, this.insertBuilder)\n\t\tthis.manyHasManyCreateInputProcessor = new ManyHasManyCreateInputProcessor(this.mapper)\n\t}\n\n\tpublic async column(context: Model.ColumnContext & { input: Input.ColumnValue | undefined }): Promise<SqlCreateInputProcessorResult> {\n\t\tthis.insertBuilder.addFieldValue(\n\t\t\tcontext.column.name,\n\t\t\tresolveColumnValue(context, this.providers),\n\t\t)\n\t\treturn []\n\t}\n\n\tmanyHasManyInverse: CreateInputProcessor<SqlCreateInputProcessorResult>['manyHasManyInverse'] = {\n\t\tconnect: hasManyProcessor(ctx => this.manyHasManyCreateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.manyHasManyCreateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.manyHasManyCreateInputProcessor.connectOrCreate(ctx)),\n\t}\n\n\tmanyHasManyOwning: CreateInputProcessor<SqlCreateInputProcessorResult>['manyHasManyOwning'] = {\n\t\tconnect: hasManyProcessor(ctx => this.manyHasManyCreateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.manyHasManyCreateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.manyHasManyCreateInputProcessor.connectOrCreate(ctx)),\n\t}\n\n\tmanyHasOne: CreateInputProcessor<SqlCreateInputProcessorResult>['manyHasOne'] = {\n\t\tnothing: async ctx => {\n\t\t\tthis.insertBuilder.addFieldValue(ctx.relation.name, null)\n\t\t\treturn []\n\t\t},\n\t\tconnect: hasOneProcessor(ctx => this.manyHasOneCreateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.manyHasOneCreateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.manyHasOneCreateInputProcessor.connectOrCreate(ctx)),\n\t}\n\n\toneHasMany: CreateInputProcessor<SqlCreateInputProcessorResult>['oneHasMany'] = {\n\t\tconnect: hasManyProcessor(ctx => this.oneHasManyCreateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.oneHasManyCreateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.oneHasManyCreateInputProcessor.connectOrCreate(ctx)),\n\t}\n\n\n\toneHasOneOwning: CreateInputProcessor<SqlCreateInputProcessorResult>['oneHasOneOwning'] = {\n\t\tnothing: async ctx => {\n\t\t\tthis.insertBuilder.addFieldValue(ctx.relation.name, null)\n\t\t\treturn []\n\t\t},\n\t\tconnect: hasOneProcessor(ctx => this.oneHasOneOwningCreateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.oneHasOneOwningCreateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.oneHasOneOwningCreateInputProcessor.connectOrCreate(ctx)),\n\t}\n\n\toneHasOneInverse: CreateInputProcessor<SqlCreateInputProcessorResult>['oneHasOneInverse'] = {\n\t\tconnect: hasOneProcessor(ctx => this.oneHasOneInverseCreateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.oneHasOneInverseCreateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.oneHasOneInverseCreateInputProcessor.connectOrCreate(ctx)),\n\t}\n}\n"],"names":["hasManyProcessor","hasOneProcessor","OneHasOneInverseCreateInputProcessor","OneHasOneOwningCreateInputProcessor","OneHasManyCreateInputProcessor","ManyHasOneCreateInputProcessor","ManyHasManyCreateInputProcessor","resolveColumnValue"],"mappings":"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"}
|
|
@@ -65,9 +65,7 @@ class SqlCreateInputProcessor {
|
|
|
65
65
|
async column(context) {
|
|
66
66
|
this.insertBuilder.addFieldValue(
|
|
67
67
|
context.column.name,
|
|
68
|
-
(
|
|
69
|
-
return resolveColumnValue(context, this.providers);
|
|
70
|
-
})()
|
|
68
|
+
resolveColumnValue(context, this.providers)
|
|
71
69
|
);
|
|
72
70
|
return [];
|
|
73
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqlCreateInputProcessor.js","sources":["../../../../../../packages/engine-content-api/src/mapper/insert/SqlCreateInputProcessor.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { Mapper } from '../Mapper'\nimport { InsertBuilder } from './InsertBuilder'\nimport { Providers, resolveColumnValue } from '@contember/schema-utils'\nimport { CreateInputProcessor } from '../../inputProcessing'\nimport { MutationResultList } from '../Result'\nimport { hasManyProcessor, hasOneProcessor } from '../MutationProcessorHelper'\nimport { OneHasOneInverseCreateInputProcessor } from './relations/OneHasOneInverseCreateInputProcessor'\nimport { OneHasOneOwningCreateInputProcessor } from './relations/OneHasOneOwningCreateInputProcessor'\nimport { OneHasManyCreateInputProcessor } from './relations/OneHasManyCreateInputProcessor'\nimport { ManyHasOneCreateInputProcessor } from './relations/ManyHasOneCreateInputProcessor'\nimport { ManyHasManyCreateInputProcessor } from './relations/ManyHasManyCreateInputProcessor'\n\n\nexport type SqlCreateInputProcessorResult = MutationResultList | ((ctx: { primary: Input.PrimaryValue }) => Promise<MutationResultList>)\nexport class SqlCreateInputProcessor implements CreateInputProcessor<SqlCreateInputProcessorResult> {\n\n\tprivate oneHasOneInverseCreateInputProcessor: OneHasOneInverseCreateInputProcessor\n\tprivate oneHasOneOwningCreateInputProcessor: OneHasOneOwningCreateInputProcessor\n\tprivate oneHasManyCreateInputProcessor: OneHasManyCreateInputProcessor\n\tprivate manyHasOneCreateInputProcessor: ManyHasOneCreateInputProcessor\n\tprivate manyHasManyCreateInputProcessor: ManyHasManyCreateInputProcessor\n\n\tconstructor(\n\t\tprivate readonly insertBuilder: InsertBuilder,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly providers: Providers,\n\t) {\n\t\tthis.oneHasOneInverseCreateInputProcessor = new OneHasOneInverseCreateInputProcessor(this.mapper)\n\t\tthis.oneHasOneOwningCreateInputProcessor = new OneHasOneOwningCreateInputProcessor(this.mapper, this.insertBuilder)\n\t\tthis.oneHasManyCreateInputProcessor = new OneHasManyCreateInputProcessor(this.mapper)\n\t\tthis.manyHasOneCreateInputProcessor = new ManyHasOneCreateInputProcessor(this.mapper, this.insertBuilder)\n\t\tthis.manyHasManyCreateInputProcessor = new ManyHasManyCreateInputProcessor(this.mapper)\n\t}\n\n\tpublic async column(context: Model.ColumnContext & { input: Input.ColumnValue | undefined }): Promise<SqlCreateInputProcessorResult> {\n\t\tthis.insertBuilder.addFieldValue(\n\t\t\tcontext.column.name,\n\t\t\
|
|
1
|
+
{"version":3,"file":"SqlCreateInputProcessor.js","sources":["../../../../../../packages/engine-content-api/src/mapper/insert/SqlCreateInputProcessor.ts"],"sourcesContent":["import { Input, Model, Value } from '@contember/schema'\nimport { Mapper } from '../Mapper'\nimport { InsertBuilder } from './InsertBuilder'\nimport { Providers, resolveColumnValue } from '@contember/schema-utils'\nimport { CreateInputProcessor } from '../../inputProcessing'\nimport { MutationResultList } from '../Result'\nimport { hasManyProcessor, hasOneProcessor } from '../MutationProcessorHelper'\nimport { OneHasOneInverseCreateInputProcessor } from './relations/OneHasOneInverseCreateInputProcessor'\nimport { OneHasOneOwningCreateInputProcessor } from './relations/OneHasOneOwningCreateInputProcessor'\nimport { OneHasManyCreateInputProcessor } from './relations/OneHasManyCreateInputProcessor'\nimport { ManyHasOneCreateInputProcessor } from './relations/ManyHasOneCreateInputProcessor'\nimport { ManyHasManyCreateInputProcessor } from './relations/ManyHasManyCreateInputProcessor'\n\n\nexport type SqlCreateInputProcessorResult = MutationResultList | ((ctx: { primary: Input.PrimaryValue }) => Promise<MutationResultList>)\nexport class SqlCreateInputProcessor implements CreateInputProcessor<SqlCreateInputProcessorResult> {\n\n\tprivate oneHasOneInverseCreateInputProcessor: OneHasOneInverseCreateInputProcessor\n\tprivate oneHasOneOwningCreateInputProcessor: OneHasOneOwningCreateInputProcessor\n\tprivate oneHasManyCreateInputProcessor: OneHasManyCreateInputProcessor\n\tprivate manyHasOneCreateInputProcessor: ManyHasOneCreateInputProcessor\n\tprivate manyHasManyCreateInputProcessor: ManyHasManyCreateInputProcessor\n\n\tconstructor(\n\t\tprivate readonly insertBuilder: InsertBuilder,\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly providers: Providers,\n\t) {\n\t\tthis.oneHasOneInverseCreateInputProcessor = new OneHasOneInverseCreateInputProcessor(this.mapper)\n\t\tthis.oneHasOneOwningCreateInputProcessor = new OneHasOneOwningCreateInputProcessor(this.mapper, this.insertBuilder)\n\t\tthis.oneHasManyCreateInputProcessor = new OneHasManyCreateInputProcessor(this.mapper)\n\t\tthis.manyHasOneCreateInputProcessor = new ManyHasOneCreateInputProcessor(this.mapper, this.insertBuilder)\n\t\tthis.manyHasManyCreateInputProcessor = new ManyHasManyCreateInputProcessor(this.mapper)\n\t}\n\n\tpublic async column(context: Model.ColumnContext & { input: Input.ColumnValue | undefined }): Promise<SqlCreateInputProcessorResult> {\n\t\tthis.insertBuilder.addFieldValue(\n\t\t\tcontext.column.name,\n\t\t\tresolveColumnValue(context, this.providers),\n\t\t)\n\t\treturn []\n\t}\n\n\tmanyHasManyInverse: CreateInputProcessor<SqlCreateInputProcessorResult>['manyHasManyInverse'] = {\n\t\tconnect: hasManyProcessor(ctx => this.manyHasManyCreateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.manyHasManyCreateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.manyHasManyCreateInputProcessor.connectOrCreate(ctx)),\n\t}\n\n\tmanyHasManyOwning: CreateInputProcessor<SqlCreateInputProcessorResult>['manyHasManyOwning'] = {\n\t\tconnect: hasManyProcessor(ctx => this.manyHasManyCreateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.manyHasManyCreateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.manyHasManyCreateInputProcessor.connectOrCreate(ctx)),\n\t}\n\n\tmanyHasOne: CreateInputProcessor<SqlCreateInputProcessorResult>['manyHasOne'] = {\n\t\tnothing: async ctx => {\n\t\t\tthis.insertBuilder.addFieldValue(ctx.relation.name, null)\n\t\t\treturn []\n\t\t},\n\t\tconnect: hasOneProcessor(ctx => this.manyHasOneCreateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.manyHasOneCreateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.manyHasOneCreateInputProcessor.connectOrCreate(ctx)),\n\t}\n\n\toneHasMany: CreateInputProcessor<SqlCreateInputProcessorResult>['oneHasMany'] = {\n\t\tconnect: hasManyProcessor(ctx => this.oneHasManyCreateInputProcessor.connect(ctx)),\n\t\tcreate: hasManyProcessor(ctx => this.oneHasManyCreateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasManyProcessor(ctx => this.oneHasManyCreateInputProcessor.connectOrCreate(ctx)),\n\t}\n\n\n\toneHasOneOwning: CreateInputProcessor<SqlCreateInputProcessorResult>['oneHasOneOwning'] = {\n\t\tnothing: async ctx => {\n\t\t\tthis.insertBuilder.addFieldValue(ctx.relation.name, null)\n\t\t\treturn []\n\t\t},\n\t\tconnect: hasOneProcessor(ctx => this.oneHasOneOwningCreateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.oneHasOneOwningCreateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.oneHasOneOwningCreateInputProcessor.connectOrCreate(ctx)),\n\t}\n\n\toneHasOneInverse: CreateInputProcessor<SqlCreateInputProcessorResult>['oneHasOneInverse'] = {\n\t\tconnect: hasOneProcessor(ctx => this.oneHasOneInverseCreateInputProcessor.connect(ctx)),\n\t\tcreate: hasOneProcessor(ctx => this.oneHasOneInverseCreateInputProcessor.create(ctx)),\n\t\tconnectOrCreate: hasOneProcessor(ctx => this.oneHasOneInverseCreateInputProcessor.connectOrCreate(ctx)),\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -7,10 +7,8 @@ class ManyHasManyCreateInputProcessor {
|
|
|
7
7
|
}
|
|
8
8
|
async connect({ entity, targetEntity, relation, targetRelation, input }) {
|
|
9
9
|
return async ({ primary }) => {
|
|
10
|
-
const otherPrimary = await this.mapper.getPrimaryValue(targetEntity, input);
|
|
11
|
-
if (
|
|
12
|
-
return [new Result.MutationEntryNotFoundError([], input)];
|
|
13
|
-
}
|
|
10
|
+
const [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, input);
|
|
11
|
+
if (err) return [err];
|
|
14
12
|
return await this.mapper.connectJunction(entity, relation, primary, otherPrimary);
|
|
15
13
|
};
|
|
16
14
|
}
|
|
@@ -29,7 +27,7 @@ class ManyHasManyCreateInputProcessor {
|
|
|
29
27
|
}
|
|
30
28
|
async connectOrCreate(context) {
|
|
31
29
|
return async ({ primary }) => {
|
|
32
|
-
let otherPrimary = await this.mapper.getPrimaryValue(context.targetEntity, context.input.connect);
|
|
30
|
+
let [otherPrimary] = await this.mapper.getPrimaryValue(context.targetEntity, context.input.connect);
|
|
33
31
|
if (!otherPrimary) {
|
|
34
32
|
const insertResult = await this.mapper.insert(context.targetEntity, context.input.create);
|
|
35
33
|
otherPrimary = Result.getInsertPrimary(insertResult);
|
package/dist/development/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManyHasManyCreateInputProcessor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { getInsertPrimary, MutationEntryNotFoundError } from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { CreateInputProcessor } from '../../../inputProcessing'\nimport { SqlCreateInputProcessorResult } from '../SqlCreateInputProcessor'\n\ntype Context = Model.ManyHasManyOwningContext | Model.ManyHasManyInverseContext\n\nexport class ManyHasManyCreateInputProcessor implements CreateInputProcessor.HasManyRelationProcessor<Context, SqlCreateInputProcessorResult> {\n\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere },\n\t): Promise<SqlCreateInputProcessorResult> {\n\t\treturn async ({ primary }) => {\n\t\t\tconst otherPrimary = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\t\tif (
|
|
1
|
+
{"version":3,"file":"ManyHasManyCreateInputProcessor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { getInsertPrimary, MutationEntryNotFoundError } from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { CreateInputProcessor } from '../../../inputProcessing'\nimport { SqlCreateInputProcessorResult } from '../SqlCreateInputProcessor'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { MapperInput } from '../../types'\n\ntype Context = Model.ManyHasManyOwningContext | Model.ManyHasManyInverseContext\n\nexport class ManyHasManyCreateInputProcessor implements CreateInputProcessor.HasManyRelationProcessor<Context, SqlCreateInputProcessorResult> {\n\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere | CheckedPrimary },\n\t): Promise<SqlCreateInputProcessorResult> {\n\t\treturn async ({ primary }) => {\n\t\t\tconst [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\t\tif (err) return [err]\n\t\t\treturn await this.mapper.connectJunction(entity, relation, primary, otherPrimary)\n\t\t}\n\t}\n\n\tpublic async create(\n\t\t{ entity, targetEntity, relation, input }: Context & { input: MapperInput.CreateDataInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst insertResult = await this.mapper.insert(targetEntity, input)\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\treturn [\n\t\t\t\t...insertResult,\n\t\t\t\t...(await this.mapper.connectJunction(entity, relation, primary, insertPrimary)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async connectOrCreate(\n\t\tcontext: Context & { input: MapperInput.ConnectOrCreateInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tlet [otherPrimary] = await this.mapper.getPrimaryValue(context.targetEntity, context.input.connect)\n\t\t\tif (!otherPrimary) {\n\t\t\t\tconst insertResult = await this.mapper.insert(context.targetEntity, context.input.create)\n\t\t\t\totherPrimary = getInsertPrimary(insertResult)\n\t\t\t\tif (!otherPrimary) {\n\t\t\t\t\treturn insertResult\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn await this.mapper.connectJunction(context.entity, context.relation, primary, otherPrimary)\n\t\t}\n\t}\n}\n"],"names":["getInsertPrimary"],"mappings":";;;AAUO,MAAM,gCAAiI;AAAA,EAE7I,YACkB,QAChB;AADgB,SAAA,SAAA;AAAA,EAAA;AAAA,EAIlB,MAAa,QACZ,EAAE,QAAQ,cAAc,UAAU,gBAAgB,SACT;AAClC,WAAA,OAAO,EAAE,cAAc;AACvB,YAAA,CAAC,cAAc,GAAG,IAAI,MAAM,KAAK,OAAO,gBAAgB,cAAc,KAAK;AAC7E,UAAA,IAAY,QAAA,CAAC,GAAG;AACpB,aAAO,MAAM,KAAK,OAAO,gBAAgB,QAAQ,UAAU,SAAS,YAAY;AAAA,IACjF;AAAA,EAAA;AAAA,EAGD,MAAa,OACZ,EAAE,QAAQ,cAAc,UAAU,SACjC;AACM,WAAA,OAAO,EAAE,cAA+C;AAC9D,YAAM,eAAe,MAAM,KAAK,OAAO,OAAO,cAAc,KAAK;AAC3D,YAAA,gBAAgBA,wBAAiB,YAAY;AACnD,UAAI,CAAC,eAAe;AACZ,eAAA;AAAA,MAAA;AAED,aAAA;AAAA,QACN,GAAG;AAAA,QACH,GAAI,MAAM,KAAK,OAAO,gBAAgB,QAAQ,UAAU,SAAS,aAAa;AAAA,MAC/E;AAAA,IACD;AAAA,EAAA;AAAA,EAGD,MAAa,gBACZ,SACC;AACM,WAAA,OAAO,EAAE,cAA+C;AAC1D,UAAA,CAAC,YAAY,IAAI,MAAM,KAAK,OAAO,gBAAgB,QAAQ,cAAc,QAAQ,MAAM,OAAO;AAClG,UAAI,CAAC,cAAc;AACZ,cAAA,eAAe,MAAM,KAAK,OAAO,OAAO,QAAQ,cAAc,QAAQ,MAAM,MAAM;AACxF,uBAAeA,wBAAiB,YAAY;AAC5C,YAAI,CAAC,cAAc;AACX,iBAAA;AAAA,QAAA;AAAA,MACR;AAEM,aAAA,MAAM,KAAK,OAAO,gBAAgB,QAAQ,QAAQ,QAAQ,UAAU,SAAS,YAAY;AAAA,IACjG;AAAA,EAAA;AAEF;;"}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getInsertPrimary } from "../../Result.js";
|
|
2
2
|
class ManyHasManyCreateInputProcessor {
|
|
3
3
|
constructor(mapper) {
|
|
4
4
|
this.mapper = mapper;
|
|
5
5
|
}
|
|
6
6
|
async connect({ entity, targetEntity, relation, targetRelation, input }) {
|
|
7
7
|
return async ({ primary }) => {
|
|
8
|
-
const otherPrimary = await this.mapper.getPrimaryValue(targetEntity, input);
|
|
9
|
-
if (
|
|
10
|
-
return [new MutationEntryNotFoundError([], input)];
|
|
11
|
-
}
|
|
8
|
+
const [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, input);
|
|
9
|
+
if (err) return [err];
|
|
12
10
|
return await this.mapper.connectJunction(entity, relation, primary, otherPrimary);
|
|
13
11
|
};
|
|
14
12
|
}
|
|
@@ -27,7 +25,7 @@ class ManyHasManyCreateInputProcessor {
|
|
|
27
25
|
}
|
|
28
26
|
async connectOrCreate(context) {
|
|
29
27
|
return async ({ primary }) => {
|
|
30
|
-
let otherPrimary = await this.mapper.getPrimaryValue(context.targetEntity, context.input.connect);
|
|
28
|
+
let [otherPrimary] = await this.mapper.getPrimaryValue(context.targetEntity, context.input.connect);
|
|
31
29
|
if (!otherPrimary) {
|
|
32
30
|
const insertResult = await this.mapper.insert(context.targetEntity, context.input.create);
|
|
33
31
|
otherPrimary = getInsertPrimary(insertResult);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManyHasManyCreateInputProcessor.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { getInsertPrimary, MutationEntryNotFoundError } from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { CreateInputProcessor } from '../../../inputProcessing'\nimport { SqlCreateInputProcessorResult } from '../SqlCreateInputProcessor'\n\ntype Context = Model.ManyHasManyOwningContext | Model.ManyHasManyInverseContext\n\nexport class ManyHasManyCreateInputProcessor implements CreateInputProcessor.HasManyRelationProcessor<Context, SqlCreateInputProcessorResult> {\n\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere },\n\t): Promise<SqlCreateInputProcessorResult> {\n\t\treturn async ({ primary }) => {\n\t\t\tconst otherPrimary = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\t\tif (
|
|
1
|
+
{"version":3,"file":"ManyHasManyCreateInputProcessor.js","sources":["../../../../../../../packages/engine-content-api/src/mapper/insert/relations/ManyHasManyCreateInputProcessor.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { getInsertPrimary, MutationEntryNotFoundError } from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { CreateInputProcessor } from '../../../inputProcessing'\nimport { SqlCreateInputProcessorResult } from '../SqlCreateInputProcessor'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { MapperInput } from '../../types'\n\ntype Context = Model.ManyHasManyOwningContext | Model.ManyHasManyInverseContext\n\nexport class ManyHasManyCreateInputProcessor implements CreateInputProcessor.HasManyRelationProcessor<Context, SqlCreateInputProcessorResult> {\n\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t) {\n\t}\n\n\tpublic async connect(\n\t\t{ entity, targetEntity, relation, targetRelation, input }: Context & { input: Input.UniqueWhere | CheckedPrimary },\n\t): Promise<SqlCreateInputProcessorResult> {\n\t\treturn async ({ primary }) => {\n\t\t\tconst [otherPrimary, err] = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\t\tif (err) return [err]\n\t\t\treturn await this.mapper.connectJunction(entity, relation, primary, otherPrimary)\n\t\t}\n\t}\n\n\tpublic async create(\n\t\t{ entity, targetEntity, relation, input }: Context & { input: MapperInput.CreateDataInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tconst insertResult = await this.mapper.insert(targetEntity, input)\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\treturn [\n\t\t\t\t...insertResult,\n\t\t\t\t...(await this.mapper.connectJunction(entity, relation, primary, insertPrimary)),\n\t\t\t]\n\t\t}\n\t}\n\n\tpublic async connectOrCreate(\n\t\tcontext: Context & { input: MapperInput.ConnectOrCreateInput },\n\t) {\n\t\treturn async ({ primary }: { primary: Input.PrimaryValue }) => {\n\t\t\tlet [otherPrimary] = await this.mapper.getPrimaryValue(context.targetEntity, context.input.connect)\n\t\t\tif (!otherPrimary) {\n\t\t\t\tconst insertResult = await this.mapper.insert(context.targetEntity, context.input.create)\n\t\t\t\totherPrimary = getInsertPrimary(insertResult)\n\t\t\t\tif (!otherPrimary) {\n\t\t\t\t\treturn insertResult\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn await this.mapper.connectJunction(context.entity, context.relation, primary, otherPrimary)\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";AAUO,MAAM,gCAAiI;AAAA,EAE7I,YACkB,QAChB;AADgB,SAAA,SAAA;AAAA,EAAA;AAAA,EAIlB,MAAa,QACZ,EAAE,QAAQ,cAAc,UAAU,gBAAgB,SACT;AAClC,WAAA,OAAO,EAAE,cAAc;AACvB,YAAA,CAAC,cAAc,GAAG,IAAI,MAAM,KAAK,OAAO,gBAAgB,cAAc,KAAK;AAC7E,UAAA,IAAY,QAAA,CAAC,GAAG;AACpB,aAAO,MAAM,KAAK,OAAO,gBAAgB,QAAQ,UAAU,SAAS,YAAY;AAAA,IACjF;AAAA,EAAA;AAAA,EAGD,MAAa,OACZ,EAAE,QAAQ,cAAc,UAAU,SACjC;AACM,WAAA,OAAO,EAAE,cAA+C;AAC9D,YAAM,eAAe,MAAM,KAAK,OAAO,OAAO,cAAc,KAAK;AAC3D,YAAA,gBAAgB,iBAAiB,YAAY;AACnD,UAAI,CAAC,eAAe;AACZ,eAAA;AAAA,MAAA;AAED,aAAA;AAAA,QACN,GAAG;AAAA,QACH,GAAI,MAAM,KAAK,OAAO,gBAAgB,QAAQ,UAAU,SAAS,aAAa;AAAA,MAC/E;AAAA,IACD;AAAA,EAAA;AAAA,EAGD,MAAa,gBACZ,SACC;AACM,WAAA,OAAO,EAAE,cAA+C;AAC1D,UAAA,CAAC,YAAY,IAAI,MAAM,KAAK,OAAO,gBAAgB,QAAQ,cAAc,QAAQ,MAAM,OAAO;AAClG,UAAI,CAAC,cAAc;AACZ,cAAA,eAAe,MAAM,KAAK,OAAO,OAAO,QAAQ,cAAc,QAAQ,MAAM,MAAM;AACxF,uBAAe,iBAAiB,YAAY;AAC5C,YAAI,CAAC,cAAc;AACX,iBAAA;AAAA,QAAA;AAAA,MACR;AAEM,aAAA,MAAM,KAAK,OAAO,gBAAgB,QAAQ,QAAQ,QAAQ,UAAU,SAAS,YAAY;AAAA,IACjG;AAAA,EAAA;AAEF;"}
|
|
@@ -7,10 +7,8 @@ class ManyHasOneCreateInputProcessor {
|
|
|
7
7
|
this.insertBuilder = insertBuilder;
|
|
8
8
|
}
|
|
9
9
|
async connect({ targetEntity, relation, input }) {
|
|
10
|
-
const value = await this.mapper.getPrimaryValue(targetEntity, input);
|
|
11
|
-
if (
|
|
12
|
-
return [new Result.MutationEntryNotFoundError([], input)];
|
|
13
|
-
}
|
|
10
|
+
const [value, err] = await this.mapper.getPrimaryValue(targetEntity, input);
|
|
11
|
+
if (err) return [err];
|
|
14
12
|
this.insertBuilder.addFieldValue(relation.name, value);
|
|
15
13
|
return [];
|
|
16
14
|
}
|
|
@@ -24,7 +22,7 @@ class ManyHasOneCreateInputProcessor {
|
|
|
24
22
|
return [];
|
|
25
23
|
}
|
|
26
24
|
async connectOrCreate({ input: { connect, create }, relation, targetEntity }) {
|
|
27
|
-
const value = await this.mapper.getPrimaryValue(targetEntity, connect);
|
|
25
|
+
const [value] = await this.mapper.getPrimaryValue(targetEntity, connect);
|
|
28
26
|
if (value) {
|
|
29
27
|
this.insertBuilder.addFieldValue(relation.name, value);
|
|
30
28
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManyHasOneCreateInputProcessor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { getInsertPrimary, MutationEntryNotFoundError } from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { CreateInputProcessor } from '../../../inputProcessing'\nimport { SqlCreateInputProcessorResult } from '../SqlCreateInputProcessor'\nimport { InsertBuilder } from '../InsertBuilder'\n\ntype Context = Model.ManyHasOneContext\n\nexport class ManyHasOneCreateInputProcessor implements CreateInputProcessor.HasManyRelationProcessor<Context, SqlCreateInputProcessorResult> {\n\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly insertBuilder: InsertBuilder,\n\t) {\n\t}\n\tpublic async connect(\n\t\t{ targetEntity, relation, input }: Context & { input: Input.UniqueWhere },\n\t) {\n\t\tconst value = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\tif (
|
|
1
|
+
{"version":3,"file":"ManyHasOneCreateInputProcessor.cjs","sources":["../../../../../../../packages/engine-content-api/src/mapper/insert/relations/ManyHasOneCreateInputProcessor.ts"],"sourcesContent":["import { Input, Model } from '@contember/schema'\nimport { getInsertPrimary, MutationEntryNotFoundError } from '../../Result'\nimport { Mapper } from '../../Mapper'\nimport { CreateInputProcessor } from '../../../inputProcessing'\nimport { SqlCreateInputProcessorResult } from '../SqlCreateInputProcessor'\nimport { InsertBuilder } from '../InsertBuilder'\nimport { CheckedPrimary } from '../../CheckedPrimary'\nimport { MapperInput } from '../../types'\n\ntype Context = Model.ManyHasOneContext\n\nexport class ManyHasOneCreateInputProcessor implements CreateInputProcessor.HasManyRelationProcessor<Context, SqlCreateInputProcessorResult> {\n\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly insertBuilder: InsertBuilder,\n\t) {\n\t}\n\tpublic async connect(\n\t\t{ targetEntity, relation, input }: Context & { input: Input.UniqueWhere | CheckedPrimary },\n\t) {\n\t\tconst [value, err] = await this.mapper.getPrimaryValue(targetEntity, input)\n\t\tif (err) return [err]\n\t\tthis.insertBuilder.addFieldValue(relation.name, value)\n\t\treturn []\n\t}\n\n\tpublic async create(\n\t\t{ relation, targetEntity, input }: Context & { input: MapperInput.CreateDataInput },\n\t) {\n\t\tconst insertResult = await this.mapper.insert(targetEntity, input)\n\t\tconst value = getInsertPrimary(insertResult)\n\t\tif (!value) {\n\t\t\treturn insertResult\n\t\t}\n\t\tthis.insertBuilder.addFieldValue(relation.name, value)\n\t\treturn []\n\t}\n\n\tpublic async connectOrCreate(\n\t\t{ input: { connect, create }, relation, targetEntity }: Context & { input: MapperInput.ConnectOrCreateInput },\n\t) {\n\t\tconst [value] = await this.mapper.getPrimaryValue(targetEntity, connect)\n\t\tif (value) {\n\t\t\tthis.insertBuilder.addFieldValue(relation.name, value)\n\t\t} else {\n\t\t\tconst insertResult = await this.mapper.insert(targetEntity, create)\n\t\t\tconst primary = getInsertPrimary(insertResult)\n\t\t\tif (!primary) {\n\t\t\t\treturn insertResult\n\t\t\t}\n\n\t\t\tthis.insertBuilder.addFieldValue(relation.name, primary)\n\t\t}\n\t\treturn []\n\t}\n}\n"],"names":["getInsertPrimary"],"mappings":";;;AAWO,MAAM,+BAAiI;AAAA,EAE7I,YACkB,QACA,eAChB;AAFgB,SAAA,SAAA;AACA,SAAA,gBAAA;AAAA,EAAA;AAAA,EAGlB,MAAa,QACZ,EAAE,cAAc,UAAU,SACzB;AACK,UAAA,CAAC,OAAO,GAAG,IAAI,MAAM,KAAK,OAAO,gBAAgB,cAAc,KAAK;AACtE,QAAA,IAAY,QAAA,CAAC,GAAG;AACpB,SAAK,cAAc,cAAc,SAAS,MAAM,KAAK;AACrD,WAAO,CAAC;AAAA,EAAA;AAAA,EAGT,MAAa,OACZ,EAAE,UAAU,cAAc,SACzB;AACD,UAAM,eAAe,MAAM,KAAK,OAAO,OAAO,cAAc,KAAK;AAC3D,UAAA,QAAQA,wBAAiB,YAAY;AAC3C,QAAI,CAAC,OAAO;AACJ,aAAA;AAAA,IAAA;AAER,SAAK,cAAc,cAAc,SAAS,MAAM,KAAK;AACrD,WAAO,CAAC;AAAA,EAAA;AAAA,EAGT,MAAa,gBACZ,EAAE,OAAO,EAAE,SAAS,UAAU,UAAU,gBACvC;AACK,UAAA,CAAC,KAAK,IAAI,MAAM,KAAK,OAAO,gBAAgB,cAAc,OAAO;AACvE,QAAI,OAAO;AACV,WAAK,cAAc,cAAc,SAAS,MAAM,KAAK;AAAA,IAAA,OAC/C;AACN,YAAM,eAAe,MAAM,KAAK,OAAO,OAAO,cAAc,MAAM;AAC5D,YAAA,UAAUA,wBAAiB,YAAY;AAC7C,UAAI,CAAC,SAAS;AACN,eAAA;AAAA,MAAA;AAGR,WAAK,cAAc,cAAc,SAAS,MAAM,OAAO;AAAA,IAAA;AAExD,WAAO,CAAC;AAAA,EAAA;AAEV;;"}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getInsertPrimary } from "../../Result.js";
|
|
2
2
|
class ManyHasOneCreateInputProcessor {
|
|
3
3
|
constructor(mapper, insertBuilder) {
|
|
4
4
|
this.mapper = mapper;
|
|
5
5
|
this.insertBuilder = insertBuilder;
|
|
6
6
|
}
|
|
7
7
|
async connect({ targetEntity, relation, input }) {
|
|
8
|
-
const value = await this.mapper.getPrimaryValue(targetEntity, input);
|
|
9
|
-
if (
|
|
10
|
-
return [new MutationEntryNotFoundError([], input)];
|
|
11
|
-
}
|
|
8
|
+
const [value, err] = await this.mapper.getPrimaryValue(targetEntity, input);
|
|
9
|
+
if (err) return [err];
|
|
12
10
|
this.insertBuilder.addFieldValue(relation.name, value);
|
|
13
11
|
return [];
|
|
14
12
|
}
|
|
@@ -22,7 +20,7 @@ class ManyHasOneCreateInputProcessor {
|
|
|
22
20
|
return [];
|
|
23
21
|
}
|
|
24
22
|
async connectOrCreate({ input: { connect, create }, relation, targetEntity }) {
|
|
25
|
-
const value = await this.mapper.getPrimaryValue(targetEntity, connect);
|
|
23
|
+
const [value] = await this.mapper.getPrimaryValue(targetEntity, connect);
|
|
26
24
|
if (value) {
|
|
27
25
|
this.insertBuilder.addFieldValue(relation.name, value);
|
|
28
26
|
} else {
|