@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,410 +1,410 @@
|
|
|
1
|
-
# Resolver Registration Guide
|
|
2
|
-
|
|
3
|
-
**⏱️ Read Time:** 5 minutes | **When:** Adding custom business logic to your mappings
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Overview
|
|
8
|
-
|
|
9
|
-
Both `GraphQLMutationMapper` and `UniversalMapper` support **custom resolvers** - functions that transform data during mapping. Resolvers can be registered in two ways:
|
|
10
|
-
|
|
11
|
-
1. **Constructor registration** - Pass resolvers when creating the mapper
|
|
12
|
-
2. **Runtime registration** - Register resolvers dynamically using `registerResolver()`
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## GraphQLMutationMapper Resolver Registration
|
|
17
|
-
|
|
18
|
-
### Method 1: Constructor Registration
|
|
19
|
-
|
|
20
|
-
```typescript
|
|
21
|
-
import { GraphQLMutationMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
22
|
-
|
|
23
|
-
const customResolvers = {
|
|
24
|
-
'custom.calculateTax': (value: any, sourceData: any, config: any, helpers: any) => {
|
|
25
|
-
const taxRate = helpers.get(sourceData, 'taxRate') || 0.1;
|
|
26
|
-
return value * (1 + taxRate);
|
|
27
|
-
},
|
|
28
|
-
'custom.formatPhone': (value: any) => {
|
|
29
|
-
return value.replace(/[^0-9]/g, '');
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
const mapper = new GraphQLMutationMapper(config, logger, {
|
|
34
|
-
customResolvers,
|
|
35
|
-
fluentClient: client, // Available as helpers.fluentClient
|
|
36
|
-
context: { retailerId: '1' }, // Available as helpers.context
|
|
37
|
-
});
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
**When to use:**
|
|
41
|
-
- Resolvers are known at mapper creation time
|
|
42
|
-
- Resolvers don't change during runtime
|
|
43
|
-
- You want to pass context (FluentClient, config) to resolvers
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
### Method 2: Runtime Registration (Dynamic)
|
|
48
|
-
|
|
49
|
-
```typescript
|
|
50
|
-
import { GraphQLMutationMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
51
|
-
|
|
52
|
-
const mapper = new GraphQLMutationMapper(config, logger);
|
|
53
|
-
|
|
54
|
-
// Register resolvers dynamically
|
|
55
|
-
mapper.registerResolver('custom.calculateTax', (value: any) => {
|
|
56
|
-
return value * 1.1;
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
mapper.registerResolver('custom.formatPhone', (value: any) => {
|
|
60
|
-
return value.replace(/[^0-9]/g, '');
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// Register multiple at once
|
|
64
|
-
mapper.registerResolvers({
|
|
65
|
-
'custom.double': (value: any) => value * 2,
|
|
66
|
-
'custom.triple': (value: any) => value * 3,
|
|
67
|
-
});
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
**When to use:**
|
|
71
|
-
- Resolvers depend on runtime conditions
|
|
72
|
-
- Resolvers need to be registered conditionally
|
|
73
|
-
- You want to overwrite existing resolvers
|
|
74
|
-
- Resolvers are loaded from external configuration
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
### Resolver Overwriting
|
|
79
|
-
|
|
80
|
-
You can overwrite existing resolvers by registering a new one with the same name:
|
|
81
|
-
|
|
82
|
-
```typescript
|
|
83
|
-
// Register first resolver
|
|
84
|
-
mapper.registerResolver('custom.transform', (value: any) => value + 10);
|
|
85
|
-
|
|
86
|
-
// Overwrite with new resolver
|
|
87
|
-
mapper.registerResolver('custom.transform', (value: any) => value + 20);
|
|
88
|
-
|
|
89
|
-
// Now uses the second resolver (value + 20)
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
## UniversalMapper Resolver Registration
|
|
95
|
-
|
|
96
|
-
### Method 1: Constructor Registration
|
|
97
|
-
|
|
98
|
-
```typescript
|
|
99
|
-
import { UniversalMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
100
|
-
|
|
101
|
-
const mapper = new UniversalMapper(config, logger);
|
|
102
|
-
|
|
103
|
-
// Register resolvers via resolver engine
|
|
104
|
-
mapper.registerResolver('custom.calculateTax', (value, source, config, helpers) => {
|
|
105
|
-
return value * 1.1;
|
|
106
|
-
});
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
### Method 2: Runtime Registration (Dynamic)
|
|
112
|
-
|
|
113
|
-
```typescript
|
|
114
|
-
import { UniversalMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
115
|
-
|
|
116
|
-
const mapper = new UniversalMapper(config, logger);
|
|
117
|
-
|
|
118
|
-
// Register single resolver
|
|
119
|
-
mapper.registerResolver('custom.calculateTax', (value, source, config, helpers) => {
|
|
120
|
-
return value * 1.1;
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
// Register multiple resolvers
|
|
124
|
-
mapper.registerResolvers({
|
|
125
|
-
'custom.double': (value, source, config, helpers) => value * 2,
|
|
126
|
-
'custom.triple': (value, source, config, helpers) => value * 3,
|
|
127
|
-
});
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
|
|
132
|
-
## Resolver Function Signature
|
|
133
|
-
|
|
134
|
-
### GraphQLMutationMapper Resolvers
|
|
135
|
-
|
|
136
|
-
**For `map()` pattern (used as transforms):**
|
|
137
|
-
```typescript
|
|
138
|
-
(value: any) => any | Promise<any>
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
**For `mapWithNodes()` pattern (full signature):**
|
|
142
|
-
```typescript
|
|
143
|
-
(value: any, sourceData: any, config: any, helpers: any) => any | Promise<any>
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
### UniversalMapper Resolvers
|
|
147
|
-
|
|
148
|
-
```typescript
|
|
149
|
-
(value: any, source: any, config: any, helpers: any) => any | Promise<any>
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
**Parameters:**
|
|
153
|
-
- `value` - The current field value (after source extraction)
|
|
154
|
-
- `source` / `sourceData` - The complete source data object
|
|
155
|
-
- `config` - The field configuration
|
|
156
|
-
- `helpers` - Helper functions (get, ensureArray, logger, fluentClient, etc.)
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
## Async Resolver Support
|
|
161
|
-
|
|
162
|
-
Both mappers support **async resolvers**:
|
|
163
|
-
|
|
164
|
-
```typescript
|
|
165
|
-
// Async resolver example
|
|
166
|
-
mapper.registerResolver('custom.fetchPrice', async (value: any, sourceData: any, config: any, helpers: any) => {
|
|
167
|
-
// Make API call
|
|
168
|
-
const price = await helpers.fluentClient.graphql({
|
|
169
|
-
query: `query { product(ref: "${value}") { price } }`,
|
|
170
|
-
});
|
|
171
|
-
return price.data.product.price;
|
|
172
|
-
});
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
**Note:** Async resolvers work automatically - the mapper handles promises correctly.
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
## Using Resolvers in Mapping Config
|
|
180
|
-
|
|
181
|
-
### GraphQLMutationMapper
|
|
182
|
-
|
|
183
|
-
**Pattern 1: `map()` - Use as transform**
|
|
184
|
-
```typescript
|
|
185
|
-
const config = {
|
|
186
|
-
mutation: 'createOrder',
|
|
187
|
-
sourceFormat: 'json',
|
|
188
|
-
arguments: {
|
|
189
|
-
input: {
|
|
190
|
-
total: {
|
|
191
|
-
source: 'order.total',
|
|
192
|
-
transform: 'custom.calculateTax' // ← Uses registered resolver
|
|
193
|
-
},
|
|
194
|
-
},
|
|
195
|
-
},
|
|
196
|
-
};
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
**Pattern 2: `mapWithNodes()` - Use as resolver**
|
|
200
|
-
```typescript
|
|
201
|
-
const config = {
|
|
202
|
-
mutation: 'createOrder',
|
|
203
|
-
sourceFormat: 'json',
|
|
204
|
-
fields: {
|
|
205
|
-
total: {
|
|
206
|
-
source: 'order.total',
|
|
207
|
-
resolver: 'custom.calculateTax' // ← Uses registered resolver
|
|
208
|
-
},
|
|
209
|
-
},
|
|
210
|
-
};
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
### UniversalMapper
|
|
214
|
-
|
|
215
|
-
```typescript
|
|
216
|
-
const config = {
|
|
217
|
-
fields: {
|
|
218
|
-
total: {
|
|
219
|
-
source: 'order.total',
|
|
220
|
-
resolver: 'custom.calculateTax' // ← Uses registered resolver
|
|
221
|
-
},
|
|
222
|
-
},
|
|
223
|
-
};
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
---
|
|
227
|
-
|
|
228
|
-
## Helper Functions Available in Resolvers
|
|
229
|
-
|
|
230
|
-
Resolvers receive a `helpers` object with useful utilities:
|
|
231
|
-
|
|
232
|
-
```typescript
|
|
233
|
-
mapper.registerResolver('custom.example', (value, sourceData, config, helpers) => {
|
|
234
|
-
// Access nested values
|
|
235
|
-
const taxRate = helpers.get(sourceData, 'order.taxRate');
|
|
236
|
-
|
|
237
|
-
// Ensure array
|
|
238
|
-
const items = helpers.ensureArray(sourceData.items);
|
|
239
|
-
|
|
240
|
-
// Logger
|
|
241
|
-
helpers.logger?.info('Processing value:', value);
|
|
242
|
-
|
|
243
|
-
// FluentClient (if provided)
|
|
244
|
-
const product = await helpers.fluentClient?.graphql({ /* ... */ });
|
|
245
|
-
|
|
246
|
-
// Context (if provided)
|
|
247
|
-
const retailerId = helpers.context?.retailerId;
|
|
248
|
-
|
|
249
|
-
// 50+ SDK helpers available
|
|
250
|
-
const uuid = helpers.uuid();
|
|
251
|
-
const formatted = helpers.formatCurrency(value);
|
|
252
|
-
const date = helpers.formatDate(new Date());
|
|
253
|
-
|
|
254
|
-
return value;
|
|
255
|
-
});
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
**Available Helpers:**
|
|
259
|
-
- `get(obj, path)` - Get nested value by path
|
|
260
|
-
- `ensureArray(val)` - Convert to array if needed
|
|
261
|
-
- `logger` - Logger instance
|
|
262
|
-
- `fluentClient` - FluentClient instance (if provided)
|
|
263
|
-
- `context` - Custom context object (if provided)
|
|
264
|
-
- `uuid()`, `formatCurrency()`, `formatDate()`, `parseIntSafe()`, etc. - 50+ SDK helpers
|
|
265
|
-
|
|
266
|
-
---
|
|
267
|
-
|
|
268
|
-
## Real-World Examples
|
|
269
|
-
|
|
270
|
-
### Example 1: Tax Calculation Resolver
|
|
271
|
-
|
|
272
|
-
```typescript
|
|
273
|
-
mapper.registerResolver('custom.calculateTax', (value, sourceData, config, helpers) => {
|
|
274
|
-
const taxRate = helpers.get(sourceData, 'order.taxRate') || 0.1;
|
|
275
|
-
const subtotal = helpers.get(sourceData, 'order.subtotal') || value;
|
|
276
|
-
return subtotal * (1 + taxRate);
|
|
277
|
-
});
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
### Example 2: Phone Number Formatting
|
|
281
|
-
|
|
282
|
-
```typescript
|
|
283
|
-
mapper.registerResolver('custom.formatPhone', (value) => {
|
|
284
|
-
if (!value) return '';
|
|
285
|
-
// Remove all non-digits
|
|
286
|
-
const digits = value.replace(/[^0-9]/g, '');
|
|
287
|
-
// Format as (XXX) XXX-XXXX
|
|
288
|
-
if (digits.length === 10) {
|
|
289
|
-
return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`;
|
|
290
|
-
}
|
|
291
|
-
return value;
|
|
292
|
-
});
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
### Example 3: Async Product Lookup
|
|
296
|
-
|
|
297
|
-
```typescript
|
|
298
|
-
mapper.registerResolver('custom.lookupProduct', async (value, sourceData, config, helpers) => {
|
|
299
|
-
if (!helpers.fluentClient) {
|
|
300
|
-
throw new Error('FluentClient not available');
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
const result = await helpers.fluentClient.graphql({
|
|
304
|
-
query: `query { product(ref: "${value}") { id, name, price } }`,
|
|
305
|
-
});
|
|
306
|
-
|
|
307
|
-
return result.data.product;
|
|
308
|
-
});
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
### Example 4: Conditional Resolver Registration
|
|
312
|
-
|
|
313
|
-
```typescript
|
|
314
|
-
const mapper = new GraphQLMutationMapper(config, logger);
|
|
315
|
-
|
|
316
|
-
// Register resolvers based on environment
|
|
317
|
-
if (process.env.ENVIRONMENT === 'production') {
|
|
318
|
-
mapper.registerResolver('custom.calculateTax', (value) => value * 1.1);
|
|
319
|
-
} else {
|
|
320
|
-
mapper.registerResolver('custom.calculateTax', (value) => value * 1.05); // Lower tax in dev
|
|
321
|
-
}
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
---
|
|
325
|
-
|
|
326
|
-
## Best Practices
|
|
327
|
-
|
|
328
|
-
### ✅ DO
|
|
329
|
-
|
|
330
|
-
1. **Use descriptive resolver names**
|
|
331
|
-
```typescript
|
|
332
|
-
// ✅ GOOD
|
|
333
|
-
mapper.registerResolver('custom.calculateTax', ...);
|
|
334
|
-
mapper.registerResolver('custom.formatPhoneNumber', ...);
|
|
335
|
-
|
|
336
|
-
// ❌ BAD
|
|
337
|
-
mapper.registerResolver('custom.func1', ...);
|
|
338
|
-
mapper.registerResolver('custom.tax', ...);
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
2. **Use `custom.*` prefix for custom resolvers**
|
|
342
|
-
- Avoids conflicts with SDK built-in resolvers
|
|
343
|
-
- Makes it clear these are custom functions
|
|
344
|
-
|
|
345
|
-
3. **Register resolvers before mapping**
|
|
346
|
-
```typescript
|
|
347
|
-
const mapper = new GraphQLMutationMapper(config, logger);
|
|
348
|
-
mapper.registerResolver('custom.transform', ...); // ← Register first
|
|
349
|
-
const result = await mapper.map(data); // ← Then use
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
4. **Handle errors in resolvers**
|
|
353
|
-
```typescript
|
|
354
|
-
mapper.registerResolver('custom.safeParse', (value) => {
|
|
355
|
-
try {
|
|
356
|
-
return JSON.parse(value);
|
|
357
|
-
} catch {
|
|
358
|
-
return null;
|
|
359
|
-
}
|
|
360
|
-
});
|
|
361
|
-
```
|
|
362
|
-
|
|
363
|
-
### ❌ DON'T
|
|
364
|
-
|
|
365
|
-
1. **Don't register resolvers with SDK names**
|
|
366
|
-
```typescript
|
|
367
|
-
// ❌ BAD - conflicts with SDK resolver
|
|
368
|
-
mapper.registerResolver('sdk.parseInt', ...);
|
|
369
|
-
|
|
370
|
-
// ✅ GOOD - use custom prefix
|
|
371
|
-
mapper.registerResolver('custom.parseInt', ...);
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
2. **Don't mutate source data in resolvers**
|
|
375
|
-
```typescript
|
|
376
|
-
// ❌ BAD - mutates source
|
|
377
|
-
mapper.registerResolver('custom.transform', (value, sourceData) => {
|
|
378
|
-
sourceData.modified = true; // Don't do this!
|
|
379
|
-
return value;
|
|
380
|
-
});
|
|
381
|
-
```
|
|
382
|
-
|
|
383
|
-
3. **Don't register resolvers after mapping**
|
|
384
|
-
```typescript
|
|
385
|
-
// ❌ BAD - resolver not available
|
|
386
|
-
const result = await mapper.map(data);
|
|
387
|
-
mapper.registerResolver('custom.transform', ...); // Too late!
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
---
|
|
391
|
-
|
|
392
|
-
## Comparison: Constructor vs Runtime Registration
|
|
393
|
-
|
|
394
|
-
| Feature | Constructor Registration | Runtime Registration |
|
|
395
|
-
|---------|------------------------|---------------------|
|
|
396
|
-
| **When to use** | Resolvers known at creation | Resolvers depend on runtime |
|
|
397
|
-
| **Context access** | ✅ Yes (via options) | ⚠️ Limited (no context in `map()` pattern) |
|
|
398
|
-
| **Overwriting** | ❌ No (set once) | ✅ Yes (can overwrite) |
|
|
399
|
-
| **Conditional** | ⚠️ Possible but awkward | ✅ Easy |
|
|
400
|
-
| **Best for** | Production code | Dynamic/configurable resolvers |
|
|
401
|
-
|
|
402
|
-
---
|
|
403
|
-
|
|
404
|
-
## Related Documentation
|
|
405
|
-
|
|
406
|
-
- [Error Handling Patterns](./error-handling-patterns.md) - How to handle resolver errors
|
|
407
|
-
- [Mapper Comparison Guide](./mapping-mapper-comparison-guide.md) - Complete mapper comparison
|
|
408
|
-
- [GraphQL Mutation Mapping](../graphql-mutation-mapping/) - GraphQLMutationMapper details
|
|
409
|
-
- [Universal Mapping](./) - UniversalMapper details
|
|
410
|
-
|
|
1
|
+
# Resolver Registration Guide
|
|
2
|
+
|
|
3
|
+
**⏱️ Read Time:** 5 minutes | **When:** Adding custom business logic to your mappings
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
Both `GraphQLMutationMapper` and `UniversalMapper` support **custom resolvers** - functions that transform data during mapping. Resolvers can be registered in two ways:
|
|
10
|
+
|
|
11
|
+
1. **Constructor registration** - Pass resolvers when creating the mapper
|
|
12
|
+
2. **Runtime registration** - Register resolvers dynamically using `registerResolver()`
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## GraphQLMutationMapper Resolver Registration
|
|
17
|
+
|
|
18
|
+
### Method 1: Constructor Registration
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { GraphQLMutationMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
22
|
+
|
|
23
|
+
const customResolvers = {
|
|
24
|
+
'custom.calculateTax': (value: any, sourceData: any, config: any, helpers: any) => {
|
|
25
|
+
const taxRate = helpers.get(sourceData, 'taxRate') || 0.1;
|
|
26
|
+
return value * (1 + taxRate);
|
|
27
|
+
},
|
|
28
|
+
'custom.formatPhone': (value: any) => {
|
|
29
|
+
return value.replace(/[^0-9]/g, '');
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const mapper = new GraphQLMutationMapper(config, logger, {
|
|
34
|
+
customResolvers,
|
|
35
|
+
fluentClient: client, // Available as helpers.fluentClient
|
|
36
|
+
context: { retailerId: '1' }, // Available as helpers.context
|
|
37
|
+
});
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**When to use:**
|
|
41
|
+
- Resolvers are known at mapper creation time
|
|
42
|
+
- Resolvers don't change during runtime
|
|
43
|
+
- You want to pass context (FluentClient, config) to resolvers
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
### Method 2: Runtime Registration (Dynamic)
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
import { GraphQLMutationMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
51
|
+
|
|
52
|
+
const mapper = new GraphQLMutationMapper(config, logger);
|
|
53
|
+
|
|
54
|
+
// Register resolvers dynamically
|
|
55
|
+
mapper.registerResolver('custom.calculateTax', (value: any) => {
|
|
56
|
+
return value * 1.1;
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
mapper.registerResolver('custom.formatPhone', (value: any) => {
|
|
60
|
+
return value.replace(/[^0-9]/g, '');
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// Register multiple at once
|
|
64
|
+
mapper.registerResolvers({
|
|
65
|
+
'custom.double': (value: any) => value * 2,
|
|
66
|
+
'custom.triple': (value: any) => value * 3,
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**When to use:**
|
|
71
|
+
- Resolvers depend on runtime conditions
|
|
72
|
+
- Resolvers need to be registered conditionally
|
|
73
|
+
- You want to overwrite existing resolvers
|
|
74
|
+
- Resolvers are loaded from external configuration
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### Resolver Overwriting
|
|
79
|
+
|
|
80
|
+
You can overwrite existing resolvers by registering a new one with the same name:
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
// Register first resolver
|
|
84
|
+
mapper.registerResolver('custom.transform', (value: any) => value + 10);
|
|
85
|
+
|
|
86
|
+
// Overwrite with new resolver
|
|
87
|
+
mapper.registerResolver('custom.transform', (value: any) => value + 20);
|
|
88
|
+
|
|
89
|
+
// Now uses the second resolver (value + 20)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## UniversalMapper Resolver Registration
|
|
95
|
+
|
|
96
|
+
### Method 1: Constructor Registration
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
import { UniversalMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
100
|
+
|
|
101
|
+
const mapper = new UniversalMapper(config, logger);
|
|
102
|
+
|
|
103
|
+
// Register resolvers via resolver engine
|
|
104
|
+
mapper.registerResolver('custom.calculateTax', (value, source, config, helpers) => {
|
|
105
|
+
return value * 1.1;
|
|
106
|
+
});
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
### Method 2: Runtime Registration (Dynamic)
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
import { UniversalMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
115
|
+
|
|
116
|
+
const mapper = new UniversalMapper(config, logger);
|
|
117
|
+
|
|
118
|
+
// Register single resolver
|
|
119
|
+
mapper.registerResolver('custom.calculateTax', (value, source, config, helpers) => {
|
|
120
|
+
return value * 1.1;
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
// Register multiple resolvers
|
|
124
|
+
mapper.registerResolvers({
|
|
125
|
+
'custom.double': (value, source, config, helpers) => value * 2,
|
|
126
|
+
'custom.triple': (value, source, config, helpers) => value * 3,
|
|
127
|
+
});
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Resolver Function Signature
|
|
133
|
+
|
|
134
|
+
### GraphQLMutationMapper Resolvers
|
|
135
|
+
|
|
136
|
+
**For `map()` pattern (used as transforms):**
|
|
137
|
+
```typescript
|
|
138
|
+
(value: any) => any | Promise<any>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**For `mapWithNodes()` pattern (full signature):**
|
|
142
|
+
```typescript
|
|
143
|
+
(value: any, sourceData: any, config: any, helpers: any) => any | Promise<any>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### UniversalMapper Resolvers
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
(value: any, source: any, config: any, helpers: any) => any | Promise<any>
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Parameters:**
|
|
153
|
+
- `value` - The current field value (after source extraction)
|
|
154
|
+
- `source` / `sourceData` - The complete source data object
|
|
155
|
+
- `config` - The field configuration
|
|
156
|
+
- `helpers` - Helper functions (get, ensureArray, logger, fluentClient, etc.)
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Async Resolver Support
|
|
161
|
+
|
|
162
|
+
Both mappers support **async resolvers**:
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
// Async resolver example
|
|
166
|
+
mapper.registerResolver('custom.fetchPrice', async (value: any, sourceData: any, config: any, helpers: any) => {
|
|
167
|
+
// Make API call
|
|
168
|
+
const price = await helpers.fluentClient.graphql({
|
|
169
|
+
query: `query { product(ref: "${value}") { price } }`,
|
|
170
|
+
});
|
|
171
|
+
return price.data.product.price;
|
|
172
|
+
});
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Note:** Async resolvers work automatically - the mapper handles promises correctly.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Using Resolvers in Mapping Config
|
|
180
|
+
|
|
181
|
+
### GraphQLMutationMapper
|
|
182
|
+
|
|
183
|
+
**Pattern 1: `map()` - Use as transform**
|
|
184
|
+
```typescript
|
|
185
|
+
const config = {
|
|
186
|
+
mutation: 'createOrder',
|
|
187
|
+
sourceFormat: 'json',
|
|
188
|
+
arguments: {
|
|
189
|
+
input: {
|
|
190
|
+
total: {
|
|
191
|
+
source: 'order.total',
|
|
192
|
+
transform: 'custom.calculateTax' // ← Uses registered resolver
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Pattern 2: `mapWithNodes()` - Use as resolver**
|
|
200
|
+
```typescript
|
|
201
|
+
const config = {
|
|
202
|
+
mutation: 'createOrder',
|
|
203
|
+
sourceFormat: 'json',
|
|
204
|
+
fields: {
|
|
205
|
+
total: {
|
|
206
|
+
source: 'order.total',
|
|
207
|
+
resolver: 'custom.calculateTax' // ← Uses registered resolver
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### UniversalMapper
|
|
214
|
+
|
|
215
|
+
```typescript
|
|
216
|
+
const config = {
|
|
217
|
+
fields: {
|
|
218
|
+
total: {
|
|
219
|
+
source: 'order.total',
|
|
220
|
+
resolver: 'custom.calculateTax' // ← Uses registered resolver
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
};
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Helper Functions Available in Resolvers
|
|
229
|
+
|
|
230
|
+
Resolvers receive a `helpers` object with useful utilities:
|
|
231
|
+
|
|
232
|
+
```typescript
|
|
233
|
+
mapper.registerResolver('custom.example', (value, sourceData, config, helpers) => {
|
|
234
|
+
// Access nested values
|
|
235
|
+
const taxRate = helpers.get(sourceData, 'order.taxRate');
|
|
236
|
+
|
|
237
|
+
// Ensure array
|
|
238
|
+
const items = helpers.ensureArray(sourceData.items);
|
|
239
|
+
|
|
240
|
+
// Logger
|
|
241
|
+
helpers.logger?.info('Processing value:', value);
|
|
242
|
+
|
|
243
|
+
// FluentClient (if provided)
|
|
244
|
+
const product = await helpers.fluentClient?.graphql({ /* ... */ });
|
|
245
|
+
|
|
246
|
+
// Context (if provided)
|
|
247
|
+
const retailerId = helpers.context?.retailerId;
|
|
248
|
+
|
|
249
|
+
// 50+ SDK helpers available
|
|
250
|
+
const uuid = helpers.uuid();
|
|
251
|
+
const formatted = helpers.formatCurrency(value);
|
|
252
|
+
const date = helpers.formatDate(new Date());
|
|
253
|
+
|
|
254
|
+
return value;
|
|
255
|
+
});
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Available Helpers:**
|
|
259
|
+
- `get(obj, path)` - Get nested value by path
|
|
260
|
+
- `ensureArray(val)` - Convert to array if needed
|
|
261
|
+
- `logger` - Logger instance
|
|
262
|
+
- `fluentClient` - FluentClient instance (if provided)
|
|
263
|
+
- `context` - Custom context object (if provided)
|
|
264
|
+
- `uuid()`, `formatCurrency()`, `formatDate()`, `parseIntSafe()`, etc. - 50+ SDK helpers
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## Real-World Examples
|
|
269
|
+
|
|
270
|
+
### Example 1: Tax Calculation Resolver
|
|
271
|
+
|
|
272
|
+
```typescript
|
|
273
|
+
mapper.registerResolver('custom.calculateTax', (value, sourceData, config, helpers) => {
|
|
274
|
+
const taxRate = helpers.get(sourceData, 'order.taxRate') || 0.1;
|
|
275
|
+
const subtotal = helpers.get(sourceData, 'order.subtotal') || value;
|
|
276
|
+
return subtotal * (1 + taxRate);
|
|
277
|
+
});
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Example 2: Phone Number Formatting
|
|
281
|
+
|
|
282
|
+
```typescript
|
|
283
|
+
mapper.registerResolver('custom.formatPhone', (value) => {
|
|
284
|
+
if (!value) return '';
|
|
285
|
+
// Remove all non-digits
|
|
286
|
+
const digits = value.replace(/[^0-9]/g, '');
|
|
287
|
+
// Format as (XXX) XXX-XXXX
|
|
288
|
+
if (digits.length === 10) {
|
|
289
|
+
return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`;
|
|
290
|
+
}
|
|
291
|
+
return value;
|
|
292
|
+
});
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### Example 3: Async Product Lookup
|
|
296
|
+
|
|
297
|
+
```typescript
|
|
298
|
+
mapper.registerResolver('custom.lookupProduct', async (value, sourceData, config, helpers) => {
|
|
299
|
+
if (!helpers.fluentClient) {
|
|
300
|
+
throw new Error('FluentClient not available');
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
const result = await helpers.fluentClient.graphql({
|
|
304
|
+
query: `query { product(ref: "${value}") { id, name, price } }`,
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
return result.data.product;
|
|
308
|
+
});
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### Example 4: Conditional Resolver Registration
|
|
312
|
+
|
|
313
|
+
```typescript
|
|
314
|
+
const mapper = new GraphQLMutationMapper(config, logger);
|
|
315
|
+
|
|
316
|
+
// Register resolvers based on environment
|
|
317
|
+
if (process.env.ENVIRONMENT === 'production') {
|
|
318
|
+
mapper.registerResolver('custom.calculateTax', (value) => value * 1.1);
|
|
319
|
+
} else {
|
|
320
|
+
mapper.registerResolver('custom.calculateTax', (value) => value * 1.05); // Lower tax in dev
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## Best Practices
|
|
327
|
+
|
|
328
|
+
### ✅ DO
|
|
329
|
+
|
|
330
|
+
1. **Use descriptive resolver names**
|
|
331
|
+
```typescript
|
|
332
|
+
// ✅ GOOD
|
|
333
|
+
mapper.registerResolver('custom.calculateTax', ...);
|
|
334
|
+
mapper.registerResolver('custom.formatPhoneNumber', ...);
|
|
335
|
+
|
|
336
|
+
// ❌ BAD
|
|
337
|
+
mapper.registerResolver('custom.func1', ...);
|
|
338
|
+
mapper.registerResolver('custom.tax', ...);
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
2. **Use `custom.*` prefix for custom resolvers**
|
|
342
|
+
- Avoids conflicts with SDK built-in resolvers
|
|
343
|
+
- Makes it clear these are custom functions
|
|
344
|
+
|
|
345
|
+
3. **Register resolvers before mapping**
|
|
346
|
+
```typescript
|
|
347
|
+
const mapper = new GraphQLMutationMapper(config, logger);
|
|
348
|
+
mapper.registerResolver('custom.transform', ...); // ← Register first
|
|
349
|
+
const result = await mapper.map(data); // ← Then use
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
4. **Handle errors in resolvers**
|
|
353
|
+
```typescript
|
|
354
|
+
mapper.registerResolver('custom.safeParse', (value) => {
|
|
355
|
+
try {
|
|
356
|
+
return JSON.parse(value);
|
|
357
|
+
} catch {
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### ❌ DON'T
|
|
364
|
+
|
|
365
|
+
1. **Don't register resolvers with SDK names**
|
|
366
|
+
```typescript
|
|
367
|
+
// ❌ BAD - conflicts with SDK resolver
|
|
368
|
+
mapper.registerResolver('sdk.parseInt', ...);
|
|
369
|
+
|
|
370
|
+
// ✅ GOOD - use custom prefix
|
|
371
|
+
mapper.registerResolver('custom.parseInt', ...);
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
2. **Don't mutate source data in resolvers**
|
|
375
|
+
```typescript
|
|
376
|
+
// ❌ BAD - mutates source
|
|
377
|
+
mapper.registerResolver('custom.transform', (value, sourceData) => {
|
|
378
|
+
sourceData.modified = true; // Don't do this!
|
|
379
|
+
return value;
|
|
380
|
+
});
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
3. **Don't register resolvers after mapping**
|
|
384
|
+
```typescript
|
|
385
|
+
// ❌ BAD - resolver not available
|
|
386
|
+
const result = await mapper.map(data);
|
|
387
|
+
mapper.registerResolver('custom.transform', ...); // Too late!
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
## Comparison: Constructor vs Runtime Registration
|
|
393
|
+
|
|
394
|
+
| Feature | Constructor Registration | Runtime Registration |
|
|
395
|
+
|---------|------------------------|---------------------|
|
|
396
|
+
| **When to use** | Resolvers known at creation | Resolvers depend on runtime |
|
|
397
|
+
| **Context access** | ✅ Yes (via options) | ⚠️ Limited (no context in `map()` pattern) |
|
|
398
|
+
| **Overwriting** | ❌ No (set once) | ✅ Yes (can overwrite) |
|
|
399
|
+
| **Conditional** | ⚠️ Possible but awkward | ✅ Easy |
|
|
400
|
+
| **Best for** | Production code | Dynamic/configurable resolvers |
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
## Related Documentation
|
|
405
|
+
|
|
406
|
+
- [Error Handling Patterns](./error-handling-patterns.md) - How to handle resolver errors
|
|
407
|
+
- [Mapper Comparison Guide](./mapping-mapper-comparison-guide.md) - Complete mapper comparison
|
|
408
|
+
- [GraphQL Mutation Mapping](../graphql-mutation-mapping/) - GraphQLMutationMapper details
|
|
409
|
+
- [Universal Mapping](./) - UniversalMapper details
|
|
410
|
+
|