@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
package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-parameters-reference.md
CHANGED
|
@@ -1,553 +1,553 @@
|
|
|
1
|
-
# Resolver Parameters Reference
|
|
2
|
-
|
|
3
|
-
**Quick reference for the four resolver parameters**
|
|
4
|
-
|
|
5
|
-
Version: 2.0.0
|
|
6
|
-
Last Updated: 2025-01-14
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Overview
|
|
11
|
-
|
|
12
|
-
Every resolver function receives **four parameters** in this exact order:
|
|
13
|
-
|
|
14
|
-
```typescript
|
|
15
|
-
type ResolverFunction = (
|
|
16
|
-
value: unknown, // Extracted value from 'source' path
|
|
17
|
-
data: unknown, // Full data context with named nodes
|
|
18
|
-
config: unknown, // Configuration object
|
|
19
|
-
helpers: Helpers // Utility functions
|
|
20
|
-
) => unknown | Promise<unknown>;
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
**You don't have to use all four!** Use only what you need for your transformation.
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## Quick Reference Table
|
|
28
|
-
|
|
29
|
-
| Parameter | When to Use | Common Use Cases |
|
|
30
|
-
|-----------|-------------|------------------|
|
|
31
|
-
| `value` | Field has a `source` path | Transform extracted value, add prefix/suffix |
|
|
32
|
-
| `data` | Need to access multiple paths or named nodes | Calculations from multiple sources, cross-referencing |
|
|
33
|
-
| `config` | Need defaults or environment settings | Fallback values, API tokens, retailer IDs |
|
|
34
|
-
| `helpers` | Almost always! | Safe path access, parsing, formatting, validation |
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## Parameter 1: `value`
|
|
39
|
-
|
|
40
|
-
### What Is It?
|
|
41
|
-
|
|
42
|
-
The value extracted from the `source` path in your mapping configuration.
|
|
43
|
-
|
|
44
|
-
### When Defined?
|
|
45
|
-
|
|
46
|
-
- ✅ **Defined:** When your field has a `source` property
|
|
47
|
-
- ❌ **Undefined:** When your field only has a `resolver` (resolver-only field)
|
|
48
|
-
|
|
49
|
-
### Quick Example
|
|
50
|
-
|
|
51
|
-
**With source:**
|
|
52
|
-
```typescript
|
|
53
|
-
// Mapping
|
|
54
|
-
{
|
|
55
|
-
"ref": {
|
|
56
|
-
"source": "orders.order@order-no",
|
|
57
|
-
"resolver": "custom.addPrefix"
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Resolver
|
|
62
|
-
'custom.addPrefix': (value, data, config, helpers) => {
|
|
63
|
-
// value = "ORD-2025-001"
|
|
64
|
-
return `ORDER-${value}`;
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
**Without source (resolver-only):**
|
|
69
|
-
```typescript
|
|
70
|
-
// Mapping
|
|
71
|
-
{
|
|
72
|
-
"totalDiscount": {
|
|
73
|
-
"resolver": "custom.calculateDiscount"
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Resolver
|
|
78
|
-
'custom.calculateDiscount': (value, data, config, helpers) => {
|
|
79
|
-
// value = undefined
|
|
80
|
-
// Use 'data' instead
|
|
81
|
-
const adjustment = helpers.get(data, 'orders.order.totals.adjustment-total.gross-price');
|
|
82
|
-
return Math.abs(helpers.parseFloatSafe(adjustment, 0));
|
|
83
|
-
}
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
###Special Case: Array Items
|
|
87
|
-
|
|
88
|
-
**Important:** For resolvers inside array mappings, `value` contains the **entire source item** with all fields.
|
|
89
|
-
|
|
90
|
-
```typescript
|
|
91
|
-
// Mapping
|
|
92
|
-
{
|
|
93
|
-
"items": {
|
|
94
|
-
"source": "orders.order.product-lineitems.product-lineitem",
|
|
95
|
-
"isArray": true,
|
|
96
|
-
"fields": {
|
|
97
|
-
"totalPrice": {
|
|
98
|
-
"resolver": "custom.calculateItemTotal"
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Resolver
|
|
105
|
-
'custom.calculateItemTotal': (value, data, config, helpers) => {
|
|
106
|
-
// value = THE ENTIRE ITEM OBJECT
|
|
107
|
-
// {
|
|
108
|
-
// "@lineitem-id": "ITEM-001",
|
|
109
|
-
// "product-id": "SKU-WM-001",
|
|
110
|
-
// "quantity": "2",
|
|
111
|
-
// "base-price": "29.99",
|
|
112
|
-
// ...
|
|
113
|
-
// }
|
|
114
|
-
|
|
115
|
-
const item = value;
|
|
116
|
-
const unitPrice = helpers.parseFloatSafe(item['base-price'], 0);
|
|
117
|
-
const quantity = helpers.parseIntSafe(item.quantity, 1);
|
|
118
|
-
return unitPrice * quantity;
|
|
119
|
-
}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## Parameter 2: `data`
|
|
125
|
-
|
|
126
|
-
### What Is It?
|
|
127
|
-
|
|
128
|
-
The complete data context, including:
|
|
129
|
-
- Original source data
|
|
130
|
-
- All named nodes from your mapping's `nodes` config
|
|
131
|
-
|
|
132
|
-
### Structure
|
|
133
|
-
|
|
134
|
-
```typescript
|
|
135
|
-
{
|
|
136
|
-
[nodeName]: parsedNodeData, // Each node you defined
|
|
137
|
-
...originalRootData // Plus the original root data
|
|
138
|
-
}
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### When to Use
|
|
142
|
-
|
|
143
|
-
- Accessing data from multiple paths
|
|
144
|
-
- Using named nodes (parsed XML/JSON within payload)
|
|
145
|
-
- Cross-referencing between data structures
|
|
146
|
-
- Calculations requiring multiple sources
|
|
147
|
-
|
|
148
|
-
### Example: Named Nodes
|
|
149
|
-
|
|
150
|
-
**Mapping with nodes:**
|
|
151
|
-
```json
|
|
152
|
-
{
|
|
153
|
-
"nodes": {
|
|
154
|
-
"radialXml": {
|
|
155
|
-
"extract": "orders.order.custom-attributes.custom-attribute[attribute-id=RadialData]",
|
|
156
|
-
"parse": "xml"
|
|
157
|
-
}
|
|
158
|
-
},
|
|
159
|
-
"fields": {
|
|
160
|
-
"specialInstructions": {
|
|
161
|
-
"resolver": "custom.extractInstructions"
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
**Resolver:**
|
|
168
|
-
```typescript
|
|
169
|
-
'custom.extractInstructions': (value, data, config, helpers) => {
|
|
170
|
-
// data contains:
|
|
171
|
-
// {
|
|
172
|
-
// radialXml: { Order: { SpecialInstructions: {...} } }, // Named node
|
|
173
|
-
// orders: { order: {...} } // Original root
|
|
174
|
-
// }
|
|
175
|
-
|
|
176
|
-
// Access the named node
|
|
177
|
-
const radialData = data.radialXml;
|
|
178
|
-
return helpers.get(radialData, 'Order.SpecialInstructions.Text');
|
|
179
|
-
}
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### Example: Cross-Referencing
|
|
183
|
-
|
|
184
|
-
```typescript
|
|
185
|
-
'custom.findShipGroupForItem': (value, data, config, helpers) => {
|
|
186
|
-
const item = value; // Current item
|
|
187
|
-
const itemId = item['@id'];
|
|
188
|
-
|
|
189
|
-
// Access full context to find related data
|
|
190
|
-
const radialData = data.radial || data;
|
|
191
|
-
const shipGroups = helpers.ensureArray(
|
|
192
|
-
helpers.get(radialData, 'OrderCreateRequest.Order.Shipping.ShipGroups.ShipGroup')
|
|
193
|
-
);
|
|
194
|
-
|
|
195
|
-
// Find which shipment contains this item
|
|
196
|
-
for (const shipGroup of shipGroups) {
|
|
197
|
-
const items = helpers.ensureArray(shipGroup.OrderItems?.Item);
|
|
198
|
-
if (items.some(i => i['@ref'] === itemId)) {
|
|
199
|
-
return shipGroup['@id'];
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
return 'DEFAULT-SHIPGROUP';
|
|
204
|
-
}
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
## Parameter 3: `config`
|
|
210
|
-
|
|
211
|
-
### What Is It?
|
|
212
|
-
|
|
213
|
-
Configuration object passed when calling `mapWithNodes()` or executing resolvers. Contains:
|
|
214
|
-
- Environment-specific settings
|
|
215
|
-
- Default values
|
|
216
|
-
- API credentials
|
|
217
|
-
- Business rules
|
|
218
|
-
|
|
219
|
-
### Typical Structure
|
|
220
|
-
|
|
221
|
-
```typescript
|
|
222
|
-
{
|
|
223
|
-
// Defaults
|
|
224
|
-
defaultRetailerId: '1',
|
|
225
|
-
defaultCurrency: 'USD',
|
|
226
|
-
defaultOrderType: 'HD',
|
|
227
|
-
|
|
228
|
-
// API credentials
|
|
229
|
-
apiToken: process.env.EXTERNAL_API_TOKEN,
|
|
230
|
-
|
|
231
|
-
// Business rules
|
|
232
|
-
discountRules: { ... },
|
|
233
|
-
shippingRates: { ... },
|
|
234
|
-
|
|
235
|
-
// Optional: FluentClient for API calls
|
|
236
|
-
fluentClient?: FluentClient
|
|
237
|
-
}
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
### When to Use
|
|
241
|
-
|
|
242
|
-
- Need fallback/default values
|
|
243
|
-
- Accessing environment-specific settings
|
|
244
|
-
- Making API calls (via `config.fluentClient` or `helpers.fluentClient`)
|
|
245
|
-
- Applying business rules
|
|
246
|
-
|
|
247
|
-
### Examples
|
|
248
|
-
|
|
249
|
-
**Config with fallbacks:**
|
|
250
|
-
```typescript
|
|
251
|
-
const config = {
|
|
252
|
-
defaultRetailerId: '1',
|
|
253
|
-
defaultCurrency: 'USD'
|
|
254
|
-
};
|
|
255
|
-
|
|
256
|
-
builder.withConfigFallback(
|
|
257
|
-
'input.retailer.id',
|
|
258
|
-
'orders.order.retailerId',
|
|
259
|
-
'defaultRetailerId' // Falls back to config.defaultRetailerId
|
|
260
|
-
);
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
**Custom resolver using config:**
|
|
264
|
-
```typescript
|
|
265
|
-
builder.field('input.shippingCost', (data, config, helpers) => {
|
|
266
|
-
const weight = helpers.get(data, 'order.totalWeight', 0);
|
|
267
|
-
const zone = helpers.get(data, 'order.shippingZone', 'domestic');
|
|
268
|
-
|
|
269
|
-
// Use business rules from config
|
|
270
|
-
const rate = config.shippingRates[zone] || config.defaultShippingRate;
|
|
271
|
-
return weight * rate;
|
|
272
|
-
});
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
**Making API calls:**
|
|
276
|
-
```typescript
|
|
277
|
-
builder.field('input.customer.id', async (data, config, helpers) => {
|
|
278
|
-
const customerId = helpers.get(data, 'orders.order.customer.customer-no');
|
|
279
|
-
|
|
280
|
-
// FluentClient available via helpers (or config)
|
|
281
|
-
if (!helpers.fluentClient) {
|
|
282
|
-
throw new Error('FluentClient required');
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
const result = await helpers.fluentClient.graphql({
|
|
286
|
-
query: `query GetCustomer($username: [String]) {
|
|
287
|
-
customers(username: $username, first: 1) {
|
|
288
|
-
edges { node { id } }
|
|
289
|
-
}
|
|
290
|
-
}`,
|
|
291
|
-
variables: { username: [customerId] }
|
|
292
|
-
});
|
|
293
|
-
|
|
294
|
-
return result.data?.customers?.edges?.[0]?.node?.id;
|
|
295
|
-
});
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
---
|
|
299
|
-
|
|
300
|
-
## Parameter 4: `helpers`
|
|
301
|
-
|
|
302
|
-
### What Is It?
|
|
303
|
-
|
|
304
|
-
Collection of 58+ utility functions for common transformations.
|
|
305
|
-
|
|
306
|
-
### Categories
|
|
307
|
-
|
|
308
|
-
1. **Data Access** (2) - `get()`, `ensureArray()`
|
|
309
|
-
2. **Parsing** (3) - `parseFloatSafe()`, `parseIntSafe()`, `safeJsonParse()`
|
|
310
|
-
3. **Formatting** (2) - `formatDate()`, `formatCurrency()`
|
|
311
|
-
4. **Validation** (3) - `isValidEmail()`, `requireField()`, `mapValue()`
|
|
312
|
-
5. **String** (8) - `fullName()`, `truncate()`, `slugify()`, `template()`, etc.
|
|
313
|
-
6. **Object** (7) - `isEmpty()`, `pick()`, `omit()`, `deepClone()`, etc.
|
|
314
|
-
7. **Array Transform** (8) - `groupBy()`, `chunk()`, `flatten()`, `unique()`, etc.
|
|
315
|
-
8. **Array Aggregation** (5) - `sum()`, `avg()`, `min()`, `max()`, `clamp()`
|
|
316
|
-
9. **Date/Time** (5) - `addDays()`, `subtractDays()`, `dateDiff()`, `parseDate()`
|
|
317
|
-
10. **Performance** (3) - `memoize()`, `retry()`, `batchProcess()`
|
|
318
|
-
11. **More...** - Type guards, XML/JSON utilities, function utilities
|
|
319
|
-
|
|
320
|
-
📖 **[Complete Helper Reference](./mapping-resolvers-resolver-helpers-reference.md)**
|
|
321
|
-
|
|
322
|
-
### When to Use
|
|
323
|
-
|
|
324
|
-
**Almost always!** Helpers make your code cleaner, safer, and more readable.
|
|
325
|
-
|
|
326
|
-
### Common Patterns
|
|
327
|
-
|
|
328
|
-
**Safe path access:**
|
|
329
|
-
```typescript
|
|
330
|
-
// ❌ Unsafe
|
|
331
|
-
const email = data.orders?.order?.customer?.['customer-email'];
|
|
332
|
-
|
|
333
|
-
// ✅ Safe with helpers
|
|
334
|
-
const email = helpers.get(data, 'orders.order.customer.customer-email');
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
**Safe parsing:**
|
|
338
|
-
```typescript
|
|
339
|
-
// ❌ Unsafe
|
|
340
|
-
const price = parseFloat(priceString); // NaN if invalid
|
|
341
|
-
|
|
342
|
-
// ✅ Safe with helpers
|
|
343
|
-
const price = helpers.parseFloatSafe(priceString, 0); // 0 if invalid
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
**Handle XML arrays:**
|
|
347
|
-
```typescript
|
|
348
|
-
// ❌ Breaks with single item
|
|
349
|
-
const items = data.order.items.item;
|
|
350
|
-
items.forEach(item => { ... }); // ERROR if single object
|
|
351
|
-
|
|
352
|
-
// ✅ Safe with helpers
|
|
353
|
-
const items = helpers.ensureArray(data.order.items.item);
|
|
354
|
-
items.forEach(item => { ... }); // Always works
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
**Array operations:**
|
|
358
|
-
```typescript
|
|
359
|
-
// ❌ Manual calculation
|
|
360
|
-
let total = 0;
|
|
361
|
-
for (const item of items) {
|
|
362
|
-
total += parseFloat(item.price || 0);
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
// ✅ Clean with helpers
|
|
366
|
-
const total = helpers.sum(items, item => helpers.parseFloatSafe(item.price, 0));
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
---
|
|
370
|
-
|
|
371
|
-
## When to Use Each Parameter
|
|
372
|
-
|
|
373
|
-
### Decision Tree
|
|
374
|
-
|
|
375
|
-
```
|
|
376
|
-
Need to transform extracted value?
|
|
377
|
-
└─> Use `value` (if source exists)
|
|
378
|
-
|
|
379
|
-
Need data from multiple paths?
|
|
380
|
-
└─> Use `data` (with helpers.get())
|
|
381
|
-
|
|
382
|
-
Need defaults or environment settings?
|
|
383
|
-
└─> Use `config`
|
|
384
|
-
|
|
385
|
-
Need utilities (parsing, validation, etc.)?
|
|
386
|
-
└─> Use `helpers` (almost always!)
|
|
387
|
-
|
|
388
|
-
Need to make API calls?
|
|
389
|
-
└─> Use `helpers.fluentClient` (or `config.fluentClient`)
|
|
390
|
-
```
|
|
391
|
-
|
|
392
|
-
### Common Combinations
|
|
393
|
-
|
|
394
|
-
**Pattern 1: Simple transformation (value + helpers)**
|
|
395
|
-
```typescript
|
|
396
|
-
'custom.formatPrice': (value, data, config, helpers) => {
|
|
397
|
-
return helpers.formatCurrency(helpers.parseFloatSafe(value, 0), 2);
|
|
398
|
-
}
|
|
399
|
-
```
|
|
400
|
-
|
|
401
|
-
**Pattern 2: Calculation (data + helpers)**
|
|
402
|
-
```typescript
|
|
403
|
-
'custom.calculateTotal': (value, data, config, helpers) => {
|
|
404
|
-
const items = helpers.ensureArray(helpers.get(data, 'order.items'));
|
|
405
|
-
return helpers.sum(items, item => helpers.parseFloatSafe(item.price, 0));
|
|
406
|
-
}
|
|
407
|
-
```
|
|
408
|
-
|
|
409
|
-
**Pattern 3: With fallback (value + config + helpers)**
|
|
410
|
-
```typescript
|
|
411
|
-
'custom.getCurrency': (value, data, config, helpers) => {
|
|
412
|
-
return value || helpers.get(data, 'order.currency') || config.defaultCurrency;
|
|
413
|
-
}
|
|
414
|
-
```
|
|
415
|
-
|
|
416
|
-
**Pattern 4: Async API call (all four parameters)**
|
|
417
|
-
```typescript
|
|
418
|
-
'custom.lookupCustomer': async (value, data, config, helpers) => {
|
|
419
|
-
const customerId = value || helpers.get(data, 'order.customerId');
|
|
420
|
-
|
|
421
|
-
if (!helpers.fluentClient) {
|
|
422
|
-
return config.defaultCustomerId;
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
const result = await helpers.retry(
|
|
426
|
-
async () => await helpers.fluentClient.graphql({ ... })
|
|
427
|
-
);
|
|
428
|
-
|
|
429
|
-
return result.data?.customer?.id || config.defaultCustomerId;
|
|
430
|
-
}
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
---
|
|
434
|
-
|
|
435
|
-
## Complete Example
|
|
436
|
-
|
|
437
|
-
Here's a resolver that uses all four parameters effectively:
|
|
438
|
-
|
|
439
|
-
```typescript
|
|
440
|
-
import { createResolverBuilder } from '@fluentcommerce/fc-connect-sdk';
|
|
441
|
-
|
|
442
|
-
const builder = createResolverBuilder();
|
|
443
|
-
|
|
444
|
-
// Configuration
|
|
445
|
-
const config = {
|
|
446
|
-
defaultRetailerId: '1',
|
|
447
|
-
defaultCurrency: 'USD',
|
|
448
|
-
defaultShippingRate: 9.99,
|
|
449
|
-
taxRates: {
|
|
450
|
-
'US': 0.08,
|
|
451
|
-
'CA': 0.13,
|
|
452
|
-
'UK': 0.20
|
|
453
|
-
}
|
|
454
|
-
};
|
|
455
|
-
|
|
456
|
-
const resolvers = builder
|
|
457
|
-
// Uses: value + helpers
|
|
458
|
-
.field('input.ref', (value, data, config, helpers) => {
|
|
459
|
-
const orderNo = value || helpers.get(data, 'orders.order@order-no');
|
|
460
|
-
return `ORDER-${orderNo}`;
|
|
461
|
-
})
|
|
462
|
-
|
|
463
|
-
// Uses: data + helpers
|
|
464
|
-
.field('input.totalPrice', (value, data, config, helpers) => {
|
|
465
|
-
const items = helpers.ensureArray(
|
|
466
|
-
helpers.get(data, 'orders.order.product-lineitems.product-lineitem')
|
|
467
|
-
);
|
|
468
|
-
const subtotal = helpers.sum(items, item =>
|
|
469
|
-
helpers.parseFloatSafe(item['gross-price'], 0)
|
|
470
|
-
);
|
|
471
|
-
const shipping = helpers.parseFloatSafe(
|
|
472
|
-
helpers.get(data, 'orders.order.totals.shipping-total.gross-price'),
|
|
473
|
-
0
|
|
474
|
-
);
|
|
475
|
-
return subtotal + shipping;
|
|
476
|
-
})
|
|
477
|
-
|
|
478
|
-
// Uses: data + config + helpers
|
|
479
|
-
.field('input.taxAmount', (value, data, config, helpers) => {
|
|
480
|
-
const country = helpers.get(data, 'orders.order.customer.billing-address.country-code');
|
|
481
|
-
const taxRate = config.taxRates[country] || 0;
|
|
482
|
-
const subtotal = helpers.get(data, 'orders.order.totals.merchandize-total.net-price');
|
|
483
|
-
return helpers.parseFloatSafe(subtotal, 0) * taxRate;
|
|
484
|
-
})
|
|
485
|
-
|
|
486
|
-
// Uses: all four (async with API call)
|
|
487
|
-
.field('input.customer.id', async (value, data, config, helpers) => {
|
|
488
|
-
const customerId = value || helpers.get(data, 'orders.order.customer.customer-no');
|
|
489
|
-
|
|
490
|
-
if (!helpers.fluentClient) {
|
|
491
|
-
helpers.log?.warn('FluentClient not available, using default');
|
|
492
|
-
return config.defaultCustomerId;
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
return await helpers.retry(async () => {
|
|
496
|
-
const result = await helpers.fluentClient.graphql({
|
|
497
|
-
query: `query GetCustomer($username: [String]) {
|
|
498
|
-
customers(username: $username, first: 1) {
|
|
499
|
-
edges { node { id } }
|
|
500
|
-
}
|
|
501
|
-
}`,
|
|
502
|
-
variables: { username: [customerId] }
|
|
503
|
-
});
|
|
504
|
-
|
|
505
|
-
return result.data?.customers?.edges?.[0]?.node?.id || config.defaultCustomerId;
|
|
506
|
-
});
|
|
507
|
-
})
|
|
508
|
-
|
|
509
|
-
.build();
|
|
510
|
-
|
|
511
|
-
export default resolvers;
|
|
512
|
-
```
|
|
513
|
-
|
|
514
|
-
---
|
|
515
|
-
|
|
516
|
-
## Best Practices
|
|
517
|
-
|
|
518
|
-
### ✅ Do's
|
|
519
|
-
|
|
520
|
-
1. **Use helpers for safety** - Avoid direct property access
|
|
521
|
-
2. **Leverage config for defaults** - Never hardcode environment values
|
|
522
|
-
3. **Log important decisions** - Use `helpers.log` for debugging
|
|
523
|
-
4. **Handle async properly** - Always await async operations
|
|
524
|
-
5. **Validate inputs** - Check for null/undefined before processing
|
|
525
|
-
|
|
526
|
-
### ❌ Don'ts
|
|
527
|
-
|
|
528
|
-
1. **Don't assume value exists** - It's undefined for resolver-only fields
|
|
529
|
-
2. **Don't mutate data** - Treat all parameters as immutable
|
|
530
|
-
3. **Don't skip error handling** - Wrap risky operations in try-catch
|
|
531
|
-
4. **Don't hardcode values** - Use config instead
|
|
532
|
-
5. **Don't forget to await** - Async resolvers must be awaited
|
|
533
|
-
|
|
534
|
-
---
|
|
535
|
-
|
|
536
|
-
## See Also
|
|
537
|
-
|
|
538
|
-
- [Main Resolver Guide](./mapping-resolvers-resolver-guide.md) - Getting started and examples
|
|
539
|
-
- [API Reference](./mapping-resolvers-resolver-api-reference.md) - ResolverBuilder methods
|
|
540
|
-
- [Helper Functions Reference](./mapping-resolvers-resolver-helpers-reference.md) - All 54 helper functions
|
|
541
|
-
- [Troubleshooting](./mapping-resolvers-resolver-troubleshooting.md) - Common issues
|
|
542
|
-
- [Cookbook](./mapping-resolvers-resolver-cookbook.md) - Advanced patterns
|
|
543
|
-
|
|
544
|
-
---
|
|
545
|
-
|
|
546
|
-
**Document Version:** 2.0.0
|
|
547
|
-
**SDK Version:** 1.5.0+
|
|
548
|
-
**Last Updated:** 2025-01-14
|
|
549
|
-
|
|
550
|
-
---
|
|
551
|
-
|
|
552
|
-
**License:** MIT
|
|
553
|
-
**Copyright:** © 2025 Fluent Commerce
|
|
1
|
+
# Resolver Parameters Reference
|
|
2
|
+
|
|
3
|
+
**Quick reference for the four resolver parameters**
|
|
4
|
+
|
|
5
|
+
Version: 2.0.0
|
|
6
|
+
Last Updated: 2025-01-14
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
Every resolver function receives **four parameters** in this exact order:
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
type ResolverFunction = (
|
|
16
|
+
value: unknown, // Extracted value from 'source' path
|
|
17
|
+
data: unknown, // Full data context with named nodes
|
|
18
|
+
config: unknown, // Configuration object
|
|
19
|
+
helpers: Helpers // Utility functions
|
|
20
|
+
) => unknown | Promise<unknown>;
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**You don't have to use all four!** Use only what you need for your transformation.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Quick Reference Table
|
|
28
|
+
|
|
29
|
+
| Parameter | When to Use | Common Use Cases |
|
|
30
|
+
|-----------|-------------|------------------|
|
|
31
|
+
| `value` | Field has a `source` path | Transform extracted value, add prefix/suffix |
|
|
32
|
+
| `data` | Need to access multiple paths or named nodes | Calculations from multiple sources, cross-referencing |
|
|
33
|
+
| `config` | Need defaults or environment settings | Fallback values, API tokens, retailer IDs |
|
|
34
|
+
| `helpers` | Almost always! | Safe path access, parsing, formatting, validation |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Parameter 1: `value`
|
|
39
|
+
|
|
40
|
+
### What Is It?
|
|
41
|
+
|
|
42
|
+
The value extracted from the `source` path in your mapping configuration.
|
|
43
|
+
|
|
44
|
+
### When Defined?
|
|
45
|
+
|
|
46
|
+
- ✅ **Defined:** When your field has a `source` property
|
|
47
|
+
- ❌ **Undefined:** When your field only has a `resolver` (resolver-only field)
|
|
48
|
+
|
|
49
|
+
### Quick Example
|
|
50
|
+
|
|
51
|
+
**With source:**
|
|
52
|
+
```typescript
|
|
53
|
+
// Mapping
|
|
54
|
+
{
|
|
55
|
+
"ref": {
|
|
56
|
+
"source": "orders.order@order-no",
|
|
57
|
+
"resolver": "custom.addPrefix"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Resolver
|
|
62
|
+
'custom.addPrefix': (value, data, config, helpers) => {
|
|
63
|
+
// value = "ORD-2025-001"
|
|
64
|
+
return `ORDER-${value}`;
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Without source (resolver-only):**
|
|
69
|
+
```typescript
|
|
70
|
+
// Mapping
|
|
71
|
+
{
|
|
72
|
+
"totalDiscount": {
|
|
73
|
+
"resolver": "custom.calculateDiscount"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Resolver
|
|
78
|
+
'custom.calculateDiscount': (value, data, config, helpers) => {
|
|
79
|
+
// value = undefined
|
|
80
|
+
// Use 'data' instead
|
|
81
|
+
const adjustment = helpers.get(data, 'orders.order.totals.adjustment-total.gross-price');
|
|
82
|
+
return Math.abs(helpers.parseFloatSafe(adjustment, 0));
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
###Special Case: Array Items
|
|
87
|
+
|
|
88
|
+
**Important:** For resolvers inside array mappings, `value` contains the **entire source item** with all fields.
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
// Mapping
|
|
92
|
+
{
|
|
93
|
+
"items": {
|
|
94
|
+
"source": "orders.order.product-lineitems.product-lineitem",
|
|
95
|
+
"isArray": true,
|
|
96
|
+
"fields": {
|
|
97
|
+
"totalPrice": {
|
|
98
|
+
"resolver": "custom.calculateItemTotal"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Resolver
|
|
105
|
+
'custom.calculateItemTotal': (value, data, config, helpers) => {
|
|
106
|
+
// value = THE ENTIRE ITEM OBJECT
|
|
107
|
+
// {
|
|
108
|
+
// "@lineitem-id": "ITEM-001",
|
|
109
|
+
// "product-id": "SKU-WM-001",
|
|
110
|
+
// "quantity": "2",
|
|
111
|
+
// "base-price": "29.99",
|
|
112
|
+
// ...
|
|
113
|
+
// }
|
|
114
|
+
|
|
115
|
+
const item = value;
|
|
116
|
+
const unitPrice = helpers.parseFloatSafe(item['base-price'], 0);
|
|
117
|
+
const quantity = helpers.parseIntSafe(item.quantity, 1);
|
|
118
|
+
return unitPrice * quantity;
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Parameter 2: `data`
|
|
125
|
+
|
|
126
|
+
### What Is It?
|
|
127
|
+
|
|
128
|
+
The complete data context, including:
|
|
129
|
+
- Original source data
|
|
130
|
+
- All named nodes from your mapping's `nodes` config
|
|
131
|
+
|
|
132
|
+
### Structure
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
{
|
|
136
|
+
[nodeName]: parsedNodeData, // Each node you defined
|
|
137
|
+
...originalRootData // Plus the original root data
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### When to Use
|
|
142
|
+
|
|
143
|
+
- Accessing data from multiple paths
|
|
144
|
+
- Using named nodes (parsed XML/JSON within payload)
|
|
145
|
+
- Cross-referencing between data structures
|
|
146
|
+
- Calculations requiring multiple sources
|
|
147
|
+
|
|
148
|
+
### Example: Named Nodes
|
|
149
|
+
|
|
150
|
+
**Mapping with nodes:**
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"nodes": {
|
|
154
|
+
"radialXml": {
|
|
155
|
+
"extract": "orders.order.custom-attributes.custom-attribute[attribute-id=RadialData]",
|
|
156
|
+
"parse": "xml"
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
"fields": {
|
|
160
|
+
"specialInstructions": {
|
|
161
|
+
"resolver": "custom.extractInstructions"
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Resolver:**
|
|
168
|
+
```typescript
|
|
169
|
+
'custom.extractInstructions': (value, data, config, helpers) => {
|
|
170
|
+
// data contains:
|
|
171
|
+
// {
|
|
172
|
+
// radialXml: { Order: { SpecialInstructions: {...} } }, // Named node
|
|
173
|
+
// orders: { order: {...} } // Original root
|
|
174
|
+
// }
|
|
175
|
+
|
|
176
|
+
// Access the named node
|
|
177
|
+
const radialData = data.radialXml;
|
|
178
|
+
return helpers.get(radialData, 'Order.SpecialInstructions.Text');
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Example: Cross-Referencing
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
'custom.findShipGroupForItem': (value, data, config, helpers) => {
|
|
186
|
+
const item = value; // Current item
|
|
187
|
+
const itemId = item['@id'];
|
|
188
|
+
|
|
189
|
+
// Access full context to find related data
|
|
190
|
+
const radialData = data.radial || data;
|
|
191
|
+
const shipGroups = helpers.ensureArray(
|
|
192
|
+
helpers.get(radialData, 'OrderCreateRequest.Order.Shipping.ShipGroups.ShipGroup')
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
// Find which shipment contains this item
|
|
196
|
+
for (const shipGroup of shipGroups) {
|
|
197
|
+
const items = helpers.ensureArray(shipGroup.OrderItems?.Item);
|
|
198
|
+
if (items.some(i => i['@ref'] === itemId)) {
|
|
199
|
+
return shipGroup['@id'];
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return 'DEFAULT-SHIPGROUP';
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Parameter 3: `config`
|
|
210
|
+
|
|
211
|
+
### What Is It?
|
|
212
|
+
|
|
213
|
+
Configuration object passed when calling `mapWithNodes()` or executing resolvers. Contains:
|
|
214
|
+
- Environment-specific settings
|
|
215
|
+
- Default values
|
|
216
|
+
- API credentials
|
|
217
|
+
- Business rules
|
|
218
|
+
|
|
219
|
+
### Typical Structure
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
{
|
|
223
|
+
// Defaults
|
|
224
|
+
defaultRetailerId: '1',
|
|
225
|
+
defaultCurrency: 'USD',
|
|
226
|
+
defaultOrderType: 'HD',
|
|
227
|
+
|
|
228
|
+
// API credentials
|
|
229
|
+
apiToken: process.env.EXTERNAL_API_TOKEN,
|
|
230
|
+
|
|
231
|
+
// Business rules
|
|
232
|
+
discountRules: { ... },
|
|
233
|
+
shippingRates: { ... },
|
|
234
|
+
|
|
235
|
+
// Optional: FluentClient for API calls
|
|
236
|
+
fluentClient?: FluentClient
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### When to Use
|
|
241
|
+
|
|
242
|
+
- Need fallback/default values
|
|
243
|
+
- Accessing environment-specific settings
|
|
244
|
+
- Making API calls (via `config.fluentClient` or `helpers.fluentClient`)
|
|
245
|
+
- Applying business rules
|
|
246
|
+
|
|
247
|
+
### Examples
|
|
248
|
+
|
|
249
|
+
**Config with fallbacks:**
|
|
250
|
+
```typescript
|
|
251
|
+
const config = {
|
|
252
|
+
defaultRetailerId: '1',
|
|
253
|
+
defaultCurrency: 'USD'
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
builder.withConfigFallback(
|
|
257
|
+
'input.retailer.id',
|
|
258
|
+
'orders.order.retailerId',
|
|
259
|
+
'defaultRetailerId' // Falls back to config.defaultRetailerId
|
|
260
|
+
);
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
**Custom resolver using config:**
|
|
264
|
+
```typescript
|
|
265
|
+
builder.field('input.shippingCost', (data, config, helpers) => {
|
|
266
|
+
const weight = helpers.get(data, 'order.totalWeight', 0);
|
|
267
|
+
const zone = helpers.get(data, 'order.shippingZone', 'domestic');
|
|
268
|
+
|
|
269
|
+
// Use business rules from config
|
|
270
|
+
const rate = config.shippingRates[zone] || config.defaultShippingRate;
|
|
271
|
+
return weight * rate;
|
|
272
|
+
});
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Making API calls:**
|
|
276
|
+
```typescript
|
|
277
|
+
builder.field('input.customer.id', async (data, config, helpers) => {
|
|
278
|
+
const customerId = helpers.get(data, 'orders.order.customer.customer-no');
|
|
279
|
+
|
|
280
|
+
// FluentClient available via helpers (or config)
|
|
281
|
+
if (!helpers.fluentClient) {
|
|
282
|
+
throw new Error('FluentClient required');
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
const result = await helpers.fluentClient.graphql({
|
|
286
|
+
query: `query GetCustomer($username: [String]) {
|
|
287
|
+
customers(username: $username, first: 1) {
|
|
288
|
+
edges { node { id } }
|
|
289
|
+
}
|
|
290
|
+
}`,
|
|
291
|
+
variables: { username: [customerId] }
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
return result.data?.customers?.edges?.[0]?.node?.id;
|
|
295
|
+
});
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Parameter 4: `helpers`
|
|
301
|
+
|
|
302
|
+
### What Is It?
|
|
303
|
+
|
|
304
|
+
Collection of 58+ utility functions for common transformations.
|
|
305
|
+
|
|
306
|
+
### Categories
|
|
307
|
+
|
|
308
|
+
1. **Data Access** (2) - `get()`, `ensureArray()`
|
|
309
|
+
2. **Parsing** (3) - `parseFloatSafe()`, `parseIntSafe()`, `safeJsonParse()`
|
|
310
|
+
3. **Formatting** (2) - `formatDate()`, `formatCurrency()`
|
|
311
|
+
4. **Validation** (3) - `isValidEmail()`, `requireField()`, `mapValue()`
|
|
312
|
+
5. **String** (8) - `fullName()`, `truncate()`, `slugify()`, `template()`, etc.
|
|
313
|
+
6. **Object** (7) - `isEmpty()`, `pick()`, `omit()`, `deepClone()`, etc.
|
|
314
|
+
7. **Array Transform** (8) - `groupBy()`, `chunk()`, `flatten()`, `unique()`, etc.
|
|
315
|
+
8. **Array Aggregation** (5) - `sum()`, `avg()`, `min()`, `max()`, `clamp()`
|
|
316
|
+
9. **Date/Time** (5) - `addDays()`, `subtractDays()`, `dateDiff()`, `parseDate()`
|
|
317
|
+
10. **Performance** (3) - `memoize()`, `retry()`, `batchProcess()`
|
|
318
|
+
11. **More...** - Type guards, XML/JSON utilities, function utilities
|
|
319
|
+
|
|
320
|
+
📖 **[Complete Helper Reference](./mapping-resolvers-resolver-helpers-reference.md)**
|
|
321
|
+
|
|
322
|
+
### When to Use
|
|
323
|
+
|
|
324
|
+
**Almost always!** Helpers make your code cleaner, safer, and more readable.
|
|
325
|
+
|
|
326
|
+
### Common Patterns
|
|
327
|
+
|
|
328
|
+
**Safe path access:**
|
|
329
|
+
```typescript
|
|
330
|
+
// ❌ Unsafe
|
|
331
|
+
const email = data.orders?.order?.customer?.['customer-email'];
|
|
332
|
+
|
|
333
|
+
// ✅ Safe with helpers
|
|
334
|
+
const email = helpers.get(data, 'orders.order.customer.customer-email');
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
**Safe parsing:**
|
|
338
|
+
```typescript
|
|
339
|
+
// ❌ Unsafe
|
|
340
|
+
const price = parseFloat(priceString); // NaN if invalid
|
|
341
|
+
|
|
342
|
+
// ✅ Safe with helpers
|
|
343
|
+
const price = helpers.parseFloatSafe(priceString, 0); // 0 if invalid
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
**Handle XML arrays:**
|
|
347
|
+
```typescript
|
|
348
|
+
// ❌ Breaks with single item
|
|
349
|
+
const items = data.order.items.item;
|
|
350
|
+
items.forEach(item => { ... }); // ERROR if single object
|
|
351
|
+
|
|
352
|
+
// ✅ Safe with helpers
|
|
353
|
+
const items = helpers.ensureArray(data.order.items.item);
|
|
354
|
+
items.forEach(item => { ... }); // Always works
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
**Array operations:**
|
|
358
|
+
```typescript
|
|
359
|
+
// ❌ Manual calculation
|
|
360
|
+
let total = 0;
|
|
361
|
+
for (const item of items) {
|
|
362
|
+
total += parseFloat(item.price || 0);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// ✅ Clean with helpers
|
|
366
|
+
const total = helpers.sum(items, item => helpers.parseFloatSafe(item.price, 0));
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## When to Use Each Parameter
|
|
372
|
+
|
|
373
|
+
### Decision Tree
|
|
374
|
+
|
|
375
|
+
```
|
|
376
|
+
Need to transform extracted value?
|
|
377
|
+
└─> Use `value` (if source exists)
|
|
378
|
+
|
|
379
|
+
Need data from multiple paths?
|
|
380
|
+
└─> Use `data` (with helpers.get())
|
|
381
|
+
|
|
382
|
+
Need defaults or environment settings?
|
|
383
|
+
└─> Use `config`
|
|
384
|
+
|
|
385
|
+
Need utilities (parsing, validation, etc.)?
|
|
386
|
+
└─> Use `helpers` (almost always!)
|
|
387
|
+
|
|
388
|
+
Need to make API calls?
|
|
389
|
+
└─> Use `helpers.fluentClient` (or `config.fluentClient`)
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### Common Combinations
|
|
393
|
+
|
|
394
|
+
**Pattern 1: Simple transformation (value + helpers)**
|
|
395
|
+
```typescript
|
|
396
|
+
'custom.formatPrice': (value, data, config, helpers) => {
|
|
397
|
+
return helpers.formatCurrency(helpers.parseFloatSafe(value, 0), 2);
|
|
398
|
+
}
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
**Pattern 2: Calculation (data + helpers)**
|
|
402
|
+
```typescript
|
|
403
|
+
'custom.calculateTotal': (value, data, config, helpers) => {
|
|
404
|
+
const items = helpers.ensureArray(helpers.get(data, 'order.items'));
|
|
405
|
+
return helpers.sum(items, item => helpers.parseFloatSafe(item.price, 0));
|
|
406
|
+
}
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
**Pattern 3: With fallback (value + config + helpers)**
|
|
410
|
+
```typescript
|
|
411
|
+
'custom.getCurrency': (value, data, config, helpers) => {
|
|
412
|
+
return value || helpers.get(data, 'order.currency') || config.defaultCurrency;
|
|
413
|
+
}
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
**Pattern 4: Async API call (all four parameters)**
|
|
417
|
+
```typescript
|
|
418
|
+
'custom.lookupCustomer': async (value, data, config, helpers) => {
|
|
419
|
+
const customerId = value || helpers.get(data, 'order.customerId');
|
|
420
|
+
|
|
421
|
+
if (!helpers.fluentClient) {
|
|
422
|
+
return config.defaultCustomerId;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
const result = await helpers.retry(
|
|
426
|
+
async () => await helpers.fluentClient.graphql({ ... })
|
|
427
|
+
);
|
|
428
|
+
|
|
429
|
+
return result.data?.customer?.id || config.defaultCustomerId;
|
|
430
|
+
}
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
435
|
+
## Complete Example
|
|
436
|
+
|
|
437
|
+
Here's a resolver that uses all four parameters effectively:
|
|
438
|
+
|
|
439
|
+
```typescript
|
|
440
|
+
import { createResolverBuilder } from '@fluentcommerce/fc-connect-sdk';
|
|
441
|
+
|
|
442
|
+
const builder = createResolverBuilder();
|
|
443
|
+
|
|
444
|
+
// Configuration
|
|
445
|
+
const config = {
|
|
446
|
+
defaultRetailerId: '1',
|
|
447
|
+
defaultCurrency: 'USD',
|
|
448
|
+
defaultShippingRate: 9.99,
|
|
449
|
+
taxRates: {
|
|
450
|
+
'US': 0.08,
|
|
451
|
+
'CA': 0.13,
|
|
452
|
+
'UK': 0.20
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
const resolvers = builder
|
|
457
|
+
// Uses: value + helpers
|
|
458
|
+
.field('input.ref', (value, data, config, helpers) => {
|
|
459
|
+
const orderNo = value || helpers.get(data, 'orders.order@order-no');
|
|
460
|
+
return `ORDER-${orderNo}`;
|
|
461
|
+
})
|
|
462
|
+
|
|
463
|
+
// Uses: data + helpers
|
|
464
|
+
.field('input.totalPrice', (value, data, config, helpers) => {
|
|
465
|
+
const items = helpers.ensureArray(
|
|
466
|
+
helpers.get(data, 'orders.order.product-lineitems.product-lineitem')
|
|
467
|
+
);
|
|
468
|
+
const subtotal = helpers.sum(items, item =>
|
|
469
|
+
helpers.parseFloatSafe(item['gross-price'], 0)
|
|
470
|
+
);
|
|
471
|
+
const shipping = helpers.parseFloatSafe(
|
|
472
|
+
helpers.get(data, 'orders.order.totals.shipping-total.gross-price'),
|
|
473
|
+
0
|
|
474
|
+
);
|
|
475
|
+
return subtotal + shipping;
|
|
476
|
+
})
|
|
477
|
+
|
|
478
|
+
// Uses: data + config + helpers
|
|
479
|
+
.field('input.taxAmount', (value, data, config, helpers) => {
|
|
480
|
+
const country = helpers.get(data, 'orders.order.customer.billing-address.country-code');
|
|
481
|
+
const taxRate = config.taxRates[country] || 0;
|
|
482
|
+
const subtotal = helpers.get(data, 'orders.order.totals.merchandize-total.net-price');
|
|
483
|
+
return helpers.parseFloatSafe(subtotal, 0) * taxRate;
|
|
484
|
+
})
|
|
485
|
+
|
|
486
|
+
// Uses: all four (async with API call)
|
|
487
|
+
.field('input.customer.id', async (value, data, config, helpers) => {
|
|
488
|
+
const customerId = value || helpers.get(data, 'orders.order.customer.customer-no');
|
|
489
|
+
|
|
490
|
+
if (!helpers.fluentClient) {
|
|
491
|
+
helpers.log?.warn('FluentClient not available, using default');
|
|
492
|
+
return config.defaultCustomerId;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
return await helpers.retry(async () => {
|
|
496
|
+
const result = await helpers.fluentClient.graphql({
|
|
497
|
+
query: `query GetCustomer($username: [String]) {
|
|
498
|
+
customers(username: $username, first: 1) {
|
|
499
|
+
edges { node { id } }
|
|
500
|
+
}
|
|
501
|
+
}`,
|
|
502
|
+
variables: { username: [customerId] }
|
|
503
|
+
});
|
|
504
|
+
|
|
505
|
+
return result.data?.customers?.edges?.[0]?.node?.id || config.defaultCustomerId;
|
|
506
|
+
});
|
|
507
|
+
})
|
|
508
|
+
|
|
509
|
+
.build();
|
|
510
|
+
|
|
511
|
+
export default resolvers;
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
516
|
+
## Best Practices
|
|
517
|
+
|
|
518
|
+
### ✅ Do's
|
|
519
|
+
|
|
520
|
+
1. **Use helpers for safety** - Avoid direct property access
|
|
521
|
+
2. **Leverage config for defaults** - Never hardcode environment values
|
|
522
|
+
3. **Log important decisions** - Use `helpers.log` for debugging
|
|
523
|
+
4. **Handle async properly** - Always await async operations
|
|
524
|
+
5. **Validate inputs** - Check for null/undefined before processing
|
|
525
|
+
|
|
526
|
+
### ❌ Don'ts
|
|
527
|
+
|
|
528
|
+
1. **Don't assume value exists** - It's undefined for resolver-only fields
|
|
529
|
+
2. **Don't mutate data** - Treat all parameters as immutable
|
|
530
|
+
3. **Don't skip error handling** - Wrap risky operations in try-catch
|
|
531
|
+
4. **Don't hardcode values** - Use config instead
|
|
532
|
+
5. **Don't forget to await** - Async resolvers must be awaited
|
|
533
|
+
|
|
534
|
+
---
|
|
535
|
+
|
|
536
|
+
## See Also
|
|
537
|
+
|
|
538
|
+
- [Main Resolver Guide](./mapping-resolvers-resolver-guide.md) - Getting started and examples
|
|
539
|
+
- [API Reference](./mapping-resolvers-resolver-api-reference.md) - ResolverBuilder methods
|
|
540
|
+
- [Helper Functions Reference](./mapping-resolvers-resolver-helpers-reference.md) - All 54 helper functions
|
|
541
|
+
- [Troubleshooting](./mapping-resolvers-resolver-troubleshooting.md) - Common issues
|
|
542
|
+
- [Cookbook](./mapping-resolvers-resolver-cookbook.md) - Advanced patterns
|
|
543
|
+
|
|
544
|
+
---
|
|
545
|
+
|
|
546
|
+
**Document Version:** 2.0.0
|
|
547
|
+
**SDK Version:** 1.5.0+
|
|
548
|
+
**Last Updated:** 2025-01-14
|
|
549
|
+
|
|
550
|
+
---
|
|
551
|
+
|
|
552
|
+
**License:** MIT
|
|
553
|
+
**Copyright:** © 2025 Fluent Commerce
|