@fluentcommerce/fc-connect-sdk 0.1.54 → 0.1.55
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/CHANGELOG.md +12 -0
- package/dist/cjs/clients/fluent-client.js +13 -6
- package/dist/cjs/utils/pagination-helpers.js +38 -2
- package/dist/cjs/versori/fluent-versori-client.js +11 -5
- package/dist/esm/clients/fluent-client.js +13 -6
- package/dist/esm/utils/pagination-helpers.js +38 -2
- package/dist/esm/versori/fluent-versori-client.js +11 -5
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/tsconfig.types.tsbuildinfo +1 -1
- package/docs/00-START-HERE/EXPORT-VALIDATION.md +158 -158
- package/docs/00-START-HERE/cli-analyze-source-structure-guide.md +655 -655
- package/docs/00-START-HERE/cli-documentation-index.md +202 -202
- package/docs/00-START-HERE/cli-quick-reference.md +252 -252
- package/docs/00-START-HERE/decision-tree.md +552 -552
- package/docs/00-START-HERE/getting-started.md +1070 -1070
- package/docs/00-START-HERE/mapper-quick-decision-guide.md +235 -235
- package/docs/00-START-HERE/readme.md +237 -237
- package/docs/00-START-HERE/retailerid-configuration.md +404 -404
- package/docs/00-START-HERE/sdk-philosophy.md +794 -794
- package/docs/00-START-HERE/troubleshooting-quick-reference.md +1086 -1086
- package/docs/01-TEMPLATES/faq.md +686 -686
- package/docs/01-TEMPLATES/patterns/pattern-templates-guide.md +68 -68
- package/docs/01-TEMPLATES/patterns/patterns-csv-schema-validation-and-rejection-report.md +233 -233
- package/docs/01-TEMPLATES/patterns/patterns-custom-resolvers.md +407 -407
- package/docs/01-TEMPLATES/patterns/patterns-error-handling-retry.md +511 -511
- package/docs/01-TEMPLATES/patterns/patterns-field-mapping-universal.md +701 -701
- package/docs/01-TEMPLATES/patterns/patterns-large-file-splitting.md +1430 -1430
- package/docs/01-TEMPLATES/patterns/patterns-master-data-etl.md +2399 -2399
- package/docs/01-TEMPLATES/patterns/patterns-pagination-streaming.md +447 -447
- package/docs/01-TEMPLATES/patterns/patterns-state-duplicate-prevention.md +385 -385
- package/docs/01-TEMPLATES/readme.md +957 -957
- package/docs/01-TEMPLATES/standalone/standalone-asn-inbound-processing.md +1209 -1209
- package/docs/01-TEMPLATES/standalone/standalone-graphql-query-export.md +1140 -1140
- package/docs/01-TEMPLATES/standalone/standalone-graphql-to-parquet-partitioned-s3.md +432 -432
- package/docs/01-TEMPLATES/standalone/standalone-multi-channel-inventory-sync.md +1185 -1185
- package/docs/01-TEMPLATES/standalone/standalone-multi-source-aggregation.md +1462 -1462
- package/docs/01-TEMPLATES/standalone/standalone-s3-csv-batch-api.md +1390 -1390
- package/docs/01-TEMPLATES/standalone/standalone-s3-csv-inventory-to-batch.md +330 -330
- package/docs/01-TEMPLATES/standalone/standalone-scripts-guide.md +87 -87
- package/docs/01-TEMPLATES/standalone/standalone-sftp-xml-graphql.md +1444 -1444
- package/docs/01-TEMPLATES/standalone/standalone-webhook-payload-processing.md +688 -688
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-dropship-order-routing.md +193 -193
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-graphql-parquet-extraction.md +518 -518
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-inter-location-transfers.md +2162 -2162
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-pre-order-allocation.md +2226 -2226
- package/docs/01-TEMPLATES/versori/business-examples/business-scenarios-guide.md +87 -87
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-connection-validation-pattern.md +656 -656
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-dual-workflow-connector.md +835 -835
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-guide.md +108 -108
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-kv-state-management.md +1533 -1533
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-xml-response-patterns.md +1160 -1160
- package/docs/01-TEMPLATES/versori/versori-platform-guide.md +201 -201
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-asn-purchase-order.md +1906 -1906
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-dropship-routing.md +1074 -1074
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-flash-sale-reserve.md +1395 -1395
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-generic-xml-order.md +888 -888
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-payment-gateway-integration.md +2478 -2478
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-rma-returns-comprehensive.md +2240 -2240
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-xml-order-ingestion.md +2029 -2029
- package/docs/01-TEMPLATES/versori/webhooks/webhook-templates-guide.md +140 -140
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/inventory-mapping.json +20 -20
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/products_2025-01-22.csv +11 -11
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/sample-data-guide.md +34 -34
- package/docs/01-TEMPLATES/versori/workflows/_examples/workflow-examples-guide.md +36 -36
- package/docs/01-TEMPLATES/versori/workflows/extraction/extraction-modes-guide.md +1038 -1038
- package/docs/01-TEMPLATES/versori/workflows/extraction/extraction-workflows-guide.md +138 -138
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/graphql-extraction-guide.md +63 -63
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-fulfillments-to-sftp-csv.md +2062 -2062
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-fulfillments-to-sftp-xml.md +2294 -2294
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-positions-to-s3-csv.md +2461 -2461
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-positions-to-sftp-xml.md +2529 -2529
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-quantities-to-s3-csv.md +2464 -2464
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-quantities-to-s3-json.md +1959 -1959
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-orders-to-s3-csv.md +1953 -1953
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-orders-to-sftp-xml.md +2541 -2541
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-products-to-s3-json.md +2384 -2384
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-products-to-sftp-xml.md +2445 -2445
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-s3-csv.md +2355 -2355
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-s3-json.md +2042 -2042
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-sftp-xml.md +2726 -2726
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/batch-api-guide.md +206 -206
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-cycle-count-reconciliation.md +2030 -2030
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-multi-channel-inventory-sync.md +1882 -1882
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md +2827 -2827
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-json-inventory-batch.md +1952 -1952
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-xml-inventory-batch.md +3289 -3289
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md +3064 -3064
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-json-inventory-batch.md +3238 -3238
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-xml-inventory-batch.md +2977 -2977
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/event-api-guide.md +321 -321
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-payload-json-order-cancel-event.md +959 -959
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-payload-xml-order-cancel-event.md +1170 -1170
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-csv-product-event.md +2312 -2312
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-json-product-event.md +2999 -2999
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-parquet-product-event.md +2836 -2836
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-xml-product-event.md +2395 -2395
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-csv-product-event.md +2295 -2295
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-json-product-event.md +2602 -2602
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-parquet-product-event.md +2589 -2589
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-xml-product-event.md +3578 -3578
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/graphql-mutations-guide.md +93 -93
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-payload-json-order-update-graphql.md +1260 -1260
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-payload-xml-order-update-graphql.md +1472 -1472
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-control-graphql.md +2417 -2417
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-location-graphql.md +2811 -2811
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-price-graphql.md +2619 -2619
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-json-location-graphql.md +2807 -2807
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-xml-location-graphql.md +2373 -2373
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-control-graphql.md +2740 -2740
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-location-graphql.md +2760 -2760
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-json-location-graphql.md +1710 -1710
- package/docs/01-TEMPLATES/versori/workflows/ingestion/ingestion-workflows-guide.md +136 -136
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/rubix-webhooks-guide.md +520 -520
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-fulfilment-to-sftp-xml-inline.md +1418 -1418
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-fulfilment-to-sftp-xml-universal-mapper.md +1785 -1785
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-order-attribute-update.md +824 -824
- package/docs/01-TEMPLATES/versori/workflows/workflows-overview-guide.md +646 -646
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-batch-archival.md +724 -724
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-job-tracker.md +627 -627
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-partial-batch-recovery.md +561 -561
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-quick-reference.md +367 -367
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-readme.md +407 -407
- package/docs/02-CORE-GUIDES/advanced-services/readme.md +49 -49
- package/docs/02-CORE-GUIDES/api-reference/api-reference-quick-reference.md +548 -548
- package/docs/02-CORE-GUIDES/api-reference/event-api-input-output-reference.md +702 -1171
- package/docs/02-CORE-GUIDES/api-reference/examples/client-initialization.ts +286 -286
- package/docs/02-CORE-GUIDES/api-reference/graphql-error-classification.md +337 -337
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-01-client-api.md +399 -520
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-03-authentication.md +199 -199
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-04-graphql-mapping.md +925 -925
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-05-services.md +1198 -1198
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-06-data-sources.md +1083 -1083
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-07-parsers.md +1097 -1097
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-08-pagination.md +513 -513
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-08-types.md +545 -597
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-09-error-handling.md +527 -527
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-09-webhook-validation.md +514 -514
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-10-extraction.md +557 -557
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-10-utilities.md +412 -412
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-11-cli-tools.md +423 -423
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-11-error-handling.md +716 -716
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-analyze-source-structure.md +518 -518
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-partial-responses.md +212 -212
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-testing.md +300 -300
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-13-resolver-builder.md +322 -322
- package/docs/02-CORE-GUIDES/api-reference/readme.md +279 -279
- package/docs/02-CORE-GUIDES/auto-pagination/auto-pagination-quick-reference.md +351 -351
- package/docs/02-CORE-GUIDES/auto-pagination/auto-pagination-readme.md +277 -277
- package/docs/02-CORE-GUIDES/auto-pagination/examples/auto-pagination-readme.md +178 -178
- package/docs/02-CORE-GUIDES/auto-pagination/examples/common-patterns.ts +351 -351
- package/docs/02-CORE-GUIDES/auto-pagination/examples/paginate-products.ts +384 -384
- package/docs/02-CORE-GUIDES/auto-pagination/examples/paginate-virtual-positions.ts +308 -308
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-01-foundations.md +470 -470
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-02-quick-start.md +713 -713
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-03-configuration.md +754 -754
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-04-advanced-patterns.md +732 -732
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-05-sdk-integration.md +847 -847
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-06-troubleshooting.md +359 -359
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-07-api-reference.md +462 -462
- package/docs/02-CORE-GUIDES/auto-pagination/readme.md +54 -54
- package/docs/02-CORE-GUIDES/data-sources/data-sources-file-operations-error-handling.md +1487 -1487
- package/docs/02-CORE-GUIDES/data-sources/data-sources-quick-reference.md +836 -836
- package/docs/02-CORE-GUIDES/data-sources/data-sources-readme.md +276 -276
- package/docs/02-CORE-GUIDES/data-sources/data-sources-sftp-credential-access-security.md +553 -553
- package/docs/02-CORE-GUIDES/data-sources/examples/common-patterns.ts +409 -409
- package/docs/02-CORE-GUIDES/data-sources/examples/data-sources-readme.md +178 -178
- package/docs/02-CORE-GUIDES/data-sources/examples/s3-operations.ts +308 -308
- package/docs/02-CORE-GUIDES/data-sources/examples/sftp-operations.ts +371 -371
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-01-foundations.md +735 -735
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-02-s3-operations.md +1302 -1302
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-03-sftp-operations.md +1379 -1379
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-04-file-patterns.md +941 -941
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-05-advanced-topics.md +813 -813
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-06-integration-patterns.md +486 -486
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-07-troubleshooting.md +387 -387
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-08-api-reference.md +417 -417
- package/docs/02-CORE-GUIDES/data-sources/readme.md +77 -77
- package/docs/02-CORE-GUIDES/error-handling-guide.md +936 -936
- package/docs/02-CORE-GUIDES/extraction/examples/02-core-guides-extraction-readme.md +116 -116
- package/docs/02-CORE-GUIDES/extraction/examples/common-patterns.ts +428 -428
- package/docs/02-CORE-GUIDES/extraction/examples/extract-inventory-basic.ts +187 -187
- package/docs/02-CORE-GUIDES/extraction/extraction-quick-reference.md +596 -596
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-01-foundations.md +514 -514
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-02-basic-extraction.md +823 -823
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-03-parquet-processing.md +507 -507
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-04-data-enrichment.md +546 -546
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-05-transformation.md +494 -494
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-export-formats.md +458 -458
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-performance.md +138 -138
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-07-api-reference.md +148 -148
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-07-optimization.md +692 -692
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-08-extraction-orchestrator.md +1008 -1008
- package/docs/02-CORE-GUIDES/extraction/readme.md +151 -151
- package/docs/02-CORE-GUIDES/ingestion/examples/_simple-kv-store.ts +40 -40
- package/docs/02-CORE-GUIDES/ingestion/examples/error-recovery.ts +728 -728
- package/docs/02-CORE-GUIDES/ingestion/examples/event-driven.ts +501 -501
- package/docs/02-CORE-GUIDES/ingestion/examples/local-file-ingestion.ts +88 -88
- package/docs/02-CORE-GUIDES/ingestion/examples/parquet-ingestion.ts +117 -117
- package/docs/02-CORE-GUIDES/ingestion/examples/performance-optimized.ts +647 -647
- package/docs/02-CORE-GUIDES/ingestion/examples/s3-csv-ingestion.ts +169 -169
- package/docs/02-CORE-GUIDES/ingestion/examples/sftp-csv-ingestion.ts +134 -134
- package/docs/02-CORE-GUIDES/ingestion/ingestion-quick-reference.md +546 -546
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-01-introduction.md +626 -626
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-02-quick-start.md +658 -658
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-03-data-sources.md +1052 -1052
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-04-field-mapping.md +763 -763
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-05-advanced-parsers.md +676 -676
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-06-batch-api.md +1295 -1295
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-api-reference.md +138 -138
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-state-management.md +1037 -1037
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-08-performance-optimization.md +1349 -1349
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-09-best-practices.md +1893 -1893
- package/docs/02-CORE-GUIDES/ingestion/readme.md +160 -160
- package/docs/02-CORE-GUIDES/logging-guide.md +585 -585
- package/docs/02-CORE-GUIDES/mapping/error-handling-patterns.md +401 -401
- package/docs/02-CORE-GUIDES/mapping/examples/02-core-guides-mapping-readme.md +128 -128
- package/docs/02-CORE-GUIDES/mapping/examples/common-patterns.ts +273 -273
- package/docs/02-CORE-GUIDES/mapping/examples/csv-location-ingestion.json +36 -36
- package/docs/02-CORE-GUIDES/mapping/examples/csv-mapping.ts +242 -242
- package/docs/02-CORE-GUIDES/mapping/examples/graphql-to-parquet-extraction.json +36 -36
- package/docs/02-CORE-GUIDES/mapping/examples/json-mapping.ts +213 -213
- package/docs/02-CORE-GUIDES/mapping/examples/json-product-to-mutation.json +48 -48
- package/docs/02-CORE-GUIDES/mapping/examples/xml-mapping.ts +291 -291
- package/docs/02-CORE-GUIDES/mapping/examples/xml-order-to-mutation.json +45 -45
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-quick-reference.md +463 -463
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-readme.md +227 -227
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-01-introduction.md +222 -222
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-02-quick-start.md +351 -351
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-03-schema-validation.md +569 -569
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-04-mapping-patterns.md +471 -471
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-05-configuration-reference.md +611 -611
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-06-advanced-xpath.md +148 -148
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-06-path-syntax.md +464 -464
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-07-api-reference.md +94 -94
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-07-array-handling.md +307 -307
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-08-custom-resolvers.md +544 -544
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-09-advanced-patterns.md +427 -427
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-10-hooks-and-variables.md +336 -336
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-11-error-handling.md +488 -488
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-12-arguments-vs-nodes.md +383 -383
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-13-best-practices.md +477 -477
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/readme.md +62 -62
- package/docs/02-CORE-GUIDES/mapping/mapping-format-decision-tree.md +480 -480
- package/docs/02-CORE-GUIDES/mapping/mapping-graphql-alias-batching-guide.md +820 -820
- package/docs/02-CORE-GUIDES/mapping/mapping-javascript-objects.md +2369 -2369
- package/docs/02-CORE-GUIDES/mapping/mapping-mapper-comparison-guide.md +682 -682
- package/docs/02-CORE-GUIDES/mapping/modules/02-core-guides-mapping-07-api-reference.md +1327 -1327
- package/docs/02-CORE-GUIDES/mapping/modules/02-core-guides-mapping-08-error-handling.md +1142 -1142
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-04-use-cases.md +891 -891
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-06-helpers-resolvers.md +1126 -1126
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-06-sdk-resolvers.md +199 -199
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-07-api-reference.md +1319 -1319
- package/docs/02-CORE-GUIDES/mapping/readme.md +178 -178
- package/docs/02-CORE-GUIDES/mapping/resolver-registration.md +410 -410
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/common-patterns.ts +226 -226
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/custom-resolvers.ts +227 -227
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/sdk-resolvers-usage.ts +203 -203
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-readme.md +274 -274
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-api-reference.md +679 -679
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-cookbook.md +826 -826
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-guide.md +1330 -1330
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-helpers-reference.md +1437 -1437
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-parameters-reference.md +553 -553
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-troubleshooting.md +854 -854
- package/docs/02-CORE-GUIDES/mapping/resolvers/readme.md +75 -75
- package/docs/02-CORE-GUIDES/parsers/examples/02-core-guides-parsers-readme.md +161 -161
- package/docs/02-CORE-GUIDES/parsers/examples/csv-parser-examples.ts +110 -110
- package/docs/02-CORE-GUIDES/parsers/examples/json-parser-examples.ts +33 -33
- package/docs/02-CORE-GUIDES/parsers/examples/parquet-parser-examples.ts +47 -47
- package/docs/02-CORE-GUIDES/parsers/examples/xml-parser-examples.ts +38 -38
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-01-foundations.md +355 -355
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-02-csv-parser.md +772 -772
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-03-json-parser.md +789 -789
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-04-xml-parser.md +857 -857
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-05-parquet-parser.md +603 -603
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-06-integration-patterns.md +702 -702
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-06-streaming.md +121 -121
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-07-api-reference.md +89 -89
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-07-troubleshooting.md +727 -727
- package/docs/02-CORE-GUIDES/parsers/parsers-quick-reference.md +482 -482
- package/docs/02-CORE-GUIDES/parsers/parsers-readme.md +258 -258
- package/docs/02-CORE-GUIDES/parsers/readme.md +65 -65
- package/docs/02-CORE-GUIDES/readme.md +194 -194
- package/docs/02-CORE-GUIDES/webhook-validation/examples/basic-validation.ts +108 -108
- package/docs/02-CORE-GUIDES/webhook-validation/examples/common-patterns.ts +316 -316
- package/docs/02-CORE-GUIDES/webhook-validation/examples/webhook-validation-readme.md +61 -61
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-01-foundations.md +440 -440
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-02-quick-start.md +525 -525
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-03-versori-integration.md +741 -741
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-04-platform-integration.md +629 -629
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-05-configuration.md +535 -535
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-06-error-handling.md +611 -611
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-06-troubleshooting.md +124 -124
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-07-api-reference.md +511 -511
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-08-rubix-webhooks.md +590 -590
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-09-rubix-event-vs-http-call.md +432 -432
- package/docs/02-CORE-GUIDES/webhook-validation/readme.md +239 -239
- package/docs/02-CORE-GUIDES/webhook-validation/webhook-validation-quick-reference.md +392 -392
- package/docs/03-PATTERN-GUIDES/connector-scenarios/connector-scenarios-quick-reference.md +498 -498
- package/docs/03-PATTERN-GUIDES/connector-scenarios/connector-scenarios-readme.md +313 -313
- package/docs/03-PATTERN-GUIDES/connector-scenarios/examples/common-patterns.ts +612 -612
- package/docs/03-PATTERN-GUIDES/connector-scenarios/examples/connector-scenarios-readme.md +253 -253
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-01-foundations.md +452 -452
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-02-simple-scenarios.md +681 -681
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-03-intermediate-scenarios.md +637 -637
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-04-advanced-scenarios.md +650 -650
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-05-bidirectional-sync.md +233 -233
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-06-production-patterns.md +442 -442
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-07-reference.md +445 -445
- package/docs/03-PATTERN-GUIDES/connector-scenarios/readme.md +31 -31
- package/docs/03-PATTERN-GUIDES/enterprise-integration-patterns.md +1528 -1528
- package/docs/03-PATTERN-GUIDES/error-handling/comprehensive-error-handling-guide.md +1437 -1437
- package/docs/03-PATTERN-GUIDES/error-handling/error-handling-quick-reference.md +390 -390
- package/docs/03-PATTERN-GUIDES/error-handling/examples/common-patterns.ts +438 -438
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-01-foundations.md +362 -362
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-02-error-types.md +850 -850
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-03-utf8-handling.md +456 -456
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-04-error-scenarios.md +658 -658
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-05-calling-patterns.md +671 -671
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-06-retry-strategies.md +1034 -1034
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-07-monitoring.md +653 -653
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-08-api-reference.md +847 -847
- package/docs/03-PATTERN-GUIDES/error-handling/readme.md +36 -36
- package/docs/03-PATTERN-GUIDES/examples/__tests__/readme.md +40 -40
- package/docs/03-PATTERN-GUIDES/examples/__tests__/resolver-examples.test.js +282 -282
- package/docs/03-PATTERN-GUIDES/examples/test-data/03-pattern-guides-readme.md +110 -110
- package/docs/03-PATTERN-GUIDES/examples/test-data/canonical-inventory.json +123 -123
- package/docs/03-PATTERN-GUIDES/examples/test-data/canonical-order.json +171 -171
- package/docs/03-PATTERN-GUIDES/examples/test-data/readme.md +28 -28
- package/docs/03-PATTERN-GUIDES/extraction/extraction-readme.md +15 -15
- package/docs/03-PATTERN-GUIDES/extraction/readme.md +25 -25
- package/docs/03-PATTERN-GUIDES/file-operations/examples/common-patterns.ts +407 -407
- package/docs/03-PATTERN-GUIDES/file-operations/examples/file-operations-readme.md +142 -142
- package/docs/03-PATTERN-GUIDES/file-operations/file-operations-quick-reference.md +462 -462
- package/docs/03-PATTERN-GUIDES/file-operations/file-operations-readme.md +379 -379
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-01-foundations.md +430 -430
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-02-quick-start.md +484 -484
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-03-s3-operations.md +507 -507
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-04-sftp-operations.md +963 -963
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-05-streaming-performance.md +503 -503
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-06-archive-patterns.md +386 -386
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-06-error-handling.md +117 -117
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-07-api-reference.md +78 -78
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-07-testing-troubleshooting.md +567 -567
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-08-api-reference.md +1055 -1055
- package/docs/03-PATTERN-GUIDES/file-operations/readme.md +32 -32
- package/docs/03-PATTERN-GUIDES/ingestion/ingestion-readme.md +15 -15
- package/docs/03-PATTERN-GUIDES/ingestion/readme.md +25 -25
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/batch-processing.ts +130 -130
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/common-patterns.ts +360 -360
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/delta-sync.ts +130 -130
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/integration-patterns-readme.md +100 -100
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/real-time-webhook.ts +398 -398
- package/docs/03-PATTERN-GUIDES/integration-patterns/integration-patterns-quick-reference.md +962 -962
- package/docs/03-PATTERN-GUIDES/integration-patterns/integration-patterns-readme.md +134 -134
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-01-real-time-processing.md +991 -991
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-02-batch-processing.md +1547 -1547
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-03-delta-sync.md +1108 -1108
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-04-webhook-patterns.md +1181 -1181
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-05-error-handling.md +1061 -1061
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-06-advanced-integration-services.md +1547 -1547
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-06-performance.md +109 -109
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-07-api-reference.md +34 -34
- package/docs/03-PATTERN-GUIDES/integration-patterns/readme.md +30 -30
- package/docs/03-PATTERN-GUIDES/logging-minimal-mode.md +128 -128
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/common-patterns.ts +380 -380
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/multiple-connections-readme.md +139 -139
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/parallel-root-connections.ts +149 -149
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/real-world-scenarios.ts +405 -405
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-01-foundations.md +378 -378
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-02-quick-start.md +566 -566
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-03-targeting-connections.md +659 -659
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-04-parallel-queries.md +656 -656
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-05-best-practices.md +624 -624
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-06-api-reference.md +824 -824
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-06-versori.md +119 -119
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-07-api-reference.md +87 -87
- package/docs/03-PATTERN-GUIDES/multiple-connections/multiple-connections-quick-reference.md +353 -353
- package/docs/03-PATTERN-GUIDES/multiple-connections/multiple-connections-readme.md +270 -270
- package/docs/03-PATTERN-GUIDES/multiple-connections/readme.md +30 -30
- package/docs/03-PATTERN-GUIDES/pagination/pagination-readme.md +14 -14
- package/docs/03-PATTERN-GUIDES/pagination/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/parquet/examples/common-patterns.ts +180 -180
- package/docs/03-PATTERN-GUIDES/parquet/examples/read-parquet.ts +48 -48
- package/docs/03-PATTERN-GUIDES/parquet/examples/write-parquet.ts +65 -65
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-01-introduction.md +393 -393
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-02-quick-start.md +572 -572
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-03-reading-parquet.md +525 -525
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-04-writing-parquet.md +554 -554
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-05-graphql-extraction.md +405 -405
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-06-performance.md +104 -104
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-06-s3-integration.md +511 -511
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-07-api-reference.md +90 -90
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-07-performance-optimization.md +525 -525
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-08-best-practices.md +712 -712
- package/docs/03-PATTERN-GUIDES/parquet/parquet-quick-reference.md +683 -683
- package/docs/03-PATTERN-GUIDES/parquet/parquet-readme.md +248 -248
- package/docs/03-PATTERN-GUIDES/parquet/readme.md +32 -32
- package/docs/03-PATTERN-GUIDES/parsers/parsers-readme.md +12 -12
- package/docs/03-PATTERN-GUIDES/parsers/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/readme.md +159 -159
- package/docs/03-PATTERN-GUIDES/webhooks/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/webhooks/webhooks-readme.md +8 -8
- package/docs/04-REFERENCE/architecture/architecture-01-overview.md +427 -427
- package/docs/04-REFERENCE/architecture/architecture-02-client-architecture.md +424 -424
- package/docs/04-REFERENCE/architecture/architecture-03-data-flow.md +690 -690
- package/docs/04-REFERENCE/architecture/architecture-04-service-layer.md +834 -834
- package/docs/04-REFERENCE/architecture/architecture-05-integration-architecture.md +655 -655
- package/docs/04-REFERENCE/architecture/architecture-06-state-management.md +653 -653
- package/docs/04-REFERENCE/architecture/architecture-adding-new-data-sources.md +686 -686
- package/docs/04-REFERENCE/architecture/readme.md +279 -279
- package/docs/04-REFERENCE/platforms/deno/readme.md +117 -117
- package/docs/04-REFERENCE/platforms/nodejs/readme.md +146 -146
- package/docs/04-REFERENCE/platforms/readme.md +135 -135
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-01-introduction.md +398 -398
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-02-quick-start.md +560 -560
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-03-authentication.md +757 -757
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-04-workflows.md +2476 -2476
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-05-connections.md +1167 -1167
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-06-kv-storage.md +990 -990
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-06-state-management.md +121 -121
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-07-api-reference.md +68 -68
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-07-deployment.md +731 -731
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-08-best-practices.md +1111 -1111
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-09-signature-reference.md +766 -766
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-readme.md +299 -299
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-s3-sftp-configuration-guide.md +1425 -1425
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-webhook-api-key-security.md +816 -816
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-webhook-connection-security.md +681 -681
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-workflow-task-types.md +708 -708
- package/docs/04-REFERENCE/platforms/versori/readme.md +108 -108
- package/docs/04-REFERENCE/readme.md +148 -148
- package/docs/04-REFERENCE/resolver-signature/examples/advanced-resolvers.ts +482 -482
- package/docs/04-REFERENCE/resolver-signature/examples/async-resolvers.ts +496 -496
- package/docs/04-REFERENCE/resolver-signature/examples/basic-resolvers.ts +343 -343
- package/docs/04-REFERENCE/resolver-signature/examples/resolver-signature-readme.md +188 -188
- package/docs/04-REFERENCE/resolver-signature/examples/testing-resolvers.ts +463 -463
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-01-foundations.md +286 -286
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-02-parameter-reference.md +643 -643
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-03-basic-examples.md +521 -521
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-04-advanced-patterns.md +739 -739
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-05-sdk-resolvers.md +531 -531
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-06-migration-guide.md +650 -650
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-06-testing.md +125 -125
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-07-api-reference.md +794 -794
- package/docs/04-REFERENCE/resolver-signature/readme.md +64 -64
- package/docs/04-REFERENCE/resolver-signature/resolver-signature-quick-reference.md +270 -270
- package/docs/04-REFERENCE/resolver-signature/resolver-signature-readme.md +351 -351
- package/docs/04-REFERENCE/schema/fluent-commerce-schema.json +764 -764
- package/docs/04-REFERENCE/schema/readme.md +141 -141
- package/docs/04-REFERENCE/testing/examples/04-reference-testing-readme.md +158 -158
- package/docs/04-REFERENCE/testing/examples/fluent-testing.ts +62 -62
- package/docs/04-REFERENCE/testing/examples/health-check.ts +155 -155
- package/docs/04-REFERENCE/testing/examples/integration-test.ts +119 -119
- package/docs/04-REFERENCE/testing/examples/performance-test.ts +183 -183
- package/docs/04-REFERENCE/testing/examples/s3-testing.ts +127 -127
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-01-foundations.md +267 -267
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-02-s3-testing.md +599 -599
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-03-fluent-testing.md +589 -589
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-04-integration-testing.md +699 -699
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-05-debugging.md +478 -478
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-06-cicd-integration.md +463 -463
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-06-preflight-validation.md +131 -131
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-07-best-practices.md +499 -499
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-07-coverage-ci.md +165 -165
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-08-api-reference.md +634 -634
- package/docs/04-REFERENCE/testing/readme.md +86 -86
- package/docs/04-REFERENCE/testing/testing-quick-reference.md +667 -667
- package/docs/04-REFERENCE/testing/testing-readme.md +286 -286
- package/docs/04-REFERENCE/troubleshooting/readme.md +144 -144
- package/docs/04-REFERENCE/troubleshooting/troubleshooting-deno-sftp-compatibility.md +392 -392
- package/docs/template-loading-matrix.md +242 -242
- package/package.json +5 -3
- package/docs/02-CORE-GUIDES/api-reference/cli-profile-integration.md +0 -377
|
@@ -1,488 +1,488 @@
|
|
|
1
|
-
# Error Handling
|
|
2
|
-
|
|
3
|
-
[← Back to GraphQL Mutation Mapping Guide](../graphql-mutation-mapping-readme.md)
|
|
4
|
-
|
|
5
|
-
**Module 11 of 13** | **Level**: Intermediate | **Time**: 20 minutes
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Error Handling
|
|
10
|
-
|
|
11
|
-
Understanding error handling is critical for building robust integrations. The GraphQL Mutation Mapper provides fail-fast error handling to prevent partial data corruption.
|
|
12
|
-
|
|
13
|
-
## Fail-Fast Behavior
|
|
14
|
-
|
|
15
|
-
The GraphQL Mutation Mapper implements **fail-fast error handling** - if ANY error occurs during mapping or validation, the GraphQL mutation is **NEVER SENT** to Fluent Commerce.
|
|
16
|
-
|
|
17
|
-
```
|
|
18
|
-
Parse Source Data
|
|
19
|
-
↓ (throws FileParsingError if invalid)
|
|
20
|
-
Resolve Paths
|
|
21
|
-
↓ (throws PathResolutionError if path not found)
|
|
22
|
-
Map Fields
|
|
23
|
-
↓ (throws MappingError if required field missing)
|
|
24
|
-
Validate Data
|
|
25
|
-
↓ (throws ValidationError if validation fails)
|
|
26
|
-
Execute GraphQL Mutation
|
|
27
|
-
↓ (never reached if any error above)
|
|
28
|
-
✅ ALL DATA COMMITTED or ❌ NO DATA COMMITTED
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
**Key Benefits:**
|
|
32
|
-
|
|
33
|
-
- ✅ **No partial data**: Either complete order is created or nothing
|
|
34
|
-
- ✅ **Data integrity**: No orphaned records or inconsistent state
|
|
35
|
-
- ✅ **Clear errors**: Know exactly what went wrong and where
|
|
36
|
-
- ✅ **Easy rollback**: Nothing to roll back - mutation never executed
|
|
37
|
-
|
|
38
|
-
## Error Types
|
|
39
|
-
|
|
40
|
-
### PathResolutionError
|
|
41
|
-
|
|
42
|
-
Thrown when source path doesn't exist in data.
|
|
43
|
-
|
|
44
|
-
```typescript
|
|
45
|
-
// Mapping config
|
|
46
|
-
{
|
|
47
|
-
"ref": {
|
|
48
|
-
"source": "order.WRONG_PATH.customer-email",
|
|
49
|
-
"required": true
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Result
|
|
54
|
-
PathResolutionError: Cannot resolve path 'order.WRONG_PATH.customer-email'
|
|
55
|
-
path: "order.WRONG_PATH.customer-email"
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
**Impact**: ✅ Mutation **NEVER EXECUTED** - No data created
|
|
59
|
-
|
|
60
|
-
**Common Causes:**
|
|
61
|
-
|
|
62
|
-
- Typo in path expression
|
|
63
|
-
- Source data structure changed
|
|
64
|
-
- Path assumes array but got object
|
|
65
|
-
- Attribute access syntax error (e.g., `element.@attr` instead of `element@attr`)
|
|
66
|
-
|
|
67
|
-
### MappingError
|
|
68
|
-
|
|
69
|
-
Thrown when field mapping fails.
|
|
70
|
-
|
|
71
|
-
```typescript
|
|
72
|
-
// Mapping config
|
|
73
|
-
{
|
|
74
|
-
"ref": {
|
|
75
|
-
"source": "order.missing-field",
|
|
76
|
-
"required": true
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Result
|
|
81
|
-
MappingError: Required field 'ref' is missing or empty
|
|
82
|
-
field: "ref"
|
|
83
|
-
sourcePath: "order.missing-field"
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
**Impact**: ✅ Mutation **NEVER EXECUTED** - No data created
|
|
87
|
-
|
|
88
|
-
**Common Causes:**
|
|
89
|
-
|
|
90
|
-
- Required field is null/undefined/empty string
|
|
91
|
-
- Array validation failed (minItems, maxItems)
|
|
92
|
-
- Type conversion failed
|
|
93
|
-
- Custom resolver threw error
|
|
94
|
-
|
|
95
|
-
### FileParsingError
|
|
96
|
-
|
|
97
|
-
Thrown when XML/JSON parsing fails.
|
|
98
|
-
|
|
99
|
-
```typescript
|
|
100
|
-
// Invalid XML
|
|
101
|
-
<order>
|
|
102
|
-
<customer-email>test@example.com
|
|
103
|
-
<!-- Missing closing tag -->
|
|
104
|
-
|
|
105
|
-
// Result
|
|
106
|
-
FileParsingError: Failed to parse XML: Mismatched opening and closing tags
|
|
107
|
-
fileName: "order.xml"
|
|
108
|
-
code: PARSE_ERROR
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
**Impact**: ✅ Mutation **NEVER ATTEMPTED** - No data created
|
|
112
|
-
|
|
113
|
-
**Common Causes:**
|
|
114
|
-
|
|
115
|
-
- Malformed XML (unclosed tags, invalid characters)
|
|
116
|
-
- Invalid JSON (trailing commas, unquoted keys)
|
|
117
|
-
- Encoding issues (UTF-8 vs Latin-1)
|
|
118
|
-
- File corruption
|
|
119
|
-
|
|
120
|
-
## Error Scenarios
|
|
121
|
-
|
|
122
|
-
### Scenario 1: Wrong Source Path
|
|
123
|
-
|
|
124
|
-
```json
|
|
125
|
-
{
|
|
126
|
-
"email": {
|
|
127
|
-
"source": "customer.WRONG_PATH.email",
|
|
128
|
-
"required": true
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
**Result**: `PathResolutionError` - Mutation never sent
|
|
134
|
-
|
|
135
|
-
**Solution:**
|
|
136
|
-
|
|
137
|
-
```json
|
|
138
|
-
{
|
|
139
|
-
"email": {
|
|
140
|
-
"source": "customer.email", // ✅ Correct path
|
|
141
|
-
"required": true
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
### Scenario 2: Type Mismatch
|
|
147
|
-
|
|
148
|
-
```json
|
|
149
|
-
{
|
|
150
|
-
"quantity": {
|
|
151
|
-
"source": "quantity",
|
|
152
|
-
"resolver": "sdk.parseInt" // But source is "abc"
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
**Result**: `NaN` value → GraphQL rejects with type error
|
|
158
|
-
|
|
159
|
-
**Solution:**
|
|
160
|
-
|
|
161
|
-
```json
|
|
162
|
-
{
|
|
163
|
-
"quantity": {
|
|
164
|
-
"source": "quantity",
|
|
165
|
-
"resolver": "sdk.parseInt", // ✅ Safe parsing with default
|
|
166
|
-
"defaultValue": 1
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### Scenario 3: Required Field with Resolver Returning Empty Value
|
|
172
|
-
|
|
173
|
-
**Problem:** Resolver-only field with `required: true` returns empty value
|
|
174
|
-
|
|
175
|
-
```json
|
|
176
|
-
{
|
|
177
|
-
"customerId": {
|
|
178
|
-
"resolver": "custom.lookupCustomer",
|
|
179
|
-
"required": true
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
```typescript
|
|
185
|
-
'custom.lookupCustomer': async (value, data, config, helpers) => {
|
|
186
|
-
const email = helpers.get(data, 'customer.email');
|
|
187
|
-
const customer = await lookupCustomerByEmail(email);
|
|
188
|
-
return customer?.id; // ❌ Returns undefined if customer not found
|
|
189
|
-
}
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
**Result**: `MappingError: Required field 'customerId' is missing or empty after resolver 'custom.lookupCustomer' execution`
|
|
193
|
-
|
|
194
|
-
**Solution 1:** Ensure resolver always returns a value or throws:
|
|
195
|
-
|
|
196
|
-
```typescript
|
|
197
|
-
'custom.lookupCustomer': async (value, data, config, helpers) => {
|
|
198
|
-
const email = helpers.get(data, 'customer.email');
|
|
199
|
-
if (!email) {
|
|
200
|
-
throw new Error('Email required for customer lookup');
|
|
201
|
-
}
|
|
202
|
-
const customer = await lookupCustomerByEmail(email);
|
|
203
|
-
if (!customer) {
|
|
204
|
-
throw new Error(`Customer not found for email: ${email}`);
|
|
205
|
-
}
|
|
206
|
-
return customer.id; // ✅ Always returns a value or throws
|
|
207
|
-
}
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
**Solution 2:** Use `defaultValue` with resolver:
|
|
211
|
-
|
|
212
|
-
```json
|
|
213
|
-
{
|
|
214
|
-
"customerId": {
|
|
215
|
-
"resolver": "custom.lookupCustomer",
|
|
216
|
-
"required": true,
|
|
217
|
-
"defaultValue": "UNKNOWN" // Fallback if resolver returns empty
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
**Note:** Validation timing for `required` fields:
|
|
223
|
-
- Fields with `source`: Validated **before** resolver execution
|
|
224
|
-
- Resolver-only fields (no `source`): Validated **after** resolver execution
|
|
225
|
-
|
|
226
|
-
### Scenario 4: Array Validation Failure
|
|
227
|
-
|
|
228
|
-
```json
|
|
229
|
-
{
|
|
230
|
-
"items": {
|
|
231
|
-
"_array": true,
|
|
232
|
-
"_validation": { "minItems": 1 },
|
|
233
|
-
"source": "items"
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
**Result** (if empty): `MappingError: Array must have at least 1 items` - Mutation never sent
|
|
239
|
-
|
|
240
|
-
**Solution:**
|
|
241
|
-
|
|
242
|
-
- Ensure source data always has items
|
|
243
|
-
- Or remove `minItems` validation if empty arrays are allowed
|
|
244
|
-
- Or provide default: `"defaultValue": []`
|
|
245
|
-
|
|
246
|
-
### Scenario 4: GraphQL Schema Mismatch
|
|
247
|
-
|
|
248
|
-
```json
|
|
249
|
-
{
|
|
250
|
-
"INVALID_FIELD": "value" // Not in schema
|
|
251
|
-
}
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
**Result**: Mutation sent but **rejected by Fluent** with GraphQL validation error
|
|
255
|
-
|
|
256
|
-
**Solution:**
|
|
257
|
-
|
|
258
|
-
- Run schema introspection: `npx fc-connect introspect-schema`
|
|
259
|
-
- Validate mapping: `npx fc-connect validate-schema`
|
|
260
|
-
- Fix field names to match schema exactly
|
|
261
|
-
|
|
262
|
-
## Error Handling Patterns
|
|
263
|
-
|
|
264
|
-
### Basic Error Handling
|
|
265
|
-
|
|
266
|
-
```typescript
|
|
267
|
-
import {
|
|
268
|
-
XMLParserService,
|
|
269
|
-
GraphQLMutationMapper,
|
|
270
|
-
FileParsingError,
|
|
271
|
-
PathResolutionError,
|
|
272
|
-
MappingError,
|
|
273
|
-
classifyErrors,
|
|
274
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
275
|
-
|
|
276
|
-
try {
|
|
277
|
-
// Parse source data
|
|
278
|
-
const parser = new XMLParserService();
|
|
279
|
-
const parsed = await parser.parse(xmlContent);
|
|
280
|
-
|
|
281
|
-
// Map to mutation
|
|
282
|
-
const mapper = new GraphQLMutationMapper(config, logger, { fluentClient: client });
|
|
283
|
-
const payload = await mapper.map(parsed);
|
|
284
|
-
|
|
285
|
-
// Execute mutation
|
|
286
|
-
const result = await client.graphql(payload);
|
|
287
|
-
|
|
288
|
-
if (result.errors) {
|
|
289
|
-
// Classify GraphQL errors to determine if retryable
|
|
290
|
-
const classification = classifyErrors(result.errors);
|
|
291
|
-
|
|
292
|
-
logger.error('GraphQL error:', {
|
|
293
|
-
errorCode: classification.errorCode,
|
|
294
|
-
message: classification.userMessage,
|
|
295
|
-
retryable: classification.retryable,
|
|
296
|
-
action: classification.action,
|
|
297
|
-
});
|
|
298
|
-
|
|
299
|
-
if (!classification.retryable) {
|
|
300
|
-
throw new Error(classification.userMessage);
|
|
301
|
-
}
|
|
302
|
-
// Retry logic would go here for retryable errors
|
|
303
|
-
throw new Error(classification.userMessage);
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
return result.data; // ✅ Complete data or nothing
|
|
307
|
-
} catch (error) {
|
|
308
|
-
if (error instanceof FileParsingError) {
|
|
309
|
-
// XML/JSON parsing failed
|
|
310
|
-
console.error('Parse error:', {
|
|
311
|
-
code: error.code,
|
|
312
|
-
fileName: error.fileName,
|
|
313
|
-
message: error.message,
|
|
314
|
-
});
|
|
315
|
-
// Alert user: Invalid file
|
|
316
|
-
} else if (error instanceof PathResolutionError) {
|
|
317
|
-
// Wrong path in mapping config
|
|
318
|
-
console.error('Path error:', {
|
|
319
|
-
path: error.path,
|
|
320
|
-
message: error.message,
|
|
321
|
-
});
|
|
322
|
-
// Alert developer: Fix mapping config
|
|
323
|
-
} else if (error instanceof MappingError) {
|
|
324
|
-
// Required field missing or validation failed
|
|
325
|
-
console.error('Mapping error:', {
|
|
326
|
-
field: error.field,
|
|
327
|
-
sourcePath: error.sourcePath,
|
|
328
|
-
message: error.message,
|
|
329
|
-
});
|
|
330
|
-
// Alert developer: Data doesn't match mapping
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
throw error; // ✅ Re-throw to prevent silent failures
|
|
334
|
-
}
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
### Error Handling with Retry Logic
|
|
338
|
-
|
|
339
|
-
```typescript
|
|
340
|
-
async function mapWithRetry(sourceData: any, maxRetries = 3) {
|
|
341
|
-
let attempt = 0;
|
|
342
|
-
|
|
343
|
-
while (attempt < maxRetries) {
|
|
344
|
-
try {
|
|
345
|
-
attempt++;
|
|
346
|
-
const payload = await mapper.map(sourceData);
|
|
347
|
-
return payload;
|
|
348
|
-
} catch (error) {
|
|
349
|
-
// Check if error is retryable
|
|
350
|
-
if (
|
|
351
|
-
error instanceof PathResolutionError ||
|
|
352
|
-
error instanceof MappingError ||
|
|
353
|
-
error instanceof FileParsingError
|
|
354
|
-
) {
|
|
355
|
-
// These are permanent errors - don't retry
|
|
356
|
-
throw error;
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
// Check if error is from Fluent (might be transient)
|
|
360
|
-
if (error.message?.includes('timeout') || error.message?.includes('network')) {
|
|
361
|
-
if (attempt < maxRetries) {
|
|
362
|
-
console.log(`Retry ${attempt}/${maxRetries}`);
|
|
363
|
-
await delay(1000 * attempt);
|
|
364
|
-
continue;
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
throw error;
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
throw new Error('Max retries exceeded');
|
|
373
|
-
}
|
|
374
|
-
```
|
|
375
|
-
|
|
376
|
-
### Common Error Messages
|
|
377
|
-
|
|
378
|
-
| Error | Meaning | Solution |
|
|
379
|
-
| ----------------------------------------------- | -------------------------------------- | ------------------------------------------- |
|
|
380
|
-
| `Required field 'ref' is missing or empty` | Required field has no value | Check source data or add defaultValue |
|
|
381
|
-
| `Required field 'X' is missing or empty after resolver 'Y' execution` | Resolver-only required field returned empty | Fix resolver to always return value or throw |
|
|
382
|
-
| `Expected array but got object at path 'items'` | Source is object not array | Add `_autoWrap: true` or fix source path |
|
|
383
|
-
| `Array must have at least 1 item` | Array is empty but minItems validation | Ensure data has required items |
|
|
384
|
-
| `Cannot resolve path 'order.missing'` | Path doesn't exist in source | Fix mapping configuration path |
|
|
385
|
-
| `Type mismatch: expected Int! but got String` | Wrong data type | Add transform (parseInt) or fix source data |
|
|
386
|
-
|
|
387
|
-
### Error Recovery
|
|
388
|
-
|
|
389
|
-
```typescript
|
|
390
|
-
class MappingErrorHandler {
|
|
391
|
-
async handleError(error: Error, context: any): Promise<void> {
|
|
392
|
-
if (error instanceof PathResolutionError) {
|
|
393
|
-
// Log configuration error
|
|
394
|
-
logger.error('Mapping configuration error:', {
|
|
395
|
-
path: error.path,
|
|
396
|
-
sourceFile: context.fileName,
|
|
397
|
-
mappingConfig: context.mappingName,
|
|
398
|
-
});
|
|
399
|
-
|
|
400
|
-
// Alert developer
|
|
401
|
-
await sendAlert({
|
|
402
|
-
type: 'CONFIG_ERROR',
|
|
403
|
-
severity: 'HIGH',
|
|
404
|
-
message: `Mapping path '${error.path}' not found in source data`,
|
|
405
|
-
action: 'Fix mapping configuration',
|
|
406
|
-
});
|
|
407
|
-
} else if (error instanceof MappingError) {
|
|
408
|
-
// Log data quality issue
|
|
409
|
-
logger.error('Data quality error:', {
|
|
410
|
-
field: error.field,
|
|
411
|
-
sourcePath: error.sourcePath,
|
|
412
|
-
sourceFile: context.fileName,
|
|
413
|
-
});
|
|
414
|
-
|
|
415
|
-
// Alert data team
|
|
416
|
-
await sendAlert({
|
|
417
|
-
type: 'DATA_QUALITY',
|
|
418
|
-
severity: 'MEDIUM',
|
|
419
|
-
message: `Required field '${error.field}' missing in source data`,
|
|
420
|
-
action: 'Check source data format',
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
```
|
|
426
|
-
|
|
427
|
-
### Error Logging Best Practices
|
|
428
|
-
|
|
429
|
-
```typescript
|
|
430
|
-
try {
|
|
431
|
-
const payload = await mapper.map(sourceData);
|
|
432
|
-
const result = await client.graphql(payload);
|
|
433
|
-
|
|
434
|
-
// Log success
|
|
435
|
-
logger.info('Order created successfully', {
|
|
436
|
-
orderRef: result.data.createOrder.ref,
|
|
437
|
-
orderId: result.data.createOrder.id,
|
|
438
|
-
itemCount: payload.variables.input.items.length,
|
|
439
|
-
});
|
|
440
|
-
} catch (error) {
|
|
441
|
-
// Log error with context
|
|
442
|
-
logger.error('Order creation failed', {
|
|
443
|
-
error: error.message,
|
|
444
|
-
errorType: error.constructor.name,
|
|
445
|
-
sourceFile: context.fileName,
|
|
446
|
-
mappingConfig: context.mappingName,
|
|
447
|
-
// Include sanitized source data (remove PII)
|
|
448
|
-
sourceData: sanitizeForLogging(sourceData),
|
|
449
|
-
});
|
|
450
|
-
|
|
451
|
-
throw error;
|
|
452
|
-
}
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
## Best Practices
|
|
456
|
-
|
|
457
|
-
1. **Always wrap mapping in try-catch** - Never let errors go unhandled
|
|
458
|
-
2. **Check error types with instanceof** - Handle different errors appropriately
|
|
459
|
-
3. **Log error context** - Include field names, paths, and source files
|
|
460
|
-
4. **Don't retry permanent errors** - PathResolutionError, MappingError, FileParsingError
|
|
461
|
-
5. **Re-throw after handling** - Prevent silent failures
|
|
462
|
-
6. **Monitor error patterns** - Track error frequencies and alert on anomalies
|
|
463
|
-
7. **Test error paths** - Ensure your error handling works correctly
|
|
464
|
-
|
|
465
|
-
### Error Handling Checklist
|
|
466
|
-
|
|
467
|
-
- [ ] Wrap all mapping calls in try-catch
|
|
468
|
-
- [ ] Handle FileParsingError (invalid source data)
|
|
469
|
-
- [ ] Handle PathResolutionError (wrong mapping config)
|
|
470
|
-
- [ ] Handle MappingError (data validation failures)
|
|
471
|
-
- [ ] Log errors with context (file name, field, path)
|
|
472
|
-
- [ ] Alert appropriate teams (developers vs data teams)
|
|
473
|
-
- [ ] Don't retry permanent errors
|
|
474
|
-
- [ ] Re-throw errors to prevent silent failures
|
|
475
|
-
- [ ] Test error scenarios with invalid data
|
|
476
|
-
|
|
477
|
-
---
|
|
478
|
-
|
|
479
|
-
## Navigation
|
|
480
|
-
|
|
481
|
-
[← Previous: Hooks and Variables](./graphql-mutation-mapping-10-hooks-and-variables.md) | [Back to Guide](../graphql-mutation-mapping-readme.md) | [Next: Arguments vs Nodes →](./graphql-mutation-mapping-12-arguments-vs-nodes.md)
|
|
482
|
-
|
|
483
|
-
## Related Documentation
|
|
484
|
-
|
|
485
|
-
- [Complete Error Handling Guide](../../../../03-PATTERN-GUIDES/error-handling/error-handling-readme.md) - Comprehensive error handling documentation
|
|
486
|
-
- [Error Handling Guide](../../../../03-PATTERN-GUIDES/error-handling/error-handling-readme.md) - Error handling patterns and retry strategies
|
|
487
|
-
- [API Reference](../../../api-reference/api-reference-readme.md) - Complete error class documentation
|
|
488
|
-
- [Module 10: Hooks and Variables](./graphql-mutation-mapping-10-hooks-and-variables.md) - Pre/post-processing hooks
|
|
1
|
+
# Error Handling
|
|
2
|
+
|
|
3
|
+
[← Back to GraphQL Mutation Mapping Guide](../graphql-mutation-mapping-readme.md)
|
|
4
|
+
|
|
5
|
+
**Module 11 of 13** | **Level**: Intermediate | **Time**: 20 minutes
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Error Handling
|
|
10
|
+
|
|
11
|
+
Understanding error handling is critical for building robust integrations. The GraphQL Mutation Mapper provides fail-fast error handling to prevent partial data corruption.
|
|
12
|
+
|
|
13
|
+
## Fail-Fast Behavior
|
|
14
|
+
|
|
15
|
+
The GraphQL Mutation Mapper implements **fail-fast error handling** - if ANY error occurs during mapping or validation, the GraphQL mutation is **NEVER SENT** to Fluent Commerce.
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Parse Source Data
|
|
19
|
+
↓ (throws FileParsingError if invalid)
|
|
20
|
+
Resolve Paths
|
|
21
|
+
↓ (throws PathResolutionError if path not found)
|
|
22
|
+
Map Fields
|
|
23
|
+
↓ (throws MappingError if required field missing)
|
|
24
|
+
Validate Data
|
|
25
|
+
↓ (throws ValidationError if validation fails)
|
|
26
|
+
Execute GraphQL Mutation
|
|
27
|
+
↓ (never reached if any error above)
|
|
28
|
+
✅ ALL DATA COMMITTED or ❌ NO DATA COMMITTED
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Key Benefits:**
|
|
32
|
+
|
|
33
|
+
- ✅ **No partial data**: Either complete order is created or nothing
|
|
34
|
+
- ✅ **Data integrity**: No orphaned records or inconsistent state
|
|
35
|
+
- ✅ **Clear errors**: Know exactly what went wrong and where
|
|
36
|
+
- ✅ **Easy rollback**: Nothing to roll back - mutation never executed
|
|
37
|
+
|
|
38
|
+
## Error Types
|
|
39
|
+
|
|
40
|
+
### PathResolutionError
|
|
41
|
+
|
|
42
|
+
Thrown when source path doesn't exist in data.
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
// Mapping config
|
|
46
|
+
{
|
|
47
|
+
"ref": {
|
|
48
|
+
"source": "order.WRONG_PATH.customer-email",
|
|
49
|
+
"required": true
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Result
|
|
54
|
+
PathResolutionError: Cannot resolve path 'order.WRONG_PATH.customer-email'
|
|
55
|
+
path: "order.WRONG_PATH.customer-email"
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Impact**: ✅ Mutation **NEVER EXECUTED** - No data created
|
|
59
|
+
|
|
60
|
+
**Common Causes:**
|
|
61
|
+
|
|
62
|
+
- Typo in path expression
|
|
63
|
+
- Source data structure changed
|
|
64
|
+
- Path assumes array but got object
|
|
65
|
+
- Attribute access syntax error (e.g., `element.@attr` instead of `element@attr`)
|
|
66
|
+
|
|
67
|
+
### MappingError
|
|
68
|
+
|
|
69
|
+
Thrown when field mapping fails.
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
// Mapping config
|
|
73
|
+
{
|
|
74
|
+
"ref": {
|
|
75
|
+
"source": "order.missing-field",
|
|
76
|
+
"required": true
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Result
|
|
81
|
+
MappingError: Required field 'ref' is missing or empty
|
|
82
|
+
field: "ref"
|
|
83
|
+
sourcePath: "order.missing-field"
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Impact**: ✅ Mutation **NEVER EXECUTED** - No data created
|
|
87
|
+
|
|
88
|
+
**Common Causes:**
|
|
89
|
+
|
|
90
|
+
- Required field is null/undefined/empty string
|
|
91
|
+
- Array validation failed (minItems, maxItems)
|
|
92
|
+
- Type conversion failed
|
|
93
|
+
- Custom resolver threw error
|
|
94
|
+
|
|
95
|
+
### FileParsingError
|
|
96
|
+
|
|
97
|
+
Thrown when XML/JSON parsing fails.
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
// Invalid XML
|
|
101
|
+
<order>
|
|
102
|
+
<customer-email>test@example.com
|
|
103
|
+
<!-- Missing closing tag -->
|
|
104
|
+
|
|
105
|
+
// Result
|
|
106
|
+
FileParsingError: Failed to parse XML: Mismatched opening and closing tags
|
|
107
|
+
fileName: "order.xml"
|
|
108
|
+
code: PARSE_ERROR
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Impact**: ✅ Mutation **NEVER ATTEMPTED** - No data created
|
|
112
|
+
|
|
113
|
+
**Common Causes:**
|
|
114
|
+
|
|
115
|
+
- Malformed XML (unclosed tags, invalid characters)
|
|
116
|
+
- Invalid JSON (trailing commas, unquoted keys)
|
|
117
|
+
- Encoding issues (UTF-8 vs Latin-1)
|
|
118
|
+
- File corruption
|
|
119
|
+
|
|
120
|
+
## Error Scenarios
|
|
121
|
+
|
|
122
|
+
### Scenario 1: Wrong Source Path
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"email": {
|
|
127
|
+
"source": "customer.WRONG_PATH.email",
|
|
128
|
+
"required": true
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Result**: `PathResolutionError` - Mutation never sent
|
|
134
|
+
|
|
135
|
+
**Solution:**
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"email": {
|
|
140
|
+
"source": "customer.email", // ✅ Correct path
|
|
141
|
+
"required": true
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Scenario 2: Type Mismatch
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"quantity": {
|
|
151
|
+
"source": "quantity",
|
|
152
|
+
"resolver": "sdk.parseInt" // But source is "abc"
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Result**: `NaN` value → GraphQL rejects with type error
|
|
158
|
+
|
|
159
|
+
**Solution:**
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"quantity": {
|
|
164
|
+
"source": "quantity",
|
|
165
|
+
"resolver": "sdk.parseInt", // ✅ Safe parsing with default
|
|
166
|
+
"defaultValue": 1
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Scenario 3: Required Field with Resolver Returning Empty Value
|
|
172
|
+
|
|
173
|
+
**Problem:** Resolver-only field with `required: true` returns empty value
|
|
174
|
+
|
|
175
|
+
```json
|
|
176
|
+
{
|
|
177
|
+
"customerId": {
|
|
178
|
+
"resolver": "custom.lookupCustomer",
|
|
179
|
+
"required": true
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
'custom.lookupCustomer': async (value, data, config, helpers) => {
|
|
186
|
+
const email = helpers.get(data, 'customer.email');
|
|
187
|
+
const customer = await lookupCustomerByEmail(email);
|
|
188
|
+
return customer?.id; // ❌ Returns undefined if customer not found
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Result**: `MappingError: Required field 'customerId' is missing or empty after resolver 'custom.lookupCustomer' execution`
|
|
193
|
+
|
|
194
|
+
**Solution 1:** Ensure resolver always returns a value or throws:
|
|
195
|
+
|
|
196
|
+
```typescript
|
|
197
|
+
'custom.lookupCustomer': async (value, data, config, helpers) => {
|
|
198
|
+
const email = helpers.get(data, 'customer.email');
|
|
199
|
+
if (!email) {
|
|
200
|
+
throw new Error('Email required for customer lookup');
|
|
201
|
+
}
|
|
202
|
+
const customer = await lookupCustomerByEmail(email);
|
|
203
|
+
if (!customer) {
|
|
204
|
+
throw new Error(`Customer not found for email: ${email}`);
|
|
205
|
+
}
|
|
206
|
+
return customer.id; // ✅ Always returns a value or throws
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Solution 2:** Use `defaultValue` with resolver:
|
|
211
|
+
|
|
212
|
+
```json
|
|
213
|
+
{
|
|
214
|
+
"customerId": {
|
|
215
|
+
"resolver": "custom.lookupCustomer",
|
|
216
|
+
"required": true,
|
|
217
|
+
"defaultValue": "UNKNOWN" // Fallback if resolver returns empty
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**Note:** Validation timing for `required` fields:
|
|
223
|
+
- Fields with `source`: Validated **before** resolver execution
|
|
224
|
+
- Resolver-only fields (no `source`): Validated **after** resolver execution
|
|
225
|
+
|
|
226
|
+
### Scenario 4: Array Validation Failure
|
|
227
|
+
|
|
228
|
+
```json
|
|
229
|
+
{
|
|
230
|
+
"items": {
|
|
231
|
+
"_array": true,
|
|
232
|
+
"_validation": { "minItems": 1 },
|
|
233
|
+
"source": "items"
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Result** (if empty): `MappingError: Array must have at least 1 items` - Mutation never sent
|
|
239
|
+
|
|
240
|
+
**Solution:**
|
|
241
|
+
|
|
242
|
+
- Ensure source data always has items
|
|
243
|
+
- Or remove `minItems` validation if empty arrays are allowed
|
|
244
|
+
- Or provide default: `"defaultValue": []`
|
|
245
|
+
|
|
246
|
+
### Scenario 4: GraphQL Schema Mismatch
|
|
247
|
+
|
|
248
|
+
```json
|
|
249
|
+
{
|
|
250
|
+
"INVALID_FIELD": "value" // Not in schema
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**Result**: Mutation sent but **rejected by Fluent** with GraphQL validation error
|
|
255
|
+
|
|
256
|
+
**Solution:**
|
|
257
|
+
|
|
258
|
+
- Run schema introspection: `npx fc-connect introspect-schema`
|
|
259
|
+
- Validate mapping: `npx fc-connect validate-schema`
|
|
260
|
+
- Fix field names to match schema exactly
|
|
261
|
+
|
|
262
|
+
## Error Handling Patterns
|
|
263
|
+
|
|
264
|
+
### Basic Error Handling
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
import {
|
|
268
|
+
XMLParserService,
|
|
269
|
+
GraphQLMutationMapper,
|
|
270
|
+
FileParsingError,
|
|
271
|
+
PathResolutionError,
|
|
272
|
+
MappingError,
|
|
273
|
+
classifyErrors,
|
|
274
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
275
|
+
|
|
276
|
+
try {
|
|
277
|
+
// Parse source data
|
|
278
|
+
const parser = new XMLParserService();
|
|
279
|
+
const parsed = await parser.parse(xmlContent);
|
|
280
|
+
|
|
281
|
+
// Map to mutation
|
|
282
|
+
const mapper = new GraphQLMutationMapper(config, logger, { fluentClient: client });
|
|
283
|
+
const payload = await mapper.map(parsed);
|
|
284
|
+
|
|
285
|
+
// Execute mutation
|
|
286
|
+
const result = await client.graphql(payload);
|
|
287
|
+
|
|
288
|
+
if (result.errors) {
|
|
289
|
+
// Classify GraphQL errors to determine if retryable
|
|
290
|
+
const classification = classifyErrors(result.errors);
|
|
291
|
+
|
|
292
|
+
logger.error('GraphQL error:', {
|
|
293
|
+
errorCode: classification.errorCode,
|
|
294
|
+
message: classification.userMessage,
|
|
295
|
+
retryable: classification.retryable,
|
|
296
|
+
action: classification.action,
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
if (!classification.retryable) {
|
|
300
|
+
throw new Error(classification.userMessage);
|
|
301
|
+
}
|
|
302
|
+
// Retry logic would go here for retryable errors
|
|
303
|
+
throw new Error(classification.userMessage);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
return result.data; // ✅ Complete data or nothing
|
|
307
|
+
} catch (error) {
|
|
308
|
+
if (error instanceof FileParsingError) {
|
|
309
|
+
// XML/JSON parsing failed
|
|
310
|
+
console.error('Parse error:', {
|
|
311
|
+
code: error.code,
|
|
312
|
+
fileName: error.fileName,
|
|
313
|
+
message: error.message,
|
|
314
|
+
});
|
|
315
|
+
// Alert user: Invalid file
|
|
316
|
+
} else if (error instanceof PathResolutionError) {
|
|
317
|
+
// Wrong path in mapping config
|
|
318
|
+
console.error('Path error:', {
|
|
319
|
+
path: error.path,
|
|
320
|
+
message: error.message,
|
|
321
|
+
});
|
|
322
|
+
// Alert developer: Fix mapping config
|
|
323
|
+
} else if (error instanceof MappingError) {
|
|
324
|
+
// Required field missing or validation failed
|
|
325
|
+
console.error('Mapping error:', {
|
|
326
|
+
field: error.field,
|
|
327
|
+
sourcePath: error.sourcePath,
|
|
328
|
+
message: error.message,
|
|
329
|
+
});
|
|
330
|
+
// Alert developer: Data doesn't match mapping
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
throw error; // ✅ Re-throw to prevent silent failures
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### Error Handling with Retry Logic
|
|
338
|
+
|
|
339
|
+
```typescript
|
|
340
|
+
async function mapWithRetry(sourceData: any, maxRetries = 3) {
|
|
341
|
+
let attempt = 0;
|
|
342
|
+
|
|
343
|
+
while (attempt < maxRetries) {
|
|
344
|
+
try {
|
|
345
|
+
attempt++;
|
|
346
|
+
const payload = await mapper.map(sourceData);
|
|
347
|
+
return payload;
|
|
348
|
+
} catch (error) {
|
|
349
|
+
// Check if error is retryable
|
|
350
|
+
if (
|
|
351
|
+
error instanceof PathResolutionError ||
|
|
352
|
+
error instanceof MappingError ||
|
|
353
|
+
error instanceof FileParsingError
|
|
354
|
+
) {
|
|
355
|
+
// These are permanent errors - don't retry
|
|
356
|
+
throw error;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// Check if error is from Fluent (might be transient)
|
|
360
|
+
if (error.message?.includes('timeout') || error.message?.includes('network')) {
|
|
361
|
+
if (attempt < maxRetries) {
|
|
362
|
+
console.log(`Retry ${attempt}/${maxRetries}`);
|
|
363
|
+
await delay(1000 * attempt);
|
|
364
|
+
continue;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
throw error;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
throw new Error('Max retries exceeded');
|
|
373
|
+
}
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
### Common Error Messages
|
|
377
|
+
|
|
378
|
+
| Error | Meaning | Solution |
|
|
379
|
+
| ----------------------------------------------- | -------------------------------------- | ------------------------------------------- |
|
|
380
|
+
| `Required field 'ref' is missing or empty` | Required field has no value | Check source data or add defaultValue |
|
|
381
|
+
| `Required field 'X' is missing or empty after resolver 'Y' execution` | Resolver-only required field returned empty | Fix resolver to always return value or throw |
|
|
382
|
+
| `Expected array but got object at path 'items'` | Source is object not array | Add `_autoWrap: true` or fix source path |
|
|
383
|
+
| `Array must have at least 1 item` | Array is empty but minItems validation | Ensure data has required items |
|
|
384
|
+
| `Cannot resolve path 'order.missing'` | Path doesn't exist in source | Fix mapping configuration path |
|
|
385
|
+
| `Type mismatch: expected Int! but got String` | Wrong data type | Add transform (parseInt) or fix source data |
|
|
386
|
+
|
|
387
|
+
### Error Recovery
|
|
388
|
+
|
|
389
|
+
```typescript
|
|
390
|
+
class MappingErrorHandler {
|
|
391
|
+
async handleError(error: Error, context: any): Promise<void> {
|
|
392
|
+
if (error instanceof PathResolutionError) {
|
|
393
|
+
// Log configuration error
|
|
394
|
+
logger.error('Mapping configuration error:', {
|
|
395
|
+
path: error.path,
|
|
396
|
+
sourceFile: context.fileName,
|
|
397
|
+
mappingConfig: context.mappingName,
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
// Alert developer
|
|
401
|
+
await sendAlert({
|
|
402
|
+
type: 'CONFIG_ERROR',
|
|
403
|
+
severity: 'HIGH',
|
|
404
|
+
message: `Mapping path '${error.path}' not found in source data`,
|
|
405
|
+
action: 'Fix mapping configuration',
|
|
406
|
+
});
|
|
407
|
+
} else if (error instanceof MappingError) {
|
|
408
|
+
// Log data quality issue
|
|
409
|
+
logger.error('Data quality error:', {
|
|
410
|
+
field: error.field,
|
|
411
|
+
sourcePath: error.sourcePath,
|
|
412
|
+
sourceFile: context.fileName,
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
// Alert data team
|
|
416
|
+
await sendAlert({
|
|
417
|
+
type: 'DATA_QUALITY',
|
|
418
|
+
severity: 'MEDIUM',
|
|
419
|
+
message: `Required field '${error.field}' missing in source data`,
|
|
420
|
+
action: 'Check source data format',
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### Error Logging Best Practices
|
|
428
|
+
|
|
429
|
+
```typescript
|
|
430
|
+
try {
|
|
431
|
+
const payload = await mapper.map(sourceData);
|
|
432
|
+
const result = await client.graphql(payload);
|
|
433
|
+
|
|
434
|
+
// Log success
|
|
435
|
+
logger.info('Order created successfully', {
|
|
436
|
+
orderRef: result.data.createOrder.ref,
|
|
437
|
+
orderId: result.data.createOrder.id,
|
|
438
|
+
itemCount: payload.variables.input.items.length,
|
|
439
|
+
});
|
|
440
|
+
} catch (error) {
|
|
441
|
+
// Log error with context
|
|
442
|
+
logger.error('Order creation failed', {
|
|
443
|
+
error: error.message,
|
|
444
|
+
errorType: error.constructor.name,
|
|
445
|
+
sourceFile: context.fileName,
|
|
446
|
+
mappingConfig: context.mappingName,
|
|
447
|
+
// Include sanitized source data (remove PII)
|
|
448
|
+
sourceData: sanitizeForLogging(sourceData),
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
throw error;
|
|
452
|
+
}
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
## Best Practices
|
|
456
|
+
|
|
457
|
+
1. **Always wrap mapping in try-catch** - Never let errors go unhandled
|
|
458
|
+
2. **Check error types with instanceof** - Handle different errors appropriately
|
|
459
|
+
3. **Log error context** - Include field names, paths, and source files
|
|
460
|
+
4. **Don't retry permanent errors** - PathResolutionError, MappingError, FileParsingError
|
|
461
|
+
5. **Re-throw after handling** - Prevent silent failures
|
|
462
|
+
6. **Monitor error patterns** - Track error frequencies and alert on anomalies
|
|
463
|
+
7. **Test error paths** - Ensure your error handling works correctly
|
|
464
|
+
|
|
465
|
+
### Error Handling Checklist
|
|
466
|
+
|
|
467
|
+
- [ ] Wrap all mapping calls in try-catch
|
|
468
|
+
- [ ] Handle FileParsingError (invalid source data)
|
|
469
|
+
- [ ] Handle PathResolutionError (wrong mapping config)
|
|
470
|
+
- [ ] Handle MappingError (data validation failures)
|
|
471
|
+
- [ ] Log errors with context (file name, field, path)
|
|
472
|
+
- [ ] Alert appropriate teams (developers vs data teams)
|
|
473
|
+
- [ ] Don't retry permanent errors
|
|
474
|
+
- [ ] Re-throw errors to prevent silent failures
|
|
475
|
+
- [ ] Test error scenarios with invalid data
|
|
476
|
+
|
|
477
|
+
---
|
|
478
|
+
|
|
479
|
+
## Navigation
|
|
480
|
+
|
|
481
|
+
[← Previous: Hooks and Variables](./graphql-mutation-mapping-10-hooks-and-variables.md) | [Back to Guide](../graphql-mutation-mapping-readme.md) | [Next: Arguments vs Nodes →](./graphql-mutation-mapping-12-arguments-vs-nodes.md)
|
|
482
|
+
|
|
483
|
+
## Related Documentation
|
|
484
|
+
|
|
485
|
+
- [Complete Error Handling Guide](../../../../03-PATTERN-GUIDES/error-handling/error-handling-readme.md) - Comprehensive error handling documentation
|
|
486
|
+
- [Error Handling Guide](../../../../03-PATTERN-GUIDES/error-handling/error-handling-readme.md) - Error handling patterns and retry strategies
|
|
487
|
+
- [API Reference](../../../api-reference/api-reference-readme.md) - Complete error class documentation
|
|
488
|
+
- [Module 10: Hooks and Variables](./graphql-mutation-mapping-10-hooks-and-variables.md) - Pre/post-processing hooks
|